{"version":3,"file":"userorbit.umd.cjs","names":["defaultErrorMap","defaultErrorMap","regex","defaultErrorMap","isRecord","z.lazy","z.union","z.string","z.number","z.boolean","z.null","z.array","z.record","z.object","z.literal","z.enum","isRecord","z.string","z.union","z.object","z.literal","z.number","z.discriminatedUnion","z.enum","D","a","F","x","P","v","B","q","W","T","_","U","K","j","z","G","w","R","I","L","b","J","Q","C","V","O","Y","URLPattern","logger","logger","cn","URLPattern","getSessionId","logger","logger","getSessionId","logger","logger","config","z.enum","z.object","z.string","z.record","z.array","z.number","z.literal","z.discriminatedUnion","z.boolean","z.union","z.date","z.null","logger","z.object","z.number","z.literal","z.enum","logger","builderWindow","logger","URLPattern","logger","config","logger","config","logger","logger","disposeEnvironmentSubscription","ensureEnvironmentSubscription","config","w","g","_","n","m","u","l","b","k","x","C","z","V","M","$","i","r","o","I","e","P","v","A","p","D","H","d","T","E","L","j","y","F","f","c","a","s","O","G","q","N","B","J","K","Q","R","c","r","o","D","C","A","T","F","q","x","P","g","j","f","z","B","w","k","n","e","a","v","l","s","u","i","a","s","h","t","o","i","u","f","n","e","r","X","cn","v","d","m","p","y","_","b","S","l","c","defaultAttributes","forwardRef","createElement","defaultAttributes","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","IconHome","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","useState","isNode","mixColor","global","tokens","component","mixColor","u","f","r","i","NotificationButton","createContext","useRef","createContext","createContext","useId","useRef","useContext","jsx","React.cloneElement","React.Component","useId","useCallback","useMemo","jsx","usePresence","useContext","useId","useCallback","isValidElement","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","usePresence","useMemo","useRef","useState","useContext","jsx","Fragment","noop","warning","noop","noop","createContext","index","createContext","useContext","useMemo","useCallback","createContext","useContext","useRef","createProjectionNode","useContext","jsxs","jsx","forwardRef","useContext","clamp","clamp","calcOrigin","scrapeMotionValuesFromProps","useMemo","useMemo","Fragment","useMemo","createElement","filterEvents","noop","clamp","getAnimatableNone","isNotNull","mixNumber","mixNumber","mixNumber","clamp","clamp","noop","noop","clamp","mixNumber","clamp","noop","createState","id","mixNumber","mixNumber","clamp","mixNumber","mixNumber","noop","noop","mixNumber","usePresence","useContext","jsx","Component","mixNumber","noop","mixNumber","clamp","mixNumber","id","noop","getComputedStyle","scrapeMotionValuesFromProps","Fragment","cn","React","useState","useRef","logger","logger","useState","isPlainObject","hasOwn","getDefaultState","MutationObserver","React.createContext","useQueryClient","React.useContext","React.createContext","React.useContext","React.createContext","React.useContext","useQueryClient","React.useState","React.useCallback","useQueryClient","React.useState","MutationObserver","React.useSyncExternalStore","React.useCallback","React.useCallback","React.createContext","React.useMemo","React.useContext","createSlot","React.forwardRef","isSlottable","React.isValidElement","React.cloneElement","createSlotClone","getElementRef","mergeProps","React.Fragment","Fragment2","SLOTTABLE_IDENTIFIER","createSlot","React.forwardRef","useCallbackRef","React.useRef","React.useMemo","useCallbackRef","useCallbackRef","React.useRef","React.createContext","React.forwardRef","React.useContext","React.useState","React.useLayoutEffect","React.useState","React","count","clamp","computePosition","arrow","clamp","flip","hide","offset","shift","limitShift","size","isNode","isElement","isHTMLElement","getComputedStyle","isHTMLElement","isElement","offset","offset$1","shift","shift$1","flip","flip$1","size","size$1","hide","hide$1","arrow","arrow$1","limitShift","limitShift$1","React.useRef","React.useState","React.useCallback","React.useMemo","index","useLayoutEffect","NAME","Arrow","React.forwardRef","Root","React.useState","React.useState","ANCHOR_NAME","React.forwardRef","React.useRef","CONTENT_NAME","arrow","floatingUIarrow","useCallbackRef","ARROW_NAME","ArrowPrimitive.Root","Root2","PORTAL_NAME","Portal","React.forwardRef","React.useState","ReactDOM","React.useReducer","React2.useState","React2.useRef","React2.useCallback","getElementRef","React2.cloneElement","React.useRef","React.useCallback","React.useState","React","useLayoutEffect","React.forwardRef","usePopperScope","React.useRef","React.useCallback","Tooltip","React.useState","React.useMemo","PopperPrimitive.Root","TRIGGER_NAME","React.forwardRef","PopperPrimitive.Anchor","PORTAL_NAME","PortalProvider","usePortalContext","PortalPrimitive","CONTENT_NAME","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","ARROW_NAME","PopperPrimitive.Arrow","Trigger","Content2","r","Link","forwardRef","forwardRef","isMacOs","useMemo","isMobile","useState","React","Tip.Provider","Tip.Root","Tip.Trigger","Tip.Portal","Tip.Content","Tip.Arrow","LinkBase","buttonVariants","Button","forwardRef","React.forwardRef","React","createSlot","React.useContext","React.createContext","React.forwardRef","React.useState","useCallbackRef","React.useRef","React.useCallback","React.useRef","React.useMemo","useState","React.useLayoutEffect","React.useEffect","React.createElement","React.forwardRef","React.useRef","React.useState","React.createElement","React.Fragment","React.cloneElement","React.useMemo","React.createElement","handleScroll","React.useRef","React.useState","React.useCallback","handleScroll","React.createElement","React.Fragment","React.forwardRef","React.createElement","SideCar","useCallbackRef","React.useRef","React.useCallback","usePopperScope","React.useState","PopperPrimitive.Root","TRIGGER_NAME","React.forwardRef","PopperPrimitive.Anchor","Fragment","PORTAL_NAME","PortalPrimitive","CONTENT_NAME","ReactDOM.createPortal","Slot","createSlot","RemoveScroll","PopperPrimitive.Content","React.useMemo","ARROW_NAME","PopperPrimitive.Arrow","Root2","Trigger","Icon","Content2","Popover","React.useRef","React.useState","PopperPrimitive.Root","React.useCallback","React.forwardRef","PopperPrimitive.Anchor","PopoverTrigger","PortalPrimitive","PopoverContent","Slot","createSlot","RemoveScroll","PopperPrimitive.Content","PopperPrimitive.Arrow","Popover","PopoverPrimitive.Root","PopoverPrimitive.Trigger","React.forwardRef","PopoverPrimitive.Content","forwardRef","createElement","forwardRef","createElement","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","forwardRef","useState","useRef","UserorbitBranding","getElementText","isElementNode","getElementText","isElementNode","eventPathContains","useRef","useRef","useState","useMemo","_Fragment","UserorbitBranding","useCallback","CircleHelp","React","useCallback","_Fragment","Button","Loader2","React.forwardRef","useState","useRef","useCallback","useRef","useState","useMemo","_Fragment","React","Button","React","cn","escapeHtml","CheckCircle2","PlayCircle","logger","Avatar","getSubscriberDisplayName","getReplyPlaceholderName","useState","Button","CommentItem","_Fragment","useQueryClient","useState","Button","_Fragment","logger","useQueryClient","useState","useRef","Button","n","r","t","e","FALLBACK_IMAGE_ASPECT_RATIO","snarkdown","useState","useCallback","logger","logger","React.useState","React.useRef","React.useCallback","PlayCircle","Button","React2.useState","React2.useRef","__defProp","__defNormalProp","__publicField","React.Component","React.createElement","createContext","useContext","React.useState","logger","_Fragment","useState","React","Filter","useState","useCallback","logger","useState","Button","_Fragment","useQueryClient","ownerDocument","index","useState","useRef","useMemo","Loader2","_Fragment","Button","logger","disposeEnvironmentSubscription","replayWindow","getSessionId","useRef","createPortal","useState","useRef","useCallback","config","useState","useRef","useMemo","useCallback","_Fragment","createPortal","createPortal","createPortal","_Fragment","logger","MAX_ATTACHMENT_BYTES","_Fragment","useState","useRef","useMemo","useCallback","Popover","SelectPrimitive.Root","SelectPrimitive.Trigger","SelectPrimitive.Value","SelectPrimitive.Icon","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Item","SelectPrimitive.ItemText","SelectPrimitive.ItemIndicator","logger","React.useState","React.useMemo","React.useCallback","PlayCircle","Button","HighlightJS","logger","useQueryClient","React.useMemo","logger","React.useState","Button","_Fragment","React.useMemo","React.useRef","React.Fragment","React.useState","React.useRef","React.useMemo","useState","useMemo","_Fragment","React.useState","useQueryClient","React.useRef","React.useMemo","React.useCallback","Loader2","logger","useState","Loader2","logger","React","useState","useRef","Button","MoreHorizontal","_Fragment","useState","React.useRef","React.useMemo","useCallback","cn","React.Fragment","useState","_Fragment","NotificationButton","useRef","ReactDOM.createPortal","React.forwardRef","React.isValidElement","React.cloneElement","React.Fragment","React.forwardRef","cn","config","useCallback","customEvent","useState","config","useRef","_Fragment","CheckCircle","useState","ReactDOM","logger","DRAWER_CLOSED_EVENT","useState","_Fragment","NotificationButton","useRef","ReactDOM.createPortal","useRef","useState","useState","useRef","cn","useCallback","Loader2","_Fragment","useRef","useMemo","cn","Button","useState","useRef","useMemo","cn","useState","cn","useState","useRef","useMemo","cn","React.useState","React.forwardRef","React.useRef","cn","React.forwardRef","cn","_Fragment","config","useState","useRef","_Fragment","logger","useState","ReactDOM","config","logger","useMemo","useState","useRef","getSessionId","triggerSurvey","_Fragment","ReactDOM","logger","React","config","logger","triggerSurvey","config","logger","config","triggerSurvey","logger","logger","config","triggerSurvey","logger","config","logger","config","config","logger","logger","errorHandler","config","logger","logger","config","logger","logger","config","logger","triggerSurveyInternal","factory","global","__create","__defProp$3","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__esmMin","err","fn","res","__commonJSMin","mod","cb","__exportAll","target","name","all","no_symbols","__copyProps","from","keys","i","n","key","to","except","k","desc","__toESM","isNodeMode","__toCommonJS","hasGlobalPrivacyControl","init_privacySignals","validatePrivacyPreferences","input","value","fields","updatePrivacyPreferences","entries","changed","preferences","listener","listeners","getPrivacyPreferences","privacyGeneration","generations","purpose","privacyAllowed","subscribePrivacyPreferences","privacyPreferencesFromInit","choices","section","init_privacyPreferences","util","objectUtil","ZodParsedType","getParsedType","init_util","assertIs","assertNever","obj","item","items","validKeys","filtered","object","arr","checker","val","joinValues","array","separator","first","second","data","ZodIssueCode","ZodError","init_ZodError","sub","subs","actualProto","issues","mapper","_mapper","issue","fieldErrors","processError","error","curr","el","formErrors","firstEl","errorMap","init_en","message","_ctx","getErrorMap","overrideErrorMap","init_errors$2","addIssueToContext","overrideMap","makeIssue","ctx","x","ParseStatus","INVALID","DIRTY","OK","isAborted","isDirty","isValid","isAsync","init_parseUtil","params","fullPath","path","issueData","fullIssue","errorMessage","maps","errorMaps","m","map","arrayValue","s","results","status","syncPairs","pair","pairs","finalObject","init_typeAliases","errorUtil","init_errorUtil","processCreateParams","invalid_type_error","required_error","iss","timeRegexSource","secondsRegexSource","args","secondsQuantifier","timeRegex","datetimeRegex","regex","dateRegexSource","opts","isValidIP","version","ip","isValidJWT","jwtRegex","jwt","header","base64","decoded","alg","isValidCidr","floatSafeRemainder","valDecCount","stepDecCount","step","decCount","deepPartialify","schema","ZodObject","newShape","fieldSchema","ZodOptional","ZodArray","ZodNullable","ZodTuple","mergeValues","aType","a","bType","b","bKeys","sharedKeys","newObj","sharedValue","newArray","index","itemA","itemB","createZodEnum","ZodEnum","ZodFirstPartyTypeKind","ParseInputLazyPath","handleResult","ZodType","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegex","ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","ZodUnion","getDiscriminator","ZodDiscriminatedUnion","ZodIntersection","ZodRecord","ZodMap","ZodSet","ZodFunction","ZodLazy","ZodLiteral","ZodNativeEnum","ZodPromise","ZodEffects","ZodDefault","ZodCatch","ZodNaN","ZodBranded","ZodPipeline","ZodReadonly","stringType","numberType","booleanType","dateType","nullType","arrayType","objectType","unionType","discriminatedUnionType","recordType","lazyType","literalType","enumType","init_types$3","parent","result","maybeAsyncResult","getIssueProperties","check","setError","refinementData","refinement","def","option","incoming","defaultValueFunc","catchValueFunc","This","tooBig","tooSmall","options","minLength","maxLength","len","ch","min","max","minDate","maxDate","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","mask","newField","handleResults","unionErrors","childCtx","dirty","types","type","discriminator","discriminatorValue","optionsMap","discriminatorValues","handleParsed","parsedLeft","parsedRight","merged","left","right","itemIndex","schemas","keyType","valueType","third","finalMap","finalizeSet","parsedSet","element","elements","minSize","maxSize","size","makeArgsIssue","makeReturnsIssue","returns","me","parsedArgs","parsedReturns","returnType","func","expectedValues","enumValues","values","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","acc","inner","base","preprocess","newCtx","inResult","freeze","\"ZodString\"","\"ZodNumber\"","\"ZodNaN\"","\"ZodBigInt\"","\"ZodBoolean\"","\"ZodDate\"","\"ZodSymbol\"","\"ZodUndefined\"","\"ZodNull\"","\"ZodAny\"","\"ZodUnknown\"","\"ZodNever\"","\"ZodVoid\"","\"ZodArray\"","\"ZodObject\"","\"ZodUnion\"","\"ZodDiscriminatedUnion\"","\"ZodIntersection\"","\"ZodTuple\"","\"ZodRecord\"","\"ZodMap\"","\"ZodSet\"","\"ZodFunction\"","\"ZodLazy\"","\"ZodLiteral\"","\"ZodEnum\"","\"ZodEffects\"","\"ZodNativeEnum\"","\"ZodOptional\"","\"ZodNullable\"","\"ZodDefault\"","\"ZodCatch\"","\"ZodPromise\"","\"ZodBranded\"","\"ZodPipeline\"","\"ZodReadonly\"","init_external","init_zod","validateTargetingEligibility","limitIssues","getPreflightLimitIssues","parsed","ZTargetingEligibilityV1","eligibility","stats","getTreeStats","evaluateNode","node","resolver","resolvers","context","isEvaluationResult","child","evaluateTargetingEligibility","validation","TARGETING_AST_V1_CAPABILITY","TARGETING_LEAF_SOURCES","isRecord$2","ZTargetingJsonValue","ZTargetingOperand","ZTargetingConditionNode","ZTargetingNode","init_targeting$1","nodeCount","maximumDepth","ids","duplicateIds","visit","depth","root","pending","current","getActionEventHistoryField","isRecord$1","action","BEHAVIOR_COUNT_COMPARISONS","BEHAVIOR_TIME_COMPARISONS","BEHAVIOR_RECENCY_COMPARISONS","ZRfc3339","ZBehaviorWindow","ZEventField","ZWindowedEventOperandBase","ZBehaviorEventOperand","EMPTY_BEHAVIOR_EVENT_FACTS","behaviorWindowKey","behaviorTimestampMatchesWindow","init_behavior_history$2","window","timestampMs","timestamp","asOfMs","asOf","startsInWindow","endsInWindow","init_behavior_history$1","Logger","init_logger","debugParam","config","level","prefix","init_targeting","registerAutomaticTargetingResolver","stack","resolverStacks","source","disposed","activeResolver","canAutomaticallyLaunchExperience","experience","meetsTargetingEligibility","person","url","init_automatic_targeting","parseTimestamp","RFC3339_PATTERN","parseNullableTimestamp","scopeKey","projectId","distinctId","evaluationWindow","operand","snapshotFactWindow","readSnapshotFact","eventFacts","snapshot","eventName","count","firstValue","lastValue","firstOccurredAt","lastOccurredAt","isNonNegativeInteger","hasCompleteCoverage","coverageStart","coverageStartMs","compareCount","complete","comparison","timestampMatches","occurredAt","valueMs","compareIncompleteTime","operator","evaluateOperand","fact","createCurrentSessionBehaviorHistory","maxScopes","DEFAULT_MAX_SCOPES","maxEventsPerScope","DEFAULT_MAX_EVENTS_PER_SCOPE","now","buckets","snapshots","activeScope","scopesWereEvicted","trimBucket","bucket","oldestInsertId","getBucket","isNonEmptyString","event","eventTimeMs","oldestScope","DEFAULT_INSERT_ID_REQUEST_LIMIT","boundedLimit","limit","anonymousDistinctId","identifiedDistinctId","sourceKey","targetKey","insertId","parsedOperand","factWindow","evaluationNow","evaluationAsOf","sessionEvents","sessionTimes","sessionFirst","sessionLast","snapshotFact","relativeFactIsStale","baselineCount","baselineFirst","baselineLast","lastIsWithin","excludedIds","excludedSessionCount","minimum","maximum","recordCurrentSessionBehaviorEvent","currentSessionBehaviorHistory","getCurrentSessionInsertIds","transitionCurrentSessionBehaviorScope","transferAnonymousCurrentSessionBehaviorScope","resetCurrentSessionBehaviorHistory","setCurrentBehaviorHistorySnapshot","hasBehaviorEventOccurred","field","registerCurrentSessionBehaviorTargetingResolver","init_behavior_history","subscribeToActivitySignals","subscribers","subscriber","retainActivityDocument","retained","retainedDocuments","document","createRelease","activityHandlers","USER_ACTIVITY_EVENTS","handler","emit","eventType","visibilityHandler","released","init_activity","signal","Oe","D$3","r","c","l","a$3","f","Re","Ee","o","F$3","x$3","u","h","p","d","g","y","A","xe","N","H","$","M","P$3","X","Z","S","v$3","E","be","B$3","q$3","W$1","T$3","ee","te","ke","_$2","U$1","re","ne","se","ie","K$2","j$3","ae","oe","ce","le","z$3","G$2","fe","w$3","he","ue","de","pe","ge","Se","R$2","I$2","L$2","Te","Ae","Pe","b$2","J$2","Q$2","C$3","V$2","O$2","Y$1","init_urlpattern","t","#i","#t","#n","#e","#s","#b","#f","#r","#h","#u","#d","#A","#T","#P","#C","#E","#g","#S","#O","#y","#p","#w","#k","#c","#R","#l","#a","init_urlpattern_polyfill","logger$45","memoryStores","supportCache","getWebStorage","isSupported","createStore","localStore","sessionStore","init_storage","cached","supported","storage","probeKey","memoryValue","logger$44","cn$2","executeScript","pathnamePatternCache","createPathnamePattern","checkUrlMatch","urlFilterResultCache","handleUrlFilters","evaluateNoCodeConfigClick","getIsDebug","generateUUID","init_utils$8","classes","code","script","pageUrlValue","pattern","pageUrlRule","urlFilters","combinator","matchesFilter","filter","isMatch","innerHtml","cssSelector","individualSelectors","selector","targetElement","random","char","getStoredSession","stored","STORAGE_KEY","logger$43","storeSession","session","clearStoredSession","currentSession","isSessionExpired","SESSION_TIMEOUT_MS","getOrCreateWindowId","currentWindowId","WINDOW_STORAGE_KEY","adoptSharedSession","trackSessionStart","userorbit","getUserorbit","sessionId","trackSessionEnd","duration","reason","updateLastActivity","handleActivity","checkSessionTimeout","initializeSessionTracking","cleanupSessionTracking","lastActivityUpdate","storageHandler","getSessionId$1","getWindowId","activityCheckInterval","releaseActivityDocument","unsubscribeActivitySignals","init_sessionTracking","init_analytics","volatileLists","PersistedList","init_persisted_list","removed","remaining","predicate","list","storedList","discardAnalyticsStorage","logger$42","MAX_EVENTS_PER_BATCH","MAX_USER_PROP_UPDATES_PER_BATCH","FLUSH_INTERVAL_MS","REQUEST_TIMEOUT_MS","QUEUE_ENVELOPE_VERSION","BROWSER_MATCHERS","normalizeHostUrl","normalizeContext","contextKey","isEvent","isAnalyticsContext","isQueuedEventEnvelope","isUserPropUpdate","isQueuedUserPropEnvelope","Userorbit","init_analytics$1","hostUrl","apiKey","envelope","generation","controller","skipIpLookup","initialDistinctId","noInterval","storedIdentity","hasIdentified","userAgent","osVersion","browser","match","windowId","sessionProps","eventTime","defaultProps","properties","trackedEvent","anonDistinctId","anonymousEvents","propertiesKeys","payloadWithAuth","blob","useSendBeacon","timeout","body","resp","json","upgradeEvents","upgraded","events","queue","storedUserProps","upgradedUserProps","userProps","firstEnvelope","batchKey","storedEvents","envelopes","insertIdsToRemove","batchContextKey","matchesBatch","storedUpdates","updates","properties_to_add","properties_to_remove","update","maximumBatches","batch","eventResult","userPropResult","nextContext","JS_LOCAL_STORAGE_KEY","CONTAINER_ID","CACHE_EXPIRY","init_constants$1","onSuccess","onError","ok","okVoid","wrapThrows","logger$41","ErrorHandler","init_errors$1","errorHandler","logger$40","Config","config$16","init_config","savedConfig","newConfig","persist","parsedConfig","NEW_NO_CODE_ACTION_TYPES","ZActionClassPageUrlRule","getPageUrlPatternError","ZActionClassUrlFilter","ZElementFingerprintHint","ZActionElementSelectorFingerprint","ZActionElementSelectorShape","createActionElementSelectorSchema","ZActionElementSelector","ZActionElementTarget","ZNoCodeBaseShape","ZActionClassNoCodeConfigClick","ZActionClassNoCodeConfigPageView","ZActionClassNoCodeConfigExitIntent","ZActionClassNoCodeConfigFiftyPercentScroll","ZActionElementRecurrence","ZActionInputRecurrence","ZActionHoverRecurrence","ZActionInactivityRecurrence","ZActionClassNoCodeConfigElement","ZActionInputCondition","ZActionClassNoCodeConfigInput","ZActionClassNoCodeConfigHover","ZActionClassNoCodeConfigDelay","ZActionClassNoCodeConfigInactivity","ZActionClassNoCodeConfig","isNewNoCodeActionConfig","ZActionClassCommonShape","ZActionClassInputCommonShape","ZActionClassInputCode","ZActionClassInputNoCode","ZActionClassInputAutomatic","init_action_classes$1","URLPatternConstructor","allowTextOnly","init_action_classes","init_js","SDK_CAPABILITIES","init_capabilities","USER_ID_STORAGE_KEY","logger$39","getStoredUserIdentity","generateRandomUserId","getStoredUserId","storeUserId","init_userId","userId","parseWorkspaceDeliveryPolicy","ZWorkspaceDeliveryPolicyV1","parseExperienceDeliveryPolicy","ZExperienceDeliveryPolicyV1","getDefaultDeliveryCapGroup","kind","resolveDeliveryCapGroup","policy","resolveDeliveryPriority","DELIVERY_CAP_GROUPS","ZDeliveryRollingLimit","ZDeliveryCap","init_delivery$2","init_delivery$1","createDeliveryCandidate","priority","delayMs","createDeliveryLifecycle","notify","unsubscribed","init_delivery","logger$38","TOUR_ID_PARAM","STEP_ID_PARAM","BUILDER_TOKEN_PARAM","BUILDER_TOKEN_STORAGE_KEY","LEGACY_BUILDER_TOKEN_STORAGE_KEY","BUILDER_MODE_STORAGE_KEY","BUILDER_SCRIPT_ID","BUILDER_OWNER_ATTR","BUILDER_EXTENSION_ATTR","BUILDER_OWNER_STORAGE_KEY","BUILDER_SDK_OWNER","BUILDER_EXTENSION_OWNER","PREVIEW_ACTIVE_STORAGE_KEY","PREVIEW_COMPLETED_STEP_STORAGE_KEY","SELECTOR_MODE_STORAGE_KEY","builderScriptPromise","getBuilderRuntimeUrl","getTourBuilderSessionFromUrl","getTourBuilderSessionFromStorage","getTourBuilderToken","getTourBuilderSession","hasActiveTourBuilderSession","clearTourBuilderSession","isExtensionTourBuilderAvailable","claimSdkTourBuilder","releaseSdkTourBuilderClaim","persistTourBuilderSession","removeBuilderParamsFromUrl","loadBuilderRuntime","startTourBuilderFromUrl","init_tourBuilder","sdkScript","tourId","token","owner","apiHost","param","existingScript","resolve","reject","runtime","logger$37","request","init_api","configData","responseRaw","urlPath","jsonRes","response","matchesStepUrlPattern","urlPattern","location","filterRoutes","currentPathname","normalizedCurrentPath","foundNonMatch","routes","route","routeObj","normalizedRoute","filterByPath","logger$36","isTourSnoozeActive","MAX_SNOOZE_TIMEOUT_MS","snoozeExpiryTimers","clearTourSnoozeExpiry","clearAllTourSnoozeExpiries","retainTourSnoozeExpiries","scheduleTourSnoozeExpiry","filterByCompletedStepsAndPath","init_tour$2","tourSubscriber","scheduled","retainedIds","tourIds","expiresAt","snoozedUntil","existing","onExpired","armTimer","remainingMs","allSteps","steps","completedTillStepId","flag","onlyPathFilter","registerRenderedRoot","getKey","entry","renderedRoots","unmountRenderedRoot","markRenderedRootShown","id","unmountAllRenderedRoots","hasRenderedRoot","init_rendered_roots","compareScheduledDeliveries","sourceDifference","sourceRank","priorityDifference","orderDifference","hasVersionedDeliveryPolicy","getWorkspacePolicy","scheduleArbitration","arbitrationScheduled","arbitrate","scheduleDelivery","candidate","capGroup","finishActive","activeResumeTarget","lifecycle","getIdentityKey","cancelPendingDeliveries","activeByGroup","removePending","releaseItemClaim","handleDeliveryRouteChange","lastRouteUrl","reconcileDeliveryPolicyState","state","disposeDeliveryScheduler","signature","lastWorkspacePolicySignature","reconcileDeliveryPersonState","collections","tour","assignment","arbitrationTimer","SESSION_ID_KEY","config$15","logger$35","claimingGroups","releasingGroupCounts","getSessionId","getRequestIdentity","releaseClaim","finishClaiming","markShown","renderClaimedDelivery","claimDelivery","init_delivery_scheduler","created","claimToken","identity","requestIdentity","remainingReleases","releasePromise","shown","claim","candidates","winner","group","subscribeToEnvironmentState","environmentStateListeners","reconcileEnvironmentState","config$14","logger$34","environmentStateSyncIntervalId","fetchEnvironmentState","getEnvironmentState","addEnvironmentStateExpiryCheckListener","clearEnvironmentStateExpiryCheckListener","init_environmentState","fetchOptions","widgetKey","email","attributes","deferBehaviorHistory","analyticsProjectId","noCache","accountId","nextProjectId","currentConfig","environmentState","existingConfig","CONFIG_KEYS","isUserPropertyValue","normalizeDistinctId","getTopLevelUserProperties","getConfigAttributes","getConfigDistinctId","init_userProperties","configInput","topLevelId","isWidgetRuntimeFeatureEnabled","product","feature","init_widget_features","logger$33","userorbitInstance","disposeEnvironmentSubscription$2","getAnalyticsContext","stringValue","ensureEnvironmentSubscription$1","withdrawAnalytics","disposeAnalytics","initializeAnalytics","projects","configuredProjectId","project","instance","personState","TOUR_LAUNCH_PARAM","init_tour_launch","init_tour$1","normalizeTourLanguage","normalized","language","getTourLocalizationConfiguration","getTourDefaultLanguage","getStepTranslationLanguages","getTourSupportedLanguages","defaultLanguage","configuredLanguages","stepLanguages","languages","resolveTourLanguage","supportedLanguages","preferredLanguage","preferredLanguages","parentLanguage","getStepContentTranslation","translations","localizeStepContent","translation","getTranslationValue","hasTranslationValue","localizeTourContent","resolvedLanguage","fallback","init_tour_localization","init_account","wrapThrowsAsync","init_error_handlers","init_demo_video","init_demo_video_story_templates","init_demo_visual","init_types$2","widgetGenerationAllowed","stopWidgetForPrivacy","controllers","host","roots","registerWidgetPrivacyRoot","existingRoot","existingHost","widgetFetch","valid","ensure","WidgetPrivacyError","externalSignal","abort","finish","property","reader","method","init_widgetPrivacy","w$2","g$2","_$1","e","n$2","m$1","u$3","l$2","b$1","k$2","x$2","C$2","z$2","V$1","M$1","$$1","i$4","r$4","o$2","I$1","e$3","P$2","w","v$2","A$2","p$1","D$2","H$1","d$1","T$2","E$1","L$1","j$2","y$1","F$2","f$3","c$2","a$2","s$2","O$1","_","C","I","L","G$1","q$2","N$1","B$2","v","J$1","K$1","Q$1","R$1","h$1","init_preact_module","c$1","r$3","o$1","D$1","C$1","A$1","T$1","F$1","q$1","x$1","P$1","g$1","j$1","f$2","z$1","B$1","w$1","k$1","t$2","u$2","i$3","e$2","a$1","v$1","l$1","s$1","init_hooks_module","compat_module_exports","P","B","mn","sn","gn","yn","bn","D","tn","Sn","vn","dn","hn","z","nn","pn","_n","an","R","V","W","j","Y","q","T","F","O","U","G","J","K","Q","X$1","en","rn","un","on","ln","cn$1","init_compat_module","defaultAttributes$1","init_defaultAttributes$1","createReactComponent","init_createReactComponent","Component","rest","iconName","className","color","stroke","title","iconNode","tag","attrs","children","iconNamePascal","__iconNode$181","IconAlertCircle","init_IconAlertCircle","\"d\"","\"key\"","__iconNode$180","IconAnchor","init_IconAnchor","__iconNode$179","IconArrowDown","init_IconArrowDown","__iconNode$178","IconArrowLeft","init_IconArrowLeft","__iconNode$177","IconArrowNarrowDown","init_IconArrowNarrowDown","__iconNode$176","IconArrowNarrowLeft","init_IconArrowNarrowLeft","__iconNode$175","IconArrowNarrowRight","init_IconArrowNarrowRight","__iconNode$174","IconArrowNarrowUp","init_IconArrowNarrowUp","__iconNode$173","IconArrowRight","init_IconArrowRight","__iconNode$172","IconArrowUpRight","init_IconArrowUpRight","__iconNode$171","IconArrowUp","init_IconArrowUp","__iconNode$170","IconBarcodeOff","init_IconBarcodeOff","__iconNode$169","IconBarcode","init_IconBarcode","__iconNode$168","IconBattery","init_IconBattery","__iconNode$167","IconBell","init_IconBell","__iconNode$166","IconBook","init_IconBook","__iconNode$165","IconBrain","init_IconBrain","__iconNode$164","IconBrandFacebook","init_IconBrandFacebook","__iconNode$163","IconBrandLinkedin","init_IconBrandLinkedin","__iconNode$162","IconBrandTwitter","init_IconBrandTwitter","__iconNode$161","IconBriefcase","init_IconBriefcase","__iconNode$160","IconBrush","init_IconBrush","__iconNode$159","IconBug","init_IconBug","__iconNode$158","IconBulb","init_IconBulb","__iconNode$157","IconCalendar","init_IconCalendar","__iconNode$156","IconCamera","init_IconCamera","__iconNode$155","IconCaretUp","init_IconCaretUp","__iconNode$154","IconChartArea","init_IconChartArea","__iconNode$153","IconChartBar","init_IconChartBar","__iconNode$152","IconChartLine","init_IconChartLine","__iconNode$151","IconChartPie","init_IconChartPie","__iconNode$150","IconCheck","init_IconCheck","__iconNode$149","IconChevronDown","init_IconChevronDown","__iconNode$148","IconChevronLeft","init_IconChevronLeft","__iconNode$147","IconChevronRight","init_IconChevronRight","__iconNode$146","IconChevronUp","init_IconChevronUp","__iconNode$145","IconCircleCheck","init_IconCircleCheck","__iconNode$144","IconCircleDashedX","init_IconCircleDashedX","__iconNode$143","IconCircleDashed","init_IconCircleDashed","__iconNode$142","IconCircle","init_IconCircle","__iconNode$141","IconClipboard","init_IconClipboard","__iconNode$140","IconClock","init_IconClock","__iconNode$139","IconCloud","init_IconCloud","__iconNode$138","IconCode","init_IconCode","__iconNode$137","IconCompass","init_IconCompass","__iconNode$136","IconCopy","init_IconCopy","__iconNode$135","IconCpu","init_IconCpu","__iconNode$134","IconCreditCard","init_IconCreditCard","__iconNode$133","IconCup","init_IconCup","__iconNode$132","IconCurrencyDollar","init_IconCurrencyDollar","__iconNode$131","IconDatabase","init_IconDatabase","__iconNode$130","IconDotsVertical","init_IconDotsVertical","__iconNode$129","IconDots","init_IconDots","__iconNode$128","IconDownload","init_IconDownload","__iconNode$127","IconDroplet","init_IconDroplet","__iconNode$126","IconEdit","init_IconEdit","__iconNode$125","IconEyeOff","init_IconEyeOff","__iconNode$124","IconEye","init_IconEye","__iconNode$123","IconFileText","init_IconFileText","__iconNode$122","IconFile","init_IconFile","__iconNode$121","IconFlame","init_IconFlame","__iconNode$120","IconFlask","init_IconFlask","__iconNode$119","IconFlower","init_IconFlower","__iconNode$118","IconFolderOpen","init_IconFolderOpen","__iconNode$117","IconFolder","init_IconFolder","__iconNode$116","IconGift","init_IconGift","__iconNode$115","IconGlobe","init_IconGlobe","__iconNode$114","IconGrid3x3","init_IconGrid3x3","__iconNode$113","IconGripHorizontal","init_IconGripHorizontal","__iconNode$112","IconHeadphones","init_IconHeadphones","__iconNode$111","IconHeart","init_IconHeart","__iconNode$110","IconHistory","init_IconHistory","__iconNode$109","IconHome$1","init_IconHome","__iconNode$108","IconInfoCircle","init_IconInfoCircle","__iconNode$107","IconKey","init_IconKey","__iconNode$106","IconList","init_IconList","__iconNode$105","IconLoader2","init_IconLoader2","__iconNode$104","IconLoader","init_IconLoader","__iconNode$103","IconLocation","init_IconLocation","__iconNode$102","IconLockOpen2","init_IconLockOpen2","__iconNode$101","IconLock","init_IconLock","__iconNode$100","IconMail","init_IconMail","__iconNode$99","IconMapPin","init_IconMapPin","__iconNode$98","IconMenu","init_IconMenu","__iconNode$97","IconMessageCircle","init_IconMessageCircle","__iconNode$96","IconMessage","init_IconMessage","__iconNode$95","IconMicrophoneOff","init_IconMicrophoneOff","__iconNode$94","IconMicrophone","init_IconMicrophone","__iconNode$93","IconMinus","init_IconMinus","__iconNode$92","IconMoon","init_IconMoon","__iconNode$91","IconMusicOff","init_IconMusicOff","__iconNode$90","IconMusic","init_IconMusic","__iconNode$89","IconNote","init_IconNote","__iconNode$88","IconPalette","init_IconPalette","__iconNode$87","IconPaperclip","init_IconPaperclip","__iconNode$86","IconPaw","init_IconPaw","__iconNode$85","IconPencil","init_IconPencil","__iconNode$84","IconPhone","init_IconPhone","__iconNode$83","IconPhoto","init_IconPhoto","__iconNode$82","IconPin","init_IconPin","__iconNode$81","IconPlane","init_IconPlane","__iconNode$80","IconPlant","init_IconPlant","__iconNode$79","IconPlayerPause","init_IconPlayerPause","__iconNode$78","IconPlayerPlay","init_IconPlayerPlay","__iconNode$77","IconPlayerSkipBack","init_IconPlayerSkipBack","__iconNode$76","IconPlayerSkipForward","init_IconPlayerSkipForward","__iconNode$75","IconPlus","init_IconPlus","__iconNode$74","IconRepeat","init_IconRepeat","__iconNode$73","IconRocket","init_IconRocket","__iconNode$72","IconScale","init_IconScale","__iconNode$71","IconSearch","init_IconSearch","__iconNode$70","IconSelector","init_IconSelector","__iconNode$69","IconSettings","init_IconSettings","__iconNode$68","IconShare","init_IconShare","__iconNode$67","IconShield","init_IconShield","__iconNode$66","IconShoppingCart","init_IconShoppingCart","__iconNode$65","IconSpeakerphone","init_IconSpeakerphone","__iconNode$64","IconStar","init_IconStar","__iconNode$63","IconStethoscope","init_IconStethoscope","__iconNode$62","IconSun","init_IconSun","__iconNode$61","IconTag","init_IconTag","__iconNode$60","IconTerminal","init_IconTerminal","__iconNode$59","IconThumbDown","init_IconThumbDown","__iconNode$58","IconThumbUp","init_IconThumbUp","__iconNode$57","IconTool","init_IconTool","__iconNode$56","IconTrash","init_IconTrash","__iconNode$55","IconUpload","init_IconUpload","__iconNode$54","IconUser","init_IconUser","__iconNode$53","IconUsers","init_IconUsers","__iconNode$52","IconVideo","init_IconVideo","__iconNode$51","IconVolumeOff","init_IconVolumeOff","__iconNode$50","IconVolume","init_IconVolume","__iconNode$49","IconWifi","init_IconWifi","__iconNode$48","IconWorld","init_IconWorld","__iconNode$47","IconX","init_IconX","__iconNode$46","IconCaretUpFilled","init_IconCaretUpFilled","__iconNode$45","IconCircleCheckFilled","init_IconCircleCheckFilled","__iconNode$44","IconPlayerPlayFilled","init_IconPlayerPlayFilled","__iconNode$43","IconPlayerStopFilled","init_IconPlayerStopFilled","init_tabler_icons_react","awaitSelector","watchAwaitSelector","init_dom","rootNode","ObserverClass","mutationObserverSupported","observer","stopWatching","findAndResolveElements","allElements","newElements","attributeForBypassing","mutationRecords","found","record","fallbackDelay","exception","awaiter","continueWatching","callback","isObject","mergeThemeObjects","resolveThemeMode","resolveModeAwareTheme","resolveEngagementTheme","init_theme","themes","theme","mode","ownerWindow","resolvedMode","resolvedTheme","resolvedOverrideTheme","overrideTheme","useResolvedThemeMode","setResolvedMode","targetWindow","mediaQuery","updateMode","init_use_resolved_theme_mode","createRoot","container","init_client","markUserorbitOwnedHost","USERORBIT_OWNED_HOST_ATTRIBUTE","isUserorbitOwnedNode","isNode$2","visited","ownerDocument","frameElement","eventTouchesUserorbitOwnedHost","init_domOwnership","global_default$1","init_global$1","global_default","init_global","tokens_default","init_tokens","hexToRGBA","mixColor$1","isLight","getReadableTextColor","init_colors","hex","opacity","color1","hexColor","color2","mixWithHex","r1","g1","b1","r2","g2","b2","weight","backgroundColor","addStylesToShadowDom","addCustomCssToShadowDom","addCustomThemeToShadowDom","init_styles","shadowRoot","styleElement","trimmedCss","css","existingStyle","styling","cssVariables","appendCssVariable","noPrefix","variableName","primaryColor","brandColor","accentColor","accentColorSelected","u$1","f$1","init_jsxRuntime_module","NotificationButton$1","init_notification_button$1","active","hideDot","dotPosition","LayoutGroupContext","init_LayoutGroupContext","useConstant","ref","init","init_use_constant","PresenceContext","init_PresenceContext","MotionConfigContext","init_MotionConfigContext","PopChild","isPresent","width","height","style","nonce","top","PopChildMeasure","init_PopChild","prevProps","newChildrenMap","PresenceChild","init_PresenceChild","presenceChildren","memoizedOnExitComplete","childId","isComplete","onExitComplete","presenceAffectsLayout","usePresence$1","subscribe","register","safeToRemove","init_use_presence","onlyElements","getChildKey","init_utils$7","isBrowser","init_is_browser","useIsomorphicLayoutEffect$1","init_use_isomorphic_effect","AnimatePresence","init_AnimatePresence","isParentPresent","propagate","presentChildren","presentKeys","isInitialRender","pendingPresentChildren","exitComplete","diffedChildren","setDiffedChildren","renderedChildren","setRenderedChildren","exitingChildren","nextChildren","initial","custom","isEveryExitComplete","isExitComplete","forceRender","noop$1","init_noop","any","warning$2","invariant","init_errors","memo","init_memo$1","progress","init_progress","toFromDifference","secondsToMilliseconds","millisecondsToSeconds","init_time_conversion","seconds","milliseconds","init_es$2","MotionGlobalConfig","init_GlobalConfig","createRenderStep","thisFrame","nextFrame","isProcessing","flushNextFrame","toKeepAlive","latestFrameData","triggerCallback","runNextFrame","immediate","keepAlive","frameData","init_render_step","createRenderBatcher","useDefaultElapsed","flagRunNextFrame","stepsOrder","processBatch","maxElapsed","read","resolveKeyframes","preRender","render","postRender","allowKeepAlive","scheduleNextBatch","wake","process","init_batcher","frame","cancelFrame","frameSteps","init_frame","LazyContext","init_LazyContext","featureProps","featureDefinitions","init_definitions","props","loadFeatures","features","init_load_features","isValidMotionProp","validMotionProps","init_valid_prop","memoize","cache","init_memoize_browser_esm","is_prop_valid_browser_esm_exports","index$3","reactPropsRegex","init_is_prop_valid_browser_esm","prop","loadExternalIsValidProp","isValidProp","filterProps","filteredProps","shouldForward","forwardMotionProps","isDom","\"draggable\"","init_filter_props","createDOMMotionComponentProxy","componentFactory","componentCache","init_create_proxy","MotionContext","init_MotionContext","isVariantLabel","init_is_variant_label","isAnimationControls","init_is_animation_controls","variantPriorityOrder","variantProps","init_variant_props","isControllingVariants","isVariantNode","init_is_controlling_variants","getCurrentTreeVariants","animate","init_utils$6","useCreateMotionContext","variantLabelsAsDependency","init_create$1","motionComponentSymbol","init_symbol","isRefObject","init_is_ref_object","useMotionRef","visualState","visualElement","externalRef","init_use_motion_ref","camelToDash","init_camel_to_dash","str","optimizedAppearDataId","optimizedAppearDataAttribute","init_data_id","microtask","cancelMicrotask","init_microtask","SwitchLayoutGroupContext","init_SwitchLayoutGroupContext","useVisualElement","lazyContext","presenceContext","reducedMotionConfig","visualElementRef","createVisualElement","initialLayoutGroupConfig","ProjectionNodeConstructor","createProjectionNode$1","isMounted","optimisedAppearId","wantsHandoff","_a","getClosestProjectingNode","drag","dragConstraints","layout","init_use_visual_element","createRendererMotionComponent","preloadedFeatures","MotionComponent","MeasureLayout","configAndProps","useLayoutId","useVisualState","isStatic","useStrictMode","layoutProjection","getProjectionFunctionality","useRender","ForwardRefMotionComponent","layoutGroupId","layoutId","combined","init_motion","lowercaseSVGElements","init_lowercase_elements","isSVGComponent","init_is_svg_component","getValueState","resolveVariantFromProps","definition","velocity","init_resolve_variants","isKeyframesTarget","init_is_keyframes_target","isCustomValue","resolveFinalValueInKeyframes","init_resolve_value","isMotionValue","init_is_motion_value","resolveMotionValue","unwrappedValue","init_resolve_motion_value","makeState","makeLatestValues","scrapeMotionValuesFromProps","createRenderState","onUpdate","motionValues","scrapeMotionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","resolved","valueTarget","transitionEnd","makeUseVisualState","init_use_visual_state","make","transformPropOrder","transformProps","init_keys_transform","checkStringStartsWith","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","init_is_css_variable","getValueAsType","init_get_as_type","clamp$2","init_clamp","number","alpha","scale","init_numbers","createUnitType","degrees","percent","px","vh","vw","progressPercentage","init_units","unit","browserNumberValueTypes","init_number_browser","transformValueTypes","init_transform$1","int","init_type_int","numberValueTypes","init_number$1","buildTransform","transformString","transformIsDefault","numTransforms","latestValues","valueIsDefault","transformTemplate","valueAsType","transformName","translateAlias","transform","init_build_transform","buildHTMLStyles","hasTransform","hasTransformOrigin","transformOrigin","originX","originY","originZ","init_build_styles","buildSVGPath","useDashCase","dashKeys","camelKeys","offset","pathLength","length","pathSpacing","spacing","init_path","calcOrigin$1","origin","calcSVGTransformOrigin","dimensions","init_transform_origin","buildSVGAttrs","latest","isSVGTag","attrX","attrY","attrScale","pathOffset","init_build_attrs","createHtmlRenderState","init_create_render_state$1","createSvgRenderState","init_create_render_state","init_is_svg_tag","renderHTML","projection","styleProp","vars","init_render$1","camelCaseAttributes","init_camel_case_attrs","renderSVG","renderState","init_render","addScaleCorrector","scaleCorrectors","correctors","init_scale_correction","isForcedMotionValue","init_is_forced_motion_value","scrapeMotionValuesFromProps$1","newValues","init_scrape_motion_values$1","init_scrape_motion_values","updateSVGDimensions","layoutProps","svgMotionConfig","init_config_motion$1","needsMeasure","htmlMotionConfig","init_config_motion","copyRawValuesOnly","useInitialMotionValues","useStyle","useHTMLProps","htmlProps","init_use_props$1","useSVGProps","visualProps","rawStyles","init_use_props","createUseRender","elementProps","init_use_render","createMotionComponentFactory","init_create_factory","shallowCompare","prev","prevLength","next","init_shallow_compare","resolveVariant","init_resolve_dynamic_variants","supportsScrollTimeline","init_scroll_timeline","BaseGroupPlaybackControls","init_BaseGroup","animations","animation","propName","newValue","subscriptions","timeline","cancel","time","speed","controls","methodName","GroupPlaybackControls","init_Group","onResolve","onReject","getValueTransition","transition","\"default\"","init_get_value_transition","calcGeneratorDuration","generator","maxGeneratorDuration","init_calc_duration","isGenerator","init_is_generator","attachTimeline","isBezierDefinition","init_is_bezier_definition","easing","supportsFlags","init_flags","memoSupports","memoized","supportsFlag","init_memo","supportsLinearEasing","init_linear_easing","generateLinearEasing","init_linear","points","numPoints","resolution","isWaapiSupportedEasing","supportedWaapiEasing","mapEasingToNativeEasing","cubicBezierAsString","segmentEasing","init_easing","isDragActive","isDragging","init_is_active","resolveElements","elementOrSelector","scope","selectorCache","init_resolve_elements","setupGesture","gestureAbortController","init_setup","filterEvents$1","hover","eventOptions","onPointerEnter","enterEvent","onHoverEnd","onHoverStart","onPointerLeave","leaveEvent","init_hover$1","isNodeOrChild","init_is_node_or_child","isPrimaryPointer","init_is_primary_pointer","isElementKeyboardAccessible","focusableElements","init_is_keyboard_accessible","isPressing","init_state$2","filterEvents","firePointerEvent","enableKeyboardPress","init_keyboard","focusEvent","handleKeydown","handleKeyup","isValidPressEvent","press","cancelEvents","startPress","startEvent","onPressEnd","onPressStart","onPointerEnd","onPointerUp","onPointerCancel","endEvent","upEvent","cancelEvent","init_press$1","init_start","init_view","setDragLock","axis","init_set_active","init_es$1","positionalKeys","init_keys_position","clearTime","init_sync_time","newTime","addUniqueItem","removeItem","init_array","SubscriptionManager","init_subscription_manager","numSubscriptions","velocityPerSecond","frameDuration","init_velocity_per_second","motionValue","MotionValue","MAX_VELOCITY_DELTA","isFloat","collectMotionValues","init_value","currentTime","prevFrameValue","subscription","unsubscribe","eventManagers","passiveEffect","stopPassiveEffect","delta","endAnimation","startAnimation","setMotionValue","setTarget","init_setters","isWillChangeMotionValue","init_is","addValueToWillChange","willChange","init_add_will_change","getOptimisedAppearId","init_get_appear_id","instantAnimationState","init_use_instant_transition_state","binarySubdivide","currentX","currentT","lowerBound","upperBound","calcBezier","mX1","mX2","subdivisionPrecision","subdivisionMaxIterations","cubicBezier","mY1","mY2","getTForX","aX","init_cubic_bezier","a2","a1","mirrorEasing","init_mirror","reverseEasing","init_reverse","backOut","backIn","backInOut","init_back","anticipate","init_anticipate","circIn","circOut","circInOut","init_circ","isZeroValueString","init_is_zero_value_string","isNone","init_is_none","sanitize","init_sanitize","floatRegex","init_float_regex","isNullish","init_is_nullish","singleColorRegex","init_single_color_regex","isColorString","splitColor","init_utils$5","testProp","aName","bName","cName","clampRgbUnit","rgbUnit","rgba","init_rgba","alpha$1","red","green","blue","parseHex","init_hex","hsla","init_hsla","hue","saturation","lightness","init_color$1","colorRegex","init_color_regex","test","analyseComplexValue","originalValue","indexes","complexRegex","parsedValue","COLOR_TOKEN","VAR_FUNCTION_TOKEN","VAR_TOKEN","NUMBER_TOKEN","SPLIT_TOKEN","parseComplexValue","createTransformer","numSections","split","output","getAnimatableNone$1","convertNumbersToZero","complex","init_complex$1","applyDefaultFilter","defaultValue","maxDefaults","functionRegex","init_filter","functions","defaultValueTypes","getDefaultValueType","init_defaults$1","getAnimatableNone","defaultValueType","init_animatable_none","makeNoneKeyframesAnimatable","animatableTemplate","unresolvedKeyframes","keyframe","invalidTemplates","noneIndex","noneKeyframeIndexes","init_make_none_animatable","removeNonTranslationalTransform","removedTransforms","nonTranslationalTransformKeys","isNumOrPxType","getPosFromMatrix","getTranslateFromMatrix","transformKeys","positionalValues","init_unit_conversion","matrix","pos","matrix3d","pos3","pos2","paddingLeft","paddingRight","paddingTop","paddingBottom","measureAllKeyframes","anyNeedsMeasurement","resolversToMeasure","toResolve","elementsToMeasure","transformsToRestore","restore","readAllKeyframes","flushKeyframeResolvers","isScheduled","KeyframeResolver","init_KeyframesResolver","onComplete","currentValue","finalKeyframe","valueAsRead","isNumericalString","init_is_numerical_string","parseCSSVariable","splitCSSVariableRegex","token1","token2","getVariableValue","maxDepth","trimmed","init_css_variables_conversion","testValueType","init_test","auto","init_type_auto","dimensionValueTypes","findDimensionValueType","init_dimensions","DOMKeyframesResolver","init_DOMKeyframesResolver","originType","targetType","measureKeyframe","finalKeyframeIndex","unsetTransformName","unsetTransformValue","isAnimatable","init_is_animatable","hasKeyframesChanged","keyframes","canAnimate","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","init_can_animate","getFinalKeyframe","resolvedKeyframes","isNotNull$1","repeat","repeatType","init_get_final_keyframe","MAX_RESOLVE_DELAY","BaseAnimation","init_BaseAnimation","delay","resolvedAnimation","mixNumber$1","init_number","hueToRgb","hslaToRgba","init_hsla_to_rgba","mixImmediate","init_immediate","asRGBA","getColorType","model","mixLinearColor","colorTypes","mixColor","init_color","fromExpo","expo","fromRGBA","toRGBA","blended","combineFunctions","pipe","init_pipe","transformers","mixVisibility","invisibleValues","init_visibility","mixNumber","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","matchOrder","orderedOrigin","pointers","originIndex","originValue","init_complex","template","originStats","targetStats","mix","init_mix","calcGeneratorVelocity","prevT","velocitySampleDuration","resolveValue","init_velocity","springDefaults","init_defaults","findSpring","derivative","dampingRatio","bounce","exponentialDecay","undampedFreq","calcAngularFreq","safeMin","initialGuess","approximateRoot","stiffness","mass","rootIterations","init_find$1","isSpringType","getSpringOptions","springOptions","physicsKeys","durationKeys","visualDuration","damping","derived","spring","optionsOrVisualDuration","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","restSpeed","restDelta","resolveSpring","angularFreq","dampedAngularFreq","freqForT","isResolvedFromDuration","currentVelocity","isBelowVelocityThreshold","isBelowDisplacementThreshold","calculatedDuration","init_spring","inertia","isOutOfBounds","nearestBoundary","amplitude","power","ideal","modifyTarget","calcDelta","timeConstant","calcLatest","applyFriction","timeReachedBoundary","spring$1","checkCatchBoundary","bounceDamping","bounceStiffness","hasUpdatedFrame","init_inertia","easeIn","easeOut","easeInOut","init_ease","isEasingArray","init_is_easing_array","ease","easingLookup","easingDefinitionToFunction","init_map","x1","y1","x2","y2","createMixers","mixers","mixerFactory","customMixer","numMixers","mixer","easingFunction","interpolate","isClamp","inputLength","isZeroDeltaRange","interpolator","progressInRange","init_interpolate","fillOffset","offsetProgress","init_fill","defaultOffset","init_default","convertOffsetToTimes","init_time","defaultEasing","keyframeValues","easingFunctions","mapTimeToKeyframe","times","init_keyframes","frameloopDriver","init_driver_frameloop","passTimestamp","generators","percentToProgress","MainThreadAnimation","init_MainThreadAnimation","onStop","KeyframeResolver$1","onResolved","generatorFactory","mapPercentToKeyframes","mirroredGenerator","keyframes$1","resolvedDuration","repeatDelay","totalDuration","autoplay","sample","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","iterationProgress","isAnimationFinished","done","hasChanged","newSpeed","driver","onPlay","startTime","acceleratedValues","init_accelerated_values","startWaapiAnimation","keyframeOptions","valueName","init_waapi","supportsWaapi","init_supports_waapi","requiresPregeneratedKeyframes","pregenerateKeyframes","sampleAnimation","pregeneratedKeyframes","maxDuration","sampleDelta","isUnsupportedEase","unsupportedEasingFunctions","AcceleratedAnimation","init_AcceleratedAnimation","pregeneratedAnimation","sampleTime","underDampedSpring","criticallyDampedSpring","keyframesTransition","getDefaultTransition","init_default_transitions","valueKey","isTransitionDefined","_delay","init_is_transition_defined","animateMotionValue","init_motion_value","valueTransition","isHandoff","shouldSkip","shouldBlockAnimation","shouldBlock","protectedKeys","needsAnimating","animateTarget","targetAndTransition","transitionOverride","animationTypeState","appearId","init_visual_element_target","animateVariant","variant","getAnimation","getChildAnimations","animateChildren","delayChildren","forwardDelay","staggerChildren","staggerDirection","when","last","maxStaggerDuration","generateStaggerDuration","sortByTreeOrder","init_visual_element_variant","animateVisualElement","resolvedDefinition","init_visual_element","getVariantContext","numVariantProps","init_get_variant_context","animateList","createAnimationState","createState$1","buildResolvedTypeValues","setAnimateFunction","makeAnimator","animateChanges","removedKeys","encounteredKeys","removedVariantIndex","numAnimationTypes","reversePriorityOrder","typeState","propIsVariant","activeDelta","changedActiveType","isInherited","variantDidChange","checkVariantsDidChange","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","allKeys","prevResolvedValues","markToAnimate","valueHasChanged","fallbackAnimation","fallbackTarget","shouldAnimate","setActive","isActive","createTypeState","init_animation_state","Feature","init_Feature","AnimationFeature","init_animation","prevAnimate","id$2","ExitAnimationFeature","init_exit","prevIsPresent","exitAnimation","init_animations","addDomEvent","init_add_dom_event","extractEventInfo","addPointerInfo","init_event_info","addPointerEvent","init_add_pointer_event","distance2D","xDelta","distance","yDelta","init_distance","transformPoint","transformPagePoint","info","subtractPoint","getPanInfo","point","lastDevicePoint","history","startDevicePoint","getVelocity","timestampedPoint","lastPoint","timeDelta","PanSession","init_PanSession","isPanStarted","isDistancePastThreshold","onStart","onMove","resumeAnimation","panInfo","onEnd","onSessionEnd","dragSnapToOrigin","handlers","contextWindow","initialInfo","onSessionStart","calcLength","isNear","maxDistance","calcAxisDelta","SCALE_MIN","SCALE_MAX","TRANSLATE_MIN","TRANSLATE_MAX","calcBoxDelta","calcRelativeAxis","relative","calcRelativeBox","calcRelativeAxisPosition","calcRelativePosition","init_delta_calc","applyConstraints","elastic","calcRelativeAxisConstraints","calcRelativeConstraints","layoutBox","bottom","calcViewportAxisConstraints","constraintsAxis","layoutAxis","calcViewportConstraints","constraintsBox","calcOrigin","sourceLength","targetLength","rebaseAxisConstraints","relativeConstraints","constraints","resolveDragElastic","defaultElastic","dragElastic","resolveAxisElastic","resolvePointElastic","minLabel","maxLabel","label","init_constraints","createAxisDelta","createDelta","createAxis","createBox","init_models","eachAxis","init_each_axis","convertBoundingBoxToBox","convertBoxToBoundingBox","transformBoxPoints","topLeft","bottomRight","init_conversion","isIdentityScale","hasScale","scaleX","scaleY","has2DTranslate","is2DTranslate","init_has_transform","scalePoint","originPoint","applyPointDelta","boxScale","translate","applyAxisDelta","applyBoxDelta","box","applyTreeDeltas","treeLength","treePath","isSharedTransition","transformBox","treeScale","TREE_SCALE_SNAP_MAX","TREE_SCALE_SNAP_MIN","translateAxis","transformAxis","axisTranslate","axisScale","axisOrigin","init_delta_apply","measureViewportBox","measurePageBox","viewportBox","rootProjectionNode","scroll","init_measure","getContextWindow","init_get_context_window","shouldDrag","direction","currentDirection","getCurrentDirection","lockThreshold","elementDragControls","VisualElementDragControls","init_VisualElementDragControls","snapToCursor","dragPropagation","measuredAxis","onDragStart","animationState","dragDirectionLock","onDirectionLock","onDrag","originEvent","onDragEnd","axisValue","prevConstraints","constraintsElement","measuredConstraints","onMeasureDragConstraints","userConstraints","momentumAnimations","dragMomentum","dragTransition","onDragTransitionEnd","dragKey","boxProgress","stopPointerListener","dragListener","measureDragConstraints","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","hasLayoutChanged","DragGesture","init_drag$1","dragControls","asyncHandler","PanGesture","init_pan","pointerDownEvent","onPanSessionStart","onPanStart","onPan","onPanEnd","globalProjectionState","init_state$1","pixelsToPercent","pixels","correctBorderRadius","init_scale_border_radius","correctBoxShadow","init_scale_box_shadow","original","shadow","xScale","projectionDelta","yScale","averageScale","layoutGroup","MeasureLayoutWithContext","defaultScaleCorrectors","init_MeasureLayout","switchLayoutGroup","layoutDependency","promoteContext","animateSingleValue","motionValue$1","init_single_value","isSVGElement","init_is_svg_element","compareByDepth","init_compare_by_depth","FlatTree","init_flat_tree","start","checkElapsed","init_delay","mixValues","shouldCrossfadeOpacity","lead","easeCrossfadeIn","follow","easeCrossfadeOut","isOnlyMember","numBorders","borderLabel","borders","followRadius","getRadius","leadRadius","isPx","asNumber","radiusName","compress","init_mix_values","copyAxisInto","originAxis","copyBoxInto","originBox","copyAxisDeltaInto","originDelta","init_copy","removePointDelta","removeAxisDelta","sourceAxis","removeAxisTransforms","scaleKey","originKey","transforms","removeBoxTransforms","xKeys","sourceBox","yKeys","init_delta_remove","isAxisDeltaZero","isDeltaZero","axisEquals","boxEquals","axisEqualsRounded","boxEqualsRounded","aspectRatio","axisDeltaEquals","init_utils$4","NodeStack","init_stack","prevLead","indexOfNode","member","preserveFollowOpacity","crossfade","resumingFrom","buildProjectionTransform","xTranslate","yTranslate","zTranslate","latestTransform","transformPerspective","rotate","rotateX","rotateY","skewX","skewY","elementScaleX","elementScaleY","init_transform","resetDistortingTransform","sharedAnimationValues","cancelTreeOptimisedTransformAnimations","projectionNode","createProjectionNode","defaultParent","isDebug","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","metrics","subscriptionManager","isLayoutDirty","attachResizeListener","cancelDelay","resizeUnblockUpdate","finishAnimation","newLayout","layoutTransition","defaultLayoutTransition","targetChanged","hasRelativeTargetChanged","hasOnlyRelativeTargetChanged","animationOptions","onLayoutAnimationStart","onLayoutAnimationComplete","resetSkewAndRotation","shouldNotifyListeners","clearMeasurements","clearIsLayoutDirty","resetTransformStyle","updateLayout","notifyLayoutUpdate","clearSnapshot","removeLeadSnapshots","prevLayout","needsMeasurement","phase","isRoot","checkIsScrollRoot","measureScroll","resetTransform","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","pageBox","removeTransform","roundBox","checkNodeWasScrollRoot","boxWithoutScroll","withTransforms","transformOnly","boxWithoutTransform","isShared","forceRecalculation","relativeParent","canSkip","prevTreeScaleX","prevTreeScaleY","notifyAll","snapshotLatestValues","mixedValues","targetDelta","relativeLayout","isSharedLayoutAnimation","hasOpacityCrossfade","prevRelativeTarget","mixAxisDelta","mixBox","animationTarget","targetWithTransforms","shouldAnimatePositionOnly","xLength","yLength","needsReset","hasDistortingTransform","resetValues","transformAxes","hiddenVisibility","styles","emptyStyles","valuesToRender","corrected","correct","applyTo","num","measuredLayout","animationType","axisSnapshot","layoutDelta","visualDelta","parentSnapshot","parentLayout","relativeSnapshot","mixAxis","roundAxis","roundPoint","id$1","userAgentContains","init_create_projection_node","string","DocumentProjectionNode","init_DocumentProjectionNode","HTMLProjectionNode","init_HTMLProjectionNode","documentNode","init_drag","handleHoverEvent","HoverGesture","init_hover","FocusGesture","init_focus","isFocusVisible","handlePressEvent","PressGesture","init_press","success","initIntersectionObserver","lookupRoot","observers","rootObservers","fireAllObserverCallbacks","observeIntersection","rootInteresectionObserver","observerCallbacks","fireObserverCallback","init_observers","hasViewportOptionChanged","prevViewport","viewport","thresholdNames","InViewFeature","init_viewport","rootMargin","amount","isIntersecting","once","onViewportEnter","onViewportLeave","gestureAnimations","init_gestures","init_layout","prefersReducedMotion","hasReducedMotionListener","init_state","initPrefersReducedMotion","motionMediaQuery","setReducedMotionPreferences","init_reduced_motion","valueTypes","findValueType","init_find","visualElementStore","init_store","updateMotionValuesFromProps","nextValue","prevValue","existingValue","latestValue","init_motion_values","propEventHandlers","VisualElement","init_VisualElement","blockInitialAnimation","initialMotionValues","remove","valueIsTransform","removeOnChange","removeOnRenderRequest","removeSyncCheck","other","featureDefinition","FeatureConstructor","isEnabled","closestVariantNode","valueFromInitial","DOMVisualElement","init_DOMVisualElement","getComputedStyle$2","HTMLVisualElement","init_HTMLVisualElement","defaultType","computedStyle","SVGVisualElement","init_SVGVisualElement","createDomVisualElement","init_create_visual_element","createMotionComponent","init_create","motion","init_proxy","init_es","clampWidgetHomeHeight","maxHeight","clampWidgetLogoHeight","getFloatingWidgetSize","isExpanded","availableViewportHeight","viewportHeight","WIDGET_EXPANDED_WIDTH","standaloneSupport","WIDGET_STANDALONE_SUPPORT_WIDTH","activeTabCount","WIDGET_CROWDED_NAV_WIDTH","WIDGET_DEFAULT_WIDTH","WIDGET_STANDALONE_SUPPORT_HEIGHT","init_widget_sizing","sanitizeLauncherSvg","DOMParserCtor","loweredSource","MAX_SVG_SOURCE_LENGTH","doc","normalizeLauncherSvgMarkup","svg","MAX_SVG_ELEMENTS","attributeCount","tagName","SVG_ALLOWED_TAGS","attribute","MAX_SVG_ATTRIBUTES","lowerName","normalizedName","SVG_ATTRIBUTE_ALIASES","isAllowed","SVG_ALLOWED_ATTRIBUTES","MAX_SVG_ATTRIBUTE_LENGTH","isUnsafeSvgAttributeValue","colorAttribute","colorValue","SVG_SHAPE_TAGS","hasInheritedSvgPaint","removeUnsupportedChildNodes","ELEMENT_NODE","TEXT_NODE","SVG_TEXT_TAGS","init_sanitize_launcher_svg","IconLifebuoy","IconSparkle","IconHome","IconUpdates","IconHelp","IconMessages","IconFeedback","IconNewFeedback","IconRoadmap","init_icons","NotificationButton","LauncherIcon","init_notification_button","fallbackBackgroundColor","themeMode","fallbackIconColor","normalizedLauncherText","launcherText","shimmer","isOpen","launcherBackgroundColor","launcherIconColor","launcherOpenIconSvg","badgeCount","sanitizedSvg","launcherIconSvg","useRageClick","rageDetected","setRageDetected","clicksRef","timerRef","handleClick","click","TIME_WINDOW","CLICK_THRESHOLD","recent","DISTANCE_THRESHOLD","SHIMMER_DURATION","init_use_rage_click","createHelpCenterReportingId","bytes","byte","getAiReferrer","referrer","aiReferrers","getHelpCenterReportingSession","sessionStorageKey","entryReferrerConsumed","sessionTimeout","getHelpCenterVisitorId","visitorId","shouldTrackHelpCenterEvent","previous","recentEvents","init_help_center_reporting","describePage","init_page_context","logger$32","getRequestAuthBody","makeAPIRequest","fetchTeamInfo","fetchAnnouncements","fetchAnnouncementById","fetchTourById","recordAnnouncementVisit","fetchCollections","fetchTeamMembers","fetchRoadmapViews","fetchRoadmapViewItems","fetchRoadmapItem","fetchDocumentComments","createDocumentComment","createReaction","identifySubscriber","requestSubscriberAuthentication","verifySubscriberAuthentication","uploadAttachment","createFeedback","updateFeedback","fetchFeedbackItems","fetchFeedbackBoardList","fetchFeedbackVoteInfo","createFeedbackVote","deleteFeedbackVote","fetchFeedbackById","fetchFeedbackReplayPreview","fetchFeedbackComments","createFeedbackComment","fetchArticles","getHelpCenterReportingContext","trackHelpCenterEvent","trackHelpCenterSearchClick","searchArticles","fetchPopularArticles","fetchArticleById","fetchArticleCollection","fetchArticleCollections","fetchArticleVoteInfo","createArticleVote","deleteArticleVote","fetchPageResources","fetchSupportThreads","fetchSupportThread","getSupportEventsUrl","createSupportThread","createSupportMessage","sendSupportTyping","init_api_utils","endpoint","errorData","announcementId","slug","roadmapViews","prioritizedRoadmapViews","roadmapViewId","roadmapView","roadmapItemsResponse","columns","column","itemId","documentId","parentId","emailHash","privacyEpoch","file","uploadData","formData","uploadResponse","text","boardId","attachments","replayEvidence","pinnedElement","query","searchQuery","statuses","feedbackId","collectionId","orderByCollection","details","article","searchId","articleId","threadId","aiConversationId","aiTranscript","includeChatGreeting","priorMessages","handoffOnly","customFields","intent","requestFormId","logger$31","useWidgetData","init_use_widget_data","setData","teamResponse","collectionsResponse","teamMembersResponse","team","teamMembers","subscriberCode","Subscribable","init_subscribable","FocusManager","focusManager","init_focusManager","#setup","onFocus","#cleanup","setup","focused","#focused","isFocused","systemSetTimeoutZero","defaultTimeoutProvider","TimeoutManager","timeoutManager","init_timeoutManager","timeoutId","intervalId","#provider","provider","noop","functionalUpdate","updater","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","filters","queryKey","exact","hashQueryKeyByOptions","partialMatchKey","stale","fetchStatus","matchMutation","mutationKey","mutation","hashKey","isPlainObject$1","replaceEqualDeep","isPlainArray","aSize","bItems","bSize","copy","equalItems","aItem","bItem","hasOwn$1","shallowEqualObjects","hasObjectPrototype","ctor","prot","sleep","replaceData","prevData","addToEnd","newItems","addToStart","ensureQueryFn","skipToken","shouldThrowError","throwOnError","addConsumeAwareSignal","consumed","getSignal","onCancelled","isServer","init_utils$3","environmentManager","init_environmentManager","isServerFn","isServerValue","pendingThenable","thenable","_resolve","_reject","finalize","init_thenable","createNotifyManager","transactions","notifyFn","batchNotifyFn","scheduleFn","defaultScheduler","schedule","flush","originalQueue","notifyManager","init_notifyManager","OnlineManager","onlineManager","init_onlineManager","onlineListener","onOnline","offlineListener","#online","online","defaultRetryDelay","failureCount","canFetch","networkMode","createRetryer","isRetryCancelled","continueFn","isResolved","CancelledError","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","init_retryer","Removable","init_removable","#gcTimeout","newGcTime","fetchState","successState","dataUpdatedAt","getDefaultState$1","hasData","initialDataUpdatedAt","Query","init_query","#abortSignalConsumed","#defaultOptions","#client","#cache","#initialState","#retryer","defaultState","newData","#dispatch","promise","#isInitialPausedFetch","abortController","addSignalProperty","fetchFn","queryFn","queryFnContext","queryFnContext2","context2","#revertState","reducer","newState","shouldLoadOnMount","shouldFetchOnMount","shouldFetchOn","isStale","shouldFetchOptionally","prevQuery","prevOptions","shouldAssignObserverCurrentProperties","optimisticResult","QueryObserver","init_queryObserver","client","#selectError","#currentThenable","#currentQuery","#executeFetch","#updateTimers","#clearStaleTimeout","#clearRefetchInterval","#updateQuery","mounted","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#currentRefetchInterval","#updateRefetchInterval","#currentResult","#currentResultOptions","#currentResultState","onPropTracked","#trackedProps","defaultedOptions","#staleTimeoutId","nextInterval","#refetchIntervalId","prevResult","prevResultState","prevResultOptions","queryInitialState","#currentQueryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","skipSelect","placeholderData","#lastQueryWithDefinedData","#selectFn","#selectResult","selectError","isFetching","isPending","isError","isLoading","nextResult","hasResultData","isErrorWithoutData","finalizeThenableIfPossible","recreateThenable","prevThenable","#notify","notifyOnChangePropsValue","notifyOnChangeProps","includedProps","typedKey","notifyOptions","infiniteQueryBehavior","oldPages","oldPageParams","currentPage","cancelled","fetchPage","page","addTo","maxPages","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pages","lastIndex","pageParams","hasNextPage","hasPreviousPage","init_infiniteQueryBehavior","InfiniteQueryObserver","init_infiniteQueryObserver","parentResult","fetchDirection","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","isRefetchError","isRefetching","getDefaultState","Mutation","init_mutation","#mutationCache","#observers","onContinue","mutationFnContext","variables","restored","isPaused","scopeFor","MutationCache","init_mutationCache","#mutations","#scopes","#mutationId","scopedMutations","firstPendingMutation","defaultedFilters","pausedMutations","MutationObserver$1","init_mutationObserver","#updateResult","#currentMutation","#mutateOptions","onMutateResult","QueryCache","init_queryCache","#queries","queryHash","queryInMap","queries","QueryClient","init_queryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","promises","defaults","queryDefault","init_types$1","init_modern$1","init_types","QueryClientContext","useQueryClient$1","QueryClientProvider","init_QueryClientProvider","queryClient","IsRestoringContext","useIsRestoring","init_IsRestoringProvider","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","init_QueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","useClearResetErrorBoundary","getHasError","init_errorBoundaryUtils","errorResetBoundary","suspense","ensureSuspenseTimers","willFetch","shouldSuspend","fetchOptimistic","init_suspense","MIN_SUSPENSE_TIME_MS","clamp","originalStaleTime","isRestoring","useBaseQuery","isNewCacheEntry","Observer","shouldSubscribe","onStoreChange","init_useBaseQuery","useQuery","init_useQuery","useMutation","mutate","mutateOptions","init_useMutation","useInfiniteQuery","init_useInfiniteQuery","init_modern","composeEventHandlers","originalEventHandler","checkForDefaultPrevented","ourEventHandler","init_dist$28","setRef","composeRefs","refs","hasCleanup","cleanups","cleanup","useComposedRefs","init_dist$27","createContextScope","defaultContexts","createContext3","BaseContext","defaultContext","Provider","Context","scopeName","rootComponentName","useContext2","consumerName","createScope","scopeContexts","contexts","composeContextScopes","createContextScopeDeps","scopes","baseScope","scopeHooks","createScope2","nextScopes","currentScope","useScope","overrideScopes","nextScopes2","init_dist$26","createSlot$1","SlotClone","createSlotClone$1","ownerName","Slot2","slotProps","childrenArray","slottable","isSlottable$1","newElement","newChildren","forwardedRef","childrenRef","getElementRef$2","props2","mergeProps$1","createSlottable","Slottable2","SLOTTABLE_IDENTIFIER$1","overrideProps","childProps","slotPropValue","childPropValue","getter","mayWarn","init_dist$25","dispatchDiscreteCustomEvent","Primitive","init_dist$24","Slot","Node","primitiveProps","Comp","asChild","primitive","useCallbackRef$1","callbackRef","init_dist$23","useEscapeKeydown","onEscapeKeyDown","onEscapeKeyDownProp","handleKeyDown","init_dist$22","usePointerDownOutside","handlePointerDownOutside","onPointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","POINTER_DOWN_OUTSIDE","eventDetail","timerId","useFocusOutside","handleFocusOutside","onFocusOutside","isFocusInsideReactTreeRef","handleFocus","FOCUS_OUTSIDE","dispatchUpdate","CONTEXT_UPDATE","detail","discrete","DISMISSABLE_LAYER_NAME","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","BRANCH_NAME","DismissableLayerBranch","init_dist$21","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","isPointerDownOnBranch","branch","onInteractOutside","onDismiss","focusOutside","disableOutsidePointerEvents","handleUpdate","useLayoutEffect2","init_dist$20","useId","setId","useReactId","deterministicId","reactId","count$1","init_dist$19","\" useId \".trim().toString()","clamp$1","end","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rtl","alignment","alignmentAxis","mainAlignmentSide","rects","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","rlPlacement","lrPlacement","tbPlacement","btPlacement","getOppositeAxisPlacements","flipAlignment","oppositeSideMap","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","sides","round","floor","createCoords","init_floating_ui_utils","computeCoordsFromPlacement","_ref","sideAxis","alignLength","isVertical","commonX","reference","floating","commonY","commonAlign","coords","detectOverflow","paddingObject","altBoundary","elementContext","clippingClientRect","platform","offsetParent","offsetScale","elementClientRect","getSideOffsets","overflow","isAnySideFullyClipped","convertValueToCoords","mainAxisMulti","originSides","crossAxisMulti","rawValue","crossAxis","mainAxis","MAX_RESET_COUNT","computePosition$1","arrow$3","flip$2","hide$2","offset$2","shift$2","limitShift$2","size$2","init_floating_ui_core","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","middleware","currentMiddleware","nextX","nextY","reset","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","alignmentOffset","_middlewareData$arrow","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","detectOverflowOptions","initialSideAxis","initialPlacement","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","fallbackAxisSideDirection","placements","overflows","overflowsData","nextIndex","nextPlacement","resetPlacement","fallbackStrategy","currentSideAxis","strategy","offsets","diffCoords","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limiter","rawOffset","computedOffset","limitMin","limitMax","isOriginSide","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","apply","nextDimensions","hasWindow","getNodeName","isNode$1","getWindow","_node$ownerDocument","getDocumentElement","isElement$1","isHTMLElement$1","isShadowRoot","isOverflowElement","getComputedStyle$1","overflowY","overflowX","display","isTableElement","isTopLayer","isContainingBlock","elementOrCss","isNotNone","isWebKit","willChangeRe","containRe","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","isWebKitValue","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","scrollableAncestor","isBody","win","getFrameElement","init_floating_ui_utils_dom","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","getVisualOffsets","noOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","htmlRect","documentElement","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","SCROLLBAR_MAX","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","boundary","rootBoundary","firstRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","isRTL","rectsAreEqual","observeMove","io","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","referenceEl","ancestors","ancestorScroll","ancestorResize","cleanupIo","layoutShift","reobserveFrame","resizeObserver","elementResize","firstEntry","_resizeObserver","animationFrame","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","getElementRects","offset$1","shift$1","flip$1","size$1","hide$1","arrow$2","limitShift$1","computePosition","init_floating_ui_dom","getOffsetParentFn","getDimensionsFn","floatingDimensions","mergedOptions","platformWithCache","deepEqual","getDPR","roundByDPR","dpr","useLatestRef","index$2","useFloating","externalReference","externalFloating","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMounted","whileElementsMountedRef","platformRef","openRef","open","fullData","isMountedRef","floatingStyles","initialStyles","arrow$1","shift","limitShift","flip","hide","arrow","init_floating_ui_react_dom","isRef","deps","NAME$1","Arrow$1","Root$1","init_dist$18","arrowProps","useSize","setSize","borderSizeEntry","\"borderBoxSize\"","borderSize","\"inlineSize\"","\"blockSize\"","init_dist$17","isNotNull","getSideAndAlignFromPlacement","align","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","ANCHOR_NAME$1","PopperAnchor","CONTENT_NAME$3","PopperContentProvider","useContentContext","PopperContent","ARROW_NAME$3","OPPOSITE_SIDE","PopperArrow","Root2$2","Anchor","Content","Arrow","init_dist$16","anchor","setAnchor","__scopePopper","anchorProps","anchorRef","previousAnchor","virtualRef","collisionPaddingProp","contentProps","content","setContent","arrow$4","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","collisionBoundary","hasExplicitBoundaries","updatePositionStrategy","sideOffset","alignOffset","avoidCollisions","sticky","anchorWidth","anchorHeight","contentStyle","arrowPadding","hideWhenDetached","placedSide","placedAlign","handlePlaced","onPlaced","isPositioned","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","contentContext","baseSide","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","PORTAL_NAME$3","Portal$1","init_dist$15","containerProp","portalProps","setMounted","useStateMachine","machine","initialState","usePresence","stylesRef","prevPresentRef","present","prevAnimationNameRef","send","currentAnimationName","getAnimationName","wasPresent","prevAnimationName","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","getElementRef$1","Presence","init_dist$14","presence","useControllableState","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","caller","value2","isFunction","setValue","defaultProp","prevValueRef","onChange","useInsertionEffect","init_dist$13","\" useInsertionEffect \".trim().toString()","VISUALLY_HIDDEN_STYLES","NAME","VisuallyHidden","Root","init_dist$12","getExitSideFromRect","getPaddedExitPoints","paddedExitPoints","exitSide","exitPoint","getPointsFromRect","isPointInPolygon","inside","polygon","ii","jj","xi","yi","xj","yj","getHull","newPoints","getHullPresorted","upperHull","lowerHull","createTooltipContext","createTooltipScope","usePopperScope$2","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip$1","TRIGGER_NAME$2","TooltipTrigger","PORTAL_NAME$2","PortalProvider$1","usePortalContext$1","TooltipPortal","CONTENT_NAME$2","TooltipContent","TooltipContentHoverable","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","Slottable","TooltipContentImpl","ARROW_NAME$2","TooltipArrow","Root3","Trigger$2","Portal","Content2$2","Arrow2","init_dist$11","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","openProp","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","openTimerRef","disableHoverableContent","delayDuration","wasOpenDelayedRef","setOpen","defaultOpen","open2","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","triggerProps","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","forceMount","portalContext","pointerGraceArea","setPointerGraceArea","handleRemoveGraceArea","onPointerInTransitChange","handleCreateGraceArea","currentTarget","hoverTargetPoints","hoverTarget","graceArea","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","onClose","ariaLabel","handleScroll","r$2","clsx","init_clsx","falsyToString","cx","cva","init_dist$10","getVariantClassNames","variants","variantProp","defaultVariantProp","defaultVariants","variantKey","propsWithoutUndefined","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","cn","inputs","init_utils$2","Link$1","init_link","cleanedHref","href","onClick","require_ua_parser_min","LIBVERSION","EMPTY","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","EDGE","FIREFOX","GOOGLE","HONOR","HUAWEI","LENOVO","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPERA","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","SUFFIX_BROWSER","extend","mergedRegexes","regexes","extensions","enumerize","enums","has","str1","lowerize","str2","majorize","undefined","trim","rgxMapper","matches","arrays","ua","strMapper","oldSafariMap","windowsVersionMap","UAParser","_navigator","_ua","_uach","_rgxmap","_isSelfNav","_browser","_cpu","_device","_engine","_os","exports","module","parser","require_lib","_interopDefault","ex","ClientUAInstance","device","engine","os","DeviceTypes","BrowserTypes","OsTypes","setDefaults","getNavigatorInstance","isIOS13Check","nav","isMobileType","isTabletType","_ref2","isMobileAndTabletType","_ref3","isSmartTVType","_ref4","isBrowserType","_ref5","isWearableType","_ref6","isConsoleType","_ref7","isEmbeddedType","_ref8","getMobileVendor","vendor","_ref9","getMobileModel","_ref10","getDeviceType","_ref11","isAndroidType","_ref12","isWindowsType","_ref13","isMacOsType","_ref14","isWinPhoneType","_ref15","isIOSType","_ref16","getOsVersion","_ref17","getOsName","_ref18","isChromeType","_ref19","isFirefoxType","_ref20","isChromiumType","_ref21","isEdgeType","_ref22","isYandexType","_ref23","isSafariType","_ref24","isMobileSafariType","_ref25","isOperaType","_ref26","isIEType","_ref27","isMIUIType","_ref28","isSamsungBrowserType","_ref29","getBrowserFullVersion","_ref30","getBrowserVersion","major","_ref31","getBrowserName","_ref32","getEngineName","_ref33","getEngineVersion","_ref34","isElectronType","isEdgeChromiumType","getIOS13","getIPad13","getIphone13","getIPod13","getUseragent","userAg","isMobile","isMacOs","UIText","init_text$1","Element","inherit","primary","secondary","tertiary","quaternary","selectable","getShortcutKeySymbol","import_lib","KeyboardShortcut","components","parts","shortcut","emoji","init_keyboard_shortcut","Tooltip","animateOpen","setAnimateOpen","portalContainer","setPortalContainer","handleTriggerRef","nextContainer","hideOnKeyboardFocus","Link","buttonVariants$1","Button$1","init_button$1","ariaPressed","iconOnly","accessibilityLabel","tooltip","tooltipShortcut","leftSlot","rightSlot","disabled","loading","externalLink","allowOpener","autoFocus","isSelect","init_badge","cardVariants","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","init_card","init_spinner","init_dist$9","createCollection","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","init_dist$8","useDirection","globalDir","DirectionContext","localDir","init_dist$7","useFocusGuards","edgeGuards","createFocusGuard","init_dist$6","focusFirst","previouslyFocusedElement","focus","getTabbableEdges","getTabbableCandidates","findVisible","nodes","walker","isHiddenInput","isHidden","upTo","isSelectableInput","select","createFocusScopesStack","activeFocusScope","focusScope","arrayRemove","updatedArray","removeLinks","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","focusScopesStack","init_dist$5","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","trapped","handleFocusIn2","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutationObserver","mountEvent","unmountEvent","loop","isTabKey","focusedElement","container2","usePrevious","init_dist$4","getDefaultParent","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","applyAttributeToOthers","hideOthers","init_es2015$6","originalTarget","targets","correctedTarget","markerName","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","controlAttribute","alreadyHidden","counterValue","markerValue","activeParentNode","__rest","__spreadArray","pack","ar","__assign","init_tslib_es6","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","init_constants","assignRef","init_assignRef","useCallbackRef","initialValue","init_useRef","useMergeRefs","useIsomorphicLayoutEffect","oldValue","currentValues","prevRefs_1","nextRefs_1","current_1","init_useMergeRef","init_es2015$5","ItoI","innerCreateMedium","buffer","assigned","cbs","pendingQueue","executeQueue","cycle","createSidecarMedium","medium","init_medium$1","exportSidecar","exported","SideCar","init_exports","sideCar","Target","init_es2015$4","effectCar","init_medium","nothing","RemoveScroll","init_UI","callbacks","setCallbacks","forwardProps","removeScrollBar","shards","noRelative","noIsolation","inert","allowPinchZoom","_b","Container","gapMode","containerRef","parentRef","containerProps","currentNonce","getNonce","init_es2015$3","makeStyleTag","injectStyles","insertStyleTag","stylesheetSingleton","init_singleton","counter","stylesheet","styleHookSingleton","init_hook","sheet","isDynamic","styleSingleton","init_component$1","dynamic","init_es2015$2","zeroGap","parse","getOffset","getGapWidth","init_utils$1","cs","documentWidth","windowWidth","Style","lockAttribute","getStyles","getCurrentUseCounter","useLockAttribute","RemoveScrollBar","init_component","gap","important","allowRelative","newCounter","noImportant","init_es2015$1","passiveSupported","nonPassive","init_aggresiveCapture","alwaysContainsScroll","elementCanBeScrolled","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","getVScrollVariables","getHScrollVariables","elementCouldBeScrolled","getScrollVariables","getDirectionFactor","handleScroll$1","init_handleScroll","directionFactor","endTarget","sourceDelta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","elementScroll","parent_1","noOverscroll","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","extractRef","shouldCancelEvent","touch","getTouchXY","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","lockStack","getDeltaXY","sourceEvent","deltaCompare","shardNodes","shouldCancel","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","generateStyle","shadowParent","idCounter","init_SideEffect","sidecar_default","init_sidecar","ReactRemoveScroll","init_Combination","init_es2015","shouldShowPlaceholder","useTypeaheadSearch","handleSearchChange","onSearchChange","searchRef","handleTypeaheadSearch","search","updateSearch","resetTypeahead","findNextItem","normalizedSearch","currentItemIndex","currentItem","wrappedItems","wrapArray","nextItem","startIndex","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","createSelectScope","usePopperScope$1","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","TRIGGER_NAME$1","SelectTrigger","VALUE_NAME","SelectValue","ICON_NAME","SelectIcon","PORTAL_NAME$1","SelectPortal","CONTENT_NAME$1","SelectContent","CONTENT_MARGIN","SelectContentProvider","useSelectContentContext","CONTENT_IMPL_NAME","Slot$2","SelectContentImpl","ITEM_ALIGNED_POSITION_NAME","SelectItemAlignedPosition","POPPER_POSITION_NAME","SelectPopperPosition","SelectViewportProvider","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","LABEL_NAME","SelectLabel","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","ITEM_TEXT_NAME","SelectItemText","ITEM_INDICATOR_NAME","SelectItemIndicator","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","SelectScrollButtonImpl","SEPARATOR_NAME","SelectSeparator","ARROW_NAME$1","SelectArrow","BUBBLE_INPUT_NAME","SelectBubbleInput","Root2$1","Trigger$1","Value","Icon$1","Content2$1","Viewport","Item","ItemText","ItemIndicator","init_dist$3","valueProp","__scopeSelect","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","dir","onValueChange","triggerPointerDownPosRef","isFormControl","form","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","optionsSet","isDisabled","getItems","pointerTypeRef","enabledItems","pointerEvent","isTypingAhead","valueProps","hasChildren","onValueNodeHasChildrenChange","placeholder","iconProps","fragment","setFragment","frag","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","focusSelectedItem","pointerMoveDelta","handlePointerMove","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","popperContentProps","onCloseAutoFocus","isModifierKey","candidateNodes","currentElement","currentIndex","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","isFirstItem","handleScrollButtonChange","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","groupProps","groupId","labelProps","groupContext","textValueProp","itemProps","isSelected","textValue","setTextValue","setIsFocused","textId","handleSelect","prevTextValue","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","itemIndicatorProps","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","onAutoScroll","separatorProps","selectProto","init_select","init_input$1","init_textarea","getState","POPOVER_NAME","createPopoverContext","createPopoverScope","usePopperScope","PopoverProvider","usePopoverContext","Popover$2","ANCHOR_NAME","PopoverAnchor","TRIGGER_NAME","PopoverTrigger$1","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","CONTENT_NAME","PopoverContent$1","Slot$1","PopoverContentModal","PopoverContentNonModal","PopoverContentImpl","CLOSE_NAME","PopoverClose","ARROW_NAME","PopoverArrow","Root2","Trigger","Content2","init_dist$2","__scopePopover","triggerRef","hasCustomAnchor","setHasCustomAnchor","prevOpen","onCustomAnchorAdd","onCustomAnchorRemove","composedTriggerRef","contentRef","isRightClickOutsideRef","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","closeProps","Popover$1","PopoverTrigger","PopoverContent","init_popover","init_switch","init_checkbox","init_toggle","toKebabCase","toCamelCase","toPascalCase","mergeClasses","hasA11yProp","init_utils","p2","p1","camelCase","defaultAttributes","init_defaultAttributes","Icon","init_Icon","absoluteStrokeWidth","strokeWidth","createLucideIcon","init_createLucideIcon","__iconNode$42","ArrowDownWideNarrow","init_arrow_down_wide_narrow","__iconNode$41","ArrowDown","init_arrow_down","__iconNode$40","ArrowLeft","init_arrow_left","__iconNode$39","ArrowRight","init_arrow_right","__iconNode$38","ArrowUpRight","init_arrow_up_right","__iconNode$37","ArrowUp","init_arrow_up","__iconNode$36","BadgeCheck","init_badge_check","__iconNode$35","BookOpen","init_book_open","__iconNode$34","Check","init_check","__iconNode$33","ChevronDown","init_chevron_down","__iconNode$32","ChevronLeft","init_chevron_left","__iconNode$31","ChevronRight","init_chevron_right","__iconNode$30","CircleCheckBig","init_circle_check_big","__iconNode$29","CircleCheck","init_circle_check","__iconNode$28","CirclePlay","init_circle_play","__iconNode$27","CircleQuestionMark","init_circle_question_mark","__iconNode$26","Circle","init_circle","__iconNode$25","Ellipsis","init_ellipsis","__iconNode$24","FileText","init_file_text","__iconNode$23","FolderOpen","init_folder_open","__iconNode$22","Funnel","init_funnel","__iconNode$21","Gift","init_gift","__iconNode$20","Inbox","init_inbox","__iconNode$19","Info","init_info","__iconNode$18","LifeBuoy","init_life_buoy","__iconNode$17","Lightbulb","init_lightbulb","__iconNode$16","LoaderCircle","init_loader_circle","__iconNode$15","Maximize2","init_maximize_2","__iconNode$14","MicOff","init_mic_off","__iconNode$13","Mic","init_mic","__iconNode$12","Minimize2","init_minimize_2","__iconNode$11","Paperclip","init_paperclip","__iconNode$10","Pause","init_pause","__iconNode$9","Play","init_play","__iconNode$8","RotateCcw","init_rotate_ccw","__iconNode$7","Search","init_search","__iconNode$6","SmilePlus","init_smile_plus","__iconNode$5","Smile","init_smile","__iconNode$4","Sparkles","init_sparkles","__iconNode$3","Square","init_square","__iconNode$2","Video","init_video","__iconNode$1","VideoOff","init_video_off","__iconNode","init_x","init_lucide_react","init_advanced_option_toggle","ColorDotDropdown","init_color_dot_dropdown","divProps","rootRef","activeId","activeLabel","activeColor","buttonStyle","compact","buttonClassName","labelClassName","chevronClassName","menuClassName","onSelect","init_color_picker_with_input","init_toggle_group","init_accordion","init_tabs","init_text_field","toTitleCase","getStatusMeta","FeedbackStatusBadge","init_feedback_status_badge","showLabel","labels","UserorbitBranding$1","init_userorbit_footer","isExcludedToken","selectorExclusionPatterns","isStableToken","isStableClassName","genericUtilityClassNames","genericUtilityClassPatterns","unstableClassPatterns","isFrameworkGeneratedId","unstableIdPatterns","isStableId","digitRunPattern","isGuidLikeToken","transitions","characterClass","isDurableAttribute","durableAttributeNames","isUsableAttribute","localizedAttributeNames","isLikelyDynamicText","digits","escapeIdentifier","escapeAttributeValue","getAncestors","createElementFingerprint","getElementRole","getElementLabel","getElementText$1","getFingerprintAttributes","getAncestorHint","getTableContext","getSiblingIndex","fingerprintAttributeNames","explicitRole","normalizeFingerprintText","getAriaLabelledByText","clone","cell","isHTMLElement","row","cellIndex","table","columnHeader","getBestFingerprintMatch","bestMatch","score","scoreElementFingerprint","fingerprint","sharedClasses","scoreTextMatch","scoreTextMismatchPenalty","expectedAncestor","expected","normalizedCurrent","normalizedExpected","exactScore","TEXT_MISMATCH_PENALTY","HTMLElementConstructor","ownerDoc","init_element_fingerprint","normalizeCssSelector","parseIframeSelector","normalizedSelector","separatorIndex","findTopLevelIframeSelectorSeparator","iframeSelector","targetSelector","bracketDepth","parenDepth","quote","isEscaped","iframeSelectorSeparator","getAccessibleIframeDocument","iframe","getAccessibleIframeDocuments","documents","collect","currentDoc","isHTMLIFrameElement","iframeDoc","getElementFrameElements","frames","currentDocument","rootDoc","getFrameElementForDocument","getElementViewportRect","frameRect","createRect","scrollElementIntoView","querySelectorSafely","queryIframe","isValidSelector","isValidSelectorSyntax","matchesSelectorTarget","isElementNode$2","matchesDirectSelectorTarget","resolveElementFromFingerprint","applyElementTargetTextFilter","collectFingerprintCandidates","shouldIgnoreTargetText","getFingerprintMatchScore","resolveElementFromSelectorBank","resolveTargetFromSelectorBank","selectors","elementTargeting","hasElementTargeting","hasActiveElementTargeting","hasStaticTextTarget","hasStaticElementTargetText","fingerprintScore","scoringOptions","manualSelector","isManual","selectorMatches","getElementTargetMatches","getRawSelectorMatches","elementOwnerDoc","isResolvableGuideTarget","resolveManualSelectorMatch","isDurableSelector","selectElementTargetMatch","filteredMatches","bestSelectorMatch","fingerprintMatch","targetDoc","findIframeForDocument","getStaticTargetText","FINGERPRINT_MATCH_SCORE","expectedText","elementMatchesTargetText","textCandidates","combinedText","actual","isUsableFingerprintLookupAttribute","escapeRegExp","HTMLIFrameElementConstructor","DOMRectConstructor","hasBrowserLayout","init_selectors","resolveObservedElement","direct","iframeDocument","observeAccessibleDom","fallbackWindow","documentCleanups","mutationMayChangeDocumentTopology","records","observeDocument","currentWindow","MutationObserverConstructor","observeAccessibleDocuments","onMutation","documentEvents","capture","windowEvents","cleanupDocument","onDocument","handleFrameLoad","reachableDocuments","init_dom_observer","isElementNode$1","isHTMLElementNode","isInputElement","isTextAreaElement","isSelectElement","resolveInteractiveHost","hasMeaningfulRichTextContent","isElementFilled","matchesSelectorWithinInteractiveHost","getConditionSelectors","condition","resolveConditionElement","eventPathContains$1","matchesConditionTarget","checkStepCondition","evaluateConditions","waitFor","clickedSelectors","focusedOutSelectors","firedEvents","isPersistentStateCondition","evaluateStepConditions","conditions","logic","useStepCondition","hasFired","tryEvaluate","onConditionMet","inputHandler","clickHandler","clickConditions","cond","blurHandler","focusOutConditions","customEventHandler","customEventNames","disposeObservation","stateConditionInterval","STATE_CONDITION_POLL_INTERVAL_MS","init_use_step_condition","queryDirectSelector","findElement","timeoutMs","DEFAULT_TARGET_WAIT_TIMEOUT_MS","resolveTarget","shouldUseTargetResolver","waitForSelectors","didNotifyTimeout","checkElement","TARGET_POLL_INTERVAL_MS","ownerElement","getStepTargetSelectors","generatedSelectors","getStepManualSelector","getStepTargetFingerprint","getStepElementTargeting","eventHitsTargetElement","eventTarget","isElementNode","isElementInDocumentTree","isHTMLElementForOwnerDocument","getNavigationElement","HTMLAnchorElementConstructor","isElementInsideRootElement","rootElement","eventHitsGuidePopover","stopGuideSurfacePropagation","isSuppressedActivationClick","suppressedClick","elapsedMs","getElementOwnerDocuments","getElementOwnerWindows","getResizeObserverElements","getScrollUpdateTargets","scrollablePattern","addDocumentTargets","addScrollableAncestors","startElement","hasRoundedRectChanged","getStepHasTarget","canShowPopoverArrowForStepType","createGuideRect","parseCssTimeValue","parseCssTimeList","getMaxCssMotionTimeMs","transitionDurations","transitionDelays","animationDurations","animationDelays","maxTime","MOVING_TARGET_WATCH_MAX_MS","eventMayMoveTarget","generateStageSvgPathString","windowX","windowY","stage","stagePadding","stageRadius","radius","stageWidth","stageHeight","limitedRadius","normalizedRadius","boxX","boxY","boxWidth","boxHeight","highlightBoxX","highlightBoxY","highlightBoxWidth","highlightBoxHeight","Overlay","previousElementRectRef","elementRect","pathD","setPathD","previousRect","newPathD","prevPathD","durationMs","animationSpeed","interpolateRect","easedProgress","updatePath","interpolatedRect","show","isExitAnimating","svgStyle","GUIDE_LAYER_Z_INDEX","background","pathStyle","borderColor","borderWidth","GUIDE_SURFACE_EVENT_HANDLERS","calculateArrowPosition","ARROW_SIZE","resolvedArrowSize","baseStyle","calculateHorizontalArrowPosition","popoverRect","popoverStyle","calculateVerticalArrowPosition","getRenderedPopoverCoordinate","parsedCoordinate","coordinate","clampArrowPosition","minPosition","ARROW_OFFSET","popoverSize","maxPosition","popoverLeft","popoverTop","isVideoOnlyFramelessHtml","FRAMELESS_VIDEO_ONLY_RE","runButtonJavascript","button","getStageRect","getPopoverPlacement","getPopoverSidePriority","getPopoverAvailableSpace","VIEWPORT_PADDING","winHeight","winWidth","getPopoverRequiredSpace","TOTAL_GAP","resolvePopoverSide","availableSpace","prioritizedSides","preferredSide","bestSide","smallestOverflow","getFixedPopoverPlacement","getFixedPopoverBaseTranslateValues","resolveAnimationDirection","popoverSide","getSlideOffset","SLIDE_OFFSET_PX","getDirectionMotionOffset","slideDistance","getAutoDialogMotionOffset","FIXED_DIALOG_SLIDE_OFFSET_PX","FIXED_DIALOG_CENTER_SLIDE_OFFSET_PX","getAutoSlideoutMotionOffset","getFixedPopoverMotion","isSlideout","tourType","getFixedPopoverTransform","motionTransform","getFixedPopoverTransformOrigin","Popover","currentStepIndex","totalSteps","_onDismiss","popoverRef","hasShownPopoverRef","setPopoverRect","isEntryVisible","setIsEntryVisible","isBanner","isFramelessVideoOnly","autoProceedProgress","setAutoProceedProgress","preferredPlacement","configuredWidth","mergedTheme","popoverWidth","video","defaultStyles","stageRect","effectiveSide","isLeaving","isPopoverVisible","isTransitioning","isEntering","usesTransformMotion","transitionProperty","isBottom","isFloating","slideOffset","animationDirection","fixedMotion","fixedTransitionProperty","tourAllowsStepCount","stepAllowsStepCount","showProgress","progressTotalSteps","progressType","showProceedBar","showProgressArea","showLeadingFooterArea","voiceOverControl","actualProgressText","progressText","progressStepIndex","contentPadding","actionPadding","actionSectionStyle","buttonPosition","isLastStep","stepProgression","showPrimaryAction","showPreviousAction","previousButton","isFirstStep","showCloseAction","closeButton","snoozeConfig","showSnoozeAction","snoozeLabel","showActionBar","hideFooterForElementClick","referenceElement","openWidgetTarget","onOpenWidget","handlePrimaryAction","primaryButton","onTrackEvent","onNext","handleCloseAction","progressButtonText","primaryButtonText","primaryAction","ICONS","closePopoverButton","arrowStyle","isTargetedPopoverStep","hideArrow","showArrow","getArrowRotation","ignoreAutoProceed","isEditing","isWaitingForCondition","updateProgress","showFooter","arrowImage","arrowImageSize","editor","onSnooze","onPrev","shouldWaitForCondition","ignoreWaitForCondition","shouldDelayStep","stripStepHtml","resolveSpeechSynthesisVoice","voiceId","voices","synth","byId","voice","normalizedLanguage","useGuideVoiceOver","audioRef","currentUtteranceRef","autoPlayedKeyRef","playbackOwnerTokenRef","isPlaying","setIsPlaying","isBlocked","setIsBlocked","isGenerating","setIsGenerating","stepVoiceOver","activeIndex","audioUrl","syntheticText","pitch","autoPlay","shouldPlayAudioUrl","usesProviderVoice","canUseBrowserSpeech","canPlay","canGenerate","onGenerateVoiceOver","canRenderControl","autoPlayKey","releasePlaybackOwner","guideVoiceOverPlaybackOwners","stopLocalPlayback","releaseOwner","claimPlaybackOwner","currentOwner","stop","play","generatedAudioUrl","audio","utterance","isReady","getResolvingTargetState","hasTarget","Guide","restConfig","hasScrolledRef","exitTimeoutRef","popoverTransitionTimeoutRef","highlightedStepRef","delayActive","setDelayActive","showStep","setShowStep","isExiting","setIsExiting","targetResolutionVersion","setTargetResolutionVersion","beaconRef","beaconElementRect","setBeaconElementRect","suppressedActivationClickRef","defaultConfig","setState","isResolvingTarget","isWaitingForElement","currentStep","shouldDisableKeyboardStepNavigation","allowClose","defaultOverlayClickBehavior","configuredOverlayClickBehavior","overlayClickBehavior","rootOwnerDocument","rootOwnerWindow","resolvedThemeMode","animationEnabled","tourAnimationDirection","transitionDuration","rafId","movingTargetRafId","movingTargetWatchRef","lastTargetRectRef","recoveryInProgressRef","preCommittedStepIdRef","targetResolutionPhaseRef","targetLossHandledRef","pendingTargetAdvanceRef","guideAPI","handleTargetDetached","replacement","ignoreAncestorAriaHiddenTargets","onTargetResolution","syncTargetRect","hasChangedSinceLastSync","shouldProceedOnClick","isPopoverTransitioning","shouldDisableInteraction","stopTour","activeElement","activeStep","finishStopTour","startTour","initialIndex","initialStep","hasInitialTarget","shouldWaitForInitialCondition","moveToStep","previousElement","previousStep","nextStep","nextStepHasTarget","shouldWaitForNextCondition","shouldDelayPopoverEntry","findRecoveryStepIndex","recovery","recoverToStep","completeStep","stepId","handleNext","hookHandled","nextActiveIndex","nextButtonHref","nextButtonIsExternal","handlePrevious","prevActiveIndex","handleMissingTargetTimeout","stepIndex","behavior","handleSnooze","handleOverlayClick","currentPivotSelector","currentCustomPivotSelector","currentPivotSelectorFallbacks","currentPivotSelectorFingerprint","missingTargetSkipTimeout","resolutionPhase","isRecoveringTimedOutTarget","targetResolutionTimedOut","stepLogLabel","targetResolution","MISSING_TARGET_RECOVERY_WINDOW_MS","hook","retryIfTargetMounted","observedDocuments","TARGETED_STEP_ENTRY_DELAY_MS","checkTargetConnection","observedRoot","updateRect","stopMovingTargetWatch","watchMovingTarget","didMove","watch","MOVING_TARGET_STABLE_FRAMES","startMovingTargetWatch","handleMotionStart","motionTarget","scrollUpdateTargets","resizeUpdateWindows","motionDocuments","scrollListenerOptions","resizeObservers","ResizeObserverConstructor","observedElement","bodyClass","targetOwnerWindow","eventWindows","previousCursor","navigationElement","hasAdvanced","pointerdownFallbackTimeout","clearPointerdownFallback","advanceFromEvent","tryAdvanceFromEvent","POINTERDOWN_ADVANCE_FALLBACK_MS","tryAdvanceFromNavigationClick","eventWindow","autoProceedTimeout","handleConditionMet","tryRecover","recoveryIndex","interval","handleBeaconClick","handleBeaconMouseEnter","handleBeaconMouseLeave","progressSteps","progressStep","currentProgressStepIndex","currentPopoverConfig","isCurrentTargetReady","showUI","showOverlay","shouldShowBeacon","measureBeaconRect","beaconElement","guideSurfaceElementRect","shouldShowStep","showPopover","shouldRenderPopover","Beacon","init_guide","getInsetForType","hotspotInset","badgeInset","labelInset","getPositionStyles","inset","getBeaconContent","icon","createPreviewSteps","isEditorPreview","StepPreview","init_step_preview$1","trackTourProgress","currentStepId","suspendTour","closePreview","snoozeTour","handleGuideStop","filteredSteps","isBeacon","hasKeyboardControl","previewSteps","init_preview_outline","init_step_preview","init_tour_dialog","init_powered_by_userorbit","init_feedback_form$1","init_expandable_search","FeedbackBoard","loadingText","errorText","emptyIcon","emptyText","emptyDescription","renderItem","idx","loadMoreRef","loadingMoreText","scrollToLoadMoreText","init_feedback_board","ArticleLink","init_article_link","baseClasses","textBaseClasses","iconContainerBaseClasses","component","as","textClassName","iconContainerClassName","init_product_icons","init_tabler_icons","useSpeechRecognition","init_use_speech_recognition","transcript","setTranscript","isListening","setIsListening","setIsSupported","recognitionRef","stateRef","interimTranscriptRef","SpeechRecognition","recognition","finalTranscript","interimTranscript","newTranscript","final","ShimmeringText","isInView","setIsInView","startOnView","hasAnimatedRef","inViewMargin","spreadValue","spread","baseColor","shimmerBg","shimmerColor","baseBg","init_shimmering_text","VoiceRecorder","init_voice_recorder","recognitionError","startRecognition","stopRecognition","hasCalledCompleteRef","onRecordingComplete","handleStart","init_step_settings_menu","init_src","useMotionHighlight","MotionHighlightContext","getNonOverridingDataAttributes","dataAttributes","useTabs","TabsContext","MotionHighlight","MotionHighlightItem","Tabs","TabsList","TabsTrigger","TabsContents","TabsContent","init_animated_tabs","localRef","activeValue","setActiveValueState","boundsState","setBoundsState","activeClassNameState","setActiveClassNameState","safeSetActiveValue","safeSetBounds","boundsOffset","containerRect","newBounds","bounds","clearBounds","onScroll","activeEl","childrenToRender","exitDelay","controlledItems","childDataValue","contextClassName","contextTransition","contextId","contextDisabled","contextExitDelay","contextForceUpdateBounds","childValue","itemTransition","previousBounds","shouldUpdateBounds","forceUpdateBounds","updateBounds","setBounds","setActiveClassName","activeClassName","commonHandlers","setActiveValue","triggersRef","initialSet","firstTab","registerTrigger","triggerValue","handleValueChange","currentActiveValue","isCompact","timeAgo","date","MINUTE","HOUR","DAY","MONTH","YEAR","formatDate","init_dates","escapeHtml$1","escapeHtmlAttribute","decodeHtml","getHtmlAttribute","wantedName","attributeName","attributeTokenPattern","init_html","isValidVideoEmbedUrl","src","isValidDemoEmbedUrl","demoId","getDemoEmbedMetadata","openingTag","block","getVideoEmbedMetadata","renderVideoEmbeds","videoEmbedBlockPattern","renderInteractiveDemoEmbeds","interactiveDemoBlockPattern","demo","safeDemoId","safeSrc","safeTitle","init_interactive_demo","AnnouncementReferences","linkedFeedbacks","onFeedbackClick","feedbacks","helpArticles","onArticleClick","articles","productTours","onTourClick","tours","hasPreviousReferences","feedback","init_announcement_references","logger$30","Avatar$1","getSubscriberDisplayName$1","getReplyPlaceholderName$1","ReplyComposer","CommentItem$1","CommentSection","init_comment_section","hasValue","onCancel","onSubmit","isReply","comment","setReplyingTo","replyingTo","replyText","setReplyText","handleReply","handleReplyKeyDown","replyMutation","reply","comments","initialComments","commentId","commentsCount","total","showHeader","REACTIONS_EMOJI","ReactionBar","init_reaction_bar","currentReaction","setCurrentReaction","userReaction","setIsOpen","setIsLoading","handleReactionSelect","reactionValue","newReaction","onReactionUpdate","currentEmoji","logger$29","PostEngagement","init_post_engagement","announcement","selectedReaction","reactions","commentsEnabled","reactionsEnabled","handleReactionUpdate","currentData","previousReaction","nextReactions","newComment","setNewComment","isTextareaFocused","setIsTextareaFocused","textareaRef","commentMutation","handleSubmitComment","getReferenceIds","AnnouncementDetail","init_announcement_detail","meta","primaryKey","fallbackKey","postCollaborators","collection","hydratedFeedbacks","hydratedArticles","hydratedTours","feedbackIds","articleIds","fallbackReferences","feedbackResponses","articleResponses","tourResponses","contentBottomPadding","showPoweredByFooter","collaborator","n$1","r$1","t$1","e$1","init_snarkdown_es","escapeHtml","escapeAttribute","sanitizeLinks","normalizedHref","parseImageMetadata","normalizedSrc","metadataMatch","IMAGE_METADATA_KEY","metadata","sanitizeImages","alt","FALLBACK_IMAGE_ASPECT_RATIO$1","unwrapFramedImageParagraphs","FRAMED_IMAGE_PARAGRAPH_RE","normalizeMalformedArticleImages","MALFORMED_ARTICLE_IMAGE_RE","normalizeMixedListMarkers","lines","normalizedLines","MIXED_LIST_MARKER_RE","line","normalizeIndentedMarkdown","fenceIndent","shouldUnindentListContinuation","normalizedLine","INDENTED_FENCE_RE","fenceMatch","indentedListItem","INDENTED_LIST_ITEM_RE","LIST_ITEM_RE","indentedContinuation","INDENTED_LIST_CONTINUATION_RE","getOrderedListGroups","groups","pendingStart","pendingCount","nextStart","flushPendingGroup","ORDERED_LIST_ITEM_RE","parsedStart","renderMarkdownText","orderedListGroups","groupIndex","LIST_SEPARATOR_BREAK_RE","previousList","nextList","lastNonEmptyLine","renderCodeBlock","renderMarkdown","normalizedContent","FENCED_CODE_BLOCK_RE","init_markdown","useAiChat","messages","setMessages","conversationId","setConversationId","userMessage","assistantMessageId","responseTimeout","AI_RESPONSE_TIMEOUT_MS","resetResponseTimeout","currentUrl","decoder","fullContent","tourSuggestions","featureSuggestions","actionSuggestion","sseBuffer","dataLines","jsonStr","logger$28","msg","timedOut","init_use_ai_chat","getAudioContext","AudioContextConstructor","audioContext","playTone","oscillator","gain","fromFrequency","startAt","toFrequency","volume","playChatSound","sound","lastReceivedSoundAt","RECEIVED_SOUND_THROTTLE_MS","init_chat_sounds","isHumanHandoffRequest","normalizedMessage","HUMAN_HANDOFF_PATTERNS","PERSON_ROLE","CONTACT_ROLE","ROLE_QUALIFIER","QUALIFIED_PERSON_ROLE","QUALIFIED_CONTACT_ROLE","ESCALATION_SUBJECT","init_human_handoff","getAssistantFollowUp","NON_ANSWER_PATTERNS","ThinkingIndicator","hasSupportHandoffOffer","logger$27","DEFAULT_QUESTIONS","AI_GREETING_FOLLOW_UPS","AI_MESSAGE_TOP_GUTTER","AI_TYPING_DELAY_MS","AskAiContent","init_ask_ai_content","init_widget","inputValue","setInputValue","initialMessage","isGreetingTyping","setIsGreetingTyping","showResponseTyping","setShowResponseTyping","conversationTailHeight","setConversationTailHeight","assistantMessageRefs","userMessageRefs","chatScrollRef","inputRef","submittedInitialMessageRef","lastRevealedUserMessageRef","lastAnchoredAssistantMessageRef","lastSoundedAssistantMessageRef","aiConfig","defaultQuestions","lastAssistantMessage","hasUserMessages","isWaitingForAssistant","shouldShowFeedbackCard","shouldShowSupportCard","onSupportClick","handoffToSupport","trimmedMessage","routeUserMessage","sendMessage","autoSubmitInitialMessage","revealMessageFromBottom","messageRect","messageNode","viewportTop","viewportBottom","scrollDelta","maxScrollTop","latestUserMessage","latestAssistantMessage","anchorUserMessage","containerTop","anchorTop","anchorOffset","targetScrollTop","contentScrollHeight","requiredTailHeight","handleSubmit","handleQuestionClick","question","handleSupportClick","lastUserMessage","handleTourStart","triggerTour","renderMessage","isUser","messageRefs","primaryButtonBackgroundColor","primaryButtonTextColor","onFeatureClick","showWelcome","normalizedTeamName","teamName","assistantFollowUp","aiGreeting","isMobileSheet","isPoweredByRequiredPlan","plan","poweredByRequiredPlans","shouldShowPoweredBy","showPoweredBy","init_branding","getRootId","RootIds","rootId","optionsToId","createObserver","observerMap","thresholds","inView","observe","unsupportedValue","fallbackInView","useInView","initialInView","unobserve","triggerOnce","trackVisibility","entryTarget","previousEntryTarget","init_dist$1","SkeletonBox","FeedbackItemSkeleton","FeedbackContentSkeleton","RoadmapItemSkeleton","RoadmapStageSkeleton","DetailPageLoader","RoadmapContentSkeleton","HomeAnnouncementsSkeleton","AnnouncementItemSkeleton","AnnouncementTimelineSkeleton","HelpCenterContentSkeleton","CollectionPageSkeleton","init_feedback_skeleton","QueryProviderContext","FeedbackQueryProvider","useQueryClient","init_query_provider","WidgetEmptyState","description","init_widget_empty_state","defaultButtonClassName","getNextVoteInfo","updateItemVoteCount","syncCachedItemVoteCounts","invalidateVoteQueries","PostVote","init_post_vote","isSubscriberVoted","setIsActive","votes","setVotes","votesCount","addVote","previousVotes","nextVotes","deleteVote","toggleVote","logger$26","feedbackStatuses","defaultStatusFilters","sortOptions","FeedbackItemComponent","FeedbackContentInner","FeedbackContent","init_feedback_content","_primaryColor","_onItemClick","fbBoard","boards","isLast","selectedBoardId","propActiveBoardId","activeBoardId","setActiveBoardId","setSearchQuery","searchInputValue","setSearchInputValue","sortBy","setSortBy","sortMenuOpen","setSortMenuOpen","statusFiltersOpen","setStatusFiltersOpen","selectedStatuses","setSelectedStatuses","sortMenuRef","statusFiltersRef","boardsResponse","boardsLoading","boardsError","itemsLoading","itemsError","pageParam","lastPage","totalFetched","fetchNextPage","handleOutsideClick","allItems","visibleItems","activeBoard","board","activeStatusCount","toggleStatus","checked","useDraft","storageKey","PREFIX","init_use_draft","logger$25","Avatar","getSubscriberDisplayName","getReplyPlaceholderName","HTML_TAG_PATTERN","DANGEROUS_TAG_PATTERN","EVENT_HANDLER_PATTERN","JAVASCRIPT_URL_PATTERN","looksLikeHtml","sanitizeCommentHtml","CommentComposer","CommentItem","FeedbackCommentSection","init_feedback_comment_section","submitLabel","mainCommentText","setMainCommentText","clearCommentDraft","mainCommentMutation","handleMainComment","handleMainCommentKeyDown","init_style","replay_exports$1","Replayer","isElement","n2","createMirror$2","Mirror","toLowerCase","isNodeMetaEqual","NodeType$3","extractFileExtension","baseURL","getDefaultExportFromCjs$1","getAugmentedNamespace$1","f2","a22","requirePicocolors_browser$1","hasRequiredPicocolors_browser$1","picocolors_browser$1","create","requireCssSyntaxError$1","hasRequiredCssSyntaxError$1","cssSyntaxError$1","pico","terminalHighlight","require$$2$1","CssSyntaxError","plugin","maxWidth","mark","aside","bold","gray","index2","gutter","requireSymbols$1","hasRequiredSymbols$1","symbols$1","requireStringifier$1","hasRequiredStringifier$1","stringifier$1","DEFAULT_RAW","capitalize","Stringifier","builder","semicolon","detect","buf","indent","between","after","i2","before","own","root2","raw","requireStringify$1","hasRequiredStringify$1","stringify_1$1","stringify","requireNode$1","hasRequiredNode$1","node$1","cloneNode","cloned","Node2","isClean","my","s2","add","overrides","keepBetween","stringRepresentation","bookmark","foundSelf","result2","fixed","emitInputs","inputsNextIndex","inputId","input2","stringifier2","requireDeclaration$1","hasRequiredDeclaration$1","declaration$1","Declaration","requireNonSecure$1","hasRequiredNonSecure$1","nonSecure$1","defaultSize","alphabet","requirePreviousMap$1","hasRequiredPreviousMap$1","previousMap$1","fromBase64","PreviousMap","dirname","SourceMapConsumer","baseCharsetUri","baseUri","encoding","sourceMapString","existsSync","readFileSync","prevPath","SourceMapGenerator","join","requireInput$1","hasRequiredInput$1","input$1","fromOffsetCache","sourceMapAvailable","pathAvailable","isAbsolute","Input","nanoid","endLine","endColumn","pathToFileURL","lastLine","lineToIndex","prevIndex","l2","mid","consumer","fromUrl","fileURLToPath","requireMapGenerator$1","hasRequiredMapGenerator$1","mapGenerator$1","sep","MapGenerator","cssString","eol","noSource","mapping","annotation","already","fileURL","requireComment$1","hasRequiredComment$1","comment$1","Comment","requireContainer$1","hasRequiredContainer$1","container$1","Rule","AtRule","cleanSource","markDirtyUp","iterator","existIndex","exist","decl","e2","dependant","requireDocument$1","hasRequiredDocument$1","document$1$1","LazyResult","Processor","Document2","requireWarnOnce$1","hasRequiredWarnOnce$1","warnOnce$1","printed","requireWarning$1","hasRequiredWarning$1","warning$1","Warning","range","requireResult$1","hasRequiredResult$1","result$1","Result","processor2","warning2","requireTokenize$1","hasRequiredTokenize$1","tokenize$1","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","ignore","escape","escaped","escapePos","currentToken","returned","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","requireAtRule$1","hasRequiredAtRule$1","atRule$1","requireRoot$1","hasRequiredRoot$1","root$1","requireList$1","hasRequiredList$1","list_1$1","inQuote","prevQuote","letter","separators","requireRule$1","hasRequiredRule$1","rule$1","requireParser$1","hasRequiredParser$1","parser$1","tokenizer","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","tokens","Parser","brackets","colon","founded","firstSpaces","customProperty","bracket","clean","lastTokenType","spaces","requireParse$1","hasRequiredParse$1","parse_1$1","parser2","requireLazyResult$1","hasRequiredLazyResult$1","lazyResult$1","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","isPromise","getEvents","toStack","cleanMarks","postcss2","onRejected","onFinally","visitor","subRoot","onFulfilled","visitors","visit2","requireNoWorkResult$1","hasRequiredNoWorkResult$1","noWorkResult$1","NoWorkResult","self2","generatedCSS","generatedMap","requireProcessor$1","hasRequiredProcessor$1","processor$1","plugins","requireFromJSON$1","hasRequiredFromJSON$1","fromJSON_1$1","fromJSON","ownInputs","inputHydrated","requirePostcss$1","hasRequiredPostcss$1","postcss_1$1","warningPrinted","creator","transformer","initializer","pluginOpts","processOpts","getTagName","tagMap","adaptCssForReplay","cachedStyle","cssText","postcss$1","mediaSelectorPlugin","pseudoClassPlugin","createCache","isSupportedSandboxedIframe","sandboxTokens","assertRebuildTargetAllowed","REBUILD_TARGET_ERROR","applyCssSplits","childTextNodes","scn","cssTextSplits","adaptedCss","hackCss","childTextNode","endIndex","endSearch","searchBit","searchIndex","buildStyleNode","styleEl","buildNode","specialAttributes","image","buildNodeWithSN","mirror2","nodeInMirror","skipChild","childN","childNode","htmlElement","afterAppend","walk","onVisit","rebuild","visitedNode","createSandboxedIframe","_a2","SANDBOXED_IFRAME_ROOT_ERROR","sandboxedRebuildDocuments","createMirror$1","Mirror$1","getDefaultExportFromCjs","getAugmentedNamespace","requirePicocolors_browser","hasRequiredPicocolors_browser","picocolors_browser","requireCssSyntaxError","hasRequiredCssSyntaxError","cssSyntaxError","require$$2","requireSymbols","hasRequiredSymbols","symbols","requireStringifier","hasRequiredStringifier","stringifier","requireStringify","hasRequiredStringify","stringify_1","requireNode","hasRequiredNode","requireDeclaration","hasRequiredDeclaration","declaration","requireNonSecure","hasRequiredNonSecure","nonSecure","requirePreviousMap","hasRequiredPreviousMap","previousMap","requireInput","hasRequiredInput","requireMapGenerator","hasRequiredMapGenerator","mapGenerator","requireComment","hasRequiredComment","requireContainer","hasRequiredContainer","requireDocument","hasRequiredDocument","document$1","requireWarnOnce","hasRequiredWarnOnce","warnOnce","requireWarning","hasRequiredWarning","warning","requireResult","hasRequiredResult","requireTokenize","hasRequiredTokenize","tokenize","requireAtRule","hasRequiredAtRule","atRule","requireRoot","hasRequiredRoot","requireList","hasRequiredList","list_1","requireRule","hasRequiredRule","rule","requireParser","hasRequiredParser","requireParse","hasRequiredParse","parse_1","requireLazyResult","hasRequiredLazyResult","lazyResult","requireNoWorkResult","hasRequiredNoWorkResult","noWorkResult","requireProcessor","hasRequiredProcessor","processor","requireFromJSON","hasRequiredFromJSON","fromJSON_1","requirePostcss","hasRequiredPostcss","postcss_1","parseCSSText","listDelimiter","propertyDelimiter","tmp","camelize","toCSSText","hyphenate","appendChild","newChild","insertBefore","refChild","removeChild","diff","newTree","diffBeforeUpdatingChildren","oldTree","replayer","rrnodeMirror","diffChildren","diffAfterUpdatingChildren","createdNodeSet","sameNodeType","calibratedOldTree","createOrGetNode","NodeType$1","nodeMatching","newMeta","oldElement","newRRElement","oldContentDocument","diffProps","scrollData","oldMediaElement","newMediaRRElement","rrCanvasElement","canvasMutation2","styleSheet","dialog","rrDialog","wasOpen","wasModal","shouldBeOpen","shouldBeModal","modalChanged","openChanged","oldAttributes","newAttributes","NAMESPACES","oldChildren","oldStartIndex","oldEndIndex","newStartIndex","newEndIndex","oldStartNode","oldEndNode","newStartNode","newEndNode","oldIdToIndex","indexInOld","oldChild2","nodeToMove","newNode","referenceRRNode","referenceNode","oldChild","nodeId","rrNode","domMirror","SVGTagMap","\"svg\"","node1","node1Id","node2Id","rrdomMirror","getValidTagName","buildFromNode","NodeType$2","parentRRNode","rrdom","documentType","elementNode","rrElement","RRDocument","getDefaultSN","buildFromDom","walk2","dom","createMirror","Mirror22","doctype","getUntaintedPrototype","untaintedBasePrototype","defaultObj","defaultPrototype","accessorNames","testableAccessors","isUntaintedAccessors","accessor","methodNames","testableMethods","isUntaintedMethods","isAngularZonePresent","iframeEl","untaintedObject","getUntaintedAccessor","cacheKey","untaintedAccessorCache","untaintedPrototype","untaintedAccessor","getUntaintedMethod","untaintedMethodCache","untaintedMethod","ownerDocument$1","childNodes","parentElement","contains","getRootNode","styleSheets","querySelector","querySelectorAll","mutationObserverCtor","untaintedBaseIframeCleanup","\"MutationObserver\"","patch","wrapped","polyfill$1","queueToResolveTrees","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","nextId","nextInTree","parentInTree","iterateResolveTree","tree","isSerializedIframe","getBaseDimension","rootIframe","frameDimension","frameBaseDimension","relativeScale","hasShadowRoot","BaseRRNode","index$1","getNestedRule","rule2","rules2","getPositionsAndIndex","positions","nestedIndex","uniqueTextMutations","idSet","uniqueMutations","mitt$1","t2","n3","Element2","scrollElement","isMicrosoftBrowser","ROUNDING_TOLERANCE","shouldBailOut","firstArg","hasScrollableSpace","canOverflow","overflowValue","isScrollable","isScrollableY","isScrollableX","findScrollableParent","currentY","smoothScroll","scrollable","startX","startY","scrollableParent","parentRects","clientRects","addDelay","EventType","IncrementalSource","firstOffset","firstTimestamp","baselineTime","o2","t3","o3","v2","s3","l3","v3","e3","c2","i3","u2","discardPriorSnapshots","createPlayerService","timeOffset","timer","neededEvents","lastPlayedTimestamp","lastPlayedEvent","emitter","ReplayerEvents","syncEvents","castFn","getCastFn","applyEventsSynchronously","machineEvent","insertionIndex","isSync","createSpeedService","variableListFor","contextMap","webGLVarMap","deserializeArg","preload","imageMap","decode","image2","blobContents","getContext","CanvasContext","saveToWebGLVarMap","WebGLVariableConstructorsNames","webglMutation","errorHandler2","canvasMutation$1","mutationArgsPromises","args2","canvasMutation","precomputedMutation","canvasEventMap","commands","command","applyDialogToTopLevel","oldIsOpen","oldIsModalState","rrOpenMode","newIsOpen","attributeMutation","newIsModalState","removeDialogFromTopLevel","indicatesTouchDevice","MouseInteractions","__defProp","__defNormalProp","__publicField","__defProp$1","__defNormalProp$1","__publicField$1","MEDIA_SELECTOR_GLOBAL","__defProp2","__defNormalProp2","__publicField2","__defProp22","__defNormalProp22","__publicField22","postcss","camelizeRE","CUSTOM_PROPERTY_REGEX","hyphenateRE","BaseRRDocument","BaseRRDocumentType","BaseRRElement","BaseRRMediaElement","BaseRRDialogElement","BaseRRText","BaseRRComment","BaseRRCDATASection","ClassList","RRDocumentType","RRElement","RRMediaElement","RRDialogElement","RRCanvasElement","RRStyleElement","RRIFrameElement","RRText","RRComment","RRCDATASection","nowTimestamp","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","StyleSheetMirror","MediaInteractions","NodeType","chars","lookup","i$1","Timer","rules","MediaManager","SKIP_TIME_INTERVAL","mitt","REPLAY_CONSOLE_PREFIX","defaultMouseTailConfig","init_replay$1","\"Document\"","\"DocumentType\"","\"Element\"","\"Text\"","\"CDATA\"","\"Comment\"","NodeType2","oldNode","atrule","_args","childNodes2","childIterator","nodeType","publicId","qualifiedName","systemId","comment2","CDATASection","textContent2","newClassName","hyphenateRE2","shadowRoot2","attributeString","classNames","classText","\"PLACEHOLDER\"","\"ELEMENT_NODE\"","\"ATTRIBUTE_NODE\"","\"TEXT_NODE\"","\"CDATA_SECTION_NODE\"","\"ENTITY_REFERENCE_NODE\"","\"ENTITY_NODE\"","\"PROCESSING_INSTRUCTION_NODE\"","\"COMMENT_NODE\"","\"DOCUMENT_NODE\"","\"DOCUMENT_TYPE_NODE\"","\"DOCUMENT_FRAGMENT_NODE\"","documentTypeNode","upperTagName","commentNode","sectionNode","textNode","receiver","newId","\"DomContentLoaded\"","\"Load\"","\"FullSnapshot\"","\"IncrementalSnapshot\"","\"Meta\"","\"Custom\"","\"Plugin\"","\"Asset\"","EventType2","\"Mutation\"","\"MouseMove\"","\"MouseInteraction\"","\"Scroll\"","\"ViewportResize\"","\"Input\"","\"TouchMove\"","\"MediaInteraction\"","\"StyleSheetRule\"","\"CanvasMutation\"","\"Font\"","\"Log\"","\"Drag\"","\"StyleDeclaration\"","\"Selection\"","\"AdoptedStyleSheet\"","\"CustomElement\"","IncrementalSource2","\"MouseUp\"","\"MouseDown\"","\"Click\"","\"ContextMenu\"","\"DblClick\"","\"Focus\"","\"Blur\"","\"TouchStart\"","\"TouchMove_Departed\"","\"TouchEnd\"","\"TouchCancel\"","MouseInteractions2","\"WebGL\"","\"WebGL2\"","CanvasContext2","\"Play\"","\"Pause\"","\"Seeked\"","\"VolumeChange\"","\"RateChange\"","MediaInteractions2","\"Start\"","\"Resume\"","\"Resize\"","\"Finish\"","\"FullsnapshotRebuilded\"","\"LoadStylesheetStart\"","\"LoadStylesheetEnd\"","\"SkipStart\"","\"SkipEnd\"","\"EventCast\"","\"CustomEvent\"","\"Flush\"","\"StateChange\"","\"PlayBack\"","\"Destroy\"","ReplayerEvents2","bufferLength","encoded1","encoded2","encoded3","encoded4","arraybuffer","cleanFrame","actions","rafWasActive","blockClass","mediaState","mediaPlaybackOffset","seekToTime","onLoadedMetadata","lastState","playbackRate","muted","playerIsPaused","serializedNode","mediaAttributes","currentTimeAtLastInteraction","dimension","events2","skipTime","payload","finishBuffer","replayerHandler","canvasEvent","canvasMutationData","realNode","firstMeta","firstFullsnapshot","firstEvent","lastEvent","rawEvent","collectedIframes","collectedDialogs","builtNode","mutationInQueue","head","injectStylesRules","collected","unloadSheets","beforeLoadState","stateHandler","canvas","imgd","_c","lastPosition","triggerFocus","mediaEl","fontFace","virtualNode","legacy_missingNodeMap","nextNotInDOM","appendNode","parentSn","prospectiveSiblings","parentDoc","targetId","resolveTrees","parentEl","newSn","siblingNode","parentNode2","textarea","styleValues","targetEl","svp","svs","selectionSet","ranges","startContainer","endContainer","startOffset","endOffset","_d","targetHost","newStyleSheet","hostWindow","adoptStyleSheets","stylesToAdopt","styleIds","styleId","targetHost2","targetMutation","previousInMap","previousId","nextInMap","debugData","_x","_y","draw","lineWidth","lineCap","strokeStyle","hoveredEl","currentEl","formatDuration","loadPreview","FeedbackReplayPreview","init_feedback_replay_preview","preview","eventGroups","chunk","chunkResponse","expanded","setExpanded","playing","setPlaying","currentMs","setCurrentMs","fullscreen","setFullscreen","shellRef","stageRef","replayerRef","clipDurationMs","replayOffsetMs","handleFullscreenChange","fit","seek","togglePlayback","FeedbackDetailContent","FeedbackDetail","init_feedback_detail","subscriberName","attachment","loadHtml2Canvas","HTML2CANVAS_SRC","html2canvas","html2canvasLoad","isUserorbitElement","init_html2canvas","isScreenshotPrivate","SCREENSHOT_PRIVATE_SELECTOR","hasScreenshotPrivateContent","clearPrivateRegion","computed","boxSize","sum","sanitizeScreenshotClone","regions","captureElement","region","init_screenshot_privacy","getTargetingValue","applyJsonLogic","matchesAudienceTargeting","init_audience_targeting","part","operands","audience","targeting","personData","replay_exports","canStartReplayOnDemand","captureReplayEvidence","getReplayState","initializeSessionReplay","startReplayOnDemand","stopReplayOnDemand","logger$24","REPLAY_SCRIPT_ID","REPLAY_EVIDENCE_TIMEOUT_MS","SAMPLE_STORAGE_PREFIX","SESSION_POLL_INTERVAL_MS","replayScriptPromise","activeSessionId","sessionTransition","sessionWatcherStarted","replayOptedOut","callerReplayEnabled","consentGeneration","disposeEnvironmentSubscription$1","getReplayRuntimeUrl","isReplaySupported","getReplayContext","getDistinctId","safeSelector","rollSamplingVerdict","loadReplayRuntime","startRecordingForSession","handleSessionChange","startSessionWatcher","stopActiveRecording","ensureEnvironmentSubscription","init_replay","environmentData","replayConfig","sampled","sampleRate","skipSampling","pageUrl","immediateStop","matchesAudience","CameraBubble","init_camera_bubble","videoRef","stream","portalTarget","toOptions","devices","fallbackLabel","DEFAULT_DEVICE","getDeviceConstraint","deviceId","getTrackDeviceId","track","requestedId","useRecordingInputs","setDevices","cameraId","setCameraId","microphoneId","setMicrophoneId","cameraStream","setCameraStream","inputError","setInputError","cameraStreamRef","cameraRequestRef","refreshDevices","replaceCameraStream","selectCamera","requestId","selectMicrophone","openMicrophone","releaseCamera","init_use_recording_inputs","COMPOSER_EASE","composerModeTint","crossfadeLabelStyle","StaggeredRows","composerRowClassName","DeviceRow","RecordingInputs","StartRecordingButton","init_capture_mode_controls","visible","offIcon","cameras","onCameraChange","microphones","onMicrophoneChange","isStarting","formatCaptureDuration","CaptureHud","CaptureHudDivider","CaptureHudKey","CaptureHudDot","CaptureHudButton","CaptureHudIconButton","CaptureHudFormToggle","init_capture_hud","pulsing","tone","onFormHiddenChange","isFormHidden","finder","findRootDocument","config$13","bottomUpSearch","optimized","sort","optimize","elapsedTime","maybe","nth","dispensableNth","nthChild","findUniquePath","paths","combinations","unique","penalty","rootDocument","elementId","notEmpty","newPath","newPathKey","same","init_finder","createSelectorBank","addCandidate","selectsElement","uniqueIdSelector","uniqueAttributeSelectors","uniqueClassSelector","finderSelector","localizedRoleSelector","wildcardIdSelector","scopedAttributeSelector","scopedRoleStructureSelector","scopedStructureSelector","nthOfTypeSelector","sortedCandidates","isFragileGeneratedSelector","idDigitRunPattern","firstRunIndex","lastRun","suffix","attributeNames","attrSelector","role","attributeSelectors","ancestorAnchorSelector","pathParts","relativeNthOfTypeParts","scoped","relativeNthOfTypePath","nthOfTypePart","init_css_selector","hasPrivateDescriptorContent","describePinnedElement","isPrivate","bank","getElementKind","HEADING_TAGS","getElementName","captureElementImage","MAX_SCREENSHOT_SCALE","init_pinned_element","getEventElement","isSelectionBypassEvent","getHighlightLabel","LABEL_NAME_LIMIT","readTokens","SWALLOWED_EVENTS","BYPASS_KEYS","HIGHLIGHT_Z_INDEX","PICKING_CURSOR_CSS","bypassKeyLabel","ElementPicker","init_element_picker","highlight","setHighlight","isBypassing","setIsBypassing","hoveredRef","updateHighlight","isWidgetEvent","handleSwallowedEvent","onPick","handleKeyUp","handleBlur","handleViewportChange","cursorStyle","visibleHighlight","RecordingHud","init_recording_hud","elapsedSeconds","onTogglePause","onDiscard","ReplayHud","init_replay_hud","isCompleting","widgetCardClassName","init_widget_card","FeedbackSubmitted","init_feedback_submitted","primaryBackgroundColor","primaryTextColor","boardName","onViewPost","onDone","widgetFieldClassName","init_widget_field","getAttachmentIcon","getFileExtension","extension","getPinnedSummary","PINNED_NAME_LIMIT","getPinnedStatus","pinned","getSubscriberEmail","isSupportedAttachment","DOCUMENT_ATTACHMENT_TYPES","logger$23","MAX_ATTACHMENTS","MAX_ATTACHMENT_BYTES$1","SESSION_RECORDING_SOFT_LIMIT_BYTES","ATTACHMENT_ACCEPT","formatFileSize","formatElapsed","fieldLabelClassName","iconButtonClassName","menuItemClassName","attachmentTileFaceClassName","AttachmentTile","AttachmentTileChip","AttachmentTileProgress","ToggleSwitch","BoardDot","FeedbackFormInner","FeedbackForm","init_feedback_form","face","onOpen","onRemove","removeLabel","busy","setTitle","clearTitleDraft","setText","clearTextDraft","selectedBoard","setSelectedBoard","debouncedSearchTerm","setDebouncedSearchTerm","submitError","setSubmitError","setAttachments","selectedAttachment","setSelectedAttachment","isAttachmentPopoverOpen","setIsAttachmentPopoverOpen","isCapturingScreenshot","setIsCapturingScreenshot","isReplayAvailable","setIsReplayAvailable","canRecordReplayFromNow","setCanRecordReplayFromNow","setReplayEvidence","isCapturingReplay","setIsCapturingReplay","replayRecordingStartedAt","setReplayRecordingStartedAt","replayRecordingSeconds","setReplayRecordingSeconds","replayStartedByFormRef","replayStartRequestRef","captureMode","setCaptureMode","setPinnedElement","setIsFormHidden","submittedFeedback","setSubmittedFeedback","sessionRecordingStatus","setSessionRecordingStatus","recordingElapsedSeconds","setRecordingElapsedSeconds","fileInputRef","attachmentsRef","mediaRecorderRef","recordingStreamRef","recordingChunksRef","recordingBytesRef","recordingSegmentStartedAtRef","recordingElapsedBeforeSegmentRef","recordingRequestRef","recordingFinalizationRef","pinRequestRef","formRootRef","capturePortalTarget","setCapturePortalTarget","isUploadingAttachment","hasAttachmentError","isPinningElement","submitButtonBackgroundColor","submitButtonTextColor","enableVoiceFeedback","enableReplayEvidence","enableScreenRecording","recordingInputs","boardsData","updateReplayAvailability","isRecording","similarFeedbacks","openOptions","feedbackBoardId","initialTitle","initialText","handleTitleChange","stopReplayStartedByForm","feedbackMutation","uploadedAttachments","recordedReplayEvidence","createdFeedback","onBack","handleVoiceRecordingComplete","currentText","transcriptionText","handleTitleVoiceRecordingComplete","currentTitle","addAttachment","uploaded","stopRecordingTracks","getRecordingElapsedSeconds","segmentStartedAt","segmentMs","finishSessionRecording","recorder","toggleSessionRecordingPause","startSessionRecording","microphoneStream","displayStream","hasAudio","preferredMimeType","bitrates","nextSize","shouldAttach","chunks","mimeType","videoTrack","updateElapsedTime","captureScreenshot","captureWidth","captureHeight","clonedDocumentElement","clonedDocument","clonedBody","clonedElement","handleFileUpload","files","handleAttachmentClick","attachRecentReplay","evidence","recordReplayFromNow","wasRecording","completeReplayRecording","removeReplay","updateSeconds","removeAttachment","attachmentId","changeCaptureMode","cancelPinning","isPickingElement","onElementPickingChange","isReplayRecording","pinElement","isCurrentRequest","previewUrl","screenshot","removePinnedElement","canCapture","hasAttachmentTiles","canAttachRecentReplay","showReplayRow","similarItems","renderFooter","renderPinnedElementTile","isBusy","renderAttachmentTile","isImage","isVideo","statusLabel","renderAttachmentTiles","renderReplayRow","renderScreenRecordingSetup","openAttachmentPopover","renderAttachButton","renderCaptureModeButton","renderActionBar","renderBoardField","renderSimilarFeedback","handleFeedbackItemClick","renderForm","renderRecordingInProgress","isRecordingActive","isPanelHidden","onPanelHiddenChange","resolveHelpCenterCopy","DEFAULT_HELP_CENTER_COPY","logger$22","HelpCenterContent","init_help_center_content","debouncedSearchQuery","copyOverrides","collectionsData","isLoadingCollections","popularArticlesData","isLoadingPopular","articlesData","isLoadingArticles","pageResourcesData","isLoadingPageResources","popularArticles","filteredCollections","pageRelatedItems","apiArticles","apiTours","readTime","showResults","showCollections","onCollectionClick","inferLanguageFromCode","getCodeBlockLanguageInfo","languageClass","inferredLanguage","classLanguage","highlightLanguage","languageAliases","languageLabels","init_code_block_language","require_core","deepFreeze","Response","escapeHTML","inherit$1","objects","SPAN_CLOSE","emitsWrappingTags","scopeToCSSClass","pieces","HTMLRenderer","parseTree","TokenTree","TokenTreeEmitter","lookahead","concat","anyNumberOfTimes","optional","stripOptionsFromArgs","either","countMatchGroups","startsWith","lexeme","BACKREF_RE","_rewriteBackreferences","numCaptures","regexps","out","joinWith","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","MODES","skipIfHasPrecedingDot","scopeClassName","beginKeywords","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","originalMode","COMMON_KEYWORDS","DEFAULT_KEYWORD_SCOPE","compileKeywords","compiledKeywords","rawKeywords","compileList","caseInsensitive","keywordList","keyword","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","warn","deprecated","MultiClassError","remapScopeNames","scopeNames","beginMultiClass","endMultiClass","scopeSugar","MultiClass","compileLanguage","langRe","MultiRegex","terminators","matchData","ResumableMultiRegex","matcher","m2","buildModeRegex","mm","term","compileMode","cmode","ext","keywordPattern","expandOrCloneMode","dependencyOnParent","HTMLInjectionError","NO_MATCH","MAX_KEYWORD_HITS","HLJS","aliases","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","getLanguage","_class","optionsOrCode","codeOrLanguageName","ignoreIllegals","fire","_highlight","keywordHits","keywordData","matchText","processKeywords","modeBuffer","word","keywordRelevance","cssClass","emitKeyword","processSubLanguage","continuations","highlightAuto","processBuffer","emitMultiClass","klass","startNewMode","endOfMode","matched","matchPlusRemainder","doIgnore","doBeginMatch","newMode","beforeCallbacks","doEndMatch","codeToHighlight","endMode","processContinuations","lastMatch","processLexeme","textBeforeMatch","iterations","md","continuation","relevance","resumeScanAtSamePosition","processedCount","justTextHighlightResult","languageSubset","plaintext","autoDetection","best","secondBest","updateClassName","currentLang","resultLang","highlightElement","configure","userOptions","initHighlighting","highlightAll","initHighlightingOnLoad","wantsHighlight","boot","registerLanguage","lang","languageDefinition","hljs","error$1","registerAliases","unregisterLanguage","alias","listLanguages","aliasList","upgradePluginAPI","addPlugin","removePlugin","deprecateHighlightBlock","import_core","core_default","init_core","init_syntax_highlighting","logger$21","VOTE_VALUES","VOTE_EMOJIS","VOTE_LABELS","VoteButton","ArticleVote","init_article_vote","selectedVote","vote","createVote","isCreating","isDeleting","handleVote","RelatedArticles","init_related_articles","collectionIds","articleById","logger$20","ShareMenu","init_share_menu","copied","setCopied","subdomain","articleUrl","facebookWindow","twitterWindow","articleTitle","linkedInWindow","configureCodeCopyButton","copyCodeIcon","showCodeCopied","copiedCodeIcon","getImageAspectRatio","IMAGE_ASPECT_RATIO_ATTRIBUTES","FALLBACK_IMAGE_ASPECT_RATIO","frameArticleImages","prepareWidgetArticleHtml","isHtmlContent","HTML_BLOCK_TAG_PATTERN","normalizedText","articleHtml","HelpCenterArticle","init_article_detail","articleData","isLoadingArticle","articleInnerHtml","articleBodyRef","selectedTabsRef","selectedTabsArticleIdRef","selectedTitle","tabItems","tabs","selectedTab","tab","activeTab","copyButton","pre","languageLabel","blockCopyButton","tabTitle","getTablerIconByName","TABLER_ICON_MAP","normalizeTablerIconName","getNormalizedTablerIcon","DEFAULT_TABLER_ICON","init_tabler_icon_map","getCollectionIcon","init_icon_utils","HelpCenterCollection","init_collection_page","setDebouncedSearchQuery","searchInputRef","collectionData","isLoadingCollection","collectionArticles","CollectionIcon","articleCount","getIconByName","init_icon_registry","COMPACT_VISIBLE_ITEMS","DEFAULT_VISIBLE_ITEMS","stageIcons","columnNameToIcon","resolveColumnIcon","RoadmapItemComponent","RoadmapStageSection","RoadmapContentInner","RoadmapContent","init_roadmap_content","onItemClick","setIsExpanded","initialVisibleItems","hasMore","iconKey","stageColor","visibleCount","isLastVisible","roadmapItemsLoading","roadmapItemsError","activeRoadmapId","roadmapData","RoadmapDetail","init_roadmap_detail","IconBookOpenOutlineDuo18","IconLightbulb3OutlineDuo18","IconBullhornOutlineDuo18","IconFlagOutlineDuo18","IconTasks2OutlineDuo18","IconMsgSmileOutlineDuo18","SupportResourceIcon","resourceIcons","init_support_resource_icon","supportResourceActionLabel","isValidEmail","articleSlugFromUrl","helpCenterHosts","segments","MessageBody","URL_PATTERN","onOpenArticle","relativeTime","diffMinutes","diffHours","detectProductFeedbackIntent","getRequestForm","supportConfig","getDisplayName","getInitial","supportMessageSender","supportMessageAvatarUrl","SenderAvatar","avatarUrl","showPresence","fieldOptions","normalizeAttachments","getAiHandoffSubject","handoff","handoffMessageToSupportMessage","isCustomer","TypingIndicatorBubble","MessageReveal","isRevealed","setIsRevealed","typeBeforeReveal","ChatGreeting","isTyping","setIsTyping","CHAT_GREETING_TYPING_MS","CHAT_GREETING","CHAT_GREETING_FOLLOW_UP","getPublicTokenStorageKey","getAuthenticatedPublicTokenStorageKey","getStoredPublicToken","fallbackPublicTokenKey","getStoredAuthenticatedPublicToken","storePublicToken","authenticated","SupportContent","subject","setSubject","setBody","setEmail","initialEmail","fullName","setFullName","initialName","authenticationStep","setAuthenticationStep","verificationCode","setVerificationCode","authenticationError","setAuthenticationError","notice","setNotice","handoffTranscript","setHandoffTranscript","pendingAutoHandoff","setPendingAutoHandoff","isSettlingAiHandoff","setIsSettlingAiHandoff","selectedThreadId","setSelectedThreadId","initialThreadId","isComposingNewRequest","setIsComposingNewRequest","publicToken","setPublicToken","requireAuthentication","fieldValues","setFieldValues","handoffRef","autoHandoffIdentityRef","identifyPromiseRef","publicTokenRef","typingTimeoutRef","lastTypingStartedAtRef","resumeAttemptedRef","requestForm","requestFields","supportToken","showAuthentication","hosts","configured","openArticle","onArticleOpen","openResource","onResourceOpen","resource","realtimeConnected","setRealtimeConnected","agentTyping","setAgentTyping","threadsQuery","threadQuery","authenticationRequestMutation","authenticationVerifyMutation","disconnected","thread","threads","selectedThread","showInboxHome","isChatMode","showMessageListView","showThreadList","showMessagesLanding","showEmailField","isClosed","stopCustomerTyping","startCustomerTyping","canSubmit","resumeActiveThread","activeThread","onThreadViewChange","onFeedbackSuggestionChange","onHandoffConsumed","NOTICE_AUTO_DISMISS_MS","ensureSupportToken","trimmedEmail","createMutation","trimmedBody","trimmedSubject","effectiveSupportToken","aiHandoff","updatedThread","normalizedEmail","handoffBody","MAX_ATTACHMENT_BYTES","canPrepareUpload","persistedMessages","hasPendingHandoff","pendingHandoffMessages","AI_HANDOFF_MESSAGE","pendingFeedbackMessages","feedbackSuggestion","chatMembers","hasHumanSupportResponse","showAwaitingSupportResponse","humanMessages","firstHumanMessageId","activeResponder","isAgentTypingInSelectedThread","messagesScrollRef","composerRef","messageNodesRef","previousMessageIdsRef","scrollConversationKeyRef","isNearConversationBottomRef","isProgrammaticScrollRef","programmaticScrollTimeoutRef","soundedInboundIdsRef","inboundSoundThreadRef","unreadInboundMessageId","setUnreadInboundMessageId","pendingInboundScrollId","setPendingInboundScrollId","conversationKey","beginProgrammaticScroll","scrollToConversationBottom","scrollToMessageStart","messageId","handleConversationScroll","isNearBottom","CHAT_SCROLL_BOTTOM_TOLERANCE","handleConversationScrollIntent","messageTop","CHAT_SCROLL_TOP_GUTTER","messageIds","newMessages","newestInboundMessage","customerSentMessage","newInboundMessage","createdAt","submitComposer","onFeedbackRequest","pendingFeedbackSuggestion","pendingInitialMessageRef","onInitialMessageConsumed","pendingMessage","handleComposerKeyDown","applyChatPrompt","prefill","acceptFeedbackSuggestion","sendFeedbackSuggestionToSupport","renderFields","FieldTag","renderAttachments","openRequestList","headerIconButtonClass","headerTitle","headerSubtitle","chatTitle","composerPlaceholder","isLoadingContent","renderAuthentication","activeView","isInboxView","sender","nextMessage","showInboundMetadata","showFeedbackSuggestion","messageCreatedAt","onStartChat","CHAT_PROMPTS","prompt","init_support_content","ChangelogListItem","init_list_item","changelog","reactionsCount","showEngagement","onAnnouncementClick","logger$19","UpdateTimelineInner","UpdateTimeline","init_update_timeline","expandedCards","plainText","shouldTruncate","normalizeExternalUrl","logger$18","VALID_TABS","DEFAULT_ACTIVE_TABS","DEFAULT_TAB_ORDER","SESSION_STORAGE_KEYS","TRANSITION_DELAY","HOME_SEARCH_PLACEHOLDER","getFirstAvailableTab","getDefaultTab","getOrderedTabs","normalizeColor","WidgetContentInner","WidgetContent","init_widget_content","isHelpCenterLive","defaultTab","ordered","tabOrder","_loading","activeTabs","requestedTab","defaultActiveTabs","isSupportHandoffAvailable","orderedNavigationTabs","hasExplicitActiveTabs","isStandaloneSupportWidget","setActiveTab","selectedAnnouncement","setSelectedAnnouncement","showAnnouncementDetail","setShowAnnouncementDetail","selectedRoadmapItem","setSelectedRoadmapItem","showRoadmapDetail","setShowRoadmapDetail","selectedFeedbackItem","setSelectedFeedbackItem","showFeedbackDetail","setShowFeedbackDetail","showFeedbackForm","setShowFeedbackForm","selectedArticle","setSelectedArticle","articleReturnTab","setArticleReturnTab","selectedCollection","setSelectedCollection","showArticleDetail","setShowArticleDetail","showCollectionPage","setShowCollectionPage","showAskAi","setShowAskAi","askAiReturnTab","setAskAiReturnTab","feedbackReturnTab","setFeedbackReturnTab","supportReturnTab","setSupportReturnTab","askAiInitialMessage","setAskAiInitialMessage","askAiAutoSubmitInitialMessage","setAskAiAutoSubmitInitialMessage","homeMessage","setHomeMessage","supportInitialMessage","setSupportInitialMessage","supportHandoff","setSupportHandoff","supportInitialThreadId","setSupportInitialThreadId","supportMode","setSupportMode","supportResumeActiveThread","setSupportResumeActiveThread","isSupportThreadView","setIsSupportThreadView","showSupportLanding","setShowSupportLanding","supportFeedbackSuggestion","setSupportFeedbackSuggestion","feedbackDraft","setFeedbackDraft","processedNavigationKeyRef","helpSearchQuery","setHelpSearchQuery","debouncedHelpSearchQuery","setDebouncedHelpSearchQuery","helpSearchInputRef","setActiveRoadmapId","defaultPrimaryColor","configuredWidgetPrimaryColor","primaryColorLight","primaryColorDark","primaryButtonBackgroundColorLight","primaryButtonBackgroundColorDark","primaryButtonTextColorLight","primaryButtonTextColorDark","isAskAiEnabled","isAskAiOpen","primaryForegroundColor","showHome","homeTitle","legacyWelcomeLogoUrl","workspaceLogoLight","workspaceLogoDark","welcomeLogoUrlLight","welcomeLogoUrlDark","welcomeLogoUrl","welcomeLogoHeight","showWelcomeLogo","configuredHomeLinks","homeSections","showHomeSearch","showHomeChat","showHomeRequests","showHomeWhatsNew","widgetCopyOverrides","widgetMenuCopy","chatMemberIds","visibleTeamMembers","_subscriberCode","roadmapViewsResponse","roadmapViewsLoading","defaultRoadmapId","rv","selectedRoadmapId","homeAnnouncementsResponse","homeAnnouncementsLoading","homeAnnouncements","homeHeaderRef","homeContentRef","homeNavigationRef","homeFooterRef","homeBottomInset","setHomeBottomInset","orderedBoards","widgetSizeMode","onSizeChange","measure","onPreferredHeightChange","handleAnnouncementClick","handleBackToTimeline","handleRoadmapItemClick","handleBackToRoadmap","handleAnnouncementFeedbackClick","handleAnnouncementArticleClick","handleAnnouncementTourClick","productTour","widget_exports","closeWidgetDrawer","handleFeedbackSubmit","handleBackFromFeedbackDetail","handleFeedbackClick","handleHelpCenterFeedbackClick","handleSupportFeedbackRequest","draft","openHomeDestination","handleAskAiSupportClick","returnTab","openSupport","openAskAi","handleChatWithUsClick","chatAction","sendHomeMessage","handleBackFromFeedback","returnToSupport","handleBackFromAskAi","handleArticleClick","openArticleById","widgetLocale","handleSupportArticleOpen","opened","handleSupportResourceOpen","checklist","findChecklistById","survey","findSurveyById","shouldShowChecklistForCurrentUrl","triggerChecklist","triggerSurvey","handleCollectionClick","handleBackFromArticle","handleBackFromCollection","handleTabChange","tabValue","handleBoardChange","openedFromNotification","onNotificationHandled","nextDefaultTab","storedOptions","parsedOptions","savedTab","handleItemNavigation","roadmapItemId","hasNavigationOptions","navigationKey","getPositionClasses","renderStandaloneSupportLanding","greeting","menuRowClass","menuTitleClass","menuDescriptionClass","menuChevron","renderErrorState","renderLoadingState","renderAnnouncementDetail","renderRoadmapDetail","renderFeedbackDetail","renderFeedbackForm","renderHelpCenterDetail","renderTabContent","handleBackFromSupport","returnToMessages","getDetailBackTab","getDetailResourceTitle","getTabTitle","renderHeader","isHelpMainView","headerIconButtonClassName","renderCloseButton","isDetailView","textColorClass","showOpenExternalButton","isHelpCenter","fallbackDomain","configuredHelpCenterUrl","baseUrl","toPath","contentPath","renderHomeGreeting","homeRowClassName","renderHomeMessageCard","acceptsMessage","renderHomeLinkIcon","renderHomeNavigationCard","homeLinks","linkKey","link","renderHomeWhatsNewCard","renderMainContent","isSupportView","isSupportConversationView","isStandaloneSupportLanding","isNavigationHidden","footerOffset","isAskAiView","isHelpCenterListView","isFullHeightView","panelHeight","containerHeight","renderTabNavigation","bottomPosition","visibleTabs","VALID_WIDGET_TABS","EDITABLE_WIDGET_TARGET_SELECTOR","MOBILE_WIDGET_MEDIA_QUERY","useMediaQuery","isEditableWidgetTarget","stopEditableWidgetEvent","editableWidgetEventBoundaryProps","normalizeLocale","normalizeWidgetString","matchSupportedLocale","resolveWidgetLocale","resolveTeamData","computePopoverPlacement","computePopoverStyle","FloatingWidget","init_floating_widget","setMatches","updateMatch","locale","supportedLocales","baseLocale","helpCenterConfig","defaultLocale","configuredLocale","browserLocales","browserLocale","viewportW","spaceBelow","spaceAbove","spaceRight","spaceLeft","widgetHeight","widgetWidth","maxSpace","widgetPosition","setWidgetPosition","themeSetting","setThemeSetting","isExternalDrawerOpen","setIsExternalDrawerOpen","isWidgetExiting","setIsWidgetExiting","setWidgetSizeMode","preferredWidgetHeight","setPreferredWidgetHeight","setIsPanelHidden","isElementPickingActive","setIsElementPickingActive","setOpenedFromNotification","popoverPlacement","setPopoverPlacement","setPopoverStyle","widgetRef","isMobileViewport","panelAnimationDuration","handleDrawerOpened","handleDrawerClosed","teamData","configuredWidget","configuredActiveTabs","validTabs","configuredTabOrder","configuredDefaultTab","isTallWidget","isWideWidget","defaultWidgetHeight","resolvedDefaultWidgetHeight","tallWidgetMaxHeight","popoverAnimatedSize","animatedShellSize","previousDocumentOverflow","previousDocumentOverscroll","previousBodyOverflow","previousBodyOverscroll","anchorElement","closeHandler","handleEscape","handleToggle","handleNotificationHandled","handlePanelHiddenChange","hidden","popoverTransformOrigin","popoverInitialY","popoverInitialX","AnchoredWidget","AnchoredPortalWidget","init_anchored_widget","openHandler","shadowRootRef","isRecord","isPlainObject","hasOwn","getValueByPath","getCandidateKeys","parseToken","resolveAttributeValue","resolveVariableSpans","resolveSubscriberProperties","resolveSubscriberPropertiesDeep","init_subscriber_properties","segment","rawKey","rawToken","pipeIndex","fallbackIndex","attributeMap","sources","createSlot","createSlotClone","isSlottable","getElementRef","mergeProps","SLOTTABLE_IDENTIFIER","init_dist","buttonVariants","Button","init_button","completeBeforeNavigation","navigate","trackChecklistCompletionOnce","init_completion_lifecycle","config$12","ChecklistAction","init_actions$1","init_portal","init_checklist_preview","handleStepAction","renderTour","account","markStepAsCompleted","completedTasks","updatedCompletedTasks","analytics","onCompleted","setcheckList","getPrimaryButtonText","baseLabel","TOGGLESTATE","design","ChecklistPreview","resolveText","toggleTask","setActiveTask","LAYOUTSTATE","isDismissed","setisDismissed","config$11","checkList","setCheckList","themeStyle","embedded","embedSelector","totalTasks","canToggle","embedToggle","handleHeaderKeyDown","toggleState","pendingTaskIdx","task","hasTrackedViewRef","hasTrackedCompletionRef","trackCompletion","onShown","onRequestClose","unregisterActiveChecklist","prevState","stickyMode","widgetPlacement","compactMode","isCompleted","activeTask","isLastTask","allTasksOpen","cl","clearActiveChecklist","Checklist","init_checklist","logger$17","OPEN_DRAWER_EVENT","DRAWER_CLOSED_EVENT$1","WIDGET_OPEN_OPTIONS_STORAGE_KEY","Drawer","PortalWidget","init_drawer","currentlyActive","setShadowRoot","setOpenOptions","readStoredOpenOptions","handleDrawerOpen","openEvent","getSurveyQuestionKey","asArray","matchesSurveyLogicCondition","answerForQuestion","fallbackDestination","resolveDestination","evaluateSurveyNextStep","init_survey_logic","answer","numericAnswer","numericValue","selected","questions","questionKey","answers","nextQuestion","currentQuestionIndex","destination","sourceIndex","currentQuestionKey","sourceQuestion","branching","AnimateChangeInHeight","init_AnimateChangeInHeight","setHeight","observedHeight","ScrollableContainer","init_scrollable_container","isOverflowHidden","setIsOverflowHidden","isAtBottom","setIsAtBottom","isAtTop","setIsAtTop","timeoutRef","checkScroll","scrollTop","clientHeight","scrollHeight","toggleOverflow","SubmitButton","BackButton","init_survey_button","buttonRef","currentButton","buttonLabel","isLastQuestion","backButtonLabel","isValidUrl","ButtonsQuestion","init_buttons","choicesContainerRef","isCurrent","currentQuestionId","questionChoices","choice","isFirstQuestion","MessageQuestion","init_message","MultiChoiceQuestion","init_multi_select","otherSelected","setOtherSelected","otherSpecify","otherOption","addItem","isOtherValue","TiredFace","WearyFace","PerseveringFace","FrowningFace","ConfusedFace","NeutralFace","SlightlySmilingFace","SmilingFaceWithSmilingEyes","GrinningFaceWithSmilingEyes","GrinningSquintingFace","init_emojis","RatingQuestion","getSmileyColor","getActiveSmileyColor","getSmiley","RatingSmiley","init_rating","hoveredNumber","setHoveredNumber","HiddenRadioInput","getRatingNumberOptionColor","scaleStart","scaleMaximum","ratingValues","addColors","inactiveColor","iconIdx","iconsIdx","SingleChoiceQuestion","init_survey_dropdown","useAutosizeTextArea","AutosizeTextarea","init_autosize_textarea","setInit","textAreaRef","minHeight","triggerAutoSize","setTriggerAutoSize","init_input","OpenTextQuestion","init_text","isRequiredAnswerMissing","handleInputChange","ThankyouBlock","init_thankyou","closeTimer","hasQuestions","setDismissed","QuestionTypes","init_survey_questions","SurveyPreview","providedConfig","logger$16","initialConfig","config$10","getQuestionsWithThankYou","resolveQuestion","resolvedEnding","setQuestions","responseData","setResponseData","questionHistory","setQuestionHistory","logicDecisions","setLogicDecisions","submissionInFlight","activeQuestion","responseDataUpdate","updatedResponseData","setLoadingElement","retainedAnswerIds","historyIndex","historyKey","questionId","questionResponse","closeSurvey","submitSurvey","currentSurveyQuestion","decision","nextDecisions","nextQuestionIndex","nextKey","nextHistory","setActiveQuestion","dismissSurvey","previousKey","previousIndex","decisions","resolveSurveyDesign","disableBranding","UserorbitBranding","getSurveyBaseTheme","init_survey_preview","themeId","surveyConfiguration","Survey","init_survey","compareSteps","aCreatedAt","bCreatedAt","config$9","logger$15","reportedTourSteps","targetHealthStates","getSubscriberCompletedStepId","PreviewWrapper","TourPreview","init_tour_preview","init_tourLaunch","activeTour","subscriberTour","frequency","subscriberState","overrideDismissed","activeTourCompletedStepId","setFilteredSteps","setCompletedTillStepId","isRestartedTour","hasIncrementedViewRef","initialCompletedStepIdRef","hasPerformedInitialFilterRef","isAnnouncementTour","processedSteps","endTourLaunch","openWidgetDrawer","updatedTours","resumedTour","findTourById","completedStepId","latestTours","hasReportedShownRef","reportShown","markTourLaunchShown","stepsToProcess","resolvedSteps","resolvedDescription","resolvedConfiguration","hasIncremented","beaconGated","triggerSurvey$1","tourVersion","report","eventProperties","showPreview","setShowPreview","restart","Tour","init_tour","logger$14","getThemeSetting","applyThemeAttributes","FeedbackModalHeader","renderChecklist","renderSurvey","renderFloatingWidget","renderAnchoredWidget","renderUserorbitDrawer","currentChecklistNode","shadowContainer","reactRoot","parentSelector","setupChecklist","parentHeight","parents","evt","setupWidgetMount","oldWidgetDrawer","existingShadowContainer","existingStandaloneForm","handleBack","addWidgetContainer","getTourRuntimeState","getWidgetTargetingData","installRteButtonHandlers","removeWidgetContainer","renderWidget","setIsChecklistRunning","setIsSurveyRunning","setIsTourRunning","shouldShowWidget","shouldShowWidgetForCurrentUrl","shouldShowWidgetForUser","syncChecklistVisibility","config$8","logger$13","EXPERIENCE_FEATURES","isSurveyRunning","isTourRunning","isChecklistRunning","tourLocation","rteButtonHandlerInstalled","pendingTourRenderKeys","activeChecklists","resolveTriggerDeliverySource","normalizeEmail","getServerOrder","isStillAutomaticallyEligible","wrapLifecycle","getStoredLanguagePreferences","getChecklistNode","removeRenderedWidget","currentExperience","workflowAssignmentId","surveyDelay","deliverySource","visibility","shouldShow","activeChecklist","checklistNode","checklistDelay","tourDelay","browserLanguages","pendingTourRenderKey","storedLanguages","processedOptions","feedbackFormConfig","modalConfig","drawerConfig","triggerId","containerElement","surveys","checklists","config$7","logger$12","TOUR_LAUNCH_STORAGE_KEY","TOUR_LAUNCH_TTL_MS","TOUR_ID_PATTERN","launchAttemptsInFlight","readTourLaunch","writeTourLaunch","clearTourLaunch","captureTourLaunchFromUrl","getTourLaunchIdForPerson","isTourLaunchPending","startPendingTourLaunch","launch","attemptKey","currentLaunch","shouldTriggerAdoptionWorkflowAssignment","RESUMABLE_EXPERIENCE_KINDS","currentAssignment","config$6","assignmentId","markAssignmentOutcome","scheduleDrawerAssignment","finished","shownOutcomePromise","DRAWER_CLOSED_EVENT","activeTimeout","terminalStatus","logger$11","DRAWER_DELIVERY_MAX_ACTIVE_MS","triggerAdoptionWorkflowAssignments","assignments","init_adoption_workflow_assignments","actions_exports","trackAction","trackCodeAction","trackNoCodeAction","recordObservedAction","observedActionScope","observedActionNames","matchesAutoStartEventTriggers","triggers","currentActionName","logger$10","config$5","DEFAULT_PAGE_VIEW_TRIGGER_NAME","init_actions","aliasName","toursEnabled","checklistsEnabled","surveysEnabled","maxViews","viewCount","analyticsGeneration","logger$9","getApi","config$4","logger$8","updateAttribute","updateAttributes","finalEmail","finalName","existingPerson","nextEmail","nextName","hasIdentityUpdate","updatedAttributes","existingAttributes","isExistingAttribute","setAttributeInApp","setPrivacyPreferences","applyPrivacyPreferences","widgetEpoch","replay","renderOnGrant","config$3","logger$7","lastResumeUrl","resumedTourKeys","getResumableTourStepsForCurrentPage","shouldResumeTourForCurrentPage","resumeToursForCurrentPage","resumeKey","runtimeState","appConfig","logger$6","errorHandler$1","arePageUrlEventListenersAdded","checkPageUrl","actionClasses","noCodePageViewActionClasses","trackResult","checkPageUrlWrapper","addPageUrlEventListeners","removePageUrlEventListeners","isClickEventListenerAdded","shouldTrackClick","getTrackableClickElement","getElementText","getClickTrackingData","elementText","clickData","parentForm","evaluateClick","noCodeClickActionClasses","trackableElement","clickUrl","matchesClickTarget","matchesTrackableAncestor","checkClickMatch","checkClickMatchWrapper","addClickEventListener","removeClickEventListener","isExitIntentListenerAdded","exitIntentTarget","checkExitIntent","noCodeExitIntentActionClasses","checkExitIntentWrapper","addExitIntentListener","removeExitIntentListener","scrollDepthListenerAdded","scrollDepthTriggered","scrollLoadListenerAdded","checkScrollDepth","scrollPosition","windowSize","bodyHeight","noCodefiftyPercentScrollActionClasses","checkScrollDepthWrapper","addScrollListenerAfterLoad","addScrollDepthListener","removeScrollDepthListener","config$2","logger$5","personStateSyncIntervalId","DEFAULT_PERSON_STATE_NO_USER_ID","fetchPersonState","launchTourId","behaviorHistoryIdentityTransition","defaultPersonState","addPersonStateExpiryCheckListener","nextPersonState","clearPersonStateExpiryCheckListener","logger$4","isRouteChangeDetectionInitialized","lastUrl","routeChangeCallback","nextJsCleanup","originalPushState","originalReplaceState","mutationObserverReadyHandler","pendingTimeouts","scheduleRouteCheck","detectRouteChange","setupHistoryInterception","setupNextJsAppRouterDetection","cleanupFunctions","router","originalPush","originalReplace","shouldCheck","setupNextJsPagesRouterDetection","handleRouteChange","setupReactRouterDetection","reactRouterVersion","setupVueRouterDetection","setupHashChangeListener","setupPopStateListener","initializeRouteChangeDetection","nextJsCleanupFn","nextJsPagesCleanup","existingCleanup","setupMutationObserver","removeRouteChangeDetection","areRemoveEventListenersAdded","areEventListenersAdded","resetConfigBeforeUnload","cleanupBeforeUnload","addEventListeners","addCleanupEventListeners","removeCleanupEventListeners","removeAllEventListeners","DOM_SIGNAL_TYPES","config$1","started","routeEpoch","states","disposeDomObserver","domObserverKey","disposeEnvironmentSubscription","disposeActivitySubscription","releaseRootActivityDocument","domEvaluationQueued","cancelDomEvaluation","lifecycleGeneration","getSignalActions","getSignature","matchesCurrentUrl","createState","armRouteDeadlines","actionConfig","resetStateForRoute","reconcileActions","routeChanged","nextStates","reconcileResources","queueDomEvaluation","scheduleTimer","getObserverKey","isActiveDomSignal","hasInactivitySignals","hasDomSignals","needsDomObserver","needsInactivity","nextObserverKey","handleInputEvent","handlePointerOver","handlePointerOut","handleActivitySignal","activityIsRetainedByObserver","mutationIsUserorbitOwned","changedNodes","evaluateDomSignals","schedulingWindow","handle","getSelectors","resolveActionTarget","evaluateElementState","evaluateInputState","isElementVisible","transitioned","fireState","readInputValue","compareInputValue","editable","closestContentEditable","actualValue","eventPathContains","isNode","pauseInactivity","resumeInactivity","deadlines","deadline","nextDeadline","processDeadlines","latestAction","startNoCodeSignalEngine","reconcileNoCodeSignalsForRoute","stopNoCodeSignalEngine","logger$3","isInitialized","disposeBehaviorTargetingResolver","setIsInitialized","assertManualWidgetInitialization","assertManualWidgetInitialized","hasPersonStateChanges","personStateData","configAttributes","initialize","privacyAppliedAtEnqueue","applyCurrentPrivacyChoices","inAppConfig","inAppEnabled","requestedTheme","isAnonymousUser","storedUserId","capturedTourLaunch","shouldRefreshPersonState","isEnvironmentStateExpired","isPersonStateExpired","handleErrorOnFirstInit","currentConfigForUpdate","normalizeInitError","sdkError","unwrapResultError","formatInitErrorMessage","initError","responseMessage","checkInitialized","deinitalize","CommandQueue","initResult","logger$2","trackEvent","trackFeatureExposure","trackFeatureInteraction","featureSessions","startFeatureSession","featureName","recordFeatureInteraction","interactionType","endFeatureSession","interactionCount","uniqueInteractions","depthScore","DIAGNOSTIC_EVENT","SDK_ERROR_NAMES","PERFORMANCE_NAMES","dispatchDiagnostic","diagnostic","reportReplayError","errorType","reportReplayPerformance","trackError","trackErrorEvent","sanitizeStack","trackPerformanceIssue","trackPageLoad","timing","loadMetrics","fcpEntry","isGlobalErrorHandlerInstalled","installGlobalErrorHandler","createErrorBoundaryHandler","errorInfo","performanceObserver","installPerformanceObserver","slowThreshold","uninstallPerformanceObserver","logger$1","logoutPerson","preserveBehaviorHistory","resetPerson","syncParams","identifyPerson","nextConfig","previousIdentity","logger","systemThemeMediaQuery","systemThemeMediaQueryHandler","initConfig","privacyTransition","completed","setAttribute","identify","logout","registerRouteChange","openWidget","closeWidget","setConfig","updateThemeClasses","watchSystemThemeClasses","getResolvedThemeMode"],"sources":["../src/lib/privacySignals.ts","../src/lib/privacyPreferences.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js","../../types/targeting-runtime/targeting.ts","../../types/behavior-history-runtime/behavior-history.ts","../../types/behavior-history.ts","../src/lib/logger.ts","../../types/targeting.ts","../src/lib/automatic-targeting.ts","../src/lib/behavior-history.ts","../src/lib/activity.ts","../../../node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.js","../../../node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.js","../src/lib/storage.ts","../src/lib/utils.ts","../src/lib/sessionTracking.ts","../src/utils/persisted-list.ts","../src/analytics.ts","../src/lib/constants.ts","../src/lib/errors.ts","../src/lib/config.ts","../../types/action-classes-runtime/action-classes.ts","../../types/action-classes.ts","../../types/js.ts","../src/lib/capabilities.ts","../src/lib/userId.ts","../../types/delivery-runtime/delivery.ts","../../types/delivery.ts","../src/lib/delivery.ts","../src/lib/tourBuilder.ts","../src/utils/api.ts","../src/utils/tour.ts","../src/lib/rendered-roots.ts","../src/lib/delivery-scheduler.ts","../src/lib/environmentState.ts","../src/lib/userProperties.ts","../src/lib/widget-features.ts","../src/lib/analytics.ts","../../utils/src/tour-launch.ts","../../types/tour.ts","../../types/tour-localization.ts","../../types/account.ts","../../types/error-handlers.ts","../../types/demo-video.ts","../../types/demo-video-story-templates.ts","../../types/demo-visual.ts","../../types/index.ts","../src/lib/widgetPrivacy.ts","../../../node_modules/.pnpm/preact@10.29.0/node_modules/preact/dist/preact.module.js","../../../node_modules/.pnpm/preact@10.29.0/node_modules/preact/hooks/dist/hooks.module.js","../../../node_modules/.pnpm/preact@10.29.0/node_modules/preact/compat/dist/compat.module.js","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconAnchor.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDown.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowNarrowDown.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowNarrowLeft.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowNarrowRight.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowNarrowUp.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowUpRight.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowUp.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBarcodeOff.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBarcode.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBattery.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBell.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBook.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrain.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrandFacebook.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrandLinkedin.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrandTwitter.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBriefcase.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrush.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBug.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBulb.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCamera.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCaretUp.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChartArea.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChartBar.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChartLine.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChartPie.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronUp.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheck.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleDashedX.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleDashed.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCircle.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconClipboard.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconClock.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCloud.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCode.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCompass.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCpu.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCreditCard.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCup.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDatabase.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDotsVertical.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDownload.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDroplet.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconEyeOff.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconEye.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFileText.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFile.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFlame.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFlask.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFlower.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderOpen.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFolder.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconGift.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconGlobe.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconGrid3x3.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconGripHorizontal.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconHeadphones.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconHeart.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconHistory.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconHome.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconKey.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconList.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLoader.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLocation.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMail.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMapPin.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMessageCircle.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMicrophoneOff.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMicrophone.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMinus.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMoon.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMusicOff.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMusic.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconNote.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPalette.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPaperclip.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPaw.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPencil.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPhone.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPhoto.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlane.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlant.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPause.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlay.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBack.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForward.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlus.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconRepeat.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconRocket.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconScale.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconShare.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconShield.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconShoppingCart.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSpeakerphone.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStar.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStethoscope.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSun.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTag.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTerminal.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTool.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconUpload.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconUsers.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconVideo.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconVolumeOff.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconVolume.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconWifi.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconWorld.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCaretUpFilled.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheckFilled.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.mjs","../../../node_modules/.pnpm/@tabler+icons-react@3.40.0_react@18.3.1/node_modules/@tabler/icons-react/dist/esm/tabler-icons-react.mjs","../../ui/src/shared/lib/dom.ts","../../ui/src/shared/lib/theme.ts","../../ui/src/shared/hooks/use-resolved-theme-mode.ts","../../../node_modules/.pnpm/preact@10.29.0/node_modules/preact/compat/client.mjs","../src/lib/domOwnership.ts","../../ui/src/global.css?inline","../src/styles/global.css?inline","../src/styles/tokens.css?inline","../src/lib/colors.ts","../src/lib/styles.ts","../../../node_modules/.pnpm/preact@10.29.0/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../src/components/drawer/notification-button.tsx","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-constant.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-browser.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/noop.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/errors.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/memo.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/progress.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/time-conversion.mjs","../../../node_modules/.pnpm/motion-utils@11.18.1/node_modules/motion-utils/dist/es/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/render-step.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/batcher.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/frame.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/LazyContext.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../../../node_modules/.pnpm/@emotion+memoize@0.7.4/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","../../../node_modules/.pnpm/@emotion+is-prop-valid@0.8.8/node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/microtask.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/resolve-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/keys-transform.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/clamp.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/number-browser.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/transform.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/config-motion.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/use-props.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/components/create-factory.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/controls/BaseGroup.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/controls/Group.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/waapi/utils/attach-timeline.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/is-bezier-definition.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/animation/waapi/utils/easing.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/hover.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/press/index.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/view/start.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/view/index.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs","../../../node_modules/.pnpm/motion-dom@11.18.1/node_modules/motion-dom/dist/es/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/keys-position.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/frameloop/sync-time.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/array.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/setters.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/back.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/anticipate.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/circ.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils/sanitize.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils/float-regex.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils/is-nullish.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils/single-color-regex.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/utils.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/hex.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/color/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/utils/color-regex.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/complex/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/utils/can-animate.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/number.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/immediate.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/color.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/pipe.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/visibility.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/complex.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/mix/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/spring/defaults.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/ease.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/easing/utils/map.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/interpolate.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/default.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/offsets/time.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/animations.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/event-info.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/distance.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/animation/animate/single-value.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/delay.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/drag.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/hover.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/focus.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/gestures/press.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/motion/features/layout.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/store.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/VisualElement.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/components/motion/create.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../../../node_modules/.pnpm/framer-motion@11.18.2_@emotion+is-prop-valid@0.8.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/index.mjs","../../ui/src/shared/lib/widget-sizing.ts","../../ui/src/shared/lib/sanitize-launcher-svg.ts","../src/components/floating-widget/icons.tsx","../src/components/floating-widget/notification-button.tsx","../src/components/floating-widget/use-rage-click.ts","../../utils/src/help-center-reporting.ts","../src/components/floating-widget/feedback-capture/page-context.ts","../src/components/floating-widget/api-utils.ts","../src/components/floating-widget/use-widget-data.ts","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/utils.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/thenable.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/removable.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/query.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/mutation.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/types.js","../../../node_modules/.pnpm/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/index.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/types.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/useMutation.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../../../node_modules/.pnpm/@tanstack+react-query@5.91.2_react@18.3.1/node_modules/@tanstack/react-query/build/modern/index.js","../../../node_modules/.pnpm/@radix-ui+primitive@1.1.3/node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@18.3.7_@types+react@18.3.18__@types+re_ed299a36e844f46b9ab199f9151b6021/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.11_@types+react-dom@18.3.7_@types+react@18.3.18___8d41aefec5daaa4d5c90d8289a2da1ca/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@18.3.7_@types+react@18.3.18__@types+react@_61e241aec3d6ec8526edb732439d3ca7/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@18.3.7_@types+react@18.3.18__@types+react_5ebaaea1694be54f0da91e19c9114b8a/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@18.3.7_@types+react@18.3.18__@types+react_5d935e8f0872332e3f16d28ff3c40e9d/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.5_@types+react-dom@18.3.7_@types+react@18.3.18__@types+rea_9aab2b27c544ab2c083f751ecd0e69d9/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@18.3.7_@types+react@18.3.18__@ty_2775609864a39b9ad1a7d2af6ff471eb/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.8_@types+react-dom@18.3.7_@types+react@18.3.18__@types+reac_f36e3144c6c76f091d7819693cd59806/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../../ui/src/shared/lib/utils.ts","../../ui/src/ui/link.tsx","../../../node_modules/.pnpm/ua-parser-js@1.0.41/node_modules/ua-parser-js/dist/ua-parser.min.js","../../../node_modules/.pnpm/react-device-detect@2.2.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-device-detect/dist/lib.js","../../ui/src/ui/text.tsx","../../ui/src/ui/button/keyboard-shortcut.tsx","../../ui/src/ui/button/index.tsx","../../ui/src/ui/badge.tsx","../../ui/src/ui/card.tsx","../../ui/src/ui/spinner.tsx","../../../node_modules/.pnpm/@radix-ui+number@1.1.1/node_modules/@radix-ui/number/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@18.3.7_@types+react@18.3.18__@types+r_acc5c1fb3f10484a0882b19521475760/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@18.3.7_@types+react@18.3.18__@types+_aca79f0c736284a38a1b3fa49d7343d7/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@18.3.18_react@18.3.1/node_modules/use-callback-ref/dist/es2015/index.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/use-sidecar/dist/es2015/medium.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/use-sidecar/dist/es2015/exports.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@18.3.18_react@18.3.1/node_modules/use-sidecar/dist/es2015/index.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/hook.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/component.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@18.3.18_react@18.3.1/node_modules/react-style-singleton/dist/es2015/index.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll-bar/dist/es2015/index.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@18.3.18_react@18.3.1/node_modules/react-remove-scroll/dist/es2015/index.js","../../../node_modules/.pnpm/@radix-ui+react-select@2.2.6_@types+react-dom@18.3.7_@types+react@18.3.18__@types+react_62487ab2124cde03f993f2423181faf4/node_modules/@radix-ui/react-select/dist/index.mjs","../../ui/src/ui/select.tsx","../../ui/src/ui/input.tsx","../../ui/src/ui/textarea.tsx","../../../node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@18.3.7_@types+react@18.3.18__@types+rea_d5ce637c9254559a4883adc1c71c0763/node_modules/@radix-ui/react-popover/dist/index.mjs","../../ui/src/ui/popover.tsx","../../ui/src/ui/switch.tsx","../../ui/src/ui/checkbox.tsx","../../ui/src/ui/toggle.tsx","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-down-wide-narrow.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-down.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-left.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-right.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-up-right.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-up.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/badge-check.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/book-open.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-check.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-play.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-open.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/funnel.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/gift.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/inbox.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/info.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/life-buoy.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/lightbulb.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/mic-off.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/mic.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/minimize-2.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/paperclip.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pause.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/play.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/smile-plus.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/smile.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/sparkles.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/square.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/video.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/video-off.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js","../../../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/lucide-react.js","../../ui/src/ui/advanced-option-toggle.tsx","../../ui/src/ui/color-dot-dropdown.tsx","../../ui/src/ui/color-picker-with-input.tsx","../../ui/src/ui/toggle-group.tsx","../../ui/src/ui/accordion.tsx","../../ui/src/ui/tabs.tsx","../../ui/src/ui/text-field.tsx","../../ui/src/ui/feedback-status-badge.tsx","../../ui/src/components/userorbit-footer/index.tsx","../../ui/src/components/guide/element-fingerprint.ts","../../ui/src/components/guide/selectors.ts","../../ui/src/components/guide/dom-observer.ts","../../ui/src/components/guide/use-step-condition.ts","../../ui/src/components/guide/index.tsx","../../ui/src/components/step-preview/step-preview.tsx","../../ui/src/components/step-preview/preview-outline.tsx","../../ui/src/components/step-preview/index.ts","../../ui/src/components/tour-dialog/index.tsx","../../ui/src/components/powered-by-userorbit.tsx","../../ui/src/components/feedback-form/index.tsx","../../ui/src/components/expandable-search/index.tsx","../../ui/src/components/feedback-board/index.tsx","../../ui/src/components/article-link/index.tsx","../../ui/src/components/product-icons/index.tsx","../../ui/src/components/tabler-icons/index.ts","../../ui/src/shared/hooks/use-speech-recognition.ts","../../ui/src/ui/shimmering-text.tsx","../../ui/src/components/voice-recorder/index.tsx","../../ui/src/components/step-settings-menu/index.tsx","../../ui/src/index.ts","../src/components/animated-tabs.tsx","../src/lib/dates.ts","../../utils/src/html.ts","../../utils/src/interactive-demo.ts","../src/components/floating-widget/announcement-references.tsx","../src/components/floating-widget/comment-section.tsx","../src/components/floating-widget/reaction-bar.tsx","../src/components/floating-widget/post-engagement.tsx","../src/components/floating-widget/announcement-detail.tsx","../../../node_modules/.pnpm/snarkdown@2.0.0/node_modules/snarkdown/dist/snarkdown.es.js","../src/components/floating-widget/ask-ai-content/markdown.ts","../src/components/floating-widget/ask-ai-content/use-ai-chat.ts","../src/components/floating-widget/chat-sounds.ts","../src/components/floating-widget/ask-ai-content/human-handoff.ts","../src/components/floating-widget/ask-ai-content/index.tsx","../src/components/floating-widget/branding.ts","../../../node_modules/.pnpm/react-intersection-observer@9.16.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-intersection-observer/dist/index.mjs","../src/components/floating-widget/feedback-skeleton.tsx","../src/components/floating-widget/query-provider.tsx","../src/components/floating-widget/widget-empty-state.tsx","../src/components/floating-widget/feedback-content/post-vote.tsx","../src/components/floating-widget/feedback-content/index.tsx","../src/hooks/use-draft.ts","../src/components/floating-widget/feedback-comment-section.tsx","../../../node_modules/.pnpm/@rrweb+replay@2.1.0/node_modules/@rrweb/replay/dist/style.css","../../../node_modules/.pnpm/@rrweb+replay@2.1.0/node_modules/@rrweb/replay/dist/replay.js","../src/components/floating-widget/feedback-replay-preview.tsx","../src/components/floating-widget/feedback-detail.tsx","../src/lib/html2canvas.ts","../src/lib/screenshot-privacy.ts","../src/lib/audience-targeting.ts","../src/lib/replay.ts","../src/components/floating-widget/feedback-capture/camera-bubble.tsx","../src/components/floating-widget/feedback-capture/use-recording-inputs.ts","../src/components/floating-widget/feedback-capture/capture-mode-controls.tsx","../src/components/floating-widget/feedback-capture/capture-hud.tsx","../../../node_modules/.pnpm/@medv+finder@3.2.0/node_modules/@medv/finder/finder.js","../../tour-builder-runtime/src/shared/utils/css-selector.ts","../src/components/floating-widget/feedback-capture/pinned-element.ts","../src/components/floating-widget/feedback-capture/element-picker.tsx","../src/components/floating-widget/feedback-capture/recording-hud.tsx","../src/components/floating-widget/feedback-capture/replay-hud.tsx","../src/components/floating-widget/widget-card.ts","../src/components/floating-widget/feedback-submitted.tsx","../src/components/floating-widget/widget-field.ts","../src/components/floating-widget/feedback-form.tsx","../src/components/floating-widget/help-center-content/index.tsx","../src/lib/code-block-language.ts","../../../node_modules/.pnpm/highlight.js@11.11.1/node_modules/highlight.js/lib/core.js","../../../node_modules/.pnpm/highlight.js@11.11.1/node_modules/highlight.js/es/core.js","../src/lib/syntax-highlighting.ts","../src/components/floating-widget/help-center-content/article-vote.tsx","../src/components/floating-widget/help-center-content/related-articles.tsx","../src/components/floating-widget/help-center-content/share-menu.tsx","../src/components/floating-widget/help-center-content/article-detail.tsx","../src/components/floating-widget/tabler-icon-map.ts","../src/components/floating-widget/help-center-content/icon-utils.tsx","../src/components/floating-widget/help-center-content/collection-page.tsx","../src/components/floating-widget/icon-registry.ts","../src/components/floating-widget/roadmap-content/index.tsx","../src/components/floating-widget/roadmap-detail.tsx","../src/components/floating-widget/support-resource-icon.tsx","../src/components/floating-widget/support-content.tsx","../src/components/floating-widget/changelog/list-item.tsx","../src/components/floating-widget/update-timeline.tsx","../src/components/floating-widget/widget-content.tsx","../src/components/floating-widget/index.tsx","../src/components/anchored-widget/index.tsx","../src/utils/subscriber-properties.ts","../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.0_@types+react@18.3.18_react@18.3.1/node_modules/@radix-ui/react-slot/dist/index.mjs","../src/components/ui/button.tsx","../src/components/checklist/completion-lifecycle.ts","../src/components/checklist/actions/index.tsx","../src/components/checklist/checklist-preview.tsx","../src/components/checklist/index.tsx","../src/components/drawer/index.tsx","../../utils/src/survey-logic.ts","../src/components/survey/AnimateChangeInHeight.tsx","../src/components/survey/survey-questions/scrollable-container.tsx","../src/components/survey/survey-questions/survey-button.tsx","../src/components/survey/survey-questions/buttons.tsx","../src/components/survey/survey-questions/message.tsx","../src/components/survey/survey-questions/multi-select.tsx","../src/components/survey/survey-questions/emojis.tsx","../src/components/survey/survey-questions/rating.tsx","../src/components/survey/survey-questions/survey-dropdown.tsx","../src/components/ui/autosize-textarea.tsx","../src/components/ui/input.tsx","../src/components/survey/survey-questions/text.tsx","../src/components/survey/survey-questions/thankyou.tsx","../src/components/survey/survey-questions/index.tsx","../src/components/survey/survey-preview.tsx","../src/components/survey/index.tsx","../src/components/tour/tour-preview.tsx","../src/components/tour/index.tsx","../src/modules/portal.tsx","../src/lib/widget.ts","../src/lib/tourLaunch.ts","../src/lib/adoption-workflow-assignments.ts","../src/lib/actions.ts","../src/lib/api.ts","../src/lib/attributes.ts","../src/lib/privacy.ts","../src/lib/tourResume.ts","../src/lib/noCodeActions.ts","../src/lib/personState.ts","../src/lib/routeChangeDetection.ts","../src/lib/eventListeners.ts","../src/lib/noCodeSignalEngine.ts","../src/lib/initialize.ts","../src/lib/commandQueue.ts","../src/lib/trackEvent.ts","../src/lib/featureTracking.ts","../src/lib/replay-diagnostics.ts","../src/lib/errorTracking.ts","../src/lib/person.ts","../src/index.ts"],"sourcesContent":["export function hasGlobalPrivacyControl(): boolean {\n  return (\n    typeof window !== \"undefined\" &&\n    (window.navigator as (Navigator & { globalPrivacyControl?: boolean }) | undefined)\n      ?.globalPrivacyControl === true\n  );\n}\n","import { hasGlobalPrivacyControl } from \"./privacySignals\";\n\nexport type PrivacyPreferences = {\n  analytics?: boolean;\n  sessionReplay?: boolean;\n  widget?: boolean;\n  respectGlobalPrivacyControlForAnalytics?: boolean;\n};\nexport type PrivacyPurpose = \"analytics\" | \"widget\" | \"sessionReplay\";\nconst preferences: PrivacyPreferences = {};\nconst generations = { analytics: 0, widget: 0, sessionReplay: 0 };\nconst listeners = new Set<() => void>();\nconst fields = new Set([\n  \"analytics\",\n  \"sessionReplay\",\n  \"widget\",\n  \"respectGlobalPrivacyControlForAnalytics\",\n]);\n\nexport function validatePrivacyPreferences(input: PrivacyPreferences): void {\n  if (!input || typeof input !== \"object\" || Array.isArray(input))\n    throw new TypeError(\"Privacy preferences must contain supported boolean choices\");\n  if (Object.entries(input).some(([key, value]) => !fields.has(key) || typeof value !== \"boolean\"))\n    throw new TypeError(\"Privacy preferences must contain supported boolean choices\");\n}\nexport function updatePrivacyPreferences(input: PrivacyPreferences): void {\n  validatePrivacyPreferences(input);\n  const entries = Object.entries(input);\n  const changed: string[] = [];\n  for (const [key, value] of entries) {\n    if (preferences[key] !== value) {\n      preferences[key] = value;\n      changed.push(key);\n    }\n  }\n  if (changed.includes(\"analytics\") || changed.includes(\"respectGlobalPrivacyControlForAnalytics\"))\n    generations.analytics++;\n  if (changed.includes(\"widget\")) generations.widget++;\n  if (changed.includes(\"sessionReplay\")) generations.sessionReplay++;\n  for (const listener of listeners) listener();\n}\nexport function getPrivacyPreferences(): PrivacyPreferences {\n  return { ...preferences };\n}\nexport function privacyGeneration(purpose: PrivacyPurpose): number {\n  return generations[purpose];\n}\nexport function privacyAllowed(purpose: PrivacyPurpose): boolean {\n  if (preferences[purpose] === false) return false;\n  return (\n    purpose !== \"analytics\" ||\n    preferences.respectGlobalPrivacyControlForAnalytics !== true ||\n    !hasGlobalPrivacyControl()\n  );\n}\nexport function subscribePrivacyPreferences(listener: () => void): () => void {\n  listeners.add(listener);\n  return () => listeners.delete(listener);\n}\nexport function privacyPreferencesFromInit(input: any): PrivacyPreferences {\n  const choices: PrivacyPreferences = { ...input.privacyPreferences };\n  for (const [purpose, section] of [\n    [\"analytics\", input.analytics],\n    [\"sessionReplay\", input.sessionReplay],\n    [\"widget\", input.widget],\n  ] as const) {\n    if (choices[purpose] === undefined && section?.enabled !== undefined) {\n      if (\n        purpose === \"widget\" &&\n        input.widget?.autoMount === false &&\n        section.enabled === true &&\n        preferences.widget !== undefined\n      )\n        continue;\n      choices[purpose] = section.enabled;\n    }\n  }\n  return choices;\n}\n","export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export {};\n","export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[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// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","import { z } from \"zod\";\n\nexport const TARGETING_AST_SCHEMA_VERSION = 1 as const;\nexport const TARGETING_AST_V1_CAPABILITY = \"targeting_ast_v1\" as const;\nexport const TARGETING_AST_MAX_NODES = 100;\nexport const TARGETING_AST_MAX_DEPTH = 8;\nexport const TARGETING_AST_MAX_CHILDREN = 50;\n\nexport const TARGETING_LEAF_SOURCES = [\"user\", \"segment\", \"event\", \"url\", \"experience\"] as const;\n\nexport type TargetingLeafSource = (typeof TARGETING_LEAF_SOURCES)[number];\nexport type TargetingEvaluationResult = \"match\" | \"no_match\" | \"unknown\";\nexport type TargetingJsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | TargetingJsonValue[]\n  | { [key: string]: TargetingJsonValue };\n\nexport type TargetingOperand = {\n  operator: string;\n  field?: string;\n  value?: TargetingJsonValue;\n  [key: string]: TargetingJsonValue | undefined;\n};\n\nexport type TargetingConditionNode = {\n  id: string;\n  type: \"condition\";\n  source: TargetingLeafSource;\n  operand: TargetingOperand;\n};\n\nexport type TargetingGroupNode = {\n  id: string;\n  type: \"group\";\n  combinator: \"and\" | \"or\";\n  children: TargetingNode[];\n};\n\nexport type TargetingNode = TargetingGroupNode | TargetingConditionNode;\n\nexport type TargetingEligibilityV1 = {\n  schemaVersion: typeof TARGETING_AST_SCHEMA_VERSION;\n  root: TargetingGroupNode;\n};\n\nexport type TargetingConfiguration = Record<string, unknown> & {\n  eligibility?: TargetingEligibilityV1;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst ZTargetingJsonValue: z.ZodType<TargetingJsonValue> = z.lazy(() =>\n  z.union([\n    z.string(),\n    z.number().finite(),\n    z.boolean(),\n    z.null(),\n    z.array(ZTargetingJsonValue),\n    z.record(ZTargetingJsonValue),\n  ]),\n);\n\nexport const ZTargetingOperand = z\n  .object({\n    operator: z.string().trim().min(1).max(128),\n    field: z.string().trim().min(1).max(256).optional(),\n    value: ZTargetingJsonValue.optional(),\n  })\n  .catchall(ZTargetingJsonValue) as z.ZodType<TargetingOperand>;\n\nconst ZTargetingConditionNode = z\n  .object({\n    id: z.string().trim().min(1).max(128),\n    type: z.literal(\"condition\"),\n    source: z.enum(TARGETING_LEAF_SOURCES),\n    operand: ZTargetingOperand,\n  })\n  .strict();\n\nexport const ZTargetingNode = z.lazy(() =>\n  z.union([\n    z\n      .object({\n        id: z.string().trim().min(1).max(128),\n        type: z.literal(\"group\"),\n        combinator: z.enum([\"and\", \"or\"]),\n        children: z.array(ZTargetingNode).min(1).max(TARGETING_AST_MAX_CHILDREN),\n      })\n      .strict(),\n    ZTargetingConditionNode,\n  ]),\n) as z.ZodType<TargetingNode>;\n\nexport const ZTargetingEligibilityV1 = z\n  .object({\n    schemaVersion: z.literal(TARGETING_AST_SCHEMA_VERSION),\n    root: ZTargetingNode.refine(\n      (node): node is TargetingGroupNode => node.type === \"group\",\n      \"Eligibility root must be a group\",\n    ),\n  })\n  .strict() as z.ZodType<TargetingEligibilityV1>;\n\nexport type TargetingValidationResult =\n  | {\n      success: true;\n      data: TargetingEligibilityV1;\n      nodeCount: number;\n      depth: number;\n    }\n  | {\n      success: false;\n      issues: string[];\n    };\n\nconst getTreeStats = (root: TargetingNode) => {\n  let nodeCount = 0;\n  let maximumDepth = 0;\n  const ids = new Set<string>();\n  const duplicateIds = new Set<string>();\n\n  const visit = (node: TargetingNode, depth: number) => {\n    nodeCount += 1;\n    maximumDepth = Math.max(maximumDepth, depth);\n    if (ids.has(node.id)) duplicateIds.add(node.id);\n    ids.add(node.id);\n\n    if (node.type === \"group\") {\n      node.children.forEach((child) => visit(child, depth + 1));\n    }\n  };\n\n  visit(root, 1);\n  return { nodeCount, depth: maximumDepth, duplicateIds: [...duplicateIds] };\n};\n\nconst getPreflightLimitIssues = (value: unknown) => {\n  if (!isRecord(value) || !isRecord(value.root)) return [];\n\n  const pending: Array<{ node: Record<string, unknown>; depth: number }> = [\n    { node: value.root, depth: 1 },\n  ];\n  let nodeCount = 0;\n\n  while (pending.length > 0) {\n    const current = pending.pop();\n    if (!current) break;\n    nodeCount += 1;\n\n    if (nodeCount > TARGETING_AST_MAX_NODES) {\n      return [`Eligibility exceeds the ${TARGETING_AST_MAX_NODES}-node limit`];\n    }\n    if (current.depth > TARGETING_AST_MAX_DEPTH) {\n      return [`Eligibility exceeds the ${TARGETING_AST_MAX_DEPTH}-level depth limit`];\n    }\n\n    if (current.node.type !== \"group\" || !Array.isArray(current.node.children)) continue;\n    if (current.node.children.length > TARGETING_AST_MAX_CHILDREN) {\n      return [`Eligibility groups may have at most ${TARGETING_AST_MAX_CHILDREN} children`];\n    }\n\n    current.node.children.forEach((child) => {\n      if (isRecord(child)) pending.push({ node: child, depth: current.depth + 1 });\n    });\n  }\n\n  return [];\n};\n\nexport function validateTargetingEligibility(value: unknown): TargetingValidationResult {\n  const limitIssues = getPreflightLimitIssues(value);\n  if (limitIssues.length > 0) return { success: false, issues: limitIssues };\n\n  let parsed: ReturnType<typeof ZTargetingEligibilityV1.safeParse>;\n  try {\n    parsed = ZTargetingEligibilityV1.safeParse(value);\n  } catch {\n    return { success: false, issues: [\"Eligibility could not be parsed safely\"] };\n  }\n  if (!parsed.success) {\n    return {\n      success: false,\n      issues: parsed.error.issues.map((issue) => {\n        const path = issue.path.length > 0 ? `${issue.path.join(\".\")}: ` : \"\";\n        return `${path}${issue.message}`;\n      }),\n    };\n  }\n\n  const eligibility = parsed.data;\n  const stats = getTreeStats(eligibility.root);\n  const issues: string[] = [];\n  if (stats.nodeCount > TARGETING_AST_MAX_NODES) {\n    issues.push(`Eligibility exceeds the ${TARGETING_AST_MAX_NODES}-node limit`);\n  }\n  if (stats.depth > TARGETING_AST_MAX_DEPTH) {\n    issues.push(`Eligibility exceeds the ${TARGETING_AST_MAX_DEPTH}-level depth limit`);\n  }\n  if (stats.duplicateIds.length > 0) {\n    issues.push(`Eligibility node ids must be unique: ${stats.duplicateIds.join(\", \")}`);\n  }\n\n  if (issues.length > 0) return { success: false, issues };\n  return { success: true, data: eligibility, nodeCount: stats.nodeCount, depth: stats.depth };\n}\n\nexport type TargetingLeafResolver<TContext = unknown> = (\n  node: TargetingConditionNode,\n  context: TContext,\n) => TargetingEvaluationResult | Promise<TargetingEvaluationResult>;\n\nexport type TargetingLeafResolvers<TContext = unknown> = Partial<\n  Record<TargetingLeafSource, TargetingLeafResolver<TContext>>\n>;\n\nconst isEvaluationResult = (value: unknown): value is TargetingEvaluationResult =>\n  value === \"match\" || value === \"no_match\" || value === \"unknown\";\n\nasync function evaluateNode<TContext>(\n  node: TargetingNode,\n  resolvers: TargetingLeafResolvers<TContext>,\n  context: TContext,\n): Promise<TargetingEvaluationResult> {\n  if (node.type === \"condition\") {\n    const resolver = resolvers[node.source];\n    if (!resolver) return \"unknown\";\n\n    try {\n      const result = await resolver(node, context);\n      return isEvaluationResult(result) ? result : \"unknown\";\n    } catch {\n      return \"unknown\";\n    }\n  }\n\n  const results = await Promise.all(\n    node.children.map((child) => evaluateNode(child, resolvers, context)),\n  );\n\n  if (node.combinator === \"and\") {\n    if (results.includes(\"no_match\")) return \"no_match\";\n    return results.every((result) => result === \"match\") ? \"match\" : \"unknown\";\n  }\n\n  if (results.includes(\"match\")) return \"match\";\n  return results.every((result) => result === \"no_match\") ? \"no_match\" : \"unknown\";\n}\n\nexport async function evaluateTargetingEligibility<TContext = unknown>(\n  eligibility: unknown,\n  resolvers: TargetingLeafResolvers<TContext>,\n  context: TContext,\n): Promise<TargetingEvaluationResult> {\n  const validation = validateTargetingEligibility(eligibility);\n  if (!validation.success) return \"no_match\";\n  return evaluateNode(validation.data.root, resolvers, context);\n}\n\nexport function hasTargetingCapability(\n  capabilities: readonly unknown[] | null | undefined,\n  capability = TARGETING_AST_V1_CAPABILITY,\n) {\n  return Array.isArray(capabilities) && capabilities.includes(capability);\n}\n\nexport function shouldDeliverTargetingResult(\n  result: TargetingEvaluationResult,\n  capabilities: readonly unknown[] | null | undefined,\n) {\n  if (result === \"match\") return true;\n  if (result === \"no_match\") return false;\n  return hasTargetingCapability(capabilities);\n}\n","import { z } from \"zod\";\nimport type {\n  TargetingConditionNode,\n  TargetingEvaluationResult,\n  TargetingLeafResolver,\n  TargetingNode,\n} from \"../targeting-runtime/targeting\";\nimport { validateTargetingEligibility } from \"../targeting-runtime/targeting\";\n\nexport const BEHAVIOR_COUNT_COMPARISONS = [\"eq\", \"ne\", \"gt\", \"gte\", \"lt\", \"lte\"] as const;\nexport const BEHAVIOR_TIME_COMPARISONS = [\n  \"before\",\n  \"on_or_before\",\n  \"after\",\n  \"on_or_after\",\n] as const;\nexport const BEHAVIOR_RECENCY_COMPARISONS = [\"within\", \"not_within\"] as const;\nexport const BEHAVIOR_EVENT_OPERATORS = [\n  \"occurred\",\n  \"not_occurred\",\n  \"count\",\n  \"first_occurred_at\",\n  \"last_occurred_at\",\n  \"recency\",\n] as const;\n\nconst ZRfc3339 = z.string().datetime({ offset: true });\n\nexport const ZBehaviorWindow = z.union([\n  z\n    .object({\n      kind: z.literal(\"relative\"),\n      seconds: z.number().int().positive(),\n    })\n    .strict(),\n  z\n    .object({\n      kind: z.literal(\"absolute\"),\n      start: ZRfc3339.optional(),\n      end: ZRfc3339.optional(),\n    })\n    .strict()\n    .refine((window) => window.start !== undefined || window.end !== undefined, {\n      message: \"Absolute behavior windows require a start or end\",\n    })\n    .refine(\n      (window) =>\n        window.start === undefined ||\n        window.end === undefined ||\n        Date.parse(window.start) < Date.parse(window.end),\n      { message: \"Absolute behavior window start must be before end\" },\n    ),\n]);\n\nconst ZEventField = z.string().trim().min(1).max(256);\nconst ZWindowedEventOperandBase = {\n  field: ZEventField,\n  window: ZBehaviorWindow.optional(),\n};\n\nexport const ZBehaviorEventOperand = z.discriminatedUnion(\"operator\", [\n  z.object({ operator: z.literal(\"occurred\"), ...ZWindowedEventOperandBase }).strict(),\n  z.object({ operator: z.literal(\"not_occurred\"), ...ZWindowedEventOperandBase }).strict(),\n  z\n    .object({\n      operator: z.literal(\"count\"),\n      ...ZWindowedEventOperandBase,\n      comparison: z.enum(BEHAVIOR_COUNT_COMPARISONS),\n      value: z.number().int().nonnegative(),\n    })\n    .strict(),\n  z\n    .object({\n      operator: z.literal(\"first_occurred_at\"),\n      ...ZWindowedEventOperandBase,\n      comparison: z.enum(BEHAVIOR_TIME_COMPARISONS),\n      value: ZRfc3339,\n    })\n    .strict(),\n  z\n    .object({\n      operator: z.literal(\"last_occurred_at\"),\n      ...ZWindowedEventOperandBase,\n      comparison: z.enum(BEHAVIOR_TIME_COMPARISONS),\n      value: ZRfc3339,\n    })\n    .strict(),\n  z\n    .object({\n      operator: z.literal(\"recency\"),\n      field: ZEventField,\n      comparison: z.enum(BEHAVIOR_RECENCY_COMPARISONS),\n      value: z.number().int().positive(),\n    })\n    .strict(),\n]);\n\nexport type BehaviorWindow = z.infer<typeof ZBehaviorWindow>;\nexport type BehaviorEventOperand = z.infer<typeof ZBehaviorEventOperand>;\n\nexport type BehaviorEventFacts = {\n  totalCount: number;\n  firstOccurredAt: string | null;\n  lastOccurredAt: string | null;\n  windowCounts: Record<string, number>;\n  windowFirstOccurredAt: Record<string, string | null>;\n  windowLastOccurredAt: Record<string, string | null>;\n};\n\nexport type BehaviorHistorySnapshot = {\n  availability: \"available\" | \"unavailable\";\n  projectId: string;\n  asOf: string;\n  coverageStart: string | null;\n  coverageStartByField?: Record<string, string | null>;\n  computedWindowsByField?: Record<string, string[]>;\n  excludedInsertIds: string[];\n  facts: Record<string, BehaviorEventFacts>;\n};\n\nexport type BehaviorHistorySnapshotRequest = {\n  tenantId: string;\n  projectId: string;\n  subscriberId: string | null;\n  distinctId: string;\n  operands: readonly unknown[];\n  asOf: string;\n  excludeInsertIds?: readonly string[];\n};\n\nexport interface BehaviorHistory {\n  getSnapshot(request: BehaviorHistorySnapshotRequest): Promise<BehaviorHistorySnapshot>;\n}\n\nexport const EMPTY_BEHAVIOR_EVENT_FACTS: Readonly<BehaviorEventFacts> = Object.freeze({\n  totalCount: 0,\n  firstOccurredAt: null,\n  lastOccurredAt: null,\n  windowCounts: Object.freeze({}),\n  windowFirstOccurredAt: Object.freeze({}),\n  windowLastOccurredAt: Object.freeze({}),\n});\n\nexport const behaviorWindowKey = (window: BehaviorWindow) => {\n  if (window.kind === \"relative\") return `relative:${window.seconds}`;\n  return `absolute:${window.start ?? \"\"}:${window.end ?? \"\"}`;\n};\n\nexport const collectBehaviorEventOperands = (\n  eligibilities: readonly unknown[],\n): BehaviorEventOperand[] => {\n  const operands = new Map<string, BehaviorEventOperand>();\n\n  const visit = (node: TargetingNode) => {\n    if (node.type === \"group\") {\n      node.children.forEach(visit);\n      return;\n    }\n    if (node.source !== \"event\") return;\n\n    const parsed = ZBehaviorEventOperand.safeParse(node.operand);\n    if (!parsed.success) return;\n    operands.set(JSON.stringify(parsed.data), parsed.data);\n  };\n\n  for (const eligibility of eligibilities) {\n    const validation = validateTargetingEligibility(eligibility);\n    if (validation.success) visit(validation.data.root);\n  }\n\n  return [...operands.values()];\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  !!value && typeof value === \"object\" && !Array.isArray(value);\n\nexport function getActionEventHistoryField(action: unknown): string | null {\n  if (!isRecord(action)) return null;\n  if (action.type === \"code\") {\n    return typeof action.key === \"string\" && action.key.trim() ? action.key : null;\n  }\n  if (action.type === \"automatic\") return \"$uo_web_page_view\";\n  return typeof action.name === \"string\" && action.name.trim() ? action.name : null;\n}\n\nexport function collectExperienceBehaviorEventOperands(\n  experiences: readonly unknown[],\n): BehaviorEventOperand[] {\n  const operands = new Map<string, BehaviorEventOperand>();\n  const add = (operand: BehaviorEventOperand) => operands.set(JSON.stringify(operand), operand);\n\n  collectBehaviorEventOperands(\n    experiences.map((experience) =>\n      isRecord(experience) &&\n      isRecord(experience.configuration) &&\n      isRecord(experience.configuration.targeting)\n        ? experience.configuration.targeting.eligibility\n        : undefined,\n    ),\n  ).forEach(add);\n\n  for (const experience of experiences) {\n    if (!isRecord(experience) || !isRecord(experience.configuration)) continue;\n    const targeting = experience.configuration.targeting;\n    if (\n      !isRecord(targeting) ||\n      targeting.trigger !== \"auto\" ||\n      targeting.eventTriggerCombinator !== \"and\" ||\n      !Array.isArray(experience.triggers)\n    ) {\n      continue;\n    }\n\n    for (const trigger of experience.triggers) {\n      const field = isRecord(trigger) ? getActionEventHistoryField(trigger.event) : null;\n      if (field) add({ operator: \"occurred\", field });\n    }\n  }\n\n  return [...operands.values()];\n}\n\nexport const behaviorTimestampMatchesWindow = (\n  timestamp: string,\n  window: BehaviorWindow,\n  asOf: string,\n) => {\n  const timestampMs = Date.parse(timestamp);\n  const asOfMs = Date.parse(asOf);\n  if (!Number.isFinite(timestampMs) || !Number.isFinite(asOfMs) || timestampMs > asOfMs) {\n    return false;\n  }\n\n  if (window.kind === \"relative\") {\n    return timestampMs >= asOfMs - window.seconds * 1_000;\n  }\n\n  const startsInWindow = window.start === undefined || timestampMs >= Date.parse(window.start);\n  const endsInWindow = window.end === undefined || timestampMs < Date.parse(window.end);\n  return startsInWindow && endsInWindow;\n};\n\nconst compareNumber = (\n  actual: number,\n  comparison: (typeof BEHAVIOR_COUNT_COMPARISONS)[number],\n  expected: number,\n) => {\n  switch (comparison) {\n    case \"eq\":\n      return actual === expected;\n    case \"ne\":\n      return actual !== expected;\n    case \"gt\":\n      return actual > expected;\n    case \"gte\":\n      return actual >= expected;\n    case \"lt\":\n      return actual < expected;\n    case \"lte\":\n      return actual <= expected;\n  }\n};\n\nconst compareTimestamp = (\n  actual: string,\n  comparison: (typeof BEHAVIOR_TIME_COMPARISONS)[number],\n  expected: string,\n) => {\n  const actualMs = Date.parse(actual);\n  const expectedMs = Date.parse(expected);\n  if (!Number.isFinite(actualMs) || !Number.isFinite(expectedMs)) return null;\n\n  switch (comparison) {\n    case \"before\":\n      return actualMs < expectedMs;\n    case \"on_or_before\":\n      return actualMs <= expectedMs;\n    case \"after\":\n      return actualMs > expectedMs;\n    case \"on_or_after\":\n      return actualMs >= expectedMs;\n  }\n};\n\nconst resultFor = (matches: boolean): TargetingEvaluationResult => (matches ? \"match\" : \"no_match\");\n\nconst factsForOperand = (\n  snapshot: BehaviorHistorySnapshot,\n  operand: BehaviorEventOperand,\n): { count: number; firstOccurredAt: string | null; lastOccurredAt: string | null } => {\n  const eventFacts = snapshot.facts[operand.field] ?? EMPTY_BEHAVIOR_EVENT_FACTS;\n  if (!(\"window\" in operand) || !operand.window) {\n    return {\n      count: eventFacts.totalCount,\n      firstOccurredAt: eventFacts.firstOccurredAt,\n      lastOccurredAt: eventFacts.lastOccurredAt,\n    };\n  }\n  const key = behaviorWindowKey(operand.window);\n  return {\n    count: eventFacts.windowCounts[key] ?? 0,\n    firstOccurredAt: eventFacts.windowFirstOccurredAt[key] ?? null,\n    lastOccurredAt: eventFacts.windowLastOccurredAt[key] ?? null,\n  };\n};\n\nexport const evaluateBehaviorEventOperand = (\n  value: unknown,\n  snapshot: BehaviorHistorySnapshot,\n): TargetingEvaluationResult => {\n  const parsed = ZBehaviorEventOperand.safeParse(value);\n  if (!parsed.success || snapshot.availability !== \"available\" || !snapshot.projectId) {\n    return \"unknown\";\n  }\n\n  const operand = parsed.data;\n  const facts = factsForOperand(snapshot, operand);\n  const window = \"window\" in operand ? operand.window : undefined;\n  const windowWasComputed =\n    !window ||\n    !snapshot.computedWindowsByField ||\n    snapshot.computedWindowsByField[operand.field]?.includes(behaviorWindowKey(window));\n  const fieldCoverageStart = Object.prototype.hasOwnProperty.call(\n    snapshot.coverageStartByField ?? {},\n    operand.field,\n  )\n    ? snapshot.coverageStartByField?.[operand.field]\n    : snapshot.coverageStart;\n  const coverageStartMs = fieldCoverageStart ? Date.parse(fieldCoverageStart) : null;\n  const complete =\n    windowWasComputed &&\n    (fieldCoverageStart === null ||\n      (!!window &&\n        coverageStartMs !== null &&\n        Number.isFinite(coverageStartMs) &&\n        (window.kind === \"relative\"\n          ? Date.parse(snapshot.asOf) - window.seconds * 1_000 >= coverageStartMs\n          : !!window.start && Date.parse(window.start) >= coverageStartMs)));\n\n  if (!complete) {\n    if (operand.operator === \"occurred\" && facts.count > 0) return \"match\";\n    if (operand.operator === \"not_occurred\" && facts.count > 0) return \"no_match\";\n    return \"unknown\";\n  }\n\n  if (operand.operator === \"occurred\") return resultFor(facts.count > 0);\n  if (operand.operator === \"not_occurred\") return resultFor(facts.count === 0);\n  if (operand.operator === \"count\") {\n    return resultFor(compareNumber(facts.count, operand.comparison, operand.value));\n  }\n\n  if (operand.operator === \"first_occurred_at\" || operand.operator === \"last_occurred_at\") {\n    const occurrence =\n      operand.operator === \"first_occurred_at\" ? facts.firstOccurredAt : facts.lastOccurredAt;\n    if (!occurrence) return \"no_match\";\n    const comparison = compareTimestamp(occurrence, operand.comparison, operand.value);\n    return comparison === null ? \"unknown\" : resultFor(comparison);\n  }\n\n  const lastOccurredAt = facts.lastOccurredAt;\n  if (!lastOccurredAt) return resultFor(operand.comparison === \"not_within\");\n  const asOfMs = Date.parse(snapshot.asOf);\n  const lastOccurredAtMs = Date.parse(lastOccurredAt);\n  if (!Number.isFinite(asOfMs) || !Number.isFinite(lastOccurredAtMs) || lastOccurredAtMs > asOfMs) {\n    return \"unknown\";\n  }\n  const isWithin = asOfMs - lastOccurredAtMs <= operand.value * 1_000;\n  return resultFor(operand.comparison === \"within\" ? isWithin : !isWithin);\n};\n\nexport const resolveBehaviorEventCondition: TargetingLeafResolver<BehaviorHistorySnapshot> = (\n  node: TargetingConditionNode,\n  snapshot,\n) => {\n  if (node.source !== \"event\") return \"unknown\";\n  return evaluateBehaviorEventOperand(node.operand, snapshot);\n};\n","export * from \"./behavior-history-runtime/behavior-history\";\n","type LogLevel = \"debug\" | \"log\" | \"info\" | \"warn\" | \"error\";\n\ninterface LoggerConfig {\n  logLevel?: LogLevel;\n}\n\nexport class Logger {\n  private static instance: Logger | undefined;\n  private isDebugEnabled = false;\n\n  private constructor() {\n    this.checkDebugQueryParam();\n  }\n\n  static getInstance(): Logger {\n    if (!Logger.instance) {\n      Logger.instance = new Logger();\n    }\n    return Logger.instance;\n  }\n\n  private checkDebugQueryParam(): void {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n\n    const urlParams = new URLSearchParams(window.location.search);\n    const debugParam = urlParams.get(\"debug\");\n    this.isDebugEnabled = debugParam === \"true\" || debugParam === \"1\" || debugParam === \"yes\";\n  }\n\n  configure(config: LoggerConfig): void {\n    if (config && config.logLevel !== undefined) {\n      this.isDebugEnabled = config.logLevel !== \"error\";\n    }\n  }\n\n  private shouldLog(level: LogLevel): boolean {\n    if (level === \"error\") {\n      return true;\n    }\n    return this.isDebugEnabled;\n  }\n\n  private formatMessage(level: LogLevel, ...args: unknown[]): string {\n    const timestamp = new Date().toISOString();\n    const prefix = `🧱 Userorbit - ${timestamp} [${level.toUpperCase()}]`;\n    return `${prefix}`;\n  }\n\n  private logger(level: LogLevel, ...args: unknown[]): void {\n    if (!this.shouldLog(level)) {\n      return;\n    }\n\n    const prefix = this.formatMessage(level, ...args);\n\n    switch (level) {\n      case \"error\":\n        console.error(prefix, ...args);\n        break;\n      case \"warn\":\n        console.warn(prefix, ...args);\n        break;\n      case \"info\":\n        console.info(prefix, ...args);\n        break;\n      case \"debug\":\n      case \"log\":\n      default:\n        console.log(prefix, ...args);\n        break;\n    }\n  }\n\n  debug(...args: unknown[]): void {\n    this.logger(\"debug\", ...args);\n  }\n\n  log(...args: unknown[]): void {\n    this.logger(\"log\", ...args);\n  }\n\n  info(...args: unknown[]): void {\n    this.logger(\"info\", ...args);\n  }\n\n  warn(...args: unknown[]): void {\n    this.logger(\"warn\", ...args);\n  }\n\n  error(...args: unknown[]): void {\n    this.logger(\"error\", ...args);\n  }\n}\n","export * from \"./targeting-runtime/targeting\";\n","import {\n  evaluateTargetingEligibility,\n  type TargetingLeafResolver,\n  type TargetingLeafResolvers,\n  type TargetingLeafSource,\n} from \"@userorbit/types/targeting\";\n\nexport type AutomaticTargetingContext = {\n  experience: unknown;\n  person: unknown;\n  url: string;\n};\n\nconst resolvers: TargetingLeafResolvers<AutomaticTargetingContext> = {};\nconst resolverStacks = new Map<\n  TargetingLeafSource,\n  Array<TargetingLeafResolver<AutomaticTargetingContext>>\n>();\n\nexport function registerAutomaticTargetingResolver(\n  source: TargetingLeafSource,\n  resolver: TargetingLeafResolver<AutomaticTargetingContext>,\n) {\n  const stack = resolverStacks.get(source) ?? [];\n  stack.push(resolver);\n  resolverStacks.set(source, stack);\n  resolvers[source] = resolver;\n  let disposed = false;\n\n  return () => {\n    if (disposed) return;\n    disposed = true;\n    const index = stack.lastIndexOf(resolver);\n    if (index !== -1) stack.splice(index, 1);\n    const activeResolver = stack[stack.length - 1];\n    if (activeResolver) resolvers[source] = activeResolver;\n    else {\n      resolverStacks.delete(source);\n      delete resolvers[source];\n    }\n  };\n}\n\nexport async function canAutomaticallyLaunchExperience(\n  experience: any,\n  person: unknown,\n  url = typeof window === \"undefined\" ? \"\" : window.location.href,\n) {\n  if (experience?.launchOnly) return false;\n  return meetsTargetingEligibility(experience, person, url);\n}\n\nexport async function meetsTargetingEligibility(\n  experience: any,\n  person: unknown,\n  url = typeof window === \"undefined\" ? \"\" : window.location.href,\n) {\n  const eligibility = experience?.configuration?.targeting?.eligibility;\n  if (eligibility === undefined) return true;\n\n  const result = await evaluateTargetingEligibility(eligibility, resolvers, {\n    experience,\n    person,\n    url,\n  });\n  return result === \"match\";\n}\n","import {\n  BEHAVIOR_COUNT_COMPARISONS,\n  BEHAVIOR_TIME_COMPARISONS,\n  EMPTY_BEHAVIOR_EVENT_FACTS,\n  ZBehaviorEventOperand,\n  behaviorTimestampMatchesWindow,\n  behaviorWindowKey,\n  type BehaviorEventFacts,\n  type BehaviorEventOperand,\n  type BehaviorHistorySnapshot,\n  type BehaviorWindow,\n} from \"@userorbit/types/behavior-history\";\nimport type {\n  TargetingConditionNode,\n  TargetingEvaluationResult,\n  TargetingLeafResolver,\n} from \"@userorbit/types/targeting\";\nimport {\n  type AutomaticTargetingContext,\n  registerAutomaticTargetingResolver,\n} from \"./automatic-targeting\";\n\nexport type { BehaviorHistorySnapshot } from \"@userorbit/types/behavior-history\";\nexport type BehaviorHistoryEventFact = BehaviorEventFacts;\nexport type BehaviorHistoryWindow = BehaviorWindow;\n\nconst DEFAULT_MAX_SCOPES = 32;\nconst DEFAULT_MAX_EVENTS_PER_SCOPE = 500;\nconst DEFAULT_INSERT_ID_REQUEST_LIMIT = 100;\nconst RFC3339_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\n\nexport type CurrentSessionBehaviorEvent = {\n  insertId: string;\n  eventName: string;\n  eventTime: string;\n  projectId: string;\n  distinctId: string;\n};\n\ntype StoredEvent = CurrentSessionBehaviorEvent & { eventTimeMs: number };\ntype ScopeBucket = {\n  events: Map<string, StoredEvent>;\n  truncated: boolean;\n};\n\nexport type CurrentSessionBehaviorHistoryOptions = {\n  maxScopes?: number;\n  maxEventsPerScope?: number;\n  now?: () => number;\n};\n\nexport type CurrentSessionBehaviorHistory = {\n  record: (event: CurrentSessionBehaviorEvent) => boolean;\n  getInsertIds: (projectId: string, distinctId: string, limit?: number) => string[];\n  transition: (projectId: string | null, distinctId: string | null) => void;\n  transferAnonymousScope: (\n    projectId: string,\n    anonymousDistinctId: string,\n    identifiedDistinctId: string,\n  ) => boolean;\n  reset: (projectId?: string, distinctId?: string) => void;\n  setSnapshot: (\n    projectId: string,\n    distinctId: string,\n    snapshot: BehaviorHistorySnapshot | null,\n  ) => boolean;\n  resolve: (node: TargetingConditionNode) => TargetingEvaluationResult;\n};\n\ntype EvaluatedFact = {\n  count: number;\n  firstOccurredAt: number | null;\n  lastOccurredAt: number | null;\n  complete: boolean;\n};\n\nconst isNonEmptyString = (value: unknown): value is string =>\n  typeof value === \"string\" && value.trim().length > 0;\n\nconst isNonNegativeInteger = (value: unknown): value is number =>\n  typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n\nfunction parseTimestamp(value: unknown): number | null {\n  if (typeof value !== \"string\" || !RFC3339_PATTERN.test(value)) return null;\n  const parsed = Date.parse(value);\n  return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction parseNullableTimestamp(value: unknown): number | null | undefined {\n  if (value === null) return null;\n  const parsed = parseTimestamp(value);\n  return parsed === null ? undefined : parsed;\n}\n\nfunction scopeKey(projectId: string, distinctId: string) {\n  return JSON.stringify([projectId, distinctId]);\n}\n\nfunction evaluationWindow(operand: BehaviorEventOperand): BehaviorWindow | undefined {\n  if (operand.operator === \"recency\") {\n    return { kind: \"relative\", seconds: operand.value };\n  }\n  return \"window\" in operand ? operand.window : undefined;\n}\n\nfunction snapshotFactWindow(operand: BehaviorEventOperand): BehaviorWindow | undefined {\n  return operand.operator === \"recency\" ? undefined : evaluationWindow(operand);\n}\n\nfunction readSnapshotFact(\n  snapshot: BehaviorHistorySnapshot,\n  eventName: string,\n  window: BehaviorWindow | undefined,\n): Omit<EvaluatedFact, \"complete\"> | null {\n  const eventFacts = Object.prototype.hasOwnProperty.call(snapshot.facts, eventName)\n    ? snapshot.facts[eventName]\n    : EMPTY_BEHAVIOR_EVENT_FACTS;\n  const key = window ? behaviorWindowKey(window) : null;\n  const count = key ? (eventFacts.windowCounts[key] ?? 0) : eventFacts.totalCount;\n  const firstValue = key\n    ? (eventFacts.windowFirstOccurredAt[key] ?? null)\n    : eventFacts.firstOccurredAt;\n  const lastValue = key\n    ? (eventFacts.windowLastOccurredAt[key] ?? null)\n    : eventFacts.lastOccurredAt;\n  const firstOccurredAt = parseNullableTimestamp(firstValue);\n  const lastOccurredAt = parseNullableTimestamp(lastValue);\n  if (\n    !isNonNegativeInteger(count) ||\n    firstOccurredAt === undefined ||\n    lastOccurredAt === undefined ||\n    (count === 0 && (firstOccurredAt !== null || lastOccurredAt !== null)) ||\n    (count > 0 && (firstOccurredAt === null || lastOccurredAt === null))\n  ) {\n    return null;\n  }\n  return { count, firstOccurredAt, lastOccurredAt };\n}\n\nfunction hasCompleteCoverage(\n  snapshot: BehaviorHistorySnapshot,\n  eventName: string,\n  window: BehaviorWindow | undefined,\n  asOfMs: number,\n) {\n  if (\n    window &&\n    snapshot.computedWindowsByField &&\n    !snapshot.computedWindowsByField[eventName]?.includes(behaviorWindowKey(window))\n  ) {\n    return false;\n  }\n  const coverageStart = Object.prototype.hasOwnProperty.call(\n    snapshot.coverageStartByField ?? {},\n    eventName,\n  )\n    ? snapshot.coverageStartByField?.[eventName]\n    : snapshot.coverageStart;\n  if (coverageStart === null) return true;\n  const coverageStartMs = parseTimestamp(coverageStart);\n  if (coverageStartMs === null || !window) return false;\n  if (window.kind === \"relative\") {\n    return asOfMs - window.seconds * 1_000 >= coverageStartMs;\n  }\n  return !!window.start && Date.parse(window.start) >= coverageStartMs;\n}\n\nfunction compareCount(\n  count: number,\n  comparison: (typeof BEHAVIOR_COUNT_COMPARISONS)[number],\n  value: number,\n  complete: boolean,\n): TargetingEvaluationResult {\n  if (complete) {\n    if (comparison === \"eq\") return count === value ? \"match\" : \"no_match\";\n    if (comparison === \"ne\") return count !== value ? \"match\" : \"no_match\";\n    if (comparison === \"gt\") return count > value ? \"match\" : \"no_match\";\n    if (comparison === \"gte\") return count >= value ? \"match\" : \"no_match\";\n    if (comparison === \"lt\") return count < value ? \"match\" : \"no_match\";\n    return count <= value ? \"match\" : \"no_match\";\n  }\n\n  if (comparison === \"gt\" && count > value) return \"match\";\n  if (comparison === \"gte\" && count >= value) return \"match\";\n  if (comparison === \"lt\" && count >= value) return \"no_match\";\n  if (comparison === \"lte\" && count > value) return \"no_match\";\n  if (comparison === \"eq\" && count > value) return \"no_match\";\n  if (comparison === \"ne\" && count > value) return \"match\";\n  return \"unknown\";\n}\n\nfunction timestampMatches(\n  occurredAt: number | null,\n  comparison: (typeof BEHAVIOR_TIME_COMPARISONS)[number],\n  value: string,\n) {\n  if (occurredAt === null) return false;\n  const valueMs = Date.parse(value);\n  if (comparison === \"before\") return occurredAt < valueMs;\n  if (comparison === \"on_or_before\") return occurredAt <= valueMs;\n  if (comparison === \"after\") return occurredAt > valueMs;\n  return occurredAt >= valueMs;\n}\n\nfunction compareIncompleteTime(\n  operator: \"first_occurred_at\" | \"last_occurred_at\",\n  occurredAt: number | null,\n  comparison: (typeof BEHAVIOR_TIME_COMPARISONS)[number],\n  value: string,\n): TargetingEvaluationResult {\n  if (occurredAt === null) return \"unknown\";\n  const valueMs = Date.parse(value);\n\n  if (operator === \"first_occurred_at\") {\n    if (comparison === \"before\" && occurredAt < valueMs) return \"match\";\n    if (comparison === \"on_or_before\" && occurredAt <= valueMs) return \"match\";\n    if (comparison === \"after\" && occurredAt <= valueMs) return \"no_match\";\n    if (comparison === \"on_or_after\" && occurredAt < valueMs) return \"no_match\";\n    return \"unknown\";\n  }\n\n  if (comparison === \"after\" && occurredAt > valueMs) return \"match\";\n  if (comparison === \"on_or_after\" && occurredAt >= valueMs) return \"match\";\n  if (comparison === \"before\" && occurredAt >= valueMs) return \"no_match\";\n  if (comparison === \"on_or_before\" && occurredAt > valueMs) return \"no_match\";\n  return \"unknown\";\n}\n\nfunction evaluateOperand(operand: BehaviorEventOperand, fact: EvaluatedFact) {\n  if (operand.operator === \"occurred\") {\n    if (fact.count > 0) return \"match\";\n    return fact.complete ? \"no_match\" : \"unknown\";\n  }\n  if (operand.operator === \"not_occurred\") {\n    if (fact.count > 0) return \"no_match\";\n    return fact.complete ? \"match\" : \"unknown\";\n  }\n  if (operand.operator === \"count\") {\n    return compareCount(fact.count, operand.comparison, operand.value, fact.complete);\n  }\n  if (operand.operator === \"recency\") {\n    if (fact.count > 0) return operand.comparison === \"within\" ? \"match\" : \"no_match\";\n    if (!fact.complete) return \"unknown\";\n    return operand.comparison === \"within\" ? \"no_match\" : \"match\";\n  }\n\n  const occurredAt =\n    operand.operator === \"first_occurred_at\" ? fact.firstOccurredAt : fact.lastOccurredAt;\n  if (!fact.complete) {\n    return compareIncompleteTime(operand.operator, occurredAt, operand.comparison, operand.value);\n  }\n  return timestampMatches(occurredAt, operand.comparison, operand.value) ? \"match\" : \"no_match\";\n}\n\nexport const getBehaviorHistoryWindowKey = behaviorWindowKey;\n\nexport function createCurrentSessionBehaviorHistory(\n  options: CurrentSessionBehaviorHistoryOptions = {},\n): CurrentSessionBehaviorHistory {\n  const maxScopes = Math.max(1, options.maxScopes ?? DEFAULT_MAX_SCOPES);\n  const maxEventsPerScope = Math.max(1, options.maxEventsPerScope ?? DEFAULT_MAX_EVENTS_PER_SCOPE);\n  const now = options.now ?? Date.now;\n  const buckets = new Map<string, ScopeBucket>();\n  const snapshots = new Map<string, BehaviorHistorySnapshot>();\n  let activeScope: { projectId: string; distinctId: string } | null = null;\n  let scopesWereEvicted = false;\n\n  const trimBucket = (bucket: ScopeBucket) => {\n    while (bucket.events.size > maxEventsPerScope) {\n      const oldestInsertId = bucket.events.keys().next().value;\n      if (typeof oldestInsertId !== \"string\") break;\n      bucket.events.delete(oldestInsertId);\n      bucket.truncated = true;\n    }\n  };\n\n  const getBucket = (key: string) => {\n    const bucket = buckets.get(key);\n    if (!bucket) return undefined;\n    buckets.delete(key);\n    buckets.set(key, bucket);\n    return bucket;\n  };\n\n  const record = (event: CurrentSessionBehaviorEvent) => {\n    if (\n      !isNonEmptyString(event.insertId) ||\n      !isNonEmptyString(event.eventName) ||\n      !isNonEmptyString(event.projectId) ||\n      !isNonEmptyString(event.distinctId)\n    ) {\n      return false;\n    }\n    const eventTimeMs = parseTimestamp(event.eventTime);\n    if (eventTimeMs === null) return false;\n\n    const key = scopeKey(event.projectId, event.distinctId);\n    let bucket = getBucket(key);\n    if (!bucket) {\n      bucket = { events: new Map(), truncated: false };\n      buckets.set(key, bucket);\n    }\n    if (bucket.events.has(event.insertId)) return false;\n    bucket.events.set(event.insertId, { ...event, eventTimeMs });\n    trimBucket(bucket);\n\n    while (buckets.size > maxScopes) {\n      const oldestScope = buckets.keys().next().value;\n      if (typeof oldestScope !== \"string\") break;\n      buckets.delete(oldestScope);\n      snapshots.delete(oldestScope);\n      scopesWereEvicted = true;\n    }\n    return true;\n  };\n\n  const getInsertIds = (\n    projectId: string,\n    distinctId: string,\n    limit = DEFAULT_INSERT_ID_REQUEST_LIMIT,\n  ) => {\n    const bucket = getBucket(scopeKey(projectId, distinctId));\n    if (!bucket) return [];\n    const boundedLimit = Math.max(0, Math.min(Math.floor(limit), maxEventsPerScope));\n    return [...bucket.events.keys()].slice(-boundedLimit);\n  };\n\n  const transition = (projectId: string | null, distinctId: string | null) => {\n    activeScope =\n      isNonEmptyString(projectId) && isNonEmptyString(distinctId)\n        ? { projectId, distinctId }\n        : null;\n  };\n\n  const transferAnonymousScope = (\n    projectId: string,\n    anonymousDistinctId: string,\n    identifiedDistinctId: string,\n  ) => {\n    if (\n      !isNonEmptyString(projectId) ||\n      !isNonEmptyString(anonymousDistinctId) ||\n      !isNonEmptyString(identifiedDistinctId) ||\n      anonymousDistinctId === identifiedDistinctId\n    ) {\n      return false;\n    }\n    const sourceKey = scopeKey(projectId, anonymousDistinctId);\n    const targetKey = scopeKey(projectId, identifiedDistinctId);\n    const source = buckets.get(sourceKey);\n    const target = getBucket(targetKey) ?? { events: new Map(), truncated: false };\n    source?.events.forEach((event, insertId) => {\n      if (!target.events.has(insertId)) target.events.set(insertId, event);\n    });\n    target.truncated ||= source?.truncated === true;\n    trimBucket(target);\n    buckets.set(targetKey, target);\n    buckets.delete(sourceKey);\n    snapshots.delete(sourceKey);\n    activeScope = { projectId, distinctId: identifiedDistinctId };\n    return true;\n  };\n\n  const reset = (projectId?: string, distinctId?: string) => {\n    if (projectId !== undefined || distinctId !== undefined) {\n      if (!isNonEmptyString(projectId) || !isNonEmptyString(distinctId)) return;\n      const key = scopeKey(projectId, distinctId);\n      buckets.delete(key);\n      snapshots.delete(key);\n      if (activeScope?.projectId === projectId && activeScope.distinctId === distinctId) {\n        activeScope = null;\n      }\n      return;\n    }\n    buckets.clear();\n    snapshots.clear();\n    activeScope = null;\n    scopesWereEvicted = false;\n  };\n\n  const setSnapshot = (\n    projectId: string,\n    distinctId: string,\n    snapshot: BehaviorHistorySnapshot | null,\n  ) => {\n    if (!isNonEmptyString(projectId) || !isNonEmptyString(distinctId)) return false;\n    const key = scopeKey(projectId, distinctId);\n    if (snapshot === null) {\n      snapshots.delete(key);\n      return true;\n    }\n    if (snapshot.projectId !== projectId) return false;\n    snapshots.set(key, snapshot);\n    return true;\n  };\n\n  const resolve = (node: TargetingConditionNode): TargetingEvaluationResult => {\n    if (node.source !== \"event\" || !activeScope) return \"unknown\";\n    const parsedOperand = ZBehaviorEventOperand.safeParse(node.operand);\n    if (!parsedOperand.success) return \"unknown\";\n    const operand = parsedOperand.data;\n    const window = evaluationWindow(operand);\n    const factWindow = snapshotFactWindow(operand);\n    const evaluationNow = now();\n    const evaluationAsOf = new Date(evaluationNow).toISOString();\n    const key = scopeKey(activeScope.projectId, activeScope.distinctId);\n    const bucket = getBucket(key);\n    const sessionEvents = [...(bucket?.events.values() ?? [])].filter(\n      (event) =>\n        event.eventName === operand.field &&\n        event.eventTimeMs <= evaluationNow &&\n        (!window || behaviorTimestampMatchesWindow(event.eventTime, window, evaluationAsOf)),\n    );\n    const sessionTimes = sessionEvents.map((event) => event.eventTimeMs);\n    const sessionFirst = sessionTimes.length > 0 ? Math.min(...sessionTimes) : null;\n    const sessionLast = sessionTimes.length > 0 ? Math.max(...sessionTimes) : null;\n    const snapshot = snapshots.get(key);\n\n    let count = sessionEvents.length;\n    let firstOccurredAt = sessionFirst;\n    let lastOccurredAt = sessionLast;\n    let complete = false;\n\n    if (snapshot?.availability === \"available\" && snapshot.projectId === activeScope.projectId) {\n      const asOfMs = parseTimestamp(snapshot.asOf);\n      const snapshotFact =\n        asOfMs === null ? null : readSnapshotFact(snapshot, operand.field, factWindow);\n      if (snapshotFact && asOfMs !== null) {\n        const relativeFactIsStale = window?.kind === \"relative\" && evaluationNow !== asOfMs;\n        let baselineCount = relativeFactIsStale ? 0 : snapshotFact.count;\n        let baselineFirst = relativeFactIsStale ? null : snapshotFact.firstOccurredAt;\n        let baselineLast = relativeFactIsStale ? null : snapshotFact.lastOccurredAt;\n        if (operand.operator === \"recency\") {\n          const lastOccurredAt = snapshotFact.lastOccurredAt;\n          const lastIsWithin =\n            lastOccurredAt !== null &&\n            behaviorTimestampMatchesWindow(\n              new Date(lastOccurredAt).toISOString(),\n              window,\n              evaluationAsOf,\n            );\n          baselineCount = lastIsWithin ? 1 : 0;\n          baselineFirst = lastIsWithin ? lastOccurredAt : null;\n          baselineLast = lastIsWithin ? lastOccurredAt : null;\n        }\n        if (\n          operand.operator !== \"recency\" &&\n          relativeFactIsStale &&\n          snapshotFact.lastOccurredAt !== null &&\n          behaviorTimestampMatchesWindow(\n            new Date(snapshotFact.lastOccurredAt).toISOString(),\n            window,\n            evaluationAsOf,\n          )\n        ) {\n          baselineFirst = snapshotFact.lastOccurredAt;\n          baselineLast = snapshotFact.lastOccurredAt;\n        }\n\n        const excludedIds = new Set(snapshot.excludedInsertIds);\n        const excludedSessionCount = sessionEvents.filter((event) =>\n          excludedIds.has(event.insertId),\n        ).length;\n        count = Math.max(baselineCount + excludedSessionCount, sessionEvents.length);\n        firstOccurredAt = [baselineFirst, sessionFirst]\n          .filter((value): value is number => value !== null)\n          .reduce<number | null>(\n            (minimum, value) => (minimum === null ? value : Math.min(minimum, value)),\n            null,\n          );\n        lastOccurredAt = [baselineLast, sessionLast]\n          .filter((value): value is number => value !== null)\n          .reduce<number | null>(\n            (maximum, value) => (maximum === null ? value : Math.max(maximum, value)),\n            null,\n          );\n        complete =\n          !relativeFactIsStale &&\n          hasCompleteCoverage(snapshot, operand.field, window, asOfMs) &&\n          !bucket?.truncated &&\n          !scopesWereEvicted &&\n          sessionEvents.every((event) => excludedIds.has(event.insertId));\n      }\n    }\n\n    return evaluateOperand(operand, { count, firstOccurredAt, lastOccurredAt, complete });\n  };\n\n  return {\n    record,\n    getInsertIds,\n    transition,\n    transferAnonymousScope,\n    reset,\n    setSnapshot,\n    resolve,\n  };\n}\n\nconst currentSessionBehaviorHistory = createCurrentSessionBehaviorHistory();\n\nexport function recordCurrentSessionBehaviorEvent(event: CurrentSessionBehaviorEvent) {\n  return currentSessionBehaviorHistory.record(event);\n}\n\nexport function getCurrentSessionInsertIds(projectId: string, distinctId: string, limit?: number) {\n  return currentSessionBehaviorHistory.getInsertIds(projectId, distinctId, limit);\n}\n\nexport function transitionCurrentSessionBehaviorScope(\n  projectId: string | null,\n  distinctId: string | null,\n) {\n  currentSessionBehaviorHistory.transition(projectId, distinctId);\n}\n\nexport function transferAnonymousCurrentSessionBehaviorScope(\n  projectId: string,\n  anonymousDistinctId: string,\n  identifiedDistinctId: string,\n) {\n  return currentSessionBehaviorHistory.transferAnonymousScope(\n    projectId,\n    anonymousDistinctId,\n    identifiedDistinctId,\n  );\n}\n\nexport function resetCurrentSessionBehaviorHistory(projectId?: string, distinctId?: string) {\n  currentSessionBehaviorHistory.reset(projectId, distinctId);\n}\n\nexport function setCurrentBehaviorHistorySnapshot(\n  projectId: string,\n  distinctId: string,\n  snapshot: BehaviorHistorySnapshot | null,\n) {\n  return currentSessionBehaviorHistory.setSnapshot(projectId, distinctId, snapshot);\n}\n\nexport function hasBehaviorEventOccurred(field: string): boolean {\n  return (\n    currentSessionBehaviorHistory.resolve({\n      id: `auto-start:${field}`,\n      type: \"condition\",\n      source: \"event\",\n      operand: { operator: \"occurred\", field },\n    }) === \"match\"\n  );\n}\n\nexport function registerCurrentSessionBehaviorTargetingResolver() {\n  const resolver: TargetingLeafResolver<AutomaticTargetingContext> = (node) =>\n    currentSessionBehaviorHistory.resolve(node);\n  return registerAutomaticTargetingResolver(\"event\", resolver);\n}\n","export const USER_ACTIVITY_EVENTS = [\n  \"mousedown\",\n  \"keydown\",\n  \"touchstart\",\n  \"scroll\",\n  \"input\",\n] as const;\n\nexport type ActivitySignal =\n  | {\n      type: \"activity\";\n      eventType: (typeof USER_ACTIVITY_EVENTS)[number];\n      document: Document;\n      timestamp: number;\n    }\n  | {\n      type: \"visibility\";\n      hidden: boolean;\n      document: Document;\n      timestamp: number;\n    };\n\nconst subscribers = new Set<(signal: ActivitySignal) => void>();\nconst retainedDocuments = new Map<Document, { count: number; cleanup: () => void }>();\n\nconst emit = (signal: ActivitySignal) => {\n  [...subscribers].forEach((subscriber) => subscriber(signal));\n};\n\nexport function subscribeToActivitySignals(subscriber: (signal: ActivitySignal) => void) {\n  subscribers.add(subscriber);\n  let disposed = false;\n  return () => {\n    if (disposed) return;\n    disposed = true;\n    subscribers.delete(subscriber);\n  };\n}\n\nexport function retainActivityDocument(document: Document) {\n  const retained = retainedDocuments.get(document);\n  if (retained) {\n    retained.count += 1;\n    return createRelease(document);\n  }\n\n  const activityHandlers = new Map<string, EventListener>();\n  USER_ACTIVITY_EVENTS.forEach((eventType) => {\n    const handler: EventListener = () => {\n      emit({ type: \"activity\", eventType, document, timestamp: Date.now() });\n    };\n    activityHandlers.set(eventType, handler);\n    document.addEventListener(eventType, handler, { capture: true, passive: true });\n  });\n\n  const visibilityHandler = () => {\n    emit({\n      type: \"visibility\",\n      hidden: document.visibilityState === \"hidden\",\n      document,\n      timestamp: Date.now(),\n    });\n  };\n  document.addEventListener(\"visibilitychange\", visibilityHandler);\n\n  retainedDocuments.set(document, {\n    count: 1,\n    cleanup: () => {\n      activityHandlers.forEach((handler, eventType) => {\n        document.removeEventListener(eventType, handler, true);\n      });\n      document.removeEventListener(\"visibilitychange\", visibilityHandler);\n    },\n  });\n\n  return createRelease(document);\n}\n\nfunction createRelease(document: Document) {\n  let released = false;\n  return () => {\n    if (released) return;\n    released = true;\n\n    const retained = retainedDocuments.get(document);\n    if (!retained) return;\n    retained.count -= 1;\n    if (retained.count > 0) return;\n\n    retained.cleanup();\n    retainedDocuments.delete(document);\n  };\n}\n\nexport function getRetainedActivityDocumentCount() {\n  return retainedDocuments.size;\n}\n","var Pe=Object.defineProperty;var a=(e,t)=>Pe(e,\"name\",{value:t,configurable:!0});var P=class{type=3;name=\"\";prefix=\"\";value=\"\";suffix=\"\";modifier=3;constructor(t,r,n,c,l,f){this.type=t,this.name=r,this.prefix=n,this.value=c,this.suffix=l,this.modifier=f}hasCustomName(){return this.name!==\"\"&&typeof this.name!=\"number\"}};a(P,\"Part\");var Re=/[$_\\p{ID_Start}]/u,Ee=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,v=\".*\";function Oe(e,t){return(t?/^[\\x00-\\xFF]*$/:/^[\\x00-\\x7F]*$/).test(e)}a(Oe,\"isASCII\");function D(e,t=!1){let r=[],n=0;for(;n<e.length;){let c=e[n],l=a(function(f){if(!t)throw new TypeError(f);r.push({type:\"INVALID_CHAR\",index:n,value:e[n++]})},\"ErrorOrInvalid\");if(c===\"*\"){r.push({type:\"ASTERISK\",index:n,value:e[n++]});continue}if(c===\"+\"||c===\"?\"){r.push({type:\"OTHER_MODIFIER\",index:n,value:e[n++]});continue}if(c===\"\\\\\"){r.push({type:\"ESCAPED_CHAR\",index:n++,value:e[n++]});continue}if(c===\"{\"){r.push({type:\"OPEN\",index:n,value:e[n++]});continue}if(c===\"}\"){r.push({type:\"CLOSE\",index:n,value:e[n++]});continue}if(c===\":\"){let f=\"\",s=n+1;for(;s<e.length;){let i=e.substr(s,1);if(s===n+1&&Re.test(i)||s!==n+1&&Ee.test(i)){f+=e[s++];continue}break}if(!f){l(`Missing parameter name at ${n}`);continue}r.push({type:\"NAME\",index:n,value:f}),n=s;continue}if(c===\"(\"){let f=1,s=\"\",i=n+1,o=!1;if(e[i]===\"?\"){l(`Pattern cannot start with \"?\" at ${i}`);continue}for(;i<e.length;){if(!Oe(e[i],!1)){l(`Invalid character '${e[i]}' at ${i}.`),o=!0;break}if(e[i]===\"\\\\\"){s+=e[i++]+e[i++];continue}if(e[i]===\")\"){if(f--,f===0){i++;break}}else if(e[i]===\"(\"&&(f++,e[i+1]!==\"?\")){l(`Capturing groups are not allowed at ${i}`),o=!0;break}s+=e[i++]}if(o)continue;if(f){l(`Unbalanced pattern at ${n}`);continue}if(!s){l(`Missing pattern at ${n}`);continue}r.push({type:\"REGEX\",index:n,value:s}),n=i;continue}r.push({type:\"CHAR\",index:n,value:e[n++]})}return r.push({type:\"END\",index:n,value:\"\"}),r}a(D,\"lexer\");function F(e,t={}){let r=D(e);t.delimiter??=\"/#?\",t.prefixes??=\"./\";let n=`[^${x(t.delimiter)}]+?`,c=[],l=0,f=0,s=\"\",i=new Set,o=a(u=>{if(f<r.length&&r[f].type===u)return r[f++].value},\"tryConsume\"),h=a(()=>o(\"OTHER_MODIFIER\")??o(\"ASTERISK\"),\"tryConsumeModifier\"),p=a(u=>{let d=o(u);if(d!==void 0)return d;let{type:g,index:y}=r[f];throw new TypeError(`Unexpected ${g} at ${y}, expected ${u}`)},\"mustConsume\"),A=a(()=>{let u=\"\",d;for(;d=o(\"CHAR\")??o(\"ESCAPED_CHAR\");)u+=d;return u},\"consumeText\"),xe=a(u=>u,\"DefaultEncodePart\"),N=t.encodePart||xe,H=\"\",$=a(u=>{H+=u},\"appendToPendingFixedValue\"),M=a(()=>{H.length&&(c.push(new P(3,\"\",\"\",N(H),\"\",3)),H=\"\")},\"maybeAddPartFromPendingFixedValue\"),X=a((u,d,g,y,Z)=>{let m=3;switch(Z){case\"?\":m=1;break;case\"*\":m=0;break;case\"+\":m=2;break}if(!d&&!g&&m===3){$(u);return}if(M(),!d&&!g){if(!u)return;c.push(new P(3,\"\",\"\",N(u),\"\",m));return}let S;g?g===\"*\"?S=v:S=g:S=n;let k=2;S===n?(k=1,S=\"\"):S===v&&(k=0,S=\"\");let E;if(d?E=d:g&&(E=l++),i.has(E))throw new TypeError(`Duplicate name '${E}'.`);i.add(E),c.push(new P(k,E,N(u),S,N(y),m))},\"addPart\");for(;f<r.length;){let u=o(\"CHAR\"),d=o(\"NAME\"),g=o(\"REGEX\");if(!d&&!g&&(g=o(\"ASTERISK\")),d||g){let m=u??\"\";t.prefixes.indexOf(m)===-1&&($(m),m=\"\"),M();let S=h();X(m,d,g,\"\",S);continue}let y=u??o(\"ESCAPED_CHAR\");if(y){$(y);continue}if(o(\"OPEN\")){let m=A(),S=o(\"NAME\"),k=o(\"REGEX\");!S&&!k&&(k=o(\"ASTERISK\"));let E=A();p(\"CLOSE\");let be=h();X(m,S,k,E,be);continue}M(),p(\"END\")}return c}a(F,\"parse\");function x(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}a(x,\"escapeString\");function B(e){return e&&e.ignoreCase?\"ui\":\"u\"}a(B,\"flags\");function q(e,t,r){return W(F(e,r),t,r)}a(q,\"stringToRegexp\");function T(e){switch(e){case 0:return\"*\";case 1:return\"?\";case 2:return\"+\";case 3:return\"\"}}a(T,\"modifierToString\");function W(e,t,r={}){r.delimiter??=\"/#?\",r.prefixes??=\"./\",r.sensitive??=!1,r.strict??=!1,r.end??=!0,r.start??=!0,r.endsWith=\"\";let n=r.start?\"^\":\"\";for(let s of e){if(s.type===3){s.modifier===3?n+=x(s.value):n+=`(?:${x(s.value)})${T(s.modifier)}`;continue}t&&t.push(s.name);let i=`[^${x(r.delimiter)}]+?`,o=s.value;if(s.type===1?o=i:s.type===0&&(o=v),!s.prefix.length&&!s.suffix.length){s.modifier===3||s.modifier===1?n+=`(${o})${T(s.modifier)}`:n+=`((?:${o})${T(s.modifier)})`;continue}if(s.modifier===3||s.modifier===1){n+=`(?:${x(s.prefix)}(${o})${x(s.suffix)})`,n+=T(s.modifier);continue}n+=`(?:${x(s.prefix)}`,n+=`((?:${o})(?:`,n+=x(s.suffix),n+=x(s.prefix),n+=`(?:${o}))*)${x(s.suffix)})`,s.modifier===0&&(n+=\"?\")}let c=`[${x(r.endsWith)}]|$`,l=`[${x(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${l}?`),r.endsWith.length?n+=`(?=${c})`:n+=\"$\",new RegExp(n,B(r));r.strict||(n+=`(?:${l}(?=${c}))?`);let f=!1;if(e.length){let s=e[e.length-1];s.type===3&&s.modifier===3&&(f=r.delimiter.indexOf(s)>-1)}return f||(n+=`(?=${l}|${c})`),new RegExp(n,B(r))}a(W,\"partsToRegexp\");var b={delimiter:\"\",prefixes:\"\",sensitive:!0,strict:!0},J={delimiter:\".\",prefixes:\"\",sensitive:!0,strict:!0},Q={delimiter:\"/\",prefixes:\"/\",sensitive:!0,strict:!0};function ee(e,t){return e.length?e[0]===\"/\"?!0:!t||e.length<2?!1:(e[0]==\"\\\\\"||e[0]==\"{\")&&e[1]==\"/\":!1}a(ee,\"isAbsolutePathname\");function te(e,t){return e.startsWith(t)?e.substring(t.length,e.length):e}a(te,\"maybeStripPrefix\");function ke(e,t){return e.endsWith(t)?e.substr(0,e.length-t.length):e}a(ke,\"maybeStripSuffix\");function _(e){return!e||e.length<2?!1:e[0]===\"[\"||(e[0]===\"\\\\\"||e[0]===\"{\")&&e[1]===\"[\"}a(_,\"treatAsIPv6Hostname\");var re=[\"ftp\",\"file\",\"http\",\"https\",\"ws\",\"wss\"];function U(e){if(!e)return!0;for(let t of re)if(e.test(t))return!0;return!1}a(U,\"isSpecialScheme\");function ne(e,t){if(e=te(e,\"#\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.hash=e,r.hash?r.hash.substring(1,r.hash.length):\"\"}a(ne,\"canonicalizeHash\");function se(e,t){if(e=te(e,\"?\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.search=e,r.search?r.search.substring(1,r.search.length):\"\"}a(se,\"canonicalizeSearch\");function ie(e,t){return t||e===\"\"?e:_(e)?K(e):j(e)}a(ie,\"canonicalizeHostname\");function ae(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.password=e,r.password}a(ae,\"canonicalizePassword\");function oe(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.username=e,r.username}a(oe,\"canonicalizeUsername\");function ce(e,t,r){if(r||e===\"\")return e;if(t&&!re.includes(t))return new URL(`${t}:${e}`).pathname;let n=e[0]==\"/\";return e=new URL(n?e:\"/-\"+e,\"https://example.com\").pathname,n||(e=e.substring(2,e.length)),e}a(ce,\"canonicalizePathname\");function le(e,t,r){return z(t)===e&&(e=\"\"),r||e===\"\"?e:G(e)}a(le,\"canonicalizePort\");function fe(e,t){return e=ke(e,\":\"),t||e===\"\"?e:w(e)}a(fe,\"canonicalizeProtocol\");function z(e){switch(e){case\"ws\":case\"http\":return\"80\";case\"wws\":case\"https\":return\"443\";case\"ftp\":return\"21\";default:return\"\"}}a(z,\"defaultPortForProtocol\");function w(e){if(e===\"\")return e;if(/^[-+.A-Za-z0-9]*$/.test(e))return e.toLowerCase();throw new TypeError(`Invalid protocol '${e}'.`)}a(w,\"protocolEncodeCallback\");function he(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.username=e,t.username}a(he,\"usernameEncodeCallback\");function ue(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.password=e,t.password}a(ue,\"passwordEncodeCallback\");function j(e){if(e===\"\")return e;if(/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(e))throw new TypeError(`Invalid hostname '${e}'`);let t=new URL(\"https://example.com\");return t.hostname=e,t.hostname}a(j,\"hostnameEncodeCallback\");function K(e){if(e===\"\")return e;if(/[^0-9a-fA-F[\\]:]/g.test(e))throw new TypeError(`Invalid IPv6 hostname '${e}'`);return e.toLowerCase()}a(K,\"ipv6HostnameEncodeCallback\");function G(e){if(e===\"\"||/^[0-9]*$/.test(e)&&parseInt(e)<=65535)return e;throw new TypeError(`Invalid port '${e}'.`)}a(G,\"portEncodeCallback\");function de(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.pathname=e[0]!==\"/\"?\"/-\"+e:e,e[0]!==\"/\"?t.pathname.substring(2,t.pathname.length):t.pathname}a(de,\"standardURLPathnameEncodeCallback\");function pe(e){return e===\"\"?e:new URL(`data:${e}`).pathname}a(pe,\"pathURLPathnameEncodeCallback\");function ge(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.search=e,t.search.substring(1,t.search.length)}a(ge,\"searchEncodeCallback\");function me(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.hash=e,t.hash.substring(1,t.hash.length)}a(me,\"hashEncodeCallback\");var C=class{#i;#n=[];#t={};#e=0;#s=1;#l=0;#o=0;#d=0;#p=0;#g=!1;constructor(t){this.#i=t}get result(){return this.#t}parse(){for(this.#n=D(this.#i,!0);this.#e<this.#n.length;this.#e+=this.#s){if(this.#s=1,this.#n[this.#e].type===\"END\"){if(this.#o===0){this.#b(),this.#f()?this.#r(9,1):this.#h()?this.#r(8,1):this.#r(7,0);continue}else if(this.#o===2){this.#u(5);continue}this.#r(10,0);break}if(this.#d>0)if(this.#A())this.#d-=1;else continue;if(this.#T()){this.#d+=1;continue}switch(this.#o){case 0:this.#P()&&this.#u(1);break;case 1:if(this.#P()){this.#C();let t=7,r=1;this.#E()?(t=2,r=3):this.#g&&(t=2),this.#r(t,r)}break;case 2:this.#S()?this.#u(3):(this.#x()||this.#h()||this.#f())&&this.#u(5);break;case 3:this.#O()?this.#r(4,1):this.#S()&&this.#r(5,1);break;case 4:this.#S()&&this.#r(5,1);break;case 5:this.#y()?this.#p+=1:this.#w()&&(this.#p-=1),this.#k()&&!this.#p?this.#r(6,1):this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 6:this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 7:this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 8:this.#f()&&this.#r(9,1);break;case 9:break;case 10:break}}this.#t.hostname!==void 0&&this.#t.port===void 0&&(this.#t.port=\"\")}#r(t,r){switch(this.#o){case 0:break;case 1:this.#t.protocol=this.#c();break;case 2:break;case 3:this.#t.username=this.#c();break;case 4:this.#t.password=this.#c();break;case 5:this.#t.hostname=this.#c();break;case 6:this.#t.port=this.#c();break;case 7:this.#t.pathname=this.#c();break;case 8:this.#t.search=this.#c();break;case 9:this.#t.hash=this.#c();break;case 10:break}this.#o!==0&&t!==10&&([1,2,3,4].includes(this.#o)&&[6,7,8,9].includes(t)&&(this.#t.hostname??=\"\"),[1,2,3,4,5,6].includes(this.#o)&&[8,9].includes(t)&&(this.#t.pathname??=this.#g?\"/\":\"\"),[1,2,3,4,5,6,7].includes(this.#o)&&t===9&&(this.#t.search??=\"\")),this.#R(t,r)}#R(t,r){this.#o=t,this.#l=this.#e+r,this.#e+=r,this.#s=0}#b(){this.#e=this.#l,this.#s=0}#u(t){this.#b(),this.#o=t}#m(t){return t<0&&(t=this.#n.length-t),t<this.#n.length?this.#n[t]:this.#n[this.#n.length-1]}#a(t,r){let n=this.#m(t);return n.value===r&&(n.type===\"CHAR\"||n.type===\"ESCAPED_CHAR\"||n.type===\"INVALID_CHAR\")}#P(){return this.#a(this.#e,\":\")}#E(){return this.#a(this.#e+1,\"/\")&&this.#a(this.#e+2,\"/\")}#S(){return this.#a(this.#e,\"@\")}#O(){return this.#a(this.#e,\":\")}#k(){return this.#a(this.#e,\":\")}#x(){return this.#a(this.#e,\"/\")}#h(){if(this.#a(this.#e,\"?\"))return!0;if(this.#n[this.#e].value!==\"?\")return!1;let t=this.#m(this.#e-1);return t.type!==\"NAME\"&&t.type!==\"REGEX\"&&t.type!==\"CLOSE\"&&t.type!==\"ASTERISK\"}#f(){return this.#a(this.#e,\"#\")}#T(){return this.#n[this.#e].type==\"OPEN\"}#A(){return this.#n[this.#e].type==\"CLOSE\"}#y(){return this.#a(this.#e,\"[\")}#w(){return this.#a(this.#e,\"]\")}#c(){let t=this.#n[this.#e],r=this.#m(this.#l).index;return this.#i.substring(r,t.index)}#C(){let t={};Object.assign(t,b),t.encodePart=w;let r=q(this.#c(),void 0,t);this.#g=U(r)}};a(C,\"Parser\");var V=[\"protocol\",\"username\",\"password\",\"hostname\",\"port\",\"pathname\",\"search\",\"hash\"],O=\"*\";function Se(e,t){if(typeof e!=\"string\")throw new TypeError(\"parameter 1 is not of type 'string'.\");let r=new URL(e,t);return{protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==\"\"?r.search.substring(1,r.search.length):void 0,hash:r.hash!==\"\"?r.hash.substring(1,r.hash.length):void 0}}a(Se,\"extractValues\");function R(e,t){return t?I(e):e}a(R,\"processBaseURLString\");function L(e,t,r){let n;if(typeof t.baseURL==\"string\")try{n=new URL(t.baseURL),t.protocol===void 0&&(e.protocol=R(n.protocol.substring(0,n.protocol.length-1),r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&(e.username=R(n.username,r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&t.password===void 0&&(e.password=R(n.password,r)),t.protocol===void 0&&t.hostname===void 0&&(e.hostname=R(n.hostname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&(e.port=R(n.port,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&(e.pathname=R(n.pathname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&(e.search=R(n.search.substring(1,n.search.length),r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&t.hash===void 0&&(e.hash=R(n.hash.substring(1,n.hash.length),r))}catch{throw new TypeError(`invalid baseURL '${t.baseURL}'.`)}if(typeof t.protocol==\"string\"&&(e.protocol=fe(t.protocol,r)),typeof t.username==\"string\"&&(e.username=oe(t.username,r)),typeof t.password==\"string\"&&(e.password=ae(t.password,r)),typeof t.hostname==\"string\"&&(e.hostname=ie(t.hostname,r)),typeof t.port==\"string\"&&(e.port=le(t.port,e.protocol,r)),typeof t.pathname==\"string\"){if(e.pathname=t.pathname,n&&!ee(e.pathname,r)){let c=n.pathname.lastIndexOf(\"/\");c>=0&&(e.pathname=R(n.pathname.substring(0,c+1),r)+e.pathname)}e.pathname=ce(e.pathname,e.protocol,r)}return typeof t.search==\"string\"&&(e.search=se(t.search,r)),typeof t.hash==\"string\"&&(e.hash=ne(t.hash,r)),e}a(L,\"applyInit\");function I(e){return e.replace(/([+*?:{}()\\\\])/g,\"\\\\$1\")}a(I,\"escapePatternString\");function Te(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}a(Te,\"escapeRegexpString\");function Ae(e,t){t.delimiter??=\"/#?\",t.prefixes??=\"./\",t.sensitive??=!1,t.strict??=!1,t.end??=!0,t.start??=!0,t.endsWith=\"\";let r=\".*\",n=`[^${Te(t.delimiter)}]+?`,c=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,l=\"\";for(let f=0;f<e.length;++f){let s=e[f];if(s.type===3){if(s.modifier===3){l+=I(s.value);continue}l+=`{${I(s.value)}}${T(s.modifier)}`;continue}let i=s.hasCustomName(),o=!!s.suffix.length||!!s.prefix.length&&(s.prefix.length!==1||!t.prefixes.includes(s.prefix)),h=f>0?e[f-1]:null,p=f<e.length-1?e[f+1]:null;if(!o&&i&&s.type===1&&s.modifier===3&&p&&!p.prefix.length&&!p.suffix.length)if(p.type===3){let A=p.value.length>0?p.value[0]:\"\";o=c.test(A)}else o=!p.hasCustomName();if(!o&&!s.prefix.length&&h&&h.type===3){let A=h.value[h.value.length-1];o=t.prefixes.includes(A)}o&&(l+=\"{\"),l+=I(s.prefix),i&&(l+=`:${s.name}`),s.type===2?l+=`(${s.value})`:s.type===1?i||(l+=`(${n})`):s.type===0&&(!i&&(!h||h.type===3||h.modifier!==3||o||s.prefix!==\"\")?l+=\"*\":l+=`(${r})`),s.type===1&&i&&s.suffix.length&&c.test(s.suffix[0])&&(l+=\"\\\\\"),l+=I(s.suffix),o&&(l+=\"}\"),s.modifier!==3&&(l+=T(s.modifier))}return l}a(Ae,\"partsToPattern\");var Y=class{#i;#n={};#t={};#e={};#s={};#l=!1;constructor(t={},r,n){try{let c;if(typeof r==\"string\"?c=r:n=r,typeof t==\"string\"){let i=new C(t);if(i.parse(),t=i.result,c===void 0&&typeof t.protocol!=\"string\")throw new TypeError(\"A base URL must be provided for a relative constructor string.\");t.baseURL=c}else{if(!t||typeof t!=\"object\")throw new TypeError(\"parameter 1 is not of type 'string' and cannot convert to dictionary.\");if(c)throw new TypeError(\"parameter 1 is not of type 'string'.\")}typeof n>\"u\"&&(n={ignoreCase:!1});let l={ignoreCase:n.ignoreCase===!0},f={pathname:O,protocol:O,username:O,password:O,hostname:O,port:O,search:O,hash:O};this.#i=L(f,t,!0),z(this.#i.protocol)===this.#i.port&&(this.#i.port=\"\");let s;for(s of V){if(!(s in this.#i))continue;let i={},o=this.#i[s];switch(this.#t[s]=[],s){case\"protocol\":Object.assign(i,b),i.encodePart=w;break;case\"username\":Object.assign(i,b),i.encodePart=he;break;case\"password\":Object.assign(i,b),i.encodePart=ue;break;case\"hostname\":Object.assign(i,J),_(o)?i.encodePart=K:i.encodePart=j;break;case\"port\":Object.assign(i,b),i.encodePart=G;break;case\"pathname\":U(this.#n.protocol)?(Object.assign(i,Q,l),i.encodePart=de):(Object.assign(i,b,l),i.encodePart=pe);break;case\"search\":Object.assign(i,b,l),i.encodePart=ge;break;case\"hash\":Object.assign(i,b,l),i.encodePart=me;break}try{this.#s[s]=F(o,i),this.#n[s]=W(this.#s[s],this.#t[s],i),this.#e[s]=Ae(this.#s[s],i),this.#l=this.#l||this.#s[s].some(h=>h.type===2)}catch{throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`)}}}catch(c){throw new TypeError(`Failed to construct 'URLPattern': ${c.message}`)}}get[Symbol.toStringTag](){return\"URLPattern\"}test(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return!1;try{typeof t==\"object\"?n=L(n,t,!1):n=L(n,Se(t,r),!1)}catch{return!1}let c;for(c of V)if(!this.#n[c].exec(n[c]))return!1;return!0}exec(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return;try{typeof t==\"object\"?n=L(n,t,!1):n=L(n,Se(t,r),!1)}catch{return null}let c={};r?c.inputs=[t,r]:c.inputs=[t];let l;for(l of V){let f=this.#n[l].exec(n[l]);if(!f)return null;let s={};for(let[i,o]of this.#t[l].entries())if(typeof o==\"string\"||typeof o==\"number\"){let h=f[i+1];s[o]=h}c[l]={input:n[l]??\"\",groups:s}}return c}static compareComponent(t,r,n){let c=a((i,o)=>{for(let h of[\"type\",\"modifier\",\"prefix\",\"value\",\"suffix\"]){if(i[h]<o[h])return-1;if(i[h]===o[h])continue;return 1}return 0},\"comparePart\"),l=new P(3,\"\",\"\",\"\",\"\",3),f=new P(0,\"\",\"\",\"\",\"\",3),s=a((i,o)=>{let h=0;for(;h<Math.min(i.length,o.length);++h){let p=c(i[h],o[h]);if(p)return p}return i.length===o.length?0:c(i[h]??l,o[h]??l)},\"comparePartList\");return!r.#e[t]&&!n.#e[t]?0:r.#e[t]&&!n.#e[t]?s(r.#s[t],[f]):!r.#e[t]&&n.#e[t]?s([f],n.#s[t]):s(r.#s[t],n.#s[t])}get protocol(){return this.#e.protocol}get username(){return this.#e.username}get password(){return this.#e.password}get hostname(){return this.#e.hostname}get port(){return this.#e.port}get pathname(){return this.#e.pathname}get search(){return this.#e.search}get hash(){return this.#e.hash}get hasRegExpGroups(){return this.#l}};a(Y,\"URLPattern\");export{Y as URLPattern};\n","import { URLPattern } from \"./dist/urlpattern.js\";\n\nexport { URLPattern };\n\nif (!globalThis.URLPattern) {\n  globalThis.URLPattern = URLPattern;\n}\n","// ABOUTME: Safe access to localStorage/sessionStorage: cached write-probe availability check,\n// ABOUTME: guarded calls that never throw, and an in-memory fallback when storage is denied.\n\nimport { Logger } from \"./logger\";\n\nconst logger = Logger.getInstance();\n\ntype WebStorageName = \"localStorage\" | \"sessionStorage\";\n\nconst memoryStores: Record<WebStorageName, Map<string, string>> = {\n  localStorage: new Map(),\n  sessionStorage: new Map(),\n};\n\nconst supportCache: Partial<Record<WebStorageName, boolean>> = {};\n\nconst getWebStorage = (name: WebStorageName): Storage | null => {\n  try {\n    if (typeof window === \"undefined\") return null;\n    return window[name];\n  } catch {\n    return null;\n  }\n};\n\nconst isSupported = (name: WebStorageName): boolean => {\n  const cached = supportCache[name];\n  if (cached !== undefined) return cached;\n\n  let supported = false;\n  let storage: Storage | null = null;\n  let probeKey: string | null = null;\n\n  try {\n    storage = getWebStorage(name);\n    if (storage) {\n      probeKey = `__uo_probe__:${Date.now()}:${Math.random().toString(36).slice(2)}`;\n      storage.setItem(probeKey, \"1\");\n      supported = storage.getItem(probeKey) === \"1\";\n    }\n  } catch {\n    supported = false;\n  } finally {\n    if (storage && probeKey) {\n      try {\n        storage.removeItem(probeKey);\n      } catch {\n        // Cleanup failure does not change whether storage itself is usable.\n      }\n    }\n  }\n\n  supportCache[name] = supported;\n  if (!supported) {\n    logger.debug(`${name} is unavailable, falling back to in-memory storage`);\n  }\n  return supported;\n};\n\nconst createStore = (name: WebStorageName) => ({\n  isSupported: () => isSupported(name),\n  get(key: string): string | null {\n    const memoryValue = memoryStores[name].get(key);\n    if (memoryValue !== undefined) return memoryValue;\n    if (!isSupported(name)) return null;\n\n    try {\n      return getWebStorage(name)?.getItem(key) ?? null;\n    } catch (error) {\n      logger.debug(`Failed to read \"${key}\" from ${name}: ${error}`);\n      return memoryStores[name].get(key) ?? null;\n    }\n  },\n  set(key: string, value: string): void {\n    if (isSupported(name)) {\n      try {\n        const storage = getWebStorage(name);\n        if (!storage) throw new Error(`${name} is unavailable`);\n\n        storage.setItem(key, value);\n        memoryStores[name].delete(key);\n        return;\n      } catch (error) {\n        logger.debug(`Failed to write \"${key}\" to ${name}: ${error}`);\n      }\n    }\n    memoryStores[name].set(key, value);\n  },\n  remove(key: string): void {\n    memoryStores[name].delete(key);\n    if (!isSupported(name)) return;\n    try {\n      getWebStorage(name)?.removeItem(key);\n    } catch (error) {\n      logger.debug(`Failed to remove \"${key}\" from ${name}: ${error}`);\n    }\n  },\n});\n\nexport const localStore = createStore(\"localStorage\");\nexport const sessionStore = createStore(\"sessionStorage\");\n","import {\n  TActionClass,\n  TActionClassNoCodeConfig,\n  TActionClassPageUrlRule,\n} from \"@userorbit/types/action-classes\";\nimport { URLPattern } from \"urlpattern-polyfill\";\nimport { Logger } from \"./logger\";\nimport { localStore } from \"./storage\";\n\nconst logger = Logger.getInstance();\n\nexport const cn = (...classes: string[] | any) => {\n  return classes.filter(Boolean).join(\" \");\n};\n\nexport const checkIfElementIsVisible = (element: HTMLElement) => {\n  return !!element && element.offsetParent !== null;\n};\n\nexport const executeScript = ({ script }: { script: string }) => {\n  const parser = new DOMParser();\n  const doc = parser.parseFromString(script ?? \"\", \"text/html\");\n  const code = doc.querySelector(\"code\")?.innerText;\n  if (code) {\n    try {\n      const exec = new Function(code);\n      exec();\n    } catch (error) {\n      logger.error(\"Code execution error:\", error);\n    }\n  }\n};\n\nconst pathnamePatternCache = new Map<string, URLPattern | null>();\n\nconst createPathnamePattern = (pageUrlValue: string) => {\n  const cached = pathnamePatternCache.get(pageUrlValue);\n  if (cached !== undefined) return cached;\n\n  let pattern: URLPattern | null = null;\n  try {\n    pattern = new URLPattern({ pathname: pageUrlValue, hostname: \"*\" });\n  } catch (error) {\n    logger.warn(\"Skipping invalid URLPattern pathname:\", pageUrlValue, error);\n  }\n  pathnamePatternCache.set(pageUrlValue, pattern);\n  return pattern;\n};\n\nexport const checkUrlMatch = (\n  url: string,\n  pageUrlValue: string,\n  pageUrlRule: TActionClassPageUrlRule,\n): boolean => {\n  switch (pageUrlRule) {\n    case \"pattern\": {\n      const pattern = createPathnamePattern(pageUrlValue);\n      if (!pattern) return false;\n\n      try {\n        return pattern.test(url);\n      } catch (error) {\n        logger.warn(\"Skipping URLPattern match failure:\", pageUrlValue, error);\n        return false;\n      }\n    }\n    case \"exactMatch\":\n      return url === pageUrlValue;\n    case \"contains\":\n      return url.includes(pageUrlValue);\n    case \"startsWith\":\n      return url.startsWith(pageUrlValue);\n    case \"endsWith\":\n      return url.endsWith(pageUrlValue);\n    case \"notMatch\":\n      return url !== pageUrlValue;\n    case \"notContains\":\n      return !url.includes(pageUrlValue);\n    default:\n      return false;\n  }\n};\n\nconst urlFilterResultCache = new WeakMap<\n  NonNullable<TActionClassNoCodeConfig[\"urlFilters\"]>,\n  { combinator: \"and\" | \"or\"; url: string; result: boolean }\n>();\n\nexport const handleUrlFilters = (\n  urlFilters: TActionClassNoCodeConfig[\"urlFilters\"],\n  url: string = window.location.href,\n  combinator: \"and\" | \"or\" = \"or\",\n): boolean => {\n  if (!urlFilters || urlFilters.length === 0) {\n    return true;\n  }\n\n  const cached = urlFilterResultCache.get(urlFilters);\n  if (cached && cached.url === url && cached.combinator === combinator) {\n    return cached.result;\n  }\n\n  const matchesFilter = (filter: (typeof urlFilters)[number]) => {\n    logger.debug(\n      `handleUrl ${JSON.stringify({ url, filterValue: filter.value, filterRule: filter.rule })}`,\n    );\n    return checkUrlMatch(url, filter.value, filter.rule);\n  };\n  const isMatch =\n    combinator === \"and\" ? urlFilters.every(matchesFilter) : urlFilters.some(matchesFilter);\n\n  urlFilterResultCache.set(urlFilters, { combinator, url, result: isMatch });\n  return isMatch;\n};\n\nexport const evaluateNoCodeConfigClick = (\n  targetElement: HTMLElement,\n  action: TActionClass,\n  url: string = window.location.href,\n): boolean => {\n  if (action.noCodeConfig?.type !== \"click\") return false;\n\n  const innerHtml = action.noCodeConfig.elementSelector.innerHtml;\n  const cssSelector = action.noCodeConfig.elementSelector.cssSelector;\n  const urlFilters = action.noCodeConfig.urlFilters;\n\n  if (!innerHtml && !cssSelector) return false;\n\n  if (cssSelector) {\n    // Split selectors that start with a . or # including the . or #\n    const individualSelectors = cssSelector.split(/\\s*(?=[.#])/);\n    for (const selector of individualSelectors) {\n      try {\n        if (!targetElement.matches(selector)) return false;\n      } catch {\n        return false;\n      }\n    }\n  }\n\n  const isValidUrl = handleUrlFilters(\n    urlFilters,\n    url,\n    action.noCodeConfig.urlFilterCombinator ?? \"or\",\n  );\n\n  if (!isValidUrl) return false;\n\n  if (innerHtml && targetElement.innerHTML !== innerHtml) return false;\n\n  return true;\n};\n\nexport const getIsDebug = () =>\n  window.location.search.includes(\"userorbitDebug=true\") ||\n  localStore.get(\"userorbit-debug\") === \"true\";\n\nexport const generateUUID = (): string => {\n  if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n    const random = (Math.random() * 16) | 0;\n    const value = char === \"x\" ? random : (random & 0x3) | 0x8;\n    return value.toString(16);\n  });\n};\n","import { getUserorbit } from \"./analytics\";\nimport {\n  retainActivityDocument,\n  subscribeToActivitySignals,\n  type ActivitySignal,\n} from \"./activity\";\nimport { Logger } from \"./logger\";\nimport { generateUUID } from \"./utils\";\n\nconst logger = Logger.getInstance();\n\nconst SESSION_TIMEOUT_MS = 30 * 60 * 1000;\nconst STORAGE_KEY = \"userorbit_session\";\nconst WINDOW_STORAGE_KEY = \"userorbit_window_id\";\n\ninterface SessionData {\n  sessionId: string;\n  startTime: number;\n  lastActivity: number;\n}\n\nlet currentSession: SessionData | null = null;\nlet activityCheckInterval: ReturnType<typeof setInterval> | null = null;\nlet currentWindowId: string | null = null;\nlet releaseActivityDocument: (() => void) | null = null;\nlet unsubscribeActivitySignals: (() => void) | null = null;\nlet storageHandler: ((event: StorageEvent) => void) | null = null;\nlet lastActivityUpdate = 0;\n\nfunction getStoredSession(): SessionData | null {\n  try {\n    const stored = localStorage.getItem(STORAGE_KEY);\n    if (stored) {\n      return JSON.parse(stored);\n    }\n  } catch {\n    logger.debug(\"Failed to read session from storage\");\n  }\n  return null;\n}\n\nfunction storeSession(session: SessionData): void {\n  try {\n    localStorage.setItem(STORAGE_KEY, JSON.stringify(session));\n  } catch {\n    logger.debug(\"Failed to store session\");\n  }\n}\n\nfunction clearStoredSession(): void {\n  try {\n    const stored = getStoredSession();\n    if (!stored || stored.sessionId === currentSession?.sessionId) {\n      localStorage.removeItem(STORAGE_KEY);\n    }\n  } catch {\n    logger.debug(\"Failed to clear session from storage\");\n  }\n}\n\nfunction isSessionExpired(session: SessionData): boolean {\n  return Date.now() - session.lastActivity > SESSION_TIMEOUT_MS;\n}\n\nfunction getOrCreateWindowId(): string | null {\n  if (currentWindowId) return currentWindowId;\n\n  try {\n    const stored = sessionStorage.getItem(WINDOW_STORAGE_KEY);\n    if (stored) {\n      currentWindowId = stored;\n      return stored;\n    }\n\n    currentWindowId = generateUUID();\n    sessionStorage.setItem(WINDOW_STORAGE_KEY, currentWindowId);\n    return currentWindowId;\n  } catch {\n    logger.debug(\"Failed to read replay window id from storage\");\n    return null;\n  }\n}\n\nfunction adoptSharedSession(): boolean {\n  const stored = getStoredSession();\n  if (!stored || isSessionExpired(stored)) return false;\n\n  if (\n    !currentSession ||\n    currentSession.sessionId !== stored.sessionId ||\n    stored.lastActivity > currentSession.lastActivity\n  ) {\n    currentSession = stored;\n  }\n  return true;\n}\n\nfunction trackSessionStart(): void {\n  const userorbit = getUserorbit();\n  if (!userorbit) return;\n\n  const sessionId = generateUUID();\n  const now = Date.now();\n\n  currentSession = {\n    sessionId,\n    startTime: now,\n    lastActivity: now,\n  };\n\n  storeSession(currentSession);\n\n  userorbit.track(\"$session_start\", {\n    $session_id: sessionId,\n    $referrer: typeof document !== \"undefined\" ? document.referrer : \"\",\n    $current_url: typeof window !== \"undefined\" ? window.location.href : \"\",\n  });\n\n  logger.debug(`Session started: ${sessionId}`);\n}\n\nfunction trackSessionEnd(reason: \"timeout\" = \"timeout\"): void {\n  if (!currentSession) return;\n\n  const userorbit = getUserorbit();\n  if (!userorbit) return;\n\n  const duration = Math.round((Date.now() - currentSession.startTime) / 1000);\n\n  userorbit.track(\"$session_end\", {\n    $session_id: currentSession.sessionId,\n    $session_duration: duration,\n    $end_reason: reason,\n  });\n\n  logger.debug(\n    `Session ended: ${currentSession.sessionId}, duration: ${duration}s, reason: ${reason}`,\n  );\n\n  clearStoredSession();\n  currentSession = null;\n}\n\nfunction updateLastActivity(): void {\n  adoptSharedSession();\n  if (!currentSession) return;\n\n  currentSession.lastActivity = Date.now();\n  storeSession(currentSession);\n}\n\nfunction handleActivity(): void {\n  adoptSharedSession();\n\n  if (!currentSession) {\n    const stored = getStoredSession();\n    if (stored && !isSessionExpired(stored)) {\n      currentSession = stored;\n      updateLastActivity();\n    } else {\n      if (stored) {\n        trackSessionEnd(\"timeout\");\n      }\n      trackSessionStart();\n    }\n    return;\n  }\n\n  if (isSessionExpired(currentSession)) {\n    trackSessionEnd(\"timeout\");\n    trackSessionStart();\n  } else {\n    updateLastActivity();\n  }\n}\n\nfunction checkSessionTimeout(): void {\n  if (adoptSharedSession()) return;\n  if (currentSession && isSessionExpired(currentSession)) {\n    trackSessionEnd(\"timeout\");\n  }\n}\n\nexport function initializeSessionTracking(): void {\n  if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n    return;\n  }\n\n  cleanupSessionTracking();\n  getOrCreateWindowId();\n\n  const stored = getStoredSession();\n\n  if (stored && !isSessionExpired(stored)) {\n    currentSession = stored;\n    updateLastActivity();\n    logger.debug(`Resuming session: ${stored.sessionId}`);\n  } else {\n    if (stored) {\n      currentSession = stored;\n      trackSessionEnd(\"timeout\");\n    }\n    trackSessionStart();\n  }\n\n  releaseActivityDocument = retainActivityDocument(document);\n  unsubscribeActivitySignals = subscribeToActivitySignals((signal: ActivitySignal) => {\n    if (signal.document !== document) return;\n    if (signal.type === \"visibility\") {\n      if (signal.hidden) {\n        if (currentSession) storeSession(currentSession);\n      } else {\n        handleActivity();\n      }\n      return;\n    }\n\n    const now = Date.now();\n    if (now - lastActivityUpdate > 10000) {\n      lastActivityUpdate = now;\n      handleActivity();\n    }\n  });\n\n  activityCheckInterval = setInterval(checkSessionTimeout, 60000);\n\n  storageHandler = (event) => {\n    if (event.key === STORAGE_KEY) {\n      adoptSharedSession();\n    }\n  };\n  window.addEventListener(\"storage\", storageHandler);\n}\n\nexport function getSessionId(): string | null {\n  adoptSharedSession();\n  return currentSession?.sessionId || null;\n}\n\nexport function getWindowId(): string | null {\n  if (typeof window === \"undefined\") return null;\n  return getOrCreateWindowId();\n}\n\nexport function getSessionDuration(): number {\n  if (!currentSession) return 0;\n  return Math.round((Date.now() - currentSession.startTime) / 1000);\n}\n\nexport function cleanupSessionTracking(): void {\n  if (activityCheckInterval) {\n    clearInterval(activityCheckInterval);\n    activityCheckInterval = null;\n  }\n  releaseActivityDocument?.();\n  releaseActivityDocument = null;\n  unsubscribeActivitySignals?.();\n  unsubscribeActivitySignals = null;\n  if (storageHandler && typeof window !== \"undefined\") {\n    window.removeEventListener(\"storage\", storageHandler);\n  }\n  storageHandler = null;\n  lastActivityUpdate = 0;\n}\n","const volatileLists = new Map<string, unknown[]>();\n\nexport class PersistedList<T> {\n  private list: T[] = [];\n  private key: string;\n  private isLocalStorageAvailable: boolean;\n\n  constructor(key: string) {\n    this.key = key;\n    this.isLocalStorageAvailable = this.checkLocalStorageAvailability();\n\n    if (this.isLocalStorageAvailable) {\n      this.readStoredList();\n    } else {\n      this.list = [...((volatileLists.get(this.key) as T[] | undefined) ?? [])];\n    }\n  }\n\n  private checkLocalStorageAvailability(): boolean {\n    const key = `__uo_queue_probe__:${Date.now()}:${Math.random()}`;\n    try {\n      localStorage.setItem(key, \"1\");\n      localStorage.removeItem(key);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  public isReady() {\n    return true;\n  }\n\n  public get() {\n    this.readStoredList();\n    return [...this.list];\n  }\n\n  public push(...items: T[]) {\n    this.readStoredList();\n    this.list.push(...items);\n    this.persist();\n  }\n\n  public replace(items: T[]) {\n    this.list = [...items];\n    this.persist();\n  }\n\n  public remove(count: number, predicate: (item: T) => boolean) {\n    this.readStoredList();\n    const removed: T[] = [];\n    const remaining: T[] = [];\n\n    for (const item of this.list) {\n      if (removed.length < count && predicate(item)) {\n        removed.push(item);\n      } else {\n        remaining.push(item);\n      }\n    }\n\n    this.list = remaining;\n    this.persist();\n    return removed;\n  }\n\n  public discard() {\n    this.list = [];\n    volatileLists.delete(this.key);\n    try {\n      localStorage.removeItem(this.key);\n    } catch {}\n  }\n\n  public drain() {\n    this.readStoredList();\n    const list = this.list;\n    this.list = [];\n    this.persist();\n    return list;\n  }\n\n  private readStoredList() {\n    if (!this.isLocalStorageAvailable) {\n      this.list = [...((volatileLists.get(this.key) as T[] | undefined) ?? [])];\n      return;\n    }\n\n    try {\n      const storedList = localStorage.getItem(this.key);\n      if (!storedList) {\n        this.list = [];\n        return;\n      }\n\n      const parsed = JSON.parse(storedList);\n      this.list = Array.isArray(parsed) ? parsed : [];\n    } catch {\n      this.list = [];\n    }\n  }\n\n  private persist() {\n    if (!this.isLocalStorageAvailable) {\n      if (this.list.length === 0) volatileLists.delete(this.key);\n      else volatileLists.set(this.key, [...this.list]);\n      return;\n    }\n\n    try {\n      if (this.list.length === 0) {\n        localStorage.removeItem(this.key);\n      } else {\n        localStorage.setItem(this.key, JSON.stringify(this.list));\n      }\n    } catch {\n      // Keep the in-memory queue usable when storage is full or unavailable.\n    }\n  }\n}\n","import { privacyAllowed, subscribePrivacyPreferences } from \"./lib/privacyPreferences\";\nimport { Logger } from \"./lib/logger\";\nimport { recordCurrentSessionBehaviorEvent } from \"./lib/behavior-history\";\nimport { getSessionId, getWindowId } from \"./lib/sessionTracking\";\nimport { generateUUID } from \"./lib/utils\";\nimport { PersistedList } from \"./utils/persisted-list\";\n\nconst logger = Logger.getInstance();\n\nconst version = \"1.0.1\";\n\nconst MAX_EVENTS_PER_BATCH = 1000;\nconst MAX_USER_PROP_UPDATES_PER_BATCH = 1000;\nconst FLUSH_INTERVAL_MS = 60_000;\nconst REQUEST_TIMEOUT_MS = 10_000;\nconst QUEUE_ENVELOPE_VERSION = 1 as const;\n\nconst BROWSER_MATCHERS = [\n  { name: \"Edge\", pattern: /\\b(?:EdgiOS|EdgA|Edg)\\/([\\d.]+)/i },\n  { name: \"Opera\", pattern: /\\b(?:OPiOS|OPR|Opera)\\/([\\d.]+)/i },\n  { name: \"Samsung Internet\", pattern: /\\bSamsungBrowser\\/([\\d.]+)/i },\n  { name: \"Firefox\", pattern: /\\b(?:FxiOS|Firefox)\\/([\\d.]+)/i },\n  { name: \"Chrome\", pattern: /\\b(?:CriOS|Chrome|Chromium)\\/([\\d.]+)/i },\n  { name: \"Safari\", pattern: /\\bVersion\\/([\\d.]+).*\\bSafari\\//i },\n  { name: \"Internet Explorer\", pattern: /\\bMSIE\\s+([\\d.]+)/i },\n  { name: \"Internet Explorer\", pattern: /\\bTrident\\/.*\\brv:([\\d.]+)/i },\n];\n\ntype Event = {\n  name: string;\n  time: string;\n  insert_id: string;\n  properties: Record<string, any>;\n};\n\nexport type TrackedAnalyticsEvent = {\n  insertId: string;\n  eventName: string;\n  eventTime: string;\n  projectId: string;\n  distinctId: string;\n};\n\nexport type AnalyticsContext = {\n  apiKey: string;\n  hostUrl: string;\n  projectId: string;\n};\n\ntype QueuedEventEnvelope = {\n  version: typeof QUEUE_ENVELOPE_VERSION;\n  context: AnalyticsContext;\n  distinctId: string;\n  event: Event;\n};\n\ntype UserPropUpdate = string[] | Record<string, any>;\n\ntype QueuedUserPropEnvelope = {\n  version: typeof QUEUE_ENVELOPE_VERSION;\n  context: AnalyticsContext;\n  distinctId: string;\n  update: UserPropUpdate;\n};\n\ntype StoredEvent = Event | QueuedEventEnvelope;\ntype StoredUserProp = UserPropUpdate | QueuedUserPropEnvelope;\n\nconst normalizeHostUrl = (hostUrl: string) => hostUrl.replace(/\\/+$/, \"\");\n\nconst normalizeContext = (context: AnalyticsContext): AnalyticsContext => ({\n  ...context,\n  hostUrl: normalizeHostUrl(context.hostUrl),\n});\n\nconst contextKey = ({ hostUrl, projectId, apiKey }: AnalyticsContext) =>\n  JSON.stringify([normalizeHostUrl(hostUrl), projectId, apiKey]);\n\nconst isEvent = (value: unknown): value is Event => {\n  if (!value || typeof value !== \"object\") return false;\n  const event = value as Partial<Event>;\n  return (\n    typeof event.name === \"string\" &&\n    typeof event.time === \"string\" &&\n    typeof event.insert_id === \"string\" &&\n    !!event.properties &&\n    typeof event.properties === \"object\" &&\n    !Array.isArray(event.properties)\n  );\n};\n\nconst isAnalyticsContext = (value: unknown): value is AnalyticsContext => {\n  if (!value || typeof value !== \"object\") return false;\n  const context = value as Partial<AnalyticsContext>;\n  return (\n    typeof context.apiKey === \"string\" &&\n    !!context.apiKey &&\n    typeof context.hostUrl === \"string\" &&\n    !!context.hostUrl &&\n    typeof context.projectId === \"string\" &&\n    !!context.projectId\n  );\n};\n\nconst isQueuedEventEnvelope = (value: unknown): value is QueuedEventEnvelope => {\n  if (!value || typeof value !== \"object\") return false;\n  const envelope = value as Partial<QueuedEventEnvelope>;\n  return (\n    envelope.version === QUEUE_ENVELOPE_VERSION &&\n    typeof envelope.distinctId === \"string\" &&\n    !!envelope.distinctId &&\n    isAnalyticsContext(envelope.context) &&\n    isEvent(envelope.event)\n  );\n};\n\nconst isUserPropUpdate = (value: unknown): value is UserPropUpdate =>\n  Array.isArray(value)\n    ? value.every((item) => typeof item === \"string\")\n    : !!value && typeof value === \"object\";\n\nconst isQueuedUserPropEnvelope = (value: unknown): value is QueuedUserPropEnvelope => {\n  if (!value || typeof value !== \"object\") return false;\n  const envelope = value as Partial<QueuedUserPropEnvelope>;\n  return (\n    envelope.version === QUEUE_ENVELOPE_VERSION &&\n    typeof envelope.distinctId === \"string\" &&\n    !!envelope.distinctId &&\n    isAnalyticsContext(envelope.context) &&\n    isUserPropUpdate(envelope.update)\n  );\n};\n\nexport function discardAnalyticsStorage(): void {\n  for (const key of [\"userorbit_events\", \"userorbit_anon_events\", \"userorbit_user_props\"])\n    new PersistedList(key).discard();\n  try {\n    localStorage.removeItem(\"userorbit_distinct_id\");\n  } catch {}\n}\n\nexport class Userorbit {\n  private context: AnalyticsContext;\n  private skipIpLookup = false;\n  private initialDistinctId = \"\";\n  private incomingDistinctId = \"\";\n  private distinctId = \"\";\n  private hasIdentified = false;\n  private eventsQueue = new PersistedList<StoredEvent>(\"userorbit_events\");\n  private anonEventsQueue = new PersistedList<StoredEvent>(\"userorbit_anon_events\");\n  private userPropQueue = new PersistedList<StoredUserProp>(\"userorbit_user_props\");\n  private flushPromise: Promise<void> | null = null;\n  private disposePromise: Promise<void> | null = null;\n  private flushInterval: ReturnType<typeof setInterval> | null = null;\n  private disposed = false;\n  private withdrawn = false;\n  private generation = 0;\n  private controllers = new Set<AbortController>();\n  private unsubscribePrivacy: (() => void) | null = null;\n\n  private canDeliver(generation = this.generation): boolean {\n    if (!privacyAllowed(\"analytics\") && !this.withdrawn) this.withdraw();\n    return !this.withdrawn && generation === this.generation;\n  }\n\n  withdraw(): void {\n    if (this.withdrawn) return;\n    this.withdrawn = true;\n    this.disposed = true;\n    this.generation++;\n    this.unsubscribePrivacy?.();\n    this.unsubscribePrivacy = null;\n    if (this.flushInterval !== null) clearInterval(this.flushInterval);\n    this.flushInterval = null;\n    if (this.isDocumentAvailable) {\n      document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n      window.removeEventListener(\"beforeunload\", this.handleBeforeUnload);\n    }\n    for (const controller of this.controllers) controller.abort();\n    this.controllers.clear();\n    this.eventsQueue.discard();\n    this.anonEventsQueue.discard();\n    this.userPropQueue.discard();\n    this.distinctId = \"\";\n    this.incomingDistinctId = \"\";\n    this.hasIdentified = false;\n    try {\n      localStorage.removeItem(\"userorbit_distinct_id\");\n    } catch {}\n  }\n\n  private isLocalStorageAvailable(): boolean {\n    const key = `__uo_analytics_probe__:${Date.now()}:${Math.random()}`;\n    try {\n      localStorage.setItem(key, \"1\");\n      localStorage.removeItem(key);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private isSendBeaconAvailable(): boolean {\n    return typeof navigator !== \"undefined\" && \"sendBeacon\" in navigator;\n  }\n\n  private isDocumentAvailable: boolean;\n\n  constructor({\n    apiKey,\n    hostUrl,\n    projectId,\n    skipIpLookup = false,\n    noInterval = false,\n    initialDistinctId = \"\",\n  }: {\n    apiKey: string;\n    hostUrl: string;\n    projectId: string;\n    skipIpLookup?: boolean;\n    noInterval?: boolean;\n    initialDistinctId?: string;\n  }) {\n    this.skipIpLookup = skipIpLookup;\n    this.initialDistinctId = initialDistinctId;\n    this.context = normalizeContext({ apiKey, hostUrl, projectId });\n    this.isDocumentAvailable = typeof document !== \"undefined\";\n    this.unsubscribePrivacy = subscribePrivacyPreferences(() => {\n      this.canDeliver();\n    });\n    if (!this.canDeliver()) return;\n    this.loadDistinctId();\n    this.upgradeLegacyQueues();\n    if (!noInterval && this.isDocumentAvailable) {\n      this.flushInterval = setInterval(() => {\n        void this.flushOneBatch();\n      }, FLUSH_INTERVAL_MS);\n    }\n\n    // Add visibility change event listener only if document is available\n    if (this.isDocumentAvailable) {\n      document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n    }\n\n    // Add beforeunload event listener only if document is available\n    if (this.isDocumentAvailable) {\n      window.addEventListener(\"beforeunload\", this.handleBeforeUnload);\n    }\n  }\n\n  private loadDistinctId() {\n    if (!this.isLocalStorageAvailable()) {\n      this.distinctId = this.initialDistinctId || generateUUID();\n      return;\n    }\n\n    const data = localStorage.getItem(\"userorbit_distinct_id\");\n    let storedIdentity: { distinctId: string; hasIdentified: boolean } | null = null;\n    if (data) {\n      try {\n        const parsed = JSON.parse(data);\n        if (typeof parsed?.distinctId === \"string\" && parsed.distinctId) {\n          storedIdentity = {\n            distinctId: parsed.distinctId,\n            hasIdentified: parsed.hasIdentified === true,\n          };\n        }\n      } catch {\n        localStorage.removeItem(\"userorbit_distinct_id\");\n      }\n    }\n\n    if (!storedIdentity) {\n      // identify called before initial load\n      if (this.incomingDistinctId) {\n        this.distinctId = this.incomingDistinctId;\n        this.handleFirstIdentify();\n      } else {\n        // give anon id\n        this.distinctId = this.initialDistinctId || generateUUID();\n        localStorage.setItem(\n          \"userorbit_distinct_id\",\n          JSON.stringify({\n            distinctId: this.distinctId,\n            hasIdentified: false,\n          }),\n        );\n      }\n    } else {\n      const { distinctId, hasIdentified } = storedIdentity;\n      // identify called before initial load\n      if (this.incomingDistinctId) {\n        if (!this.hasIdentified) {\n          this.distinctId = this.incomingDistinctId;\n          this.handleFirstIdentify(hasIdentified ? \"\" : distinctId);\n        } else {\n          // take new distinct id, but don't need to drain anon queue\n          this.distinctId = this.incomingDistinctId;\n          this.hasIdentified = true;\n          localStorage.setItem(\n            \"userorbit_distinct_id\",\n            JSON.stringify({\n              distinctId: this.distinctId,\n              hasIdentified: true,\n            }),\n          );\n        }\n      } else {\n        // load from storage\n        this.distinctId = distinctId;\n        this.hasIdentified = hasIdentified;\n      }\n    }\n  }\n\n  private getOS(): string {\n    if (!this.isDocumentAvailable) return \"Unknown\";\n    const userAgent = window.navigator.userAgent.toLowerCase();\n    if (userAgent.includes(\"ipad\")) return \"iPadOS\";\n    if (userAgent.includes(\"iphone\") || userAgent.includes(\"ipod\")) return \"iOS\";\n    if (userAgent.includes(\"macintosh\") && window.navigator.maxTouchPoints > 1) return \"iPadOS\";\n    if (userAgent.includes(\"android\")) return \"Android\";\n    if (userAgent.includes(\"cros\")) return \"ChromeOS\";\n    if (userAgent.includes(\"win\")) return \"Windows\";\n    if (userAgent.includes(\"mac\")) return \"macOS\";\n    if (userAgent.includes(\"linux\")) return \"Linux\";\n    return \"Unknown\";\n  }\n\n  private getOSVersion(): string {\n    if (!this.isDocumentAvailable) return \"\";\n    const userAgent = window.navigator.userAgent;\n    const osVersion = userAgent.match(/(Windows NT|Mac OS X|Android|CPU OS)\\s*([^;)]*)/);\n    return osVersion ? osVersion[2] : \"\";\n  }\n\n  private getBrowser(): { name: string; version: string } {\n    if (!this.isDocumentAvailable) return { name: \"Unknown\", version: \"\" };\n    const userAgent = window.navigator.userAgent;\n    const browser = BROWSER_MATCHERS.find(({ pattern }) => pattern.test(userAgent));\n    const match = browser?.pattern.exec(userAgent);\n    return {\n      name: browser?.name || \"Unknown\",\n      version: match?.[1] || \"\",\n    };\n  }\n\n  getDefaultProps() {\n    const sessionId = getSessionId();\n    const windowId = getWindowId();\n    const sessionProps = {\n      ...(sessionId ? { $session_id: sessionId } : {}),\n      ...(windowId ? { $window_id: windowId } : {}),\n    };\n    if (!this.isDocumentAvailable) {\n      return {\n        $lib_version: version,\n        $userorbit_client: \"react\",\n        ...sessionProps,\n      };\n    }\n    const browser = this.getBrowser();\n    return {\n      $lib_version: version,\n      $userorbit_client: \"react\",\n      $manufacturer: navigator.vendor || \"\",\n      $model: navigator.platform || \"\",\n      $browser: browser.name,\n      $browser_version: browser.version,\n      $os: this.getOS(),\n      $os_version: this.getOSVersion(),\n      ...sessionProps,\n    };\n  }\n\n  track(name: string, properties: Record<string, any> = {}): TrackedAnalyticsEvent | undefined {\n    if (this.disposed || !this.canDeliver()) return;\n    logger.debug(\"Tracking analytics event\");\n    const eventTime = new Date();\n    const insertId = generateUUID();\n    const defaultProps = this.getDefaultProps();\n\n    this.eventsQueue.push({\n      version: QUEUE_ENVELOPE_VERSION,\n      context: this.context,\n      distinctId: this.distinctId,\n      event: {\n        insert_id: insertId,\n        time: eventTime.toISOString().slice(0, 19).replace(\"T\", \" \"),\n        name,\n        properties: {\n          ...defaultProps,\n          ...properties,\n          ...(defaultProps.$session_id ? { $session_id: defaultProps.$session_id } : {}),\n          ...(defaultProps.$window_id ? { $window_id: defaultProps.$window_id } : {}),\n          $event_time_iso: eventTime.toISOString(),\n          $event_time_ms: eventTime.getTime(),\n        },\n      },\n    });\n\n    if (!this.canDeliver()) {\n      this.eventsQueue.discard();\n      return;\n    }\n    const trackedEvent = {\n      insertId,\n      eventName: name,\n      eventTime: eventTime.toISOString(),\n      projectId: this.context.projectId,\n      distinctId: this.distinctId,\n    };\n    recordCurrentSessionBehaviorEvent(trackedEvent);\n    return trackedEvent;\n  }\n\n  getDistinctId() {\n    return this.canDeliver() ? this.distinctId : \"\";\n  }\n\n  identify(distinctId: string) {\n    if (this.disposed || !this.canDeliver()) return;\n    if (this.distinctId === distinctId) {\n      if (!this.hasIdentified) {\n        this.handleFirstIdentify();\n      }\n      return;\n    } else if (!this.distinctId) {\n      this.incomingDistinctId = distinctId;\n    } else if (distinctId) {\n      void this.flush();\n      const anonDistinctId = this.hasIdentified ? \"\" : this.distinctId;\n      this.distinctId = distinctId;\n      this.handleFirstIdentify(anonDistinctId);\n    }\n  }\n\n  private handleFirstIdentify(anonDistinctId = \"\") {\n    this.hasIdentified = true;\n    if (this.isLocalStorageAvailable()) {\n      localStorage.setItem(\n        \"userorbit_distinct_id\",\n        JSON.stringify({\n          distinctId: this.distinctId,\n          hasIdentified: true,\n        }),\n      );\n    }\n    const anonymousEvents = this.anonEventsQueue.drain().map((item) => {\n      if (isQueuedEventEnvelope(item) || !isEvent(item)) return item;\n      return this.normalizeEventEnvelope(item) ?? item;\n    });\n    this.eventsQueue.push(...anonymousEvents);\n    if (anonDistinctId && anonDistinctId !== this.distinctId) {\n      this.track(\"$identify\", { $anon_distinct_id: anonDistinctId });\n    }\n  }\n\n  setUserProperties(properties: Record<string, any>) {\n    if (this.disposed || !this.canDeliver()) return;\n    if (!this.hasIdentified) {\n      throw new Error(\"Must call identify before setting user properties\");\n    }\n    this.userPropQueue.push({\n      version: QUEUE_ENVELOPE_VERSION,\n      context: this.context,\n      distinctId: this.distinctId,\n      update: properties,\n    });\n    if (!this.canDeliver()) this.userPropQueue.discard();\n  }\n\n  unsetUserProperties(propertiesKeys: string[]) {\n    if (this.disposed || !this.canDeliver()) return;\n    if (!this.hasIdentified) {\n      throw new Error(\"Must call identify before setting user properties\");\n    }\n    this.userPropQueue.push({\n      version: QUEUE_ENVELOPE_VERSION,\n      context: this.context,\n      distinctId: this.distinctId,\n      update: propertiesKeys,\n    });\n    if (!this.canDeliver()) this.userPropQueue.discard();\n  }\n\n  private sendWithBeacon(\n    context: AnalyticsContext,\n    path: string,\n    data: any,\n    generation: number,\n  ): boolean {\n    if (!this.canDeliver(generation)) return false;\n    if (this.isSendBeaconAvailable()) {\n      try {\n        const payloadWithAuth = {\n          ...data,\n          \"x-api-key\": context.apiKey,\n        };\n        const blob = new Blob([JSON.stringify(payloadWithAuth)], {\n          type: \"application/json\",\n        });\n        if (!this.canDeliver(generation)) return false;\n        const success = navigator.sendBeacon(`${context.hostUrl}${path}`, blob);\n        if (success) {\n          logger.debug(\"Successfully sent data with sendBeacon\");\n          return true;\n        }\n      } catch {\n        logger.debug(\"sendBeacon failed, falling back to fetch\");\n      }\n    }\n    return false;\n  }\n\n  private async sendData(\n    context: AnalyticsContext,\n    path: string,\n    data: any,\n    useSendBeacon = false,\n    generation = this.generation,\n  ): Promise<boolean> {\n    if (!this.canDeliver(generation)) return false;\n    if (useSendBeacon && this.sendWithBeacon(context, path, data, generation)) {\n      // sendBeacon only confirms browser handoff, not server ingestion. Keep the\n      // same insert id queued so a later fetch can provide an acknowledged retry.\n      return false;\n    }\n\n    const controller = new AbortController();\n    this.controllers.add(controller);\n    const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n    try {\n      const body = JSON.stringify(data);\n      if (!this.canDeliver(generation) || controller.signal.aborted) return false;\n      const resp = await fetch(`${context.hostUrl}${path}`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"x-api-key\": context.apiKey,\n        },\n        body,\n        signal: controller.signal,\n        keepalive: useSendBeacon,\n      });\n\n      if (!this.canDeliver(generation) || controller.signal.aborted) return false;\n      if (!resp.ok) {\n        logger.error(`Userorbit analytics request failed with status ${resp.status}`);\n        return false;\n      }\n\n      try {\n        const json = await resp.json();\n        if (Array.isArray(json?.warnings) && json.warnings.length > 0) {\n          logger.warn(`Userorbit analytics request returned ${json.warnings.length} warning(s)`);\n        }\n      } catch {\n        // A successful response does not need to include a JSON body.\n      }\n\n      return this.canDeliver(generation) && !controller.signal.aborted;\n    } catch (err) {\n      const error = err instanceof Error ? `${err.name}: ${err.message}` : String(err);\n      logger.debug(`Userorbit analytics request failed for ${path}`, error);\n      return false;\n    } finally {\n      clearTimeout(timeout);\n      this.controllers.delete(controller);\n    }\n  }\n\n  private normalizeEventEnvelope(value: StoredEvent): QueuedEventEnvelope | null {\n    if (isQueuedEventEnvelope(value)) {\n      return { ...value, context: normalizeContext(value.context) };\n    }\n    if (!isEvent(value)) return null;\n    return {\n      version: QUEUE_ENVELOPE_VERSION,\n      context: this.context,\n      distinctId: this.distinctId,\n      event: value,\n    };\n  }\n\n  private normalizeUserPropEnvelope(value: StoredUserProp): QueuedUserPropEnvelope | null {\n    if (isQueuedUserPropEnvelope(value)) {\n      return { ...value, context: normalizeContext(value.context) };\n    }\n    if (\n      !Array.isArray(value) &&\n      value &&\n      typeof value === \"object\" &&\n      (\"context\" in value || \"update\" in value)\n    ) {\n      return null;\n    }\n    if (!isUserPropUpdate(value)) return null;\n    return {\n      version: QUEUE_ENVELOPE_VERSION,\n      context: this.context,\n      distinctId: this.distinctId,\n      update: value,\n    };\n  }\n\n  private upgradeLegacyQueues(): void {\n    const upgradeEvents = (queue: PersistedList<StoredEvent>) => {\n      let upgraded = false;\n      const events = queue.get().map((item) => {\n        if (isQueuedEventEnvelope(item) || !isEvent(item)) return item;\n        upgraded = true;\n        return this.normalizeEventEnvelope(item) ?? item;\n      });\n      if (upgraded) queue.replace(events);\n    };\n    upgradeEvents(this.eventsQueue);\n    upgradeEvents(this.anonEventsQueue);\n\n    const storedUserProps = this.userPropQueue.get();\n    let upgradedUserProps = false;\n    const userProps = storedUserProps.map((item) => {\n      if (isQueuedUserPropEnvelope(item)) return item;\n      const envelope = this.normalizeUserPropEnvelope(item);\n      if (!envelope) return item;\n      upgradedUserProps = true;\n      return envelope;\n    });\n    if (upgradedUserProps) this.userPropQueue.replace(userProps);\n  }\n\n  private handleVisibilityChange = () => {\n    if (document.visibilityState === \"hidden\") {\n      void this.flush();\n    }\n  };\n\n  private handleBeforeUnload = () => {\n    void this.flushOneBatch(true);\n  };\n\n  private async flushEventBatch(useSendBeacon: boolean): Promise<\"empty\" | \"sent\" | \"failed\"> {\n    const generation = this.generation;\n    if (!this.canDeliver(generation)) return \"empty\";\n    const firstEnvelope = this.eventsQueue\n      .get()\n      .map((item) => this.normalizeEventEnvelope(item))\n      .find((item): item is QueuedEventEnvelope => item !== null);\n    if (!firstEnvelope) return \"empty\";\n\n    const batchKey = contextKey(firstEnvelope.context);\n    const storedEvents = this.eventsQueue\n      .get()\n      .filter((item) => {\n        const envelope = this.normalizeEventEnvelope(item);\n        return envelope !== null && contextKey(envelope.context) === batchKey;\n      })\n      .slice(0, MAX_EVENTS_PER_BATCH);\n    const envelopes = storedEvents\n      .map((item) => this.normalizeEventEnvelope(item))\n      .filter((item): item is QueuedEventEnvelope => item !== null);\n\n    const success = await this.sendData(\n      firstEnvelope.context,\n      \"/ingest\",\n      {\n        skipIpLookup: this.skipIpLookup,\n        events: envelopes.map(({ event, distinctId }) => ({\n          ...event,\n          distinct_id: distinctId,\n        })),\n      },\n      useSendBeacon,\n      generation,\n    );\n\n    if (!success || !this.canDeliver(generation)) {\n      return \"failed\";\n    }\n    const insertIdsToRemove = new Map<string, number>();\n    for (const { event } of envelopes) {\n      insertIdsToRemove.set(event.insert_id, (insertIdsToRemove.get(event.insert_id) ?? 0) + 1);\n    }\n    this.eventsQueue.remove(storedEvents.length, (item) => {\n      const envelope = this.normalizeEventEnvelope(item);\n      if (!envelope || contextKey(envelope.context) !== batchKey) return false;\n      const remaining = insertIdsToRemove.get(envelope.event.insert_id) ?? 0;\n      if (remaining === 0) return false;\n      insertIdsToRemove.set(envelope.event.insert_id, remaining - 1);\n      return true;\n    });\n    return \"sent\";\n  }\n\n  private async flushUserPropBatch(useSendBeacon: boolean): Promise<\"empty\" | \"sent\" | \"failed\"> {\n    const generation = this.generation;\n    if (!this.canDeliver(generation)) return \"empty\";\n    const firstEnvelope = this.userPropQueue\n      .get()\n      .map((item) => this.normalizeUserPropEnvelope(item))\n      .find((item): item is QueuedUserPropEnvelope => item !== null);\n    if (!firstEnvelope) return \"empty\";\n\n    const batchContextKey = contextKey(firstEnvelope.context);\n    const matchesBatch = (item: StoredUserProp) => {\n      const envelope = this.normalizeUserPropEnvelope(item);\n      return (\n        envelope !== null &&\n        envelope.distinctId === firstEnvelope.distinctId &&\n        contextKey(envelope.context) === batchContextKey\n      );\n    };\n    const storedUpdates = this.userPropQueue\n      .get()\n      .filter(matchesBatch)\n      .slice(0, MAX_USER_PROP_UPDATES_PER_BATCH);\n    const updates = storedUpdates\n      .map((item) => this.normalizeUserPropEnvelope(item)?.update)\n      .filter((item): item is UserPropUpdate => item !== undefined);\n    const properties_to_add: Record<string, any> = {};\n    const properties_to_remove: string[] = [];\n    for (const update of updates) {\n      if (Array.isArray(update)) {\n        properties_to_remove.push(...update);\n      } else {\n        Object.assign(properties_to_add, update);\n      }\n    }\n\n    const success = await this.sendData(\n      firstEnvelope.context,\n      \"/update-people\",\n      {\n        distinct_id: firstEnvelope.distinctId,\n        properties_to_add,\n        properties_to_remove,\n      },\n      useSendBeacon,\n      generation,\n    );\n    if (!success || !this.canDeliver(generation)) {\n      return \"failed\";\n    }\n    this.userPropQueue.remove(storedUpdates.length, matchesBatch);\n    return \"sent\";\n  }\n\n  private flushOneBatch(useSendBeacon = false): Promise<void> {\n    if (!this.canDeliver()) return Promise.resolve();\n    if (this.flushPromise) return this.flushPromise;\n\n    this.flushPromise = (async () => {\n      await this.flushEventBatch(useSendBeacon);\n      await this.flushUserPropBatch(useSendBeacon);\n    })().finally(() => {\n      this.flushPromise = null;\n    });\n    return this.flushPromise;\n  }\n\n  private async flushAllBatches(): Promise<void> {\n    const maximumBatches = this.eventsQueue.get().length + this.userPropQueue.get().length;\n    for (let batch = 0; batch < maximumBatches; batch += 1) {\n      const eventResult = await this.flushEventBatch(false);\n      const userPropResult = await this.flushUserPropBatch(false);\n      if (eventResult === \"failed\" || userPropResult === \"failed\") break;\n      if (eventResult === \"empty\" && userPropResult === \"empty\") break;\n    }\n  }\n\n  flush(): Promise<void> {\n    if (!this.canDeliver()) return Promise.resolve();\n    if (this.flushPromise) return this.flushPromise;\n\n    this.flushPromise = this.flushAllBatches().finally(() => {\n      this.flushPromise = null;\n    });\n    return this.flushPromise;\n  }\n\n  updateContext(context: AnalyticsContext, skipIpLookup = this.skipIpLookup): void {\n    if (this.disposed || !this.canDeliver()) return;\n    const nextContext = normalizeContext(context);\n    if (contextKey(nextContext) !== contextKey(this.context)) {\n      void this.flush();\n    }\n    this.context = nextContext;\n    this.skipIpLookup = skipIpLookup;\n  }\n\n  dispose(): Promise<void> {\n    if (this.disposePromise) return this.disposePromise;\n    this.disposed = true;\n    if (this.flushInterval !== null) {\n      clearInterval(this.flushInterval);\n      this.flushInterval = null;\n    }\n    if (this.isDocumentAvailable) {\n      document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n      window.removeEventListener(\"beforeunload\", this.handleBeforeUnload);\n    }\n    this.disposePromise = (async () => {\n      if (this.flushPromise) await this.flushPromise;\n      await this.flush();\n    })().finally(() => {\n      this.unsubscribePrivacy?.();\n      this.unsubscribePrivacy = null;\n    });\n    return this.disposePromise;\n  }\n\n  reset() {\n    if (this.disposed || !this.canDeliver()) return;\n    this.distinctId = generateUUID();\n    this.hasIdentified = false;\n    if (this.isLocalStorageAvailable()) {\n      localStorage.setItem(\n        \"userorbit_distinct_id\",\n        JSON.stringify({\n          distinctId: this.distinctId,\n          hasIdentified: false,\n        }),\n      );\n    }\n\n    this.eventsQueue.discard();\n    this.anonEventsQueue.discard();\n    this.userPropQueue.discard();\n\n    this.incomingDistinctId = \"\";\n  }\n}\n","export const RN_ASYNC_STORAGE_KEY = \"userorbit-react-native\";\nexport const JS_LOCAL_STORAGE_KEY = \"userorbit-js\";\nexport const LEGACY_JS_WEBSITE_LOCAL_STORAGE_KEY = \"userorbit-js-website\";\nexport const LEGACY_JS_APP_LOCAL_STORAGE_KEY = \"userorbit-js-app\";\nexport const CONTAINER_ID = \"userorbit-app-container\";\n\n// export const CACHE_EXPIRY = 1000 * 60 * 10; // 10 minutes\nexport const CACHE_EXPIRY = 1000 * 60 * 5; // 5 minutes\n","import { Logger } from \"./logger\";\n\nexport type ResultError<T> = { ok: false; error: T };\n\nexport type ResultOk<T> = { ok: true; value: T };\n\nexport type Result<T, E = Error> = ResultOk<T> | ResultError<E>;\n\nexport const ok = <T, E>(value: T): Result<T, E> => ({ ok: true, value });\n\nexport const okVoid = <E>(): Result<void, E> => ({ ok: true, value: undefined });\n\nexport const err = <E = Error>(error: E): ResultError<E> => ({\n  ok: false,\n  error,\n});\n\nexport const wrap =\n  <T, R>(fn: (value: T) => R) =>\n  (result: Result<T>): Result<R> =>\n    result.ok === true ? { ok: true, value: fn(result.value) } : result;\n\nexport function match<TSuccess, TError, TReturn>(\n  result: Result<TSuccess, TError>,\n  onSuccess: (value: TSuccess) => TReturn,\n  onError: (error: TError) => TReturn,\n) {\n  if (result.ok === true) {\n    return onSuccess(result.value);\n  }\n\n  return onError(result.error);\n}\n\n/*\nUsage:\nconst test = () => {\n  throw new Error(\"test\");\n};\n\n*/\nexport const wrapThrows =\n  <T, A extends any[]>(fn: (...args: A) => T) =>\n  (...args: A): Result<T> => {\n    try {\n      return {\n        ok: true,\n        value: fn(...args),\n      };\n    } catch (error) {\n      return {\n        ok: false,\n        error: error as Error,\n      };\n    }\n  };\n\nexport type NetworkError = {\n  code: \"network_error\";\n  status: number;\n  message: string;\n  url: string;\n  responseMessage: string;\n};\n\nexport type MissingFieldError = {\n  code: \"missing_field\";\n  field: string;\n};\n\nexport type InvalidMatchTypeError = {\n  code: \"invalid_match_type\";\n  message: string;\n};\n\nexport type MissingPersonError = {\n  code: \"missing_person\";\n  message: string;\n};\n\nexport type NotInitializedError = {\n  code: \"not_initialized\";\n  message: string;\n};\n\nexport type AttributeAlreadyExistsError = {\n  code: \"attribute_already_exists\";\n  message: string;\n};\n\nexport type InvalidCodeError = {\n  code: \"invalid_code\";\n  message: string;\n};\n\nconst logger = Logger.getInstance();\n\nexport class ErrorHandler {\n  private static instance: ErrorHandler | null;\n  private handleError: (error: any) => void;\n  public customized = false;\n  public static initialized = false;\n\n  private constructor(errorHandler?: (error: any) => void) {\n    if (errorHandler) {\n      this.handleError = errorHandler;\n      this.customized = true;\n    } else {\n      this.handleError = (err) => Logger.getInstance().error(JSON.stringify(err));\n    }\n  }\n\n  static getInstance(): ErrorHandler {\n    if (!ErrorHandler.instance) {\n      ErrorHandler.instance = new ErrorHandler();\n    }\n\n    return ErrorHandler.instance;\n  }\n\n  static init(errorHandler?: (error: any) => void): void {\n    this.initialized = true;\n\n    ErrorHandler.instance = new ErrorHandler(errorHandler);\n  }\n\n  public printStatus(): void {\n    logger.debug(`Custom error handler: ${this.customized ? \"yes\" : \"no\"}`);\n  }\n\n  public handle(error: any): void {\n    console.warn(\"🧱 Userorbit - Global error: \", error);\n    this.handleError(error);\n  }\n}\n","import { JS_LOCAL_STORAGE_KEY } from \"./constants\";\nimport { Result, err, ok, wrapThrows } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { localStore } from \"./storage\";\n\nconst logger = Logger.getInstance();\n\nexport type TJsConfig = any;\nexport type TJsConfigUpdateInput = Partial<TJsConfig>;\n\nexport class Config {\n  private static instance: Config | undefined;\n  private config: TJsConfig | null = null;\n\n  private constructor() {\n    const savedConfig = this.loadFromLocalStorage();\n\n    if (savedConfig.ok) {\n      this.config = savedConfig.value;\n    }\n  }\n\n  static getInstance(): Config {\n    if (!Config.instance) {\n      Config.instance = new Config();\n    }\n    return Config.instance;\n  }\n\n  public update(newConfig: TJsConfigUpdateInput, persist = true): void {\n    if (newConfig) {\n      this.config = {\n        ...this.config,\n        ...newConfig,\n        status: {\n          value: newConfig.status?.value || \"success\",\n          expiresAt: newConfig.status?.expiresAt || null,\n        },\n      };\n\n      if (persist) this.saveToStorage();\n    }\n  }\n\n  public get(): TJsConfig | null {\n    if (!this.config) {\n      logger.log(\"config is null, maybe the init function was not called?\");\n      return null;\n    }\n    return this.config;\n  }\n\n  public loadFromLocalStorage(): Result<TJsConfig, Error> {\n    if (typeof window !== \"undefined\") {\n      const savedConfig = localStore.get(JS_LOCAL_STORAGE_KEY);\n      if (savedConfig) {\n        try {\n          // TODO: validate config\n          // This is a hack to get around the fact that we don't have a proper\n          // way to validate the config yet.\n          const parsedConfig = JSON.parse(savedConfig) as TJsConfig;\n\n          // check if the config has expired\n          if (\n            parsedConfig.environmentState?.expiresAt &&\n            new Date(parsedConfig.environmentState?.expiresAt) <= new Date()\n          ) {\n            return err(new Error(\"Config in local storage has expired\"));\n          }\n\n          return ok(parsedConfig);\n        } catch (error) {\n          return err(error instanceof Error ? error : new Error(String(error)));\n        }\n      }\n    }\n\n    return err(new Error(\"No or invalid config in local storage\"));\n  }\n\n  private saveToStorage(): void {\n    localStore.set(JS_LOCAL_STORAGE_KEY, JSON.stringify(this.config));\n  }\n\n  // reset the config\n\n  public async resetConfig(): Promise<Result<void, Error>> {\n    this.config = null;\n\n    return wrapThrows(() => {\n      localStore.remove(JS_LOCAL_STORAGE_KEY);\n    })();\n  }\n}\n\nexport const config = Config.getInstance();\n","import { z } from \"zod\";\n\nexport const NEW_NO_CODE_ACTION_TYPES = [\n  \"element\",\n  \"input\",\n  \"hover\",\n  \"delay\",\n  \"inactivity\",\n] as const;\nexport const NO_CODE_SIGNAL_SCHEMA_VERSION = 1 as const;\n\nexport const ZActionClassMatchType = z.enum([\n  \"exactMatch\",\n  \"contains\",\n  \"startsWith\",\n  \"endsWith\",\n  \"notMatch\",\n  \"notContains\",\n]);\n\nexport const ZActionClassPageUrlRule = z.enum([\n  \"exactMatch\",\n  \"pattern\",\n  \"contains\",\n  \"startsWith\",\n  \"endsWith\",\n  \"notMatch\",\n  \"notContains\",\n]);\n\nexport type TActionClassPageUrlRule = z.infer<typeof ZActionClassPageUrlRule>;\n\nexport const getPageUrlPatternError = (value: unknown) => {\n  if (typeof value !== \"string\") return \"Pattern must be a string\";\n\n  const pattern = value.trim();\n  if (!pattern) return \"Value must contain at least 1 character\";\n  if (!pattern.startsWith(\"/\")) return \"Pattern must be a pathname that starts with /\";\n  if (pattern.startsWith(\"//\") || pattern.includes(\"://\")) {\n    return \"Pattern must be a pathname, not a full URL\";\n  }\n  if (pattern.includes(\"?\") || pattern.includes(\"#\")) {\n    return \"Pattern must not include query strings or hashes\";\n  }\n  if (/[\\^$]/.test(pattern)) {\n    return \"Pattern must use URLPattern pathname syntax, not regular expression anchors\";\n  }\n\n  const URLPatternConstructor = (\n    globalThis as typeof globalThis & {\n      URLPattern?: new (init: { pathname: string; hostname: string }) => unknown;\n    }\n  ).URLPattern;\n  if (URLPatternConstructor) {\n    try {\n      new URLPatternConstructor({ pathname: pattern, hostname: \"*\" });\n    } catch {\n      return \"Pattern must be a valid URLPattern pathname\";\n    }\n  }\n\n  return null;\n};\n\nconst ZActionClassUrlFilter = z\n  .object({\n    value: z.string().trim().min(1, { message: \"Value must contain at least 1 character\" }),\n    rule: ZActionClassPageUrlRule,\n  })\n  .passthrough()\n  .superRefine((filter, ctx) => {\n    if (filter.rule !== \"pattern\") return;\n    const message = getPageUrlPatternError(filter.value);\n    if (!message) return;\n    ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"value\"], message });\n  });\n\nconst ZElementFingerprintHint = z\n  .object({\n    tagName: z.string(),\n    role: z.string().nullable(),\n    label: z.string().nullable(),\n    text: z.string().nullable(),\n    attributes: z.record(z.string()),\n  })\n  .passthrough();\n\nexport const ZActionElementSelectorFingerprint = z\n  .object({\n    tagName: z.string(),\n    role: z.string().nullable(),\n    label: z.string().nullable(),\n    text: z.string().nullable(),\n    attributes: z.record(z.string()),\n    classNames: z.array(z.string()),\n    ancestorHints: z.array(ZElementFingerprintHint),\n    siblingIndex: z.number().int().nullable(),\n    tableContext: z\n      .object({\n        columnText: z.string().nullable(),\n        cellText: z.string().nullable(),\n        rowText: z.string().nullable(),\n        cellIndex: z.number().int().nullable(),\n      })\n      .passthrough()\n      .optional(),\n  })\n  .passthrough();\n\nconst ZActionElementSelectorShape = {\n  cssSelector: z.string().trim().min(1).optional().nullable(),\n  innerHtml: z.string().trim().min(1).optional().nullable(),\n  selectorFallbacks: z.array(z.string().trim().min(1)).max(12).optional(),\n  selectorFingerprint: ZActionElementSelectorFingerprint.optional().nullable(),\n};\n\nconst createActionElementSelectorSchema = (allowTextOnly: boolean) =>\n  z\n    .object(ZActionElementSelectorShape)\n    .passthrough()\n    .superRefine((selector, ctx) => {\n      if (\n        !selector.cssSelector &&\n        !(allowTextOnly && selector.innerHtml) &&\n        !selector.selectorFallbacks?.length &&\n        !selector.selectorFingerprint\n      ) {\n        ctx.addIssue({\n          code: z.ZodIssueCode.custom,\n          message: \"A CSS selector, fallback, element text, or recorded fingerprint is required\",\n        });\n      }\n    });\n\nexport const ZActionElementSelector = createActionElementSelectorSchema(true);\nexport const ZActionElementTarget = createActionElementSelectorSchema(false);\n\nconst ZNoCodeBaseShape = {\n  urlFilters: z.array(ZActionClassUrlFilter),\n  urlFilterCombinator: z.enum([\"and\", \"or\"]).optional(),\n};\n\nconst ZActionClassNoCodeConfigClick = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"click\"),\n    elementSelector: ZActionElementSelector,\n  })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigPageView = z\n  .object({ ...ZNoCodeBaseShape, type: z.literal(\"pageView\") })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigExitIntent = z\n  .object({ ...ZNoCodeBaseShape, type: z.literal(\"exitIntent\") })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigFiftyPercentScroll = z\n  .object({ ...ZNoCodeBaseShape, type: z.literal(\"fiftyPercentScroll\") })\n  .passthrough();\n\nexport const ZActionElementRecurrence = z.enum([\"oncePerRoute\", \"everyTransition\"]);\nexport const ZActionInputRecurrence = z.enum([\"oncePerRoute\", \"everyTransition\"]);\nexport const ZActionHoverRecurrence = z.enum([\"oncePerRoute\", \"everyHover\"]);\nexport const ZActionInactivityRecurrence = z.enum([\"oncePerRoute\", \"afterEachActivity\"]);\n\nconst ZActionClassNoCodeConfigElement = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"element\"),\n    schemaVersion: z.literal(NO_CODE_SIGNAL_SCHEMA_VERSION),\n    elementSelector: ZActionElementTarget,\n    presence: z.enum([\"present\", \"visible\"]),\n    recurrence: ZActionElementRecurrence,\n  })\n  .passthrough();\n\nexport const ZActionInputCondition = z.discriminatedUnion(\"mode\", [\n  z.object({ mode: z.literal(\"changed\") }).passthrough(),\n  z.object({ mode: z.literal(\"filled\") }).passthrough(),\n  z\n    .object({\n      mode: z.literal(\"valueMatch\"),\n      operator: z.enum([\"equals\", \"contains\", \"startsWith\", \"endsWith\"]),\n      value: z.string(),\n      caseSensitive: z.boolean(),\n      trim: z.boolean(),\n    })\n    .passthrough(),\n]);\n\nconst ZActionClassNoCodeConfigInput = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"input\"),\n    schemaVersion: z.literal(NO_CODE_SIGNAL_SCHEMA_VERSION),\n    elementSelector: ZActionElementTarget,\n    input: ZActionInputCondition,\n    recurrence: ZActionInputRecurrence,\n  })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigHover = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"hover\"),\n    schemaVersion: z.literal(NO_CODE_SIGNAL_SCHEMA_VERSION),\n    elementSelector: ZActionElementTarget,\n    dwellMs: z.number().int().min(0).max(60_000),\n    recurrence: ZActionHoverRecurrence,\n  })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigDelay = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"delay\"),\n    schemaVersion: z.literal(NO_CODE_SIGNAL_SCHEMA_VERSION),\n    delayMs: z.number().int().min(0).max(86_400_000),\n    recurrence: z.literal(\"oncePerRoute\"),\n  })\n  .passthrough();\n\nconst ZActionClassNoCodeConfigInactivity = z\n  .object({\n    ...ZNoCodeBaseShape,\n    type: z.literal(\"inactivity\"),\n    schemaVersion: z.literal(NO_CODE_SIGNAL_SCHEMA_VERSION),\n    idleMs: z.number().int().min(1_000).max(86_400_000),\n    recurrence: ZActionInactivityRecurrence,\n  })\n  .passthrough();\n\ntype TActionUrlFilter = {\n  value: string;\n  rule: TActionClassPageUrlRule;\n};\ntype TSignalBase = {\n  schemaVersion: typeof NO_CODE_SIGNAL_SCHEMA_VERSION;\n  urlFilters: TActionUrlFilter[];\n  urlFilterCombinator?: \"and\" | \"or\";\n};\nexport type TActionElementNoCodeConfig = TSignalBase & {\n  type: \"element\";\n  elementSelector: TActionElementTarget;\n  presence: \"present\" | \"visible\";\n  recurrence: \"oncePerRoute\" | \"everyTransition\";\n};\nexport type TActionInputNoCodeConfig = TSignalBase & {\n  type: \"input\";\n  elementSelector: TActionElementTarget;\n  input: TActionInputCondition;\n  recurrence: \"oncePerRoute\" | \"everyTransition\";\n};\nexport type TActionHoverNoCodeConfig = TSignalBase & {\n  type: \"hover\";\n  elementSelector: TActionElementTarget;\n  dwellMs: number;\n  recurrence: \"oncePerRoute\" | \"everyHover\";\n};\nexport type TActionDelayNoCodeConfig = TSignalBase & {\n  type: \"delay\";\n  delayMs: number;\n  recurrence: \"oncePerRoute\";\n};\nexport type TActionInactivityNoCodeConfig = TSignalBase & {\n  type: \"inactivity\";\n  idleMs: number;\n  recurrence: \"oncePerRoute\" | \"afterEachActivity\";\n};\nexport type TActionSignalNoCodeConfig =\n  | TActionElementNoCodeConfig\n  | TActionInputNoCodeConfig\n  | TActionHoverNoCodeConfig\n  | TActionDelayNoCodeConfig\n  | TActionInactivityNoCodeConfig;\n\nexport const ZActionClassNoCodeConfig = z.discriminatedUnion(\"type\", [\n  ZActionClassNoCodeConfigClick,\n  ZActionClassNoCodeConfigPageView,\n  ZActionClassNoCodeConfigExitIntent,\n  ZActionClassNoCodeConfigFiftyPercentScroll,\n  ZActionClassNoCodeConfigElement,\n  ZActionClassNoCodeConfigInput,\n  ZActionClassNoCodeConfigHover,\n  ZActionClassNoCodeConfigDelay,\n  ZActionClassNoCodeConfigInactivity,\n]);\n\nexport type TActionElementSelector = {\n  cssSelector?: string | null;\n  innerHtml?: string | null;\n  selectorFallbacks?: string[];\n  selectorFingerprint?: TActionElementSelectorFingerprint | null;\n};\nexport type TActionElementSelectorFingerprint = {\n  tagName: string;\n  role: string | null;\n  label: string | null;\n  text: string | null;\n  attributes: Record<string, string>;\n  classNames: string[];\n  ancestorHints: Array<{\n    tagName: string;\n    role: string | null;\n    label: string | null;\n    text: string | null;\n    attributes: Record<string, string>;\n  }>;\n  siblingIndex: number | null;\n  tableContext?: {\n    columnText: string | null;\n    cellText: string | null;\n    rowText: string | null;\n    cellIndex: number | null;\n  };\n};\nexport type TActionElementTarget = {\n  cssSelector?: string | null;\n  innerHtml?: string | null;\n  selectorFallbacks?: string[];\n  selectorFingerprint?: TActionElementSelectorFingerprint | null;\n};\nexport type TActionInputCondition =\n  | { mode: \"changed\" }\n  | { mode: \"filled\" }\n  | {\n      mode: \"valueMatch\";\n      operator: \"equals\" | \"contains\" | \"startsWith\" | \"endsWith\";\n      value: string;\n      caseSensitive: boolean;\n      trim: boolean;\n    };\ntype TLegacyNoCodeConfig =\n  | {\n      type: \"click\";\n      urlFilters: TActionUrlFilter[];\n      urlFilterCombinator?: \"and\" | \"or\";\n      elementSelector: TActionElementSelector;\n    }\n  | { type: \"pageView\"; urlFilters: TActionUrlFilter[]; urlFilterCombinator?: \"and\" | \"or\" }\n  | { type: \"exitIntent\"; urlFilters: TActionUrlFilter[]; urlFilterCombinator?: \"and\" | \"or\" }\n  | {\n      type: \"fiftyPercentScroll\";\n      urlFilters: TActionUrlFilter[];\n      urlFilterCombinator?: \"and\" | \"or\";\n    };\nexport type TActionClassNoCodeConfig = TLegacyNoCodeConfig | TActionSignalNoCodeConfig;\n\nexport const isNewNoCodeActionConfig = (\n  config: TActionClassNoCodeConfig | null | undefined,\n): config is TActionSignalNoCodeConfig =>\n  !!config &&\n  NEW_NO_CODE_ACTION_TYPES.includes(config.type as never) &&\n  \"schemaVersion\" in config &&\n  config.schemaVersion === NO_CODE_SIGNAL_SCHEMA_VERSION;\n\nexport const ZActionClassType = z.enum([\"code\", \"noCode\", \"automatic\"]);\nexport type TActionClassType = z.infer<typeof ZActionClassType>;\n\nconst ZActionClassCommonShape = {\n  id: z.string(),\n  name: z.string().trim().min(1),\n  description: z.string().nullable(),\n  teamId: z.string().optional().nullable(),\n  accountId: z.string().optional().nullable(),\n  createdAt: z\n    .union([\n      z.date(),\n      z.string().refine((value) => !Number.isNaN(Date.parse(value)), \"Invalid date\"),\n    ])\n    .optional(),\n  updatedAt: z\n    .union([\n      z.date(),\n      z.string().refine((value) => !Number.isNaN(Date.parse(value)), \"Invalid date\"),\n    ])\n    .optional(),\n};\n\nexport const ZActionClass = z.discriminatedUnion(\"type\", [\n  z\n    .object({\n      ...ZActionClassCommonShape,\n      type: z.literal(\"code\"),\n      key: z.string().trim().min(1).nullable(),\n      noCodeConfig: z.null().optional(),\n    })\n    .passthrough(),\n  z\n    .object({\n      ...ZActionClassCommonShape,\n      type: z.literal(\"noCode\"),\n      key: z.null().optional(),\n      noCodeConfig: ZActionClassNoCodeConfig.nullable(),\n    })\n    .passthrough(),\n  z\n    .object({\n      ...ZActionClassCommonShape,\n      type: z.literal(\"automatic\"),\n      key: z.null().optional(),\n      noCodeConfig: ZActionClassNoCodeConfig.optional().nullable(),\n    })\n    .passthrough(),\n]);\n\ntype TActionClassCommon = {\n  id: string;\n  name: string;\n  description: string | null;\n  teamId?: string | null;\n  accountId?: string | null;\n  createdAt?: Date | string;\n  updatedAt?: Date | string;\n};\nexport type TActionClass = TActionClassCommon &\n  (\n    | { type: \"code\"; key: string | null; noCodeConfig?: null }\n    | { type: \"noCode\"; key?: null; noCodeConfig: TActionClassNoCodeConfig | null }\n    | { type: \"automatic\"; key?: null; noCodeConfig?: TActionClassNoCodeConfig | null }\n  );\n\nconst ZActionClassInputCommonShape = {\n  id: z.string().optional().nullable(),\n  name: z\n    .string({ message: \"Name is required\" })\n    .trim()\n    .min(1, { message: \"Name must be at least 1 character long\" }),\n  description: z.string().nullable(),\n  teamId: z.string().optional().nullable(),\n  accountId: z.string().optional().nullable(),\n};\n\nexport const ZActionClassInputCode = z\n  .object({\n    ...ZActionClassInputCommonShape,\n    type: z.literal(\"code\"),\n    key: z.string().trim().min(1).nullable(),\n    noCodeConfig: z.null().optional(),\n  })\n  .passthrough();\n\nexport type TActionClassInputCode = {\n  id?: string | null;\n  name: string;\n  description: string | null;\n  teamId?: string | null;\n  accountId?: string | null;\n  type: \"code\";\n  key: string | null;\n  noCodeConfig?: null;\n};\n\nconst ZActionClassInputNoCode = z\n  .object({\n    ...ZActionClassInputCommonShape,\n    type: z.literal(\"noCode\"),\n    key: z.null().optional(),\n    noCodeConfig: ZActionClassNoCodeConfig,\n  })\n  .passthrough();\n\nconst ZActionClassInputAutomatic = z\n  .object({\n    ...ZActionClassInputCommonShape,\n    type: z.literal(\"automatic\"),\n    key: z.null().optional(),\n    noCodeConfig: ZActionClassNoCodeConfig.optional().nullable(),\n  })\n  .passthrough();\n\nexport const ZActionClassInput = z.discriminatedUnion(\"type\", [\n  ZActionClassInputCode,\n  ZActionClassInputNoCode,\n  ZActionClassInputAutomatic,\n]);\n\nexport type TActionClassInput = {\n  id?: string | null;\n  name: string;\n  description: string | null;\n  teamId?: string | null;\n  accountId?: string | null;\n  type: \"code\" | \"noCode\" | \"automatic\";\n  key: string | null;\n  noCodeConfig?: TActionClassNoCodeConfig | null;\n};\n","export * from \"./action-classes-runtime/action-classes\";\n","import { z } from \"zod\";\nimport type { BehaviorHistorySnapshot } from \"./behavior-history\";\nimport { ZActionClass } from \"./action-classes\";\n\nexport const ZResponseHiddenFieldValue = z.record(\n  z.union([z.string(), z.number(), z.array(z.string())]),\n);\n\nexport const ZJsTrackProperties = z.object({\n  hiddenFields: ZResponseHiddenFieldValue.optional(),\n});\n\nexport type TJsTrackProperties = z.infer<typeof ZJsTrackProperties>;\n\nconst ZWidgetTab = z.enum([\"home\", \"feedback\", \"roadmap\", \"updates\", \"help\", \"support\"]);\nconst ZThemeMode = z.enum([\"light\", \"dark\", \"system\"]);\nconst ZJsDistinctIdInput = z.union([z.string(), z.number()]);\nconst ZUrlFilterRule = z.enum([\n  \"exactMatch\",\n  \"contains\",\n  \"startsWith\",\n  \"endsWith\",\n  \"notMatch\",\n  \"notContains\",\n  \"pattern\",\n]);\n\nexport const ZJsOpenWidgetOptions = z.object({\n  tab: ZWidgetTab.optional(),\n  activeTabs: z.array(ZWidgetTab).optional(),\n  locale: z.string().optional(),\n  language: z.string().optional(),\n  announcementId: z.string().optional(),\n  roadmapId: z.string().optional(),\n  topicId: z.string().optional(),\n  articleId: z.string().optional(),\n  supportThreadId: z.string().optional(),\n  askAi: z.boolean().optional(),\n  initialMessage: z.string().optional(),\n  autoSubmitInitialMessage: z.boolean().optional(),\n  showFeedbackForm: z.boolean().optional(),\n  modal: z.boolean().optional(),\n  compact: z.boolean().optional(),\n  position: z.enum([\"bottom-right\", \"bottom-left\", \"top-right\"]).optional(),\n});\n\nexport type TJsOpenWidgetOptions = z.infer<typeof ZJsOpenWidgetOptions>;\n\nexport const ZJsConfigInput = z\n  .object({\n    accountId: z.string().cuid2(),\n    reportingSource: z.enum([\"help_center\", \"in_app\", \"public_page\"]).optional(),\n    apiHost: z.string().optional(),\n    widgetKey: z.string().optional(),\n    errorHandler: z.function().args(z.any()).returns(z.void()).optional(),\n    widgetMountSelector: z.string().optional(),\n    hideNotificationDot: z.boolean().optional(),\n    floatingWidget: z.boolean().optional(),\n    openOptions: ZJsOpenWidgetOptions.optional(),\n    locale: z.string().optional(),\n    language: z.string().optional(),\n    userId: ZJsDistinctIdInput.optional(),\n    email: z.string().optional(),\n    emailHash: z.string().optional(),\n    name: z.string().optional(),\n    requireAuthentication: z.boolean().optional(),\n    attributes: z.record(z.unknown()).optional(),\n    theme: ZThemeMode.optional(),\n    privacyPreferences: z\n      .object({\n        analytics: z.boolean().optional(),\n        sessionReplay: z.boolean().optional(),\n        widget: z.boolean().optional(),\n        respectGlobalPrivacyControlForAnalytics: z.boolean().optional(),\n      })\n      .strict()\n      .optional(),\n    analytics: z\n      .object({\n        enabled: z.boolean().optional(),\n      })\n      .optional(),\n    sessionReplay: z\n      .object({\n        enabled: z.boolean().optional(),\n      })\n      .optional(),\n    inApp: z\n      .object({\n        enabled: z.boolean().optional(),\n      })\n      .optional(),\n    widget: z\n      .object({\n        enabled: z.boolean().optional(),\n        autoMount: z.boolean().optional(),\n        preview: z.boolean().optional(),\n        theme: ZThemeMode.optional(),\n        locale: z.string().optional(),\n        language: z.string().optional(),\n        visibility: z\n          .object({\n            mode: z.enum([\"always\", \"custom_url\"]).optional(),\n            urlFilters: z\n              .array(\n                z.object({\n                  rule: ZUrlFilterRule,\n                  value: z.string(),\n                }),\n              )\n              .optional(),\n          })\n          .optional(),\n        targeting: z\n          .object({\n            audience: z.enum([\"all\", \"specific\", \"segment\"]).optional(),\n            segmentId: z.string().optional(),\n            userSegment: z.unknown().optional(),\n          })\n          .optional(),\n        features: z\n          .object({\n            tours: z.boolean().optional(),\n            checklists: z.boolean().optional(),\n            surveys: z.boolean().optional(),\n            analytics: z.boolean().optional(),\n            sessionReplay: z.boolean().optional(),\n          })\n          .optional(),\n      })\n      .optional(),\n  })\n  .catchall(z.unknown());\n\nexport type TJsConfigInput = z.infer<typeof ZJsConfigInput>;\n\nexport const ZJsEnvironmentState = z.object({\n  expiresAt: z.date(),\n  data: z.object({\n    analyticsProjectId: z.string().nullable().optional(),\n    behaviorHistory: z.custom<BehaviorHistorySnapshot>().optional(),\n    tours: z.any(),\n    actionClasses: z.array(ZActionClass),\n    team: z.any(),\n    product: z.any(),\n    projects: z.array(\n      z.object({\n        id: z.string(),\n        api_key: z.string(),\n      }),\n    ),\n  }),\n});\n\nexport type TJsEnvironmentState = z.infer<typeof ZJsEnvironmentState>;\n\nconst ZTour = z.any();\nexport const ZId = z.string().cuid2();\n\nexport const ZAttributes = z.record(z.unknown());\n\nexport const ZJsPersonState = z.object({\n  expiresAt: z.date().nullable(),\n  data: z.object({\n    userId: z.string().nullable(),\n    email: z.string().optional(),\n    name: z.string().optional(),\n    segments: z.array(ZId), // segment ids the person belongs to\n    // displays: z.array(z.string()), // displayed survey ids\n    displays: z.array(\n      z.object({\n        surveyId: ZId,\n        createdAt: z.date(),\n      }),\n    ),\n    responses: z.array(ZId), // responded survey ids\n    attributes: ZAttributes,\n    lastDisplayAt: z.date().nullable(),\n    behaviorHistory: z.custom<BehaviorHistorySnapshot>().optional(),\n  }),\n});\n\nexport type TJsPersonState = z.infer<typeof ZJsPersonState>;\n\nexport const ZJsConfig = z.object({\n  accountId: z.string().cuid(),\n  apiHost: z.string(),\n  widgetKey: z.string().optional(),\n  environmentState: ZJsEnvironmentState,\n  personState: ZJsPersonState,\n  filteredSurveys: z.array(ZTour).default([]),\n  status: z.object({\n    value: z.enum([\"success\", \"error\"]),\n    expiresAt: z.date().nullable(),\n  }),\n});\n\nexport type TJsConfig = z.infer<typeof ZJsConfig>;\n\nexport const ZJsEnvironmentSyncParams = z.object({\n  accountId: z.string().cuid(),\n  apiHost: z.string(),\n  widgetKey: z.string().optional(),\n});\n\nexport type TJsEnvironmentSyncParams = z.infer<typeof ZJsEnvironmentSyncParams>;\n\nexport const ZJsPersonSyncParams = ZJsEnvironmentSyncParams.extend({\n  analyticsProjectId: z.string().optional(),\n  behaviorHistoryIdentityTransition: z.boolean().optional(),\n  behaviorHistoryExcludeInsertIds: z.array(z.string()).optional(),\n  userId: z.string().optional(),\n  email: z.string().optional(),\n  emailHash: z.string().optional(),\n  attributes: ZAttributes.optional(),\n});\n\nexport type TJsPersonSyncParams = z.infer<typeof ZJsPersonSyncParams>;\n","import { TARGETING_AST_V1_CAPABILITY } from \"@userorbit/types/targeting\";\n\nexport const SDK_CAPABILITIES = [TARGETING_AST_V1_CAPABILITY] as const;\n","import { Logger } from \"./logger\";\n\nconst USER_ID_STORAGE_KEY = \"userorbit_distinct_id\";\n\nconst logger = Logger.getInstance();\n\nexport type StoredUserIdentity = {\n  distinctId: string;\n  hasIdentified: boolean;\n};\n\nexport const getStoredUserIdentity = (): StoredUserIdentity | null => {\n  try {\n    const data = localStorage.getItem(USER_ID_STORAGE_KEY);\n    if (!data) return null;\n    const parsed = JSON.parse(data);\n    if (typeof parsed?.distinctId !== \"string\" || !parsed.distinctId) return null;\n    return { distinctId: parsed.distinctId, hasIdentified: parsed.hasIdentified === true };\n  } catch (error) {\n    logger.debug(`Failed to access localStorage: ${error}`);\n    return null;\n  }\n};\n\nexport const generateRandomUserId = (): string => {\n  return `user_${Math.random().toString(36).substring(2, 15)}${Math.random().toString(36).substring(2, 15)}`;\n};\n\nexport const getStoredUserId = (): string | null => {\n  return getStoredUserIdentity()?.distinctId || null;\n};\n\nexport const storeUserId = (userId: string, hasIdentified = false): void => {\n  try {\n    const data = JSON.stringify({\n      distinctId: userId,\n      hasIdentified,\n    });\n    localStorage.setItem(USER_ID_STORAGE_KEY, data);\n  } catch (error) {\n    logger.debug(`Failed to store userId in localStorage: ${error}`);\n  }\n};\n","import { z } from \"zod\";\n\nexport const DELIVERY_POLICY_SCHEMA_VERSION = 1 as const;\nexport const DELIVERY_CAP_GROUPS = [\"interruptive\", \"embedded\"] as const;\nexport const DELIVERY_EXPERIENCE_KINDS = [\n  \"tour\",\n  \"checklist\",\n  \"survey\",\n  \"announcement\",\n  \"article\",\n  \"demo\",\n] as const;\n\nexport type DeliveryCapGroup = (typeof DELIVERY_CAP_GROUPS)[number];\nexport type DeliveryExperienceKind = (typeof DELIVERY_EXPERIENCE_KINDS)[number];\n\nexport const ZDeliveryRollingLimit = z\n  .object({\n    max: z.number().int().min(1).max(1000),\n    windowSeconds: z.number().int().min(60).max(31_536_000),\n  })\n  .strict();\n\nexport const ZDeliveryCap = z\n  .object({\n    maxPerSession: z.number().int().min(1).max(1000).optional(),\n    rolling: ZDeliveryRollingLimit.optional(),\n    cooldownSeconds: z.number().int().min(0).max(2_592_000).optional(),\n  })\n  .strict();\n\nexport const ZWorkspaceDeliveryPolicyV1 = z\n  .object({\n    schemaVersion: z.literal(DELIVERY_POLICY_SCHEMA_VERSION),\n    caps: z\n      .object({\n        interruptive: ZDeliveryCap.optional(),\n        embedded: ZDeliveryCap.optional(),\n      })\n      .strict()\n      .default({}),\n  })\n  .strict();\n\nexport const ZExperienceDeliveryPolicyV1 = z\n  .object({\n    schemaVersion: z.literal(DELIVERY_POLICY_SCHEMA_VERSION),\n    priority: z.number().int().min(-1000).max(1000).optional(),\n    capGroup: z.enum(DELIVERY_CAP_GROUPS).optional(),\n  })\n  .strict();\n\nexport type DeliveryRollingLimit = z.infer<typeof ZDeliveryRollingLimit>;\nexport type DeliveryCap = z.infer<typeof ZDeliveryCap>;\nexport type WorkspaceDeliveryPolicyV1 = z.infer<typeof ZWorkspaceDeliveryPolicyV1>;\nexport type ExperienceDeliveryPolicyV1 = z.infer<typeof ZExperienceDeliveryPolicyV1>;\n\nexport function parseWorkspaceDeliveryPolicy(value: unknown): WorkspaceDeliveryPolicyV1 | null {\n  const parsed = ZWorkspaceDeliveryPolicyV1.safeParse(value);\n  return parsed.success ? parsed.data : null;\n}\n\nexport function parseExperienceDeliveryPolicy(value: unknown): ExperienceDeliveryPolicyV1 | null {\n  const parsed = ZExperienceDeliveryPolicyV1.safeParse(value);\n  return parsed.success ? parsed.data : null;\n}\n\nexport function getDefaultDeliveryCapGroup(kind: DeliveryExperienceKind): DeliveryCapGroup {\n  return kind === \"checklist\" ? \"embedded\" : \"interruptive\";\n}\n\nexport function resolveDeliveryCapGroup(\n  kind: DeliveryExperienceKind,\n  policy?: ExperienceDeliveryPolicyV1 | null,\n): DeliveryCapGroup {\n  return policy?.capGroup || getDefaultDeliveryCapGroup(kind);\n}\n\nexport function resolveDeliveryPriority(policy?: ExperienceDeliveryPolicyV1 | null): number {\n  return policy?.priority ?? 0;\n}\n","export * from \"./delivery-runtime/delivery\";\n","export type DeliveryKind = \"tour\" | \"checklist\" | \"survey\" | \"announcement\" | \"article\" | \"demo\";\nexport type DeliverySource = \"action\" | \"programmatic\" | \"resume\" | \"configuration\" | \"workflow\";\nexport type DeliveryLifecycleEvent = \"opened\" | \"shown\" | \"closed\" | \"disposed\";\n\nexport type DeliveryCandidate = {\n  kind: DeliveryKind;\n  id: string;\n  source: DeliverySource;\n  priority: number;\n  delayMs: number;\n  bypassCaps: boolean;\n  deliveryPolicyVersion?: number;\n};\n\nexport type DeliveryCandidateInput = Omit<\n  DeliveryCandidate,\n  \"priority\" | \"delayMs\" | \"bypassCaps\"\n> & {\n  priority?: number | null;\n  delayMs?: number | null;\n  bypassCaps?: boolean | null;\n};\n\nexport function createDeliveryCandidate(input: DeliveryCandidateInput): DeliveryCandidate {\n  const priority =\n    typeof input.priority === \"number\" && Number.isFinite(input.priority) ? input.priority : 0;\n  const delayMs =\n    typeof input.delayMs === \"number\" && Number.isFinite(input.delayMs)\n      ? Math.max(0, input.delayMs)\n      : 0;\n\n  return {\n    ...input,\n    priority,\n    delayMs,\n    bypassCaps: input.bypassCaps === true,\n  };\n}\n\nexport type DeliveryLifecycle = {\n  candidate: DeliveryCandidate;\n  emit: (event: Exclude<DeliveryLifecycleEvent, \"disposed\">) => void;\n  subscribe: (listener: (event: DeliveryLifecycleEvent) => void) => () => void;\n  dispose: () => void;\n  isDisposed: () => boolean;\n};\n\nexport function createDeliveryLifecycle(candidate: DeliveryCandidate): DeliveryLifecycle {\n  const listeners = new Set<(event: DeliveryLifecycleEvent) => void>();\n  let disposed = false;\n\n  const notify = (event: DeliveryLifecycleEvent) => {\n    [...listeners].forEach((listener) => listener(event));\n  };\n\n  return {\n    candidate,\n    emit(event) {\n      if (disposed) return;\n      notify(event);\n    },\n    subscribe(listener) {\n      if (disposed) return () => undefined;\n      listeners.add(listener);\n      let unsubscribed = false;\n      return () => {\n        if (unsubscribed) return;\n        unsubscribed = true;\n        listeners.delete(listener);\n      };\n    },\n    dispose() {\n      if (disposed) return;\n      disposed = true;\n      notify(\"disposed\");\n      listeners.clear();\n    },\n    isDisposed: () => disposed,\n  };\n}\n\nexport type DeliveryCandidateSnapshot = {\n  revision: number;\n  candidates: readonly DeliveryCandidate[];\n};\n\nexport function createDeliveryCandidateStore() {\n  let snapshot: DeliveryCandidateSnapshot = { revision: 0, candidates: [] };\n  const listeners = new Set<(snapshot: DeliveryCandidateSnapshot) => void>();\n\n  return {\n    getSnapshot: () => snapshot,\n    reconcile(candidates: readonly DeliveryCandidate[]) {\n      snapshot = {\n        revision: snapshot.revision + 1,\n        candidates: [...candidates],\n      };\n      [...listeners].forEach((listener) => listener(snapshot));\n      return snapshot;\n    },\n    subscribe(listener: (snapshot: DeliveryCandidateSnapshot) => void) {\n      listeners.add(listener);\n      let disposed = false;\n      return () => {\n        if (disposed) return;\n        disposed = true;\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n","import { Logger } from \"./logger\";\nimport { sessionStore } from \"./storage\";\n\nconst logger = Logger.getInstance();\n\nconst TOUR_ID_PARAM = \"uo-tour-id\";\nconst STEP_ID_PARAM = \"uo-step-id\";\nconst BUILDER_TOKEN_PARAM = \"uo-builder-token\";\nconst BUILDER_TOKEN_STORAGE_KEY = \"uo-tour-builder-token\";\nconst LEGACY_BUILDER_TOKEN_STORAGE_KEY = \"uh-tour-builder-token\";\nconst BUILDER_MODE_STORAGE_KEY = \"tour-builder\";\nconst BUILDER_SCRIPT_ID = \"userorbit-tour-builder-runtime\";\nconst BUILDER_OWNER_ATTR = \"data-userorbit-tour-builder-owner\";\nconst BUILDER_EXTENSION_ATTR = \"data-userorbit-tour-builder-extension\";\nconst BUILDER_OWNER_STORAGE_KEY = \"uo-tour-builder-owner\";\nconst BUILDER_SDK_OWNER = \"sdk\";\nconst BUILDER_EXTENSION_OWNER = \"extension\";\nconst PREVIEW_ACTIVE_STORAGE_KEY = \"uo-tour-preview-active\";\nconst PREVIEW_COMPLETED_STEP_STORAGE_KEY = \"uo-tour-preview-completed-step-id\";\nconst SELECTOR_MODE_STORAGE_KEY = \"uo-selector\";\n\ntype BuilderSession = {\n  tourId: string;\n  stepId?: string;\n  token: string;\n  preview?: boolean;\n  selector?: boolean;\n};\n\ntype BuilderWindow = Window &\n  typeof globalThis & {\n    __USERORBIT_BUILDER_API_HOST__?: string;\n    userorbitTourBuilder?: {\n      startTourBuilder?: (session: BuilderSession) => Promise<void> | void;\n    };\n  };\n\nlet builderScriptPromise: Promise<void> | null = null;\n\nconst getBuilderRuntimeUrl = () => {\n  const sdkScript = Array.from(document.scripts).find((script) =>\n    script.src.includes(\"userorbit.umd.cjs\"),\n  );\n\n  if (!sdkScript?.src) {\n    return `${process.env.APP_HOST}/userorbit-tour-builder.umd.cjs`;\n  }\n\n  return new URL(\"userorbit-tour-builder.umd.cjs\", sdkScript.src).toString();\n};\n\nexport const getTourBuilderSessionFromUrl = (): BuilderSession | null => {\n  const url = new URL(window.location.href);\n  const tourId = url.searchParams.get(TOUR_ID_PARAM);\n  const token = url.searchParams.get(BUILDER_TOKEN_PARAM);\n\n  if (!tourId || !token) return null;\n\n  const stepId = url.searchParams.get(STEP_ID_PARAM) || undefined;\n  return {\n    tourId,\n    stepId,\n    token,\n    preview: url.searchParams.get(\"preview\") === \"1\",\n    selector: url.searchParams.get(\"selector\") === \"1\",\n  };\n};\n\nconst getTourBuilderSessionFromStorage = (): BuilderSession | null => {\n  if (sessionStore.get(BUILDER_MODE_STORAGE_KEY) !== \"1\") return null;\n\n  const tourId = sessionStore.get(TOUR_ID_PARAM);\n  const token = getTourBuilderToken();\n\n  if (!tourId || !token) return null;\n\n  return {\n    tourId,\n    token,\n    stepId: sessionStore.get(STEP_ID_PARAM) || undefined,\n    preview: sessionStore.get(PREVIEW_ACTIVE_STORAGE_KEY) === \"1\",\n    selector: sessionStore.get(SELECTOR_MODE_STORAGE_KEY) === \"1\",\n  };\n};\n\nexport const getTourBuilderToken = (): string | null =>\n  sessionStore.get(BUILDER_TOKEN_STORAGE_KEY) || sessionStore.get(LEGACY_BUILDER_TOKEN_STORAGE_KEY);\n\nconst getTourBuilderSession = () =>\n  getTourBuilderSessionFromUrl() || getTourBuilderSessionFromStorage();\n\nexport const hasActiveTourBuilderSession = () => Boolean(getTourBuilderSession());\n\nconst clearTourBuilderSession = () => {\n  sessionStore.remove(TOUR_ID_PARAM);\n  sessionStore.remove(STEP_ID_PARAM);\n  sessionStore.remove(BUILDER_TOKEN_STORAGE_KEY);\n  sessionStore.remove(LEGACY_BUILDER_TOKEN_STORAGE_KEY);\n  sessionStore.remove(BUILDER_MODE_STORAGE_KEY);\n  sessionStore.remove(PREVIEW_ACTIVE_STORAGE_KEY);\n  sessionStore.remove(PREVIEW_COMPLETED_STEP_STORAGE_KEY);\n  sessionStore.remove(SELECTOR_MODE_STORAGE_KEY);\n  delete (window as BuilderWindow).__USERORBIT_BUILDER_API_HOST__;\n};\n\nconst isExtensionTourBuilderAvailable = () =>\n  document.documentElement.getAttribute(BUILDER_EXTENSION_ATTR) === \"1\" ||\n  document.documentElement.getAttribute(BUILDER_OWNER_ATTR) === BUILDER_EXTENSION_OWNER;\n\nconst claimSdkTourBuilder = () => {\n  const owner = document.documentElement.getAttribute(BUILDER_OWNER_ATTR);\n  if (owner && owner !== BUILDER_SDK_OWNER) return false;\n\n  document.documentElement.setAttribute(BUILDER_OWNER_ATTR, BUILDER_SDK_OWNER);\n  sessionStore.set(BUILDER_OWNER_STORAGE_KEY, BUILDER_SDK_OWNER);\n  return true;\n};\n\nconst releaseSdkTourBuilderClaim = () => {\n  if (document.documentElement.getAttribute(BUILDER_OWNER_ATTR) === BUILDER_SDK_OWNER) {\n    document.documentElement.removeAttribute(BUILDER_OWNER_ATTR);\n  }\n\n  if (sessionStore.get(BUILDER_OWNER_STORAGE_KEY) === BUILDER_SDK_OWNER) {\n    sessionStore.remove(BUILDER_OWNER_STORAGE_KEY);\n  }\n};\n\nconst persistTourBuilderSession = (session: BuilderSession, apiHost?: string) => {\n  sessionStore.set(TOUR_ID_PARAM, session.tourId);\n  sessionStore.set(BUILDER_TOKEN_STORAGE_KEY, session.token);\n  sessionStore.set(LEGACY_BUILDER_TOKEN_STORAGE_KEY, session.token);\n  sessionStore.set(BUILDER_MODE_STORAGE_KEY, \"1\");\n\n  if (session.stepId) {\n    sessionStore.set(STEP_ID_PARAM, session.stepId);\n  } else {\n    sessionStore.remove(STEP_ID_PARAM);\n  }\n\n  if (session.preview) {\n    sessionStore.set(PREVIEW_ACTIVE_STORAGE_KEY, \"1\");\n  } else {\n    sessionStore.remove(PREVIEW_ACTIVE_STORAGE_KEY);\n    sessionStore.remove(PREVIEW_COMPLETED_STEP_STORAGE_KEY);\n  }\n\n  sessionStore.set(SELECTOR_MODE_STORAGE_KEY, session.selector ? \"1\" : \"0\");\n\n  (window as BuilderWindow).__USERORBIT_BUILDER_API_HOST__ = apiHost;\n};\n\nconst removeBuilderParamsFromUrl = () => {\n  const url = new URL(window.location.href);\n  let changed = false;\n\n  [TOUR_ID_PARAM, STEP_ID_PARAM, BUILDER_TOKEN_PARAM, \"selector\", \"preview\"].forEach((param) => {\n    if (url.searchParams.has(param)) {\n      url.searchParams.delete(param);\n      changed = true;\n    }\n  });\n\n  if (changed) {\n    window.history.replaceState({}, document.title, url.toString());\n  }\n};\n\nconst loadBuilderRuntime = () => {\n  const builderWindow = window as BuilderWindow;\n  if (builderWindow.userorbitTourBuilder?.startTourBuilder) {\n    return Promise.resolve();\n  }\n\n  if (builderScriptPromise) return builderScriptPromise;\n\n  builderScriptPromise = new Promise((resolve, reject) => {\n    const existingScript = document.getElementById(BUILDER_SCRIPT_ID) as HTMLScriptElement | null;\n    if (existingScript) {\n      existingScript.addEventListener(\"load\", () => resolve(), { once: true });\n      existingScript.addEventListener(\"error\", () => reject(new Error(\"Builder runtime failed\")), {\n        once: true,\n      });\n      return;\n    }\n\n    const script = document.createElement(\"script\");\n    script.id = BUILDER_SCRIPT_ID;\n    script.async = true;\n    script.src = getBuilderRuntimeUrl();\n    script.onload = () => resolve();\n    script.onerror = () => reject(new Error(\"Builder runtime failed\"));\n    document.head.appendChild(script);\n  });\n\n  return builderScriptPromise;\n};\n\nexport const startTourBuilderFromUrl = async (apiHost?: string): Promise<boolean> => {\n  const session = getTourBuilderSession();\n  if (!session) return false;\n\n  persistTourBuilderSession(session, apiHost);\n  removeBuilderParamsFromUrl();\n\n  if (isExtensionTourBuilderAvailable()) {\n    logger.debug(\"Chrome extension tour builder detected, skipping SDK builder runtime.\");\n    return true;\n  }\n\n  if (!claimSdkTourBuilder()) {\n    logger.debug(\"Another tour builder runtime already owns this page.\");\n    return true;\n  }\n\n  try {\n    await loadBuilderRuntime();\n    const runtime = (window as BuilderWindow).userorbitTourBuilder;\n    if (!runtime?.startTourBuilder) {\n      throw new Error(\"Builder runtime did not expose startTourBuilder\");\n    }\n    await runtime.startTourBuilder(session);\n  } catch (error) {\n    clearTourBuilderSession();\n    releaseSdkTourBuilderClaim();\n    document.getElementById(BUILDER_SCRIPT_ID)?.remove();\n    builderScriptPromise = null;\n    logger.error(\"Failed to start tour builder runtime:\", error);\n    return false;\n  }\n\n  return true;\n};\n","import { Config } from \"../lib/config\";\nimport { err } from \"../lib/errors\";\nimport { Logger } from \"../lib/logger\";\nimport { getTourBuilderToken } from \"../lib/tourBuilder\";\n\nconst logger = Logger.getInstance();\n\nconst request = async (urlPath: string, body: any) => {\n  const token = getTourBuilderToken();\n\n  const config = Config.getInstance();\n  const configData = config.get();\n  if (!configData) {\n    throw new Error(\"userorbit.init() must be called before making API requests\");\n  }\n  const { apiHost } = configData;\n\n  const responseRaw: any = await fetch(`${apiHost}/api/v1/${urlPath}`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"x-tour-builder-token\": token || \"\",\n    },\n    credentials: token ? \"omit\" : \"include\",\n    keepalive:\n      urlPath === \"public/tour-subscribers.update\" || urlPath === \"public/deliveries.release\",\n    body: JSON.stringify(body),\n  });\n\n  if (!responseRaw.ok) {\n    const jsonRes = await responseRaw.json();\n\n    const error = err({\n      code: \"network_error\",\n      status: responseRaw.status,\n      message: \"Error syncing with backend\",\n      url: `${apiHost}/api/v1/${urlPath}`,\n      responseMessage: jsonRes.message,\n    });\n\n    throw error;\n  }\n\n  const response = await responseRaw.json();\n\n  logger.log(\"resp\", response);\n\n  if (response) {\n    if (response.success) return { ...response };\n    if (response.data) {\n      return {\n        ...response,\n        // data: response.data?.data,\n        // ...(response.code ? { code: response.code } : {}),\n        pagination: response.data?.pagination,\n      };\n    }\n\n    return {\n      ...response,\n      pagination: response.data?.pagination,\n    };\n  } else {\n    logger.error(\"Request Failed.\", response);\n    return null;\n  }\n};\n\nexport default request;\n","import { URLPattern } from \"urlpattern-polyfill\";\nimport { Logger } from \"../lib/logger\";\nimport { StepInterface } from \"../types\";\n\nconst logger = Logger.getInstance();\n\nexport const isTourSnoozeActive = (tourSubscriber: any) => {\n  if (!tourSubscriber || tourSubscriber.state !== \"SN\") return false;\n  if (!tourSubscriber.snoozedUntil) return false;\n  return new Date(tourSubscriber.snoozedUntil).getTime() > Date.now();\n};\n\nconst MAX_SNOOZE_TIMEOUT_MS = 2_147_483_647;\nconst snoozeExpiryTimers = new Map<\n  string,\n  {\n    expiresAt: number;\n    timeout: ReturnType<typeof setTimeout> | null;\n    onExpired: () => void | Promise<void>;\n  }\n>();\n\nexport const clearTourSnoozeExpiry = (tourId: string) => {\n  const scheduled = snoozeExpiryTimers.get(tourId);\n  if (!scheduled) return;\n  if (scheduled.timeout !== null) clearTimeout(scheduled.timeout);\n  snoozeExpiryTimers.delete(tourId);\n};\n\nexport const clearAllTourSnoozeExpiries = () => {\n  [...snoozeExpiryTimers.keys()].forEach(clearTourSnoozeExpiry);\n};\n\nexport const retainTourSnoozeExpiries = (tourIds: Iterable<string>) => {\n  const retainedIds = new Set(tourIds);\n  [...snoozeExpiryTimers.keys()]\n    .filter((tourId) => !retainedIds.has(tourId))\n    .forEach(clearTourSnoozeExpiry);\n};\n\nexport const scheduleTourSnoozeExpiry = (\n  tourId: string,\n  snoozedUntil: unknown,\n  onExpired: () => void | Promise<void>,\n) => {\n  const expiresAt =\n    snoozedUntil instanceof Date\n      ? snoozedUntil.getTime()\n      : typeof snoozedUntil === \"string\" || typeof snoozedUntil === \"number\"\n        ? new Date(snoozedUntil).getTime()\n        : Number.NaN;\n  if (!Number.isFinite(expiresAt) || expiresAt <= Date.now()) {\n    clearTourSnoozeExpiry(tourId);\n    return false;\n  }\n\n  const existing = snoozeExpiryTimers.get(tourId);\n  if (existing?.expiresAt === expiresAt) {\n    existing.onExpired = onExpired;\n    return true;\n  }\n\n  clearTourSnoozeExpiry(tourId);\n\n  const scheduled = {\n    expiresAt,\n    timeout: null as ReturnType<typeof setTimeout> | null,\n    onExpired,\n  };\n  const armTimer = () => {\n    if (snoozeExpiryTimers.get(tourId) !== scheduled) return;\n\n    const remainingMs = scheduled.expiresAt - Date.now();\n    if (remainingMs <= 0) {\n      scheduled.timeout = null;\n      void Promise.resolve()\n        .then(() => {\n          if (snoozeExpiryTimers.get(tourId) !== scheduled) return;\n          snoozeExpiryTimers.delete(tourId);\n          return scheduled.onExpired();\n        })\n        .catch((error) => logger.error(`Failed to resume snoozed tour \"${tourId}\":`, error));\n      return;\n    }\n\n    scheduled.timeout = setTimeout(armTimer, Math.min(remainingMs, MAX_SNOOZE_TIMEOUT_MS));\n  };\n\n  snoozeExpiryTimers.set(tourId, scheduled);\n  armTimer();\n  return true;\n};\n\nexport const filterByCompletedSteps = (\n  steps: StepInterface[],\n  completedTillStepId: string | null,\n) => {\n  if (completedTillStepId) {\n    let flag = false;\n    const result = steps.filter((step) => {\n      if (step.id === completedTillStepId) {\n        flag = true;\n        return false;\n      }\n      return flag;\n    });\n    return result;\n  }\n  return steps;\n};\n\nfunction matchesStepUrlPattern(urlPattern: string, location: string) {\n  try {\n    const pattern = new URLPattern({\n      pathname: urlPattern,\n      hostname: \"*\",\n    });\n    return pattern.test(location) || (!location.endsWith(\"/\") && pattern.test(`${location}/`));\n  } catch {\n    return false;\n  }\n}\n\nexport const filterByPath = (steps: StepInterface[]) => {\n  const location = window.location.href;\n\n  logger.log(\"filterByPath\", steps, location, window.location.pathname);\n\n  let flag = true;\n  const result = steps.filter((step) => {\n    const urlPattern = step.configuration?.stepUrlPattern;\n\n    if (flag && (!urlPattern || matchesStepUrlPattern(urlPattern, location))) {\n      flag = false;\n      return true;\n    }\n    return false;\n  });\n\n  return result;\n};\n\nfunction filterRoutes(routes: StepInterface[], filterByPath = false) {\n  const currentPathname = window.location.pathname;\n\n  const normalizedCurrentPath =\n    currentPathname === \"/\"\n      ? \"/\"\n      : currentPathname.endsWith(\"/\")\n        ? currentPathname.slice(0, -1)\n        : currentPathname;\n\n  let foundNonMatch = false;\n  return routes.filter((routeObj) => {\n    if (foundNonMatch) {\n      return false;\n    }\n\n    const route = routeObj.configuration?.stepUrlPattern;\n\n    if (!route) {\n      return true;\n    }\n\n    const normalizedRoute = route === \"/\" ? \"/\" : route.endsWith(\"/\") ? route.slice(0, -1) : route;\n\n    let isMatch;\n    const looksLikeSafePathname =\n      route.startsWith(\"/\") && !route.includes(\"://\") && !/[\\^$?+()[\\]{}|\\\\]/.test(route);\n\n    if (looksLikeSafePathname) {\n      isMatch = matchesStepUrlPattern(route, window.location.href);\n    } else {\n      isMatch = normalizedRoute === normalizedCurrentPath;\n    }\n\n    if (!isMatch && !filterByPath) {\n      foundNonMatch = true;\n    }\n\n    return isMatch;\n  });\n}\n\nexport const filterByCompletedStepsAndPath = (\n  steps: StepInterface[],\n  completedTillStepId: string | null,\n  onlyPathFilter = false,\n) => {\n  let allSteps = steps;\n  if (completedTillStepId) {\n    let flag = false;\n    const result = steps.filter((step) => {\n      if (step.id === completedTillStepId) {\n        flag = true;\n        return false;\n      }\n      return flag;\n    });\n    allSteps = result;\n  }\n\n  if (allSteps.length === 0) {\n    return [];\n  }\n\n  return filterRoutes(allSteps, onlyPathFilter);\n};\n","import type { Root } from \"react-dom/client\";\nimport type { DeliveryKind } from \"./delivery\";\n\nexport type RenderedRootLifecycle = {\n  onShown?: () => boolean | Promise<boolean>;\n  onClosed?: (reason: string) => void | Promise<void>;\n  onFailed?: (reason: string) => void | Promise<void>;\n};\n\ntype RenderedRootEntry = {\n  kind: DeliveryKind;\n  id: string;\n  host: HTMLElement;\n  root: Root;\n  lifecycle?: RenderedRootLifecycle;\n  shown: boolean;\n  closing: boolean;\n};\n\nconst renderedRoots = new Map<string, RenderedRootEntry>();\n\nconst getKey = (kind: DeliveryKind, id: string) => `${kind}:${id}`;\n\nexport function registerRenderedRoot(entry: Omit<RenderedRootEntry, \"shown\" | \"closing\">) {\n  const key = getKey(entry.kind, entry.id);\n  if (renderedRoots.has(key)) {\n    unmountRenderedRoot(entry.kind, entry.id, \"replaced\");\n  }\n  renderedRoots.set(key, { ...entry, shown: false, closing: false });\n}\n\nexport async function markRenderedRootShown(kind: DeliveryKind, id: string) {\n  const entry = renderedRoots.get(getKey(kind, id));\n  if (!entry || entry.closing || entry.shown || !entry.host.isConnected) return false;\n\n  try {\n    const accepted = (await entry.lifecycle?.onShown?.()) !== false;\n    if (!accepted) {\n      unmountRenderedRoot(kind, id, \"shown_rejected\");\n      return false;\n    }\n    entry.shown = true;\n    return true;\n  } catch {\n    unmountRenderedRoot(kind, id, \"shown_failed\");\n    return false;\n  }\n}\n\nexport function unmountRenderedRoot(kind: DeliveryKind, id: string, reason = \"closed\") {\n  const key = getKey(kind, id);\n  const entry = renderedRoots.get(key);\n  if (!entry || entry.closing) return false;\n\n  entry.closing = true;\n  renderedRoots.delete(key);\n  entry.root.unmount();\n  entry.host.remove();\n  const callback = entry.shown ? entry.lifecycle?.onClosed : entry.lifecycle?.onFailed;\n  void callback?.(reason);\n  return true;\n}\n\nexport function failRenderedRoot(kind: DeliveryKind, id: string, reason = \"render_failed\") {\n  return unmountRenderedRoot(kind, id, reason);\n}\n\nexport function unmountAllRenderedRoots(reason = \"disposed\") {\n  [...renderedRoots.values()].forEach(({ kind, id }) => {\n    unmountRenderedRoot(kind, id, reason);\n  });\n}\n\nexport function hasRenderedRoot(kind: DeliveryKind, id: string) {\n  return renderedRoots.has(getKey(kind, id));\n}\n\nexport function getRenderedRootCount() {\n  return renderedRoots.size;\n}\n","import {\n  parseExperienceDeliveryPolicy,\n  parseWorkspaceDeliveryPolicy,\n  resolveDeliveryCapGroup,\n  resolveDeliveryPriority,\n  type DeliveryCapGroup,\n} from \"@userorbit/types/delivery\";\nimport {\n  createDeliveryCandidate,\n  createDeliveryLifecycle,\n  type DeliveryCandidate,\n  type DeliveryKind,\n  type DeliverySource,\n} from \"./delivery\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { sessionStore } from \"./storage\";\nimport request from \"../utils/api\";\nimport { retainTourSnoozeExpiries } from \"../utils/tour\";\nimport type { RenderedRootLifecycle } from \"./rendered-roots\";\nimport { unmountAllRenderedRoots, unmountRenderedRoot } from \"./rendered-roots\";\n\nconst SESSION_ID_KEY = \"uo-delivery-session-v1\";\n\nexport type ScheduledDelivery = {\n  candidate: DeliveryCandidate;\n  experience: any;\n  workflowAssignmentId?: string;\n  serverOrder: number;\n  revalidate: () => boolean | Promise<boolean>;\n  render: (lifecycle: RenderedRootLifecycle) => boolean;\n};\n\ntype ScheduleDeliveryBase = Omit<ScheduledDelivery, \"candidate\" | \"workflowAssignmentId\"> & {\n  kind: DeliveryKind;\n  id: string;\n  delayMs?: number;\n  bypassCaps?: boolean;\n};\n\ntype ScheduleDeliveryInput =\n  | (ScheduleDeliveryBase & {\n      source: \"workflow\";\n      workflowAssignmentId: string;\n    })\n  | (ScheduleDeliveryBase & {\n      source: Exclude<DeliverySource, \"workflow\">;\n      workflowAssignmentId?: undefined;\n    });\n\ntype PendingDelivery = ScheduledDelivery & {\n  key: string;\n  lifecycle: ReturnType<typeof createDeliveryLifecycle>;\n  claimToken: string | null;\n  capGroup: DeliveryCapGroup;\n  timer: ReturnType<typeof setTimeout> | null;\n  generation: number;\n  identityKey: string;\n  requestIdentity: { token: string; account: string } | null;\n  releasePromise: Promise<void> | null;\n  shown: boolean;\n};\n\ntype ActiveDelivery = {\n  key: string;\n};\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nconst pending = new Map<string, PendingDelivery>();\nconst activeByGroup = new Map<DeliveryCapGroup, ActiveDelivery>();\nlet arbitrationScheduled = false;\nlet arbitrationTimer: ReturnType<typeof setTimeout> | null = null;\nlet generation = 0;\nconst claimingGroups = new Map<DeliveryCapGroup, PendingDelivery>();\nconst releasingGroupCounts = new Map<DeliveryCapGroup, number>();\nlet lastRouteUrl: string | null = null;\nlet lastWorkspacePolicySignature: string | null | undefined;\n\nconst sourceRank: Record<DeliverySource, number> = {\n  resume: 3,\n  workflow: 2,\n  programmatic: 0,\n  action: 0,\n  configuration: 0,\n};\n\nexport function compareScheduledDeliveries(a: ScheduledDelivery, b: ScheduledDelivery) {\n  const sourceDifference = sourceRank[b.candidate.source] - sourceRank[a.candidate.source];\n  if (sourceDifference !== 0) return sourceDifference;\n  const priorityDifference = b.candidate.priority - a.candidate.priority;\n  if (priorityDifference !== 0) return priorityDifference;\n  const orderDifference = a.serverOrder - b.serverOrder;\n  if (orderDifference !== 0) return orderDifference;\n  return a.candidate.id.localeCompare(b.candidate.id);\n}\n\nconst getWorkspacePolicy = () =>\n  parseWorkspaceDeliveryPolicy(\n    config.get()?.environmentState?.data?.product?.configuration?.deliveryPolicy,\n  );\n\nexport function hasVersionedDeliveryPolicy() {\n  return getWorkspacePolicy() !== null;\n}\n\nconst getIdentityKey = () => {\n  const current = config.get();\n  const person = current?.personState?.data;\n  return [current?.accountId, person?.id, person?.userId, person?.email, person?.code].join(\":\");\n};\n\nconst getSessionId = () => {\n  const existing = sessionStore.get(SESSION_ID_KEY);\n  if (existing) return existing;\n  const created =\n    globalThis.crypto?.randomUUID?.() ||\n    `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n  sessionStore.set(SESSION_ID_KEY, created);\n  return created;\n};\n\nconst getRequestIdentity = () => {\n  const current = config.get();\n  return {\n    token: current?.personState?.data?.code,\n    account: current?.accountId,\n  };\n};\n\nconst releaseClaim = async (\n  claimToken: string | null,\n  reason: string,\n  requestIdentity?: { token: string; account: string } | null,\n) => {\n  if (!claimToken) return;\n  const identity = requestIdentity || getRequestIdentity();\n  if (!identity.token || !identity.account) return;\n  try {\n    await request(\"public/deliveries.release\", { ...identity, claimToken, reason });\n  } catch (error) {\n    logger.debug(`Failed to release delivery claim: ${String(error)}`);\n  }\n};\n\nconst releaseItemClaim = (item: PendingDelivery, reason: string) => {\n  if (!item.claimToken) return Promise.resolve();\n  if (item.releasePromise) return item.releasePromise;\n\n  releasingGroupCounts.set(item.capGroup, (releasingGroupCounts.get(item.capGroup) ?? 0) + 1);\n  item.releasePromise = releaseClaim(item.claimToken, reason, item.requestIdentity).finally(() => {\n    const remainingReleases = (releasingGroupCounts.get(item.capGroup) ?? 1) - 1;\n    if (remainingReleases > 0) releasingGroupCounts.set(item.capGroup, remainingReleases);\n    else releasingGroupCounts.delete(item.capGroup);\n    if (pending.size > 0) scheduleArbitration();\n  });\n  return item.releasePromise;\n};\n\nconst finishClaiming = (item: PendingDelivery) => {\n  if (claimingGroups.get(item.capGroup) === item) claimingGroups.delete(item.capGroup);\n};\n\nconst removePending = (item: PendingDelivery) => {\n  if (item.timer) clearTimeout(item.timer);\n  item.timer = null;\n  pending.delete(item.key);\n  item.lifecycle.dispose();\n};\n\nconst finishActive = async (item: PendingDelivery, reason: string) => {\n  if (pending.get(item.key) !== item) {\n    item.lifecycle.dispose();\n    await releaseItemClaim(item, reason);\n    return;\n  }\n\n  const releasePromise = releaseItemClaim(item, reason);\n  const active = activeByGroup.get(item.capGroup);\n  if (active?.key === item.key) activeByGroup.delete(item.capGroup);\n  removePending(item);\n  await releasePromise;\n  if (pending.size > 0) scheduleArbitration();\n};\n\nconst markShown = async (item: PendingDelivery) => {\n  if (!item.claimToken) {\n    item.shown = true;\n    item.lifecycle.emit(\"shown\");\n    return true;\n  }\n  const identity = item.requestIdentity || getRequestIdentity();\n  if (!identity.token || !identity.account) return false;\n  try {\n    const response = await request(\"public/deliveries.shown\", {\n      ...identity,\n      claimToken: item.claimToken,\n    });\n    const shown = response?.data?.shown === true;\n    if (shown) {\n      item.shown = true;\n      item.lifecycle.emit(\"shown\");\n    }\n    return shown;\n  } catch (error) {\n    logger.debug(`Failed to mark delivery shown: ${String(error)}`);\n    return false;\n  }\n};\n\nconst renderClaimedDelivery = async (item: PendingDelivery) => {\n  item.timer = null;\n  if (\n    item.generation !== generation ||\n    item.identityKey !== getIdentityKey() ||\n    !hasVersionedDeliveryPolicy() ||\n    !(await item.revalidate())\n  ) {\n    await finishActive(item, \"revalidation_failed\");\n    return;\n  }\n\n  item.lifecycle.emit(\"opened\");\n  const rendered = item.render({\n    onShown: () => markShown(item),\n    onClosed: (reason) => finishActive(item, reason),\n    onFailed: (reason) => finishActive(item, reason),\n  });\n  if (!rendered) await finishActive(item, \"render_failed\");\n};\n\nconst claimDelivery = async (item: PendingDelivery) => {\n  const identity = getRequestIdentity();\n  if (!identity.token || !identity.account) {\n    finishClaiming(item);\n    removePending(item);\n    scheduleArbitration();\n    return;\n  }\n  item.requestIdentity = identity as { token: string; account: string };\n\n  try {\n    const response = await request(\"public/deliveries.claim\", {\n      ...identity,\n      experienceId: item.candidate.id,\n      experienceKind: item.candidate.kind,\n      clientSessionId: getSessionId(),\n      delayMs: item.candidate.delayMs,\n      source: item.candidate.source,\n      ...(item.workflowAssignmentId ? { workflowAssignmentId: item.workflowAssignmentId } : {}),\n      bypassCaps: item.candidate.bypassCaps,\n    });\n    const claim = response?.data;\n    finishClaiming(item);\n    if (item.generation !== generation || pending.get(item.key) !== item) {\n      if (typeof claim?.claimToken === \"string\") {\n        item.claimToken = claim.claimToken;\n        await releaseItemClaim(item, \"cancelled_before_claim_completed\");\n      }\n      scheduleArbitration();\n      return;\n    }\n    if (!claim?.granted || typeof claim.claimToken !== \"string\") {\n      logger.debug(\n        `Delivery \"${item.candidate.id}\" was not claimed: ${claim?.reason || \"unknown\"}`,\n      );\n      removePending(item);\n      scheduleArbitration();\n      return;\n    }\n    item.claimToken = claim.claimToken;\n    activeByGroup.set(item.capGroup, { key: item.key });\n    item.timer = setTimeout(() => {\n      void renderClaimedDelivery(item);\n    }, item.candidate.delayMs);\n  } catch (error) {\n    finishClaiming(item);\n    if (pending.get(item.key) !== item) {\n      scheduleArbitration();\n      return;\n    }\n    logger.debug(`Failed to claim delivery: ${String(error)}`);\n    removePending(item);\n    scheduleArbitration();\n  }\n};\n\nconst arbitrate = () => {\n  arbitrationTimer = null;\n  arbitrationScheduled = false;\n  const candidates = [...pending.values()].filter(\n    (item) =>\n      !item.claimToken &&\n      !item.timer &&\n      !activeByGroup.has(item.capGroup) &&\n      !releasingGroupCounts.has(item.capGroup),\n  );\n  const groups = new Set(candidates.map((item) => item.capGroup));\n  groups.forEach((group) => {\n    const winner = candidates\n      .filter((item) => item.capGroup === group)\n      .sort(compareScheduledDeliveries)[0];\n    if (winner && !claimingGroups.has(group) && !releasingGroupCounts.has(group)) {\n      claimingGroups.set(group, winner);\n      void claimDelivery(winner);\n    }\n  });\n};\n\nfunction scheduleArbitration() {\n  if (arbitrationScheduled) return;\n  arbitrationScheduled = true;\n  arbitrationTimer = setTimeout(arbitrate, 0);\n}\n\nexport function scheduleDelivery(input: ScheduleDeliveryInput) {\n  const policy = parseExperienceDeliveryPolicy(\n    input.experience?.configuration?.targeting?.deliveryPolicy,\n  );\n  const candidate = createDeliveryCandidate({\n    kind: input.kind,\n    id: input.id,\n    source: input.source,\n    priority: resolveDeliveryPriority(policy),\n    delayMs: input.delayMs,\n    bypassCaps: input.bypassCaps,\n    deliveryPolicyVersion: 1,\n  });\n  const capGroup = resolveDeliveryCapGroup(candidate.kind, policy);\n  const key =\n    input.source === \"workflow\"\n      ? `${candidate.kind}:${candidate.id}:workflow:${input.workflowAssignmentId}`\n      : `${candidate.kind}:${candidate.id}`;\n  if (candidate.source === \"resume\") {\n    [...pending.values()]\n      .filter(\n        (item) =>\n          item.capGroup === capGroup &&\n          !item.shown &&\n          (item.candidate.source === \"action\" || item.candidate.source === \"configuration\"),\n      )\n      .forEach((item) => {\n        if (unmountRenderedRoot(item.candidate.kind, item.candidate.id, \"superseded_by_resume\")) {\n          return;\n        }\n        void finishActive(item, \"superseded_by_resume\");\n      });\n\n    const activeResumeTarget = pending.get(key);\n    if (activeResumeTarget?.shown) {\n      const didUnmount = unmountRenderedRoot(\n        activeResumeTarget.candidate.kind,\n        activeResumeTarget.candidate.id,\n        \"superseded_by_resume\",\n      );\n      if (!didUnmount && pending.get(key) === activeResumeTarget) {\n        void finishActive(activeResumeTarget, \"superseded_by_resume\");\n      }\n    }\n  }\n  const existing = pending.get(key);\n  if (existing) {\n    const incoming = { ...input, candidate } as ScheduledDelivery;\n    if (existing.shown || compareScheduledDeliveries(incoming, existing) >= 0) {\n      return existing.lifecycle;\n    }\n    void finishActive(existing, \"superseded\");\n  }\n\n  const lifecycle = createDeliveryLifecycle(candidate);\n  pending.set(key, {\n    candidate,\n    experience: input.experience,\n    ...(input.source === \"workflow\" ? { workflowAssignmentId: input.workflowAssignmentId } : {}),\n    serverOrder: input.serverOrder,\n    revalidate: input.revalidate,\n    render: input.render,\n    key,\n    lifecycle,\n    claimToken: null,\n    capGroup,\n    timer: null,\n    generation,\n    identityKey: getIdentityKey(),\n    requestIdentity: null,\n    releasePromise: null,\n    shown: false,\n  });\n  scheduleArbitration();\n  return lifecycle;\n}\n\nexport function cancelPendingDeliveries(reason: string) {\n  generation += 1;\n  const cancellable = [...pending.values()].filter((item) => !item.shown);\n  cancellable.forEach((item) => {\n    if (activeByGroup.get(item.capGroup)?.key === item.key) {\n      activeByGroup.delete(item.capGroup);\n    }\n    removePending(item);\n    void releaseItemClaim(item, reason);\n  });\n  scheduleArbitration();\n}\n\nexport function handleDeliveryRouteChange(url: string) {\n  if (lastRouteUrl === null) {\n    lastRouteUrl = url;\n    return;\n  }\n  if (lastRouteUrl === url) return;\n  lastRouteUrl = url;\n  cancelPendingDeliveries(\"route_changed\");\n}\n\nexport function reconcileDeliveryPolicyState(state: any) {\n  const policy = parseWorkspaceDeliveryPolicy(state?.data?.product?.configuration?.deliveryPolicy);\n  if (!policy) {\n    disposeDeliveryScheduler(\"configuration_removed\");\n    lastWorkspacePolicySignature = null;\n    return;\n  }\n  const signature = JSON.stringify(policy);\n  if (lastWorkspacePolicySignature !== undefined && lastWorkspacePolicySignature !== signature) {\n    cancelPendingDeliveries(\"configuration_changed\");\n  }\n  lastWorkspacePolicySignature = signature;\n}\n\nexport function reconcileDeliveryPersonState(state: any) {\n  const collections: Record<DeliveryKind, any[]> = {\n    tour: state?.data?.tours || [],\n    checklist: state?.data?.checklists || [],\n    survey: state?.data?.surveys || [],\n    announcement: [],\n    article: [],\n    demo: [],\n  };\n  retainTourSnoozeExpiries(collections.tour.map((tour: any) => tour.id));\n  [...pending.values()].forEach((item) => {\n    const assignment = item.workflowAssignmentId\n      ? (state?.data?.workflowAssignments || []).find(\n          (candidate: any) => candidate.id === item.workflowAssignmentId,\n        )\n      : null;\n    const current = item.workflowAssignmentId\n      ? assignment?.resource\n      : collections[item.candidate.kind].find(\n          (experience: any) => experience.id === item.candidate.id,\n        );\n    let reason: string | null = null;\n    if (!current) reason = \"configuration_removed\";\n    else if (\n      JSON.stringify(current.configuration?.targeting?.deliveryPolicy) !==\n      JSON.stringify(item.experience.configuration?.targeting?.deliveryPolicy)\n    ) {\n      reason = \"configuration_changed\";\n    }\n    if (!reason) return;\n    if (item.shown && unmountRenderedRoot(item.candidate.kind, item.candidate.id, reason)) {\n      return;\n    }\n    if (activeByGroup.get(item.capGroup)?.key === item.key) {\n      activeByGroup.delete(item.capGroup);\n    }\n    removePending(item);\n    void releaseItemClaim(item, reason);\n  });\n  scheduleArbitration();\n}\n\nexport function disposeDeliveryScheduler(reason: string) {\n  generation += 1;\n  if (arbitrationTimer) clearTimeout(arbitrationTimer);\n  arbitrationTimer = null;\n  arbitrationScheduled = false;\n  unmountAllRenderedRoots(reason);\n  [...pending.values()].forEach((item) => {\n    if (item.timer) clearTimeout(item.timer);\n    pending.delete(item.key);\n    item.lifecycle.dispose();\n    void releaseItemClaim(item, reason);\n  });\n  activeByGroup.clear();\n  lastRouteUrl = null;\n  lastWorkspacePolicySignature = undefined;\n}\n\nexport function getDeliverySchedulerSnapshot() {\n  return {\n    pending: [...pending.values()].map((item) => item.candidate),\n    activeGroups: [...activeByGroup.keys()],\n  };\n}\n","// shared functions for environment and person state(s)\nimport \"@userorbit/types/js\";\nimport { Config } from \"./config\";\nimport {\n  getCurrentSessionInsertIds,\n  setCurrentBehaviorHistorySnapshot,\n  transitionCurrentSessionBehaviorScope,\n} from \"./behavior-history\";\nimport { SDK_CAPABILITIES } from \"./capabilities\";\nimport { CACHE_EXPIRY } from \"./constants\";\nimport { err } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { getStoredUserId } from \"./userId\";\nimport { getIsDebug } from \"./utils\";\nimport { reconcileDeliveryPolicyState } from \"./delivery-scheduler\";\n\ntype TJsEnvironmentState = any;\ntype TJsEnvironmentSyncParams = {\n  apiHost: string;\n  accountId: string;\n  widgetKey?: string | null;\n  userId?: string | null;\n  email?: string | null;\n  attributes?: Record<string, unknown> | null;\n  analyticsProjectId?: string | null;\n  deferBehaviorHistory?: boolean;\n};\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nlet environmentStateSyncIntervalId: number | null = null;\nconst environmentStateListeners = new Set<(state: TJsEnvironmentState) => void>();\n\nexport function subscribeToEnvironmentState(\n  listener: (state: TJsEnvironmentState) => void,\n): () => void {\n  environmentStateListeners.add(listener);\n  let disposed = false;\n  return () => {\n    if (disposed) return;\n    disposed = true;\n    environmentStateListeners.delete(listener);\n  };\n}\n\nexport function reconcileEnvironmentState(state: TJsEnvironmentState): void {\n  reconcileDeliveryPolicyState(state);\n  [...environmentStateListeners].forEach((listener) => listener(state));\n}\n\n/**\n * Fetch the environment state from the backend\n * @param apiHost - The API host\n * @param accountId - The environment ID\n * @param noCache - Whether to skip the cache\n * @returns The environment state\n * @throws NetworkError\n */\nexport const fetchEnvironmentState = async (\n  {\n    apiHost,\n    accountId,\n    widgetKey,\n    userId,\n    email,\n    attributes,\n    analyticsProjectId,\n    deferBehaviorHistory,\n  }: TJsEnvironmentSyncParams,\n  noCache = false,\n): Promise<TJsEnvironmentState> => {\n  const fetchOptions: RequestInit = {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    cache: \"no-cache\",\n    body: JSON.stringify({\n      capabilities: SDK_CAPABILITIES,\n      ...(widgetKey ? { widgetKey } : {}),\n      ...(userId ? { userId } : {}),\n      ...(email ? { email } : {}),\n      ...(attributes && Object.keys(attributes).length > 0 ? { attributes } : {}),\n      ...(deferBehaviorHistory ? { deferBehaviorHistory: true } : {}),\n      ...(analyticsProjectId && userId\n        ? {\n            behaviorHistoryExcludeInsertIds: getCurrentSessionInsertIds(analyticsProjectId, userId),\n          }\n        : {}),\n    }),\n  };\n\n  if (noCache || getIsDebug()) {\n    logger.debug(\"No cache option set for sync\");\n  }\n\n  const url = `${apiHost}/api/v1/client/${accountId}/environment`;\n\n  const response = await fetch(url, fetchOptions);\n\n  if (!response.ok) {\n    const jsonRes = await response.json();\n\n    const error = err({\n      code: \"network_error\",\n      status: response.status,\n      message: \"Error syncing with backend\",\n      url: url,\n      responseMessage: jsonRes.message,\n    });\n\n    throw error;\n  }\n\n  const data = await response.json();\n  const { data: state } = data;\n  const nextProjectId = state.analyticsProjectId;\n  const distinctId = userId || email;\n  transitionCurrentSessionBehaviorScope(nextProjectId || null, distinctId || null);\n  if (\n    nextProjectId &&\n    distinctId &&\n    (!deferBehaviorHistory || state.behaviorHistory !== undefined)\n  ) {\n    setCurrentBehaviorHistorySnapshot(nextProjectId, distinctId, state.behaviorHistory || null);\n  }\n\n  return {\n    data: { ...(state as TJsEnvironmentState[\"data\"]) },\n    expiresAt: new Date(new Date().getTime() + CACHE_EXPIRY), // 10 minutes\n  };\n};\n\nexport const getEnvironmentState = (): TJsEnvironmentState | undefined => {\n  const currentConfig = config.get();\n  if (!currentConfig) return undefined;\n  return currentConfig.environmentState;\n};\n\nexport const addEnvironmentStateExpiryCheckListener = (): void => {\n  const updateInterval = 1000 * 10; // every 10 seconds\n  if (typeof window !== \"undefined\" && environmentStateSyncIntervalId === null) {\n    environmentStateSyncIntervalId = window.setInterval(async () => {\n      const currentConfig = config.get();\n      if (!currentConfig) return;\n\n      const expiresAt = currentConfig.environmentState?.expiresAt;\n\n      try {\n        // check if the environmentState has not expired yet\n        if (expiresAt && new Date(expiresAt) >= new Date()) {\n          return;\n        }\n\n        logger.debug(\"Environment State has expired. Starting sync.\");\n\n        const environmentState = await fetchEnvironmentState(\n          {\n            apiHost: currentConfig.apiHost,\n            accountId: currentConfig.accountId,\n            widgetKey: currentConfig.widgetKey,\n            userId: currentConfig.personState?.data?.userId || getStoredUserId(),\n            email: currentConfig.personState?.data?.email || currentConfig.email,\n            attributes: currentConfig.personState?.data?.attributes,\n            analyticsProjectId: currentConfig.environmentState?.data.analyticsProjectId,\n            deferBehaviorHistory: Boolean(\n              currentConfig.personState?.data?.userId || getStoredUserId(),\n            ),\n          },\n          true,\n        );\n\n        config.update({\n          ...currentConfig,\n          environmentState,\n        });\n        reconcileEnvironmentState(environmentState);\n      } catch (e) {\n        logger.error(`Error during expiry check: ${e}`);\n        logger.debug(\"Extending config and try again later.\");\n        const existingConfig = config.get();\n        if (existingConfig) {\n          config.update(existingConfig);\n        }\n      }\n    }, updateInterval);\n  }\n};\n\nexport const clearEnvironmentStateExpiryCheckListener = (): void => {\n  if (environmentStateSyncIntervalId !== null) {\n    clearInterval(environmentStateSyncIntervalId);\n    environmentStateSyncIntervalId = null;\n  }\n};\n","import type { TJsConfigInput } from \"@userorbit/types/js\";\n\nconst CONFIG_KEYS = new Set([\n  \"accountId\",\n  \"apiHost\",\n  \"errorHandler\",\n  \"widgetMountSelector\",\n  \"hideNotificationDot\",\n  \"dotPosition\",\n  \"compact\",\n  \"floatingWidget\",\n  \"openOptions\",\n  \"locale\",\n  \"language\",\n  \"userId\",\n  \"email\",\n  \"emailHash\",\n  \"name\",\n  \"requireAuthentication\",\n  \"attributes\",\n  \"theme\",\n  \"analytics\",\n  \"sessionReplay\",\n  \"privacyPreferences\",\n  \"widget\",\n  \"inApp\",\n  \"cdnHost\",\n  \"__userorbitAnonymous\",\n  \"__userorbitBehaviorIdentityTransition\",\n]);\n\nconst isUserPropertyValue = (value: unknown) =>\n  value !== undefined && typeof value !== \"function\" && typeof value !== \"symbol\";\n\nexport const normalizeDistinctId = (value: unknown) => {\n  if (typeof value === \"string\" && value) return value;\n  if (typeof value === \"number\") return String(value);\n\n  return undefined;\n};\n\nexport const getTopLevelUserProperties = (configInput: TJsConfigInput) => {\n  const properties: Record<string, unknown> = {};\n\n  for (const [key, value] of Object.entries(configInput)) {\n    if (CONFIG_KEYS.has(key) || !isUserPropertyValue(value)) continue;\n    properties[key] = value;\n  }\n\n  return properties;\n};\n\nexport const getConfigAttributes = (configInput: TJsConfigInput) => ({\n  ...getTopLevelUserProperties(configInput),\n  ...configInput.attributes,\n});\n\nexport const getConfigDistinctId = (configInput: TJsConfigInput) => {\n  const topLevelId = (configInput as Record<string, unknown>).id;\n  const userId = normalizeDistinctId(configInput.userId);\n\n  if (userId) return userId;\n  if (typeof topLevelId === \"string\" && topLevelId.trim()) return topLevelId;\n  if (typeof topLevelId === \"number\") return normalizeDistinctId(topLevelId);\n  if (configInput.email) return configInput.email;\n\n  return undefined;\n};\n","// ABOUTME: Reads runtime feature flags from the server-resolved widget configuration.\n// ABOUTME: Flags default to enabled so existing widget installations remain unchanged.\n\nexport type WidgetRuntimeFeature =\n  | \"tours\"\n  | \"checklists\"\n  | \"surveys\"\n  | \"analytics\"\n  | \"sessionReplay\";\n\nexport function isWidgetRuntimeFeatureEnabled(\n  product: any,\n  feature: WidgetRuntimeFeature,\n): boolean {\n  return product?.configuration?.widget?.features?.[feature] !== false;\n}\n","import { privacyAllowed } from \"./privacyPreferences\";\nimport { TJsConfigInput, TJsEnvironmentState, TJsPersonState } from \"@userorbit/types/js\";\nimport { type AnalyticsContext, Userorbit, discardAnalyticsStorage } from \"../analytics\";\nimport { config } from \"./config\";\nimport { transitionCurrentSessionBehaviorScope } from \"./behavior-history\";\nimport { subscribeToEnvironmentState } from \"./environmentState\";\nimport { Logger } from \"./logger\";\nimport { getConfigAttributes, getConfigDistinctId } from \"./userProperties\";\nimport { isWidgetRuntimeFeatureEnabled } from \"./widget-features\";\n\nconst logger = Logger.getInstance();\n\nlet userorbitInstance: Userorbit | null = null;\nlet disposeEnvironmentSubscription: (() => void) | null = null;\n\nconst getAnalyticsContext = (\n  configInput: TJsConfigInput,\n  environmentState: TJsEnvironmentState,\n): AnalyticsContext | null => {\n  const projects = environmentState.data.projects;\n  if (!Array.isArray(projects) || projects.length === 0) return null;\n\n  const configuredProjectId = environmentState.data.analyticsProjectId;\n  const project =\n    typeof configuredProjectId === \"string\"\n      ? projects.find((candidate) => candidate.id === configuredProjectId)\n      : projects[0];\n  if (!project?.id || !project.api_key || !configInput.apiHost) return null;\n\n  return {\n    apiKey: project.api_key,\n    hostUrl: configInput.apiHost,\n    projectId: project.id,\n  };\n};\n\nconst stringValue = (value: unknown) => {\n  if (typeof value === \"string\" && value.trim()) return value;\n  if (typeof value === \"number\") return String(value);\n  return undefined;\n};\n\nconst ensureEnvironmentSubscription = () => {\n  if (disposeEnvironmentSubscription) return;\n\n  disposeEnvironmentSubscription = subscribeToEnvironmentState((environmentState) => {\n    const currentConfig = config.get();\n    if (\n      !privacyAllowed(\"analytics\") ||\n      !currentConfig ||\n      currentConfig.analytics?.enabled === false ||\n      !isWidgetRuntimeFeatureEnabled(environmentState.data.product, \"analytics\")\n    ) {\n      withdrawAnalytics();\n      return;\n    }\n\n    const context = getAnalyticsContext(currentConfig as TJsConfigInput, environmentState);\n    if (!context) {\n      void disposeAnalytics();\n      return;\n    }\n    userorbitInstance?.updateContext(context);\n    if (userorbitInstance) {\n      transitionCurrentSessionBehaviorScope(context.projectId, userorbitInstance.getDistinctId());\n    }\n  });\n};\n\nexport const getUserorbit = (\n  configInput?: TJsConfigInput,\n  environmentState?: TJsEnvironmentState,\n  skipIpLookup?: boolean,\n): Userorbit | null => {\n  if (\n    !privacyAllowed(\"analytics\") ||\n    (configInput ?? config.get())?.analytics?.enabled === false ||\n    (configInput &&\n      (configInput.analytics?.enabled === false ||\n        (environmentState &&\n          !isWidgetRuntimeFeatureEnabled(environmentState.data.product, \"analytics\"))))\n  ) {\n    withdrawAnalytics();\n    return null;\n  }\n  if (userorbitInstance && userorbitInstance.getDistinctId() === \"\") {\n    userorbitInstance = null;\n    disposeEnvironmentSubscription?.();\n    disposeEnvironmentSubscription = null;\n  }\n  if (configInput && environmentState) {\n    const context = getAnalyticsContext(configInput, environmentState);\n    if (!context) {\n      void disposeAnalytics();\n      return null;\n    }\n\n    if (userorbitInstance) {\n      userorbitInstance.updateContext(context, skipIpLookup);\n      transitionCurrentSessionBehaviorScope(context.projectId, userorbitInstance.getDistinctId());\n      return userorbitInstance;\n    }\n\n    userorbitInstance = new Userorbit({\n      ...context,\n      skipIpLookup: skipIpLookup,\n      initialDistinctId:\n        (configInput as Record<string, unknown>).__userorbitAnonymous === true\n          ? getConfigDistinctId(configInput)\n          : undefined,\n    });\n    transitionCurrentSessionBehaviorScope(context.projectId, userorbitInstance.getDistinctId());\n    ensureEnvironmentSubscription();\n  }\n  return userorbitInstance;\n};\n\nexport const flushAnalytics = async (): Promise<void> => {\n  await userorbitInstance?.flush();\n};\n\nexport const withdrawAnalytics = (): void => {\n  const instance = userorbitInstance;\n  userorbitInstance = null;\n  disposeEnvironmentSubscription?.();\n  disposeEnvironmentSubscription = null;\n  transitionCurrentSessionBehaviorScope(null, null);\n  if (instance) instance.withdraw();\n  else discardAnalyticsStorage();\n};\n\nexport const disposeAnalytics = async (): Promise<void> => {\n  const instance = userorbitInstance;\n  userorbitInstance = null;\n  disposeEnvironmentSubscription?.();\n  disposeEnvironmentSubscription = null;\n  transitionCurrentSessionBehaviorScope(null, null);\n  await instance?.dispose();\n};\n\nexport const initializeAnalytics = (\n  configInput: TJsConfigInput,\n  environmentState: TJsEnvironmentState,\n  personState: TJsPersonState,\n  skipIpLookup?: boolean,\n) => {\n  if (\n    !privacyAllowed(\"analytics\") ||\n    configInput.analytics?.enabled === false ||\n    !isWidgetRuntimeFeatureEnabled(environmentState.data.product, \"analytics\")\n  ) {\n    withdrawAnalytics();\n    return;\n  }\n  if (!(environmentState.data.projects?.length > 0)) {\n    void disposeAnalytics();\n    return;\n  }\n\n  logger.debug(\"Initializing analytics\");\n\n  const userorbit = getUserorbit(configInput, environmentState, skipIpLookup);\n\n  if (!userorbit) return;\n  if ((configInput as Record<string, unknown>).__userorbitAnonymous === true) return;\n\n  const attributes = {\n    ...getConfigAttributes(configInput),\n    ...personState.data.attributes,\n  };\n  const email = stringValue(attributes.email) || personState.data.email || configInput.email;\n  const name = stringValue(attributes.name) || personState.data.name || configInput.name;\n  const distinctId = personState.data.userId || getConfigDistinctId(configInput) || email;\n\n  if (!distinctId) {\n    return;\n  }\n\n  userorbit.identify(distinctId);\n  transitionCurrentSessionBehaviorScope(\n    environmentState.data.analyticsProjectId || environmentState.data.projects[0]?.id || null,\n    userorbit.getDistinctId(),\n  );\n\n  userorbit.setUserProperties({\n    id: personState.data.userId || distinctId,\n    email,\n    name,\n    ...attributes,\n  });\n};\n","// ABOUTME: Tour launch link format shared by the admin, SDK, and email CTAs: a landing page URL\n// ABOUTME: carrying `uo_tour=<tourId>`, which the SDK reads to start that tour for eligible visitors.\n\nexport const TOUR_LAUNCH_PARAM = \"uo_tour\";\n\nfunction isLocalDevelopmentHost(hostname: string): boolean {\n  return hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname.endsWith(\".localhost\");\n}\n\nexport function withHttpsScheme(url = \"\"): string {\n  const trimmed = url.trim();\n  if (!trimmed || /^https?:\\/\\//i.test(trimmed)) return trimmed;\n  return `https://${trimmed}`;\n}\n\nexport function buildTourLaunchUrl(landingUrl: string, tourId: string): string | null {\n  let url: URL;\n  try {\n    url = new URL(landingUrl.trim());\n  } catch {\n    return null;\n  }\n\n  const isAllowedProtocol =\n    url.protocol === \"https:\" || (url.protocol === \"http:\" && isLocalDevelopmentHost(url.hostname));\n  if (!isAllowedProtocol || !tourId) return null;\n\n  url.searchParams.set(TOUR_LAUNCH_PARAM, tourId);\n  return url.toString();\n}\n","import type { TargetingEligibilityV1 } from \"./targeting\";\n\nexport type CSSProperties = {\n  [key: string]: string | number | undefined;\n};\n\nexport type DialogPosition =\n  | \"default\"\n  | \"center\"\n  | \"bottom\"\n  | \"bottom-right\"\n  | \"bottom-left\"\n  | \"bottom-center\"\n  | \"top\"\n  | \"top-right\"\n  | \"top-left\"\n  | \"top-center\";\n\nexport interface DialogPropsInterface {\n  children: JSX.Element;\n  onDismiss?: () => void;\n  className?: string;\n  title: string;\n  isPanelRight?: boolean;\n  customStyles?: CSSProperties;\n  position?: DialogPosition;\n  customOverlayStyles?: {\n    hex?: string;\n    opacity?: number;\n  };\n  width?: string;\n  type?: string;\n  autoFocus?: boolean;\n}\n\nexport type TourPreviewProps = {\n  subscriberCode: string;\n  account: any;\n  tour: any;\n  subscriber: any;\n  restart?: boolean;\n  onTourComplete?: () => void;\n};\n\nexport type StepAnimationDirection = \"auto\" | \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type OverlayClickBehavior = \"close\" | \"closeTour\" | \"closeStep\" | \"nextStep\" | \"none\";\nexport type CloseButtonBehavior = \"closeTour\" | \"closeStep\";\n\nexport type ButtonWidgetTarget = {\n  type: \"announcement\" | \"survey\" | \"article\" | \"tour\";\n  id: string;\n};\n\nexport type StepCondition =\n  | ({\n      type: \"inputFilled\";\n      selector: string;\n    } & StepSelectorTarget)\n  | ({\n      type: \"elementPresent\";\n      selector: string;\n    } & StepSelectorTarget)\n  | ({\n      type: \"elementClicked\";\n      selector: string;\n    } & StepSelectorTarget)\n  | ({\n      type: \"elementFocusOut\";\n      selector: string;\n    } & StepSelectorTarget)\n  | { type: \"urlMatches\"; pattern: string }\n  | { type: \"customEvent\"; eventName: string };\n\nexport type StepWaitFor = {\n  conditions: StepCondition[];\n  logic: \"and\" | \"or\";\n};\n\nexport type StepRecovery = {\n  allowResumeHere?: boolean;\n  conditions?: StepCondition[];\n  logic?: \"and\" | \"or\";\n};\n\nexport type StepRecording = {\n  kind?: \"click\" | \"input\" | \"dialog\";\n  role?: string;\n  label?: string;\n  selector?: string | null;\n  selectorFallbacks?: string[];\n  targetFingerprint?: ElementSelectorFingerprint;\n  path?: string;\n  pageTitle?: string;\n  pageContext?: {\n    headings?: string[];\n    visibleSummary?: string;\n  };\n};\n\nexport type VoiceOverMode = \"synthetic\" | \"manual\";\n\nexport type StepVoiceOverConfiguration = {\n  enabled?: boolean;\n  audioUrl?: string;\n  source?: VoiceOverMode;\n  language?: string;\n  voiceId?: string;\n  provider?: string;\n  providerVoice?: string;\n  speed?: number;\n  tone?: string;\n  pitch?: number;\n  autoPlay?: boolean;\n  text?: string;\n  contentHash?: string;\n  durationMs?: number;\n  generatedAt?: string;\n  status?: \"missing\" | \"generating\" | \"ready\" | \"failed\";\n  error?: string;\n};\n\nexport type StepSelectorTarget = {\n  selectorFallbacks?: string[];\n  selectorFingerprint?: ElementSelectorFingerprint;\n};\n\nexport type ElementTargetTextMatch = \"exact\" | \"contains\" | \"startsWith\";\nexport type ElementTargetMatchStrategy = \"best\" | \"first\" | \"last\" | \"nth\";\nexport type ElementTargetStrictness = \"legacy\" | \"loose\" | \"balanced\" | \"strict\";\nexport type ElementTargetPrecedence = \"automatic\" | \"manual\";\n\nexport type StepElementTargeting = {\n  text?: {\n    value?: string;\n    match?: ElementTargetTextMatch;\n    caseSensitive?: boolean;\n    dynamic?: boolean;\n  };\n  multipleMatches?: {\n    strategy?: ElementTargetMatchStrategy;\n    index?: number;\n  };\n  strictness?: ElementTargetStrictness;\n  precedence?: ElementTargetPrecedence;\n};\n\nexport type ElementSelectorFingerprint = {\n  tagName: string;\n  role: string | null;\n  label: string | null;\n  text: string | null;\n  attributes: Record<string, string>;\n  classNames: string[];\n  ancestorHints: {\n    tagName: string;\n    role: string | null;\n    label: string | null;\n    text: string | null;\n    attributes: Record<string, string>;\n  }[];\n  tableContext?: {\n    columnText: string | null;\n    cellText: string | null;\n    rowText: string | null;\n    cellIndex: number | null;\n  };\n  siblingIndex: number | null;\n};\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemeModeSetting = ThemeMode | \"system\";\n\nexport type StepConfigurationType = {\n  progressButtonText: string;\n  translations?: Record<string, StepContentTranslation>;\n  voiceOver?: StepVoiceOverConfiguration;\n  showCustomHintText?: boolean;\n  customHintText?: string;\n  autoProceed?: number | boolean;\n  showProceedBar?: boolean;\n  progressType?: \"text\" | \"bar\";\n  progressText?: string;\n  showUserorbitBranding?: boolean;\n  fullSizeCTA?: boolean;\n  type: \"banner\" | \"pointer\" | \"dialog\" | \"announcement\";\n  contentJustify: \"left\" | \"right\" | \"justify-between\" | \"justify-around\" | \"justify-evenly\" | null;\n  isFloating?: boolean;\n  bannerImage?: string;\n  primaryButton?: {\n    show?: boolean;\n    text: string;\n    action: \"next\" | \"complete\" | \"custom\" | \"nothing\";\n    linkUrl?: string;\n    linkTarget?: string;\n    openWidget?: ButtonWidgetTarget;\n    javascript?: string;\n    trackEvent?: string;\n    icon?: string;\n  };\n  popover?: Partial<PopoverConfig>;\n  previousButton?: {\n    show?: boolean;\n    text: string;\n    action: \"next\" | \"prev\" | \"complete\" | \"custom\" | \"nothing\";\n    linkUrl?: string;\n    linkTarget?: string;\n    icon?: string;\n  };\n  closeButton?: {\n    show?: boolean;\n    text: string;\n    action: \"next\" | \"prev\" | \"complete\" | \"custom\" | \"nothing\";\n    behavior?: CloseButtonBehavior;\n    linkUrl?: string;\n    linkTarget?: string;\n    openWidget?: ButtonWidgetTarget;\n    trackEvent?: string;\n    icon?: string;\n  };\n  beacon?: {\n    show?: boolean;\n    showWithStep?: boolean;\n    icon?: string;\n    type?: \"badge\" | \"hotspot\" | \"label\";\n    label?: string;\n    position?:\n      | \"left\"\n      | \"right\"\n      | \"top\"\n      | \"bottom\"\n      | \"center\"\n      | \"top-left\"\n      | \"top-right\"\n      | \"bottom-left\"\n      | \"bottom-right\"\n      | \"center-left\"\n      | \"center-right\"\n      | \"center-top\"\n      | \"center-bottom\";\n    hotspotInset?: number;\n    badgeInset?: number;\n    labelInset?: number;\n  };\n  label?: string;\n  showStepCount: boolean;\n  customPivotSelector: string;\n  overlayClickBehavior?: OverlayClickBehavior;\n  pivotSelectorFallbacks?: string[];\n  pivotSelectorFingerprint?: ElementSelectorFingerprint;\n  elementTargeting?: StepElementTargeting;\n  isClosable: boolean;\n  stepUrlPattern?: string;\n  fixedWidth?: string;\n  nextButtonHref?: string;\n  nextButtonIsExternal?: boolean;\n  delay?: number;\n  position?: DialogPosition;\n  animationDirection?: StepAnimationDirection;\n  waitFor?: StepWaitFor;\n  recovery?: StepRecovery;\n  recording?: StepRecording;\n  theme?: {\n    overrideTheme?: boolean;\n    modes?: {\n      light?: StepConfigurationType[\"theme\"];\n      dark?: StepConfigurationType[\"theme\"];\n    };\n    backgroundColor?: string;\n    overlayColor?: string;\n    overlayColorOpacity?: number;\n    overrideOverlayBackground?: string;\n    arrowImage?: string;\n    arrowImageSize?: number;\n    textColor?: string;\n    brandColor?: string;\n    borderColor?: string;\n    secondaryTextColor?: string;\n    tertiaryTextColor?: string;\n    actionBorderTop?: boolean;\n    actionBorderTopColor?: string;\n    nextButtonColor?: string;\n    nextButtonHoverColor?: string;\n    nextButtonTextColor?: string;\n    prevButtonColor?: string;\n    prevButtonHoverColor?: string;\n    prevButtonTextColor?: string;\n    nextButtonRadius?: number;\n    nextButtonBorderColor?: string;\n    customCss?: string;\n    hideArrow?: boolean;\n    prevButtonRadius?: number;\n    prevButtonBorderColor?: string;\n    closeButtonColor?: string;\n    closeButtonHoverColor?: string;\n    closeButtonTextColor?: string;\n    closeButtonRadius?: number;\n    closeButtonShadow?: string;\n    prevButtonShadow?: string;\n    nextButtonShadow?: string;\n    closeButtonBorderColor?: string;\n    paginationPrimaryColor?: string;\n    paginationSecondaryColor?: string;\n    beaconBg?: string;\n    badgeBg?: string;\n    badgeText?: string;\n    badgeSize?: number;\n    badgeRadius?: number;\n    border?: string;\n    width?: number;\n    borderRadius?: number;\n    borderWidth?: number;\n    boxShadow?: string;\n    padding?: {\n      left?: number;\n      right?: number;\n      top?: number;\n      bottom?: number;\n    };\n    actionPadding?: {\n      left?: number;\n      right?: number;\n      top?: number;\n      bottom?: number;\n    };\n    fontFamily?: string;\n    heading1FontSize?: number;\n    heading2FontSize?: number;\n    paragraphFontSize?: number;\n  };\n  progressButtonPosition: \"center\" | \"right\" | \"left\";\n};\n\nexport type TourConfigurationType = {\n  type?: \"tour\" | \"slideout\" | \"banner\" | \"announcement\";\n  localization?: TourLocalizationConfiguration;\n  announcementId?: string;\n  showAuthor: boolean;\n  showStepCount: boolean;\n  themeId?: string;\n  theme?: StepConfigurationType[\"theme\"];\n  progressType: \"text\" | \"bar\";\n  animation?: {\n    enabled?: boolean;\n    direction?: StepAnimationDirection;\n    speed?: number;\n  };\n  targeting?: {\n    trigger?: \"auto\" | \"manual\";\n    eventTriggerCombinator?: \"and\" | \"or\";\n    frequency?: \"once\" | \"repeat\" | \"n_times\";\n    frequencyCount?: number;\n    userSegment?: string;\n    urlTarget?: \"any\" | \"pattern\";\n    urlPattern?: string;\n    audience?: \"all\" | \"specific\";\n    overrideDismissed?: boolean;\n    eligibility?: TargetingEligibilityV1;\n  };\n  snooze?: {\n    enabled?: boolean;\n    durationMinutes?: number;\n    label?: string;\n  };\n};\n\nexport type StepContentTranslation = {\n  description?: any;\n  voiceOver?: StepVoiceOverConfiguration;\n  progressButtonText?: string;\n  primaryButtonText?: string;\n  previousButtonText?: string;\n  closeButtonText?: string;\n  progressText?: string;\n};\n\nexport type TourLocalizationConfiguration = {\n  defaultLanguage?: string;\n  supportedLanguages?: string[];\n};\n\nexport type AllowedButtons = \"next\" | \"previous\" | \"close\";\n\n// Represents the limited API exposed via hooks\nexport interface GuideAPI {\n  config: GuideConfig; // Access to the merged config\n  state: { activeIndex: number | null }; // Access to current state if needed\n}\n\n// Internal state for the Guide component\nexport interface GuideState {\n  activeIndex: number | null;\n  targetElement: Element | null;\n  elementRect: DOMRect | null;\n  isTransitioning: boolean;\n  isPopoverTransitioning: boolean;\n  isWaitingForElement: boolean;\n  targetResolutionTimedOut: boolean;\n  isWaitingForCondition: boolean;\n}\n\n// Global configuration options\nexport interface GuideConfig {\n  steps?: StepInterface[]; // Optional here, mandatory in GuideProps\n  animate?: boolean;\n  allowClose?: boolean;\n  overlayClickBehavior?: OverlayClickBehavior | null;\n  onDismiss?: () => void;\n  trackTourProgress?: (suspendTour: boolean, stepId?: string | number) => void;\n  onOpenWidget?: (target: ButtonWidgetTarget) => void;\n  onTrackEvent?: (eventName: string) => void;\n  themeMode?: ThemeModeSetting;\n\n  proceedOnHighlightedElementClick?: boolean;\n  overlayColor?: string;\n  overlayOpacity?: number;\n  smoothScroll?: boolean;\n  stagePadding?: number;\n  stageRadius?: number;\n  disableActiveInteraction?: boolean;\n  allowKeyboardControl?: boolean;\n  popoverOffset?: number;\n  disableButtons?: AllowedButtons[];\n\n  popoverClass?: string;\n  highlightClass?: string;\n  overlayClass?: string;\n  doneBtnText?: string;\n  closeBtnText?: string;\n  nextBtnText?: string;\n  prevBtnText?: string;\n  progressText?: string; // Default template \"Step {{current}} of {{total}}\"\n  showProgress?: boolean;\n  showButtons?: AllowedButtons[];\n  keyboardControl?: boolean; // Added for clarity\n  // Lifecycle Hooks - passed as props\n  onHighlightStarted?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onHighlighted?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onDeselected?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onDestroyStarted?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onDestroyed?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  // Click handlers - passed as props\n  onNextClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onPrevClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onCloseClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n}\n\nexport type GuideHook<Args extends any[] = [Element | undefined, StepInterface, GuideAPI]> = (\n  ...args: Args\n) => void;\n\nexport interface PopoverConfig {\n  side?:\n    | \"left\"\n    | \"right\"\n    | \"top\"\n    | \"bottom\"\n    | \"top-left\"\n    | \"top-right\"\n    | \"bottom-left\"\n    | \"bottom-right\";\n  align?: \"start\" | \"center\" | \"end\";\n  description?: React.ReactNode;\n  showButtons?: AllowedButtons[];\n  showProgress?: boolean;\n  progressText?: string; // Keep template format \"Step {{current}} of {{total}}\"\n  nextBtnText?: string;\n  prevBtnText?: string;\n  doneBtnText?: string;\n  closeBtnText?: string;\n  onNextClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onPrevClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onCloseClick?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n}\n\nexport interface StepInterface {\n  id?: string;\n  title?: string;\n  description?: any;\n  pivotSelector?: string | null;\n  order?: number;\n  createdAt?: string;\n  url?: string;\n  tourId?: string;\n  isClosable?: boolean;\n  selectorInvalid?: boolean;\n  progression?: \"elementClick\" | \"progressButton\";\n  configuration?: Partial<StepConfigurationType>;\n  popover?: PopoverConfig;\n  onHighlightStarted?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onHighlighted?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  onDeselected?: GuideHook<[Element | undefined, StepInterface, GuideAPI]>;\n  disableActiveInteraction?: boolean;\n  proceedOnHighlightedElementClick?: boolean;\n}\nexport interface TourInterface {\n  id: string;\n  appUrl: string;\n  title: string;\n  description: string;\n  configuration?: Partial<TourConfigurationType>;\n  tourSubscriber: any;\n  publishedAt: string;\n  startsAt?: string | null;\n  endsAt?: string | null;\n  steps: StepInterface[];\n  state: \"draft\" | \"published\";\n  creator: any;\n  autoLaunch: boolean;\n  isCompleted?: boolean;\n}\nexport interface DialogPropsInterface {\n  children: JSX.Element;\n  isClosable?: boolean;\n  onDismiss?: () => void;\n  className?: string;\n  title: string;\n  isPanelRight?: boolean;\n  customStyles?: CSSProperties;\n  position?: DialogPosition;\n  customOverlayStyles?: {\n    hex?: string;\n    opacity?: number;\n  };\n  width?: string;\n  type?: string;\n  autoFocus?: boolean;\n}\nexport interface AlertDialogPropsInterface {\n  children: JSX.Element;\n  className?: string;\n  displayDialog: boolean | null;\n  primaryText: string;\n  secondaryText?: string;\n  tertiaryText?: string;\n  primaryAction: () => void;\n  secondaryAction?: () => void;\n  tertiaryAction?: () => void;\n  dialogContent: string;\n  title: string;\n  customStyles?: CSSProperties;\n  primaryLoading?: boolean;\n}\nexport interface FocusTrapPropsInterface {\n  children: React.ReactElement;\n  iframeDoc: HTMLDocument;\n}\nexport interface InputPropsInterface {\n  name: string;\n  value: string | null;\n  onChange: (e: FormDataEvent) => void;\n  onFocus?: (e: FormDataEvent) => void;\n}\n\nexport type StepContentProps = {\n  step: StepInterface;\n  handleNext?: () => void;\n  stepIndex: number;\n  stepsCount: number;\n  tour: TourInterface;\n  referenceElement?: HTMLElement;\n  suspendTour?: () => void;\n  isEditing?: boolean;\n  // setContent?: (e: string) => void;\n};\n\nexport type StepAction =\n  | { type: \"CREATE\"; payload: Omit<StepInterface, \"id\"> }\n  | { type: \"UPDATE\"; payload: Partial<StepInterface> }\n  | { type: \"DELETE\"; payload: StepInterface }\n  | {\n      type: \"REORDERING\";\n      payload: { toIndex: number; fromIndex: number; step: StepInterface };\n    }\n  | {\n      type: \"REORDERED\";\n      payload: { stepsMoved: number; stepId: string };\n    }\n  | { type: \"GET\"; payload?: { paginationQuery?: string } }\n  | {\n      type: \"PAGINATED_GET\";\n      payload: { tourId: string };\n    };\n\nexport type PopperOptions = {\n  offset: any;\n  // offset: [number, number]\n  element: Element;\n  fallbackPlacements: string[];\n};\n","import type {\n  StepContentTranslation,\n  StepInterface,\n  TourInterface,\n  TourLocalizationConfiguration,\n} from \"./tour\";\n\nexport const DEFAULT_TOUR_LANGUAGE = \"en\";\n\nexport const TOUR_LANGUAGE_OPTIONS = [\n  { code: \"en\", name: \"English\" },\n  { code: \"ar\", name: \"العربية\" },\n  { code: \"es\", name: \"Español\" },\n  { code: \"fr\", name: \"Français\" },\n  { code: \"ja\", name: \"日本語\" },\n  { code: \"de\", name: \"Deutsch\" },\n  { code: \"de-formal\", name: \"Deutsch (Formal)\" },\n  { code: \"pt\", name: \"Português\" },\n  { code: \"it\", name: \"Italiano\" },\n  { code: \"nl\", name: \"Nederlands\" },\n  { code: \"bn\", name: \"বাংলা\" },\n  { code: \"bs\", name: \"Bosanski\" },\n  { code: \"pt-br\", name: \"Português (Brasil)\" },\n  { code: \"bg\", name: \"Български\" },\n  { code: \"ca\", name: \"Català\" },\n  { code: \"hr\", name: \"Hrvatski\" },\n  { code: \"cs\", name: \"Čeština\" },\n  { code: \"da\", name: \"Dansk\" },\n  { code: \"et\", name: \"Eesti\" },\n  { code: \"fi\", name: \"Suomi\" },\n  { code: \"el\", name: \"Ελληνικά\" },\n  { code: \"he\", name: \"עברית\" },\n  { code: \"hi\", name: \"हिंदी\" },\n  { code: \"hu\", name: \"Magyar\" },\n  { code: \"id\", name: \"Bahasa Indonesia\" },\n  { code: \"ko\", name: \"한국어\" },\n  { code: \"lv\", name: \"Latviešu\" },\n  { code: \"lt\", name: \"Lietuvių\" },\n  { code: \"ms\", name: \"Bahasa Melayu\" },\n  { code: \"mn\", name: \"Монгол\" },\n  { code: \"nb\", name: \"Norsk Bokmål\" },\n  { code: \"fa\", name: \"فارسی\" },\n  { code: \"pl\", name: \"Polski\" },\n  { code: \"ro\", name: \"Română\" },\n  { code: \"ru\", name: \"Русский\" },\n  { code: \"sr\", name: \"Српски\" },\n  { code: \"zh-cn\", name: \"简体中文\" },\n  { code: \"sk\", name: \"Slovenčina\" },\n  { code: \"sl\", name: \"Slovenščina\" },\n  { code: \"sw\", name: \"Kiswahili\" },\n  { code: \"sv\", name: \"Svenska\" },\n  { code: \"th\", name: \"ไทย\" },\n  { code: \"zh-tw\", name: \"繁體中文\" },\n  { code: \"tr\", name: \"Türkçe\" },\n  { code: \"uk\", name: \"Українська\" },\n  { code: \"vi\", name: \"Tiếng Việt\" },\n  { code: \"ta\", name: \"தமிழ்\" },\n] as const;\n\nexport function normalizeTourLanguage(language?: string | null) {\n  const normalized = language?.trim();\n  if (!normalized || normalized === \"default\") return \"\";\n\n  return normalized.replace(\"_\", \"-\").toLowerCase();\n}\n\nexport function getTourLocalizationConfiguration(tour?: Partial<TourInterface> | null) {\n  return (tour?.configuration?.localization || {}) as TourLocalizationConfiguration;\n}\n\nexport function getTourDefaultLanguage(tour?: Partial<TourInterface> | null) {\n  return (\n    normalizeTourLanguage(getTourLocalizationConfiguration(tour).defaultLanguage) ||\n    DEFAULT_TOUR_LANGUAGE\n  );\n}\n\nexport function getStepTranslationLanguages(step?: Partial<StepInterface> | null) {\n  return Object.keys(step?.configuration?.translations || {})\n    .map(normalizeTourLanguage)\n    .filter(Boolean);\n}\n\nexport function getTourSupportedLanguages(tour?: Partial<TourInterface> | null) {\n  const defaultLanguage = getTourDefaultLanguage(tour);\n  const configuredLanguages = getTourLocalizationConfiguration(tour).supportedLanguages;\n\n  if (Array.isArray(configuredLanguages)) {\n    return Array.from(\n      new Set([defaultLanguage, ...configuredLanguages.map(normalizeTourLanguage)].filter(Boolean)),\n    );\n  }\n\n  const stepLanguages = (tour?.steps || []).reduce<string[]>(\n    (languages, step) => languages.concat(getStepTranslationLanguages(step)),\n    [],\n  );\n\n  return Array.from(new Set([defaultLanguage, ...stepLanguages].filter(Boolean)));\n}\n\nexport function getTourLanguageName(language?: string | null) {\n  const normalized = normalizeTourLanguage(language);\n  return (\n    TOUR_LANGUAGE_OPTIONS.find((option) => normalizeTourLanguage(option.code) === normalized)\n      ?.name || normalized.toUpperCase()\n  );\n}\n\nexport function resolveTourLanguage(\n  tour: Partial<TourInterface> | null | undefined,\n  preferredLanguages: Array<string | null | undefined>,\n) {\n  const supportedLanguages = getTourSupportedLanguages(tour);\n  const defaultLanguage = getTourDefaultLanguage(tour);\n\n  for (const preferredLanguage of preferredLanguages) {\n    const normalized = normalizeTourLanguage(preferredLanguage);\n    if (!normalized || normalized === \"auto\") continue;\n\n    if (supportedLanguages.includes(normalized)) return normalized;\n\n    const parentLanguage = normalized.split(\"-\")[0];\n    if (supportedLanguages.includes(parentLanguage)) return parentLanguage;\n  }\n\n  return defaultLanguage;\n}\n\nexport function isDefaultTourLanguage(\n  tour: Partial<TourInterface> | null | undefined,\n  language?: string | null,\n) {\n  return normalizeTourLanguage(language) === getTourDefaultLanguage(tour);\n}\n\nexport function getStepContentTranslation(\n  step: Partial<StepInterface> | null | undefined,\n  language?: string | null,\n) {\n  const normalized = normalizeTourLanguage(language);\n  if (!normalized) return undefined;\n\n  const translations = step?.configuration?.translations || {};\n  return translations[normalized] || translations[normalized.split(\"-\")[0]];\n}\n\nexport function localizeStepContent(step: StepInterface, language?: string | null) {\n  const normalized = normalizeTourLanguage(language);\n  if (!normalized) return step;\n\n  const translation = getStepContentTranslation(step, normalized);\n  if (!translation) return step;\n\n  return {\n    ...step,\n    description: getTranslationValue(translation, \"description\", step.description),\n    configuration: {\n      ...step.configuration,\n      progressButtonText: getTranslationValue(\n        translation,\n        \"progressButtonText\",\n        step.configuration?.progressButtonText,\n      ),\n      voiceOver: getTranslationValue(translation, \"voiceOver\", step.configuration?.voiceOver),\n      primaryButton:\n        hasTranslationValue(translation, \"primaryButtonText\") ||\n        hasTranslationValue(translation, \"progressButtonText\")\n          ? {\n              action: \"next\",\n              ...step.configuration?.primaryButton,\n              text: hasTranslationValue(translation, \"primaryButtonText\")\n                ? translation.primaryButtonText\n                : translation.progressButtonText,\n            }\n          : step.configuration?.primaryButton,\n      previousButton:\n        hasTranslationValue(translation, \"previousButtonText\") &&\n        (step.configuration?.previousButton || translation.previousButtonText !== \"\")\n          ? {\n              action: \"prev\",\n              ...step.configuration?.previousButton,\n              text: translation.previousButtonText,\n            }\n          : step.configuration?.previousButton,\n      closeButton:\n        hasTranslationValue(translation, \"closeButtonText\") &&\n        (step.configuration?.closeButton || translation.closeButtonText !== \"\")\n          ? {\n              action: \"complete\",\n              ...step.configuration?.closeButton,\n              text: translation.closeButtonText,\n            }\n          : step.configuration?.closeButton,\n      progressText: getTranslationValue(\n        translation,\n        \"progressText\",\n        step.configuration?.progressText,\n      ),\n    },\n  };\n}\n\nexport function localizeTourContent(tour: TourInterface, language?: string | null) {\n  const resolvedLanguage = resolveTourLanguage(tour, [language]);\n\n  return {\n    ...tour,\n    steps: (tour.steps || []).map((step) => localizeStepContent(step, resolvedLanguage)),\n  };\n}\n\nexport function mergeStepContentTranslation(\n  step: StepInterface,\n  language: string,\n  translation: StepContentTranslation,\n) {\n  const normalized = normalizeTourLanguage(language);\n  if (!normalized) return step;\n\n  return {\n    ...step,\n    configuration: {\n      ...step.configuration,\n      translations: {\n        ...step.configuration?.translations,\n        [normalized]: removeEmptyTranslationValues(translation),\n      },\n    },\n  };\n}\n\nfunction removeEmptyTranslationValues(translation: StepContentTranslation) {\n  return Object.entries(translation).reduce<StepContentTranslation>(\n    (nextTranslation, [key, value]) => {\n      if (value !== undefined && value !== null) {\n        nextTranslation[key as keyof StepContentTranslation] = value;\n      }\n\n      return nextTranslation;\n    },\n    {},\n  );\n}\n\nfunction hasTranslationValue<T extends keyof StepContentTranslation>(\n  translation: StepContentTranslation,\n  key: T,\n) {\n  return (\n    Object.prototype.hasOwnProperty.call(translation, key) &&\n    translation[key] !== undefined &&\n    translation[key] !== null\n  );\n}\n\nfunction getTranslationValue<T extends keyof StepContentTranslation>(\n  translation: StepContentTranslation,\n  key: T,\n  fallback: StepContentTranslation[T],\n) {\n  return hasTranslationValue(translation, key) ? translation[key] : fallback;\n}\n","import { z } from \"zod\";\n\nexport const ZAccountInput = z.object({\n  userId: z.string(),\n  type: z.string(),\n  provider: z.string(),\n  providerAccountId: z.string(),\n  access_token: z.string().nullish(),\n  refresh_token: z.string().nullish(),\n  expires_at: z.number().nullish(),\n  scope: z.string().nullish(),\n  token_type: z.string().nullish(),\n  id_token: z.string().nullish(),\n});\n\nexport type TAccountInput = z.infer<typeof ZAccountInput>;\n\nexport const ZAccount = z.object({\n  id: z.string(),\n  createdAt: z.date(),\n  updatedAt: z.date(),\n  userId: z.string(),\n  type: z.string(),\n  provider: z.string(),\n  providerAccountId: z.string(),\n  access_token: z.string().nullable(),\n  refresh_token: z.string().nullable().optional(),\n  expires_at: z.number().nullable(),\n  scope: z.string().nullable(),\n  token_type: z.string().nullable(),\n  id_token: z.string().nullable(),\n});\n\nexport type TAccount = z.infer<typeof ZAccount>;\n","export type Result<T, E = Error> = { ok: true; data: T } | { ok: false; error: E };\n\nexport const ok = <T, E>(data: T): Result<T, E> => ({ ok: true, data });\n\nexport const okVoid = <E>(): Result<void, E> => ({ ok: true, data: undefined });\n\nexport const err = <E = Error>(error: E): Result<never, E> => ({\n  ok: false,\n  error,\n});\n\n// Applies the given function `fn` to the data property of the input `result` object\n// and returns a new `Result` object with the transformed data property.\n//\n// T - The type of the input data.\n// R - The type of the output data.\n//\n// fn - The function to apply to the data property of the input `result` object.\n// Returns a new function that takes in a `Result<T>` object and returns a new `Result<R>` object.\n//\n//\n// Example:\n// const divideByTwo = (num: number): Result<number> => {\n//   if (num === 0) {\n//     return { ok: false, error: \"Cannot divide zero\" };\n//   }\n//\n//   return { ok: true, data: num / 2 };\n// }\n//\n// const wrappedDivideByTwo = wrap(divideByTwo);\n//\n// const result1: Result<number> = { ok: true, data: 10 };\n// const result2: Result<number> = { ok: false, error: \"Invalid input\" };\n// const result3: Result<number> = { ok: true, data: 0 };\n//\n\nexport const wrap =\n  <T, R>(fn: (value: T) => R) =>\n  (result: Result<T>): Result<R> =>\n    result.ok ? { ok: true, data: fn(result.data) } : (result as Result<R>);\n\n// Matches the given `result` object against its `ok` property and invokes the `onSuccess` function\n// if `ok` is `true`, or the `onError` function if `ok` is `false`. Returns the result of the invoked function.\n//\n// TSuccess - Type of the success value.\n// TError - Type of the error value.\n// TReturn - Type of the return value.\n//\n// result - The `Result` object to match against.\n// onSuccess - The function to invoke if `result.ok` is `true`.\n// onError - The function to invoke if `result.ok` is `false`.\n//\n// Returns the result of the invoked function.\n//\n// Example:\n// const test = (): Result<string, Error> => {\n//  return err(new Error(\"error happened\"));\n// }\n//\n// const result = test();\n//\n\nexport const match = <TSuccess, TError, TReturn>(\n  result: Result<TSuccess, TError>,\n  onSuccess: (value: TSuccess) => TReturn,\n  onError: (error: TError) => TReturn,\n): TReturn =>\n  result.ok ? onSuccess(result.data) : onError((result as { ok: false; error: TError }).error);\n\n// Wraps a function `fn` that may throw an error into a new function that returns a `Result` object.\n// If the wrapped function throws an error, the returned `Result` object will have an `ok` property of `false`\n// and an `error` property containing the thrown error. Otherwise, the returned `Result` object will have an\n// `ok` property of `true` and a `data` property containing the result of the wrapped function.\n//\n// T - The type of the result value.\n// A - An array of the types of the arguments expected by the wrapped function.\n//\n// fn - The function to wrap.\n// Returns a new function that returns a `Result` object.\n//\n// Example:\n// function divideByTwo(num: number): number {\n//   if (num === 0) {\n//     throw new Error(\"Cannot divide zero\");\n//   }\n//   return num / 2;\n// }\n//\n// const wrappedDivideByTwo = wrapThrows(divideByTwo);\n//\n// const result1: Result<number> = wrappedDivideByTwo(10); // { ok: true, data: 5 }\n// const result2: Result<number> = wrappedDivideByTwo(0); // { ok: false, error: Error(\"Cannot divide zero\") }\nexport const wrapThrows =\n  <T, A extends unknown[]>(fn: (...args: A) => T): ((...args: A) => Result<T>) =>\n  (...args: A): Result<T> => {\n    try {\n      return {\n        ok: true,\n        data: fn(...args),\n      };\n    } catch (error) {\n      return {\n        ok: false,\n        error: error as Error,\n      };\n    }\n  };\n\n// Wraps an asynchronous function `fn` that may throw an error into a new function that returns a `Result` object.\n// If the wrapped function throws an error, the returned `Result` object will have an `ok` property of `false`\n// and an `error` property containing the thrown error. Otherwise, the returned `Result` object will have an\n// `ok` property of `true` and a `data` property containing the result of the wrapped function.\n//\n// T - The type of the result value.\n// A - An array of the types of the arguments expected by the wrapped function.\n//\n// fn - The asynchronous function to wrap.\n// Returns a new function that returns a `Result` object.\n//\n// Example:\n// async function fetchData(url: string): Promise<string> {\n//   const response = await fetch(url);\n//   if (!response.ok) {\n//     throw new Error(\"Network response was not ok\");\n//   }\n//   return response.text();\n// }\n//\n// const wrappedFetchData = wrapThrowsAsync(fetchData);\n//\n// const result1: Result<string> = await wrappedFetchData(\"https://example.com\"); // { ok: true, data: \"...\" }\n// const result2: Result<string> = await wrappedFetchData(\"https://bad-url.com\"); // { ok: false, error: Error(\"Network response was not ok\") }\nexport const wrapThrowsAsync =\n  <T, A extends unknown[]>(fn: (...args: A) => Promise<T>) =>\n  async (...args: A): Promise<Result<T>> => {\n    try {\n      return {\n        ok: true,\n        data: await fn(...args),\n      };\n    } catch (error) {\n      return {\n        ok: false,\n        error: error as Error,\n      };\n    }\n  };\n","export type VideoStatus = \"draft\" | \"planning\" | \"generating\" | \"rendering\" | \"ready\" | \"failed\";\n\nexport type VideoBackground =\n  | {\n      type: \"solid\";\n      color: string;\n      noise?: boolean;\n    }\n  | {\n      type: \"gradient\" | \"gradientSweep\" | \"rippleGradient\";\n      colors: [string, string];\n      noise?: boolean;\n    }\n  | {\n      type: \"asset\";\n      asset: VideoBackgroundMediaAsset | null;\n      overlayColor: string;\n      blur: \"none\" | \"standard\";\n    };\n\nexport type VideoBackgroundMediaAsset = {\n  type: \"image\" | \"video\";\n  url: string;\n  playbackRate?: number;\n};\n\nexport type VideoTransition = {\n  type: \"iris\" | \"fade\";\n  speed: number;\n};\n\nexport type VideoSceneAnimation = {\n  style: \"auto\" | \"mask\" | \"fade\" | \"scale\";\n  intro: boolean;\n  outro: boolean;\n};\n\nexport type VideoSceneStyle = {\n  background: VideoBackground;\n  fontColor: string;\n  font?: string;\n  fontWeight?: \"regular\" | \"medium\" | \"semibold\" | \"bold\";\n  sceneAnimation?: VideoSceneAnimation;\n  transition?: VideoTransition;\n};\n\nexport type VideoTextPreset = {\n  type: \"slide\" | \"typewriter\" | \"mask\" | \"build\" | \"scramble\" | \"maskedReveal\" | \"charByChar\";\n  direction?: \"bottom\";\n};\n\nexport type VideoImageAsset = {\n  type: \"image\" | \"video\";\n  url: string;\n  borderRadius: boolean;\n  frame?: \"none\";\n  playbackRate?: number;\n  trimBefore?: number;\n  objectFit?: \"contain\" | \"cover\";\n};\n\nexport type VideoSceneBase = {\n  id: string;\n  duration: number;\n  style: VideoSceneStyle;\n};\n\nexport type LogoVideoScene = VideoSceneBase & {\n  type: \"logo\";\n  url: string;\n  fallbackText?: string;\n  size: \"s\" | \"m\" | \"l\";\n  animation: {\n    type: \"fadeBlurSlide\";\n  };\n};\n\nexport type InterstitialVideoScene = VideoSceneBase & {\n  type: \"interstitial\";\n  text: string;\n  textPreset: VideoTextPreset;\n  textEffect: \"shimmer\" | \"none\";\n  layoutConfig:\n    | {\n        layout: \"centered\";\n        asset?: VideoImageAsset;\n      }\n    | {\n        layout: \"top\";\n        asset?: VideoImageAsset;\n      };\n};\n\nexport type AssetVideoScene = VideoSceneBase & {\n  type: \"asset\";\n  asset: VideoImageAsset;\n  display: \"fullBleed\" | \"framed\";\n  holdMotion: \"zoom\" | \"none\";\n};\n\nexport type CounterVideoScene = VideoSceneBase & {\n  type: \"counter\";\n  from: number;\n  to: number;\n  prefix?: string | null;\n  suffix: string;\n  title: string;\n  size: \"s\" | \"m\" | \"l\";\n};\n\nexport type CustomCodeSetting = {\n  key: string;\n  type: \"string\" | \"color\";\n  label: string;\n  defaultValue?: string;\n  value: string;\n  section: string;\n};\n\nexport type CustomCodeVideoScene = VideoSceneBase & {\n  type: \"customCode\";\n  code: string;\n  description: string;\n  settings: CustomCodeSetting[];\n  refining: boolean;\n};\n\nexport type CallToActionVideoScene = VideoSceneBase & {\n  type: \"call-to-action\";\n  label: string;\n  textColor: string;\n  backgroundColor: string;\n  borderColor: string;\n  shape: \"pill\";\n  shadow: \"L\";\n  haloColor: string;\n  cursor: \"pointer\";\n};\n\nexport type VideoScene =\n  | LogoVideoScene\n  | InterstitialVideoScene\n  | AssetVideoScene\n  | CounterVideoScene\n  | CustomCodeVideoScene\n  | CallToActionVideoScene;\n\nexport type Voiceover = {\n  target: {\n    type: \"scene\";\n    sceneId: string;\n  };\n  script: string;\n  spokenScript?: string;\n  url: string;\n  duration: number;\n  /** Absolute position on the video timeline. */\n  audioOffsetSeconds?: number;\n  /** Trim offset within a shared/combined audio source. */\n  sourceOffsetSeconds?: number;\n  timepoints: {\n    markName: string;\n    timeSeconds: number;\n  }[];\n  voiceKey: string;\n  voiceModel: string;\n};\n\nexport type ZoomAnimation = {\n  style: \"snap\";\n  target: {\n    type: \"scene\";\n    sceneId: string;\n    offsetSeconds: number;\n  };\n  coords: {\n    x: number;\n    y: number;\n  };\n  duration: number;\n  zoomAmount: number;\n};\n\nexport type CursorAnimation = {\n  target: {\n    type: \"scene\";\n    sceneId: string;\n    offsetSeconds: number;\n  };\n  coords: {\n    x: number;\n    y: number;\n  };\n  duration: number;\n  cursor: \"pointer\";\n};\n\nexport type HotspotAnnotation = {\n  target: {\n    type: \"scene\";\n    sceneId: string;\n    offsetSeconds: number;\n  };\n  coords: {\n    x: number;\n    y: number;\n  };\n  duration: number;\n  label: string;\n  style: \"spotlight\";\n  accentColor?: string;\n  dimBackground?: boolean;\n};\n\nexport type VideoCaptionStyle = {\n  preset: \"karaoke\" | \"minimal\";\n  background: \"glass\" | \"none\";\n  position: \"bottom\" | \"raised\";\n  activeColor?: string;\n  inactiveColor?: string;\n};\n\nexport type DemoReplayEasing = \"gentle\" | \"quick\" | \"slow\" | \"linear\";\n\nexport type DemoReplayCameraKeyframe = {\n  atSeconds: number;\n  durationSeconds: number;\n  easing: DemoReplayEasing;\n  scale: number;\n  translateX: number;\n  translateY: number;\n};\n\nexport type DemoReplayCursorKeyframe = {\n  atSeconds: number;\n  x: number;\n  y: number;\n  click?: boolean;\n};\n\nexport type DemoReplayCardWindow = {\n  fromSeconds: number;\n  toSeconds: number;\n  appearance: \"tooltip\" | \"modal\";\n  variant?: \"step\" | \"completion\";\n  placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  title?: string;\n  body?: string;\n  cta?: string;\n  stepIndex: number;\n  totalSteps: number;\n  x: number;\n  y: number;\n  width: number;\n  height?: number;\n  arrowOffset?: number;\n};\n\nexport type DemoReplayHotspotWindow = {\n  fromSeconds: number;\n  toSeconds: number;\n  style: \"ripple\" | \"ripple-highlight\" | \"ripple-box\" | \"invisible-box\";\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  isPoint?: boolean;\n};\n\nexport type DemoReplayCover = {\n  title?: string;\n  body?: string;\n  cta?: string;\n  background: \"blur\" | \"light\" | \"dark\" | \"custom\";\n  backgroundColor?: string;\n  imageUrl?: string;\n  backdropScreenshotUrl?: string;\n  alignment: \"left\" | \"center\";\n};\n\nexport type DemoReplayScene = {\n  id: string;\n  kind: \"page\" | \"cover\";\n  durationSeconds: number;\n  transitionIn: \"none\" | \"fade\";\n  screenshotUrl?: string;\n  viewport: {\n    width: number;\n    height: number;\n  };\n  cameraKeyframes: DemoReplayCameraKeyframe[];\n  cards: DemoReplayCardWindow[];\n  hotspots: DemoReplayHotspotWindow[];\n  cover?: DemoReplayCover;\n};\n\nexport type DemoReplayCursorMode = \"dynamic\" | \"static\" | \"none\";\n\nexport type DemoReplayDocument = {\n  kind: \"demo-replay\";\n  dimensions: {\n    width: number;\n    height: number;\n  };\n  fps: number;\n  duration: number;\n  cursorMode: DemoReplayCursorMode;\n  style: {\n    backgroundMusicUrl?: string;\n    backgroundMusicVolume?: number;\n    captionsEnabled: boolean;\n    captionStyle?: VideoCaptionStyle;\n    font: string;\n    accentColor?: string;\n    hotspotColor?: string;\n    cardBackgroundColor?: string;\n    cardTextColor?: string;\n    cardBorderColor?: string;\n    buttonBackgroundColor?: string;\n    buttonTextColor?: string;\n  };\n  scenes: DemoReplayScene[];\n  cursorKeyframes: DemoReplayCursorKeyframe[];\n  voiceovers: Voiceover[];\n};\n\nexport type VideoDocument = {\n  dimensions: {\n    width: number;\n    height: number;\n  };\n  fps: number;\n  duration: number;\n  style: {\n    backgroundMusicUrl?: string;\n    backgroundMusicVolume?: number;\n    captionsDefault: boolean;\n    captionStyle?: VideoCaptionStyle;\n    font: string;\n  };\n  scenes: VideoScene[];\n  voiceovers: Voiceover[];\n  zoomAnimations: ZoomAnimation[];\n  cursorAnimations: CursorAnimation[];\n  hotspotAnnotations?: HotspotAnnotation[];\n  voiceSeed: number;\n};\n\nexport type DemoVideoAssistantScope =\n  | { mode: \"auto\"; currentSceneId?: string }\n  | { mode: \"all\" }\n  | { mode: \"current\"; sceneIds: [string] }\n  | { mode: \"selected\"; sceneIds: string[] };\n","import storyRecipeCatalog from \"./demo-video-story-templates.json\";\n\nexport type DemoVideoStoryTemplateId =\n  | \"product-overview\"\n  | \"feature-walkthrough\"\n  | \"how-to\"\n  | \"onboarding\"\n  | \"customer-story\"\n  | \"launch-teaser\"\n  | \"release-roundup\"\n  | \"article-video\";\n\nexport type DemoVideoStorySceneType =\n  | \"logo\"\n  | \"interstitial\"\n  | \"asset\"\n  | \"counter\"\n  | \"customCode\"\n  | \"call-to-action\";\n\nexport type DemoVideoStoryEvidence =\n  | \"product-copy\"\n  | \"product-visual\"\n  | \"workflow-capture\"\n  | \"verified-proof\"\n  | \"customer-evidence\"\n  | \"release-detail\"\n  | \"article-copy\";\n\nexport type DemoVideoStoryBeat = {\n  intent: string;\n  objective: string;\n  pacing: \"punchy\" | \"steady\" | \"deliberate\";\n  durationWeight: number;\n  sceneCount: number;\n  requiredEvidence: DemoVideoStoryEvidence[];\n  preferredSceneTypes: DemoVideoStorySceneType[];\n};\n\nexport type DemoVideoStoryScenePreference = {\n  type: DemoVideoStorySceneType;\n  min: number;\n  max: number;\n};\n\nexport type DemoVideoStoryRecipe = {\n  id: DemoVideoStoryTemplateId | \"freeform\";\n  label: string;\n  description: string;\n  defaultPrompt: string;\n  pacing: {\n    tempo: \"fast\" | \"balanced\" | \"measured\";\n    targetSeconds: [number, number];\n  };\n  sceneCount: { min: number; max: number };\n  narration?: {\n    targetWordsPerMinute: number;\n    minWordsPerBeat: number;\n    maxWordsPerBeat: number;\n  };\n  requiredEvidence: DemoVideoStoryEvidence[];\n  sceneDistribution: DemoVideoStoryScenePreference[];\n  beats: DemoVideoStoryBeat[];\n  cta: {\n    objective: string;\n    fallbackLabel: string;\n    guidance: string;\n  };\n};\n\nexport type DemoVideoStoryTemplate = Omit<DemoVideoStoryRecipe, \"id\"> & {\n  id: DemoVideoStoryTemplateId;\n};\n\nexport const DEMO_VIDEO_STORY_TEMPLATES =\n  storyRecipeCatalog.templates as unknown as readonly DemoVideoStoryTemplate[];\n\nexport const FREEFORM_DEMO_VIDEO_STORY_RECIPE =\n  storyRecipeCatalog.freeform as unknown as DemoVideoStoryRecipe;\n\nexport const findDemoVideoStoryTemplate = (id?: string | null) =>\n  DEMO_VIDEO_STORY_TEMPLATES.find((template) => template.id === id);\n\nexport const resolveDemoVideoStoryRecipe = (id?: string | null): DemoVideoStoryRecipe =>\n  findDemoVideoStoryTemplate(id) ?? FREEFORM_DEMO_VIDEO_STORY_RECIPE;\n","export type VisualStatus = \"draft\" | \"generating\" | \"ready\" | \"failed\";\n\nexport type VisualTemplate = \"inspire\" | \"showcase\" | \"convert\" | \"capture\" | \"announcement\";\nexport type VisualFormat = \"instagram\" | \"linkedin\" | \"changelog\";\nexport type VisualLayout =\n  | \"linkedin-ad-square\"\n  | \"linkedin-ad-landscape\"\n  | \"linkedin-ad-portrait\"\n  | \"linkedin-post-square\"\n  | \"linkedin-post-landscape\"\n  | \"linkedin-post-portrait\"\n  | \"linkedin-profile-banner\"\n  | \"linkedin-article-banner\"\n  | \"instagram-ad\"\n  | \"instagram-post-square\"\n  | \"instagram-post-portrait\"\n  | \"instagram-stories\"\n  | \"instagram-reels\"\n  | \"x-post\"\n  | \"x-banner\";\nexport type VisualBackground = \"wave\" | \"night\" | \"mesh\" | \"plain\";\nexport type VisualLogo = \"wordmark\" | \"mark\" | \"mono\";\nexport type VisualColor = \"blue\" | \"black\" | \"white\" | `#${string}`;\nexport type VisualShadow = \"soft\" | \"none\";\n\nexport type VisualAsset = {\n  id: string;\n  format: VisualFormat;\n  layout?: VisualLayout;\n  template: VisualTemplate;\n  headline: string;\n  cta: string;\n  background: VisualBackground;\n  logo: VisualLogo;\n  logoEnabled: boolean;\n  animated: boolean;\n  ctaEnabled: boolean;\n  headlineEnabled?: boolean;\n  descriptionEnabled?: boolean;\n  textColor: VisualColor;\n  ctaColor: VisualColor;\n  ctaTextColor: VisualColor;\n  shadow: VisualShadow;\n  backgroundImageUrl?: string | null;\n  screenshotUrl?: string | null;\n  attachmentUrl?: string | null;\n  attachmentName?: string | null;\n  attachmentContentType?: string | null;\n  attachmentWidth?: number | null;\n  attachmentHeight?: number | null;\n};\n\nexport type VisualDocument = {\n  version: 1;\n  brand: string;\n  brandLogoUrl?: string | null;\n  template: VisualTemplate;\n  assets: VisualAsset[];\n};\n","export * from \"./tour\";\nexport * from \"./tour-localization\";\nexport * from \"./account\";\nexport * from \"./action-classes\";\nexport * from \"./error-handlers\";\nexport * from \"./js\";\nexport * from \"./demo-video\";\nexport * from \"./demo-video-story-templates\";\nexport * from \"./demo-visual\";\nexport * from \"./targeting\";\nexport * from \"./behavior-history\";\nexport * from \"./delivery\";\n","import type { Root } from \"react-dom/client\";\nimport {\n  privacyAllowed,\n  privacyGeneration,\n  subscribePrivacyPreferences,\n} from \"./privacyPreferences\";\n\nconst roots = new Map<Root, HTMLElement>();\nconst controllers = new Set<AbortController>();\nexport class WidgetPrivacyError extends Error {\n  constructor() {\n    super(\"Widget disabled by privacy preferences\");\n    this.name = \"AbortError\";\n  }\n}\nexport function widgetGenerationAllowed(generation: number): boolean {\n  return privacyAllowed(\"widget\") && generation === privacyGeneration(\"widget\");\n}\nexport function stopWidgetForPrivacy(): void {\n  for (const controller of controllers) controller.abort();\n  controllers.clear();\n  for (const [root, host] of roots) {\n    try {\n      root.unmount();\n    } catch {}\n    host.remove();\n  }\n  roots.clear();\n}\nsubscribePrivacyPreferences(() => {\n  if (!privacyAllowed(\"widget\")) stopWidgetForPrivacy();\n});\nexport function registerWidgetPrivacyRoot(\n  root: Root,\n  host: HTMLElement,\n  generation: number,\n): boolean {\n  if (!widgetGenerationAllowed(generation)) {\n    root.unmount();\n    host.remove();\n    return false;\n  }\n  for (const [existingRoot, existingHost] of roots) {\n    if (existingHost.isConnected === false) {\n      roots.delete(existingRoot);\n      try {\n        existingRoot.unmount();\n      } catch {}\n    }\n  }\n  if (roots.size >= 128) {\n    root.unmount();\n    host.remove();\n    return false;\n  }\n  roots.set(root, host);\n  return true;\n}\n\nexport async function widgetFetch(\n  url: RequestInfo | URL,\n  input: RequestInit | (() => RequestInit) = {},\n  generation = privacyGeneration(\"widget\"),\n): Promise<Response> {\n  const controller = new AbortController();\n  const valid = () => widgetGenerationAllowed(generation) && !controller.signal.aborted;\n  const ensure = () => {\n    if (!valid()) throw new WidgetPrivacyError();\n  };\n  ensure();\n  if (controllers.size >= 128) throw new WidgetPrivacyError();\n  controllers.add(controller);\n  let externalSignal: AbortSignal | null | undefined;\n  const abort = () => controller.abort();\n  let response: Response;\n  try {\n    const options = typeof input === \"function\" ? input() : input;\n    externalSignal = options.signal;\n    externalSignal?.addEventListener(\"abort\", abort, { once: true });\n    if (externalSignal?.aborted) controller.abort();\n    ensure();\n    response = await fetch(url, { ...options, signal: controller.signal });\n    ensure();\n  } catch (error) {\n    controllers.delete(controller);\n    externalSignal?.removeEventListener(\"abort\", abort);\n    throw error;\n  }\n  const finish = () => {\n    controllers.delete(controller);\n    externalSignal?.removeEventListener(\"abort\", abort);\n  };\n  if (!response.body) finish();\n  // Keep the abort handle until body consumption finishes, including AI streams.\n  return new Proxy(response, {\n    get(target, key) {\n      if ([\"json\", \"text\", \"arrayBuffer\", \"blob\", \"formData\"].includes(String(key)))\n        return async () => {\n          try {\n            ensure();\n            const value = await target[key]();\n            ensure();\n            return value;\n          } finally {\n            finish();\n          }\n        };\n      if (key === \"body\" && target.body)\n        return new Proxy(target.body, {\n          get(body, property) {\n            if (property === \"cancel\")\n              return async (...args: any[]) => {\n                try {\n                  return await body.cancel(args[0]);\n                } finally {\n                  finish();\n                }\n              };\n            if (property === \"getReader\")\n              return (...args: any[]) => {\n                ensure();\n                const reader = (body.getReader as any)(args[0]);\n                return new Proxy(reader, {\n                  get(current, method) {\n                    if (method === \"read\")\n                      return async () => {\n                        try {\n                          ensure();\n                          const value = await current.read();\n                          ensure();\n                          if (value.done) finish();\n                          return value;\n                        } catch (error) {\n                          finish();\n                          throw error;\n                        }\n                      };\n                    if (method === \"cancel\")\n                      return async (...args: any[]) => {\n                        try {\n                          return await current.cancel(args[0]);\n                        } finally {\n                          finish();\n                        }\n                      };\n                    const value = Reflect.get(current, method, current);\n                    return typeof value === \"function\" ? value.bind(current) : value;\n                  },\n                });\n              };\n            const value = Reflect.get(body, property, body);\n            return typeof value === \"function\" ? value.bind(body) : value;\n          },\n        });\n      const value = Reflect.get(target, key, target);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n  });\n}\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(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?S(n):null}function C(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=w({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),z(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?S(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,V(i,o,r),u.__e=u.__=null,o.__e!=t&&M(o)}}function M(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),M(n)}function $(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!I.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(I)}function I(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,C(n)}finally{i.length=I.__r=0}}function P(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=A(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1!=y.__i&&m[y.__i]||p,y.__i=a,g=z(n,y,h,i,r,o,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&D(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=H(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function A(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=m(null,o,null,null,null):d(o)?o=n.__k[r]=m(k,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=T(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),E(e,e));return t}function H(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=H(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function L(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){L(n,l)}):l.push(n)),l}function T(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function j(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function F(n,l,u,t,i){var r,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||j(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||j(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==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&&\"popover\"!=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,\"popover\"==l&&1==u?\"\":u))}}function O(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function z(n,u,t,i,r,o,e,f,c,s){var a,h,p,y,_,m,b,S,C,M,$,I,A,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(S=u.props,C=T.prototype&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?b=(h=u.__c=t.__c).__=h.__E:(C?u.__c=h=new T(S,$):(u.__c=h=new x(S,$),h.constructor=T,h.render=G),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),C&&null==h.__s&&(h.__s=h.state),C&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,T.getDerivedStateFromProps(S,h.__s))),y=h.props,_=h.state,h.__v=u,p)C&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),C&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(C&&null==T.getDerivedStateFromProps&&S!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(S,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(S,h.__s,$)){u.__v!=t.__v&&(h.props=S,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),v.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(S,h.__s,$),C&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,m)})}if(h.context=$,h.props=S,h.__P=n,h.__e=!1,I=l.__r,A=0,C)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),v.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),C&&!p&&null!=h.getSnapshotBeforeUpdate&&(m=h.getSnapshotBeforeUpdate(y,_)),H=null!=a&&a.type===k&&null==a.key?q(a.props.children):a,f=P(n,d(H)?H:[H],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),b&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(L=o.length;L--;)g(o[L]);N(u)}else u.__e=t.__e,u.__k=t.__k,n.then||N(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=B(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function N(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(N))}function V(n,u,t){for(var i=0;i<t.length;i++)D(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 q(n){return\"object\"!=typeof n||null==n||n.__b>0?n:d(n)?n.map(q):w({},n)}function B(u,t,i,r,o,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)w=b[a],\"dangerouslySetInnerHTML\"==a?v=w:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||F(u,a,null,w,o);for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||F(u,a,w,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),P(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&F(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&F(u,a,m,b[a],o))}return u}function D(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function E(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||D(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&E(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function G(n,l,u){return this.constructor(n,u)}function J(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],z(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),V(e,u,f)}function K(n,l){J(n,l,K)}function Q(l,u,t){var i,r,o,e,f=w({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function R(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,$(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),$(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),$(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},I.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=O(!1),a=O(!0),h=0;export{x as Component,k as Fragment,Q as cloneElement,R as createContext,_ as createElement,b as createRef,_ as h,K as hydrate,t as isValidElement,l as options,J as render,L as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(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.__f)){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=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!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 y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();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=p(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();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__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,35);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{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,Fragment as StrictMode,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,R(u)&&o({t:u})},[n,e,t]),h(function(){return R(u)&&o({t:u}),n(function(){R(u)&&o({t:u})})},[n]),e}function R(n){try{return!((t=n.__)===(e=n.u())&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}var t,e}function x(n){n()}function w(n){return n}function k(){return[!1,x]}var I=s;function M(n,t){this.props=n,this.context=t}function N(n,e){function r(n){var t=this.props.ref;return t!=n.ref&&t&&(\"function\"==typeof t?t(null):t.current=null),e?!e(this.props,n)||t!=n.ref:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.__f=u.prototype.isReactComponent=!0,u.type=n,u}(M.prototype=new n).isPureReactComponent=!0,M.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=n,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var F=function(n,t){return null==n?null:r(r(n).map(t))},L={map:F,forEach:F,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},O=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__&&n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u,o=null;function i(i){if(e||(e=n()).then(function(n){n&&(o=n.default||n),u=!0},function(n){r=n,u=!0}),r)throw r;if(!u)throw e;return o?t(o,i):null}return i.displayName=\"Lazy\",i.__f=!0,i}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&(t.__z=!0),t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||r.__z||(o=!0,e.__R=null,u?u(c):c())};e.__R=i;var l=e.__P;e.__P=null;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.__P=l,t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},namespaceURI:r.namespaceURI,insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent=!0,[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;e.event=function(n){return en&&(n=en(n)),n.persist=function(){},n.isPropagationStopped=function(){return this.cancelBubble},n.isDefaultPrevented=function(){return this.defaultPrevented},n.nativeEvent=n};var rn,un={configurable:!0,get:function(){return this.class}},on=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1==e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&(u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value}))),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",un)):t.className&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,on&&on(n)};var ln=e.__r;e.__r=function(n){ln&&ln(n),rn=n.__c};var cn=e.diffed;e.diffed=function(n){cn&&cn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),rn=null};var fn={ReactCurrentDispatcher:{current:{readContext:function(n){return rn.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},an=\"18.3.1\";function sn(n){return t.bind(null,n)}function hn(n){return!!n&&n.$$typeof===q}function vn(n){return hn(n)&&n.type===u}function dn(n){return!!n&&\"string\"==typeof n.displayName&&0==n.displayName.indexOf(\"Memo(\")}function mn(n){return hn(n)?f.apply(null,arguments):n}function pn(n){return!!n.__k&&(o(null,n),!0)}function yn(n){return n&&(n.base||1===n.nodeType&&n)||null}var _n=function(n,t){return n(t)},bn=function(n,t){var r=e.debounceRendering;e.debounceRendering=function(n){return n()};var u=n(t);return e.debounceRendering=r,u},Sn=hn,gn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:x,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:L,render:nn,hydrate:tn,unmountComponentAtNode:pn,createPortal:$,createElement:t,createContext:l,createFactory:sn,cloneElement:mn,createRef:c,Fragment:u,isValidElement:hn,isElement:Sn,isFragment:vn,isMemo:dn,findDOMNode:yn,Component:n,PureComponent:M,memo:N,forwardRef:D,flushSync:bn,unstable_batchedUpdates:_n,StrictMode:u,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:fn};export{L as Children,M as PureComponent,P as Suspense,B as SuspenseList,fn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,mn as cloneElement,sn as createFactory,$ as createPortal,gn as default,yn as findDOMNode,bn as flushSync,D as forwardRef,tn as hydrate,Sn as isElement,vn as isFragment,dn as isMemo,hn as isValidElement,z as lazy,N as memo,nn as render,x as startTransition,pn as unmountComponentAtNode,_n as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,an as version};\n//# sourceMappingURL=compat.module.js.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  outline: {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    stroke: \"currentColor\",\n    strokeWidth: 2,\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  },\n  filled: {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    stroke: \"none\"\n  }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createReactComponent = (type, iconName, iconNamePascal, iconNode) => {\n  const Component = forwardRef(\n    ({ color = \"currentColor\", size = 24, stroke = 2, title, className, children, ...rest }, ref) => createElement(\n      \"svg\",\n      {\n        ref,\n        ...defaultAttributes[type],\n        width: size,\n        height: size,\n        className: [`tabler-icon`, `tabler-icon-${iconName}`, className].join(\" \"),\n        ...type === \"filled\" ? {\n          fill: color\n        } : {\n          strokeWidth: stroke,\n          stroke: color\n        },\n        ...rest\n      },\n      [\n        title && createElement(\"title\", { key: \"svg-title\" }, title),\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...Array.isArray(children) ? children : [children]\n      ]\n    )\n  );\n  Component.displayName = `${iconNamePascal}`;\n  return Component;\n};\n\nexport { createReactComponent as default };\n//# sourceMappingURL=createReactComponent.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]];\nconst IconAlertCircle = createReactComponent(\"outline\", \"alert-circle\", \"AlertCircle\", __iconNode);\n\nexport { __iconNode, IconAlertCircle as default };\n//# sourceMappingURL=IconAlertCircle.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 9v12m-8 -8a8 8 0 0 0 16 0m1 0h-2m-14 0h-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 6a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-1\" }]];\nconst IconAnchor = createReactComponent(\"outline\", \"anchor\", \"Anchor\", __iconNode);\n\nexport { __iconNode, IconAnchor as default };\n//# sourceMappingURL=IconAnchor.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M18 13l-6 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 13l6 6\", \"key\": \"svg-2\" }]];\nconst IconArrowDown = createReactComponent(\"outline\", \"arrow-down\", \"ArrowDown\", __iconNode);\n\nexport { __iconNode, IconArrowDown as default };\n//# sourceMappingURL=IconArrowDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12l6 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M5 12l6 -6\", \"key\": \"svg-2\" }]];\nconst IconArrowLeft = createReactComponent(\"outline\", \"arrow-left\", \"ArrowLeft\", __iconNode);\n\nexport { __iconNode, IconArrowLeft as default };\n//# sourceMappingURL=IconArrowLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 15l-4 4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 15l4 4\", \"key\": \"svg-2\" }]];\nconst IconArrowNarrowDown = createReactComponent(\"outline\", \"arrow-narrow-down\", \"ArrowNarrowDown\", __iconNode);\n\nexport { __iconNode, IconArrowNarrowDown as default };\n//# sourceMappingURL=IconArrowNarrowDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12l4 4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M5 12l4 -4\", \"key\": \"svg-2\" }]];\nconst IconArrowNarrowLeft = createReactComponent(\"outline\", \"arrow-narrow-left\", \"ArrowNarrowLeft\", __iconNode);\n\nexport { __iconNode, IconArrowNarrowLeft as default };\n//# sourceMappingURL=IconArrowNarrowLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 16l4 -4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M15 8l4 4\", \"key\": \"svg-2\" }]];\nconst IconArrowNarrowRight = createReactComponent(\"outline\", \"arrow-narrow-right\", \"ArrowNarrowRight\", __iconNode);\n\nexport { __iconNode, IconArrowNarrowRight as default };\n//# sourceMappingURL=IconArrowNarrowRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 9l-4 -4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 9l4 -4\", \"key\": \"svg-2\" }]];\nconst IconArrowNarrowUp = createReactComponent(\"outline\", \"arrow-narrow-up\", \"ArrowNarrowUp\", __iconNode);\n\nexport { __iconNode, IconArrowNarrowUp as default };\n//# sourceMappingURL=IconArrowNarrowUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M13 18l6 -6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M13 6l6 6\", \"key\": \"svg-2\" }]];\nconst IconArrowRight = createReactComponent(\"outline\", \"arrow-right\", \"ArrowRight\", __iconNode);\n\nexport { __iconNode, IconArrowRight as default };\n//# sourceMappingURL=IconArrowRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 7l-10 10\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 7l9 0l0 9\", \"key\": \"svg-1\" }]];\nconst IconArrowUpRight = createReactComponent(\"outline\", \"arrow-up-right\", \"ArrowUpRight\", __iconNode);\n\nexport { __iconNode, IconArrowUpRight as default };\n//# sourceMappingURL=IconArrowUpRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M18 11l-6 -6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 11l6 -6\", \"key\": \"svg-2\" }]];\nconst IconArrowUp = createReactComponent(\"outline\", \"arrow-up\", \"ArrowUp\", __iconNode);\n\nexport { __iconNode, IconArrowUp as default };\n//# sourceMappingURL=IconArrowUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 7v-1c0 -.552 .224 -1.052 .586 -1.414\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 17v1a2 2 0 0 0 2 2h2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M16 4h2a2 2 0 0 1 2 2v1\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16 20h2c.551 0 1.05 -.223 1.412 -.584\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M5 11h1v2h-1l0 -2\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M10 11v2\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M15 11v.01\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M19 11v2\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M3 3l18 18\", \"key\": \"svg-8\" }]];\nconst IconBarcodeOff = createReactComponent(\"outline\", \"barcode-off\", \"BarcodeOff\", __iconNode);\n\nexport { __iconNode, IconBarcodeOff as default };\n//# sourceMappingURL=IconBarcodeOff.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 7v-1a2 2 0 0 1 2 -2h2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 17v1a2 2 0 0 0 2 2h2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M16 4h2a2 2 0 0 1 2 2v1\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16 20h2a2 2 0 0 0 2 -2v-1\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M5 11h1v2h-1l0 -2\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M10 11l0 2\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M14 11h1v2h-1l0 -2\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M19 11l0 2\", \"key\": \"svg-7\" }]];\nconst IconBarcode = createReactComponent(\"outline\", \"barcode\", \"Barcode\", __iconNode);\n\nexport { __iconNode, IconBarcode as default };\n//# sourceMappingURL=IconBarcode.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 7h11a2 2 0 0 1 2 2v.5a.5 .5 0 0 0 .5 .5a.5 .5 0 0 1 .5 .5v3a.5 .5 0 0 1 -.5 .5a.5 .5 0 0 0 -.5 .5v.5a2 2 0 0 1 -2 2h-11a2 2 0 0 1 -2 -2v-6a2 2 0 0 1 2 -2\", \"key\": \"svg-0\" }]];\nconst IconBattery = createReactComponent(\"outline\", \"battery\", \"Battery\", __iconNode);\n\nexport { __iconNode, IconBattery as default };\n//# sourceMappingURL=IconBattery.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 17v1a3 3 0 0 0 6 0v-1\", \"key\": \"svg-1\" }]];\nconst IconBell = createReactComponent(\"outline\", \"bell\", \"Bell\", __iconNode);\n\nexport { __iconNode, IconBell as default };\n//# sourceMappingURL=IconBell.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 6l0 13\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M12 6l0 13\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M21 6l0 13\", \"key\": \"svg-4\" }]];\nconst IconBook = createReactComponent(\"outline\", \"book\", \"Book\", __iconNode);\n\nexport { __iconNode, IconBook as default };\n//# sourceMappingURL=IconBook.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M6.5 16a3.5 3.5 0 0 1 0 -7h.5\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10\", \"key\": \"svg-5\" }]];\nconst IconBrain = createReactComponent(\"outline\", \"brain\", \"Brain\", __iconNode);\n\nexport { __iconNode, IconBrain as default };\n//# sourceMappingURL=IconBrain.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3\", \"key\": \"svg-0\" }]];\nconst IconBrandFacebook = createReactComponent(\"outline\", \"brand-facebook\", \"BrandFacebook\", __iconNode);\n\nexport { __iconNode, IconBrandFacebook as default };\n//# sourceMappingURL=IconBrandFacebook.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 11v5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 8v.01\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16v-5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16 16v-3a2 2 0 1 0 -4 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M3 7a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v10a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4l0 -10\", \"key\": \"svg-4\" }]];\nconst IconBrandLinkedin = createReactComponent(\"outline\", \"brand-linkedin\", \"BrandLinkedin\", __iconNode);\n\nexport { __iconNode, IconBrandLinkedin as default };\n//# sourceMappingURL=IconBrandLinkedin.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c0 -.249 1.51 -2.772 1.818 -4.013l0 .001\", \"key\": \"svg-0\" }]];\nconst IconBrandTwitter = createReactComponent(\"outline\", \"brand-twitter\", \"BrandTwitter\", __iconNode);\n\nexport { __iconNode, IconBrandTwitter as default };\n//# sourceMappingURL=IconBrandTwitter.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 12l0 .01\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M3 13a20 20 0 0 0 18 0\", \"key\": \"svg-3\" }]];\nconst IconBriefcase = createReactComponent(\"outline\", \"briefcase\", \"Briefcase\", __iconNode);\n\nexport { __iconNode, IconBriefcase as default };\n//# sourceMappingURL=IconBriefcase.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 21v-4a4 4 0 1 1 4 4h-4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 3a16 16 0 0 0 -12.8 10.2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M21 3a16 16 0 0 1 -10.2 12.8\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M10.6 9a9 9 0 0 1 4.4 4.4\", \"key\": \"svg-3\" }]];\nconst IconBrush = createReactComponent(\"outline\", \"brush\", \"Brush\", __iconNode);\n\nexport { __iconNode, IconBrush as default };\n//# sourceMappingURL=IconBrush.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 9v-1a3 3 0 0 1 6 0v1\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 13l4 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M17 13l4 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12 20l0 -6\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M4 19l3.35 -2\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M20 19l-3.35 -2\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M4 7l3.75 2.4\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M20 7l-3.75 2.4\", \"key\": \"svg-8\" }]];\nconst IconBug = createReactComponent(\"outline\", \"bug\", \"Bug\", __iconNode);\n\nexport { __iconNode, IconBug as default };\n//# sourceMappingURL=IconBug.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12h1m8 -9v1m8 8h1m-15.4 -6.4l.7 .7m12.1 -.7l-.7 .7\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 16a5 5 0 1 1 6 0a3.5 3.5 0 0 0 -1 3a2 2 0 0 1 -4 0a3.5 3.5 0 0 0 -1 -3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9.7 17l4.6 0\", \"key\": \"svg-2\" }]];\nconst IconBulb = createReactComponent(\"outline\", \"bulb\", \"Bulb\", __iconNode);\n\nexport { __iconNode, IconBulb as default };\n//# sourceMappingURL=IconBulb.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 3v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 3v4\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M4 11h16\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M11 15h1\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M12 15v3\", \"key\": \"svg-5\" }]];\nconst IconCalendar = createReactComponent(\"outline\", \"calendar\", \"Calendar\", __iconNode);\n\nexport { __iconNode, IconCalendar as default };\n//# sourceMappingURL=IconCalendar.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 13a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\", \"key\": \"svg-1\" }]];\nconst IconCamera = createReactComponent(\"outline\", \"camera\", \"Camera\", __iconNode);\n\nexport { __iconNode, IconCamera as default };\n//# sourceMappingURL=IconCamera.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 14l-6 -6l-6 6h12\", \"key\": \"svg-0\" }]];\nconst IconCaretUp = createReactComponent(\"outline\", \"caret-up\", \"CaretUp\", __iconNode);\n\nexport { __iconNode, IconCaretUp as default };\n//# sourceMappingURL=IconCaretUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 19l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 15l4 -6l4 2l4 -5l4 4l0 5l-16 0\", \"key\": \"svg-1\" }]];\nconst IconChartArea = createReactComponent(\"outline\", \"chart-area\", \"ChartArea\", __iconNode);\n\nexport { __iconNode, IconChartArea as default };\n//# sourceMappingURL=IconChartArea.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -10\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -14\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M4 20h14\", \"key\": \"svg-3\" }]];\nconst IconChartBar = createReactComponent(\"outline\", \"chart-bar\", \"ChartBar\", __iconNode);\n\nexport { __iconNode, IconChartBar as default };\n//# sourceMappingURL=IconChartBar.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 19l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 15l4 -6l4 2l4 -5l4 4\", \"key\": \"svg-1\" }]];\nconst IconChartLine = createReactComponent(\"outline\", \"chart-line\", \"ChartLine\", __iconNode);\n\nexport { __iconNode, IconChartLine as default };\n//# sourceMappingURL=IconChartLine.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10 3.2a9 9 0 1 0 10.8 10.8a1 1 0 0 0 -1 -1h-6.8a2 2 0 0 1 -2 -2v-7a.9 .9 0 0 0 -1 -.8\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 3.5a9 9 0 0 1 5.5 5.5h-4.5a1 1 0 0 1 -1 -1v-4.5\", \"key\": \"svg-1\" }]];\nconst IconChartPie = createReactComponent(\"outline\", \"chart-pie\", \"ChartPie\", __iconNode);\n\nexport { __iconNode, IconChartPie as default };\n//# sourceMappingURL=IconChartPie.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l5 5l10 -10\", \"key\": \"svg-0\" }]];\nconst IconCheck = createReactComponent(\"outline\", \"check\", \"Check\", __iconNode);\n\nexport { __iconNode, IconCheck as default };\n//# sourceMappingURL=IconCheck.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 9l6 6l6 -6\", \"key\": \"svg-0\" }]];\nconst IconChevronDown = createReactComponent(\"outline\", \"chevron-down\", \"ChevronDown\", __iconNode);\n\nexport { __iconNode, IconChevronDown as default };\n//# sourceMappingURL=IconChevronDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronLeft = createReactComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", __iconNode);\n\nexport { __iconNode, IconChevronLeft as default };\n//# sourceMappingURL=IconChevronLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronRight = createReactComponent(\"outline\", \"chevron-right\", \"ChevronRight\", __iconNode);\n\nexport { __iconNode, IconChevronRight as default };\n//# sourceMappingURL=IconChevronRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 15l6 -6l6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronUp = createReactComponent(\"outline\", \"chevron-up\", \"ChevronUp\", __iconNode);\n\nexport { __iconNode, IconChevronUp as default };\n//# sourceMappingURL=IconChevronUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 12l2 2l4 -4\", \"key\": \"svg-1\" }]];\nconst IconCircleCheck = createReactComponent(\"outline\", \"circle-check\", \"CircleCheck\", __iconNode);\n\nexport { __iconNode, IconCircleCheck as default };\n//# sourceMappingURL=IconCircleCheck.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8.56 3.69a9 9 0 0 0 -2.92 1.95\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.69 8.56a9 9 0 0 0 -.69 3.44\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3.69 15.44a9 9 0 0 0 1.95 2.92\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M8.56 20.31a9 9 0 0 0 3.44 .69\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M15.44 20.31a9 9 0 0 0 2.92 -1.95\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M20.31 15.44a9 9 0 0 0 .69 -3.44\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M20.31 8.56a9 9 0 0 0 -1.95 -2.92\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M15.44 3.69a9 9 0 0 0 -3.44 -.69\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M14 14l-4 -4\", \"key\": \"svg-8\" }], [\"path\", { \"d\": \"M10 14l4 -4\", \"key\": \"svg-9\" }]];\nconst IconCircleDashedX = createReactComponent(\"outline\", \"circle-dashed-x\", \"CircleDashedX\", __iconNode);\n\nexport { __iconNode, IconCircleDashedX as default };\n//# sourceMappingURL=IconCircleDashedX.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8.56 3.69a9 9 0 0 0 -2.92 1.95\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.69 8.56a9 9 0 0 0 -.69 3.44\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3.69 15.44a9 9 0 0 0 1.95 2.92\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M8.56 20.31a9 9 0 0 0 3.44 .69\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M15.44 20.31a9 9 0 0 0 2.92 -1.95\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M20.31 15.44a9 9 0 0 0 .69 -3.44\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M20.31 8.56a9 9 0 0 0 -1.95 -2.92\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M15.44 3.69a9 9 0 0 0 -3.44 -.69\", \"key\": \"svg-7\" }]];\nconst IconCircleDashed = createReactComponent(\"outline\", \"circle-dashed\", \"CircleDashed\", __iconNode);\n\nexport { __iconNode, IconCircleDashed as default };\n//# sourceMappingURL=IconCircleDashed.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }]];\nconst IconCircle = createReactComponent(\"outline\", \"circle\", \"Circle\", __iconNode);\n\nexport { __iconNode, IconCircle as default };\n//# sourceMappingURL=IconCircle.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 5a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2\", \"key\": \"svg-1\" }]];\nconst IconClipboard = createReactComponent(\"outline\", \"clipboard\", \"Clipboard\", __iconNode);\n\nexport { __iconNode, IconClipboard as default };\n//# sourceMappingURL=IconClipboard.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 7v5l3 3\", \"key\": \"svg-1\" }]];\nconst IconClock = createReactComponent(\"outline\", \"clock\", \"Clock\", __iconNode);\n\nexport { __iconNode, IconClock as default };\n//# sourceMappingURL=IconClock.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878\", \"key\": \"svg-0\" }]];\nconst IconCloud = createReactComponent(\"outline\", \"cloud\", \"Cloud\", __iconNode);\n\nexport { __iconNode, IconCloud as default };\n//# sourceMappingURL=IconCloud.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 8l-4 4l4 4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 8l4 4l-4 4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14 4l-4 16\", \"key\": \"svg-2\" }]];\nconst IconCode = createReactComponent(\"outline\", \"code\", \"Code\", __iconNode);\n\nexport { __iconNode, IconCode as default };\n//# sourceMappingURL=IconCode.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 16l2 -6l6 -2l-2 6l-6 2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 3l0 2\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M12 19l0 2\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M3 12l2 0\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M19 12l2 0\", \"key\": \"svg-5\" }]];\nconst IconCompass = createReactComponent(\"outline\", \"compass\", \"Compass\", __iconNode);\n\nexport { __iconNode, IconCompass as default };\n//# sourceMappingURL=IconCompass.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1\", \"key\": \"svg-1\" }]];\nconst IconCopy = createReactComponent(\"outline\", \"copy\", \"Copy\", __iconNode);\n\nexport { __iconNode, IconCopy as default };\n//# sourceMappingURL=IconCopy.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 6a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1l0 -12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 9h6v6h-6l0 -6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 10h2\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M3 14h2\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M10 3v2\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M14 3v2\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M21 10h-2\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M21 14h-2\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M14 21v-2\", \"key\": \"svg-8\" }], [\"path\", { \"d\": \"M10 21v-2\", \"key\": \"svg-9\" }]];\nconst IconCpu = createReactComponent(\"outline\", \"cpu\", \"Cpu\", __iconNode);\n\nexport { __iconNode, IconCpu as default };\n//# sourceMappingURL=IconCpu.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 8a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3l0 -8\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 10l18 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M7 15l.01 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M11 15l2 0\", \"key\": \"svg-3\" }]];\nconst IconCreditCard = createReactComponent(\"outline\", \"credit-card\", \"CreditCard\", __iconNode);\n\nexport { __iconNode, IconCreditCard as default };\n//# sourceMappingURL=IconCreditCard.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 11h14v-3h-14l0 3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17.5 11l-1.5 10h-8l-1.5 -10\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 8v-1a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v1\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15 5v-2\", \"key\": \"svg-3\" }]];\nconst IconCup = createReactComponent(\"outline\", \"cup\", \"Cup\", __iconNode);\n\nexport { __iconNode, IconCup as default };\n//# sourceMappingURL=IconCup.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 3v3m0 12v3\", \"key\": \"svg-1\" }]];\nconst IconCurrencyDollar = createReactComponent(\"outline\", \"currency-dollar\", \"CurrencyDollar\", __iconNode);\n\nexport { __iconNode, IconCurrencyDollar as default };\n//# sourceMappingURL=IconCurrencyDollar.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 6a8 3 0 1 0 16 0a8 3 0 1 0 -16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 6v6a8 3 0 0 0 16 0v-6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 12v6a8 3 0 0 0 16 0v-6\", \"key\": \"svg-2\" }]];\nconst IconDatabase = createReactComponent(\"outline\", \"database\", \"Database\", __iconNode);\n\nexport { __iconNode, IconDatabase as default };\n//# sourceMappingURL=IconDatabase.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconDotsVertical = createReactComponent(\"outline\", \"dots-vertical\", \"DotsVertical\", __iconNode);\n\nexport { __iconNode, IconDotsVertical as default };\n//# sourceMappingURL=IconDotsVertical.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconDots = createReactComponent(\"outline\", \"dots\", \"Dots\", __iconNode);\n\nexport { __iconNode, IconDots as default };\n//# sourceMappingURL=IconDots.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7 11l5 5l5 -5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 4l0 12\", \"key\": \"svg-2\" }]];\nconst IconDownload = createReactComponent(\"outline\", \"download\", \"Download\", __iconNode);\n\nexport { __iconNode, IconDownload as default };\n//# sourceMappingURL=IconDownload.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7.502 19.423c2.602 2.105 6.395 2.105 8.996 0c2.602 -2.105 3.262 -5.708 1.566 -8.546l-4.89 -7.26c-.42 -.625 -1.287 -.803 -1.936 -.397a1.376 1.376 0 0 0 -.41 .397l-4.893 7.26c-1.695 2.838 -1.035 6.441 1.567 8.546\", \"key\": \"svg-0\" }]];\nconst IconDroplet = createReactComponent(\"outline\", \"droplet\", \"Droplet\", __iconNode);\n\nexport { __iconNode, IconDroplet as default };\n//# sourceMappingURL=IconDroplet.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M16 5l3 3\", \"key\": \"svg-2\" }]];\nconst IconEdit = createReactComponent(\"outline\", \"edit\", \"Edit\", __iconNode);\n\nexport { __iconNode, IconEdit as default };\n//# sourceMappingURL=IconEdit.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10.585 10.587a2 2 0 0 0 2.829 2.828\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 3l18 18\", \"key\": \"svg-2\" }]];\nconst IconEyeOff = createReactComponent(\"outline\", \"eye-off\", \"EyeOff\", __iconNode);\n\nexport { __iconNode, IconEyeOff as default };\n//# sourceMappingURL=IconEyeOff.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6\", \"key\": \"svg-1\" }]];\nconst IconEye = createReactComponent(\"outline\", \"eye\", \"Eye\", __iconNode);\n\nexport { __iconNode, IconEye as default };\n//# sourceMappingURL=IconEye.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 9l1 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M9 13l6 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M9 17l6 0\", \"key\": \"svg-4\" }]];\nconst IconFileText = createReactComponent(\"outline\", \"file-text\", \"FileText\", __iconNode);\n\nexport { __iconNode, IconFileText as default };\n//# sourceMappingURL=IconFileText.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2\", \"key\": \"svg-1\" }]];\nconst IconFile = createReactComponent(\"outline\", \"file\", \"File\", __iconNode);\n\nexport { __iconNode, IconFile as default };\n//# sourceMappingURL=IconFile.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 10.941c2.333 -3.308 .167 -7.823 -1 -8.941c0 3.395 -2.235 5.299 -3.667 6.706c-1.43 1.408 -2.333 3.294 -2.333 5.588c0 3.704 3.134 6.706 7 6.706c3.866 0 7 -3.002 7 -6.706c0 -1.712 -1.232 -4.403 -2.333 -5.588c-2.084 3.353 -3.257 3.353 -4.667 2.235\", \"key\": \"svg-0\" }]];\nconst IconFlame = createReactComponent(\"outline\", \"flame\", \"Flame\", __iconNode);\n\nexport { __iconNode, IconFlame as default };\n//# sourceMappingURL=IconFlame.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 3l6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 9l4 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M10 3v6l-4 11a.7 .7 0 0 0 .5 1h11a.7 .7 0 0 0 .5 -1l-4 -11v-6\", \"key\": \"svg-2\" }]];\nconst IconFlask = createReactComponent(\"outline\", \"flask\", \"Flask\", __iconNode);\n\nexport { __iconNode, IconFlask as default };\n//# sourceMappingURL=IconFlask.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 2a3 3 0 0 1 3 3c0 .562 -.259 1.442 -.776 2.64l-.724 1.36l1.76 -1.893c.499 -.6 .922 -1 1.27 -1.205a2.968 2.968 0 0 1 4.07 1.099a3.011 3.011 0 0 1 -1.09 4.098c-.374 .217 -.99 .396 -1.846 .535l-2.664 .366l2.4 .326c1 .145 1.698 .337 2.11 .576a3.011 3.011 0 0 1 1.09 4.098a2.968 2.968 0 0 1 -4.07 1.098c-.348 -.202 -.771 -.604 -1.27 -1.205l-1.76 -1.893l.724 1.36c.516 1.199 .776 2.079 .776 2.64a3 3 0 0 1 -6 0c0 -.562 .259 -1.442 .776 -2.64l.724 -1.36l-1.76 1.893c-.499 .601 -.922 1 -1.27 1.205a2.968 2.968 0 0 1 -4.07 -1.098a3.011 3.011 0 0 1 1.09 -4.098c.374 -.218 .99 -.396 1.846 -.536l2.664 -.366l-2.4 -.325c-1 -.145 -1.698 -.337 -2.11 -.576a3.011 3.011 0 0 1 -1.09 -4.099a2.968 2.968 0 0 1 4.07 -1.099c.348 .203 .771 .604 1.27 1.205l1.76 1.894c-1 -2.292 -1.5 -3.625 -1.5 -4a3 3 0 0 1 3 -3\", \"key\": \"svg-1\" }]];\nconst IconFlower = createReactComponent(\"outline\", \"flower\", \"Flower\", __iconNode);\n\nexport { __iconNode, IconFlower as default };\n//# sourceMappingURL=IconFlower.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 19l2.757 -7.351a1 1 0 0 1 .936 -.649h12.307a1 1 0 0 1 .986 1.164l-.996 5.211a2 2 0 0 1 -1.964 1.625h-14.026a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v2\", \"key\": \"svg-0\" }]];\nconst IconFolderOpen = createReactComponent(\"outline\", \"folder-open\", \"FolderOpen\", __iconNode);\n\nexport { __iconNode, IconFolderOpen as default };\n//# sourceMappingURL=IconFolderOpen.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2\", \"key\": \"svg-0\" }]];\nconst IconFolder = createReactComponent(\"outline\", \"folder\", \"Folder\", __iconNode);\n\nexport { __iconNode, IconFolder as default };\n//# sourceMappingURL=IconFolder.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 9a1 1 0 0 1 1 -1h16a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1l0 -2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8l0 13\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M19 12v7a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-7\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M7.5 8a2.5 2.5 0 0 1 0 -5a4.8 8 0 0 1 4.5 5a4.8 8 0 0 1 4.5 -5a2.5 2.5 0 0 1 0 5\", \"key\": \"svg-3\" }]];\nconst IconGift = createReactComponent(\"outline\", \"gift\", \"Gift\", __iconNode);\n\nexport { __iconNode, IconGift as default };\n//# sourceMappingURL=IconGift.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 9a4 4 0 1 0 8 0a4 4 0 0 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5.75 15a8.015 8.015 0 1 0 9.25 -13\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 17v4\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M7 21h8\", \"key\": \"svg-3\" }]];\nconst IconGlobe = createReactComponent(\"outline\", \"globe\", \"Globe\", __iconNode);\n\nexport { __iconNode, IconGlobe as default };\n//# sourceMappingURL=IconGlobe.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 8h18\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 16h18\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 3v18\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16 3v18\", \"key\": \"svg-3\" }]];\nconst IconGrid3x3 = createReactComponent(\"outline\", \"grid-3x3\", \"Grid3x3\", __iconNode);\n\nexport { __iconNode, IconGrid3x3 as default };\n//# sourceMappingURL=IconGrid3x3.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M11 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M18 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-5\" }]];\nconst IconGripHorizontal = createReactComponent(\"outline\", \"grip-horizontal\", \"GripHorizontal\", __iconNode);\n\nexport { __iconNode, IconGripHorizontal as default };\n//# sourceMappingURL=IconGripHorizontal.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 15a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v3a2 2 0 0 1 -2 2h-1a2 2 0 0 1 -2 -2l0 -3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 15a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v3a2 2 0 0 1 -2 2h-1a2 2 0 0 1 -2 -2l0 -3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M4 15v-3a8 8 0 0 1 16 0v3\", \"key\": \"svg-2\" }]];\nconst IconHeadphones = createReactComponent(\"outline\", \"headphones\", \"Headphones\", __iconNode);\n\nexport { __iconNode, IconHeadphones as default };\n//# sourceMappingURL=IconHeadphones.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572\", \"key\": \"svg-0\" }]];\nconst IconHeart = createReactComponent(\"outline\", \"heart\", \"Heart\", __iconNode);\n\nexport { __iconNode, IconHeart as default };\n//# sourceMappingURL=IconHeart.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 8l0 4l2 2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5\", \"key\": \"svg-1\" }]];\nconst IconHistory = createReactComponent(\"outline\", \"history\", \"History\", __iconNode);\n\nexport { __iconNode, IconHistory as default };\n//# sourceMappingURL=IconHistory.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l-2 0l9 -9l9 9l-2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6\", \"key\": \"svg-2\" }]];\nconst IconHome = createReactComponent(\"outline\", \"home\", \"Home\", __iconNode);\n\nexport { __iconNode, IconHome as default };\n//# sourceMappingURL=IconHome.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 9h.01\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 12h1v4h1\", \"key\": \"svg-2\" }]];\nconst IconInfoCircle = createReactComponent(\"outline\", \"info-circle\", \"InfoCircle\", __iconNode);\n\nexport { __iconNode, IconInfoCircle as default };\n//# sourceMappingURL=IconInfoCircle.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 9h.01\", \"key\": \"svg-1\" }]];\nconst IconKey = createReactComponent(\"outline\", \"key\", \"Key\", __iconNode);\n\nexport { __iconNode, IconKey as default };\n//# sourceMappingURL=IconKey.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 6l11 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 12l11 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 18l11 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M5 6l0 .01\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M5 12l0 .01\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M5 18l0 .01\", \"key\": \"svg-5\" }]];\nconst IconList = createReactComponent(\"outline\", \"list\", \"List\", __iconNode);\n\nexport { __iconNode, IconList as default };\n//# sourceMappingURL=IconList.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]];\nconst IconLoader2 = createReactComponent(\"outline\", \"loader-2\", \"Loader2\", __iconNode);\n\nexport { __iconNode, IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 6l0 -3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16.25 7.75l2.15 -2.15\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 12l3 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16.25 16.25l2.15 2.15\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12 18l0 3\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M7.75 16.25l-2.15 2.15\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M6 12l-3 0\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M7.75 7.75l-2.15 -2.15\", \"key\": \"svg-7\" }]];\nconst IconLoader = createReactComponent(\"outline\", \"loader\", \"Loader\", __iconNode);\n\nexport { __iconNode, IconLoader as default };\n//# sourceMappingURL=IconLoader.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M21 3l-6.5 18a.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a.55 .55 0 0 1 0 -1l18 -6.5\", \"key\": \"svg-0\" }]];\nconst IconLocation = createReactComponent(\"outline\", \"location\", \"Location\", __iconNode);\n\nexport { __iconNode, IconLocation as default };\n//# sourceMappingURL=IconLocation.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2l0 -6\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M13 11v-4a4 4 0 1 1 8 0v4\", \"key\": \"svg-2\" }]];\nconst IconLockOpen2 = createReactComponent(\"outline\", \"lock-open-2\", \"LockOpen2\", __iconNode);\n\nexport { __iconNode, IconLockOpen2 as default };\n//# sourceMappingURL=IconLockOpen2.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 11v-4a4 4 0 1 1 8 0v4\", \"key\": \"svg-2\" }]];\nconst IconLock = createReactComponent(\"outline\", \"lock\", \"Lock\", __iconNode);\n\nexport { __iconNode, IconLock as default };\n//# sourceMappingURL=IconLock.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 7l9 6l9 -6\", \"key\": \"svg-1\" }]];\nconst IconMail = createReactComponent(\"outline\", \"mail\", \"Mail\", __iconNode);\n\nexport { __iconNode, IconMail as default };\n//# sourceMappingURL=IconMail.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0\", \"key\": \"svg-1\" }]];\nconst IconMapPin = createReactComponent(\"outline\", \"map-pin\", \"MapPin\", __iconNode);\n\nexport { __iconNode, IconMapPin as default };\n//# sourceMappingURL=IconMapPin.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 8l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 16l16 0\", \"key\": \"svg-1\" }]];\nconst IconMenu = createReactComponent(\"outline\", \"menu\", \"Menu\", __iconNode);\n\nexport { __iconNode, IconMenu as default };\n//# sourceMappingURL=IconMenu.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1\", \"key\": \"svg-0\" }]];\nconst IconMessageCircle = createReactComponent(\"outline\", \"message-circle\", \"MessageCircle\", __iconNode);\n\nexport { __iconNode, IconMessageCircle as default };\n//# sourceMappingURL=IconMessageCircle.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 9h8\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 13h6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12\", \"key\": \"svg-2\" }]];\nconst IconMessage = createReactComponent(\"outline\", \"message\", \"Message\", __iconNode);\n\nexport { __iconNode, IconMessage as default };\n//# sourceMappingURL=IconMessage.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 3l18 18\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M8 21l8 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12 17l0 4\", \"key\": \"svg-4\" }]];\nconst IconMicrophoneOff = createReactComponent(\"outline\", \"microphone-off\", \"MicrophoneOff\", __iconNode);\n\nexport { __iconNode, IconMicrophoneOff as default };\n//# sourceMappingURL=IconMicrophoneOff.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 5a3 3 0 0 1 3 -3a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3a3 3 0 0 1 -3 -3l0 -5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 10a7 7 0 0 0 14 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 21l8 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M12 17l0 4\", \"key\": \"svg-3\" }]];\nconst IconMicrophone = createReactComponent(\"outline\", \"microphone\", \"Microphone\", __iconNode);\n\nexport { __iconNode, IconMicrophone as default };\n//# sourceMappingURL=IconMicrophone.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }]];\nconst IconMinus = createReactComponent(\"outline\", \"minus\", \"Minus\", __iconNode);\n\nexport { __iconNode, IconMinus as default };\n//# sourceMappingURL=IconMinus.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454l0 .008\", \"key\": \"svg-0\" }]];\nconst IconMoon = createReactComponent(\"outline\", \"moon\", \"Moon\", __iconNode);\n\nexport { __iconNode, IconMoon as default };\n//# sourceMappingURL=IconMoon.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 17a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M14.42 14.45a3 3 0 1 0 4.138 4.119\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 17v-8m0 -4v-1h10v11\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M12 8h7\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M3 3l18 18\", \"key\": \"svg-4\" }]];\nconst IconMusicOff = createReactComponent(\"outline\", \"music-off\", \"MusicOff\", __iconNode);\n\nexport { __iconNode, IconMusicOff as default };\n//# sourceMappingURL=IconMusicOff.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 17a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M13 17a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9 17v-13h10v13\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M9 8h10\", \"key\": \"svg-3\" }]];\nconst IconMusic = createReactComponent(\"outline\", \"music\", \"Music\", __iconNode);\n\nexport { __iconNode, IconMusic as default };\n//# sourceMappingURL=IconMusic.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M13 20l7 -7\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M13 20v-6a1 1 0 0 1 1 -1h6v-7a2 2 0 0 0 -2 -2h-12a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7\", \"key\": \"svg-1\" }]];\nconst IconNote = createReactComponent(\"outline\", \"note\", \"Note\", __iconNode);\n\nexport { __iconNode, IconNote as default };\n//# sourceMappingURL=IconNote.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 21a9 9 0 0 1 0 -18c4.97 0 9 3.582 9 8c0 1.06 -.474 2.078 -1.318 2.828c-.844 .75 -1.989 1.172 -3.182 1.172h-2.5a2 2 0 0 0 -1 3.75a1.3 1.3 0 0 1 -1 2.25\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M15.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-3\" }]];\nconst IconPalette = createReactComponent(\"outline\", \"palette\", \"Palette\", __iconNode);\n\nexport { __iconNode, IconPalette as default };\n//# sourceMappingURL=IconPalette.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 7l-6.5 6.5a1.5 1.5 0 0 0 3 3l6.5 -6.5a3 3 0 0 0 -6 -6l-6.5 6.5a4.5 4.5 0 0 0 9 9l6.5 -6.5\", \"key\": \"svg-0\" }]];\nconst IconPaperclip = createReactComponent(\"outline\", \"paperclip\", \"Paperclip\", __iconNode);\n\nexport { __iconNode, IconPaperclip as default };\n//# sourceMappingURL=IconPaperclip.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M14.7 13.5c-1.1 -2 -1.441 -2.5 -2.7 -2.5c-1.259 0 -1.736 .755 -2.836 2.747c-.942 1.703 -2.846 1.845 -3.321 3.291c-.097 .265 -.145 .677 -.143 .962c0 1.176 .787 2 1.8 2c1.259 0 3 -1 4.5 -1s3.241 1 4.5 1c1.013 0 1.8 -.823 1.8 -2c0 -.285 -.049 -.697 -.146 -.962c-.475 -1.451 -2.512 -1.835 -3.454 -3.538\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M20.188 8.082a1.039 1.039 0 0 0 -.406 -.082h-.015c-.735 .012 -1.56 .75 -1.993 1.866c-.519 1.335 -.28 2.7 .538 3.052c.129 .055 .267 .082 .406 .082c.739 0 1.575 -.742 2.011 -1.866c.516 -1.335 .273 -2.7 -.54 -3.052l-.001 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9.474 9c.055 0 .109 0 .163 -.011c.944 -.128 1.533 -1.346 1.32 -2.722c-.203 -1.297 -1.047 -2.267 -1.932 -2.267c-.055 0 -.109 0 -.163 .011c-.944 .128 -1.533 1.346 -1.32 2.722c.204 1.293 1.048 2.267 1.933 2.267\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M16.456 6.733c.214 -1.376 -.375 -2.594 -1.32 -2.722a1.164 1.164 0 0 0 -.162 -.011c-.885 0 -1.728 .97 -1.93 2.267c-.214 1.376 .375 2.594 1.32 2.722c.054 .007 .108 .011 .162 .011c.885 0 1.73 -.974 1.93 -2.267\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M5.69 12.918c.816 -.352 1.054 -1.719 .536 -3.052c-.436 -1.124 -1.271 -1.866 -2.009 -1.866c-.14 0 -.277 .027 -.407 .082c-.816 .352 -1.054 1.719 -.536 3.052c.436 1.124 1.271 1.866 2.009 1.866c.14 0 .277 -.027 .407 -.082\", \"key\": \"svg-4\" }]];\nconst IconPaw = createReactComponent(\"outline\", \"paw\", \"Paw\", __iconNode);\n\nexport { __iconNode, IconPaw as default };\n//# sourceMappingURL=IconPaw.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M13.5 6.5l4 4\", \"key\": \"svg-1\" }]];\nconst IconPencil = createReactComponent(\"outline\", \"pencil\", \"Pencil\", __iconNode);\n\nexport { __iconNode, IconPencil as default };\n//# sourceMappingURL=IconPencil.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2\", \"key\": \"svg-0\" }]];\nconst IconPhone = createReactComponent(\"outline\", \"phone\", \"Phone\", __iconNode);\n\nexport { __iconNode, IconPhone as default };\n//# sourceMappingURL=IconPhone.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 8h.01\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3\", \"key\": \"svg-3\" }]];\nconst IconPhoto = createReactComponent(\"outline\", \"photo\", \"Photo\", __iconNode);\n\nexport { __iconNode, IconPhoto as default };\n//# sourceMappingURL=IconPhoto.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 4.5l-4 4l-4 1.5l-1.5 1.5l7 7l1.5 -1.5l1.5 -4l4 -4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 15l-4.5 4.5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14.5 4l5.5 5.5\", \"key\": \"svg-2\" }]];\nconst IconPin = createReactComponent(\"outline\", \"pin\", \"Pin\", __iconNode);\n\nexport { __iconNode, IconPin as default };\n//# sourceMappingURL=IconPin.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M16 10h4a2 2 0 0 1 0 4h-4l-4 7h-3l2 -7h-4l-2 2h-3l2 -4l-2 -4h3l2 2h4l-2 -7h3l4 7\", \"key\": \"svg-0\" }]];\nconst IconPlane = createReactComponent(\"outline\", \"plane\", \"Plane\", __iconNode);\n\nexport { __iconNode, IconPlane as default };\n//# sourceMappingURL=IconPlane.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 15h10v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2v-4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 9a6 6 0 0 0 -6 -6h-3v2a6 6 0 0 0 6 6h3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 11a6 6 0 0 1 6 -6h3v1a6 6 0 0 1 -6 6h-3\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M12 15l0 -6\", \"key\": \"svg-3\" }]];\nconst IconPlant = createReactComponent(\"outline\", \"plant\", \"Plant\", __iconNode);\n\nexport { __iconNode, IconPlant as default };\n//# sourceMappingURL=IconPlant.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M14 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12\", \"key\": \"svg-1\" }]];\nconst IconPlayerPause = createReactComponent(\"outline\", \"player-pause\", \"PlayerPause\", __iconNode);\n\nexport { __iconNode, IconPlayerPause as default };\n//# sourceMappingURL=IconPlayerPause.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 4v16l13 -8l-13 -8\", \"key\": \"svg-0\" }]];\nconst IconPlayerPlay = createReactComponent(\"outline\", \"player-play\", \"PlayerPlay\", __iconNode);\n\nexport { __iconNode, IconPlayerPlay as default };\n//# sourceMappingURL=IconPlayerPlay.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M20 5v14l-12 -7l12 -7\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 5l0 14\", \"key\": \"svg-1\" }]];\nconst IconPlayerSkipBack = createReactComponent(\"outline\", \"player-skip-back\", \"PlayerSkipBack\", __iconNode);\n\nexport { __iconNode, IconPlayerSkipBack as default };\n//# sourceMappingURL=IconPlayerSkipBack.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 5v14l12 -7l-12 -7\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M20 5l0 14\", \"key\": \"svg-1\" }]];\nconst IconPlayerSkipForward = createReactComponent(\"outline\", \"player-skip-forward\", \"PlayerSkipForward\", __iconNode);\n\nexport { __iconNode, IconPlayerSkipForward as default };\n//# sourceMappingURL=IconPlayerSkipForward.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-1\" }]];\nconst IconPlus = createReactComponent(\"outline\", \"plus\", \"Plus\", __iconNode);\n\nexport { __iconNode, IconPlus as default };\n//# sourceMappingURL=IconPlus.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 12v-3a3 3 0 0 1 3 -3h13m-3 -3l3 3l-3 3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M20 12v3a3 3 0 0 1 -3 3h-13m3 3l-3 -3l3 -3\", \"key\": \"svg-1\" }]];\nconst IconRepeat = createReactComponent(\"outline\", \"repeat\", \"Repeat\", __iconNode);\n\nexport { __iconNode, IconRepeat as default };\n//# sourceMappingURL=IconRepeat.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconRocket = createReactComponent(\"outline\", \"rocket\", \"Rocket\", __iconNode);\n\nexport { __iconNode, IconRocket as default };\n//# sourceMappingURL=IconRocket.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 20l10 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l6 -1l6 1\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 3l0 17\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M9 12l-3 -6l-3 6a3 3 0 0 0 6 0\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M21 12l-3 -6l-3 6a3 3 0 0 0 6 0\", \"key\": \"svg-4\" }]];\nconst IconScale = createReactComponent(\"outline\", \"scale\", \"Scale\", __iconNode);\n\nexport { __iconNode, IconScale as default };\n//# sourceMappingURL=IconScale.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M21 21l-6 -6\", \"key\": \"svg-1\" }]];\nconst IconSearch = createReactComponent(\"outline\", \"search\", \"Search\", __iconNode);\n\nexport { __iconNode, IconSearch as default };\n//# sourceMappingURL=IconSearch.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 9l4 -4l4 4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 15l-4 4l-4 -4\", \"key\": \"svg-1\" }]];\nconst IconSelector = createReactComponent(\"outline\", \"selector\", \"Selector\", __iconNode);\n\nexport { __iconNode, IconSelector as default };\n//# sourceMappingURL=IconSelector.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\", \"key\": \"svg-1\" }]];\nconst IconSettings = createReactComponent(\"outline\", \"settings\", \"Settings\", __iconNode);\n\nexport { __iconNode, IconSettings as default };\n//# sourceMappingURL=IconSettings.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 6a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M15 18a3 3 0 1 0 6 0a3 3 0 1 0 -6 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M8.7 10.7l6.6 -3.4\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M8.7 13.3l6.6 3.4\", \"key\": \"svg-4\" }]];\nconst IconShare = createReactComponent(\"outline\", \"share\", \"Share\", __iconNode);\n\nexport { __iconNode, IconShare as default };\n//# sourceMappingURL=IconShare.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3\", \"key\": \"svg-0\" }]];\nconst IconShield = createReactComponent(\"outline\", \"shield\", \"Shield\", __iconNode);\n\nexport { __iconNode, IconShield as default };\n//# sourceMappingURL=IconShield.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 19a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M15 19a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M17 17h-11v-14h-2\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M6 5l14 1l-1 7h-13\", \"key\": \"svg-3\" }]];\nconst IconShoppingCart = createReactComponent(\"outline\", \"shopping-cart\", \"ShoppingCart\", __iconNode);\n\nexport { __iconNode, IconShoppingCart as default };\n//# sourceMappingURL=IconShoppingCart.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 8a3 3 0 0 1 0 6\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 8v11a1 1 0 0 1 -1 1h-1a1 1 0 0 1 -1 -1v-5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 8l4.524 -3.77a.9 .9 0 0 1 1.476 .692v12.156a.9 .9 0 0 1 -1.476 .692l-4.524 -3.77h-8a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h8\", \"key\": \"svg-2\" }]];\nconst IconSpeakerphone = createReactComponent(\"outline\", \"speakerphone\", \"Speakerphone\", __iconNode);\n\nexport { __iconNode, IconSpeakerphone as default };\n//# sourceMappingURL=IconSpeakerphone.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873l-6.158 -3.245\", \"key\": \"svg-0\" }]];\nconst IconStar = createReactComponent(\"outline\", \"star\", \"Star\", __iconNode);\n\nexport { __iconNode, IconStar as default };\n//# sourceMappingURL=IconStar.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 4h-1a2 2 0 0 0 -2 2v3.5a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 15a6 6 0 1 0 12 0v-3\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 3v2\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M6 3v2\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M18 10a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\", \"key\": \"svg-4\" }]];\nconst IconStethoscope = createReactComponent(\"outline\", \"stethoscope\", \"Stethoscope\", __iconNode);\n\nexport { __iconNode, IconStethoscope as default };\n//# sourceMappingURL=IconStethoscope.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7\", \"key\": \"svg-1\" }]];\nconst IconSun = createReactComponent(\"outline\", \"sun\", \"Sun\", __iconNode);\n\nexport { __iconNode, IconSun as default };\n//# sourceMappingURL=IconSun.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3\", \"key\": \"svg-1\" }]];\nconst IconTag = createReactComponent(\"outline\", \"tag\", \"Tag\", __iconNode);\n\nexport { __iconNode, IconTag as default };\n//# sourceMappingURL=IconTag.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 7l5 5l-5 5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 19l7 0\", \"key\": \"svg-1\" }]];\nconst IconTerminal = createReactComponent(\"outline\", \"terminal\", \"Terminal\", __iconNode);\n\nexport { __iconNode, IconTerminal as default };\n//# sourceMappingURL=IconTerminal.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3\", \"key\": \"svg-0\" }]];\nconst IconThumbDown = createReactComponent(\"outline\", \"thumb-down\", \"ThumbDown\", __iconNode);\n\nexport { __iconNode, IconThumbDown as default };\n//# sourceMappingURL=IconThumbDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3\", \"key\": \"svg-0\" }]];\nconst IconThumbUp = createReactComponent(\"outline\", \"thumb-up\", \"ThumbUp\", __iconNode);\n\nexport { __iconNode, IconThumbUp as default };\n//# sourceMappingURL=IconThumbUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 10h3v-3l-3.5 -3.5a6 6 0 0 1 8 8l6 6a2 2 0 0 1 -3 3l-6 -6a6 6 0 0 1 -8 -8l3.5 3.5\", \"key\": \"svg-0\" }]];\nconst IconTool = createReactComponent(\"outline\", \"tool\", \"Tool\", __iconNode);\n\nexport { __iconNode, IconTool as default };\n//# sourceMappingURL=IconTool.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 7l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 11l0 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14 11l0 6\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\", \"key\": \"svg-4\" }]];\nconst IconTrash = createReactComponent(\"outline\", \"trash\", \"Trash\", __iconNode);\n\nexport { __iconNode, IconTrash as default };\n//# sourceMappingURL=IconTrash.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7 9l5 -5l5 5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 4l0 12\", \"key\": \"svg-2\" }]];\nconst IconUpload = createReactComponent(\"outline\", \"upload\", \"Upload\", __iconNode);\n\nexport { __iconNode, IconUpload as default };\n//# sourceMappingURL=IconUpload.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2\", \"key\": \"svg-1\" }]];\nconst IconUser = createReactComponent(\"outline\", \"user\", \"User\", __iconNode);\n\nexport { __iconNode, IconUser as default };\n//# sourceMappingURL=IconUser.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M16 3.13a4 4 0 0 1 0 7.75\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M21 21v-2a4 4 0 0 0 -3 -3.85\", \"key\": \"svg-3\" }]];\nconst IconUsers = createReactComponent(\"outline\", \"users\", \"Users\", __iconNode);\n\nexport { __iconNode, IconUsers as default };\n//# sourceMappingURL=IconUsers.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 8a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2l0 -8\", \"key\": \"svg-1\" }]];\nconst IconVideo = createReactComponent(\"outline\", \"video\", \"Video\", __iconNode);\n\nexport { __iconNode, IconVideo as default };\n//# sourceMappingURL=IconVideo.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 8a5 5 0 0 1 1.912 4.934m-1.377 2.602a5 5 0 0 1 -.535 .464\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17.7 5a9 9 0 0 1 2.362 11.086m-1.676 2.299a9 9 0 0 1 -.686 .615\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M9.069 5.054l.431 -.554a.8 .8 0 0 1 1.5 .5v2m0 4v8a.8 .8 0 0 1 -1.5 .5l-3.5 -4.5h-2a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h2l1.294 -1.664\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M3 3l18 18\", \"key\": \"svg-3\" }]];\nconst IconVolumeOff = createReactComponent(\"outline\", \"volume-off\", \"VolumeOff\", __iconNode);\n\nexport { __iconNode, IconVolumeOff as default };\n//# sourceMappingURL=IconVolumeOff.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 8a5 5 0 0 1 0 8\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17.7 5a9 9 0 0 1 0 14\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 15h-2a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h2l3.5 -4.5a.8 .8 0 0 1 1.5 .5v14a.8 .8 0 0 1 -1.5 .5l-3.5 -4.5\", \"key\": \"svg-2\" }]];\nconst IconVolume = createReactComponent(\"outline\", \"volume\", \"Volume\", __iconNode);\n\nexport { __iconNode, IconVolume as default };\n//# sourceMappingURL=IconVolume.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 18l.01 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9.172 15.172a4 4 0 0 1 5.656 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6.343 12.343a8 8 0 0 1 11.314 0\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M3.515 9.515c4.686 -4.687 12.284 -4.687 17 0\", \"key\": \"svg-3\" }]];\nconst IconWifi = createReactComponent(\"outline\", \"wifi\", \"Wifi\", __iconNode);\n\nexport { __iconNode, IconWifi as default };\n//# sourceMappingURL=IconWifi.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3.6 9h16.8\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3.6 15h16.8\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M11.5 3a17 17 0 0 0 0 18\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M12.5 3a17 17 0 0 1 0 18\", \"key\": \"svg-4\" }]];\nconst IconWorld = createReactComponent(\"outline\", \"world\", \"World\", __iconNode);\n\nexport { __iconNode, IconWorld as default };\n//# sourceMappingURL=IconWorld.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 6l-12 12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l12 12\", \"key\": \"svg-1\" }]];\nconst IconX = createReactComponent(\"outline\", \"x\", \"X\", __iconNode);\n\nexport { __iconNode, IconX as default };\n//# sourceMappingURL=IconX.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M11.293 7.293a1 1 0 0 1 1.32 -.083l.094 .083l6 6l.083 .094l.054 .077l.054 .096l.017 .036l.027 .067l.032 .108l.01 .053l.01 .06l.004 .057l.002 .059l-.002 .059l-.005 .058l-.009 .06l-.01 .052l-.032 .108l-.027 .067l-.07 .132l-.065 .09l-.073 .081l-.094 .083l-.077 .054l-.096 .054l-.036 .017l-.067 .027l-.108 .032l-.053 .01l-.06 .01l-.057 .004l-.059 .002h-12c-.852 0 -1.297 -.986 -.783 -1.623l.076 -.084l6 -6z\", \"key\": \"svg-0\" }]];\nconst IconCaretUpFilled = createReactComponent(\"filled\", \"caret-up-filled\", \"CaretUpFilled\", __iconNode);\n\nexport { __iconNode, IconCaretUpFilled as default };\n//# sourceMappingURL=IconCaretUpFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\", \"key\": \"svg-0\" }]];\nconst IconCircleCheckFilled = createReactComponent(\"filled\", \"circle-check-filled\", \"CircleCheckFilled\", __iconNode);\n\nexport { __iconNode, IconCircleCheckFilled as default };\n//# sourceMappingURL=IconCircleCheckFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 4v16a1 1 0 0 0 1.524 .852l13 -8a1 1 0 0 0 0 -1.704l-13 -8a1 1 0 0 0 -1.524 .852z\", \"key\": \"svg-0\" }]];\nconst IconPlayerPlayFilled = createReactComponent(\"filled\", \"player-play-filled\", \"PlayerPlayFilled\", __iconNode);\n\nexport { __iconNode, IconPlayerPlayFilled as default };\n//# sourceMappingURL=IconPlayerPlayFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z\", \"key\": \"svg-0\" }]];\nconst IconPlayerStopFilled = createReactComponent(\"filled\", \"player-stop-filled\", \"PlayerStopFilled\", __iconNode);\n\nexport { __iconNode, IconPlayerStopFilled as default };\n//# sourceMappingURL=IconPlayerStopFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.40.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport * as index from './icons/index.mjs';\nexport { index as icons };\nimport * as iconsList from './icons-list.mjs';\nexport { iconsList };\nexport { default as Icon123, default as IconNumber123 } from './icons/IconNumber123.mjs';\nexport { default as Icon360, default as IconView360Arrow } from './icons/IconView360Arrow.mjs';\nexport { default as IconCodeAsterisk, default as IconCodeAsterix } from './icons/IconCodeAsterisk.mjs';\nexport { default as IconDiscount2, default as IconRosetteDiscount } from './icons/IconRosetteDiscount.mjs';\nexport { default as IconDiscount2Off, default as IconRosetteDiscountOff } from './icons/IconRosetteDiscountOff.mjs';\nexport { default as IconDiscountCheck, default as IconRosetteDiscountCheck } from './icons/IconRosetteDiscountCheck.mjs';\nexport { default as IconHandLoveYou, default as IconHandRock } from './icons/IconHandLoveYou.mjs';\nexport { default as IconSortDeacendingSmallBig, default as IconSortDescendingSmallBig } from './icons/IconSortDescendingSmallBig.mjs';\nexport { default as IconShiJumping, default as IconSkiJumping } from './icons/IconSkiJumping.mjs';\nexport { default as IconBoxSeam, default as IconPackage } from './icons/IconPackage.mjs';\nexport { default as IconKering, default as IconKerning } from './icons/IconKerning.mjs';\nexport { default as Icon2fa, default as IconAuth2fa } from './icons/IconAuth2fa.mjs';\nexport { default as Icon3dCubeSphere, default as IconCube3dSphere } from './icons/IconCube3dSphere.mjs';\nexport { default as Icon3dCubeSphereOff, default as IconCube3dSphereOff } from './icons/IconCube3dSphereOff.mjs';\nexport { default as Icon3dRotate, default as IconRotate3d } from './icons/IconRotate3d.mjs';\nexport { default as Icon12Hours, default as IconHours12 } from './icons/IconHours12.mjs';\nexport { default as Icon24Hours, default as IconHours24 } from './icons/IconHours24.mjs';\nexport { default as Icon360View, default as IconView360Number } from './icons/IconView360Number.mjs';\nexport { default as IconCircle0, default as IconCircleNumber0 } from './icons/IconCircleNumber0.mjs';\nexport { default as IconCircle1, default as IconCircleNumber1 } from './icons/IconCircleNumber1.mjs';\nexport { default as IconCircle2, default as IconCircleNumber2 } from './icons/IconCircleNumber2.mjs';\nexport { default as IconCircle3, default as IconCircleNumber3 } from './icons/IconCircleNumber3.mjs';\nexport { default as IconCircle4, default as IconCircleNumber4 } from './icons/IconCircleNumber4.mjs';\nexport { default as IconCircle5, default as IconCircleNumber5 } from './icons/IconCircleNumber5.mjs';\nexport { default as IconCircle6, default as IconCircleNumber6 } from './icons/IconCircleNumber6.mjs';\nexport { default as IconCircle7, default as IconCircleNumber7 } from './icons/IconCircleNumber7.mjs';\nexport { default as IconCircle8, default as IconCircleNumber8 } from './icons/IconCircleNumber8.mjs';\nexport { default as IconCircle9, default as IconCircleNumber9 } from './icons/IconCircleNumber9.mjs';\nexport { default as IconHexagon0, default as IconHexagonNumber0 } from './icons/IconHexagonNumber0.mjs';\nexport { default as IconHexagon1, default as IconHexagonNumber1 } from './icons/IconHexagonNumber1.mjs';\nexport { default as IconHexagon2, default as IconHexagonNumber2 } from './icons/IconHexagonNumber2.mjs';\nexport { default as IconHexagon3, default as IconHexagonNumber3 } from './icons/IconHexagonNumber3.mjs';\nexport { default as IconHexagon4, default as IconHexagonNumber4 } from './icons/IconHexagonNumber4.mjs';\nexport { default as IconHexagon5, default as IconHexagonNumber5 } from './icons/IconHexagonNumber5.mjs';\nexport { default as IconHexagon6, default as IconHexagonNumber6 } from './icons/IconHexagonNumber6.mjs';\nexport { default as IconHexagon7, default as IconHexagonNumber7 } from './icons/IconHexagonNumber7.mjs';\nexport { default as IconHexagon8, default as IconHexagonNumber8 } from './icons/IconHexagonNumber8.mjs';\nexport { default as IconHexagon9, default as IconHexagonNumber9 } from './icons/IconHexagonNumber9.mjs';\nexport { default as IconSquare0, default as IconSquareNumber0 } from './icons/IconSquareNumber0.mjs';\nexport { default as IconSquare1, default as IconSquareNumber1 } from './icons/IconSquareNumber1.mjs';\nexport { default as IconSquare2, default as IconSquareNumber2 } from './icons/IconSquareNumber2.mjs';\nexport { default as IconSquare3, default as IconSquareNumber3 } from './icons/IconSquareNumber3.mjs';\nexport { default as IconSquare4, default as IconSquareNumber4 } from './icons/IconSquareNumber4.mjs';\nexport { default as IconSquare5, default as IconSquareNumber5 } from './icons/IconSquareNumber5.mjs';\nexport { default as IconSquare6, default as IconSquareNumber6 } from './icons/IconSquareNumber6.mjs';\nexport { default as IconSquare7, default as IconSquareNumber7 } from './icons/IconSquareNumber7.mjs';\nexport { default as IconSquare8, default as IconSquareNumber8 } from './icons/IconSquareNumber8.mjs';\nexport { default as IconSquare9, default as IconSquareNumber9 } from './icons/IconSquareNumber9.mjs';\nexport { default as IconMessageCircle, default as IconMessageCircle2 } from './icons/IconMessageCircle.mjs';\nexport { default as IconMoodSuprised, default as IconMoodSurprised } from './icons/IconMoodSurprised.mjs';\nexport { default as IconCircleDashedLetterLetterV, default as IconCircleDashedLetterV } from './icons/IconCircleDashedLetterV.mjs';\nexport { default as IconSeeding, default as IconSeedling } from './icons/IconSeedling.mjs';\nexport { default as IconSeedingOff, default as IconSeedlingOff } from './icons/IconSeedlingOff.mjs';\nexport { default as IconBrandAdobePremier, default as IconBrandAdobePremiere } from './icons/IconBrandAdobePremiere.mjs';\nexport { default as IconDiscountCheckFilled, default as IconRosetteDiscountCheckFilled } from './icons/IconRosetteDiscountCheckFilled.mjs';\nexport { default as IconMessageCircle2Filled, default as IconMessageCircleFilled } from './icons/IconMessageCircleFilled.mjs';\nexport { default as IconSeedingFilled, default as IconSeedlingFilled } from './icons/IconSeedlingFilled.mjs';\nexport { default as createReactComponent } from './createReactComponent.mjs';\nexport { default as IconAB2 } from './icons/IconAB2.mjs';\nexport { default as IconABOff } from './icons/IconABOff.mjs';\nexport { default as IconAB } from './icons/IconAB.mjs';\nexport { default as IconAbacusOff } from './icons/IconAbacusOff.mjs';\nexport { default as IconAbacus } from './icons/IconAbacus.mjs';\nexport { default as IconAbc } from './icons/IconAbc.mjs';\nexport { default as IconAccessPointOff } from './icons/IconAccessPointOff.mjs';\nexport { default as IconAccessPoint } from './icons/IconAccessPoint.mjs';\nexport { default as IconAccessibleOff } from './icons/IconAccessibleOff.mjs';\nexport { default as IconAccessible } from './icons/IconAccessible.mjs';\nexport { default as IconActivityHeartbeat } from './icons/IconActivityHeartbeat.mjs';\nexport { default as IconActivity } from './icons/IconActivity.mjs';\nexport { default as IconAd2 } from './icons/IconAd2.mjs';\nexport { default as IconAdCircleOff } from './icons/IconAdCircleOff.mjs';\nexport { default as IconAdCircle } from './icons/IconAdCircle.mjs';\nexport { default as IconAdOff } from './icons/IconAdOff.mjs';\nexport { default as IconAd } from './icons/IconAd.mjs';\nexport { default as IconAddressBookOff } from './icons/IconAddressBookOff.mjs';\nexport { default as IconAddressBook } from './icons/IconAddressBook.mjs';\nexport { default as IconAdjustmentsAlt } from './icons/IconAdjustmentsAlt.mjs';\nexport { default as IconAdjustmentsBolt } from './icons/IconAdjustmentsBolt.mjs';\nexport { default as IconAdjustmentsCancel } from './icons/IconAdjustmentsCancel.mjs';\nexport { default as IconAdjustmentsCheck } from './icons/IconAdjustmentsCheck.mjs';\nexport { default as IconAdjustmentsCode } from './icons/IconAdjustmentsCode.mjs';\nexport { default as IconAdjustmentsCog } from './icons/IconAdjustmentsCog.mjs';\nexport { default as IconAdjustmentsDollar } from './icons/IconAdjustmentsDollar.mjs';\nexport { default as IconAdjustmentsDown } from './icons/IconAdjustmentsDown.mjs';\nexport { default as IconAdjustmentsExclamation } from './icons/IconAdjustmentsExclamation.mjs';\nexport { default as IconAdjustmentsHeart } from './icons/IconAdjustmentsHeart.mjs';\nexport { default as IconAdjustmentsHorizontal } from './icons/IconAdjustmentsHorizontal.mjs';\nexport { default as IconAdjustmentsMinus } from './icons/IconAdjustmentsMinus.mjs';\nexport { default as IconAdjustmentsOff } from './icons/IconAdjustmentsOff.mjs';\nexport { default as IconAdjustmentsPause } from './icons/IconAdjustmentsPause.mjs';\nexport { default as IconAdjustmentsPin } from './icons/IconAdjustmentsPin.mjs';\nexport { default as IconAdjustmentsPlus } from './icons/IconAdjustmentsPlus.mjs';\nexport { default as IconAdjustmentsQuestion } from './icons/IconAdjustmentsQuestion.mjs';\nexport { default as IconAdjustmentsSearch } from './icons/IconAdjustmentsSearch.mjs';\nexport { default as IconAdjustmentsShare } from './icons/IconAdjustmentsShare.mjs';\nexport { default as IconAdjustmentsSpark } from './icons/IconAdjustmentsSpark.mjs';\nexport { default as IconAdjustmentsStar } from './icons/IconAdjustmentsStar.mjs';\nexport { default as IconAdjustmentsUp } from './icons/IconAdjustmentsUp.mjs';\nexport { default as IconAdjustmentsX } from './icons/IconAdjustmentsX.mjs';\nexport { default as IconAdjustments } from './icons/IconAdjustments.mjs';\nexport { default as IconAerialLift } from './icons/IconAerialLift.mjs';\nexport { default as IconAffiliate } from './icons/IconAffiliate.mjs';\nexport { default as IconAiAgent } from './icons/IconAiAgent.mjs';\nexport { default as IconAiAgents } from './icons/IconAiAgents.mjs';\nexport { default as IconAiGateway } from './icons/IconAiGateway.mjs';\nexport { default as IconAi } from './icons/IconAi.mjs';\nexport { default as IconAirBalloon } from './icons/IconAirBalloon.mjs';\nexport { default as IconAirConditioningDisabled } from './icons/IconAirConditioningDisabled.mjs';\nexport { default as IconAirConditioning } from './icons/IconAirConditioning.mjs';\nexport { default as IconAirTrafficControl } from './icons/IconAirTrafficControl.mjs';\nexport { default as IconAlarmAverage } from './icons/IconAlarmAverage.mjs';\nexport { default as IconAlarmMinus } from './icons/IconAlarmMinus.mjs';\nexport { default as IconAlarmOff } from './icons/IconAlarmOff.mjs';\nexport { default as IconAlarmPlus } from './icons/IconAlarmPlus.mjs';\nexport { default as IconAlarmSmoke } from './icons/IconAlarmSmoke.mjs';\nexport { default as IconAlarmSnooze } from './icons/IconAlarmSnooze.mjs';\nexport { default as IconAlarm } from './icons/IconAlarm.mjs';\nexport { default as IconAlbumOff } from './icons/IconAlbumOff.mjs';\nexport { default as IconAlbum } from './icons/IconAlbum.mjs';\nexport { default as IconAlertCircleOff } from './icons/IconAlertCircleOff.mjs';\nexport { default as IconAlertCircle } from './icons/IconAlertCircle.mjs';\nexport { default as IconAlertHexagonOff } from './icons/IconAlertHexagonOff.mjs';\nexport { default as IconAlertHexagon } from './icons/IconAlertHexagon.mjs';\nexport { default as IconAlertOctagon } from './icons/IconAlertOctagon.mjs';\nexport { default as IconAlertSmallOff } from './icons/IconAlertSmallOff.mjs';\nexport { default as IconAlertSmall } from './icons/IconAlertSmall.mjs';\nexport { default as IconAlertSquareRoundedOff } from './icons/IconAlertSquareRoundedOff.mjs';\nexport { default as IconAlertSquareRounded } from './icons/IconAlertSquareRounded.mjs';\nexport { default as IconAlertSquare } from './icons/IconAlertSquare.mjs';\nexport { default as IconAlertTriangleOff } from './icons/IconAlertTriangleOff.mjs';\nexport { default as IconAlertTriangle } from './icons/IconAlertTriangle.mjs';\nexport { default as IconAlien } from './icons/IconAlien.mjs';\nexport { default as IconAlignBoxBottomCenter } from './icons/IconAlignBoxBottomCenter.mjs';\nexport { default as IconAlignBoxBottomLeft } from './icons/IconAlignBoxBottomLeft.mjs';\nexport { default as IconAlignBoxBottomRight } from './icons/IconAlignBoxBottomRight.mjs';\nexport { default as IconAlignBoxCenterBottom } from './icons/IconAlignBoxCenterBottom.mjs';\nexport { default as IconAlignBoxCenterMiddle } from './icons/IconAlignBoxCenterMiddle.mjs';\nexport { default as IconAlignBoxCenterStretch } from './icons/IconAlignBoxCenterStretch.mjs';\nexport { default as IconAlignBoxCenterTop } from './icons/IconAlignBoxCenterTop.mjs';\nexport { default as IconAlignBoxLeftBottom } from './icons/IconAlignBoxLeftBottom.mjs';\nexport { default as IconAlignBoxLeftMiddle } from './icons/IconAlignBoxLeftMiddle.mjs';\nexport { default as IconAlignBoxLeftStretch } from './icons/IconAlignBoxLeftStretch.mjs';\nexport { default as IconAlignBoxLeftTop } from './icons/IconAlignBoxLeftTop.mjs';\nexport { default as IconAlignBoxRightBottom } from './icons/IconAlignBoxRightBottom.mjs';\nexport { default as IconAlignBoxRightMiddle } from './icons/IconAlignBoxRightMiddle.mjs';\nexport { default as IconAlignBoxRightStretch } from './icons/IconAlignBoxRightStretch.mjs';\nexport { default as IconAlignBoxRightTop } from './icons/IconAlignBoxRightTop.mjs';\nexport { default as IconAlignBoxTopCenter } from './icons/IconAlignBoxTopCenter.mjs';\nexport { default as IconAlignBoxTopLeft } from './icons/IconAlignBoxTopLeft.mjs';\nexport { default as IconAlignBoxTopRight } from './icons/IconAlignBoxTopRight.mjs';\nexport { default as IconAlignCenter } from './icons/IconAlignCenter.mjs';\nexport { default as IconAlignJustified } from './icons/IconAlignJustified.mjs';\nexport { default as IconAlignLeft2 } from './icons/IconAlignLeft2.mjs';\nexport { default as IconAlignLeft } from './icons/IconAlignLeft.mjs';\nexport { default as IconAlignRight2 } from './icons/IconAlignRight2.mjs';\nexport { default as IconAlignRight } from './icons/IconAlignRight.mjs';\nexport { default as IconAlpha } from './icons/IconAlpha.mjs';\nexport { default as IconAlphabetArabic } from './icons/IconAlphabetArabic.mjs';\nexport { default as IconAlphabetBangla } from './icons/IconAlphabetBangla.mjs';\nexport { default as IconAlphabetCyrillic } from './icons/IconAlphabetCyrillic.mjs';\nexport { default as IconAlphabetGreek } from './icons/IconAlphabetGreek.mjs';\nexport { default as IconAlphabetHebrew } from './icons/IconAlphabetHebrew.mjs';\nexport { default as IconAlphabetKorean } from './icons/IconAlphabetKorean.mjs';\nexport { default as IconAlphabetLatin } from './icons/IconAlphabetLatin.mjs';\nexport { default as IconAlphabetPolish } from './icons/IconAlphabetPolish.mjs';\nexport { default as IconAlphabetRunes } from './icons/IconAlphabetRunes.mjs';\nexport { default as IconAlphabetThai } from './icons/IconAlphabetThai.mjs';\nexport { default as IconAlt } from './icons/IconAlt.mjs';\nexport { default as IconAmbulance } from './icons/IconAmbulance.mjs';\nexport { default as IconAmpersand } from './icons/IconAmpersand.mjs';\nexport { default as IconAnalyzeOff } from './icons/IconAnalyzeOff.mjs';\nexport { default as IconAnalyze } from './icons/IconAnalyze.mjs';\nexport { default as IconAnchorOff } from './icons/IconAnchorOff.mjs';\nexport { default as IconAnchor } from './icons/IconAnchor.mjs';\nexport { default as IconAngle } from './icons/IconAngle.mjs';\nexport { default as IconAnkh } from './icons/IconAnkh.mjs';\nexport { default as IconAntennaBars1 } from './icons/IconAntennaBars1.mjs';\nexport { default as IconAntennaBars2 } from './icons/IconAntennaBars2.mjs';\nexport { default as IconAntennaBars3 } from './icons/IconAntennaBars3.mjs';\nexport { default as IconAntennaBars4 } from './icons/IconAntennaBars4.mjs';\nexport { default as IconAntennaBars5 } from './icons/IconAntennaBars5.mjs';\nexport { default as IconAntennaBarsOff } from './icons/IconAntennaBarsOff.mjs';\nexport { default as IconAntennaOff } from './icons/IconAntennaOff.mjs';\nexport { default as IconAntenna } from './icons/IconAntenna.mjs';\nexport { default as IconApertureOff } from './icons/IconApertureOff.mjs';\nexport { default as IconAperture } from './icons/IconAperture.mjs';\nexport { default as IconApiAppOff } from './icons/IconApiAppOff.mjs';\nexport { default as IconApiApp } from './icons/IconApiApp.mjs';\nexport { default as IconApiBook } from './icons/IconApiBook.mjs';\nexport { default as IconApiOff } from './icons/IconApiOff.mjs';\nexport { default as IconApi } from './icons/IconApi.mjs';\nexport { default as IconAppWindow } from './icons/IconAppWindow.mjs';\nexport { default as IconApple } from './icons/IconApple.mjs';\nexport { default as IconAppsOff } from './icons/IconAppsOff.mjs';\nexport { default as IconApps } from './icons/IconApps.mjs';\nexport { default as IconArcheryArrow } from './icons/IconArcheryArrow.mjs';\nexport { default as IconArchiveOff } from './icons/IconArchiveOff.mjs';\nexport { default as IconArchive } from './icons/IconArchive.mjs';\nexport { default as IconArmchair2Off } from './icons/IconArmchair2Off.mjs';\nexport { default as IconArmchair2 } from './icons/IconArmchair2.mjs';\nexport { default as IconArmchairOff } from './icons/IconArmchairOff.mjs';\nexport { default as IconArmchair } from './icons/IconArmchair.mjs';\nexport { default as IconArrowAutofitContent } from './icons/IconArrowAutofitContent.mjs';\nexport { default as IconArrowAutofitDown } from './icons/IconArrowAutofitDown.mjs';\nexport { default as IconArrowAutofitHeight } from './icons/IconArrowAutofitHeight.mjs';\nexport { default as IconArrowAutofitLeft } from './icons/IconArrowAutofitLeft.mjs';\nexport { default as IconArrowAutofitRight } from './icons/IconArrowAutofitRight.mjs';\nexport { default as IconArrowAutofitUp } from './icons/IconArrowAutofitUp.mjs';\nexport { default as IconArrowAutofitWidth } from './icons/IconArrowAutofitWidth.mjs';\nexport { default as IconArrowBackUpDouble } from './icons/IconArrowBackUpDouble.mjs';\nexport { default as IconArrowBackUp } from './icons/IconArrowBackUp.mjs';\nexport { default as IconArrowBack } from './icons/IconArrowBack.mjs';\nexport { default as IconArrowBadgeDown } from './icons/IconArrowBadgeDown.mjs';\nexport { default as IconArrowBadgeLeft } from './icons/IconArrowBadgeLeft.mjs';\nexport { default as IconArrowBadgeRight } from './icons/IconArrowBadgeRight.mjs';\nexport { default as IconArrowBadgeUp } from './icons/IconArrowBadgeUp.mjs';\nexport { default as IconArrowBarBoth } from './icons/IconArrowBarBoth.mjs';\nexport { default as IconArrowBarDown } from './icons/IconArrowBarDown.mjs';\nexport { default as IconArrowBarLeft } from './icons/IconArrowBarLeft.mjs';\nexport { default as IconArrowBarRight } from './icons/IconArrowBarRight.mjs';\nexport { default as IconArrowBarToDownDashed } from './icons/IconArrowBarToDownDashed.mjs';\nexport { default as IconArrowBarToDown } from './icons/IconArrowBarToDown.mjs';\nexport { default as IconArrowBarToLeftDashed } from './icons/IconArrowBarToLeftDashed.mjs';\nexport { default as IconArrowBarToLeft } from './icons/IconArrowBarToLeft.mjs';\nexport { default as IconArrowBarToRightDashed } from './icons/IconArrowBarToRightDashed.mjs';\nexport { default as IconArrowBarToRight } from './icons/IconArrowBarToRight.mjs';\nexport { default as IconArrowBarToUpDashed } from './icons/IconArrowBarToUpDashed.mjs';\nexport { default as IconArrowBarToUp } from './icons/IconArrowBarToUp.mjs';\nexport { default as IconArrowBarUp } from './icons/IconArrowBarUp.mjs';\nexport { default as IconArrowBearLeft2 } from './icons/IconArrowBearLeft2.mjs';\nexport { default as IconArrowBearLeft } from './icons/IconArrowBearLeft.mjs';\nexport { default as IconArrowBearRight2 } from './icons/IconArrowBearRight2.mjs';\nexport { default as IconArrowBearRight } from './icons/IconArrowBearRight.mjs';\nexport { default as IconArrowBigDownLine } from './icons/IconArrowBigDownLine.mjs';\nexport { default as IconArrowBigDownLines } from './icons/IconArrowBigDownLines.mjs';\nexport { default as IconArrowBigDown } from './icons/IconArrowBigDown.mjs';\nexport { default as IconArrowBigLeftLine } from './icons/IconArrowBigLeftLine.mjs';\nexport { default as IconArrowBigLeftLines } from './icons/IconArrowBigLeftLines.mjs';\nexport { default as IconArrowBigLeft } from './icons/IconArrowBigLeft.mjs';\nexport { default as IconArrowBigRightLine } from './icons/IconArrowBigRightLine.mjs';\nexport { default as IconArrowBigRightLines } from './icons/IconArrowBigRightLines.mjs';\nexport { default as IconArrowBigRight } from './icons/IconArrowBigRight.mjs';\nexport { default as IconArrowBigUpLine } from './icons/IconArrowBigUpLine.mjs';\nexport { default as IconArrowBigUpLines } from './icons/IconArrowBigUpLines.mjs';\nexport { default as IconArrowBigUp } from './icons/IconArrowBigUp.mjs';\nexport { default as IconArrowBounce } from './icons/IconArrowBounce.mjs';\nexport { default as IconArrowCapsule } from './icons/IconArrowCapsule.mjs';\nexport { default as IconArrowCurveLeft } from './icons/IconArrowCurveLeft.mjs';\nexport { default as IconArrowCurveRight } from './icons/IconArrowCurveRight.mjs';\nexport { default as IconArrowDownBar } from './icons/IconArrowDownBar.mjs';\nexport { default as IconArrowDownCircle } from './icons/IconArrowDownCircle.mjs';\nexport { default as IconArrowDownDashed } from './icons/IconArrowDownDashed.mjs';\nexport { default as IconArrowDownFromArc } from './icons/IconArrowDownFromArc.mjs';\nexport { default as IconArrowDownLeftCircle } from './icons/IconArrowDownLeftCircle.mjs';\nexport { default as IconArrowDownLeft } from './icons/IconArrowDownLeft.mjs';\nexport { default as IconArrowDownRhombus } from './icons/IconArrowDownRhombus.mjs';\nexport { default as IconArrowDownRightCircle } from './icons/IconArrowDownRightCircle.mjs';\nexport { default as IconArrowDownRight } from './icons/IconArrowDownRight.mjs';\nexport { default as IconArrowDownSquare } from './icons/IconArrowDownSquare.mjs';\nexport { default as IconArrowDownTail } from './icons/IconArrowDownTail.mjs';\nexport { default as IconArrowDownToArc } from './icons/IconArrowDownToArc.mjs';\nexport { default as IconArrowDown } from './icons/IconArrowDown.mjs';\nexport { default as IconArrowElbowLeft } from './icons/IconArrowElbowLeft.mjs';\nexport { default as IconArrowElbowRight } from './icons/IconArrowElbowRight.mjs';\nexport { default as IconArrowFork } from './icons/IconArrowFork.mjs';\nexport { default as IconArrowForwardUpDouble } from './icons/IconArrowForwardUpDouble.mjs';\nexport { default as IconArrowForwardUp } from './icons/IconArrowForwardUp.mjs';\nexport { default as IconArrowForward } from './icons/IconArrowForward.mjs';\nexport { default as IconArrowGuide } from './icons/IconArrowGuide.mjs';\nexport { default as IconArrowIteration } from './icons/IconArrowIteration.mjs';\nexport { default as IconArrowLeftBar } from './icons/IconArrowLeftBar.mjs';\nexport { default as IconArrowLeftCircle } from './icons/IconArrowLeftCircle.mjs';\nexport { default as IconArrowLeftDashed } from './icons/IconArrowLeftDashed.mjs';\nexport { default as IconArrowLeftFromArc } from './icons/IconArrowLeftFromArc.mjs';\nexport { default as IconArrowLeftRhombus } from './icons/IconArrowLeftRhombus.mjs';\nexport { default as IconArrowLeftRight } from './icons/IconArrowLeftRight.mjs';\nexport { default as IconArrowLeftSquare } from './icons/IconArrowLeftSquare.mjs';\nexport { default as IconArrowLeftTail } from './icons/IconArrowLeftTail.mjs';\nexport { default as IconArrowLeftToArc } from './icons/IconArrowLeftToArc.mjs';\nexport { default as IconArrowLeft } from './icons/IconArrowLeft.mjs';\nexport { default as IconArrowLoopLeft2 } from './icons/IconArrowLoopLeft2.mjs';\nexport { default as IconArrowLoopLeft } from './icons/IconArrowLoopLeft.mjs';\nexport { default as IconArrowLoopRight2 } from './icons/IconArrowLoopRight2.mjs';\nexport { default as IconArrowLoopRight } from './icons/IconArrowLoopRight.mjs';\nexport { default as IconArrowMergeAltLeft } from './icons/IconArrowMergeAltLeft.mjs';\nexport { default as IconArrowMergeAltRight } from './icons/IconArrowMergeAltRight.mjs';\nexport { default as IconArrowMergeBoth } from './icons/IconArrowMergeBoth.mjs';\nexport { default as IconArrowMergeLeft } from './icons/IconArrowMergeLeft.mjs';\nexport { default as IconArrowMergeRight } from './icons/IconArrowMergeRight.mjs';\nexport { default as IconArrowMerge } from './icons/IconArrowMerge.mjs';\nexport { default as IconArrowMoveDown } from './icons/IconArrowMoveDown.mjs';\nexport { default as IconArrowMoveLeft } from './icons/IconArrowMoveLeft.mjs';\nexport { default as IconArrowMoveRight } from './icons/IconArrowMoveRight.mjs';\nexport { default as IconArrowMoveUp } from './icons/IconArrowMoveUp.mjs';\nexport { default as IconArrowNarrowDownDashed } from './icons/IconArrowNarrowDownDashed.mjs';\nexport { default as IconArrowNarrowDown } from './icons/IconArrowNarrowDown.mjs';\nexport { default as IconArrowNarrowLeftDashed } from './icons/IconArrowNarrowLeftDashed.mjs';\nexport { default as IconArrowNarrowLeft } from './icons/IconArrowNarrowLeft.mjs';\nexport { default as IconArrowNarrowRightDashed } from './icons/IconArrowNarrowRightDashed.mjs';\nexport { default as IconArrowNarrowRight } from './icons/IconArrowNarrowRight.mjs';\nexport { default as IconArrowNarrowUpDashed } from './icons/IconArrowNarrowUpDashed.mjs';\nexport { default as IconArrowNarrowUp } from './icons/IconArrowNarrowUp.mjs';\nexport { default as IconArrowRampLeft2 } from './icons/IconArrowRampLeft2.mjs';\nexport { default as IconArrowRampLeft3 } from './icons/IconArrowRampLeft3.mjs';\nexport { default as IconArrowRampLeft } from './icons/IconArrowRampLeft.mjs';\nexport { default as IconArrowRampRight2 } from './icons/IconArrowRampRight2.mjs';\nexport { default as IconArrowRampRight3 } from './icons/IconArrowRampRight3.mjs';\nexport { default as IconArrowRampRight } from './icons/IconArrowRampRight.mjs';\nexport { default as IconArrowRightBar } from './icons/IconArrowRightBar.mjs';\nexport { default as IconArrowRightCircle } from './icons/IconArrowRightCircle.mjs';\nexport { default as IconArrowRightDashed } from './icons/IconArrowRightDashed.mjs';\nexport { default as IconArrowRightFromArc } from './icons/IconArrowRightFromArc.mjs';\nexport { default as IconArrowRightRhombus } from './icons/IconArrowRightRhombus.mjs';\nexport { default as IconArrowRightSquare } from './icons/IconArrowRightSquare.mjs';\nexport { default as IconArrowRightTail } from './icons/IconArrowRightTail.mjs';\nexport { default as IconArrowRightToArc } from './icons/IconArrowRightToArc.mjs';\nexport { default as IconArrowRight } from './icons/IconArrowRight.mjs';\nexport { default as IconArrowRotaryFirstLeft } from './icons/IconArrowRotaryFirstLeft.mjs';\nexport { default as IconArrowRotaryFirstRight } from './icons/IconArrowRotaryFirstRight.mjs';\nexport { default as IconArrowRotaryLastLeft } from './icons/IconArrowRotaryLastLeft.mjs';\nexport { default as IconArrowRotaryLastRight } from './icons/IconArrowRotaryLastRight.mjs';\nexport { default as IconArrowRotaryLeft } from './icons/IconArrowRotaryLeft.mjs';\nexport { default as IconArrowRotaryRight } from './icons/IconArrowRotaryRight.mjs';\nexport { default as IconArrowRotaryStraight } from './icons/IconArrowRotaryStraight.mjs';\nexport { default as IconArrowRoundaboutLeft } from './icons/IconArrowRoundaboutLeft.mjs';\nexport { default as IconArrowRoundaboutRight } from './icons/IconArrowRoundaboutRight.mjs';\nexport { default as IconArrowSharpTurnLeft } from './icons/IconArrowSharpTurnLeft.mjs';\nexport { default as IconArrowSharpTurnRight } from './icons/IconArrowSharpTurnRight.mjs';\nexport { default as IconArrowUpBar } from './icons/IconArrowUpBar.mjs';\nexport { default as IconArrowUpCircle } from './icons/IconArrowUpCircle.mjs';\nexport { default as IconArrowUpDashed } from './icons/IconArrowUpDashed.mjs';\nexport { default as IconArrowUpFromArc } from './icons/IconArrowUpFromArc.mjs';\nexport { default as IconArrowUpLeftCircle } from './icons/IconArrowUpLeftCircle.mjs';\nexport { default as IconArrowUpLeft } from './icons/IconArrowUpLeft.mjs';\nexport { default as IconArrowUpRhombus } from './icons/IconArrowUpRhombus.mjs';\nexport { default as IconArrowUpRightCircle } from './icons/IconArrowUpRightCircle.mjs';\nexport { default as IconArrowUpRight } from './icons/IconArrowUpRight.mjs';\nexport { default as IconArrowUpSquare } from './icons/IconArrowUpSquare.mjs';\nexport { default as IconArrowUpTail } from './icons/IconArrowUpTail.mjs';\nexport { default as IconArrowUpToArc } from './icons/IconArrowUpToArc.mjs';\nexport { default as IconArrowUp } from './icons/IconArrowUp.mjs';\nexport { default as IconArrowWaveLeftDown } from './icons/IconArrowWaveLeftDown.mjs';\nexport { default as IconArrowWaveLeftUp } from './icons/IconArrowWaveLeftUp.mjs';\nexport { default as IconArrowWaveRightDown } from './icons/IconArrowWaveRightDown.mjs';\nexport { default as IconArrowWaveRightUp } from './icons/IconArrowWaveRightUp.mjs';\nexport { default as IconArrowZigZag } from './icons/IconArrowZigZag.mjs';\nexport { default as IconArrowsCross } from './icons/IconArrowsCross.mjs';\nexport { default as IconArrowsDiagonal2 } from './icons/IconArrowsDiagonal2.mjs';\nexport { default as IconArrowsDiagonalMinimize2 } from './icons/IconArrowsDiagonalMinimize2.mjs';\nexport { default as IconArrowsDiagonalMinimize } from './icons/IconArrowsDiagonalMinimize.mjs';\nexport { default as IconArrowsDiagonal } from './icons/IconArrowsDiagonal.mjs';\nexport { default as IconArrowsDiff } from './icons/IconArrowsDiff.mjs';\nexport { default as IconArrowsDoubleNeSw } from './icons/IconArrowsDoubleNeSw.mjs';\nexport { default as IconArrowsDoubleNwSe } from './icons/IconArrowsDoubleNwSe.mjs';\nexport { default as IconArrowsDoubleSeNw } from './icons/IconArrowsDoubleSeNw.mjs';\nexport { default as IconArrowsDoubleSwNe } from './icons/IconArrowsDoubleSwNe.mjs';\nexport { default as IconArrowsDownUp } from './icons/IconArrowsDownUp.mjs';\nexport { default as IconArrowsDown } from './icons/IconArrowsDown.mjs';\nexport { default as IconArrowsExchange2 } from './icons/IconArrowsExchange2.mjs';\nexport { default as IconArrowsExchange } from './icons/IconArrowsExchange.mjs';\nexport { default as IconArrowsHorizontal } from './icons/IconArrowsHorizontal.mjs';\nexport { default as IconArrowsJoin2 } from './icons/IconArrowsJoin2.mjs';\nexport { default as IconArrowsJoin } from './icons/IconArrowsJoin.mjs';\nexport { default as IconArrowsLeftDown } from './icons/IconArrowsLeftDown.mjs';\nexport { default as IconArrowsLeftRight } from './icons/IconArrowsLeftRight.mjs';\nexport { default as IconArrowsLeft } from './icons/IconArrowsLeft.mjs';\nexport { default as IconArrowsMaximize } from './icons/IconArrowsMaximize.mjs';\nexport { default as IconArrowsMinimize } from './icons/IconArrowsMinimize.mjs';\nexport { default as IconArrowsMoveHorizontal } from './icons/IconArrowsMoveHorizontal.mjs';\nexport { default as IconArrowsMoveVertical } from './icons/IconArrowsMoveVertical.mjs';\nexport { default as IconArrowsMove } from './icons/IconArrowsMove.mjs';\nexport { default as IconArrowsRandom } from './icons/IconArrowsRandom.mjs';\nexport { default as IconArrowsRightDown } from './icons/IconArrowsRightDown.mjs';\nexport { default as IconArrowsRightLeft } from './icons/IconArrowsRightLeft.mjs';\nexport { default as IconArrowsRight } from './icons/IconArrowsRight.mjs';\nexport { default as IconArrowsShuffle2 } from './icons/IconArrowsShuffle2.mjs';\nexport { default as IconArrowsShuffle } from './icons/IconArrowsShuffle.mjs';\nexport { default as IconArrowsSort } from './icons/IconArrowsSort.mjs';\nexport { default as IconArrowsSplit2 } from './icons/IconArrowsSplit2.mjs';\nexport { default as IconArrowsSplit } from './icons/IconArrowsSplit.mjs';\nexport { default as IconArrowsTransferDown } from './icons/IconArrowsTransferDown.mjs';\nexport { default as IconArrowsTransferUpDown } from './icons/IconArrowsTransferUpDown.mjs';\nexport { default as IconArrowsTransferUp } from './icons/IconArrowsTransferUp.mjs';\nexport { default as IconArrowsUpDown } from './icons/IconArrowsUpDown.mjs';\nexport { default as IconArrowsUpLeft } from './icons/IconArrowsUpLeft.mjs';\nexport { default as IconArrowsUpRight } from './icons/IconArrowsUpRight.mjs';\nexport { default as IconArrowsUp } from './icons/IconArrowsUp.mjs';\nexport { default as IconArrowsVertical } from './icons/IconArrowsVertical.mjs';\nexport { default as IconArtboardOff } from './icons/IconArtboardOff.mjs';\nexport { default as IconArtboard } from './icons/IconArtboard.mjs';\nexport { default as IconArticleOff } from './icons/IconArticleOff.mjs';\nexport { default as IconArticle } from './icons/IconArticle.mjs';\nexport { default as IconAspectRatioOff } from './icons/IconAspectRatioOff.mjs';\nexport { default as IconAspectRatio } from './icons/IconAspectRatio.mjs';\nexport { default as IconAssemblyOff } from './icons/IconAssemblyOff.mjs';\nexport { default as IconAssembly } from './icons/IconAssembly.mjs';\nexport { default as IconAsset } from './icons/IconAsset.mjs';\nexport { default as IconAsteriskSimple } from './icons/IconAsteriskSimple.mjs';\nexport { default as IconAsterisk } from './icons/IconAsterisk.mjs';\nexport { default as IconAtOff } from './icons/IconAtOff.mjs';\nexport { default as IconAt } from './icons/IconAt.mjs';\nexport { default as IconAtom2 } from './icons/IconAtom2.mjs';\nexport { default as IconAtomOff } from './icons/IconAtomOff.mjs';\nexport { default as IconAtom } from './icons/IconAtom.mjs';\nexport { default as IconAugmentedReality2 } from './icons/IconAugmentedReality2.mjs';\nexport { default as IconAugmentedRealityOff } from './icons/IconAugmentedRealityOff.mjs';\nexport { default as IconAugmentedReality } from './icons/IconAugmentedReality.mjs';\nexport { default as IconAutomaticGearbox } from './icons/IconAutomaticGearbox.mjs';\nexport { default as IconAutomation } from './icons/IconAutomation.mjs';\nexport { default as IconAvocado } from './icons/IconAvocado.mjs';\nexport { default as IconAwardOff } from './icons/IconAwardOff.mjs';\nexport { default as IconAward } from './icons/IconAward.mjs';\nexport { default as IconAxe } from './icons/IconAxe.mjs';\nexport { default as IconAxisX } from './icons/IconAxisX.mjs';\nexport { default as IconAxisY } from './icons/IconAxisY.mjs';\nexport { default as IconBabyBottle } from './icons/IconBabyBottle.mjs';\nexport { default as IconBabyCarriage } from './icons/IconBabyCarriage.mjs';\nexport { default as IconBackground } from './icons/IconBackground.mjs';\nexport { default as IconBackhoe } from './icons/IconBackhoe.mjs';\nexport { default as IconBackpackOff } from './icons/IconBackpackOff.mjs';\nexport { default as IconBackpack } from './icons/IconBackpack.mjs';\nexport { default as IconBackslash } from './icons/IconBackslash.mjs';\nexport { default as IconBackspace } from './icons/IconBackspace.mjs';\nexport { default as IconBadge2k } from './icons/IconBadge2k.mjs';\nexport { default as IconBadge3d } from './icons/IconBadge3d.mjs';\nexport { default as IconBadge3k } from './icons/IconBadge3k.mjs';\nexport { default as IconBadge4k } from './icons/IconBadge4k.mjs';\nexport { default as IconBadge5k } from './icons/IconBadge5k.mjs';\nexport { default as IconBadge8k } from './icons/IconBadge8k.mjs';\nexport { default as IconBadgeAdOff } from './icons/IconBadgeAdOff.mjs';\nexport { default as IconBadgeAd } from './icons/IconBadgeAd.mjs';\nexport { default as IconBadgeAr } from './icons/IconBadgeAr.mjs';\nexport { default as IconBadgeCc } from './icons/IconBadgeCc.mjs';\nexport { default as IconBadgeHd } from './icons/IconBadgeHd.mjs';\nexport { default as IconBadgeOff } from './icons/IconBadgeOff.mjs';\nexport { default as IconBadgeSd } from './icons/IconBadgeSd.mjs';\nexport { default as IconBadgeTm } from './icons/IconBadgeTm.mjs';\nexport { default as IconBadgeVo } from './icons/IconBadgeVo.mjs';\nexport { default as IconBadgeVr } from './icons/IconBadgeVr.mjs';\nexport { default as IconBadgeWc } from './icons/IconBadgeWc.mjs';\nexport { default as IconBadge } from './icons/IconBadge.mjs';\nexport { default as IconBadgesOff } from './icons/IconBadgesOff.mjs';\nexport { default as IconBadges } from './icons/IconBadges.mjs';\nexport { default as IconBaguette } from './icons/IconBaguette.mjs';\nexport { default as IconBallAmericanFootballOff } from './icons/IconBallAmericanFootballOff.mjs';\nexport { default as IconBallAmericanFootball } from './icons/IconBallAmericanFootball.mjs';\nexport { default as IconBallBaseball } from './icons/IconBallBaseball.mjs';\nexport { default as IconBallBasketball } from './icons/IconBallBasketball.mjs';\nexport { default as IconBallBowling } from './icons/IconBallBowling.mjs';\nexport { default as IconBallFootballOff } from './icons/IconBallFootballOff.mjs';\nexport { default as IconBallFootball } from './icons/IconBallFootball.mjs';\nexport { default as IconBallTennis } from './icons/IconBallTennis.mjs';\nexport { default as IconBallVolleyball } from './icons/IconBallVolleyball.mjs';\nexport { default as IconBalloonOff } from './icons/IconBalloonOff.mjs';\nexport { default as IconBalloon } from './icons/IconBalloon.mjs';\nexport { default as IconBallpenOff } from './icons/IconBallpenOff.mjs';\nexport { default as IconBallpen } from './icons/IconBallpen.mjs';\nexport { default as IconBan } from './icons/IconBan.mjs';\nexport { default as IconBandageOff } from './icons/IconBandageOff.mjs';\nexport { default as IconBandage } from './icons/IconBandage.mjs';\nexport { default as IconBarbellOff } from './icons/IconBarbellOff.mjs';\nexport { default as IconBarbell } from './icons/IconBarbell.mjs';\nexport { default as IconBarcodeOff } from './icons/IconBarcodeOff.mjs';\nexport { default as IconBarcode } from './icons/IconBarcode.mjs';\nexport { default as IconBarrelOff } from './icons/IconBarrelOff.mjs';\nexport { default as IconBarrel } from './icons/IconBarrel.mjs';\nexport { default as IconBarrierBlockOff } from './icons/IconBarrierBlockOff.mjs';\nexport { default as IconBarrierBlock } from './icons/IconBarrierBlock.mjs';\nexport { default as IconBaselineDensityLarge } from './icons/IconBaselineDensityLarge.mjs';\nexport { default as IconBaselineDensityMedium } from './icons/IconBaselineDensityMedium.mjs';\nexport { default as IconBaselineDensitySmall } from './icons/IconBaselineDensitySmall.mjs';\nexport { default as IconBaseline } from './icons/IconBaseline.mjs';\nexport { default as IconBasketBolt } from './icons/IconBasketBolt.mjs';\nexport { default as IconBasketCancel } from './icons/IconBasketCancel.mjs';\nexport { default as IconBasketCheck } from './icons/IconBasketCheck.mjs';\nexport { default as IconBasketCode } from './icons/IconBasketCode.mjs';\nexport { default as IconBasketCog } from './icons/IconBasketCog.mjs';\nexport { default as IconBasketDiscount } from './icons/IconBasketDiscount.mjs';\nexport { default as IconBasketDollar } from './icons/IconBasketDollar.mjs';\nexport { default as IconBasketDown } from './icons/IconBasketDown.mjs';\nexport { default as IconBasketExclamation } from './icons/IconBasketExclamation.mjs';\nexport { default as IconBasketHeart } from './icons/IconBasketHeart.mjs';\nexport { default as IconBasketMinus } from './icons/IconBasketMinus.mjs';\nexport { default as IconBasketOff } from './icons/IconBasketOff.mjs';\nexport { default as IconBasketPause } from './icons/IconBasketPause.mjs';\nexport { default as IconBasketPin } from './icons/IconBasketPin.mjs';\nexport { default as IconBasketPlus } from './icons/IconBasketPlus.mjs';\nexport { default as IconBasketQuestion } from './icons/IconBasketQuestion.mjs';\nexport { default as IconBasketSearch } from './icons/IconBasketSearch.mjs';\nexport { default as IconBasketShare } from './icons/IconBasketShare.mjs';\nexport { default as IconBasketStar } from './icons/IconBasketStar.mjs';\nexport { default as IconBasketUp } from './icons/IconBasketUp.mjs';\nexport { default as IconBasketX } from './icons/IconBasketX.mjs';\nexport { default as IconBasket } from './icons/IconBasket.mjs';\nexport { default as IconBat } from './icons/IconBat.mjs';\nexport { default as IconBathOff } from './icons/IconBathOff.mjs';\nexport { default as IconBath } from './icons/IconBath.mjs';\nexport { default as IconBattery1 } from './icons/IconBattery1.mjs';\nexport { default as IconBattery2 } from './icons/IconBattery2.mjs';\nexport { default as IconBattery3 } from './icons/IconBattery3.mjs';\nexport { default as IconBattery4 } from './icons/IconBattery4.mjs';\nexport { default as IconBatteryAutomotive } from './icons/IconBatteryAutomotive.mjs';\nexport { default as IconBatteryCharging2 } from './icons/IconBatteryCharging2.mjs';\nexport { default as IconBatteryCharging } from './icons/IconBatteryCharging.mjs';\nexport { default as IconBatteryEco } from './icons/IconBatteryEco.mjs';\nexport { default as IconBatteryExclamation } from './icons/IconBatteryExclamation.mjs';\nexport { default as IconBatteryOff } from './icons/IconBatteryOff.mjs';\nexport { default as IconBatterySpark } from './icons/IconBatterySpark.mjs';\nexport { default as IconBatteryVertical1 } from './icons/IconBatteryVertical1.mjs';\nexport { default as IconBatteryVertical2 } from './icons/IconBatteryVertical2.mjs';\nexport { default as IconBatteryVertical3 } from './icons/IconBatteryVertical3.mjs';\nexport { default as IconBatteryVertical4 } from './icons/IconBatteryVertical4.mjs';\nexport { default as IconBatteryVerticalCharging2 } from './icons/IconBatteryVerticalCharging2.mjs';\nexport { default as IconBatteryVerticalCharging } from './icons/IconBatteryVerticalCharging.mjs';\nexport { default as IconBatteryVerticalEco } from './icons/IconBatteryVerticalEco.mjs';\nexport { default as IconBatteryVerticalExclamation } from './icons/IconBatteryVerticalExclamation.mjs';\nexport { default as IconBatteryVerticalOff } from './icons/IconBatteryVerticalOff.mjs';\nexport { default as IconBatteryVertical } from './icons/IconBatteryVertical.mjs';\nexport { default as IconBattery } from './icons/IconBattery.mjs';\nexport { default as IconBeachOff } from './icons/IconBeachOff.mjs';\nexport { default as IconBeach } from './icons/IconBeach.mjs';\nexport { default as IconBedFlat } from './icons/IconBedFlat.mjs';\nexport { default as IconBedOff } from './icons/IconBedOff.mjs';\nexport { default as IconBed } from './icons/IconBed.mjs';\nexport { default as IconBeerOff } from './icons/IconBeerOff.mjs';\nexport { default as IconBeer } from './icons/IconBeer.mjs';\nexport { default as IconBellBolt } from './icons/IconBellBolt.mjs';\nexport { default as IconBellCancel } from './icons/IconBellCancel.mjs';\nexport { default as IconBellCheck } from './icons/IconBellCheck.mjs';\nexport { default as IconBellCode } from './icons/IconBellCode.mjs';\nexport { default as IconBellCog } from './icons/IconBellCog.mjs';\nexport { default as IconBellDollar } from './icons/IconBellDollar.mjs';\nexport { default as IconBellDown } from './icons/IconBellDown.mjs';\nexport { default as IconBellExclamation } from './icons/IconBellExclamation.mjs';\nexport { default as IconBellHeart } from './icons/IconBellHeart.mjs';\nexport { default as IconBellMinus } from './icons/IconBellMinus.mjs';\nexport { default as IconBellOff } from './icons/IconBellOff.mjs';\nexport { default as IconBellPause } from './icons/IconBellPause.mjs';\nexport { default as IconBellPin } from './icons/IconBellPin.mjs';\nexport { default as IconBellPlus } from './icons/IconBellPlus.mjs';\nexport { default as IconBellQuestion } from './icons/IconBellQuestion.mjs';\nexport { default as IconBellRinging2 } from './icons/IconBellRinging2.mjs';\nexport { default as IconBellRinging } from './icons/IconBellRinging.mjs';\nexport { default as IconBellSchool } from './icons/IconBellSchool.mjs';\nexport { default as IconBellSearch } from './icons/IconBellSearch.mjs';\nexport { default as IconBellShare } from './icons/IconBellShare.mjs';\nexport { default as IconBellStar } from './icons/IconBellStar.mjs';\nexport { default as IconBellUp } from './icons/IconBellUp.mjs';\nexport { default as IconBellX } from './icons/IconBellX.mjs';\nexport { default as IconBellZ } from './icons/IconBellZ.mjs';\nexport { default as IconBell } from './icons/IconBell.mjs';\nexport { default as IconBeta } from './icons/IconBeta.mjs';\nexport { default as IconBible } from './icons/IconBible.mjs';\nexport { default as IconBikeOff } from './icons/IconBikeOff.mjs';\nexport { default as IconBike } from './icons/IconBike.mjs';\nexport { default as IconBinaryOff } from './icons/IconBinaryOff.mjs';\nexport { default as IconBinaryTree2 } from './icons/IconBinaryTree2.mjs';\nexport { default as IconBinaryTree } from './icons/IconBinaryTree.mjs';\nexport { default as IconBinary } from './icons/IconBinary.mjs';\nexport { default as IconBinoculars } from './icons/IconBinoculars.mjs';\nexport { default as IconBiohazardOff } from './icons/IconBiohazardOff.mjs';\nexport { default as IconBiohazard } from './icons/IconBiohazard.mjs';\nexport { default as IconBlade } from './icons/IconBlade.mjs';\nexport { default as IconBleachChlorine } from './icons/IconBleachChlorine.mjs';\nexport { default as IconBleachNoChlorine } from './icons/IconBleachNoChlorine.mjs';\nexport { default as IconBleachOff } from './icons/IconBleachOff.mjs';\nexport { default as IconBleach } from './icons/IconBleach.mjs';\nexport { default as IconBlendMode } from './icons/IconBlendMode.mjs';\nexport { default as IconBlender } from './icons/IconBlender.mjs';\nexport { default as IconBlind } from './icons/IconBlind.mjs';\nexport { default as IconBlob } from './icons/IconBlob.mjs';\nexport { default as IconBlockquote } from './icons/IconBlockquote.mjs';\nexport { default as IconBlocks } from './icons/IconBlocks.mjs';\nexport { default as IconBluetoothConnected } from './icons/IconBluetoothConnected.mjs';\nexport { default as IconBluetoothOff } from './icons/IconBluetoothOff.mjs';\nexport { default as IconBluetoothX } from './icons/IconBluetoothX.mjs';\nexport { default as IconBluetooth } from './icons/IconBluetooth.mjs';\nexport { default as IconBlurOff } from './icons/IconBlurOff.mjs';\nexport { default as IconBlur } from './icons/IconBlur.mjs';\nexport { default as IconBmp } from './icons/IconBmp.mjs';\nexport { default as IconBodyScan } from './icons/IconBodyScan.mjs';\nexport { default as IconBoldOff } from './icons/IconBoldOff.mjs';\nexport { default as IconBold } from './icons/IconBold.mjs';\nexport { default as IconBoltOff } from './icons/IconBoltOff.mjs';\nexport { default as IconBolt } from './icons/IconBolt.mjs';\nexport { default as IconBomb } from './icons/IconBomb.mjs';\nexport { default as IconBoneOff } from './icons/IconBoneOff.mjs';\nexport { default as IconBone } from './icons/IconBone.mjs';\nexport { default as IconBongOff } from './icons/IconBongOff.mjs';\nexport { default as IconBong } from './icons/IconBong.mjs';\nexport { default as IconBook2 } from './icons/IconBook2.mjs';\nexport { default as IconBookDownload } from './icons/IconBookDownload.mjs';\nexport { default as IconBookOff } from './icons/IconBookOff.mjs';\nexport { default as IconBookUpload } from './icons/IconBookUpload.mjs';\nexport { default as IconBook } from './icons/IconBook.mjs';\nexport { default as IconBookmarkAi } from './icons/IconBookmarkAi.mjs';\nexport { default as IconBookmarkEdit } from './icons/IconBookmarkEdit.mjs';\nexport { default as IconBookmarkMinus } from './icons/IconBookmarkMinus.mjs';\nexport { default as IconBookmarkOff } from './icons/IconBookmarkOff.mjs';\nexport { default as IconBookmarkPlus } from './icons/IconBookmarkPlus.mjs';\nexport { default as IconBookmarkQuestion } from './icons/IconBookmarkQuestion.mjs';\nexport { default as IconBookmark } from './icons/IconBookmark.mjs';\nexport { default as IconBookmarksOff } from './icons/IconBookmarksOff.mjs';\nexport { default as IconBookmarks } from './icons/IconBookmarks.mjs';\nexport { default as IconBooksOff } from './icons/IconBooksOff.mjs';\nexport { default as IconBooks } from './icons/IconBooks.mjs';\nexport { default as IconBoom } from './icons/IconBoom.mjs';\nexport { default as IconBorderAll } from './icons/IconBorderAll.mjs';\nexport { default as IconBorderBottomPlus } from './icons/IconBorderBottomPlus.mjs';\nexport { default as IconBorderBottom } from './icons/IconBorderBottom.mjs';\nexport { default as IconBorderCornerIos } from './icons/IconBorderCornerIos.mjs';\nexport { default as IconBorderCornerPill } from './icons/IconBorderCornerPill.mjs';\nexport { default as IconBorderCornerRounded } from './icons/IconBorderCornerRounded.mjs';\nexport { default as IconBorderCornerSquare } from './icons/IconBorderCornerSquare.mjs';\nexport { default as IconBorderCorners } from './icons/IconBorderCorners.mjs';\nexport { default as IconBorderHorizontal } from './icons/IconBorderHorizontal.mjs';\nexport { default as IconBorderInner } from './icons/IconBorderInner.mjs';\nexport { default as IconBorderLeftPlus } from './icons/IconBorderLeftPlus.mjs';\nexport { default as IconBorderLeft } from './icons/IconBorderLeft.mjs';\nexport { default as IconBorderNone } from './icons/IconBorderNone.mjs';\nexport { default as IconBorderOuter } from './icons/IconBorderOuter.mjs';\nexport { default as IconBorderRadius } from './icons/IconBorderRadius.mjs';\nexport { default as IconBorderRightPlus } from './icons/IconBorderRightPlus.mjs';\nexport { default as IconBorderRight } from './icons/IconBorderRight.mjs';\nexport { default as IconBorderSides } from './icons/IconBorderSides.mjs';\nexport { default as IconBorderStyle2 } from './icons/IconBorderStyle2.mjs';\nexport { default as IconBorderStyle } from './icons/IconBorderStyle.mjs';\nexport { default as IconBorderTopPlus } from './icons/IconBorderTopPlus.mjs';\nexport { default as IconBorderTop } from './icons/IconBorderTop.mjs';\nexport { default as IconBorderVertical } from './icons/IconBorderVertical.mjs';\nexport { default as IconBotId } from './icons/IconBotId.mjs';\nexport { default as IconBottleOff } from './icons/IconBottleOff.mjs';\nexport { default as IconBottle } from './icons/IconBottle.mjs';\nexport { default as IconBounceLeft } from './icons/IconBounceLeft.mjs';\nexport { default as IconBounceRight } from './icons/IconBounceRight.mjs';\nexport { default as IconBow } from './icons/IconBow.mjs';\nexport { default as IconBowlChopsticks } from './icons/IconBowlChopsticks.mjs';\nexport { default as IconBowlSpoon } from './icons/IconBowlSpoon.mjs';\nexport { default as IconBowl } from './icons/IconBowl.mjs';\nexport { default as IconBowling } from './icons/IconBowling.mjs';\nexport { default as IconBoxAlignBottomLeft } from './icons/IconBoxAlignBottomLeft.mjs';\nexport { default as IconBoxAlignBottomRight } from './icons/IconBoxAlignBottomRight.mjs';\nexport { default as IconBoxAlignBottom } from './icons/IconBoxAlignBottom.mjs';\nexport { default as IconBoxAlignLeft } from './icons/IconBoxAlignLeft.mjs';\nexport { default as IconBoxAlignRight } from './icons/IconBoxAlignRight.mjs';\nexport { default as IconBoxAlignTopLeft } from './icons/IconBoxAlignTopLeft.mjs';\nexport { default as IconBoxAlignTopRight } from './icons/IconBoxAlignTopRight.mjs';\nexport { default as IconBoxAlignTop } from './icons/IconBoxAlignTop.mjs';\nexport { default as IconBoxMargin } from './icons/IconBoxMargin.mjs';\nexport { default as IconBoxModel2Off } from './icons/IconBoxModel2Off.mjs';\nexport { default as IconBoxModel2 } from './icons/IconBoxModel2.mjs';\nexport { default as IconBoxModelOff } from './icons/IconBoxModelOff.mjs';\nexport { default as IconBoxModel } from './icons/IconBoxModel.mjs';\nexport { default as IconBoxMultiple0 } from './icons/IconBoxMultiple0.mjs';\nexport { default as IconBoxMultiple1 } from './icons/IconBoxMultiple1.mjs';\nexport { default as IconBoxMultiple2 } from './icons/IconBoxMultiple2.mjs';\nexport { default as IconBoxMultiple3 } from './icons/IconBoxMultiple3.mjs';\nexport { default as IconBoxMultiple4 } from './icons/IconBoxMultiple4.mjs';\nexport { default as IconBoxMultiple5 } from './icons/IconBoxMultiple5.mjs';\nexport { default as IconBoxMultiple6 } from './icons/IconBoxMultiple6.mjs';\nexport { default as IconBoxMultiple7 } from './icons/IconBoxMultiple7.mjs';\nexport { default as IconBoxMultiple8 } from './icons/IconBoxMultiple8.mjs';\nexport { default as IconBoxMultiple9 } from './icons/IconBoxMultiple9.mjs';\nexport { default as IconBoxMultiple } from './icons/IconBoxMultiple.mjs';\nexport { default as IconBoxOff } from './icons/IconBoxOff.mjs';\nexport { default as IconBoxPadding } from './icons/IconBoxPadding.mjs';\nexport { default as IconBox } from './icons/IconBox.mjs';\nexport { default as IconBracesOff } from './icons/IconBracesOff.mjs';\nexport { default as IconBraces } from './icons/IconBraces.mjs';\nexport { default as IconBracketsAngleOff } from './icons/IconBracketsAngleOff.mjs';\nexport { default as IconBracketsAngle } from './icons/IconBracketsAngle.mjs';\nexport { default as IconBracketsContainEnd } from './icons/IconBracketsContainEnd.mjs';\nexport { default as IconBracketsContainStart } from './icons/IconBracketsContainStart.mjs';\nexport { default as IconBracketsContain } from './icons/IconBracketsContain.mjs';\nexport { default as IconBracketsOff } from './icons/IconBracketsOff.mjs';\nexport { default as IconBrackets } from './icons/IconBrackets.mjs';\nexport { default as IconBraille } from './icons/IconBraille.mjs';\nexport { default as IconBrain } from './icons/IconBrain.mjs';\nexport { default as IconBrand4chan } from './icons/IconBrand4chan.mjs';\nexport { default as IconBrandAbstract } from './icons/IconBrandAbstract.mjs';\nexport { default as IconBrandAdobeAfterEffect } from './icons/IconBrandAdobeAfterEffect.mjs';\nexport { default as IconBrandAdobeIllustrator } from './icons/IconBrandAdobeIllustrator.mjs';\nexport { default as IconBrandAdobeIndesign } from './icons/IconBrandAdobeIndesign.mjs';\nexport { default as IconBrandAdobePhotoshop } from './icons/IconBrandAdobePhotoshop.mjs';\nexport { default as IconBrandAdobeXd } from './icons/IconBrandAdobeXd.mjs';\nexport { default as IconBrandAdobe } from './icons/IconBrandAdobe.mjs';\nexport { default as IconBrandAdonisJs } from './icons/IconBrandAdonisJs.mjs';\nexport { default as IconBrandAirbnb } from './icons/IconBrandAirbnb.mjs';\nexport { default as IconBrandAirtable } from './icons/IconBrandAirtable.mjs';\nexport { default as IconBrandAlgolia } from './icons/IconBrandAlgolia.mjs';\nexport { default as IconBrandAlipay } from './icons/IconBrandAlipay.mjs';\nexport { default as IconBrandAlpineJs } from './icons/IconBrandAlpineJs.mjs';\nexport { default as IconBrandAmazon } from './icons/IconBrandAmazon.mjs';\nexport { default as IconBrandAmd } from './icons/IconBrandAmd.mjs';\nexport { default as IconBrandAmie } from './icons/IconBrandAmie.mjs';\nexport { default as IconBrandAmigo } from './icons/IconBrandAmigo.mjs';\nexport { default as IconBrandAmongUs } from './icons/IconBrandAmongUs.mjs';\nexport { default as IconBrandAndroid } from './icons/IconBrandAndroid.mjs';\nexport { default as IconBrandAngular } from './icons/IconBrandAngular.mjs';\nexport { default as IconBrandAnsible } from './icons/IconBrandAnsible.mjs';\nexport { default as IconBrandAo3 } from './icons/IconBrandAo3.mjs';\nexport { default as IconBrandAppgallery } from './icons/IconBrandAppgallery.mjs';\nexport { default as IconBrandAppleArcade } from './icons/IconBrandAppleArcade.mjs';\nexport { default as IconBrandAppleNews } from './icons/IconBrandAppleNews.mjs';\nexport { default as IconBrandApplePodcast } from './icons/IconBrandApplePodcast.mjs';\nexport { default as IconBrandApple } from './icons/IconBrandApple.mjs';\nexport { default as IconBrandAppstore } from './icons/IconBrandAppstore.mjs';\nexport { default as IconBrandArc } from './icons/IconBrandArc.mjs';\nexport { default as IconBrandAsana } from './icons/IconBrandAsana.mjs';\nexport { default as IconBrandAstro } from './icons/IconBrandAstro.mjs';\nexport { default as IconBrandAuth0 } from './icons/IconBrandAuth0.mjs';\nexport { default as IconBrandAws } from './icons/IconBrandAws.mjs';\nexport { default as IconBrandAzure } from './icons/IconBrandAzure.mjs';\nexport { default as IconBrandBackbone } from './icons/IconBrandBackbone.mjs';\nexport { default as IconBrandBadoo } from './icons/IconBrandBadoo.mjs';\nexport { default as IconBrandBaidu } from './icons/IconBrandBaidu.mjs';\nexport { default as IconBrandBandcamp } from './icons/IconBrandBandcamp.mjs';\nexport { default as IconBrandBandlab } from './icons/IconBrandBandlab.mjs';\nexport { default as IconBrandBeats } from './icons/IconBrandBeats.mjs';\nexport { default as IconBrandBebo } from './icons/IconBrandBebo.mjs';\nexport { default as IconBrandBehance } from './icons/IconBrandBehance.mjs';\nexport { default as IconBrandBilibili } from './icons/IconBrandBilibili.mjs';\nexport { default as IconBrandBinance } from './icons/IconBrandBinance.mjs';\nexport { default as IconBrandBing } from './icons/IconBrandBing.mjs';\nexport { default as IconBrandBitbucket } from './icons/IconBrandBitbucket.mjs';\nexport { default as IconBrandBlackberry } from './icons/IconBrandBlackberry.mjs';\nexport { default as IconBrandBlender } from './icons/IconBrandBlender.mjs';\nexport { default as IconBrandBlogger } from './icons/IconBrandBlogger.mjs';\nexport { default as IconBrandBluesky } from './icons/IconBrandBluesky.mjs';\nexport { default as IconBrandBooking } from './icons/IconBrandBooking.mjs';\nexport { default as IconBrandBootstrap } from './icons/IconBrandBootstrap.mjs';\nexport { default as IconBrandBulma } from './icons/IconBrandBulma.mjs';\nexport { default as IconBrandBumble } from './icons/IconBrandBumble.mjs';\nexport { default as IconBrandBunpo } from './icons/IconBrandBunpo.mjs';\nexport { default as IconBrandCSharp } from './icons/IconBrandCSharp.mjs';\nexport { default as IconBrandCake } from './icons/IconBrandCake.mjs';\nexport { default as IconBrandCakephp } from './icons/IconBrandCakephp.mjs';\nexport { default as IconBrandCampaignmonitor } from './icons/IconBrandCampaignmonitor.mjs';\nexport { default as IconBrandCarbon } from './icons/IconBrandCarbon.mjs';\nexport { default as IconBrandCashapp } from './icons/IconBrandCashapp.mjs';\nexport { default as IconBrandChrome } from './icons/IconBrandChrome.mjs';\nexport { default as IconBrandCinema4d } from './icons/IconBrandCinema4d.mjs';\nexport { default as IconBrandCitymapper } from './icons/IconBrandCitymapper.mjs';\nexport { default as IconBrandCloudflare } from './icons/IconBrandCloudflare.mjs';\nexport { default as IconBrandCodecov } from './icons/IconBrandCodecov.mjs';\nexport { default as IconBrandCodepen } from './icons/IconBrandCodepen.mjs';\nexport { default as IconBrandCodesandbox } from './icons/IconBrandCodesandbox.mjs';\nexport { default as IconBrandCohost } from './icons/IconBrandCohost.mjs';\nexport { default as IconBrandCoinbase } from './icons/IconBrandCoinbase.mjs';\nexport { default as IconBrandComedyCentral } from './icons/IconBrandComedyCentral.mjs';\nexport { default as IconBrandCoreos } from './icons/IconBrandCoreos.mjs';\nexport { default as IconBrandCouchdb } from './icons/IconBrandCouchdb.mjs';\nexport { default as IconBrandCouchsurfing } from './icons/IconBrandCouchsurfing.mjs';\nexport { default as IconBrandCpp } from './icons/IconBrandCpp.mjs';\nexport { default as IconBrandCraft } from './icons/IconBrandCraft.mjs';\nexport { default as IconBrandCrunchbase } from './icons/IconBrandCrunchbase.mjs';\nexport { default as IconBrandCss3 } from './icons/IconBrandCss3.mjs';\nexport { default as IconBrandCtemplar } from './icons/IconBrandCtemplar.mjs';\nexport { default as IconBrandCucumber } from './icons/IconBrandCucumber.mjs';\nexport { default as IconBrandCupra } from './icons/IconBrandCupra.mjs';\nexport { default as IconBrandCypress } from './icons/IconBrandCypress.mjs';\nexport { default as IconBrandD3 } from './icons/IconBrandD3.mjs';\nexport { default as IconBrandDatabricks } from './icons/IconBrandDatabricks.mjs';\nexport { default as IconBrandDaysCounter } from './icons/IconBrandDaysCounter.mjs';\nexport { default as IconBrandDcos } from './icons/IconBrandDcos.mjs';\nexport { default as IconBrandDebian } from './icons/IconBrandDebian.mjs';\nexport { default as IconBrandDeezer } from './icons/IconBrandDeezer.mjs';\nexport { default as IconBrandDeliveroo } from './icons/IconBrandDeliveroo.mjs';\nexport { default as IconBrandDeno } from './icons/IconBrandDeno.mjs';\nexport { default as IconBrandDenodo } from './icons/IconBrandDenodo.mjs';\nexport { default as IconBrandDeviantart } from './icons/IconBrandDeviantart.mjs';\nexport { default as IconBrandDigg } from './icons/IconBrandDigg.mjs';\nexport { default as IconBrandDingtalk } from './icons/IconBrandDingtalk.mjs';\nexport { default as IconBrandDiscord } from './icons/IconBrandDiscord.mjs';\nexport { default as IconBrandDisney } from './icons/IconBrandDisney.mjs';\nexport { default as IconBrandDisqus } from './icons/IconBrandDisqus.mjs';\nexport { default as IconBrandDjango } from './icons/IconBrandDjango.mjs';\nexport { default as IconBrandDocker } from './icons/IconBrandDocker.mjs';\nexport { default as IconBrandDoctrine } from './icons/IconBrandDoctrine.mjs';\nexport { default as IconBrandDolbyDigital } from './icons/IconBrandDolbyDigital.mjs';\nexport { default as IconBrandDouban } from './icons/IconBrandDouban.mjs';\nexport { default as IconBrandDribbble } from './icons/IconBrandDribbble.mjs';\nexport { default as IconBrandDropbox } from './icons/IconBrandDropbox.mjs';\nexport { default as IconBrandDrops } from './icons/IconBrandDrops.mjs';\nexport { default as IconBrandDrupal } from './icons/IconBrandDrupal.mjs';\nexport { default as IconBrandEdge } from './icons/IconBrandEdge.mjs';\nexport { default as IconBrandElastic } from './icons/IconBrandElastic.mjs';\nexport { default as IconBrandElectronicArts } from './icons/IconBrandElectronicArts.mjs';\nexport { default as IconBrandEmber } from './icons/IconBrandEmber.mjs';\nexport { default as IconBrandEnvato } from './icons/IconBrandEnvato.mjs';\nexport { default as IconBrandEtsy } from './icons/IconBrandEtsy.mjs';\nexport { default as IconBrandEvernote } from './icons/IconBrandEvernote.mjs';\nexport { default as IconBrandFacebook } from './icons/IconBrandFacebook.mjs';\nexport { default as IconBrandFeedly } from './icons/IconBrandFeedly.mjs';\nexport { default as IconBrandFigma } from './icons/IconBrandFigma.mjs';\nexport { default as IconBrandFilezilla } from './icons/IconBrandFilezilla.mjs';\nexport { default as IconBrandFinder } from './icons/IconBrandFinder.mjs';\nexport { default as IconBrandFirebase } from './icons/IconBrandFirebase.mjs';\nexport { default as IconBrandFirefox } from './icons/IconBrandFirefox.mjs';\nexport { default as IconBrandFiverr } from './icons/IconBrandFiverr.mjs';\nexport { default as IconBrandFlickr } from './icons/IconBrandFlickr.mjs';\nexport { default as IconBrandFlightradar24 } from './icons/IconBrandFlightradar24.mjs';\nexport { default as IconBrandFlipboard } from './icons/IconBrandFlipboard.mjs';\nexport { default as IconBrandFlutter } from './icons/IconBrandFlutter.mjs';\nexport { default as IconBrandFortnite } from './icons/IconBrandFortnite.mjs';\nexport { default as IconBrandFoursquare } from './icons/IconBrandFoursquare.mjs';\nexport { default as IconBrandFramerMotion } from './icons/IconBrandFramerMotion.mjs';\nexport { default as IconBrandFramer } from './icons/IconBrandFramer.mjs';\nexport { default as IconBrandFunimation } from './icons/IconBrandFunimation.mjs';\nexport { default as IconBrandGatsby } from './icons/IconBrandGatsby.mjs';\nexport { default as IconBrandGit } from './icons/IconBrandGit.mjs';\nexport { default as IconBrandGithubCopilot } from './icons/IconBrandGithubCopilot.mjs';\nexport { default as IconBrandGithub } from './icons/IconBrandGithub.mjs';\nexport { default as IconBrandGitlab } from './icons/IconBrandGitlab.mjs';\nexport { default as IconBrandGmail } from './icons/IconBrandGmail.mjs';\nexport { default as IconBrandGolang } from './icons/IconBrandGolang.mjs';\nexport { default as IconBrandGoogleAnalytics } from './icons/IconBrandGoogleAnalytics.mjs';\nexport { default as IconBrandGoogleBigQuery } from './icons/IconBrandGoogleBigQuery.mjs';\nexport { default as IconBrandGoogleDrive } from './icons/IconBrandGoogleDrive.mjs';\nexport { default as IconBrandGoogleFit } from './icons/IconBrandGoogleFit.mjs';\nexport { default as IconBrandGoogleHome } from './icons/IconBrandGoogleHome.mjs';\nexport { default as IconBrandGoogleMaps } from './icons/IconBrandGoogleMaps.mjs';\nexport { default as IconBrandGoogleOne } from './icons/IconBrandGoogleOne.mjs';\nexport { default as IconBrandGooglePhotos } from './icons/IconBrandGooglePhotos.mjs';\nexport { default as IconBrandGooglePlay } from './icons/IconBrandGooglePlay.mjs';\nexport { default as IconBrandGooglePodcasts } from './icons/IconBrandGooglePodcasts.mjs';\nexport { default as IconBrandGoogle } from './icons/IconBrandGoogle.mjs';\nexport { default as IconBrandGrammarly } from './icons/IconBrandGrammarly.mjs';\nexport { default as IconBrandGraphql } from './icons/IconBrandGraphql.mjs';\nexport { default as IconBrandGravatar } from './icons/IconBrandGravatar.mjs';\nexport { default as IconBrandGrindr } from './icons/IconBrandGrindr.mjs';\nexport { default as IconBrandGuardian } from './icons/IconBrandGuardian.mjs';\nexport { default as IconBrandGumroad } from './icons/IconBrandGumroad.mjs';\nexport { default as IconBrandHackerrank } from './icons/IconBrandHackerrank.mjs';\nexport { default as IconBrandHbo } from './icons/IconBrandHbo.mjs';\nexport { default as IconBrandHeadlessui } from './icons/IconBrandHeadlessui.mjs';\nexport { default as IconBrandHexo } from './icons/IconBrandHexo.mjs';\nexport { default as IconBrandHipchat } from './icons/IconBrandHipchat.mjs';\nexport { default as IconBrandHtml5 } from './icons/IconBrandHtml5.mjs';\nexport { default as IconBrandInertia } from './icons/IconBrandInertia.mjs';\nexport { default as IconBrandInfakt } from './icons/IconBrandInfakt.mjs';\nexport { default as IconBrandInstagram } from './icons/IconBrandInstagram.mjs';\nexport { default as IconBrandIntercom } from './icons/IconBrandIntercom.mjs';\nexport { default as IconBrandItch } from './icons/IconBrandItch.mjs';\nexport { default as IconBrandJavascript } from './icons/IconBrandJavascript.mjs';\nexport { default as IconBrandJuejin } from './icons/IconBrandJuejin.mjs';\nexport { default as IconBrandKakoTalk } from './icons/IconBrandKakoTalk.mjs';\nexport { default as IconBrandKbin } from './icons/IconBrandKbin.mjs';\nexport { default as IconBrandKick } from './icons/IconBrandKick.mjs';\nexport { default as IconBrandKickstarter } from './icons/IconBrandKickstarter.mjs';\nexport { default as IconBrandKotlin } from './icons/IconBrandKotlin.mjs';\nexport { default as IconBrandLaravel } from './icons/IconBrandLaravel.mjs';\nexport { default as IconBrandLastfm } from './icons/IconBrandLastfm.mjs';\nexport { default as IconBrandLeetcode } from './icons/IconBrandLeetcode.mjs';\nexport { default as IconBrandLetterboxd } from './icons/IconBrandLetterboxd.mjs';\nexport { default as IconBrandLine } from './icons/IconBrandLine.mjs';\nexport { default as IconBrandLinkedin } from './icons/IconBrandLinkedin.mjs';\nexport { default as IconBrandLinktree } from './icons/IconBrandLinktree.mjs';\nexport { default as IconBrandLinqpad } from './icons/IconBrandLinqpad.mjs';\nexport { default as IconBrandLivewire } from './icons/IconBrandLivewire.mjs';\nexport { default as IconBrandLoom } from './icons/IconBrandLoom.mjs';\nexport { default as IconBrandMailgun } from './icons/IconBrandMailgun.mjs';\nexport { default as IconBrandMantine } from './icons/IconBrandMantine.mjs';\nexport { default as IconBrandMastercard } from './icons/IconBrandMastercard.mjs';\nexport { default as IconBrandMastodon } from './icons/IconBrandMastodon.mjs';\nexport { default as IconBrandMatrix } from './icons/IconBrandMatrix.mjs';\nexport { default as IconBrandMcdonalds } from './icons/IconBrandMcdonalds.mjs';\nexport { default as IconBrandMedium } from './icons/IconBrandMedium.mjs';\nexport { default as IconBrandMeetup } from './icons/IconBrandMeetup.mjs';\nexport { default as IconBrandMercedes } from './icons/IconBrandMercedes.mjs';\nexport { default as IconBrandMessenger } from './icons/IconBrandMessenger.mjs';\nexport { default as IconBrandMeta } from './icons/IconBrandMeta.mjs';\nexport { default as IconBrandMetabrainz } from './icons/IconBrandMetabrainz.mjs';\nexport { default as IconBrandMinecraft } from './icons/IconBrandMinecraft.mjs';\nexport { default as IconBrandMiniprogram } from './icons/IconBrandMiniprogram.mjs';\nexport { default as IconBrandMixpanel } from './icons/IconBrandMixpanel.mjs';\nexport { default as IconBrandMonday } from './icons/IconBrandMonday.mjs';\nexport { default as IconBrandMongodb } from './icons/IconBrandMongodb.mjs';\nexport { default as IconBrandMyOppo } from './icons/IconBrandMyOppo.mjs';\nexport { default as IconBrandMysql } from './icons/IconBrandMysql.mjs';\nexport { default as IconBrandNationalGeographic } from './icons/IconBrandNationalGeographic.mjs';\nexport { default as IconBrandNem } from './icons/IconBrandNem.mjs';\nexport { default as IconBrandNetbeans } from './icons/IconBrandNetbeans.mjs';\nexport { default as IconBrandNeteaseMusic } from './icons/IconBrandNeteaseMusic.mjs';\nexport { default as IconBrandNetflix } from './icons/IconBrandNetflix.mjs';\nexport { default as IconBrandNexo } from './icons/IconBrandNexo.mjs';\nexport { default as IconBrandNextcloud } from './icons/IconBrandNextcloud.mjs';\nexport { default as IconBrandNextjs } from './icons/IconBrandNextjs.mjs';\nexport { default as IconBrandNodejs } from './icons/IconBrandNodejs.mjs';\nexport { default as IconBrandNordVpn } from './icons/IconBrandNordVpn.mjs';\nexport { default as IconBrandNotion } from './icons/IconBrandNotion.mjs';\nexport { default as IconBrandNpm } from './icons/IconBrandNpm.mjs';\nexport { default as IconBrandNuxt } from './icons/IconBrandNuxt.mjs';\nexport { default as IconBrandNytimes } from './icons/IconBrandNytimes.mjs';\nexport { default as IconBrandOauth } from './icons/IconBrandOauth.mjs';\nexport { default as IconBrandOffice } from './icons/IconBrandOffice.mjs';\nexport { default as IconBrandOkRu } from './icons/IconBrandOkRu.mjs';\nexport { default as IconBrandOnedrive } from './icons/IconBrandOnedrive.mjs';\nexport { default as IconBrandOnlyfans } from './icons/IconBrandOnlyfans.mjs';\nexport { default as IconBrandOpenSource } from './icons/IconBrandOpenSource.mjs';\nexport { default as IconBrandOpenai } from './icons/IconBrandOpenai.mjs';\nexport { default as IconBrandOpenvpn } from './icons/IconBrandOpenvpn.mjs';\nexport { default as IconBrandOpera } from './icons/IconBrandOpera.mjs';\nexport { default as IconBrandPagekit } from './icons/IconBrandPagekit.mjs';\nexport { default as IconBrandParsinta } from './icons/IconBrandParsinta.mjs';\nexport { default as IconBrandPatreon } from './icons/IconBrandPatreon.mjs';\nexport { default as IconBrandPaypal } from './icons/IconBrandPaypal.mjs';\nexport { default as IconBrandPaypay } from './icons/IconBrandPaypay.mjs';\nexport { default as IconBrandPeanut } from './icons/IconBrandPeanut.mjs';\nexport { default as IconBrandPepsi } from './icons/IconBrandPepsi.mjs';\nexport { default as IconBrandPhp } from './icons/IconBrandPhp.mjs';\nexport { default as IconBrandPicsart } from './icons/IconBrandPicsart.mjs';\nexport { default as IconBrandPinterest } from './icons/IconBrandPinterest.mjs';\nexport { default as IconBrandPlanetscale } from './icons/IconBrandPlanetscale.mjs';\nexport { default as IconBrandPnpm } from './icons/IconBrandPnpm.mjs';\nexport { default as IconBrandPocket } from './icons/IconBrandPocket.mjs';\nexport { default as IconBrandPolymer } from './icons/IconBrandPolymer.mjs';\nexport { default as IconBrandPowershell } from './icons/IconBrandPowershell.mjs';\nexport { default as IconBrandPrintables } from './icons/IconBrandPrintables.mjs';\nexport { default as IconBrandPrisma } from './icons/IconBrandPrisma.mjs';\nexport { default as IconBrandProducthunt } from './icons/IconBrandProducthunt.mjs';\nexport { default as IconBrandPushbullet } from './icons/IconBrandPushbullet.mjs';\nexport { default as IconBrandPushover } from './icons/IconBrandPushover.mjs';\nexport { default as IconBrandPython } from './icons/IconBrandPython.mjs';\nexport { default as IconBrandQq } from './icons/IconBrandQq.mjs';\nexport { default as IconBrandRadixUi } from './icons/IconBrandRadixUi.mjs';\nexport { default as IconBrandReactNative } from './icons/IconBrandReactNative.mjs';\nexport { default as IconBrandReact } from './icons/IconBrandReact.mjs';\nexport { default as IconBrandReason } from './icons/IconBrandReason.mjs';\nexport { default as IconBrandReddit } from './icons/IconBrandReddit.mjs';\nexport { default as IconBrandRedhat } from './icons/IconBrandRedhat.mjs';\nexport { default as IconBrandRedux } from './icons/IconBrandRedux.mjs';\nexport { default as IconBrandRevolut } from './icons/IconBrandRevolut.mjs';\nexport { default as IconBrandRumble } from './icons/IconBrandRumble.mjs';\nexport { default as IconBrandRust } from './icons/IconBrandRust.mjs';\nexport { default as IconBrandSafari } from './icons/IconBrandSafari.mjs';\nexport { default as IconBrandSamsungpass } from './icons/IconBrandSamsungpass.mjs';\nexport { default as IconBrandSass } from './icons/IconBrandSass.mjs';\nexport { default as IconBrandSentry } from './icons/IconBrandSentry.mjs';\nexport { default as IconBrandSharik } from './icons/IconBrandSharik.mjs';\nexport { default as IconBrandShazam } from './icons/IconBrandShazam.mjs';\nexport { default as IconBrandShopee } from './icons/IconBrandShopee.mjs';\nexport { default as IconBrandSketch } from './icons/IconBrandSketch.mjs';\nexport { default as IconBrandSkype } from './icons/IconBrandSkype.mjs';\nexport { default as IconBrandSlack } from './icons/IconBrandSlack.mjs';\nexport { default as IconBrandSnapchat } from './icons/IconBrandSnapchat.mjs';\nexport { default as IconBrandSnapseed } from './icons/IconBrandSnapseed.mjs';\nexport { default as IconBrandSnowflake } from './icons/IconBrandSnowflake.mjs';\nexport { default as IconBrandSocketIo } from './icons/IconBrandSocketIo.mjs';\nexport { default as IconBrandSolidjs } from './icons/IconBrandSolidjs.mjs';\nexport { default as IconBrandSoundcloud } from './icons/IconBrandSoundcloud.mjs';\nexport { default as IconBrandSpacehey } from './icons/IconBrandSpacehey.mjs';\nexport { default as IconBrandSpeedtest } from './icons/IconBrandSpeedtest.mjs';\nexport { default as IconBrandSpotify } from './icons/IconBrandSpotify.mjs';\nexport { default as IconBrandStackoverflow } from './icons/IconBrandStackoverflow.mjs';\nexport { default as IconBrandStackshare } from './icons/IconBrandStackshare.mjs';\nexport { default as IconBrandSteam } from './icons/IconBrandSteam.mjs';\nexport { default as IconBrandStocktwits } from './icons/IconBrandStocktwits.mjs';\nexport { default as IconBrandStorj } from './icons/IconBrandStorj.mjs';\nexport { default as IconBrandStorybook } from './icons/IconBrandStorybook.mjs';\nexport { default as IconBrandStorytel } from './icons/IconBrandStorytel.mjs';\nexport { default as IconBrandStrava } from './icons/IconBrandStrava.mjs';\nexport { default as IconBrandStripe } from './icons/IconBrandStripe.mjs';\nexport { default as IconBrandSublimeText } from './icons/IconBrandSublimeText.mjs';\nexport { default as IconBrandSugarizer } from './icons/IconBrandSugarizer.mjs';\nexport { default as IconBrandSupabase } from './icons/IconBrandSupabase.mjs';\nexport { default as IconBrandSuperhuman } from './icons/IconBrandSuperhuman.mjs';\nexport { default as IconBrandSupernova } from './icons/IconBrandSupernova.mjs';\nexport { default as IconBrandSurfshark } from './icons/IconBrandSurfshark.mjs';\nexport { default as IconBrandSvelte } from './icons/IconBrandSvelte.mjs';\nexport { default as IconBrandSwift } from './icons/IconBrandSwift.mjs';\nexport { default as IconBrandSymfony } from './icons/IconBrandSymfony.mjs';\nexport { default as IconBrandTabler } from './icons/IconBrandTabler.mjs';\nexport { default as IconBrandTabnine } from './icons/IconBrandTabnine.mjs';\nexport { default as IconBrandTailwind } from './icons/IconBrandTailwind.mjs';\nexport { default as IconBrandTaobao } from './icons/IconBrandTaobao.mjs';\nexport { default as IconBrandTeams } from './icons/IconBrandTeams.mjs';\nexport { default as IconBrandTed } from './icons/IconBrandTed.mjs';\nexport { default as IconBrandTelegram } from './icons/IconBrandTelegram.mjs';\nexport { default as IconBrandTerraform } from './icons/IconBrandTerraform.mjs';\nexport { default as IconBrandTesla } from './icons/IconBrandTesla.mjs';\nexport { default as IconBrandTether } from './icons/IconBrandTether.mjs';\nexport { default as IconBrandThingiverse } from './icons/IconBrandThingiverse.mjs';\nexport { default as IconBrandThreads } from './icons/IconBrandThreads.mjs';\nexport { default as IconBrandThreejs } from './icons/IconBrandThreejs.mjs';\nexport { default as IconBrandTidal } from './icons/IconBrandTidal.mjs';\nexport { default as IconBrandTiktok } from './icons/IconBrandTiktok.mjs';\nexport { default as IconBrandTinder } from './icons/IconBrandTinder.mjs';\nexport { default as IconBrandTopbuzz } from './icons/IconBrandTopbuzz.mjs';\nexport { default as IconBrandTorchain } from './icons/IconBrandTorchain.mjs';\nexport { default as IconBrandToyota } from './icons/IconBrandToyota.mjs';\nexport { default as IconBrandTrello } from './icons/IconBrandTrello.mjs';\nexport { default as IconBrandTripadvisor } from './icons/IconBrandTripadvisor.mjs';\nexport { default as IconBrandTumblr } from './icons/IconBrandTumblr.mjs';\nexport { default as IconBrandTwilio } from './icons/IconBrandTwilio.mjs';\nexport { default as IconBrandTwitch } from './icons/IconBrandTwitch.mjs';\nexport { default as IconBrandTwitter } from './icons/IconBrandTwitter.mjs';\nexport { default as IconBrandTypescript } from './icons/IconBrandTypescript.mjs';\nexport { default as IconBrandUber } from './icons/IconBrandUber.mjs';\nexport { default as IconBrandUbuntu } from './icons/IconBrandUbuntu.mjs';\nexport { default as IconBrandUnity } from './icons/IconBrandUnity.mjs';\nexport { default as IconBrandUnsplash } from './icons/IconBrandUnsplash.mjs';\nexport { default as IconBrandUpwork } from './icons/IconBrandUpwork.mjs';\nexport { default as IconBrandValorant } from './icons/IconBrandValorant.mjs';\nexport { default as IconBrandVercel } from './icons/IconBrandVercel.mjs';\nexport { default as IconBrandVimeo } from './icons/IconBrandVimeo.mjs';\nexport { default as IconBrandVinted } from './icons/IconBrandVinted.mjs';\nexport { default as IconBrandVisa } from './icons/IconBrandVisa.mjs';\nexport { default as IconBrandVisualStudio } from './icons/IconBrandVisualStudio.mjs';\nexport { default as IconBrandVite } from './icons/IconBrandVite.mjs';\nexport { default as IconBrandVivaldi } from './icons/IconBrandVivaldi.mjs';\nexport { default as IconBrandVk } from './icons/IconBrandVk.mjs';\nexport { default as IconBrandVlc } from './icons/IconBrandVlc.mjs';\nexport { default as IconBrandVolkswagen } from './icons/IconBrandVolkswagen.mjs';\nexport { default as IconBrandVsco } from './icons/IconBrandVsco.mjs';\nexport { default as IconBrandVscode } from './icons/IconBrandVscode.mjs';\nexport { default as IconBrandVue } from './icons/IconBrandVue.mjs';\nexport { default as IconBrandWalmart } from './icons/IconBrandWalmart.mjs';\nexport { default as IconBrandWaze } from './icons/IconBrandWaze.mjs';\nexport { default as IconBrandWebflow } from './icons/IconBrandWebflow.mjs';\nexport { default as IconBrandWechat } from './icons/IconBrandWechat.mjs';\nexport { default as IconBrandWeibo } from './icons/IconBrandWeibo.mjs';\nexport { default as IconBrandWhatsapp } from './icons/IconBrandWhatsapp.mjs';\nexport { default as IconBrandWikipedia } from './icons/IconBrandWikipedia.mjs';\nexport { default as IconBrandWindows } from './icons/IconBrandWindows.mjs';\nexport { default as IconBrandWindy } from './icons/IconBrandWindy.mjs';\nexport { default as IconBrandWish } from './icons/IconBrandWish.mjs';\nexport { default as IconBrandWix } from './icons/IconBrandWix.mjs';\nexport { default as IconBrandWordpress } from './icons/IconBrandWordpress.mjs';\nexport { default as IconBrandX } from './icons/IconBrandX.mjs';\nexport { default as IconBrandXamarin } from './icons/IconBrandXamarin.mjs';\nexport { default as IconBrandXbox } from './icons/IconBrandXbox.mjs';\nexport { default as IconBrandXdeep } from './icons/IconBrandXdeep.mjs';\nexport { default as IconBrandXing } from './icons/IconBrandXing.mjs';\nexport { default as IconBrandYahoo } from './icons/IconBrandYahoo.mjs';\nexport { default as IconBrandYandex } from './icons/IconBrandYandex.mjs';\nexport { default as IconBrandYarn } from './icons/IconBrandYarn.mjs';\nexport { default as IconBrandYatse } from './icons/IconBrandYatse.mjs';\nexport { default as IconBrandYcombinator } from './icons/IconBrandYcombinator.mjs';\nexport { default as IconBrandYoutubeKids } from './icons/IconBrandYoutubeKids.mjs';\nexport { default as IconBrandYoutube } from './icons/IconBrandYoutube.mjs';\nexport { default as IconBrandZalando } from './icons/IconBrandZalando.mjs';\nexport { default as IconBrandZapier } from './icons/IconBrandZapier.mjs';\nexport { default as IconBrandZeit } from './icons/IconBrandZeit.mjs';\nexport { default as IconBrandZhihu } from './icons/IconBrandZhihu.mjs';\nexport { default as IconBrandZoom } from './icons/IconBrandZoom.mjs';\nexport { default as IconBrandZulip } from './icons/IconBrandZulip.mjs';\nexport { default as IconBrandZwift } from './icons/IconBrandZwift.mjs';\nexport { default as IconBreadOff } from './icons/IconBreadOff.mjs';\nexport { default as IconBread } from './icons/IconBread.mjs';\nexport { default as IconBriefcase2 } from './icons/IconBriefcase2.mjs';\nexport { default as IconBriefcaseOff } from './icons/IconBriefcaseOff.mjs';\nexport { default as IconBriefcase } from './icons/IconBriefcase.mjs';\nexport { default as IconBrightness2 } from './icons/IconBrightness2.mjs';\nexport { default as IconBrightnessAuto } from './icons/IconBrightnessAuto.mjs';\nexport { default as IconBrightnessDown } from './icons/IconBrightnessDown.mjs';\nexport { default as IconBrightnessHalf } from './icons/IconBrightnessHalf.mjs';\nexport { default as IconBrightnessOff } from './icons/IconBrightnessOff.mjs';\nexport { default as IconBrightnessUp } from './icons/IconBrightnessUp.mjs';\nexport { default as IconBrightness } from './icons/IconBrightness.mjs';\nexport { default as IconBroadcastOff } from './icons/IconBroadcastOff.mjs';\nexport { default as IconBroadcast } from './icons/IconBroadcast.mjs';\nexport { default as IconBrowserCheck } from './icons/IconBrowserCheck.mjs';\nexport { default as IconBrowserMaximize } from './icons/IconBrowserMaximize.mjs';\nexport { default as IconBrowserMinus } from './icons/IconBrowserMinus.mjs';\nexport { default as IconBrowserOff } from './icons/IconBrowserOff.mjs';\nexport { default as IconBrowserPlus } from './icons/IconBrowserPlus.mjs';\nexport { default as IconBrowserShare } from './icons/IconBrowserShare.mjs';\nexport { default as IconBrowserX } from './icons/IconBrowserX.mjs';\nexport { default as IconBrowser } from './icons/IconBrowser.mjs';\nexport { default as IconBrushOff } from './icons/IconBrushOff.mjs';\nexport { default as IconBrush } from './icons/IconBrush.mjs';\nexport { default as IconBubbleMinus } from './icons/IconBubbleMinus.mjs';\nexport { default as IconBubblePlus } from './icons/IconBubblePlus.mjs';\nexport { default as IconBubbleTea2 } from './icons/IconBubbleTea2.mjs';\nexport { default as IconBubbleTea } from './icons/IconBubbleTea.mjs';\nexport { default as IconBubbleText } from './icons/IconBubbleText.mjs';\nexport { default as IconBubbleX } from './icons/IconBubbleX.mjs';\nexport { default as IconBubble } from './icons/IconBubble.mjs';\nexport { default as IconBucketDroplet } from './icons/IconBucketDroplet.mjs';\nexport { default as IconBucketOff } from './icons/IconBucketOff.mjs';\nexport { default as IconBucket } from './icons/IconBucket.mjs';\nexport { default as IconBugOff } from './icons/IconBugOff.mjs';\nexport { default as IconBug } from './icons/IconBug.mjs';\nexport { default as IconBuildingAirport } from './icons/IconBuildingAirport.mjs';\nexport { default as IconBuildingArch } from './icons/IconBuildingArch.mjs';\nexport { default as IconBuildingBank } from './icons/IconBuildingBank.mjs';\nexport { default as IconBuildingBridge2 } from './icons/IconBuildingBridge2.mjs';\nexport { default as IconBuildingBridge } from './icons/IconBuildingBridge.mjs';\nexport { default as IconBuildingBroadcastTower } from './icons/IconBuildingBroadcastTower.mjs';\nexport { default as IconBuildingBurjAlArab } from './icons/IconBuildingBurjAlArab.mjs';\nexport { default as IconBuildingCarousel } from './icons/IconBuildingCarousel.mjs';\nexport { default as IconBuildingCastle } from './icons/IconBuildingCastle.mjs';\nexport { default as IconBuildingChurch } from './icons/IconBuildingChurch.mjs';\nexport { default as IconBuildingCircus } from './icons/IconBuildingCircus.mjs';\nexport { default as IconBuildingCog } from './icons/IconBuildingCog.mjs';\nexport { default as IconBuildingCommunity } from './icons/IconBuildingCommunity.mjs';\nexport { default as IconBuildingCottage } from './icons/IconBuildingCottage.mjs';\nexport { default as IconBuildingEstate } from './icons/IconBuildingEstate.mjs';\nexport { default as IconBuildingFactory2 } from './icons/IconBuildingFactory2.mjs';\nexport { default as IconBuildingFactory } from './icons/IconBuildingFactory.mjs';\nexport { default as IconBuildingFortress } from './icons/IconBuildingFortress.mjs';\nexport { default as IconBuildingHospital } from './icons/IconBuildingHospital.mjs';\nexport { default as IconBuildingLighthouse } from './icons/IconBuildingLighthouse.mjs';\nexport { default as IconBuildingMinus } from './icons/IconBuildingMinus.mjs';\nexport { default as IconBuildingMonument } from './icons/IconBuildingMonument.mjs';\nexport { default as IconBuildingMosque } from './icons/IconBuildingMosque.mjs';\nexport { default as IconBuildingOff } from './icons/IconBuildingOff.mjs';\nexport { default as IconBuildingPavilion } from './icons/IconBuildingPavilion.mjs';\nexport { default as IconBuildingPlus } from './icons/IconBuildingPlus.mjs';\nexport { default as IconBuildingSkyscraper } from './icons/IconBuildingSkyscraper.mjs';\nexport { default as IconBuildingStadium } from './icons/IconBuildingStadium.mjs';\nexport { default as IconBuildingStore } from './icons/IconBuildingStore.mjs';\nexport { default as IconBuildingTunnel } from './icons/IconBuildingTunnel.mjs';\nexport { default as IconBuildingWarehouse } from './icons/IconBuildingWarehouse.mjs';\nexport { default as IconBuildingWindTurbine } from './icons/IconBuildingWindTurbine.mjs';\nexport { default as IconBuilding } from './icons/IconBuilding.mjs';\nexport { default as IconBuildings } from './icons/IconBuildings.mjs';\nexport { default as IconBulbOff } from './icons/IconBulbOff.mjs';\nexport { default as IconBulb } from './icons/IconBulb.mjs';\nexport { default as IconBulldozer } from './icons/IconBulldozer.mjs';\nexport { default as IconBurger } from './icons/IconBurger.mjs';\nexport { default as IconBusOff } from './icons/IconBusOff.mjs';\nexport { default as IconBusStop } from './icons/IconBusStop.mjs';\nexport { default as IconBus } from './icons/IconBus.mjs';\nexport { default as IconBusinessplan } from './icons/IconBusinessplan.mjs';\nexport { default as IconButterfly } from './icons/IconButterfly.mjs';\nexport { default as IconCactusOff } from './icons/IconCactusOff.mjs';\nexport { default as IconCactus } from './icons/IconCactus.mjs';\nexport { default as IconCakeOff } from './icons/IconCakeOff.mjs';\nexport { default as IconCakeRoll } from './icons/IconCakeRoll.mjs';\nexport { default as IconCake } from './icons/IconCake.mjs';\nexport { default as IconCalculatorOff } from './icons/IconCalculatorOff.mjs';\nexport { default as IconCalculator } from './icons/IconCalculator.mjs';\nexport { default as IconCalendarBolt } from './icons/IconCalendarBolt.mjs';\nexport { default as IconCalendarCancel } from './icons/IconCalendarCancel.mjs';\nexport { default as IconCalendarCheck } from './icons/IconCalendarCheck.mjs';\nexport { default as IconCalendarClock } from './icons/IconCalendarClock.mjs';\nexport { default as IconCalendarCode } from './icons/IconCalendarCode.mjs';\nexport { default as IconCalendarCog } from './icons/IconCalendarCog.mjs';\nexport { default as IconCalendarDollar } from './icons/IconCalendarDollar.mjs';\nexport { default as IconCalendarDot } from './icons/IconCalendarDot.mjs';\nexport { default as IconCalendarDown } from './icons/IconCalendarDown.mjs';\nexport { default as IconCalendarDue } from './icons/IconCalendarDue.mjs';\nexport { default as IconCalendarEvent } from './icons/IconCalendarEvent.mjs';\nexport { default as IconCalendarExclamation } from './icons/IconCalendarExclamation.mjs';\nexport { default as IconCalendarHeart } from './icons/IconCalendarHeart.mjs';\nexport { default as IconCalendarMinus } from './icons/IconCalendarMinus.mjs';\nexport { default as IconCalendarMonth } from './icons/IconCalendarMonth.mjs';\nexport { default as IconCalendarOff } from './icons/IconCalendarOff.mjs';\nexport { default as IconCalendarPause } from './icons/IconCalendarPause.mjs';\nexport { default as IconCalendarPin } from './icons/IconCalendarPin.mjs';\nexport { default as IconCalendarPlus } from './icons/IconCalendarPlus.mjs';\nexport { default as IconCalendarQuestion } from './icons/IconCalendarQuestion.mjs';\nexport { default as IconCalendarRepeat } from './icons/IconCalendarRepeat.mjs';\nexport { default as IconCalendarSad } from './icons/IconCalendarSad.mjs';\nexport { default as IconCalendarSearch } from './icons/IconCalendarSearch.mjs';\nexport { default as IconCalendarShare } from './icons/IconCalendarShare.mjs';\nexport { default as IconCalendarSmile } from './icons/IconCalendarSmile.mjs';\nexport { default as IconCalendarStar } from './icons/IconCalendarStar.mjs';\nexport { default as IconCalendarStats } from './icons/IconCalendarStats.mjs';\nexport { default as IconCalendarTime } from './icons/IconCalendarTime.mjs';\nexport { default as IconCalendarUp } from './icons/IconCalendarUp.mjs';\nexport { default as IconCalendarUser } from './icons/IconCalendarUser.mjs';\nexport { default as IconCalendarWeek } from './icons/IconCalendarWeek.mjs';\nexport { default as IconCalendarX } from './icons/IconCalendarX.mjs';\nexport { default as IconCalendar } from './icons/IconCalendar.mjs';\nexport { default as IconCameraAi } from './icons/IconCameraAi.mjs';\nexport { default as IconCameraBitcoin } from './icons/IconCameraBitcoin.mjs';\nexport { default as IconCameraBolt } from './icons/IconCameraBolt.mjs';\nexport { default as IconCameraCancel } from './icons/IconCameraCancel.mjs';\nexport { default as IconCameraCheck } from './icons/IconCameraCheck.mjs';\nexport { default as IconCameraCode } from './icons/IconCameraCode.mjs';\nexport { default as IconCameraCog } from './icons/IconCameraCog.mjs';\nexport { default as IconCameraDollar } from './icons/IconCameraDollar.mjs';\nexport { default as IconCameraDown } from './icons/IconCameraDown.mjs';\nexport { default as IconCameraExclamation } from './icons/IconCameraExclamation.mjs';\nexport { default as IconCameraHeart } from './icons/IconCameraHeart.mjs';\nexport { default as IconCameraMinus } from './icons/IconCameraMinus.mjs';\nexport { default as IconCameraMoon } from './icons/IconCameraMoon.mjs';\nexport { default as IconCameraOff } from './icons/IconCameraOff.mjs';\nexport { default as IconCameraPause } from './icons/IconCameraPause.mjs';\nexport { default as IconCameraPin } from './icons/IconCameraPin.mjs';\nexport { default as IconCameraPlus } from './icons/IconCameraPlus.mjs';\nexport { default as IconCameraQuestion } from './icons/IconCameraQuestion.mjs';\nexport { default as IconCameraRotate } from './icons/IconCameraRotate.mjs';\nexport { default as IconCameraSearch } from './icons/IconCameraSearch.mjs';\nexport { default as IconCameraSelfie } from './icons/IconCameraSelfie.mjs';\nexport { default as IconCameraShare } from './icons/IconCameraShare.mjs';\nexport { default as IconCameraSpark } from './icons/IconCameraSpark.mjs';\nexport { default as IconCameraStar } from './icons/IconCameraStar.mjs';\nexport { default as IconCameraUp } from './icons/IconCameraUp.mjs';\nexport { default as IconCameraX } from './icons/IconCameraX.mjs';\nexport { default as IconCamera } from './icons/IconCamera.mjs';\nexport { default as IconCamper } from './icons/IconCamper.mjs';\nexport { default as IconCampfire } from './icons/IconCampfire.mjs';\nexport { default as IconCanary } from './icons/IconCanary.mjs';\nexport { default as IconCancel } from './icons/IconCancel.mjs';\nexport { default as IconCandle } from './icons/IconCandle.mjs';\nexport { default as IconCandyOff } from './icons/IconCandyOff.mjs';\nexport { default as IconCandy } from './icons/IconCandy.mjs';\nexport { default as IconCane } from './icons/IconCane.mjs';\nexport { default as IconCannabis } from './icons/IconCannabis.mjs';\nexport { default as IconCapProjecting } from './icons/IconCapProjecting.mjs';\nexport { default as IconCapRounded } from './icons/IconCapRounded.mjs';\nexport { default as IconCapStraight } from './icons/IconCapStraight.mjs';\nexport { default as IconCapsuleHorizontal } from './icons/IconCapsuleHorizontal.mjs';\nexport { default as IconCapsule } from './icons/IconCapsule.mjs';\nexport { default as IconCaptureOff } from './icons/IconCaptureOff.mjs';\nexport { default as IconCapture } from './icons/IconCapture.mjs';\nexport { default as IconCar4wd } from './icons/IconCar4wd.mjs';\nexport { default as IconCarCrane } from './icons/IconCarCrane.mjs';\nexport { default as IconCarCrash } from './icons/IconCarCrash.mjs';\nexport { default as IconCarFan1 } from './icons/IconCarFan1.mjs';\nexport { default as IconCarFan2 } from './icons/IconCarFan2.mjs';\nexport { default as IconCarFan3 } from './icons/IconCarFan3.mjs';\nexport { default as IconCarFanAuto } from './icons/IconCarFanAuto.mjs';\nexport { default as IconCarFan } from './icons/IconCarFan.mjs';\nexport { default as IconCarGarage } from './icons/IconCarGarage.mjs';\nexport { default as IconCarOff } from './icons/IconCarOff.mjs';\nexport { default as IconCarSuv } from './icons/IconCarSuv.mjs';\nexport { default as IconCarTurbine } from './icons/IconCarTurbine.mjs';\nexport { default as IconCar } from './icons/IconCar.mjs';\nexport { default as IconCarambola } from './icons/IconCarambola.mjs';\nexport { default as IconCaravan } from './icons/IconCaravan.mjs';\nexport { default as IconCardboardsOff } from './icons/IconCardboardsOff.mjs';\nexport { default as IconCardboards } from './icons/IconCardboards.mjs';\nexport { default as IconCards } from './icons/IconCards.mjs';\nexport { default as IconCaretDown } from './icons/IconCaretDown.mjs';\nexport { default as IconCaretLeftRight } from './icons/IconCaretLeftRight.mjs';\nexport { default as IconCaretLeft } from './icons/IconCaretLeft.mjs';\nexport { default as IconCaretRight } from './icons/IconCaretRight.mjs';\nexport { default as IconCaretUpDown } from './icons/IconCaretUpDown.mjs';\nexport { default as IconCaretUp } from './icons/IconCaretUp.mjs';\nexport { default as IconCarouselHorizontal } from './icons/IconCarouselHorizontal.mjs';\nexport { default as IconCarouselVertical } from './icons/IconCarouselVertical.mjs';\nexport { default as IconCarrotOff } from './icons/IconCarrotOff.mjs';\nexport { default as IconCarrot } from './icons/IconCarrot.mjs';\nexport { default as IconCashBanknoteEdit } from './icons/IconCashBanknoteEdit.mjs';\nexport { default as IconCashBanknoteHeart } from './icons/IconCashBanknoteHeart.mjs';\nexport { default as IconCashBanknoteMinus } from './icons/IconCashBanknoteMinus.mjs';\nexport { default as IconCashBanknoteMoveBack } from './icons/IconCashBanknoteMoveBack.mjs';\nexport { default as IconCashBanknoteMove } from './icons/IconCashBanknoteMove.mjs';\nexport { default as IconCashBanknoteOff } from './icons/IconCashBanknoteOff.mjs';\nexport { default as IconCashBanknotePlus } from './icons/IconCashBanknotePlus.mjs';\nexport { default as IconCashBanknote } from './icons/IconCashBanknote.mjs';\nexport { default as IconCashEdit } from './icons/IconCashEdit.mjs';\nexport { default as IconCashHeart } from './icons/IconCashHeart.mjs';\nexport { default as IconCashMinus } from './icons/IconCashMinus.mjs';\nexport { default as IconCashMoveBack } from './icons/IconCashMoveBack.mjs';\nexport { default as IconCashMove } from './icons/IconCashMove.mjs';\nexport { default as IconCashOff } from './icons/IconCashOff.mjs';\nexport { default as IconCashPlus } from './icons/IconCashPlus.mjs';\nexport { default as IconCashRegister } from './icons/IconCashRegister.mjs';\nexport { default as IconCash } from './icons/IconCash.mjs';\nexport { default as IconCastOff } from './icons/IconCastOff.mjs';\nexport { default as IconCast } from './icons/IconCast.mjs';\nexport { default as IconCat } from './icons/IconCat.mjs';\nexport { default as IconCategory2 } from './icons/IconCategory2.mjs';\nexport { default as IconCategoryMinus } from './icons/IconCategoryMinus.mjs';\nexport { default as IconCategoryPlus } from './icons/IconCategoryPlus.mjs';\nexport { default as IconCategory } from './icons/IconCategory.mjs';\nexport { default as IconCeOff } from './icons/IconCeOff.mjs';\nexport { default as IconCe } from './icons/IconCe.mjs';\nexport { default as IconCellSignal1 } from './icons/IconCellSignal1.mjs';\nexport { default as IconCellSignal2 } from './icons/IconCellSignal2.mjs';\nexport { default as IconCellSignal3 } from './icons/IconCellSignal3.mjs';\nexport { default as IconCellSignal4 } from './icons/IconCellSignal4.mjs';\nexport { default as IconCellSignal5 } from './icons/IconCellSignal5.mjs';\nexport { default as IconCellSignalOff } from './icons/IconCellSignalOff.mjs';\nexport { default as IconCell } from './icons/IconCell.mjs';\nexport { default as IconCertificate2Off } from './icons/IconCertificate2Off.mjs';\nexport { default as IconCertificate2 } from './icons/IconCertificate2.mjs';\nexport { default as IconCertificateOff } from './icons/IconCertificateOff.mjs';\nexport { default as IconCertificate } from './icons/IconCertificate.mjs';\nexport { default as IconChairDirector } from './icons/IconChairDirector.mjs';\nexport { default as IconChalkboardOff } from './icons/IconChalkboardOff.mjs';\nexport { default as IconChalkboardTeacher } from './icons/IconChalkboardTeacher.mjs';\nexport { default as IconChalkboard } from './icons/IconChalkboard.mjs';\nexport { default as IconChargingPile } from './icons/IconChargingPile.mjs';\nexport { default as IconChartArcs3 } from './icons/IconChartArcs3.mjs';\nexport { default as IconChartArcs } from './icons/IconChartArcs.mjs';\nexport { default as IconChartAreaLine } from './icons/IconChartAreaLine.mjs';\nexport { default as IconChartArea } from './icons/IconChartArea.mjs';\nexport { default as IconChartArrowsVertical } from './icons/IconChartArrowsVertical.mjs';\nexport { default as IconChartArrows } from './icons/IconChartArrows.mjs';\nexport { default as IconChartBarOff } from './icons/IconChartBarOff.mjs';\nexport { default as IconChartBarPopular } from './icons/IconChartBarPopular.mjs';\nexport { default as IconChartBar } from './icons/IconChartBar.mjs';\nexport { default as IconChartBubble } from './icons/IconChartBubble.mjs';\nexport { default as IconChartCandle } from './icons/IconChartCandle.mjs';\nexport { default as IconChartCircles } from './icons/IconChartCircles.mjs';\nexport { default as IconChartCohort } from './icons/IconChartCohort.mjs';\nexport { default as IconChartColumn } from './icons/IconChartColumn.mjs';\nexport { default as IconChartCovariate } from './icons/IconChartCovariate.mjs';\nexport { default as IconChartDonut2 } from './icons/IconChartDonut2.mjs';\nexport { default as IconChartDonut3 } from './icons/IconChartDonut3.mjs';\nexport { default as IconChartDonut4 } from './icons/IconChartDonut4.mjs';\nexport { default as IconChartDonut } from './icons/IconChartDonut.mjs';\nexport { default as IconChartDots2 } from './icons/IconChartDots2.mjs';\nexport { default as IconChartDots3 } from './icons/IconChartDots3.mjs';\nexport { default as IconChartDots } from './icons/IconChartDots.mjs';\nexport { default as IconChartFunnel } from './icons/IconChartFunnel.mjs';\nexport { default as IconChartGridDots } from './icons/IconChartGridDots.mjs';\nexport { default as IconChartHistogram } from './icons/IconChartHistogram.mjs';\nexport { default as IconChartInfographic } from './icons/IconChartInfographic.mjs';\nexport { default as IconChartLine } from './icons/IconChartLine.mjs';\nexport { default as IconChartPie2 } from './icons/IconChartPie2.mjs';\nexport { default as IconChartPie3 } from './icons/IconChartPie3.mjs';\nexport { default as IconChartPie4 } from './icons/IconChartPie4.mjs';\nexport { default as IconChartPieOff } from './icons/IconChartPieOff.mjs';\nexport { default as IconChartPie } from './icons/IconChartPie.mjs';\nexport { default as IconChartPpf } from './icons/IconChartPpf.mjs';\nexport { default as IconChartRadar } from './icons/IconChartRadar.mjs';\nexport { default as IconChartSankey } from './icons/IconChartSankey.mjs';\nexport { default as IconChartScatter3d } from './icons/IconChartScatter3d.mjs';\nexport { default as IconChartScatter } from './icons/IconChartScatter.mjs';\nexport { default as IconChartTreemap } from './icons/IconChartTreemap.mjs';\nexport { default as IconCheck } from './icons/IconCheck.mjs';\nexport { default as IconCheckbox } from './icons/IconCheckbox.mjs';\nexport { default as IconChecklist } from './icons/IconChecklist.mjs';\nexport { default as IconChecks } from './icons/IconChecks.mjs';\nexport { default as IconCheckupList } from './icons/IconCheckupList.mjs';\nexport { default as IconCheese } from './icons/IconCheese.mjs';\nexport { default as IconChefHatOff } from './icons/IconChefHatOff.mjs';\nexport { default as IconChefHat } from './icons/IconChefHat.mjs';\nexport { default as IconCherry } from './icons/IconCherry.mjs';\nexport { default as IconChessBishop } from './icons/IconChessBishop.mjs';\nexport { default as IconChessKing } from './icons/IconChessKing.mjs';\nexport { default as IconChessKnight } from './icons/IconChessKnight.mjs';\nexport { default as IconChessQueen } from './icons/IconChessQueen.mjs';\nexport { default as IconChessRook } from './icons/IconChessRook.mjs';\nexport { default as IconChess } from './icons/IconChess.mjs';\nexport { default as IconChevronCompactDown } from './icons/IconChevronCompactDown.mjs';\nexport { default as IconChevronCompactLeft } from './icons/IconChevronCompactLeft.mjs';\nexport { default as IconChevronCompactRight } from './icons/IconChevronCompactRight.mjs';\nexport { default as IconChevronCompactUp } from './icons/IconChevronCompactUp.mjs';\nexport { default as IconChevronDownLeft } from './icons/IconChevronDownLeft.mjs';\nexport { default as IconChevronDownRight } from './icons/IconChevronDownRight.mjs';\nexport { default as IconChevronDown } from './icons/IconChevronDown.mjs';\nexport { default as IconChevronLeftPipe } from './icons/IconChevronLeftPipe.mjs';\nexport { default as IconChevronLeft } from './icons/IconChevronLeft.mjs';\nexport { default as IconChevronRightPipe } from './icons/IconChevronRightPipe.mjs';\nexport { default as IconChevronRight } from './icons/IconChevronRight.mjs';\nexport { default as IconChevronUpLeft } from './icons/IconChevronUpLeft.mjs';\nexport { default as IconChevronUpRight } from './icons/IconChevronUpRight.mjs';\nexport { default as IconChevronUp } from './icons/IconChevronUp.mjs';\nexport { default as IconChevronsDownLeft } from './icons/IconChevronsDownLeft.mjs';\nexport { default as IconChevronsDownRight } from './icons/IconChevronsDownRight.mjs';\nexport { default as IconChevronsDown } from './icons/IconChevronsDown.mjs';\nexport { default as IconChevronsLeft } from './icons/IconChevronsLeft.mjs';\nexport { default as IconChevronsRight } from './icons/IconChevronsRight.mjs';\nexport { default as IconChevronsUpLeft } from './icons/IconChevronsUpLeft.mjs';\nexport { default as IconChevronsUpRight } from './icons/IconChevronsUpRight.mjs';\nexport { default as IconChevronsUp } from './icons/IconChevronsUp.mjs';\nexport { default as IconChisel } from './icons/IconChisel.mjs';\nexport { default as IconChristmasBall } from './icons/IconChristmasBall.mjs';\nexport { default as IconChristmasTreeOff } from './icons/IconChristmasTreeOff.mjs';\nexport { default as IconChristmasTree } from './icons/IconChristmasTree.mjs';\nexport { default as IconCircleArrowDownLeft } from './icons/IconCircleArrowDownLeft.mjs';\nexport { default as IconCircleArrowDownRight } from './icons/IconCircleArrowDownRight.mjs';\nexport { default as IconCircleArrowDown } from './icons/IconCircleArrowDown.mjs';\nexport { default as IconCircleArrowLeft } from './icons/IconCircleArrowLeft.mjs';\nexport { default as IconCircleArrowRight } from './icons/IconCircleArrowRight.mjs';\nexport { default as IconCircleArrowUpLeft } from './icons/IconCircleArrowUpLeft.mjs';\nexport { default as IconCircleArrowUpRight } from './icons/IconCircleArrowUpRight.mjs';\nexport { default as IconCircleArrowUp } from './icons/IconCircleArrowUp.mjs';\nexport { default as IconCircleAsterisk } from './icons/IconCircleAsterisk.mjs';\nexport { default as IconCircleCaretDown } from './icons/IconCircleCaretDown.mjs';\nexport { default as IconCircleCaretLeft } from './icons/IconCircleCaretLeft.mjs';\nexport { default as IconCircleCaretRight } from './icons/IconCircleCaretRight.mjs';\nexport { default as IconCircleCaretUp } from './icons/IconCircleCaretUp.mjs';\nexport { default as IconCircleCheck } from './icons/IconCircleCheck.mjs';\nexport { default as IconCircleChevronDown } from './icons/IconCircleChevronDown.mjs';\nexport { default as IconCircleChevronLeft } from './icons/IconCircleChevronLeft.mjs';\nexport { default as IconCircleChevronRight } from './icons/IconCircleChevronRight.mjs';\nexport { default as IconCircleChevronUp } from './icons/IconCircleChevronUp.mjs';\nexport { default as IconCircleChevronsDown } from './icons/IconCircleChevronsDown.mjs';\nexport { default as IconCircleChevronsLeft } from './icons/IconCircleChevronsLeft.mjs';\nexport { default as IconCircleChevronsRight } from './icons/IconCircleChevronsRight.mjs';\nexport { default as IconCircleChevronsUp } from './icons/IconCircleChevronsUp.mjs';\nexport { default as IconCircleDashedCheck } from './icons/IconCircleDashedCheck.mjs';\nexport { default as IconCircleDashedLetterA } from './icons/IconCircleDashedLetterA.mjs';\nexport { default as IconCircleDashedLetterB } from './icons/IconCircleDashedLetterB.mjs';\nexport { default as IconCircleDashedLetterC } from './icons/IconCircleDashedLetterC.mjs';\nexport { default as IconCircleDashedLetterD } from './icons/IconCircleDashedLetterD.mjs';\nexport { default as IconCircleDashedLetterE } from './icons/IconCircleDashedLetterE.mjs';\nexport { default as IconCircleDashedLetterF } from './icons/IconCircleDashedLetterF.mjs';\nexport { default as IconCircleDashedLetterG } from './icons/IconCircleDashedLetterG.mjs';\nexport { default as IconCircleDashedLetterH } from './icons/IconCircleDashedLetterH.mjs';\nexport { default as IconCircleDashedLetterI } from './icons/IconCircleDashedLetterI.mjs';\nexport { default as IconCircleDashedLetterJ } from './icons/IconCircleDashedLetterJ.mjs';\nexport { default as IconCircleDashedLetterK } from './icons/IconCircleDashedLetterK.mjs';\nexport { default as IconCircleDashedLetterL } from './icons/IconCircleDashedLetterL.mjs';\nexport { default as IconCircleDashedLetterM } from './icons/IconCircleDashedLetterM.mjs';\nexport { default as IconCircleDashedLetterN } from './icons/IconCircleDashedLetterN.mjs';\nexport { default as IconCircleDashedLetterO } from './icons/IconCircleDashedLetterO.mjs';\nexport { default as IconCircleDashedLetterP } from './icons/IconCircleDashedLetterP.mjs';\nexport { default as IconCircleDashedLetterQ } from './icons/IconCircleDashedLetterQ.mjs';\nexport { default as IconCircleDashedLetterR } from './icons/IconCircleDashedLetterR.mjs';\nexport { default as IconCircleDashedLetterS } from './icons/IconCircleDashedLetterS.mjs';\nexport { default as IconCircleDashedLetterT } from './icons/IconCircleDashedLetterT.mjs';\nexport { default as IconCircleDashedLetterU } from './icons/IconCircleDashedLetterU.mjs';\nexport { default as IconCircleDashedLetterW } from './icons/IconCircleDashedLetterW.mjs';\nexport { default as IconCircleDashedLetterX } from './icons/IconCircleDashedLetterX.mjs';\nexport { default as IconCircleDashedLetterY } from './icons/IconCircleDashedLetterY.mjs';\nexport { default as IconCircleDashedLetterZ } from './icons/IconCircleDashedLetterZ.mjs';\nexport { default as IconCircleDashedMinus } from './icons/IconCircleDashedMinus.mjs';\nexport { default as IconCircleDashedNumber0 } from './icons/IconCircleDashedNumber0.mjs';\nexport { default as IconCircleDashedNumber1 } from './icons/IconCircleDashedNumber1.mjs';\nexport { default as IconCircleDashedNumber2 } from './icons/IconCircleDashedNumber2.mjs';\nexport { default as IconCircleDashedNumber3 } from './icons/IconCircleDashedNumber3.mjs';\nexport { default as IconCircleDashedNumber4 } from './icons/IconCircleDashedNumber4.mjs';\nexport { default as IconCircleDashedNumber5 } from './icons/IconCircleDashedNumber5.mjs';\nexport { default as IconCircleDashedNumber6 } from './icons/IconCircleDashedNumber6.mjs';\nexport { default as IconCircleDashedNumber7 } from './icons/IconCircleDashedNumber7.mjs';\nexport { default as IconCircleDashedNumber8 } from './icons/IconCircleDashedNumber8.mjs';\nexport { default as IconCircleDashedNumber9 } from './icons/IconCircleDashedNumber9.mjs';\nexport { default as IconCircleDashedPercentage } from './icons/IconCircleDashedPercentage.mjs';\nexport { default as IconCircleDashedPlus } from './icons/IconCircleDashedPlus.mjs';\nexport { default as IconCircleDashedX } from './icons/IconCircleDashedX.mjs';\nexport { default as IconCircleDashed } from './icons/IconCircleDashed.mjs';\nexport { default as IconCircleDot } from './icons/IconCircleDot.mjs';\nexport { default as IconCircleDottedLetterA } from './icons/IconCircleDottedLetterA.mjs';\nexport { default as IconCircleDottedLetterB } from './icons/IconCircleDottedLetterB.mjs';\nexport { default as IconCircleDottedLetterC } from './icons/IconCircleDottedLetterC.mjs';\nexport { default as IconCircleDottedLetterD } from './icons/IconCircleDottedLetterD.mjs';\nexport { default as IconCircleDottedLetterE } from './icons/IconCircleDottedLetterE.mjs';\nexport { default as IconCircleDottedLetterF } from './icons/IconCircleDottedLetterF.mjs';\nexport { default as IconCircleDottedLetterG } from './icons/IconCircleDottedLetterG.mjs';\nexport { default as IconCircleDottedLetterH } from './icons/IconCircleDottedLetterH.mjs';\nexport { default as IconCircleDottedLetterI } from './icons/IconCircleDottedLetterI.mjs';\nexport { default as IconCircleDottedLetterJ } from './icons/IconCircleDottedLetterJ.mjs';\nexport { default as IconCircleDottedLetterK } from './icons/IconCircleDottedLetterK.mjs';\nexport { default as IconCircleDottedLetterL } from './icons/IconCircleDottedLetterL.mjs';\nexport { default as IconCircleDottedLetterM } from './icons/IconCircleDottedLetterM.mjs';\nexport { default as IconCircleDottedLetterN } from './icons/IconCircleDottedLetterN.mjs';\nexport { default as IconCircleDottedLetterO } from './icons/IconCircleDottedLetterO.mjs';\nexport { default as IconCircleDottedLetterP } from './icons/IconCircleDottedLetterP.mjs';\nexport { default as IconCircleDottedLetterQ } from './icons/IconCircleDottedLetterQ.mjs';\nexport { default as IconCircleDottedLetterR } from './icons/IconCircleDottedLetterR.mjs';\nexport { default as IconCircleDottedLetterS } from './icons/IconCircleDottedLetterS.mjs';\nexport { default as IconCircleDottedLetterT } from './icons/IconCircleDottedLetterT.mjs';\nexport { default as IconCircleDottedLetterU } from './icons/IconCircleDottedLetterU.mjs';\nexport { default as IconCircleDottedLetterV } from './icons/IconCircleDottedLetterV.mjs';\nexport { default as IconCircleDottedLetterW } from './icons/IconCircleDottedLetterW.mjs';\nexport { default as IconCircleDottedLetterX } from './icons/IconCircleDottedLetterX.mjs';\nexport { default as IconCircleDottedLetterY } from './icons/IconCircleDottedLetterY.mjs';\nexport { default as IconCircleDottedLetterZ } from './icons/IconCircleDottedLetterZ.mjs';\nexport { default as IconCircleDotted } from './icons/IconCircleDotted.mjs';\nexport { default as IconCircleHalf2 } from './icons/IconCircleHalf2.mjs';\nexport { default as IconCircleHalfVertical } from './icons/IconCircleHalfVertical.mjs';\nexport { default as IconCircleHalf } from './icons/IconCircleHalf.mjs';\nexport { default as IconCircleKey } from './icons/IconCircleKey.mjs';\nexport { default as IconCircleLetterA } from './icons/IconCircleLetterA.mjs';\nexport { default as IconCircleLetterB } from './icons/IconCircleLetterB.mjs';\nexport { default as IconCircleLetterC } from './icons/IconCircleLetterC.mjs';\nexport { default as IconCircleLetterD } from './icons/IconCircleLetterD.mjs';\nexport { default as IconCircleLetterE } from './icons/IconCircleLetterE.mjs';\nexport { default as IconCircleLetterF } from './icons/IconCircleLetterF.mjs';\nexport { default as IconCircleLetterG } from './icons/IconCircleLetterG.mjs';\nexport { default as IconCircleLetterH } from './icons/IconCircleLetterH.mjs';\nexport { default as IconCircleLetterI } from './icons/IconCircleLetterI.mjs';\nexport { default as IconCircleLetterJ } from './icons/IconCircleLetterJ.mjs';\nexport { default as IconCircleLetterK } from './icons/IconCircleLetterK.mjs';\nexport { default as IconCircleLetterL } from './icons/IconCircleLetterL.mjs';\nexport { default as IconCircleLetterM } from './icons/IconCircleLetterM.mjs';\nexport { default as IconCircleLetterN } from './icons/IconCircleLetterN.mjs';\nexport { default as IconCircleLetterO } from './icons/IconCircleLetterO.mjs';\nexport { default as IconCircleLetterP } from './icons/IconCircleLetterP.mjs';\nexport { default as IconCircleLetterQ } from './icons/IconCircleLetterQ.mjs';\nexport { default as IconCircleLetterR } from './icons/IconCircleLetterR.mjs';\nexport { default as IconCircleLetterS } from './icons/IconCircleLetterS.mjs';\nexport { default as IconCircleLetterT } from './icons/IconCircleLetterT.mjs';\nexport { default as IconCircleLetterU } from './icons/IconCircleLetterU.mjs';\nexport { default as IconCircleLetterV } from './icons/IconCircleLetterV.mjs';\nexport { default as IconCircleLetterW } from './icons/IconCircleLetterW.mjs';\nexport { default as IconCircleLetterX } from './icons/IconCircleLetterX.mjs';\nexport { default as IconCircleLetterY } from './icons/IconCircleLetterY.mjs';\nexport { default as IconCircleLetterZ } from './icons/IconCircleLetterZ.mjs';\nexport { default as IconCircleMinus2 } from './icons/IconCircleMinus2.mjs';\nexport { default as IconCircleMinus } from './icons/IconCircleMinus.mjs';\nexport { default as IconCircleOff } from './icons/IconCircleOff.mjs';\nexport { default as IconCircleOpenArrowDown } from './icons/IconCircleOpenArrowDown.mjs';\nexport { default as IconCircleOpenArrowLeft } from './icons/IconCircleOpenArrowLeft.mjs';\nexport { default as IconCircleOpenArrowRight } from './icons/IconCircleOpenArrowRight.mjs';\nexport { default as IconCircleOpenArrowUp } from './icons/IconCircleOpenArrowUp.mjs';\nexport { default as IconCirclePercentage } from './icons/IconCirclePercentage.mjs';\nexport { default as IconCirclePlus2 } from './icons/IconCirclePlus2.mjs';\nexport { default as IconCirclePlusMinus } from './icons/IconCirclePlusMinus.mjs';\nexport { default as IconCirclePlus } from './icons/IconCirclePlus.mjs';\nexport { default as IconCircleRectangleOff } from './icons/IconCircleRectangleOff.mjs';\nexport { default as IconCircleRectangle } from './icons/IconCircleRectangle.mjs';\nexport { default as IconCircleSquare } from './icons/IconCircleSquare.mjs';\nexport { default as IconCircleTriangle } from './icons/IconCircleTriangle.mjs';\nexport { default as IconCircleX } from './icons/IconCircleX.mjs';\nexport { default as IconCircle } from './icons/IconCircle.mjs';\nexport { default as IconCirclesRelation } from './icons/IconCirclesRelation.mjs';\nexport { default as IconCircles } from './icons/IconCircles.mjs';\nexport { default as IconCircuitAmmeter } from './icons/IconCircuitAmmeter.mjs';\nexport { default as IconCircuitBattery } from './icons/IconCircuitBattery.mjs';\nexport { default as IconCircuitBulb } from './icons/IconCircuitBulb.mjs';\nexport { default as IconCircuitCapacitorPolarized } from './icons/IconCircuitCapacitorPolarized.mjs';\nexport { default as IconCircuitCapacitor } from './icons/IconCircuitCapacitor.mjs';\nexport { default as IconCircuitCellPlus } from './icons/IconCircuitCellPlus.mjs';\nexport { default as IconCircuitCell } from './icons/IconCircuitCell.mjs';\nexport { default as IconCircuitChangeover } from './icons/IconCircuitChangeover.mjs';\nexport { default as IconCircuitDiodeZener } from './icons/IconCircuitDiodeZener.mjs';\nexport { default as IconCircuitDiode } from './icons/IconCircuitDiode.mjs';\nexport { default as IconCircuitGroundDigital } from './icons/IconCircuitGroundDigital.mjs';\nexport { default as IconCircuitGround } from './icons/IconCircuitGround.mjs';\nexport { default as IconCircuitInductor } from './icons/IconCircuitInductor.mjs';\nexport { default as IconCircuitMotor } from './icons/IconCircuitMotor.mjs';\nexport { default as IconCircuitPushbutton } from './icons/IconCircuitPushbutton.mjs';\nexport { default as IconCircuitResistor } from './icons/IconCircuitResistor.mjs';\nexport { default as IconCircuitSwitchClosed } from './icons/IconCircuitSwitchClosed.mjs';\nexport { default as IconCircuitSwitchOpen } from './icons/IconCircuitSwitchOpen.mjs';\nexport { default as IconCircuitVoltmeter } from './icons/IconCircuitVoltmeter.mjs';\nexport { default as IconClearAll } from './icons/IconClearAll.mjs';\nexport { default as IconClearFormatting } from './icons/IconClearFormatting.mjs';\nexport { default as IconClick } from './icons/IconClick.mjs';\nexport { default as IconCliffJumping } from './icons/IconCliffJumping.mjs';\nexport { default as IconClipboardCheck } from './icons/IconClipboardCheck.mjs';\nexport { default as IconClipboardCopy } from './icons/IconClipboardCopy.mjs';\nexport { default as IconClipboardData } from './icons/IconClipboardData.mjs';\nexport { default as IconClipboardHeart } from './icons/IconClipboardHeart.mjs';\nexport { default as IconClipboardList } from './icons/IconClipboardList.mjs';\nexport { default as IconClipboardOff } from './icons/IconClipboardOff.mjs';\nexport { default as IconClipboardPlus } from './icons/IconClipboardPlus.mjs';\nexport { default as IconClipboardSearch } from './icons/IconClipboardSearch.mjs';\nexport { default as IconClipboardSmile } from './icons/IconClipboardSmile.mjs';\nexport { default as IconClipboardText } from './icons/IconClipboardText.mjs';\nexport { default as IconClipboardTypography } from './icons/IconClipboardTypography.mjs';\nexport { default as IconClipboardX } from './icons/IconClipboardX.mjs';\nexport { default as IconClipboard } from './icons/IconClipboard.mjs';\nexport { default as IconClock12 } from './icons/IconClock12.mjs';\nexport { default as IconClock2 } from './icons/IconClock2.mjs';\nexport { default as IconClock24 } from './icons/IconClock24.mjs';\nexport { default as IconClockBitcoin } from './icons/IconClockBitcoin.mjs';\nexport { default as IconClockBolt } from './icons/IconClockBolt.mjs';\nexport { default as IconClockCancel } from './icons/IconClockCancel.mjs';\nexport { default as IconClockCheck } from './icons/IconClockCheck.mjs';\nexport { default as IconClockCode } from './icons/IconClockCode.mjs';\nexport { default as IconClockCog } from './icons/IconClockCog.mjs';\nexport { default as IconClockDollar } from './icons/IconClockDollar.mjs';\nexport { default as IconClockDown } from './icons/IconClockDown.mjs';\nexport { default as IconClockEdit } from './icons/IconClockEdit.mjs';\nexport { default as IconClockExclamation } from './icons/IconClockExclamation.mjs';\nexport { default as IconClockHeart } from './icons/IconClockHeart.mjs';\nexport { default as IconClockHour1 } from './icons/IconClockHour1.mjs';\nexport { default as IconClockHour10 } from './icons/IconClockHour10.mjs';\nexport { default as IconClockHour11 } from './icons/IconClockHour11.mjs';\nexport { default as IconClockHour12 } from './icons/IconClockHour12.mjs';\nexport { default as IconClockHour2 } from './icons/IconClockHour2.mjs';\nexport { default as IconClockHour3 } from './icons/IconClockHour3.mjs';\nexport { default as IconClockHour4 } from './icons/IconClockHour4.mjs';\nexport { default as IconClockHour5 } from './icons/IconClockHour5.mjs';\nexport { default as IconClockHour6 } from './icons/IconClockHour6.mjs';\nexport { default as IconClockHour7 } from './icons/IconClockHour7.mjs';\nexport { default as IconClockHour8 } from './icons/IconClockHour8.mjs';\nexport { default as IconClockHour9 } from './icons/IconClockHour9.mjs';\nexport { default as IconClockMinus } from './icons/IconClockMinus.mjs';\nexport { default as IconClockOff } from './icons/IconClockOff.mjs';\nexport { default as IconClockPause } from './icons/IconClockPause.mjs';\nexport { default as IconClockPin } from './icons/IconClockPin.mjs';\nexport { default as IconClockPlay } from './icons/IconClockPlay.mjs';\nexport { default as IconClockPlus } from './icons/IconClockPlus.mjs';\nexport { default as IconClockQuestion } from './icons/IconClockQuestion.mjs';\nexport { default as IconClockRecord } from './icons/IconClockRecord.mjs';\nexport { default as IconClockSearch } from './icons/IconClockSearch.mjs';\nexport { default as IconClockShare } from './icons/IconClockShare.mjs';\nexport { default as IconClockShield } from './icons/IconClockShield.mjs';\nexport { default as IconClockStar } from './icons/IconClockStar.mjs';\nexport { default as IconClockStop } from './icons/IconClockStop.mjs';\nexport { default as IconClockUp } from './icons/IconClockUp.mjs';\nexport { default as IconClockX } from './icons/IconClockX.mjs';\nexport { default as IconClock } from './icons/IconClock.mjs';\nexport { default as IconClothesRackOff } from './icons/IconClothesRackOff.mjs';\nexport { default as IconClothesRack } from './icons/IconClothesRack.mjs';\nexport { default as IconCloudBitcoin } from './icons/IconCloudBitcoin.mjs';\nexport { default as IconCloudBolt } from './icons/IconCloudBolt.mjs';\nexport { default as IconCloudCancel } from './icons/IconCloudCancel.mjs';\nexport { default as IconCloudCheck } from './icons/IconCloudCheck.mjs';\nexport { default as IconCloudCode } from './icons/IconCloudCode.mjs';\nexport { default as IconCloudCog } from './icons/IconCloudCog.mjs';\nexport { default as IconCloudComputing } from './icons/IconCloudComputing.mjs';\nexport { default as IconCloudDataConnection } from './icons/IconCloudDataConnection.mjs';\nexport { default as IconCloudDollar } from './icons/IconCloudDollar.mjs';\nexport { default as IconCloudDown } from './icons/IconCloudDown.mjs';\nexport { default as IconCloudDownload } from './icons/IconCloudDownload.mjs';\nexport { default as IconCloudExclamation } from './icons/IconCloudExclamation.mjs';\nexport { default as IconCloudFog } from './icons/IconCloudFog.mjs';\nexport { default as IconCloudHeart } from './icons/IconCloudHeart.mjs';\nexport { default as IconCloudLockOpen } from './icons/IconCloudLockOpen.mjs';\nexport { default as IconCloudLock } from './icons/IconCloudLock.mjs';\nexport { default as IconCloudMinus } from './icons/IconCloudMinus.mjs';\nexport { default as IconCloudNetwork } from './icons/IconCloudNetwork.mjs';\nexport { default as IconCloudOff } from './icons/IconCloudOff.mjs';\nexport { default as IconCloudPause } from './icons/IconCloudPause.mjs';\nexport { default as IconCloudPin } from './icons/IconCloudPin.mjs';\nexport { default as IconCloudPlus } from './icons/IconCloudPlus.mjs';\nexport { default as IconCloudQuestion } from './icons/IconCloudQuestion.mjs';\nexport { default as IconCloudRain } from './icons/IconCloudRain.mjs';\nexport { default as IconCloudSearch } from './icons/IconCloudSearch.mjs';\nexport { default as IconCloudShare } from './icons/IconCloudShare.mjs';\nexport { default as IconCloudSnow } from './icons/IconCloudSnow.mjs';\nexport { default as IconCloudStar } from './icons/IconCloudStar.mjs';\nexport { default as IconCloudStorm } from './icons/IconCloudStorm.mjs';\nexport { default as IconCloudUp } from './icons/IconCloudUp.mjs';\nexport { default as IconCloudUpload } from './icons/IconCloudUpload.mjs';\nexport { default as IconCloudX } from './icons/IconCloudX.mjs';\nexport { default as IconCloud } from './icons/IconCloud.mjs';\nexport { default as IconClover2 } from './icons/IconClover2.mjs';\nexport { default as IconClover } from './icons/IconClover.mjs';\nexport { default as IconClubs } from './icons/IconClubs.mjs';\nexport { default as IconCodeCircle2 } from './icons/IconCodeCircle2.mjs';\nexport { default as IconCodeCircle } from './icons/IconCodeCircle.mjs';\nexport { default as IconCodeDots } from './icons/IconCodeDots.mjs';\nexport { default as IconCodeMinus } from './icons/IconCodeMinus.mjs';\nexport { default as IconCodeOff } from './icons/IconCodeOff.mjs';\nexport { default as IconCodePlus } from './icons/IconCodePlus.mjs';\nexport { default as IconCodeVariableMinus } from './icons/IconCodeVariableMinus.mjs';\nexport { default as IconCodeVariablePlus } from './icons/IconCodeVariablePlus.mjs';\nexport { default as IconCodeVariable } from './icons/IconCodeVariable.mjs';\nexport { default as IconCode } from './icons/IconCode.mjs';\nexport { default as IconCodeblock } from './icons/IconCodeblock.mjs';\nexport { default as IconCoffeeOff } from './icons/IconCoffeeOff.mjs';\nexport { default as IconCoffee } from './icons/IconCoffee.mjs';\nexport { default as IconCoffin } from './icons/IconCoffin.mjs';\nexport { default as IconCoinBitcoin } from './icons/IconCoinBitcoin.mjs';\nexport { default as IconCoinEuro } from './icons/IconCoinEuro.mjs';\nexport { default as IconCoinMonero } from './icons/IconCoinMonero.mjs';\nexport { default as IconCoinOff } from './icons/IconCoinOff.mjs';\nexport { default as IconCoinPound } from './icons/IconCoinPound.mjs';\nexport { default as IconCoinRupee } from './icons/IconCoinRupee.mjs';\nexport { default as IconCoinTaka } from './icons/IconCoinTaka.mjs';\nexport { default as IconCoinYen } from './icons/IconCoinYen.mjs';\nexport { default as IconCoinYuan } from './icons/IconCoinYuan.mjs';\nexport { default as IconCoin } from './icons/IconCoin.mjs';\nexport { default as IconCoins } from './icons/IconCoins.mjs';\nexport { default as IconColorFilter } from './icons/IconColorFilter.mjs';\nexport { default as IconColorPickerOff } from './icons/IconColorPickerOff.mjs';\nexport { default as IconColorPicker } from './icons/IconColorPicker.mjs';\nexport { default as IconColorSwatchOff } from './icons/IconColorSwatchOff.mjs';\nexport { default as IconColorSwatch } from './icons/IconColorSwatch.mjs';\nexport { default as IconColumnInsertLeft } from './icons/IconColumnInsertLeft.mjs';\nexport { default as IconColumnInsertRight } from './icons/IconColumnInsertRight.mjs';\nexport { default as IconColumnRemove } from './icons/IconColumnRemove.mjs';\nexport { default as IconColumns1 } from './icons/IconColumns1.mjs';\nexport { default as IconColumns2 } from './icons/IconColumns2.mjs';\nexport { default as IconColumns3 } from './icons/IconColumns3.mjs';\nexport { default as IconColumnsOff } from './icons/IconColumnsOff.mjs';\nexport { default as IconColumns } from './icons/IconColumns.mjs';\nexport { default as IconComet } from './icons/IconComet.mjs';\nexport { default as IconCommandOff } from './icons/IconCommandOff.mjs';\nexport { default as IconCommand } from './icons/IconCommand.mjs';\nexport { default as IconCompassOff } from './icons/IconCompassOff.mjs';\nexport { default as IconCompass } from './icons/IconCompass.mjs';\nexport { default as IconComponentsOff } from './icons/IconComponentsOff.mjs';\nexport { default as IconComponents } from './icons/IconComponents.mjs';\nexport { default as IconCone2 } from './icons/IconCone2.mjs';\nexport { default as IconConeOff } from './icons/IconConeOff.mjs';\nexport { default as IconConePlus } from './icons/IconConePlus.mjs';\nexport { default as IconCone } from './icons/IconCone.mjs';\nexport { default as IconConfettiOff } from './icons/IconConfettiOff.mjs';\nexport { default as IconConfetti } from './icons/IconConfetti.mjs';\nexport { default as IconConfucius } from './icons/IconConfucius.mjs';\nexport { default as IconCongruentTo } from './icons/IconCongruentTo.mjs';\nexport { default as IconConnection } from './icons/IconConnection.mjs';\nexport { default as IconContainerOff } from './icons/IconContainerOff.mjs';\nexport { default as IconContainer } from './icons/IconContainer.mjs';\nexport { default as IconContract } from './icons/IconContract.mjs';\nexport { default as IconContrast2Off } from './icons/IconContrast2Off.mjs';\nexport { default as IconContrast2 } from './icons/IconContrast2.mjs';\nexport { default as IconContrastOff } from './icons/IconContrastOff.mjs';\nexport { default as IconContrast } from './icons/IconContrast.mjs';\nexport { default as IconCooker } from './icons/IconCooker.mjs';\nexport { default as IconCookieMan } from './icons/IconCookieMan.mjs';\nexport { default as IconCookieOff } from './icons/IconCookieOff.mjs';\nexport { default as IconCookie } from './icons/IconCookie.mjs';\nexport { default as IconCopyCheck } from './icons/IconCopyCheck.mjs';\nexport { default as IconCopyMinus } from './icons/IconCopyMinus.mjs';\nexport { default as IconCopyOff } from './icons/IconCopyOff.mjs';\nexport { default as IconCopyPlus } from './icons/IconCopyPlus.mjs';\nexport { default as IconCopyX } from './icons/IconCopyX.mjs';\nexport { default as IconCopy } from './icons/IconCopy.mjs';\nexport { default as IconCopyleftOff } from './icons/IconCopyleftOff.mjs';\nexport { default as IconCopyleft } from './icons/IconCopyleft.mjs';\nexport { default as IconCopyrightOff } from './icons/IconCopyrightOff.mjs';\nexport { default as IconCopyright } from './icons/IconCopyright.mjs';\nexport { default as IconCornerDownLeftDouble } from './icons/IconCornerDownLeftDouble.mjs';\nexport { default as IconCornerDownLeft } from './icons/IconCornerDownLeft.mjs';\nexport { default as IconCornerDownRightDouble } from './icons/IconCornerDownRightDouble.mjs';\nexport { default as IconCornerDownRight } from './icons/IconCornerDownRight.mjs';\nexport { default as IconCornerLeftDownDouble } from './icons/IconCornerLeftDownDouble.mjs';\nexport { default as IconCornerLeftDown } from './icons/IconCornerLeftDown.mjs';\nexport { default as IconCornerLeftUpDouble } from './icons/IconCornerLeftUpDouble.mjs';\nexport { default as IconCornerLeftUp } from './icons/IconCornerLeftUp.mjs';\nexport { default as IconCornerRightDownDouble } from './icons/IconCornerRightDownDouble.mjs';\nexport { default as IconCornerRightDown } from './icons/IconCornerRightDown.mjs';\nexport { default as IconCornerRightUpDouble } from './icons/IconCornerRightUpDouble.mjs';\nexport { default as IconCornerRightUp } from './icons/IconCornerRightUp.mjs';\nexport { default as IconCornerUpLeftDouble } from './icons/IconCornerUpLeftDouble.mjs';\nexport { default as IconCornerUpLeft } from './icons/IconCornerUpLeft.mjs';\nexport { default as IconCornerUpRightDouble } from './icons/IconCornerUpRightDouble.mjs';\nexport { default as IconCornerUpRight } from './icons/IconCornerUpRight.mjs';\nexport { default as IconCpu2 } from './icons/IconCpu2.mjs';\nexport { default as IconCpuOff } from './icons/IconCpuOff.mjs';\nexport { default as IconCpu } from './icons/IconCpu.mjs';\nexport { default as IconCraneOff } from './icons/IconCraneOff.mjs';\nexport { default as IconCrane } from './icons/IconCrane.mjs';\nexport { default as IconCreativeCommonsBy } from './icons/IconCreativeCommonsBy.mjs';\nexport { default as IconCreativeCommonsNc } from './icons/IconCreativeCommonsNc.mjs';\nexport { default as IconCreativeCommonsNd } from './icons/IconCreativeCommonsNd.mjs';\nexport { default as IconCreativeCommonsOff } from './icons/IconCreativeCommonsOff.mjs';\nexport { default as IconCreativeCommonsSa } from './icons/IconCreativeCommonsSa.mjs';\nexport { default as IconCreativeCommonsZero } from './icons/IconCreativeCommonsZero.mjs';\nexport { default as IconCreativeCommons } from './icons/IconCreativeCommons.mjs';\nexport { default as IconCreditCardOff } from './icons/IconCreditCardOff.mjs';\nexport { default as IconCreditCardPay } from './icons/IconCreditCardPay.mjs';\nexport { default as IconCreditCardRefund } from './icons/IconCreditCardRefund.mjs';\nexport { default as IconCreditCard } from './icons/IconCreditCard.mjs';\nexport { default as IconCredits } from './icons/IconCredits.mjs';\nexport { default as IconCricket } from './icons/IconCricket.mjs';\nexport { default as IconCrop11 } from './icons/IconCrop11.mjs';\nexport { default as IconCrop169 } from './icons/IconCrop169.mjs';\nexport { default as IconCrop32 } from './icons/IconCrop32.mjs';\nexport { default as IconCrop54 } from './icons/IconCrop54.mjs';\nexport { default as IconCrop75 } from './icons/IconCrop75.mjs';\nexport { default as IconCropLandscape } from './icons/IconCropLandscape.mjs';\nexport { default as IconCropPortrait } from './icons/IconCropPortrait.mjs';\nexport { default as IconCrop } from './icons/IconCrop.mjs';\nexport { default as IconCrossOff } from './icons/IconCrossOff.mjs';\nexport { default as IconCross } from './icons/IconCross.mjs';\nexport { default as IconCrosshair } from './icons/IconCrosshair.mjs';\nexport { default as IconCrownOff } from './icons/IconCrownOff.mjs';\nexport { default as IconCrown } from './icons/IconCrown.mjs';\nexport { default as IconCrutchesOff } from './icons/IconCrutchesOff.mjs';\nexport { default as IconCrutches } from './icons/IconCrutches.mjs';\nexport { default as IconCrystalBall } from './icons/IconCrystalBall.mjs';\nexport { default as IconCsv } from './icons/IconCsv.mjs';\nexport { default as IconCubeOff } from './icons/IconCubeOff.mjs';\nexport { default as IconCubePlus } from './icons/IconCubePlus.mjs';\nexport { default as IconCubeSend } from './icons/IconCubeSend.mjs';\nexport { default as IconCubeSpark } from './icons/IconCubeSpark.mjs';\nexport { default as IconCubeUnfolded } from './icons/IconCubeUnfolded.mjs';\nexport { default as IconCube } from './icons/IconCube.mjs';\nexport { default as IconCupOff } from './icons/IconCupOff.mjs';\nexport { default as IconCup } from './icons/IconCup.mjs';\nexport { default as IconCurling } from './icons/IconCurling.mjs';\nexport { default as IconCurlyLoop } from './icons/IconCurlyLoop.mjs';\nexport { default as IconCurrencyAfghani } from './icons/IconCurrencyAfghani.mjs';\nexport { default as IconCurrencyBahraini } from './icons/IconCurrencyBahraini.mjs';\nexport { default as IconCurrencyBaht } from './icons/IconCurrencyBaht.mjs';\nexport { default as IconCurrencyBitcoin } from './icons/IconCurrencyBitcoin.mjs';\nexport { default as IconCurrencyCent } from './icons/IconCurrencyCent.mjs';\nexport { default as IconCurrencyDinar } from './icons/IconCurrencyDinar.mjs';\nexport { default as IconCurrencyDirham } from './icons/IconCurrencyDirham.mjs';\nexport { default as IconCurrencyDogecoin } from './icons/IconCurrencyDogecoin.mjs';\nexport { default as IconCurrencyDollarAustralian } from './icons/IconCurrencyDollarAustralian.mjs';\nexport { default as IconCurrencyDollarBrunei } from './icons/IconCurrencyDollarBrunei.mjs';\nexport { default as IconCurrencyDollarCanadian } from './icons/IconCurrencyDollarCanadian.mjs';\nexport { default as IconCurrencyDollarGuyanese } from './icons/IconCurrencyDollarGuyanese.mjs';\nexport { default as IconCurrencyDollarOff } from './icons/IconCurrencyDollarOff.mjs';\nexport { default as IconCurrencyDollarSingapore } from './icons/IconCurrencyDollarSingapore.mjs';\nexport { default as IconCurrencyDollarZimbabwean } from './icons/IconCurrencyDollarZimbabwean.mjs';\nexport { default as IconCurrencyDollar } from './icons/IconCurrencyDollar.mjs';\nexport { default as IconCurrencyDong } from './icons/IconCurrencyDong.mjs';\nexport { default as IconCurrencyDram } from './icons/IconCurrencyDram.mjs';\nexport { default as IconCurrencyEthereum } from './icons/IconCurrencyEthereum.mjs';\nexport { default as IconCurrencyEuroOff } from './icons/IconCurrencyEuroOff.mjs';\nexport { default as IconCurrencyEuro } from './icons/IconCurrencyEuro.mjs';\nexport { default as IconCurrencyFlorin } from './icons/IconCurrencyFlorin.mjs';\nexport { default as IconCurrencyForint } from './icons/IconCurrencyForint.mjs';\nexport { default as IconCurrencyFrank } from './icons/IconCurrencyFrank.mjs';\nexport { default as IconCurrencyGuarani } from './icons/IconCurrencyGuarani.mjs';\nexport { default as IconCurrencyHryvnia } from './icons/IconCurrencyHryvnia.mjs';\nexport { default as IconCurrencyIranianRial } from './icons/IconCurrencyIranianRial.mjs';\nexport { default as IconCurrencyKip } from './icons/IconCurrencyKip.mjs';\nexport { default as IconCurrencyKroneCzech } from './icons/IconCurrencyKroneCzech.mjs';\nexport { default as IconCurrencyKroneDanish } from './icons/IconCurrencyKroneDanish.mjs';\nexport { default as IconCurrencyKroneSwedish } from './icons/IconCurrencyKroneSwedish.mjs';\nexport { default as IconCurrencyLari } from './icons/IconCurrencyLari.mjs';\nexport { default as IconCurrencyLeu } from './icons/IconCurrencyLeu.mjs';\nexport { default as IconCurrencyLira } from './icons/IconCurrencyLira.mjs';\nexport { default as IconCurrencyLitecoin } from './icons/IconCurrencyLitecoin.mjs';\nexport { default as IconCurrencyLyd } from './icons/IconCurrencyLyd.mjs';\nexport { default as IconCurrencyManat } from './icons/IconCurrencyManat.mjs';\nexport { default as IconCurrencyMonero } from './icons/IconCurrencyMonero.mjs';\nexport { default as IconCurrencyNaira } from './icons/IconCurrencyNaira.mjs';\nexport { default as IconCurrencyNano } from './icons/IconCurrencyNano.mjs';\nexport { default as IconCurrencyOff } from './icons/IconCurrencyOff.mjs';\nexport { default as IconCurrencyPaanga } from './icons/IconCurrencyPaanga.mjs';\nexport { default as IconCurrencyPeso } from './icons/IconCurrencyPeso.mjs';\nexport { default as IconCurrencyPoundOff } from './icons/IconCurrencyPoundOff.mjs';\nexport { default as IconCurrencyPound } from './icons/IconCurrencyPound.mjs';\nexport { default as IconCurrencyQuetzal } from './icons/IconCurrencyQuetzal.mjs';\nexport { default as IconCurrencyReal } from './icons/IconCurrencyReal.mjs';\nexport { default as IconCurrencyRenminbi } from './icons/IconCurrencyRenminbi.mjs';\nexport { default as IconCurrencyRipple } from './icons/IconCurrencyRipple.mjs';\nexport { default as IconCurrencyRiyal } from './icons/IconCurrencyRiyal.mjs';\nexport { default as IconCurrencyRubel } from './icons/IconCurrencyRubel.mjs';\nexport { default as IconCurrencyRufiyaa } from './icons/IconCurrencyRufiyaa.mjs';\nexport { default as IconCurrencyRupeeNepalese } from './icons/IconCurrencyRupeeNepalese.mjs';\nexport { default as IconCurrencyRupee } from './icons/IconCurrencyRupee.mjs';\nexport { default as IconCurrencyShekel } from './icons/IconCurrencyShekel.mjs';\nexport { default as IconCurrencySolana } from './icons/IconCurrencySolana.mjs';\nexport { default as IconCurrencySom } from './icons/IconCurrencySom.mjs';\nexport { default as IconCurrencyTaka } from './icons/IconCurrencyTaka.mjs';\nexport { default as IconCurrencyTenge } from './icons/IconCurrencyTenge.mjs';\nexport { default as IconCurrencyTugrik } from './icons/IconCurrencyTugrik.mjs';\nexport { default as IconCurrencyWon } from './icons/IconCurrencyWon.mjs';\nexport { default as IconCurrencyXrp } from './icons/IconCurrencyXrp.mjs';\nexport { default as IconCurrencyYenOff } from './icons/IconCurrencyYenOff.mjs';\nexport { default as IconCurrencyYen } from './icons/IconCurrencyYen.mjs';\nexport { default as IconCurrencyYuan } from './icons/IconCurrencyYuan.mjs';\nexport { default as IconCurrencyZloty } from './icons/IconCurrencyZloty.mjs';\nexport { default as IconCurrency } from './icons/IconCurrency.mjs';\nexport { default as IconCurrentLocationOff } from './icons/IconCurrentLocationOff.mjs';\nexport { default as IconCurrentLocation } from './icons/IconCurrentLocation.mjs';\nexport { default as IconCursorOff } from './icons/IconCursorOff.mjs';\nexport { default as IconCursorText } from './icons/IconCursorText.mjs';\nexport { default as IconCut } from './icons/IconCut.mjs';\nexport { default as IconCylinderOff } from './icons/IconCylinderOff.mjs';\nexport { default as IconCylinderPlus } from './icons/IconCylinderPlus.mjs';\nexport { default as IconCylinder } from './icons/IconCylinder.mjs';\nexport { default as IconDashboardOff } from './icons/IconDashboardOff.mjs';\nexport { default as IconDashboard } from './icons/IconDashboard.mjs';\nexport { default as IconDatabaseCog } from './icons/IconDatabaseCog.mjs';\nexport { default as IconDatabaseDollar } from './icons/IconDatabaseDollar.mjs';\nexport { default as IconDatabaseEdit } from './icons/IconDatabaseEdit.mjs';\nexport { default as IconDatabaseExclamation } from './icons/IconDatabaseExclamation.mjs';\nexport { default as IconDatabaseExport } from './icons/IconDatabaseExport.mjs';\nexport { default as IconDatabaseHeart } from './icons/IconDatabaseHeart.mjs';\nexport { default as IconDatabaseImport } from './icons/IconDatabaseImport.mjs';\nexport { default as IconDatabaseLeak } from './icons/IconDatabaseLeak.mjs';\nexport { default as IconDatabaseMinus } from './icons/IconDatabaseMinus.mjs';\nexport { default as IconDatabaseOff } from './icons/IconDatabaseOff.mjs';\nexport { default as IconDatabasePlus } from './icons/IconDatabasePlus.mjs';\nexport { default as IconDatabaseSearch } from './icons/IconDatabaseSearch.mjs';\nexport { default as IconDatabaseShare } from './icons/IconDatabaseShare.mjs';\nexport { default as IconDatabaseSmile } from './icons/IconDatabaseSmile.mjs';\nexport { default as IconDatabaseStar } from './icons/IconDatabaseStar.mjs';\nexport { default as IconDatabaseX } from './icons/IconDatabaseX.mjs';\nexport { default as IconDatabase } from './icons/IconDatabase.mjs';\nexport { default as IconDeaf } from './icons/IconDeaf.mjs';\nexport { default as IconDecimal } from './icons/IconDecimal.mjs';\nexport { default as IconDeer } from './icons/IconDeer.mjs';\nexport { default as IconDelta } from './icons/IconDelta.mjs';\nexport { default as IconDentalBroken } from './icons/IconDentalBroken.mjs';\nexport { default as IconDentalOff } from './icons/IconDentalOff.mjs';\nexport { default as IconDental } from './icons/IconDental.mjs';\nexport { default as IconDeselect } from './icons/IconDeselect.mjs';\nexport { default as IconDesk } from './icons/IconDesk.mjs';\nexport { default as IconDetailsOff } from './icons/IconDetailsOff.mjs';\nexport { default as IconDetails } from './icons/IconDetails.mjs';\nexport { default as IconDeviceAirpodsCase } from './icons/IconDeviceAirpodsCase.mjs';\nexport { default as IconDeviceAirpods } from './icons/IconDeviceAirpods.mjs';\nexport { default as IconDeviceAirtag } from './icons/IconDeviceAirtag.mjs';\nexport { default as IconDeviceAnalytics } from './icons/IconDeviceAnalytics.mjs';\nexport { default as IconDeviceAudioTape } from './icons/IconDeviceAudioTape.mjs';\nexport { default as IconDeviceCameraPhone } from './icons/IconDeviceCameraPhone.mjs';\nexport { default as IconDeviceCctvOff } from './icons/IconDeviceCctvOff.mjs';\nexport { default as IconDeviceCctv } from './icons/IconDeviceCctv.mjs';\nexport { default as IconDeviceComputerCameraOff } from './icons/IconDeviceComputerCameraOff.mjs';\nexport { default as IconDeviceComputerCamera } from './icons/IconDeviceComputerCamera.mjs';\nexport { default as IconDeviceDesktopAnalytics } from './icons/IconDeviceDesktopAnalytics.mjs';\nexport { default as IconDeviceDesktopBolt } from './icons/IconDeviceDesktopBolt.mjs';\nexport { default as IconDeviceDesktopCancel } from './icons/IconDeviceDesktopCancel.mjs';\nexport { default as IconDeviceDesktopCheck } from './icons/IconDeviceDesktopCheck.mjs';\nexport { default as IconDeviceDesktopCode } from './icons/IconDeviceDesktopCode.mjs';\nexport { default as IconDeviceDesktopCog } from './icons/IconDeviceDesktopCog.mjs';\nexport { default as IconDeviceDesktopDollar } from './icons/IconDeviceDesktopDollar.mjs';\nexport { default as IconDeviceDesktopDown } from './icons/IconDeviceDesktopDown.mjs';\nexport { default as IconDeviceDesktopExclamation } from './icons/IconDeviceDesktopExclamation.mjs';\nexport { default as IconDeviceDesktopHeart } from './icons/IconDeviceDesktopHeart.mjs';\nexport { default as IconDeviceDesktopMinus } from './icons/IconDeviceDesktopMinus.mjs';\nexport { default as IconDeviceDesktopOff } from './icons/IconDeviceDesktopOff.mjs';\nexport { default as IconDeviceDesktopPause } from './icons/IconDeviceDesktopPause.mjs';\nexport { default as IconDeviceDesktopPin } from './icons/IconDeviceDesktopPin.mjs';\nexport { default as IconDeviceDesktopPlus } from './icons/IconDeviceDesktopPlus.mjs';\nexport { default as IconDeviceDesktopQuestion } from './icons/IconDeviceDesktopQuestion.mjs';\nexport { default as IconDeviceDesktopSearch } from './icons/IconDeviceDesktopSearch.mjs';\nexport { default as IconDeviceDesktopShare } from './icons/IconDeviceDesktopShare.mjs';\nexport { default as IconDeviceDesktopStar } from './icons/IconDeviceDesktopStar.mjs';\nexport { default as IconDeviceDesktopUp } from './icons/IconDeviceDesktopUp.mjs';\nexport { default as IconDeviceDesktopX } from './icons/IconDeviceDesktopX.mjs';\nexport { default as IconDeviceDesktop } from './icons/IconDeviceDesktop.mjs';\nexport { default as IconDeviceFloppy } from './icons/IconDeviceFloppy.mjs';\nexport { default as IconDeviceGamepad2 } from './icons/IconDeviceGamepad2.mjs';\nexport { default as IconDeviceGamepad3 } from './icons/IconDeviceGamepad3.mjs';\nexport { default as IconDeviceGamepad } from './icons/IconDeviceGamepad.mjs';\nexport { default as IconDeviceHeartMonitor } from './icons/IconDeviceHeartMonitor.mjs';\nexport { default as IconDeviceImacBolt } from './icons/IconDeviceImacBolt.mjs';\nexport { default as IconDeviceImacCancel } from './icons/IconDeviceImacCancel.mjs';\nexport { default as IconDeviceImacCheck } from './icons/IconDeviceImacCheck.mjs';\nexport { default as IconDeviceImacCode } from './icons/IconDeviceImacCode.mjs';\nexport { default as IconDeviceImacCog } from './icons/IconDeviceImacCog.mjs';\nexport { default as IconDeviceImacDollar } from './icons/IconDeviceImacDollar.mjs';\nexport { default as IconDeviceImacDown } from './icons/IconDeviceImacDown.mjs';\nexport { default as IconDeviceImacExclamation } from './icons/IconDeviceImacExclamation.mjs';\nexport { default as IconDeviceImacHeart } from './icons/IconDeviceImacHeart.mjs';\nexport { default as IconDeviceImacMinus } from './icons/IconDeviceImacMinus.mjs';\nexport { default as IconDeviceImacOff } from './icons/IconDeviceImacOff.mjs';\nexport { default as IconDeviceImacPause } from './icons/IconDeviceImacPause.mjs';\nexport { default as IconDeviceImacPin } from './icons/IconDeviceImacPin.mjs';\nexport { default as IconDeviceImacPlus } from './icons/IconDeviceImacPlus.mjs';\nexport { default as IconDeviceImacQuestion } from './icons/IconDeviceImacQuestion.mjs';\nexport { default as IconDeviceImacSearch } from './icons/IconDeviceImacSearch.mjs';\nexport { default as IconDeviceImacShare } from './icons/IconDeviceImacShare.mjs';\nexport { default as IconDeviceImacStar } from './icons/IconDeviceImacStar.mjs';\nexport { default as IconDeviceImacUp } from './icons/IconDeviceImacUp.mjs';\nexport { default as IconDeviceImacX } from './icons/IconDeviceImacX.mjs';\nexport { default as IconDeviceImac } from './icons/IconDeviceImac.mjs';\nexport { default as IconDeviceIpadBolt } from './icons/IconDeviceIpadBolt.mjs';\nexport { default as IconDeviceIpadCancel } from './icons/IconDeviceIpadCancel.mjs';\nexport { default as IconDeviceIpadCheck } from './icons/IconDeviceIpadCheck.mjs';\nexport { default as IconDeviceIpadCode } from './icons/IconDeviceIpadCode.mjs';\nexport { default as IconDeviceIpadCog } from './icons/IconDeviceIpadCog.mjs';\nexport { default as IconDeviceIpadDollar } from './icons/IconDeviceIpadDollar.mjs';\nexport { default as IconDeviceIpadDown } from './icons/IconDeviceIpadDown.mjs';\nexport { default as IconDeviceIpadExclamation } from './icons/IconDeviceIpadExclamation.mjs';\nexport { default as IconDeviceIpadHeart } from './icons/IconDeviceIpadHeart.mjs';\nexport { default as IconDeviceIpadHorizontalBolt } from './icons/IconDeviceIpadHorizontalBolt.mjs';\nexport { default as IconDeviceIpadHorizontalCancel } from './icons/IconDeviceIpadHorizontalCancel.mjs';\nexport { default as IconDeviceIpadHorizontalCheck } from './icons/IconDeviceIpadHorizontalCheck.mjs';\nexport { default as IconDeviceIpadHorizontalCode } from './icons/IconDeviceIpadHorizontalCode.mjs';\nexport { default as IconDeviceIpadHorizontalCog } from './icons/IconDeviceIpadHorizontalCog.mjs';\nexport { default as IconDeviceIpadHorizontalDollar } from './icons/IconDeviceIpadHorizontalDollar.mjs';\nexport { default as IconDeviceIpadHorizontalDown } from './icons/IconDeviceIpadHorizontalDown.mjs';\nexport { default as IconDeviceIpadHorizontalExclamation } from './icons/IconDeviceIpadHorizontalExclamation.mjs';\nexport { default as IconDeviceIpadHorizontalHeart } from './icons/IconDeviceIpadHorizontalHeart.mjs';\nexport { default as IconDeviceIpadHorizontalMinus } from './icons/IconDeviceIpadHorizontalMinus.mjs';\nexport { default as IconDeviceIpadHorizontalOff } from './icons/IconDeviceIpadHorizontalOff.mjs';\nexport { default as IconDeviceIpadHorizontalPause } from './icons/IconDeviceIpadHorizontalPause.mjs';\nexport { default as IconDeviceIpadHorizontalPin } from './icons/IconDeviceIpadHorizontalPin.mjs';\nexport { default as IconDeviceIpadHorizontalPlus } from './icons/IconDeviceIpadHorizontalPlus.mjs';\nexport { default as IconDeviceIpadHorizontalQuestion } from './icons/IconDeviceIpadHorizontalQuestion.mjs';\nexport { default as IconDeviceIpadHorizontalSearch } from './icons/IconDeviceIpadHorizontalSearch.mjs';\nexport { default as IconDeviceIpadHorizontalShare } from './icons/IconDeviceIpadHorizontalShare.mjs';\nexport { default as IconDeviceIpadHorizontalStar } from './icons/IconDeviceIpadHorizontalStar.mjs';\nexport { default as IconDeviceIpadHorizontalUp } from './icons/IconDeviceIpadHorizontalUp.mjs';\nexport { default as IconDeviceIpadHorizontalX } from './icons/IconDeviceIpadHorizontalX.mjs';\nexport { default as IconDeviceIpadHorizontal } from './icons/IconDeviceIpadHorizontal.mjs';\nexport { default as IconDeviceIpadMinus } from './icons/IconDeviceIpadMinus.mjs';\nexport { default as IconDeviceIpadOff } from './icons/IconDeviceIpadOff.mjs';\nexport { default as IconDeviceIpadPause } from './icons/IconDeviceIpadPause.mjs';\nexport { default as IconDeviceIpadPin } from './icons/IconDeviceIpadPin.mjs';\nexport { default as IconDeviceIpadPlus } from './icons/IconDeviceIpadPlus.mjs';\nexport { default as IconDeviceIpadQuestion } from './icons/IconDeviceIpadQuestion.mjs';\nexport { default as IconDeviceIpadSearch } from './icons/IconDeviceIpadSearch.mjs';\nexport { default as IconDeviceIpadShare } from './icons/IconDeviceIpadShare.mjs';\nexport { default as IconDeviceIpadStar } from './icons/IconDeviceIpadStar.mjs';\nexport { default as IconDeviceIpadUp } from './icons/IconDeviceIpadUp.mjs';\nexport { default as IconDeviceIpadX } from './icons/IconDeviceIpadX.mjs';\nexport { default as IconDeviceIpad } from './icons/IconDeviceIpad.mjs';\nexport { default as IconDeviceLandlinePhone } from './icons/IconDeviceLandlinePhone.mjs';\nexport { default as IconDeviceLaptopOff } from './icons/IconDeviceLaptopOff.mjs';\nexport { default as IconDeviceLaptop } from './icons/IconDeviceLaptop.mjs';\nexport { default as IconDeviceMobileBolt } from './icons/IconDeviceMobileBolt.mjs';\nexport { default as IconDeviceMobileCancel } from './icons/IconDeviceMobileCancel.mjs';\nexport { default as IconDeviceMobileCharging } from './icons/IconDeviceMobileCharging.mjs';\nexport { default as IconDeviceMobileCheck } from './icons/IconDeviceMobileCheck.mjs';\nexport { default as IconDeviceMobileCode } from './icons/IconDeviceMobileCode.mjs';\nexport { default as IconDeviceMobileCog } from './icons/IconDeviceMobileCog.mjs';\nexport { default as IconDeviceMobileDollar } from './icons/IconDeviceMobileDollar.mjs';\nexport { default as IconDeviceMobileDown } from './icons/IconDeviceMobileDown.mjs';\nexport { default as IconDeviceMobileExclamation } from './icons/IconDeviceMobileExclamation.mjs';\nexport { default as IconDeviceMobileHeart } from './icons/IconDeviceMobileHeart.mjs';\nexport { default as IconDeviceMobileMessage } from './icons/IconDeviceMobileMessage.mjs';\nexport { default as IconDeviceMobileMinus } from './icons/IconDeviceMobileMinus.mjs';\nexport { default as IconDeviceMobileOff } from './icons/IconDeviceMobileOff.mjs';\nexport { default as IconDeviceMobilePause } from './icons/IconDeviceMobilePause.mjs';\nexport { default as IconDeviceMobilePin } from './icons/IconDeviceMobilePin.mjs';\nexport { default as IconDeviceMobilePlus } from './icons/IconDeviceMobilePlus.mjs';\nexport { default as IconDeviceMobileQuestion } from './icons/IconDeviceMobileQuestion.mjs';\nexport { default as IconDeviceMobileRotated } from './icons/IconDeviceMobileRotated.mjs';\nexport { default as IconDeviceMobileSearch } from './icons/IconDeviceMobileSearch.mjs';\nexport { default as IconDeviceMobileShare } from './icons/IconDeviceMobileShare.mjs';\nexport { default as IconDeviceMobileStar } from './icons/IconDeviceMobileStar.mjs';\nexport { default as IconDeviceMobileUp } from './icons/IconDeviceMobileUp.mjs';\nexport { default as IconDeviceMobileVibration } from './icons/IconDeviceMobileVibration.mjs';\nexport { default as IconDeviceMobileX } from './icons/IconDeviceMobileX.mjs';\nexport { default as IconDeviceMobile } from './icons/IconDeviceMobile.mjs';\nexport { default as IconDeviceNintendoOff } from './icons/IconDeviceNintendoOff.mjs';\nexport { default as IconDeviceNintendo } from './icons/IconDeviceNintendo.mjs';\nexport { default as IconDeviceProjector } from './icons/IconDeviceProjector.mjs';\nexport { default as IconDeviceRemote } from './icons/IconDeviceRemote.mjs';\nexport { default as IconDeviceSdCard } from './icons/IconDeviceSdCard.mjs';\nexport { default as IconDeviceSim1 } from './icons/IconDeviceSim1.mjs';\nexport { default as IconDeviceSim2 } from './icons/IconDeviceSim2.mjs';\nexport { default as IconDeviceSim3 } from './icons/IconDeviceSim3.mjs';\nexport { default as IconDeviceSim } from './icons/IconDeviceSim.mjs';\nexport { default as IconDeviceSpeakerOff } from './icons/IconDeviceSpeakerOff.mjs';\nexport { default as IconDeviceSpeaker } from './icons/IconDeviceSpeaker.mjs';\nexport { default as IconDeviceTabletBolt } from './icons/IconDeviceTabletBolt.mjs';\nexport { default as IconDeviceTabletCancel } from './icons/IconDeviceTabletCancel.mjs';\nexport { default as IconDeviceTabletCheck } from './icons/IconDeviceTabletCheck.mjs';\nexport { default as IconDeviceTabletCode } from './icons/IconDeviceTabletCode.mjs';\nexport { default as IconDeviceTabletCog } from './icons/IconDeviceTabletCog.mjs';\nexport { default as IconDeviceTabletDollar } from './icons/IconDeviceTabletDollar.mjs';\nexport { default as IconDeviceTabletDown } from './icons/IconDeviceTabletDown.mjs';\nexport { default as IconDeviceTabletExclamation } from './icons/IconDeviceTabletExclamation.mjs';\nexport { default as IconDeviceTabletHeart } from './icons/IconDeviceTabletHeart.mjs';\nexport { default as IconDeviceTabletMinus } from './icons/IconDeviceTabletMinus.mjs';\nexport { default as IconDeviceTabletOff } from './icons/IconDeviceTabletOff.mjs';\nexport { default as IconDeviceTabletPause } from './icons/IconDeviceTabletPause.mjs';\nexport { default as IconDeviceTabletPin } from './icons/IconDeviceTabletPin.mjs';\nexport { default as IconDeviceTabletPlus } from './icons/IconDeviceTabletPlus.mjs';\nexport { default as IconDeviceTabletQuestion } from './icons/IconDeviceTabletQuestion.mjs';\nexport { default as IconDeviceTabletSearch } from './icons/IconDeviceTabletSearch.mjs';\nexport { default as IconDeviceTabletShare } from './icons/IconDeviceTabletShare.mjs';\nexport { default as IconDeviceTabletStar } from './icons/IconDeviceTabletStar.mjs';\nexport { default as IconDeviceTabletUp } from './icons/IconDeviceTabletUp.mjs';\nexport { default as IconDeviceTabletX } from './icons/IconDeviceTabletX.mjs';\nexport { default as IconDeviceTablet } from './icons/IconDeviceTablet.mjs';\nexport { default as IconDeviceTvOff } from './icons/IconDeviceTvOff.mjs';\nexport { default as IconDeviceTvOld } from './icons/IconDeviceTvOld.mjs';\nexport { default as IconDeviceTv } from './icons/IconDeviceTv.mjs';\nexport { default as IconDeviceUnknown } from './icons/IconDeviceUnknown.mjs';\nexport { default as IconDeviceUsb } from './icons/IconDeviceUsb.mjs';\nexport { default as IconDeviceVisionPro } from './icons/IconDeviceVisionPro.mjs';\nexport { default as IconDeviceWatchBolt } from './icons/IconDeviceWatchBolt.mjs';\nexport { default as IconDeviceWatchCancel } from './icons/IconDeviceWatchCancel.mjs';\nexport { default as IconDeviceWatchCheck } from './icons/IconDeviceWatchCheck.mjs';\nexport { default as IconDeviceWatchCode } from './icons/IconDeviceWatchCode.mjs';\nexport { default as IconDeviceWatchCog } from './icons/IconDeviceWatchCog.mjs';\nexport { default as IconDeviceWatchDollar } from './icons/IconDeviceWatchDollar.mjs';\nexport { default as IconDeviceWatchDown } from './icons/IconDeviceWatchDown.mjs';\nexport { default as IconDeviceWatchExclamation } from './icons/IconDeviceWatchExclamation.mjs';\nexport { default as IconDeviceWatchHeart } from './icons/IconDeviceWatchHeart.mjs';\nexport { default as IconDeviceWatchMinus } from './icons/IconDeviceWatchMinus.mjs';\nexport { default as IconDeviceWatchOff } from './icons/IconDeviceWatchOff.mjs';\nexport { default as IconDeviceWatchPause } from './icons/IconDeviceWatchPause.mjs';\nexport { default as IconDeviceWatchPin } from './icons/IconDeviceWatchPin.mjs';\nexport { default as IconDeviceWatchPlus } from './icons/IconDeviceWatchPlus.mjs';\nexport { default as IconDeviceWatchQuestion } from './icons/IconDeviceWatchQuestion.mjs';\nexport { default as IconDeviceWatchSearch } from './icons/IconDeviceWatchSearch.mjs';\nexport { default as IconDeviceWatchShare } from './icons/IconDeviceWatchShare.mjs';\nexport { default as IconDeviceWatchStar } from './icons/IconDeviceWatchStar.mjs';\nexport { default as IconDeviceWatchStats2 } from './icons/IconDeviceWatchStats2.mjs';\nexport { default as IconDeviceWatchStats } from './icons/IconDeviceWatchStats.mjs';\nexport { default as IconDeviceWatchUp } from './icons/IconDeviceWatchUp.mjs';\nexport { default as IconDeviceWatchX } from './icons/IconDeviceWatchX.mjs';\nexport { default as IconDeviceWatch } from './icons/IconDeviceWatch.mjs';\nexport { default as IconDevices2 } from './icons/IconDevices2.mjs';\nexport { default as IconDevicesBolt } from './icons/IconDevicesBolt.mjs';\nexport { default as IconDevicesCancel } from './icons/IconDevicesCancel.mjs';\nexport { default as IconDevicesCheck } from './icons/IconDevicesCheck.mjs';\nexport { default as IconDevicesCode } from './icons/IconDevicesCode.mjs';\nexport { default as IconDevicesCog } from './icons/IconDevicesCog.mjs';\nexport { default as IconDevicesDollar } from './icons/IconDevicesDollar.mjs';\nexport { default as IconDevicesDown } from './icons/IconDevicesDown.mjs';\nexport { default as IconDevicesExclamation } from './icons/IconDevicesExclamation.mjs';\nexport { default as IconDevicesHeart } from './icons/IconDevicesHeart.mjs';\nexport { default as IconDevicesMinus } from './icons/IconDevicesMinus.mjs';\nexport { default as IconDevicesOff } from './icons/IconDevicesOff.mjs';\nexport { default as IconDevicesPause } from './icons/IconDevicesPause.mjs';\nexport { default as IconDevicesPcOff } from './icons/IconDevicesPcOff.mjs';\nexport { default as IconDevicesPc } from './icons/IconDevicesPc.mjs';\nexport { default as IconDevicesPin } from './icons/IconDevicesPin.mjs';\nexport { default as IconDevicesPlus } from './icons/IconDevicesPlus.mjs';\nexport { default as IconDevicesQuestion } from './icons/IconDevicesQuestion.mjs';\nexport { default as IconDevicesSearch } from './icons/IconDevicesSearch.mjs';\nexport { default as IconDevicesShare } from './icons/IconDevicesShare.mjs';\nexport { default as IconDevicesStar } from './icons/IconDevicesStar.mjs';\nexport { default as IconDevicesUp } from './icons/IconDevicesUp.mjs';\nexport { default as IconDevicesX } from './icons/IconDevicesX.mjs';\nexport { default as IconDevices } from './icons/IconDevices.mjs';\nexport { default as IconDiaboloOff } from './icons/IconDiaboloOff.mjs';\nexport { default as IconDiaboloPlus } from './icons/IconDiaboloPlus.mjs';\nexport { default as IconDiabolo } from './icons/IconDiabolo.mjs';\nexport { default as IconDialpadOff } from './icons/IconDialpadOff.mjs';\nexport { default as IconDialpad } from './icons/IconDialpad.mjs';\nexport { default as IconDiamondOff } from './icons/IconDiamondOff.mjs';\nexport { default as IconDiamond } from './icons/IconDiamond.mjs';\nexport { default as IconDiamonds } from './icons/IconDiamonds.mjs';\nexport { default as IconDiaper } from './icons/IconDiaper.mjs';\nexport { default as IconDice1 } from './icons/IconDice1.mjs';\nexport { default as IconDice2 } from './icons/IconDice2.mjs';\nexport { default as IconDice3 } from './icons/IconDice3.mjs';\nexport { default as IconDice4 } from './icons/IconDice4.mjs';\nexport { default as IconDice5 } from './icons/IconDice5.mjs';\nexport { default as IconDice6 } from './icons/IconDice6.mjs';\nexport { default as IconDice } from './icons/IconDice.mjs';\nexport { default as IconDimensions } from './icons/IconDimensions.mjs';\nexport { default as IconDirectionArrows } from './icons/IconDirectionArrows.mjs';\nexport { default as IconDirectionHorizontal } from './icons/IconDirectionHorizontal.mjs';\nexport { default as IconDirectionSignOff } from './icons/IconDirectionSignOff.mjs';\nexport { default as IconDirectionSign } from './icons/IconDirectionSign.mjs';\nexport { default as IconDirection } from './icons/IconDirection.mjs';\nexport { default as IconDirectionsOff } from './icons/IconDirectionsOff.mjs';\nexport { default as IconDirections } from './icons/IconDirections.mjs';\nexport { default as IconDisabled2 } from './icons/IconDisabled2.mjs';\nexport { default as IconDisabledOff } from './icons/IconDisabledOff.mjs';\nexport { default as IconDisabled } from './icons/IconDisabled.mjs';\nexport { default as IconDiscGolf } from './icons/IconDiscGolf.mjs';\nexport { default as IconDiscOff } from './icons/IconDiscOff.mjs';\nexport { default as IconDisc } from './icons/IconDisc.mjs';\nexport { default as IconDiscountOff } from './icons/IconDiscountOff.mjs';\nexport { default as IconDiscount } from './icons/IconDiscount.mjs';\nexport { default as IconDivide } from './icons/IconDivide.mjs';\nexport { default as IconDna2Off } from './icons/IconDna2Off.mjs';\nexport { default as IconDna2 } from './icons/IconDna2.mjs';\nexport { default as IconDnaOff } from './icons/IconDnaOff.mjs';\nexport { default as IconDna } from './icons/IconDna.mjs';\nexport { default as IconDogBowl } from './icons/IconDogBowl.mjs';\nexport { default as IconDog } from './icons/IconDog.mjs';\nexport { default as IconDoorEnter } from './icons/IconDoorEnter.mjs';\nexport { default as IconDoorExit } from './icons/IconDoorExit.mjs';\nexport { default as IconDoorOff } from './icons/IconDoorOff.mjs';\nexport { default as IconDoor } from './icons/IconDoor.mjs';\nexport { default as IconDotsCircleHorizontal } from './icons/IconDotsCircleHorizontal.mjs';\nexport { default as IconDotsDiagonal2 } from './icons/IconDotsDiagonal2.mjs';\nexport { default as IconDotsDiagonal } from './icons/IconDotsDiagonal.mjs';\nexport { default as IconDotsVertical } from './icons/IconDotsVertical.mjs';\nexport { default as IconDots } from './icons/IconDots.mjs';\nexport { default as IconDownloadOff } from './icons/IconDownloadOff.mjs';\nexport { default as IconDownload } from './icons/IconDownload.mjs';\nexport { default as IconDragDrop2 } from './icons/IconDragDrop2.mjs';\nexport { default as IconDragDrop } from './icons/IconDragDrop.mjs';\nexport { default as IconDroneOff } from './icons/IconDroneOff.mjs';\nexport { default as IconDrone } from './icons/IconDrone.mjs';\nexport { default as IconDropCircle } from './icons/IconDropCircle.mjs';\nexport { default as IconDropletBolt } from './icons/IconDropletBolt.mjs';\nexport { default as IconDropletCancel } from './icons/IconDropletCancel.mjs';\nexport { default as IconDropletCheck } from './icons/IconDropletCheck.mjs';\nexport { default as IconDropletCode } from './icons/IconDropletCode.mjs';\nexport { default as IconDropletCog } from './icons/IconDropletCog.mjs';\nexport { default as IconDropletDollar } from './icons/IconDropletDollar.mjs';\nexport { default as IconDropletDown } from './icons/IconDropletDown.mjs';\nexport { default as IconDropletExclamation } from './icons/IconDropletExclamation.mjs';\nexport { default as IconDropletHalf2 } from './icons/IconDropletHalf2.mjs';\nexport { default as IconDropletHalf } from './icons/IconDropletHalf.mjs';\nexport { default as IconDropletHeart } from './icons/IconDropletHeart.mjs';\nexport { default as IconDropletMinus } from './icons/IconDropletMinus.mjs';\nexport { default as IconDropletOff } from './icons/IconDropletOff.mjs';\nexport { default as IconDropletPause } from './icons/IconDropletPause.mjs';\nexport { default as IconDropletPin } from './icons/IconDropletPin.mjs';\nexport { default as IconDropletPlus } from './icons/IconDropletPlus.mjs';\nexport { default as IconDropletQuestion } from './icons/IconDropletQuestion.mjs';\nexport { default as IconDropletSearch } from './icons/IconDropletSearch.mjs';\nexport { default as IconDropletShare } from './icons/IconDropletShare.mjs';\nexport { default as IconDropletStar } from './icons/IconDropletStar.mjs';\nexport { default as IconDropletUp } from './icons/IconDropletUp.mjs';\nexport { default as IconDropletX } from './icons/IconDropletX.mjs';\nexport { default as IconDroplet } from './icons/IconDroplet.mjs';\nexport { default as IconDroplets } from './icons/IconDroplets.mjs';\nexport { default as IconDualScreen } from './icons/IconDualScreen.mjs';\nexport { default as IconDumpling } from './icons/IconDumpling.mjs';\nexport { default as IconEPassport } from './icons/IconEPassport.mjs';\nexport { default as IconEarOff } from './icons/IconEarOff.mjs';\nexport { default as IconEarScan } from './icons/IconEarScan.mjs';\nexport { default as IconEar } from './icons/IconEar.mjs';\nexport { default as IconEaseInControlPoint } from './icons/IconEaseInControlPoint.mjs';\nexport { default as IconEaseInOutControlPoints } from './icons/IconEaseInOutControlPoints.mjs';\nexport { default as IconEaseInOut } from './icons/IconEaseInOut.mjs';\nexport { default as IconEaseIn } from './icons/IconEaseIn.mjs';\nexport { default as IconEaseOutControlPoint } from './icons/IconEaseOutControlPoint.mjs';\nexport { default as IconEaseOut } from './icons/IconEaseOut.mjs';\nexport { default as IconEditCircleOff } from './icons/IconEditCircleOff.mjs';\nexport { default as IconEditCircle } from './icons/IconEditCircle.mjs';\nexport { default as IconEditOff } from './icons/IconEditOff.mjs';\nexport { default as IconEdit } from './icons/IconEdit.mjs';\nexport { default as IconEggCracked } from './icons/IconEggCracked.mjs';\nexport { default as IconEggFried } from './icons/IconEggFried.mjs';\nexport { default as IconEggOff } from './icons/IconEggOff.mjs';\nexport { default as IconEgg } from './icons/IconEgg.mjs';\nexport { default as IconEggs } from './icons/IconEggs.mjs';\nexport { default as IconElevatorOff } from './icons/IconElevatorOff.mjs';\nexport { default as IconElevator } from './icons/IconElevator.mjs';\nexport { default as IconEmergencyBed } from './icons/IconEmergencyBed.mjs';\nexport { default as IconEmpathizeOff } from './icons/IconEmpathizeOff.mjs';\nexport { default as IconEmpathize } from './icons/IconEmpathize.mjs';\nexport { default as IconEmphasis } from './icons/IconEmphasis.mjs';\nexport { default as IconEngineOff } from './icons/IconEngineOff.mjs';\nexport { default as IconEngine } from './icons/IconEngine.mjs';\nexport { default as IconEqualDouble } from './icons/IconEqualDouble.mjs';\nexport { default as IconEqualNot } from './icons/IconEqualNot.mjs';\nexport { default as IconEqual } from './icons/IconEqual.mjs';\nexport { default as IconEraserOff } from './icons/IconEraserOff.mjs';\nexport { default as IconEraser } from './icons/IconEraser.mjs';\nexport { default as IconError404Off } from './icons/IconError404Off.mjs';\nexport { default as IconError404 } from './icons/IconError404.mjs';\nexport { default as IconEscalatorDown } from './icons/IconEscalatorDown.mjs';\nexport { default as IconEscalatorUp } from './icons/IconEscalatorUp.mjs';\nexport { default as IconEscalator } from './icons/IconEscalator.mjs';\nexport { default as IconExchangeOff } from './icons/IconExchangeOff.mjs';\nexport { default as IconExchange } from './icons/IconExchange.mjs';\nexport { default as IconExclamationCircle } from './icons/IconExclamationCircle.mjs';\nexport { default as IconExclamationMarkOff } from './icons/IconExclamationMarkOff.mjs';\nexport { default as IconExclamationMark } from './icons/IconExclamationMark.mjs';\nexport { default as IconExplicitOff } from './icons/IconExplicitOff.mjs';\nexport { default as IconExplicit } from './icons/IconExplicit.mjs';\nexport { default as IconExposure0 } from './icons/IconExposure0.mjs';\nexport { default as IconExposureMinus1 } from './icons/IconExposureMinus1.mjs';\nexport { default as IconExposureMinus2 } from './icons/IconExposureMinus2.mjs';\nexport { default as IconExposureOff } from './icons/IconExposureOff.mjs';\nexport { default as IconExposurePlus1 } from './icons/IconExposurePlus1.mjs';\nexport { default as IconExposurePlus2 } from './icons/IconExposurePlus2.mjs';\nexport { default as IconExposure } from './icons/IconExposure.mjs';\nexport { default as IconExternalLinkOff } from './icons/IconExternalLinkOff.mjs';\nexport { default as IconExternalLink } from './icons/IconExternalLink.mjs';\nexport { default as IconEyeBitcoin } from './icons/IconEyeBitcoin.mjs';\nexport { default as IconEyeBolt } from './icons/IconEyeBolt.mjs';\nexport { default as IconEyeCancel } from './icons/IconEyeCancel.mjs';\nexport { default as IconEyeCheck } from './icons/IconEyeCheck.mjs';\nexport { default as IconEyeClosed } from './icons/IconEyeClosed.mjs';\nexport { default as IconEyeCode } from './icons/IconEyeCode.mjs';\nexport { default as IconEyeCog } from './icons/IconEyeCog.mjs';\nexport { default as IconEyeDiscount } from './icons/IconEyeDiscount.mjs';\nexport { default as IconEyeDollar } from './icons/IconEyeDollar.mjs';\nexport { default as IconEyeDotted } from './icons/IconEyeDotted.mjs';\nexport { default as IconEyeDown } from './icons/IconEyeDown.mjs';\nexport { default as IconEyeEdit } from './icons/IconEyeEdit.mjs';\nexport { default as IconEyeExclamation } from './icons/IconEyeExclamation.mjs';\nexport { default as IconEyeHeart } from './icons/IconEyeHeart.mjs';\nexport { default as IconEyeMinus } from './icons/IconEyeMinus.mjs';\nexport { default as IconEyeOff } from './icons/IconEyeOff.mjs';\nexport { default as IconEyePause } from './icons/IconEyePause.mjs';\nexport { default as IconEyePin } from './icons/IconEyePin.mjs';\nexport { default as IconEyePlus } from './icons/IconEyePlus.mjs';\nexport { default as IconEyeQuestion } from './icons/IconEyeQuestion.mjs';\nexport { default as IconEyeSearch } from './icons/IconEyeSearch.mjs';\nexport { default as IconEyeShare } from './icons/IconEyeShare.mjs';\nexport { default as IconEyeSpark } from './icons/IconEyeSpark.mjs';\nexport { default as IconEyeStar } from './icons/IconEyeStar.mjs';\nexport { default as IconEyeTable } from './icons/IconEyeTable.mjs';\nexport { default as IconEyeUp } from './icons/IconEyeUp.mjs';\nexport { default as IconEyeX } from './icons/IconEyeX.mjs';\nexport { default as IconEye } from './icons/IconEye.mjs';\nexport { default as IconEyeglass2 } from './icons/IconEyeglass2.mjs';\nexport { default as IconEyeglassOff } from './icons/IconEyeglassOff.mjs';\nexport { default as IconEyeglass } from './icons/IconEyeglass.mjs';\nexport { default as IconFaceIdError } from './icons/IconFaceIdError.mjs';\nexport { default as IconFaceId } from './icons/IconFaceId.mjs';\nexport { default as IconFaceMaskOff } from './icons/IconFaceMaskOff.mjs';\nexport { default as IconFaceMask } from './icons/IconFaceMask.mjs';\nexport { default as IconFall } from './icons/IconFall.mjs';\nexport { default as IconFavicon } from './icons/IconFavicon.mjs';\nexport { default as IconFeatherOff } from './icons/IconFeatherOff.mjs';\nexport { default as IconFeather } from './icons/IconFeather.mjs';\nexport { default as IconFenceOff } from './icons/IconFenceOff.mjs';\nexport { default as IconFence } from './icons/IconFence.mjs';\nexport { default as IconFerry } from './icons/IconFerry.mjs';\nexport { default as IconFidgetSpinner } from './icons/IconFidgetSpinner.mjs';\nexport { default as IconFile3d } from './icons/IconFile3d.mjs';\nexport { default as IconFileAi } from './icons/IconFileAi.mjs';\nexport { default as IconFileAlert } from './icons/IconFileAlert.mjs';\nexport { default as IconFileAnalytics } from './icons/IconFileAnalytics.mjs';\nexport { default as IconFileArrowLeft } from './icons/IconFileArrowLeft.mjs';\nexport { default as IconFileArrowRight } from './icons/IconFileArrowRight.mjs';\nexport { default as IconFileBarcode } from './icons/IconFileBarcode.mjs';\nexport { default as IconFileBitcoin } from './icons/IconFileBitcoin.mjs';\nexport { default as IconFileBroken } from './icons/IconFileBroken.mjs';\nexport { default as IconFileCertificate } from './icons/IconFileCertificate.mjs';\nexport { default as IconFileChart } from './icons/IconFileChart.mjs';\nexport { default as IconFileCheck } from './icons/IconFileCheck.mjs';\nexport { default as IconFileCode2 } from './icons/IconFileCode2.mjs';\nexport { default as IconFileCode } from './icons/IconFileCode.mjs';\nexport { default as IconFileCv } from './icons/IconFileCv.mjs';\nexport { default as IconFileDatabase } from './icons/IconFileDatabase.mjs';\nexport { default as IconFileDelta } from './icons/IconFileDelta.mjs';\nexport { default as IconFileDescription } from './icons/IconFileDescription.mjs';\nexport { default as IconFileDiff } from './icons/IconFileDiff.mjs';\nexport { default as IconFileDigit } from './icons/IconFileDigit.mjs';\nexport { default as IconFileDislike } from './icons/IconFileDislike.mjs';\nexport { default as IconFileDollar } from './icons/IconFileDollar.mjs';\nexport { default as IconFileDots } from './icons/IconFileDots.mjs';\nexport { default as IconFileDownload } from './icons/IconFileDownload.mjs';\nexport { default as IconFileEuro } from './icons/IconFileEuro.mjs';\nexport { default as IconFileExcel } from './icons/IconFileExcel.mjs';\nexport { default as IconFileExport } from './icons/IconFileExport.mjs';\nexport { default as IconFileFunction } from './icons/IconFileFunction.mjs';\nexport { default as IconFileHorizontal } from './icons/IconFileHorizontal.mjs';\nexport { default as IconFileImport } from './icons/IconFileImport.mjs';\nexport { default as IconFileInfinity } from './icons/IconFileInfinity.mjs';\nexport { default as IconFileInfo } from './icons/IconFileInfo.mjs';\nexport { default as IconFileInvoice } from './icons/IconFileInvoice.mjs';\nexport { default as IconFileIsr } from './icons/IconFileIsr.mjs';\nexport { default as IconFileLambda } from './icons/IconFileLambda.mjs';\nexport { default as IconFileLike } from './icons/IconFileLike.mjs';\nexport { default as IconFileMinus } from './icons/IconFileMinus.mjs';\nexport { default as IconFileMusic } from './icons/IconFileMusic.mjs';\nexport { default as IconFileNeutral } from './icons/IconFileNeutral.mjs';\nexport { default as IconFileOff } from './icons/IconFileOff.mjs';\nexport { default as IconFileOrientation } from './icons/IconFileOrientation.mjs';\nexport { default as IconFilePencil } from './icons/IconFilePencil.mjs';\nexport { default as IconFilePercent } from './icons/IconFilePercent.mjs';\nexport { default as IconFilePhone } from './icons/IconFilePhone.mjs';\nexport { default as IconFilePlus } from './icons/IconFilePlus.mjs';\nexport { default as IconFilePower } from './icons/IconFilePower.mjs';\nexport { default as IconFileReport } from './icons/IconFileReport.mjs';\nexport { default as IconFileRss } from './icons/IconFileRss.mjs';\nexport { default as IconFileSad } from './icons/IconFileSad.mjs';\nexport { default as IconFileScissors } from './icons/IconFileScissors.mjs';\nexport { default as IconFileSearch } from './icons/IconFileSearch.mjs';\nexport { default as IconFileSettings } from './icons/IconFileSettings.mjs';\nexport { default as IconFileShredder } from './icons/IconFileShredder.mjs';\nexport { default as IconFileSignal } from './icons/IconFileSignal.mjs';\nexport { default as IconFileSmile } from './icons/IconFileSmile.mjs';\nexport { default as IconFileSpark } from './icons/IconFileSpark.mjs';\nexport { default as IconFileSpreadsheet } from './icons/IconFileSpreadsheet.mjs';\nexport { default as IconFileStack } from './icons/IconFileStack.mjs';\nexport { default as IconFileStar } from './icons/IconFileStar.mjs';\nexport { default as IconFileSymlink } from './icons/IconFileSymlink.mjs';\nexport { default as IconFileTextAi } from './icons/IconFileTextAi.mjs';\nexport { default as IconFileTextShield } from './icons/IconFileTextShield.mjs';\nexport { default as IconFileTextSpark } from './icons/IconFileTextSpark.mjs';\nexport { default as IconFileText } from './icons/IconFileText.mjs';\nexport { default as IconFileTime } from './icons/IconFileTime.mjs';\nexport { default as IconFileTypeBmp } from './icons/IconFileTypeBmp.mjs';\nexport { default as IconFileTypeCss } from './icons/IconFileTypeCss.mjs';\nexport { default as IconFileTypeCsv } from './icons/IconFileTypeCsv.mjs';\nexport { default as IconFileTypeDoc } from './icons/IconFileTypeDoc.mjs';\nexport { default as IconFileTypeDocx } from './icons/IconFileTypeDocx.mjs';\nexport { default as IconFileTypeHtml } from './icons/IconFileTypeHtml.mjs';\nexport { default as IconFileTypeJpg } from './icons/IconFileTypeJpg.mjs';\nexport { default as IconFileTypeJs } from './icons/IconFileTypeJs.mjs';\nexport { default as IconFileTypeJsx } from './icons/IconFileTypeJsx.mjs';\nexport { default as IconFileTypePdf } from './icons/IconFileTypePdf.mjs';\nexport { default as IconFileTypePhp } from './icons/IconFileTypePhp.mjs';\nexport { default as IconFileTypePng } from './icons/IconFileTypePng.mjs';\nexport { default as IconFileTypePpt } from './icons/IconFileTypePpt.mjs';\nexport { default as IconFileTypeRs } from './icons/IconFileTypeRs.mjs';\nexport { default as IconFileTypeSql } from './icons/IconFileTypeSql.mjs';\nexport { default as IconFileTypeSvg } from './icons/IconFileTypeSvg.mjs';\nexport { default as IconFileTypeTs } from './icons/IconFileTypeTs.mjs';\nexport { default as IconFileTypeTsx } from './icons/IconFileTypeTsx.mjs';\nexport { default as IconFileTypeTxt } from './icons/IconFileTypeTxt.mjs';\nexport { default as IconFileTypeVue } from './icons/IconFileTypeVue.mjs';\nexport { default as IconFileTypeXls } from './icons/IconFileTypeXls.mjs';\nexport { default as IconFileTypeXml } from './icons/IconFileTypeXml.mjs';\nexport { default as IconFileTypeZip } from './icons/IconFileTypeZip.mjs';\nexport { default as IconFileTypography } from './icons/IconFileTypography.mjs';\nexport { default as IconFileUnknown } from './icons/IconFileUnknown.mjs';\nexport { default as IconFileUpload } from './icons/IconFileUpload.mjs';\nexport { default as IconFileVector } from './icons/IconFileVector.mjs';\nexport { default as IconFileWord } from './icons/IconFileWord.mjs';\nexport { default as IconFileX } from './icons/IconFileX.mjs';\nexport { default as IconFileZip } from './icons/IconFileZip.mjs';\nexport { default as IconFile } from './icons/IconFile.mjs';\nexport { default as IconFilesOff } from './icons/IconFilesOff.mjs';\nexport { default as IconFiles } from './icons/IconFiles.mjs';\nexport { default as IconFilter2Bolt } from './icons/IconFilter2Bolt.mjs';\nexport { default as IconFilter2Cancel } from './icons/IconFilter2Cancel.mjs';\nexport { default as IconFilter2Check } from './icons/IconFilter2Check.mjs';\nexport { default as IconFilter2Code } from './icons/IconFilter2Code.mjs';\nexport { default as IconFilter2Cog } from './icons/IconFilter2Cog.mjs';\nexport { default as IconFilter2Discount } from './icons/IconFilter2Discount.mjs';\nexport { default as IconFilter2Dollar } from './icons/IconFilter2Dollar.mjs';\nexport { default as IconFilter2Down } from './icons/IconFilter2Down.mjs';\nexport { default as IconFilter2Edit } from './icons/IconFilter2Edit.mjs';\nexport { default as IconFilter2Exclamation } from './icons/IconFilter2Exclamation.mjs';\nexport { default as IconFilter2Minus } from './icons/IconFilter2Minus.mjs';\nexport { default as IconFilter2Pause } from './icons/IconFilter2Pause.mjs';\nexport { default as IconFilter2Pin } from './icons/IconFilter2Pin.mjs';\nexport { default as IconFilter2Plus } from './icons/IconFilter2Plus.mjs';\nexport { default as IconFilter2Question } from './icons/IconFilter2Question.mjs';\nexport { default as IconFilter2Search } from './icons/IconFilter2Search.mjs';\nexport { default as IconFilter2Share } from './icons/IconFilter2Share.mjs';\nexport { default as IconFilter2Spark } from './icons/IconFilter2Spark.mjs';\nexport { default as IconFilter2Up } from './icons/IconFilter2Up.mjs';\nexport { default as IconFilter2X } from './icons/IconFilter2X.mjs';\nexport { default as IconFilter2 } from './icons/IconFilter2.mjs';\nexport { default as IconFilterBolt } from './icons/IconFilterBolt.mjs';\nexport { default as IconFilterCancel } from './icons/IconFilterCancel.mjs';\nexport { default as IconFilterCheck } from './icons/IconFilterCheck.mjs';\nexport { default as IconFilterCode } from './icons/IconFilterCode.mjs';\nexport { default as IconFilterCog } from './icons/IconFilterCog.mjs';\nexport { default as IconFilterDiscount } from './icons/IconFilterDiscount.mjs';\nexport { default as IconFilterDollar } from './icons/IconFilterDollar.mjs';\nexport { default as IconFilterDown } from './icons/IconFilterDown.mjs';\nexport { default as IconFilterEdit } from './icons/IconFilterEdit.mjs';\nexport { default as IconFilterExclamation } from './icons/IconFilterExclamation.mjs';\nexport { default as IconFilterHeart } from './icons/IconFilterHeart.mjs';\nexport { default as IconFilterMinus } from './icons/IconFilterMinus.mjs';\nexport { default as IconFilterOff } from './icons/IconFilterOff.mjs';\nexport { default as IconFilterPause } from './icons/IconFilterPause.mjs';\nexport { default as IconFilterPin } from './icons/IconFilterPin.mjs';\nexport { default as IconFilterPlus } from './icons/IconFilterPlus.mjs';\nexport { default as IconFilterQuestion } from './icons/IconFilterQuestion.mjs';\nexport { default as IconFilterSearch } from './icons/IconFilterSearch.mjs';\nexport { default as IconFilterShare } from './icons/IconFilterShare.mjs';\nexport { default as IconFilterSpark } from './icons/IconFilterSpark.mjs';\nexport { default as IconFilterStar } from './icons/IconFilterStar.mjs';\nexport { default as IconFilterUp } from './icons/IconFilterUp.mjs';\nexport { default as IconFilterX } from './icons/IconFilterX.mjs';\nexport { default as IconFilter } from './icons/IconFilter.mjs';\nexport { default as IconFilters } from './icons/IconFilters.mjs';\nexport { default as IconFingerprintOff } from './icons/IconFingerprintOff.mjs';\nexport { default as IconFingerprintScan } from './icons/IconFingerprintScan.mjs';\nexport { default as IconFingerprint } from './icons/IconFingerprint.mjs';\nexport { default as IconFireExtinguisher } from './icons/IconFireExtinguisher.mjs';\nexport { default as IconFireHydrantOff } from './icons/IconFireHydrantOff.mjs';\nexport { default as IconFireHydrant } from './icons/IconFireHydrant.mjs';\nexport { default as IconFiretruck } from './icons/IconFiretruck.mjs';\nexport { default as IconFirewallCheck } from './icons/IconFirewallCheck.mjs';\nexport { default as IconFirewallFlame } from './icons/IconFirewallFlame.mjs';\nexport { default as IconFirstAidKitOff } from './icons/IconFirstAidKitOff.mjs';\nexport { default as IconFirstAidKit } from './icons/IconFirstAidKit.mjs';\nexport { default as IconFishBone } from './icons/IconFishBone.mjs';\nexport { default as IconFishChristianity } from './icons/IconFishChristianity.mjs';\nexport { default as IconFishHookOff } from './icons/IconFishHookOff.mjs';\nexport { default as IconFishHook } from './icons/IconFishHook.mjs';\nexport { default as IconFishOff } from './icons/IconFishOff.mjs';\nexport { default as IconFish } from './icons/IconFish.mjs';\nexport { default as IconFlag2Off } from './icons/IconFlag2Off.mjs';\nexport { default as IconFlag2 } from './icons/IconFlag2.mjs';\nexport { default as IconFlag3 } from './icons/IconFlag3.mjs';\nexport { default as IconFlagBitcoin } from './icons/IconFlagBitcoin.mjs';\nexport { default as IconFlagBolt } from './icons/IconFlagBolt.mjs';\nexport { default as IconFlagCancel } from './icons/IconFlagCancel.mjs';\nexport { default as IconFlagCheck } from './icons/IconFlagCheck.mjs';\nexport { default as IconFlagCode } from './icons/IconFlagCode.mjs';\nexport { default as IconFlagCog } from './icons/IconFlagCog.mjs';\nexport { default as IconFlagDiscount } from './icons/IconFlagDiscount.mjs';\nexport { default as IconFlagDollar } from './icons/IconFlagDollar.mjs';\nexport { default as IconFlagDown } from './icons/IconFlagDown.mjs';\nexport { default as IconFlagExclamation } from './icons/IconFlagExclamation.mjs';\nexport { default as IconFlagHeart } from './icons/IconFlagHeart.mjs';\nexport { default as IconFlagMinus } from './icons/IconFlagMinus.mjs';\nexport { default as IconFlagOff } from './icons/IconFlagOff.mjs';\nexport { default as IconFlagPause } from './icons/IconFlagPause.mjs';\nexport { default as IconFlagPin } from './icons/IconFlagPin.mjs';\nexport { default as IconFlagPlus } from './icons/IconFlagPlus.mjs';\nexport { default as IconFlagQuestion } from './icons/IconFlagQuestion.mjs';\nexport { default as IconFlagSearch } from './icons/IconFlagSearch.mjs';\nexport { default as IconFlagShare } from './icons/IconFlagShare.mjs';\nexport { default as IconFlagSpark } from './icons/IconFlagSpark.mjs';\nexport { default as IconFlagStar } from './icons/IconFlagStar.mjs';\nexport { default as IconFlagUp } from './icons/IconFlagUp.mjs';\nexport { default as IconFlagX } from './icons/IconFlagX.mjs';\nexport { default as IconFlag } from './icons/IconFlag.mjs';\nexport { default as IconFlameOff } from './icons/IconFlameOff.mjs';\nexport { default as IconFlame } from './icons/IconFlame.mjs';\nexport { default as IconFlare } from './icons/IconFlare.mjs';\nexport { default as IconFlask2Off } from './icons/IconFlask2Off.mjs';\nexport { default as IconFlask2 } from './icons/IconFlask2.mjs';\nexport { default as IconFlaskOff } from './icons/IconFlaskOff.mjs';\nexport { default as IconFlask } from './icons/IconFlask.mjs';\nexport { default as IconFlipFlops } from './icons/IconFlipFlops.mjs';\nexport { default as IconFlipHorizontal } from './icons/IconFlipHorizontal.mjs';\nexport { default as IconFlipVertical } from './icons/IconFlipVertical.mjs';\nexport { default as IconFloatCenter } from './icons/IconFloatCenter.mjs';\nexport { default as IconFloatLeft } from './icons/IconFloatLeft.mjs';\nexport { default as IconFloatNone } from './icons/IconFloatNone.mjs';\nexport { default as IconFloatRight } from './icons/IconFloatRight.mjs';\nexport { default as IconFlowerOff } from './icons/IconFlowerOff.mjs';\nexport { default as IconFlower } from './icons/IconFlower.mjs';\nexport { default as IconFocus2 } from './icons/IconFocus2.mjs';\nexport { default as IconFocusAuto } from './icons/IconFocusAuto.mjs';\nexport { default as IconFocusCentered } from './icons/IconFocusCentered.mjs';\nexport { default as IconFocus } from './icons/IconFocus.mjs';\nexport { default as IconFoldDown } from './icons/IconFoldDown.mjs';\nexport { default as IconFoldUp } from './icons/IconFoldUp.mjs';\nexport { default as IconFold } from './icons/IconFold.mjs';\nexport { default as IconFolderBolt } from './icons/IconFolderBolt.mjs';\nexport { default as IconFolderCancel } from './icons/IconFolderCancel.mjs';\nexport { default as IconFolderCheck } from './icons/IconFolderCheck.mjs';\nexport { default as IconFolderCode } from './icons/IconFolderCode.mjs';\nexport { default as IconFolderCog } from './icons/IconFolderCog.mjs';\nexport { default as IconFolderDollar } from './icons/IconFolderDollar.mjs';\nexport { default as IconFolderDown } from './icons/IconFolderDown.mjs';\nexport { default as IconFolderExclamation } from './icons/IconFolderExclamation.mjs';\nexport { default as IconFolderHeart } from './icons/IconFolderHeart.mjs';\nexport { default as IconFolderMinus } from './icons/IconFolderMinus.mjs';\nexport { default as IconFolderOff } from './icons/IconFolderOff.mjs';\nexport { default as IconFolderOpen } from './icons/IconFolderOpen.mjs';\nexport { default as IconFolderPause } from './icons/IconFolderPause.mjs';\nexport { default as IconFolderPin } from './icons/IconFolderPin.mjs';\nexport { default as IconFolderPlus } from './icons/IconFolderPlus.mjs';\nexport { default as IconFolderQuestion } from './icons/IconFolderQuestion.mjs';\nexport { default as IconFolderRoot } from './icons/IconFolderRoot.mjs';\nexport { default as IconFolderSearch } from './icons/IconFolderSearch.mjs';\nexport { default as IconFolderShare } from './icons/IconFolderShare.mjs';\nexport { default as IconFolderStar } from './icons/IconFolderStar.mjs';\nexport { default as IconFolderSymlink } from './icons/IconFolderSymlink.mjs';\nexport { default as IconFolderUp } from './icons/IconFolderUp.mjs';\nexport { default as IconFolderX } from './icons/IconFolderX.mjs';\nexport { default as IconFolder } from './icons/IconFolder.mjs';\nexport { default as IconFoldersOff } from './icons/IconFoldersOff.mjs';\nexport { default as IconFolders } from './icons/IconFolders.mjs';\nexport { default as IconForbid2 } from './icons/IconForbid2.mjs';\nexport { default as IconForbid } from './icons/IconForbid.mjs';\nexport { default as IconForklift } from './icons/IconForklift.mjs';\nexport { default as IconForms } from './icons/IconForms.mjs';\nexport { default as IconFountainOff } from './icons/IconFountainOff.mjs';\nexport { default as IconFountain } from './icons/IconFountain.mjs';\nexport { default as IconFrameOff } from './icons/IconFrameOff.mjs';\nexport { default as IconFrame } from './icons/IconFrame.mjs';\nexport { default as IconFreeRights } from './icons/IconFreeRights.mjs';\nexport { default as IconFreezeColumn } from './icons/IconFreezeColumn.mjs';\nexport { default as IconFreezeRowColumn } from './icons/IconFreezeRowColumn.mjs';\nexport { default as IconFreezeRow } from './icons/IconFreezeRow.mjs';\nexport { default as IconFridgeOff } from './icons/IconFridgeOff.mjs';\nexport { default as IconFridge } from './icons/IconFridge.mjs';\nexport { default as IconFriendsOff } from './icons/IconFriendsOff.mjs';\nexport { default as IconFriends } from './icons/IconFriends.mjs';\nexport { default as IconFrustumOff } from './icons/IconFrustumOff.mjs';\nexport { default as IconFrustumPlus } from './icons/IconFrustumPlus.mjs';\nexport { default as IconFrustum } from './icons/IconFrustum.mjs';\nexport { default as IconFunctionOff } from './icons/IconFunctionOff.mjs';\nexport { default as IconFunction } from './icons/IconFunction.mjs';\nexport { default as IconGalaxy } from './icons/IconGalaxy.mjs';\nexport { default as IconGardenCartOff } from './icons/IconGardenCartOff.mjs';\nexport { default as IconGardenCart } from './icons/IconGardenCart.mjs';\nexport { default as IconGasStationOff } from './icons/IconGasStationOff.mjs';\nexport { default as IconGasStation } from './icons/IconGasStation.mjs';\nexport { default as IconGaugeOff } from './icons/IconGaugeOff.mjs';\nexport { default as IconGauge } from './icons/IconGauge.mjs';\nexport { default as IconGavel } from './icons/IconGavel.mjs';\nexport { default as IconGenderAgender } from './icons/IconGenderAgender.mjs';\nexport { default as IconGenderAndrogyne } from './icons/IconGenderAndrogyne.mjs';\nexport { default as IconGenderBigender } from './icons/IconGenderBigender.mjs';\nexport { default as IconGenderDemiboy } from './icons/IconGenderDemiboy.mjs';\nexport { default as IconGenderDemigirl } from './icons/IconGenderDemigirl.mjs';\nexport { default as IconGenderEpicene } from './icons/IconGenderEpicene.mjs';\nexport { default as IconGenderFemale } from './icons/IconGenderFemale.mjs';\nexport { default as IconGenderFemme } from './icons/IconGenderFemme.mjs';\nexport { default as IconGenderGenderfluid } from './icons/IconGenderGenderfluid.mjs';\nexport { default as IconGenderGenderless } from './icons/IconGenderGenderless.mjs';\nexport { default as IconGenderGenderqueer } from './icons/IconGenderGenderqueer.mjs';\nexport { default as IconGenderHermaphrodite } from './icons/IconGenderHermaphrodite.mjs';\nexport { default as IconGenderIntergender } from './icons/IconGenderIntergender.mjs';\nexport { default as IconGenderMale } from './icons/IconGenderMale.mjs';\nexport { default as IconGenderNeutrois } from './icons/IconGenderNeutrois.mjs';\nexport { default as IconGenderThird } from './icons/IconGenderThird.mjs';\nexport { default as IconGenderTransgender } from './icons/IconGenderTransgender.mjs';\nexport { default as IconGenderTrasvesti } from './icons/IconGenderTrasvesti.mjs';\nexport { default as IconGeometry } from './icons/IconGeometry.mjs';\nexport { default as IconGhost2 } from './icons/IconGhost2.mjs';\nexport { default as IconGhost3 } from './icons/IconGhost3.mjs';\nexport { default as IconGhostOff } from './icons/IconGhostOff.mjs';\nexport { default as IconGhost } from './icons/IconGhost.mjs';\nexport { default as IconGif } from './icons/IconGif.mjs';\nexport { default as IconGiftCard } from './icons/IconGiftCard.mjs';\nexport { default as IconGiftOff } from './icons/IconGiftOff.mjs';\nexport { default as IconGift } from './icons/IconGift.mjs';\nexport { default as IconGitBranchDeleted } from './icons/IconGitBranchDeleted.mjs';\nexport { default as IconGitBranch } from './icons/IconGitBranch.mjs';\nexport { default as IconGitCherryPick } from './icons/IconGitCherryPick.mjs';\nexport { default as IconGitCommit } from './icons/IconGitCommit.mjs';\nexport { default as IconGitCompare } from './icons/IconGitCompare.mjs';\nexport { default as IconGitFork } from './icons/IconGitFork.mjs';\nexport { default as IconGitMerge } from './icons/IconGitMerge.mjs';\nexport { default as IconGitPullRequestClosed } from './icons/IconGitPullRequestClosed.mjs';\nexport { default as IconGitPullRequestDraft } from './icons/IconGitPullRequestDraft.mjs';\nexport { default as IconGitPullRequest } from './icons/IconGitPullRequest.mjs';\nexport { default as IconGizmo } from './icons/IconGizmo.mjs';\nexport { default as IconGlassChampagne } from './icons/IconGlassChampagne.mjs';\nexport { default as IconGlassCocktail } from './icons/IconGlassCocktail.mjs';\nexport { default as IconGlassFull } from './icons/IconGlassFull.mjs';\nexport { default as IconGlassGin } from './icons/IconGlassGin.mjs';\nexport { default as IconGlassOff } from './icons/IconGlassOff.mjs';\nexport { default as IconGlass } from './icons/IconGlass.mjs';\nexport { default as IconGlobeOff } from './icons/IconGlobeOff.mjs';\nexport { default as IconGlobe } from './icons/IconGlobe.mjs';\nexport { default as IconGoGame } from './icons/IconGoGame.mjs';\nexport { default as IconGolfOff } from './icons/IconGolfOff.mjs';\nexport { default as IconGolf } from './icons/IconGolf.mjs';\nexport { default as IconGps } from './icons/IconGps.mjs';\nexport { default as IconGradienter } from './icons/IconGradienter.mjs';\nexport { default as IconGrain } from './icons/IconGrain.mjs';\nexport { default as IconGraphOff } from './icons/IconGraphOff.mjs';\nexport { default as IconGraph } from './icons/IconGraph.mjs';\nexport { default as IconGrave2 } from './icons/IconGrave2.mjs';\nexport { default as IconGrave } from './icons/IconGrave.mjs';\nexport { default as IconGrid3x3 } from './icons/IconGrid3x3.mjs';\nexport { default as IconGrid4x4 } from './icons/IconGrid4x4.mjs';\nexport { default as IconGridDots } from './icons/IconGridDots.mjs';\nexport { default as IconGridGoldenratio } from './icons/IconGridGoldenratio.mjs';\nexport { default as IconGridPattern } from './icons/IconGridPattern.mjs';\nexport { default as IconGridScan } from './icons/IconGridScan.mjs';\nexport { default as IconGrillFork } from './icons/IconGrillFork.mjs';\nexport { default as IconGrillOff } from './icons/IconGrillOff.mjs';\nexport { default as IconGrillSpatula } from './icons/IconGrillSpatula.mjs';\nexport { default as IconGrill } from './icons/IconGrill.mjs';\nexport { default as IconGripHorizontal } from './icons/IconGripHorizontal.mjs';\nexport { default as IconGripVertical } from './icons/IconGripVertical.mjs';\nexport { default as IconGrowth } from './icons/IconGrowth.mjs';\nexport { default as IconGuitarPick } from './icons/IconGuitarPick.mjs';\nexport { default as IconGymnastics } from './icons/IconGymnastics.mjs';\nexport { default as IconH1 } from './icons/IconH1.mjs';\nexport { default as IconH2 } from './icons/IconH2.mjs';\nexport { default as IconH3 } from './icons/IconH3.mjs';\nexport { default as IconH4 } from './icons/IconH4.mjs';\nexport { default as IconH5 } from './icons/IconH5.mjs';\nexport { default as IconH6 } from './icons/IconH6.mjs';\nexport { default as IconHammerOff } from './icons/IconHammerOff.mjs';\nexport { default as IconHammer } from './icons/IconHammer.mjs';\nexport { default as IconHandClickOff } from './icons/IconHandClickOff.mjs';\nexport { default as IconHandClick } from './icons/IconHandClick.mjs';\nexport { default as IconHandFingerDown } from './icons/IconHandFingerDown.mjs';\nexport { default as IconHandFingerLeft } from './icons/IconHandFingerLeft.mjs';\nexport { default as IconHandFingerOff } from './icons/IconHandFingerOff.mjs';\nexport { default as IconHandFingerRight } from './icons/IconHandFingerRight.mjs';\nexport { default as IconHandFinger } from './icons/IconHandFinger.mjs';\nexport { default as IconHandGrab } from './icons/IconHandGrab.mjs';\nexport { default as IconHandLittleFinger } from './icons/IconHandLittleFinger.mjs';\nexport { default as IconHandMiddleFinger } from './icons/IconHandMiddleFinger.mjs';\nexport { default as IconHandMove } from './icons/IconHandMove.mjs';\nexport { default as IconHandOff } from './icons/IconHandOff.mjs';\nexport { default as IconHandRingFinger } from './icons/IconHandRingFinger.mjs';\nexport { default as IconHandSanitizer } from './icons/IconHandSanitizer.mjs';\nexport { default as IconHandStop } from './icons/IconHandStop.mjs';\nexport { default as IconHandThreeFingers } from './icons/IconHandThreeFingers.mjs';\nexport { default as IconHandTwoFingers } from './icons/IconHandTwoFingers.mjs';\nexport { default as IconHanger2 } from './icons/IconHanger2.mjs';\nexport { default as IconHangerOff } from './icons/IconHangerOff.mjs';\nexport { default as IconHanger } from './icons/IconHanger.mjs';\nexport { default as IconHash } from './icons/IconHash.mjs';\nexport { default as IconHazeMoon } from './icons/IconHazeMoon.mjs';\nexport { default as IconHaze } from './icons/IconHaze.mjs';\nexport { default as IconHdr } from './icons/IconHdr.mjs';\nexport { default as IconHeadingOff } from './icons/IconHeadingOff.mjs';\nexport { default as IconHeading } from './icons/IconHeading.mjs';\nexport { default as IconHeadphonesOff } from './icons/IconHeadphonesOff.mjs';\nexport { default as IconHeadphones } from './icons/IconHeadphones.mjs';\nexport { default as IconHeadsetOff } from './icons/IconHeadsetOff.mjs';\nexport { default as IconHeadset } from './icons/IconHeadset.mjs';\nexport { default as IconHealthRecognition } from './icons/IconHealthRecognition.mjs';\nexport { default as IconHeartBitcoin } from './icons/IconHeartBitcoin.mjs';\nexport { default as IconHeartBolt } from './icons/IconHeartBolt.mjs';\nexport { default as IconHeartBroken } from './icons/IconHeartBroken.mjs';\nexport { default as IconHeartCancel } from './icons/IconHeartCancel.mjs';\nexport { default as IconHeartCheck } from './icons/IconHeartCheck.mjs';\nexport { default as IconHeartCode } from './icons/IconHeartCode.mjs';\nexport { default as IconHeartCog } from './icons/IconHeartCog.mjs';\nexport { default as IconHeartDiscount } from './icons/IconHeartDiscount.mjs';\nexport { default as IconHeartDollar } from './icons/IconHeartDollar.mjs';\nexport { default as IconHeartDown } from './icons/IconHeartDown.mjs';\nexport { default as IconHeartExclamation } from './icons/IconHeartExclamation.mjs';\nexport { default as IconHeartHandshake } from './icons/IconHeartHandshake.mjs';\nexport { default as IconHeartMinus } from './icons/IconHeartMinus.mjs';\nexport { default as IconHeartOff } from './icons/IconHeartOff.mjs';\nexport { default as IconHeartPause } from './icons/IconHeartPause.mjs';\nexport { default as IconHeartPin } from './icons/IconHeartPin.mjs';\nexport { default as IconHeartPlus } from './icons/IconHeartPlus.mjs';\nexport { default as IconHeartQuestion } from './icons/IconHeartQuestion.mjs';\nexport { default as IconHeartRateMonitor } from './icons/IconHeartRateMonitor.mjs';\nexport { default as IconHeartSearch } from './icons/IconHeartSearch.mjs';\nexport { default as IconHeartShare } from './icons/IconHeartShare.mjs';\nexport { default as IconHeartSpark } from './icons/IconHeartSpark.mjs';\nexport { default as IconHeartStar } from './icons/IconHeartStar.mjs';\nexport { default as IconHeartUp } from './icons/IconHeartUp.mjs';\nexport { default as IconHeartX } from './icons/IconHeartX.mjs';\nexport { default as IconHeart } from './icons/IconHeart.mjs';\nexport { default as IconHeartbeat } from './icons/IconHeartbeat.mjs';\nexport { default as IconHeartsOff } from './icons/IconHeartsOff.mjs';\nexport { default as IconHearts } from './icons/IconHearts.mjs';\nexport { default as IconHelicopterLanding } from './icons/IconHelicopterLanding.mjs';\nexport { default as IconHelicopter } from './icons/IconHelicopter.mjs';\nexport { default as IconHelmetOff } from './icons/IconHelmetOff.mjs';\nexport { default as IconHelmet } from './icons/IconHelmet.mjs';\nexport { default as IconHelpCircle } from './icons/IconHelpCircle.mjs';\nexport { default as IconHelpHexagon } from './icons/IconHelpHexagon.mjs';\nexport { default as IconHelpOctagon } from './icons/IconHelpOctagon.mjs';\nexport { default as IconHelpOff } from './icons/IconHelpOff.mjs';\nexport { default as IconHelpSmall } from './icons/IconHelpSmall.mjs';\nexport { default as IconHelpSquareRounded } from './icons/IconHelpSquareRounded.mjs';\nexport { default as IconHelpSquare } from './icons/IconHelpSquare.mjs';\nexport { default as IconHelpTriangle } from './icons/IconHelpTriangle.mjs';\nexport { default as IconHelp } from './icons/IconHelp.mjs';\nexport { default as IconHemisphereOff } from './icons/IconHemisphereOff.mjs';\nexport { default as IconHemispherePlus } from './icons/IconHemispherePlus.mjs';\nexport { default as IconHemisphere } from './icons/IconHemisphere.mjs';\nexport { default as IconHexagon3d } from './icons/IconHexagon3d.mjs';\nexport { default as IconHexagonAsterisk } from './icons/IconHexagonAsterisk.mjs';\nexport { default as IconHexagonLetterA } from './icons/IconHexagonLetterA.mjs';\nexport { default as IconHexagonLetterB } from './icons/IconHexagonLetterB.mjs';\nexport { default as IconHexagonLetterC } from './icons/IconHexagonLetterC.mjs';\nexport { default as IconHexagonLetterD } from './icons/IconHexagonLetterD.mjs';\nexport { default as IconHexagonLetterE } from './icons/IconHexagonLetterE.mjs';\nexport { default as IconHexagonLetterF } from './icons/IconHexagonLetterF.mjs';\nexport { default as IconHexagonLetterG } from './icons/IconHexagonLetterG.mjs';\nexport { default as IconHexagonLetterH } from './icons/IconHexagonLetterH.mjs';\nexport { default as IconHexagonLetterI } from './icons/IconHexagonLetterI.mjs';\nexport { default as IconHexagonLetterJ } from './icons/IconHexagonLetterJ.mjs';\nexport { default as IconHexagonLetterK } from './icons/IconHexagonLetterK.mjs';\nexport { default as IconHexagonLetterL } from './icons/IconHexagonLetterL.mjs';\nexport { default as IconHexagonLetterM } from './icons/IconHexagonLetterM.mjs';\nexport { default as IconHexagonLetterN } from './icons/IconHexagonLetterN.mjs';\nexport { default as IconHexagonLetterO } from './icons/IconHexagonLetterO.mjs';\nexport { default as IconHexagonLetterP } from './icons/IconHexagonLetterP.mjs';\nexport { default as IconHexagonLetterQ } from './icons/IconHexagonLetterQ.mjs';\nexport { default as IconHexagonLetterR } from './icons/IconHexagonLetterR.mjs';\nexport { default as IconHexagonLetterS } from './icons/IconHexagonLetterS.mjs';\nexport { default as IconHexagonLetterT } from './icons/IconHexagonLetterT.mjs';\nexport { default as IconHexagonLetterU } from './icons/IconHexagonLetterU.mjs';\nexport { default as IconHexagonLetterV } from './icons/IconHexagonLetterV.mjs';\nexport { default as IconHexagonLetterW } from './icons/IconHexagonLetterW.mjs';\nexport { default as IconHexagonLetterX } from './icons/IconHexagonLetterX.mjs';\nexport { default as IconHexagonLetterY } from './icons/IconHexagonLetterY.mjs';\nexport { default as IconHexagonLetterZ } from './icons/IconHexagonLetterZ.mjs';\nexport { default as IconHexagonMinus2 } from './icons/IconHexagonMinus2.mjs';\nexport { default as IconHexagonMinus } from './icons/IconHexagonMinus.mjs';\nexport { default as IconHexagonOff } from './icons/IconHexagonOff.mjs';\nexport { default as IconHexagonPlus2 } from './icons/IconHexagonPlus2.mjs';\nexport { default as IconHexagonPlus } from './icons/IconHexagonPlus.mjs';\nexport { default as IconHexagon } from './icons/IconHexagon.mjs';\nexport { default as IconHexagonalPrismOff } from './icons/IconHexagonalPrismOff.mjs';\nexport { default as IconHexagonalPrismPlus } from './icons/IconHexagonalPrismPlus.mjs';\nexport { default as IconHexagonalPrism } from './icons/IconHexagonalPrism.mjs';\nexport { default as IconHexagonalPyramidOff } from './icons/IconHexagonalPyramidOff.mjs';\nexport { default as IconHexagonalPyramidPlus } from './icons/IconHexagonalPyramidPlus.mjs';\nexport { default as IconHexagonalPyramid } from './icons/IconHexagonalPyramid.mjs';\nexport { default as IconHexagonsOff } from './icons/IconHexagonsOff.mjs';\nexport { default as IconHexagons } from './icons/IconHexagons.mjs';\nexport { default as IconHierarchy2 } from './icons/IconHierarchy2.mjs';\nexport { default as IconHierarchy3 } from './icons/IconHierarchy3.mjs';\nexport { default as IconHierarchyOff } from './icons/IconHierarchyOff.mjs';\nexport { default as IconHierarchy } from './icons/IconHierarchy.mjs';\nexport { default as IconHighlightOff } from './icons/IconHighlightOff.mjs';\nexport { default as IconHighlight } from './icons/IconHighlight.mjs';\nexport { default as IconHistoryOff } from './icons/IconHistoryOff.mjs';\nexport { default as IconHistoryToggle } from './icons/IconHistoryToggle.mjs';\nexport { default as IconHistory } from './icons/IconHistory.mjs';\nexport { default as IconHome2 } from './icons/IconHome2.mjs';\nexport { default as IconHomeBitcoin } from './icons/IconHomeBitcoin.mjs';\nexport { default as IconHomeBolt } from './icons/IconHomeBolt.mjs';\nexport { default as IconHomeCancel } from './icons/IconHomeCancel.mjs';\nexport { default as IconHomeCheck } from './icons/IconHomeCheck.mjs';\nexport { default as IconHomeCog } from './icons/IconHomeCog.mjs';\nexport { default as IconHomeDollar } from './icons/IconHomeDollar.mjs';\nexport { default as IconHomeDot } from './icons/IconHomeDot.mjs';\nexport { default as IconHomeDown } from './icons/IconHomeDown.mjs';\nexport { default as IconHomeEco } from './icons/IconHomeEco.mjs';\nexport { default as IconHomeEdit } from './icons/IconHomeEdit.mjs';\nexport { default as IconHomeExclamation } from './icons/IconHomeExclamation.mjs';\nexport { default as IconHomeHand } from './icons/IconHomeHand.mjs';\nexport { default as IconHomeHeart } from './icons/IconHomeHeart.mjs';\nexport { default as IconHomeInfinity } from './icons/IconHomeInfinity.mjs';\nexport { default as IconHomeLink } from './icons/IconHomeLink.mjs';\nexport { default as IconHomeLock } from './icons/IconHomeLock.mjs';\nexport { default as IconHomeMinus } from './icons/IconHomeMinus.mjs';\nexport { default as IconHomeMove } from './icons/IconHomeMove.mjs';\nexport { default as IconHomeOff } from './icons/IconHomeOff.mjs';\nexport { default as IconHomePlus } from './icons/IconHomePlus.mjs';\nexport { default as IconHomeQuestion } from './icons/IconHomeQuestion.mjs';\nexport { default as IconHomeRibbon } from './icons/IconHomeRibbon.mjs';\nexport { default as IconHomeSearch } from './icons/IconHomeSearch.mjs';\nexport { default as IconHomeShare } from './icons/IconHomeShare.mjs';\nexport { default as IconHomeShield } from './icons/IconHomeShield.mjs';\nexport { default as IconHomeSignal } from './icons/IconHomeSignal.mjs';\nexport { default as IconHomeSpark } from './icons/IconHomeSpark.mjs';\nexport { default as IconHomeStar } from './icons/IconHomeStar.mjs';\nexport { default as IconHomeStats } from './icons/IconHomeStats.mjs';\nexport { default as IconHomeUp } from './icons/IconHomeUp.mjs';\nexport { default as IconHomeX } from './icons/IconHomeX.mjs';\nexport { default as IconHome } from './icons/IconHome.mjs';\nexport { default as IconHorseToy } from './icons/IconHorseToy.mjs';\nexport { default as IconHorse } from './icons/IconHorse.mjs';\nexport { default as IconHorseshoe } from './icons/IconHorseshoe.mjs';\nexport { default as IconHospitalCircle } from './icons/IconHospitalCircle.mjs';\nexport { default as IconHospital } from './icons/IconHospital.mjs';\nexport { default as IconHotelService } from './icons/IconHotelService.mjs';\nexport { default as IconHourglassEmpty } from './icons/IconHourglassEmpty.mjs';\nexport { default as IconHourglassHigh } from './icons/IconHourglassHigh.mjs';\nexport { default as IconHourglassLow } from './icons/IconHourglassLow.mjs';\nexport { default as IconHourglassOff } from './icons/IconHourglassOff.mjs';\nexport { default as IconHourglass } from './icons/IconHourglass.mjs';\nexport { default as IconHtml } from './icons/IconHtml.mjs';\nexport { default as IconHttpConnectOff } from './icons/IconHttpConnectOff.mjs';\nexport { default as IconHttpConnect } from './icons/IconHttpConnect.mjs';\nexport { default as IconHttpDeleteOff } from './icons/IconHttpDeleteOff.mjs';\nexport { default as IconHttpDelete } from './icons/IconHttpDelete.mjs';\nexport { default as IconHttpGetOff } from './icons/IconHttpGetOff.mjs';\nexport { default as IconHttpGet } from './icons/IconHttpGet.mjs';\nexport { default as IconHttpHeadOff } from './icons/IconHttpHeadOff.mjs';\nexport { default as IconHttpHead } from './icons/IconHttpHead.mjs';\nexport { default as IconHttpOptionsOff } from './icons/IconHttpOptionsOff.mjs';\nexport { default as IconHttpOptions } from './icons/IconHttpOptions.mjs';\nexport { default as IconHttpPatchOff } from './icons/IconHttpPatchOff.mjs';\nexport { default as IconHttpPatch } from './icons/IconHttpPatch.mjs';\nexport { default as IconHttpPostOff } from './icons/IconHttpPostOff.mjs';\nexport { default as IconHttpPost } from './icons/IconHttpPost.mjs';\nexport { default as IconHttpPutOff } from './icons/IconHttpPutOff.mjs';\nexport { default as IconHttpPut } from './icons/IconHttpPut.mjs';\nexport { default as IconHttpQueOff } from './icons/IconHttpQueOff.mjs';\nexport { default as IconHttpQue } from './icons/IconHttpQue.mjs';\nexport { default as IconHttpTraceOff } from './icons/IconHttpTraceOff.mjs';\nexport { default as IconHttpTrace } from './icons/IconHttpTrace.mjs';\nexport { default as IconIceCream2 } from './icons/IconIceCream2.mjs';\nexport { default as IconIceCreamOff } from './icons/IconIceCreamOff.mjs';\nexport { default as IconIceCream } from './icons/IconIceCream.mjs';\nexport { default as IconIceSkating } from './icons/IconIceSkating.mjs';\nexport { default as IconIconsOff } from './icons/IconIconsOff.mjs';\nexport { default as IconIcons } from './icons/IconIcons.mjs';\nexport { default as IconIdBadge2 } from './icons/IconIdBadge2.mjs';\nexport { default as IconIdBadgeOff } from './icons/IconIdBadgeOff.mjs';\nexport { default as IconIdBadge } from './icons/IconIdBadge.mjs';\nexport { default as IconIdOff } from './icons/IconIdOff.mjs';\nexport { default as IconId } from './icons/IconId.mjs';\nexport { default as IconIkosaedr } from './icons/IconIkosaedr.mjs';\nexport { default as IconImageGeneration } from './icons/IconImageGeneration.mjs';\nexport { default as IconImageInPicture } from './icons/IconImageInPicture.mjs';\nexport { default as IconInboxOff } from './icons/IconInboxOff.mjs';\nexport { default as IconInbox } from './icons/IconInbox.mjs';\nexport { default as IconIndentDecrease } from './icons/IconIndentDecrease.mjs';\nexport { default as IconIndentIncrease } from './icons/IconIndentIncrease.mjs';\nexport { default as IconInfinityOff } from './icons/IconInfinityOff.mjs';\nexport { default as IconInfinity } from './icons/IconInfinity.mjs';\nexport { default as IconInfoCircle } from './icons/IconInfoCircle.mjs';\nexport { default as IconInfoHexagon } from './icons/IconInfoHexagon.mjs';\nexport { default as IconInfoOctagon } from './icons/IconInfoOctagon.mjs';\nexport { default as IconInfoSmall } from './icons/IconInfoSmall.mjs';\nexport { default as IconInfoSquareRounded } from './icons/IconInfoSquareRounded.mjs';\nexport { default as IconInfoSquare } from './icons/IconInfoSquare.mjs';\nexport { default as IconInfoTriangle } from './icons/IconInfoTriangle.mjs';\nexport { default as IconInnerShadowBottomLeft } from './icons/IconInnerShadowBottomLeft.mjs';\nexport { default as IconInnerShadowBottomRight } from './icons/IconInnerShadowBottomRight.mjs';\nexport { default as IconInnerShadowBottom } from './icons/IconInnerShadowBottom.mjs';\nexport { default as IconInnerShadowLeft } from './icons/IconInnerShadowLeft.mjs';\nexport { default as IconInnerShadowRight } from './icons/IconInnerShadowRight.mjs';\nexport { default as IconInnerShadowTopLeft } from './icons/IconInnerShadowTopLeft.mjs';\nexport { default as IconInnerShadowTopRight } from './icons/IconInnerShadowTopRight.mjs';\nexport { default as IconInnerShadowTop } from './icons/IconInnerShadowTop.mjs';\nexport { default as IconInputAi } from './icons/IconInputAi.mjs';\nexport { default as IconInputCheck } from './icons/IconInputCheck.mjs';\nexport { default as IconInputSearch } from './icons/IconInputSearch.mjs';\nexport { default as IconInputSpark } from './icons/IconInputSpark.mjs';\nexport { default as IconInputX } from './icons/IconInputX.mjs';\nexport { default as IconInvoice } from './icons/IconInvoice.mjs';\nexport { default as IconIroning1 } from './icons/IconIroning1.mjs';\nexport { default as IconIroning2 } from './icons/IconIroning2.mjs';\nexport { default as IconIroning3 } from './icons/IconIroning3.mjs';\nexport { default as IconIroningOff } from './icons/IconIroningOff.mjs';\nexport { default as IconIroningSteamOff } from './icons/IconIroningSteamOff.mjs';\nexport { default as IconIroningSteam } from './icons/IconIroningSteam.mjs';\nexport { default as IconIroning } from './icons/IconIroning.mjs';\nexport { default as IconIrregularPolyhedronOff } from './icons/IconIrregularPolyhedronOff.mjs';\nexport { default as IconIrregularPolyhedronPlus } from './icons/IconIrregularPolyhedronPlus.mjs';\nexport { default as IconIrregularPolyhedron } from './icons/IconIrregularPolyhedron.mjs';\nexport { default as IconItalic } from './icons/IconItalic.mjs';\nexport { default as IconJacket } from './icons/IconJacket.mjs';\nexport { default as IconJetpack } from './icons/IconJetpack.mjs';\nexport { default as IconJewishStar } from './icons/IconJewishStar.mjs';\nexport { default as IconJoinBevel } from './icons/IconJoinBevel.mjs';\nexport { default as IconJoinRound } from './icons/IconJoinRound.mjs';\nexport { default as IconJoinStraight } from './icons/IconJoinStraight.mjs';\nexport { default as IconJoker } from './icons/IconJoker.mjs';\nexport { default as IconJpg } from './icons/IconJpg.mjs';\nexport { default as IconJson } from './icons/IconJson.mjs';\nexport { default as IconJumpRope } from './icons/IconJumpRope.mjs';\nexport { default as IconKarate } from './icons/IconKarate.mjs';\nexport { default as IconKayak } from './icons/IconKayak.mjs';\nexport { default as IconKeyOff } from './icons/IconKeyOff.mjs';\nexport { default as IconKey } from './icons/IconKey.mjs';\nexport { default as IconKeyboardHide } from './icons/IconKeyboardHide.mjs';\nexport { default as IconKeyboardOff } from './icons/IconKeyboardOff.mjs';\nexport { default as IconKeyboardShow } from './icons/IconKeyboardShow.mjs';\nexport { default as IconKeyboard } from './icons/IconKeyboard.mjs';\nexport { default as IconKeyframeAlignCenter } from './icons/IconKeyframeAlignCenter.mjs';\nexport { default as IconKeyframeAlignHorizontal } from './icons/IconKeyframeAlignHorizontal.mjs';\nexport { default as IconKeyframeAlignVertical } from './icons/IconKeyframeAlignVertical.mjs';\nexport { default as IconKeyframe } from './icons/IconKeyframe.mjs';\nexport { default as IconKeyframes } from './icons/IconKeyframes.mjs';\nexport { default as IconLabelImportant } from './icons/IconLabelImportant.mjs';\nexport { default as IconLabelOff } from './icons/IconLabelOff.mjs';\nexport { default as IconLabel } from './icons/IconLabel.mjs';\nexport { default as IconLadderOff } from './icons/IconLadderOff.mjs';\nexport { default as IconLadder } from './icons/IconLadder.mjs';\nexport { default as IconLadle } from './icons/IconLadle.mjs';\nexport { default as IconLambda } from './icons/IconLambda.mjs';\nexport { default as IconLamp2 } from './icons/IconLamp2.mjs';\nexport { default as IconLampOff } from './icons/IconLampOff.mjs';\nexport { default as IconLamp } from './icons/IconLamp.mjs';\nexport { default as IconLane } from './icons/IconLane.mjs';\nexport { default as IconLanguageHiragana } from './icons/IconLanguageHiragana.mjs';\nexport { default as IconLanguageKatakana } from './icons/IconLanguageKatakana.mjs';\nexport { default as IconLanguageOff } from './icons/IconLanguageOff.mjs';\nexport { default as IconLanguage } from './icons/IconLanguage.mjs';\nexport { default as IconLassoOff } from './icons/IconLassoOff.mjs';\nexport { default as IconLassoPolygon } from './icons/IconLassoPolygon.mjs';\nexport { default as IconLasso } from './icons/IconLasso.mjs';\nexport { default as IconLaurelWreath1 } from './icons/IconLaurelWreath1.mjs';\nexport { default as IconLaurelWreath2 } from './icons/IconLaurelWreath2.mjs';\nexport { default as IconLaurelWreath3 } from './icons/IconLaurelWreath3.mjs';\nexport { default as IconLaurelWreath } from './icons/IconLaurelWreath.mjs';\nexport { default as IconLayersDifference } from './icons/IconLayersDifference.mjs';\nexport { default as IconLayersIntersect2 } from './icons/IconLayersIntersect2.mjs';\nexport { default as IconLayersIntersect } from './icons/IconLayersIntersect.mjs';\nexport { default as IconLayersLinked } from './icons/IconLayersLinked.mjs';\nexport { default as IconLayersOff } from './icons/IconLayersOff.mjs';\nexport { default as IconLayersSelectedBottom } from './icons/IconLayersSelectedBottom.mjs';\nexport { default as IconLayersSelected } from './icons/IconLayersSelected.mjs';\nexport { default as IconLayersSubtract } from './icons/IconLayersSubtract.mjs';\nexport { default as IconLayersUnion } from './icons/IconLayersUnion.mjs';\nexport { default as IconLayout2 } from './icons/IconLayout2.mjs';\nexport { default as IconLayoutAlignBottom } from './icons/IconLayoutAlignBottom.mjs';\nexport { default as IconLayoutAlignCenter } from './icons/IconLayoutAlignCenter.mjs';\nexport { default as IconLayoutAlignLeft } from './icons/IconLayoutAlignLeft.mjs';\nexport { default as IconLayoutAlignMiddle } from './icons/IconLayoutAlignMiddle.mjs';\nexport { default as IconLayoutAlignRight } from './icons/IconLayoutAlignRight.mjs';\nexport { default as IconLayoutAlignTop } from './icons/IconLayoutAlignTop.mjs';\nexport { default as IconLayoutBoardSplit } from './icons/IconLayoutBoardSplit.mjs';\nexport { default as IconLayoutBoard } from './icons/IconLayoutBoard.mjs';\nexport { default as IconLayoutBottombarCollapse } from './icons/IconLayoutBottombarCollapse.mjs';\nexport { default as IconLayoutBottombarExpand } from './icons/IconLayoutBottombarExpand.mjs';\nexport { default as IconLayoutBottombarInactive } from './icons/IconLayoutBottombarInactive.mjs';\nexport { default as IconLayoutBottombar } from './icons/IconLayoutBottombar.mjs';\nexport { default as IconLayoutCards } from './icons/IconLayoutCards.mjs';\nexport { default as IconLayoutCollage } from './icons/IconLayoutCollage.mjs';\nexport { default as IconLayoutColumns } from './icons/IconLayoutColumns.mjs';\nexport { default as IconLayoutDashboard } from './icons/IconLayoutDashboard.mjs';\nexport { default as IconLayoutDistributeHorizontal } from './icons/IconLayoutDistributeHorizontal.mjs';\nexport { default as IconLayoutDistributeVertical } from './icons/IconLayoutDistributeVertical.mjs';\nexport { default as IconLayoutGridAdd } from './icons/IconLayoutGridAdd.mjs';\nexport { default as IconLayoutGridRemove } from './icons/IconLayoutGridRemove.mjs';\nexport { default as IconLayoutGrid } from './icons/IconLayoutGrid.mjs';\nexport { default as IconLayoutKanban } from './icons/IconLayoutKanban.mjs';\nexport { default as IconLayoutList } from './icons/IconLayoutList.mjs';\nexport { default as IconLayoutNavbarCollapse } from './icons/IconLayoutNavbarCollapse.mjs';\nexport { default as IconLayoutNavbarExpand } from './icons/IconLayoutNavbarExpand.mjs';\nexport { default as IconLayoutNavbarInactive } from './icons/IconLayoutNavbarInactive.mjs';\nexport { default as IconLayoutNavbar } from './icons/IconLayoutNavbar.mjs';\nexport { default as IconLayoutOff } from './icons/IconLayoutOff.mjs';\nexport { default as IconLayoutRows } from './icons/IconLayoutRows.mjs';\nexport { default as IconLayoutSidebarInactive } from './icons/IconLayoutSidebarInactive.mjs';\nexport { default as IconLayoutSidebarLeftCollapse } from './icons/IconLayoutSidebarLeftCollapse.mjs';\nexport { default as IconLayoutSidebarLeftExpand } from './icons/IconLayoutSidebarLeftExpand.mjs';\nexport { default as IconLayoutSidebarRightCollapse } from './icons/IconLayoutSidebarRightCollapse.mjs';\nexport { default as IconLayoutSidebarRightExpand } from './icons/IconLayoutSidebarRightExpand.mjs';\nexport { default as IconLayoutSidebarRightInactive } from './icons/IconLayoutSidebarRightInactive.mjs';\nexport { default as IconLayoutSidebarRight } from './icons/IconLayoutSidebarRight.mjs';\nexport { default as IconLayoutSidebar } from './icons/IconLayoutSidebar.mjs';\nexport { default as IconLayout } from './icons/IconLayout.mjs';\nexport { default as IconLeaf2 } from './icons/IconLeaf2.mjs';\nexport { default as IconLeafOff } from './icons/IconLeafOff.mjs';\nexport { default as IconLeaf } from './icons/IconLeaf.mjs';\nexport { default as IconLegoOff } from './icons/IconLegoOff.mjs';\nexport { default as IconLego } from './icons/IconLego.mjs';\nexport { default as IconLemon2 } from './icons/IconLemon2.mjs';\nexport { default as IconLemon } from './icons/IconLemon.mjs';\nexport { default as IconLetterASmall } from './icons/IconLetterASmall.mjs';\nexport { default as IconLetterA } from './icons/IconLetterA.mjs';\nexport { default as IconLetterBSmall } from './icons/IconLetterBSmall.mjs';\nexport { default as IconLetterB } from './icons/IconLetterB.mjs';\nexport { default as IconLetterCSmall } from './icons/IconLetterCSmall.mjs';\nexport { default as IconLetterC } from './icons/IconLetterC.mjs';\nexport { default as IconLetterCaseLower } from './icons/IconLetterCaseLower.mjs';\nexport { default as IconLetterCaseToggle } from './icons/IconLetterCaseToggle.mjs';\nexport { default as IconLetterCaseUpper } from './icons/IconLetterCaseUpper.mjs';\nexport { default as IconLetterCase } from './icons/IconLetterCase.mjs';\nexport { default as IconLetterDSmall } from './icons/IconLetterDSmall.mjs';\nexport { default as IconLetterD } from './icons/IconLetterD.mjs';\nexport { default as IconLetterESmall } from './icons/IconLetterESmall.mjs';\nexport { default as IconLetterE } from './icons/IconLetterE.mjs';\nexport { default as IconLetterFSmall } from './icons/IconLetterFSmall.mjs';\nexport { default as IconLetterF } from './icons/IconLetterF.mjs';\nexport { default as IconLetterGSmall } from './icons/IconLetterGSmall.mjs';\nexport { default as IconLetterG } from './icons/IconLetterG.mjs';\nexport { default as IconLetterHSmall } from './icons/IconLetterHSmall.mjs';\nexport { default as IconLetterH } from './icons/IconLetterH.mjs';\nexport { default as IconLetterISmall } from './icons/IconLetterISmall.mjs';\nexport { default as IconLetterI } from './icons/IconLetterI.mjs';\nexport { default as IconLetterJSmall } from './icons/IconLetterJSmall.mjs';\nexport { default as IconLetterJ } from './icons/IconLetterJ.mjs';\nexport { default as IconLetterKSmall } from './icons/IconLetterKSmall.mjs';\nexport { default as IconLetterK } from './icons/IconLetterK.mjs';\nexport { default as IconLetterLSmall } from './icons/IconLetterLSmall.mjs';\nexport { default as IconLetterL } from './icons/IconLetterL.mjs';\nexport { default as IconLetterMSmall } from './icons/IconLetterMSmall.mjs';\nexport { default as IconLetterM } from './icons/IconLetterM.mjs';\nexport { default as IconLetterNSmall } from './icons/IconLetterNSmall.mjs';\nexport { default as IconLetterN } from './icons/IconLetterN.mjs';\nexport { default as IconLetterOSmall } from './icons/IconLetterOSmall.mjs';\nexport { default as IconLetterO } from './icons/IconLetterO.mjs';\nexport { default as IconLetterPSmall } from './icons/IconLetterPSmall.mjs';\nexport { default as IconLetterP } from './icons/IconLetterP.mjs';\nexport { default as IconLetterQSmall } from './icons/IconLetterQSmall.mjs';\nexport { default as IconLetterQ } from './icons/IconLetterQ.mjs';\nexport { default as IconLetterRSmall } from './icons/IconLetterRSmall.mjs';\nexport { default as IconLetterR } from './icons/IconLetterR.mjs';\nexport { default as IconLetterSSmall } from './icons/IconLetterSSmall.mjs';\nexport { default as IconLetterS } from './icons/IconLetterS.mjs';\nexport { default as IconLetterSpacing } from './icons/IconLetterSpacing.mjs';\nexport { default as IconLetterTSmall } from './icons/IconLetterTSmall.mjs';\nexport { default as IconLetterT } from './icons/IconLetterT.mjs';\nexport { default as IconLetterUSmall } from './icons/IconLetterUSmall.mjs';\nexport { default as IconLetterU } from './icons/IconLetterU.mjs';\nexport { default as IconLetterVSmall } from './icons/IconLetterVSmall.mjs';\nexport { default as IconLetterV } from './icons/IconLetterV.mjs';\nexport { default as IconLetterWSmall } from './icons/IconLetterWSmall.mjs';\nexport { default as IconLetterW } from './icons/IconLetterW.mjs';\nexport { default as IconLetterXSmall } from './icons/IconLetterXSmall.mjs';\nexport { default as IconLetterX } from './icons/IconLetterX.mjs';\nexport { default as IconLetterYSmall } from './icons/IconLetterYSmall.mjs';\nexport { default as IconLetterY } from './icons/IconLetterY.mjs';\nexport { default as IconLetterZSmall } from './icons/IconLetterZSmall.mjs';\nexport { default as IconLetterZ } from './icons/IconLetterZ.mjs';\nexport { default as IconLibraryMinus } from './icons/IconLibraryMinus.mjs';\nexport { default as IconLibraryPhoto } from './icons/IconLibraryPhoto.mjs';\nexport { default as IconLibraryPlus } from './icons/IconLibraryPlus.mjs';\nexport { default as IconLibrary } from './icons/IconLibrary.mjs';\nexport { default as IconLicenseOff } from './icons/IconLicenseOff.mjs';\nexport { default as IconLicense } from './icons/IconLicense.mjs';\nexport { default as IconLifebuoyOff } from './icons/IconLifebuoyOff.mjs';\nexport { default as IconLifebuoy } from './icons/IconLifebuoy.mjs';\nexport { default as IconLighter } from './icons/IconLighter.mjs';\nexport { default as IconLineDashed } from './icons/IconLineDashed.mjs';\nexport { default as IconLineDotted } from './icons/IconLineDotted.mjs';\nexport { default as IconLineHeight } from './icons/IconLineHeight.mjs';\nexport { default as IconLineScan } from './icons/IconLineScan.mjs';\nexport { default as IconLine } from './icons/IconLine.mjs';\nexport { default as IconLinkMinus } from './icons/IconLinkMinus.mjs';\nexport { default as IconLinkOff } from './icons/IconLinkOff.mjs';\nexport { default as IconLinkPlus } from './icons/IconLinkPlus.mjs';\nexport { default as IconLink } from './icons/IconLink.mjs';\nexport { default as IconListCheck } from './icons/IconListCheck.mjs';\nexport { default as IconListDetails } from './icons/IconListDetails.mjs';\nexport { default as IconListLetters } from './icons/IconListLetters.mjs';\nexport { default as IconListNumbers } from './icons/IconListNumbers.mjs';\nexport { default as IconListSearch } from './icons/IconListSearch.mjs';\nexport { default as IconListTree } from './icons/IconListTree.mjs';\nexport { default as IconList } from './icons/IconList.mjs';\nexport { default as IconLivePhotoOff } from './icons/IconLivePhotoOff.mjs';\nexport { default as IconLivePhoto } from './icons/IconLivePhoto.mjs';\nexport { default as IconLiveView } from './icons/IconLiveView.mjs';\nexport { default as IconLoadBalancer } from './icons/IconLoadBalancer.mjs';\nexport { default as IconLoader2 } from './icons/IconLoader2.mjs';\nexport { default as IconLoader3 } from './icons/IconLoader3.mjs';\nexport { default as IconLoaderQuarter } from './icons/IconLoaderQuarter.mjs';\nexport { default as IconLoader } from './icons/IconLoader.mjs';\nexport { default as IconLocationBolt } from './icons/IconLocationBolt.mjs';\nexport { default as IconLocationBroken } from './icons/IconLocationBroken.mjs';\nexport { default as IconLocationCancel } from './icons/IconLocationCancel.mjs';\nexport { default as IconLocationCheck } from './icons/IconLocationCheck.mjs';\nexport { default as IconLocationCode } from './icons/IconLocationCode.mjs';\nexport { default as IconLocationCog } from './icons/IconLocationCog.mjs';\nexport { default as IconLocationDiscount } from './icons/IconLocationDiscount.mjs';\nexport { default as IconLocationDollar } from './icons/IconLocationDollar.mjs';\nexport { default as IconLocationDown } from './icons/IconLocationDown.mjs';\nexport { default as IconLocationExclamation } from './icons/IconLocationExclamation.mjs';\nexport { default as IconLocationHeart } from './icons/IconLocationHeart.mjs';\nexport { default as IconLocationMinus } from './icons/IconLocationMinus.mjs';\nexport { default as IconLocationOff } from './icons/IconLocationOff.mjs';\nexport { default as IconLocationPause } from './icons/IconLocationPause.mjs';\nexport { default as IconLocationPin } from './icons/IconLocationPin.mjs';\nexport { default as IconLocationPlus } from './icons/IconLocationPlus.mjs';\nexport { default as IconLocationQuestion } from './icons/IconLocationQuestion.mjs';\nexport { default as IconLocationSearch } from './icons/IconLocationSearch.mjs';\nexport { default as IconLocationShare } from './icons/IconLocationShare.mjs';\nexport { default as IconLocationStar } from './icons/IconLocationStar.mjs';\nexport { default as IconLocationUp } from './icons/IconLocationUp.mjs';\nexport { default as IconLocationX } from './icons/IconLocationX.mjs';\nexport { default as IconLocation } from './icons/IconLocation.mjs';\nexport { default as IconLockAccessOff } from './icons/IconLockAccessOff.mjs';\nexport { default as IconLockAccess } from './icons/IconLockAccess.mjs';\nexport { default as IconLockBitcoin } from './icons/IconLockBitcoin.mjs';\nexport { default as IconLockBolt } from './icons/IconLockBolt.mjs';\nexport { default as IconLockCancel } from './icons/IconLockCancel.mjs';\nexport { default as IconLockCheck } from './icons/IconLockCheck.mjs';\nexport { default as IconLockCode } from './icons/IconLockCode.mjs';\nexport { default as IconLockCog } from './icons/IconLockCog.mjs';\nexport { default as IconLockDollar } from './icons/IconLockDollar.mjs';\nexport { default as IconLockDown } from './icons/IconLockDown.mjs';\nexport { default as IconLockExclamation } from './icons/IconLockExclamation.mjs';\nexport { default as IconLockHeart } from './icons/IconLockHeart.mjs';\nexport { default as IconLockMinus } from './icons/IconLockMinus.mjs';\nexport { default as IconLockOff } from './icons/IconLockOff.mjs';\nexport { default as IconLockOpen2 } from './icons/IconLockOpen2.mjs';\nexport { default as IconLockOpenOff } from './icons/IconLockOpenOff.mjs';\nexport { default as IconLockOpen } from './icons/IconLockOpen.mjs';\nexport { default as IconLockPassword } from './icons/IconLockPassword.mjs';\nexport { default as IconLockPause } from './icons/IconLockPause.mjs';\nexport { default as IconLockPin } from './icons/IconLockPin.mjs';\nexport { default as IconLockPlus } from './icons/IconLockPlus.mjs';\nexport { default as IconLockQuestion } from './icons/IconLockQuestion.mjs';\nexport { default as IconLockSearch } from './icons/IconLockSearch.mjs';\nexport { default as IconLockShare } from './icons/IconLockShare.mjs';\nexport { default as IconLockSquareRounded } from './icons/IconLockSquareRounded.mjs';\nexport { default as IconLockSquare } from './icons/IconLockSquare.mjs';\nexport { default as IconLockStar } from './icons/IconLockStar.mjs';\nexport { default as IconLockUp } from './icons/IconLockUp.mjs';\nexport { default as IconLockX } from './icons/IconLockX.mjs';\nexport { default as IconLock } from './icons/IconLock.mjs';\nexport { default as IconLogicAnd } from './icons/IconLogicAnd.mjs';\nexport { default as IconLogicBuffer } from './icons/IconLogicBuffer.mjs';\nexport { default as IconLogicNand } from './icons/IconLogicNand.mjs';\nexport { default as IconLogicNor } from './icons/IconLogicNor.mjs';\nexport { default as IconLogicNot } from './icons/IconLogicNot.mjs';\nexport { default as IconLogicOr } from './icons/IconLogicOr.mjs';\nexport { default as IconLogicXnor } from './icons/IconLogicXnor.mjs';\nexport { default as IconLogicXor } from './icons/IconLogicXor.mjs';\nexport { default as IconLogin2 } from './icons/IconLogin2.mjs';\nexport { default as IconLogin } from './icons/IconLogin.mjs';\nexport { default as IconLogout2 } from './icons/IconLogout2.mjs';\nexport { default as IconLogout } from './icons/IconLogout.mjs';\nexport { default as IconLogs } from './icons/IconLogs.mjs';\nexport { default as IconLollipopOff } from './icons/IconLollipopOff.mjs';\nexport { default as IconLollipop } from './icons/IconLollipop.mjs';\nexport { default as IconLuggageOff } from './icons/IconLuggageOff.mjs';\nexport { default as IconLuggage } from './icons/IconLuggage.mjs';\nexport { default as IconLungsOff } from './icons/IconLungsOff.mjs';\nexport { default as IconLungs } from './icons/IconLungs.mjs';\nexport { default as IconMacroOff } from './icons/IconMacroOff.mjs';\nexport { default as IconMacro } from './icons/IconMacro.mjs';\nexport { default as IconMagnetOff } from './icons/IconMagnetOff.mjs';\nexport { default as IconMagnet } from './icons/IconMagnet.mjs';\nexport { default as IconMagnetic } from './icons/IconMagnetic.mjs';\nexport { default as IconMailAi } from './icons/IconMailAi.mjs';\nexport { default as IconMailBitcoin } from './icons/IconMailBitcoin.mjs';\nexport { default as IconMailBolt } from './icons/IconMailBolt.mjs';\nexport { default as IconMailCancel } from './icons/IconMailCancel.mjs';\nexport { default as IconMailCheck } from './icons/IconMailCheck.mjs';\nexport { default as IconMailCode } from './icons/IconMailCode.mjs';\nexport { default as IconMailCog } from './icons/IconMailCog.mjs';\nexport { default as IconMailDollar } from './icons/IconMailDollar.mjs';\nexport { default as IconMailDown } from './icons/IconMailDown.mjs';\nexport { default as IconMailExclamation } from './icons/IconMailExclamation.mjs';\nexport { default as IconMailFast } from './icons/IconMailFast.mjs';\nexport { default as IconMailForward } from './icons/IconMailForward.mjs';\nexport { default as IconMailHeart } from './icons/IconMailHeart.mjs';\nexport { default as IconMailMinus } from './icons/IconMailMinus.mjs';\nexport { default as IconMailOff } from './icons/IconMailOff.mjs';\nexport { default as IconMailOpened } from './icons/IconMailOpened.mjs';\nexport { default as IconMailPause } from './icons/IconMailPause.mjs';\nexport { default as IconMailPin } from './icons/IconMailPin.mjs';\nexport { default as IconMailPlus } from './icons/IconMailPlus.mjs';\nexport { default as IconMailQuestion } from './icons/IconMailQuestion.mjs';\nexport { default as IconMailSearch } from './icons/IconMailSearch.mjs';\nexport { default as IconMailShare } from './icons/IconMailShare.mjs';\nexport { default as IconMailSpark } from './icons/IconMailSpark.mjs';\nexport { default as IconMailStar } from './icons/IconMailStar.mjs';\nexport { default as IconMailUp } from './icons/IconMailUp.mjs';\nexport { default as IconMailX } from './icons/IconMailX.mjs';\nexport { default as IconMail } from './icons/IconMail.mjs';\nexport { default as IconMailboxOff } from './icons/IconMailboxOff.mjs';\nexport { default as IconMailbox } from './icons/IconMailbox.mjs';\nexport { default as IconMan } from './icons/IconMan.mjs';\nexport { default as IconManualGearbox } from './icons/IconManualGearbox.mjs';\nexport { default as IconMap2 } from './icons/IconMap2.mjs';\nexport { default as IconMapBolt } from './icons/IconMapBolt.mjs';\nexport { default as IconMapCancel } from './icons/IconMapCancel.mjs';\nexport { default as IconMapCheck } from './icons/IconMapCheck.mjs';\nexport { default as IconMapCode } from './icons/IconMapCode.mjs';\nexport { default as IconMapCog } from './icons/IconMapCog.mjs';\nexport { default as IconMapDiscount } from './icons/IconMapDiscount.mjs';\nexport { default as IconMapDollar } from './icons/IconMapDollar.mjs';\nexport { default as IconMapDown } from './icons/IconMapDown.mjs';\nexport { default as IconMapEast } from './icons/IconMapEast.mjs';\nexport { default as IconMapExclamation } from './icons/IconMapExclamation.mjs';\nexport { default as IconMapHeart } from './icons/IconMapHeart.mjs';\nexport { default as IconMapLock } from './icons/IconMapLock.mjs';\nexport { default as IconMapMinus } from './icons/IconMapMinus.mjs';\nexport { default as IconMapNorth } from './icons/IconMapNorth.mjs';\nexport { default as IconMapOff } from './icons/IconMapOff.mjs';\nexport { default as IconMapPause } from './icons/IconMapPause.mjs';\nexport { default as IconMapPin2 } from './icons/IconMapPin2.mjs';\nexport { default as IconMapPinBolt } from './icons/IconMapPinBolt.mjs';\nexport { default as IconMapPinCancel } from './icons/IconMapPinCancel.mjs';\nexport { default as IconMapPinCheck } from './icons/IconMapPinCheck.mjs';\nexport { default as IconMapPinCode } from './icons/IconMapPinCode.mjs';\nexport { default as IconMapPinCog } from './icons/IconMapPinCog.mjs';\nexport { default as IconMapPinDollar } from './icons/IconMapPinDollar.mjs';\nexport { default as IconMapPinDown } from './icons/IconMapPinDown.mjs';\nexport { default as IconMapPinExclamation } from './icons/IconMapPinExclamation.mjs';\nexport { default as IconMapPinHeart } from './icons/IconMapPinHeart.mjs';\nexport { default as IconMapPinMinus } from './icons/IconMapPinMinus.mjs';\nexport { default as IconMapPinOff } from './icons/IconMapPinOff.mjs';\nexport { default as IconMapPinPause } from './icons/IconMapPinPause.mjs';\nexport { default as IconMapPinPin } from './icons/IconMapPinPin.mjs';\nexport { default as IconMapPinPlus } from './icons/IconMapPinPlus.mjs';\nexport { default as IconMapPinQuestion } from './icons/IconMapPinQuestion.mjs';\nexport { default as IconMapPinSearch } from './icons/IconMapPinSearch.mjs';\nexport { default as IconMapPinShare } from './icons/IconMapPinShare.mjs';\nexport { default as IconMapPinStar } from './icons/IconMapPinStar.mjs';\nexport { default as IconMapPinUp } from './icons/IconMapPinUp.mjs';\nexport { default as IconMapPinX } from './icons/IconMapPinX.mjs';\nexport { default as IconMapPin } from './icons/IconMapPin.mjs';\nexport { default as IconMapPins } from './icons/IconMapPins.mjs';\nexport { default as IconMapPlus } from './icons/IconMapPlus.mjs';\nexport { default as IconMapQuestion } from './icons/IconMapQuestion.mjs';\nexport { default as IconMapRoute } from './icons/IconMapRoute.mjs';\nexport { default as IconMapSearch } from './icons/IconMapSearch.mjs';\nexport { default as IconMapShare } from './icons/IconMapShare.mjs';\nexport { default as IconMapShield } from './icons/IconMapShield.mjs';\nexport { default as IconMapSouth } from './icons/IconMapSouth.mjs';\nexport { default as IconMapStar } from './icons/IconMapStar.mjs';\nexport { default as IconMapUp } from './icons/IconMapUp.mjs';\nexport { default as IconMapWest } from './icons/IconMapWest.mjs';\nexport { default as IconMapX } from './icons/IconMapX.mjs';\nexport { default as IconMap } from './icons/IconMap.mjs';\nexport { default as IconMarkdownOff } from './icons/IconMarkdownOff.mjs';\nexport { default as IconMarkdown } from './icons/IconMarkdown.mjs';\nexport { default as IconMarquee2 } from './icons/IconMarquee2.mjs';\nexport { default as IconMarqueeOff } from './icons/IconMarqueeOff.mjs';\nexport { default as IconMarquee } from './icons/IconMarquee.mjs';\nexport { default as IconMars } from './icons/IconMars.mjs';\nexport { default as IconMaskOff } from './icons/IconMaskOff.mjs';\nexport { default as IconMask } from './icons/IconMask.mjs';\nexport { default as IconMasksTheaterOff } from './icons/IconMasksTheaterOff.mjs';\nexport { default as IconMasksTheater } from './icons/IconMasksTheater.mjs';\nexport { default as IconMassage } from './icons/IconMassage.mjs';\nexport { default as IconMatchstick } from './icons/IconMatchstick.mjs';\nexport { default as IconMath1Divide2 } from './icons/IconMath1Divide2.mjs';\nexport { default as IconMath1Divide3 } from './icons/IconMath1Divide3.mjs';\nexport { default as IconMathAvg } from './icons/IconMathAvg.mjs';\nexport { default as IconMathCos } from './icons/IconMathCos.mjs';\nexport { default as IconMathCtg } from './icons/IconMathCtg.mjs';\nexport { default as IconMathEqualGreater } from './icons/IconMathEqualGreater.mjs';\nexport { default as IconMathEqualLower } from './icons/IconMathEqualLower.mjs';\nexport { default as IconMathFunctionOff } from './icons/IconMathFunctionOff.mjs';\nexport { default as IconMathFunctionY } from './icons/IconMathFunctionY.mjs';\nexport { default as IconMathFunction } from './icons/IconMathFunction.mjs';\nexport { default as IconMathGreater } from './icons/IconMathGreater.mjs';\nexport { default as IconMathIntegralX } from './icons/IconMathIntegralX.mjs';\nexport { default as IconMathIntegral } from './icons/IconMathIntegral.mjs';\nexport { default as IconMathIntegrals } from './icons/IconMathIntegrals.mjs';\nexport { default as IconMathLower } from './icons/IconMathLower.mjs';\nexport { default as IconMathMaxMin } from './icons/IconMathMaxMin.mjs';\nexport { default as IconMathMax } from './icons/IconMathMax.mjs';\nexport { default as IconMathMin } from './icons/IconMathMin.mjs';\nexport { default as IconMathNot } from './icons/IconMathNot.mjs';\nexport { default as IconMathOff } from './icons/IconMathOff.mjs';\nexport { default as IconMathPiDivide2 } from './icons/IconMathPiDivide2.mjs';\nexport { default as IconMathPi } from './icons/IconMathPi.mjs';\nexport { default as IconMathSec } from './icons/IconMathSec.mjs';\nexport { default as IconMathSin } from './icons/IconMathSin.mjs';\nexport { default as IconMathSymbols } from './icons/IconMathSymbols.mjs';\nexport { default as IconMathTg } from './icons/IconMathTg.mjs';\nexport { default as IconMathXDivide2 } from './icons/IconMathXDivide2.mjs';\nexport { default as IconMathXDivideY2 } from './icons/IconMathXDivideY2.mjs';\nexport { default as IconMathXDivideY } from './icons/IconMathXDivideY.mjs';\nexport { default as IconMathXFloorDivideY } from './icons/IconMathXFloorDivideY.mjs';\nexport { default as IconMathXMinusX } from './icons/IconMathXMinusX.mjs';\nexport { default as IconMathXMinusY } from './icons/IconMathXMinusY.mjs';\nexport { default as IconMathXPlusX } from './icons/IconMathXPlusX.mjs';\nexport { default as IconMathXPlusY } from './icons/IconMathXPlusY.mjs';\nexport { default as IconMathXy } from './icons/IconMathXy.mjs';\nexport { default as IconMathYMinusY } from './icons/IconMathYMinusY.mjs';\nexport { default as IconMathYPlusY } from './icons/IconMathYPlusY.mjs';\nexport { default as IconMath } from './icons/IconMath.mjs';\nexport { default as IconMatrix } from './icons/IconMatrix.mjs';\nexport { default as IconMaximizeOff } from './icons/IconMaximizeOff.mjs';\nexport { default as IconMaximize } from './icons/IconMaximize.mjs';\nexport { default as IconMeatOff } from './icons/IconMeatOff.mjs';\nexport { default as IconMeat } from './icons/IconMeat.mjs';\nexport { default as IconMedal2 } from './icons/IconMedal2.mjs';\nexport { default as IconMedal } from './icons/IconMedal.mjs';\nexport { default as IconMedicalCrossCircle } from './icons/IconMedicalCrossCircle.mjs';\nexport { default as IconMedicalCrossOff } from './icons/IconMedicalCrossOff.mjs';\nexport { default as IconMedicalCross } from './icons/IconMedicalCross.mjs';\nexport { default as IconMedicineSyrup } from './icons/IconMedicineSyrup.mjs';\nexport { default as IconMeeple } from './icons/IconMeeple.mjs';\nexport { default as IconMelon } from './icons/IconMelon.mjs';\nexport { default as IconMenorah } from './icons/IconMenorah.mjs';\nexport { default as IconMenu2 } from './icons/IconMenu2.mjs';\nexport { default as IconMenu3 } from './icons/IconMenu3.mjs';\nexport { default as IconMenu4 } from './icons/IconMenu4.mjs';\nexport { default as IconMenuDeep } from './icons/IconMenuDeep.mjs';\nexport { default as IconMenuOrder } from './icons/IconMenuOrder.mjs';\nexport { default as IconMenu } from './icons/IconMenu.mjs';\nexport { default as IconMesh } from './icons/IconMesh.mjs';\nexport { default as IconMessage2Bolt } from './icons/IconMessage2Bolt.mjs';\nexport { default as IconMessage2Cancel } from './icons/IconMessage2Cancel.mjs';\nexport { default as IconMessage2Check } from './icons/IconMessage2Check.mjs';\nexport { default as IconMessage2Code } from './icons/IconMessage2Code.mjs';\nexport { default as IconMessage2Cog } from './icons/IconMessage2Cog.mjs';\nexport { default as IconMessage2Dollar } from './icons/IconMessage2Dollar.mjs';\nexport { default as IconMessage2Down } from './icons/IconMessage2Down.mjs';\nexport { default as IconMessage2Exclamation } from './icons/IconMessage2Exclamation.mjs';\nexport { default as IconMessage2Heart } from './icons/IconMessage2Heart.mjs';\nexport { default as IconMessage2Minus } from './icons/IconMessage2Minus.mjs';\nexport { default as IconMessage2Off } from './icons/IconMessage2Off.mjs';\nexport { default as IconMessage2Pause } from './icons/IconMessage2Pause.mjs';\nexport { default as IconMessage2Pin } from './icons/IconMessage2Pin.mjs';\nexport { default as IconMessage2Plus } from './icons/IconMessage2Plus.mjs';\nexport { default as IconMessage2Question } from './icons/IconMessage2Question.mjs';\nexport { default as IconMessage2Search } from './icons/IconMessage2Search.mjs';\nexport { default as IconMessage2Share } from './icons/IconMessage2Share.mjs';\nexport { default as IconMessage2Star } from './icons/IconMessage2Star.mjs';\nexport { default as IconMessage2Up } from './icons/IconMessage2Up.mjs';\nexport { default as IconMessage2X } from './icons/IconMessage2X.mjs';\nexport { default as IconMessage2 } from './icons/IconMessage2.mjs';\nexport { default as IconMessageBolt } from './icons/IconMessageBolt.mjs';\nexport { default as IconMessageCancel } from './icons/IconMessageCancel.mjs';\nexport { default as IconMessageChatbot } from './icons/IconMessageChatbot.mjs';\nexport { default as IconMessageCheck } from './icons/IconMessageCheck.mjs';\nexport { default as IconMessageCircleBolt } from './icons/IconMessageCircleBolt.mjs';\nexport { default as IconMessageCircleCancel } from './icons/IconMessageCircleCancel.mjs';\nexport { default as IconMessageCircleCheck } from './icons/IconMessageCircleCheck.mjs';\nexport { default as IconMessageCircleCode } from './icons/IconMessageCircleCode.mjs';\nexport { default as IconMessageCircleCog } from './icons/IconMessageCircleCog.mjs';\nexport { default as IconMessageCircleDollar } from './icons/IconMessageCircleDollar.mjs';\nexport { default as IconMessageCircleDown } from './icons/IconMessageCircleDown.mjs';\nexport { default as IconMessageCircleExclamation } from './icons/IconMessageCircleExclamation.mjs';\nexport { default as IconMessageCircleHeart } from './icons/IconMessageCircleHeart.mjs';\nexport { default as IconMessageCircleMinus } from './icons/IconMessageCircleMinus.mjs';\nexport { default as IconMessageCircleOff } from './icons/IconMessageCircleOff.mjs';\nexport { default as IconMessageCirclePause } from './icons/IconMessageCirclePause.mjs';\nexport { default as IconMessageCirclePin } from './icons/IconMessageCirclePin.mjs';\nexport { default as IconMessageCirclePlus } from './icons/IconMessageCirclePlus.mjs';\nexport { default as IconMessageCircleQuestion } from './icons/IconMessageCircleQuestion.mjs';\nexport { default as IconMessageCircleSearch } from './icons/IconMessageCircleSearch.mjs';\nexport { default as IconMessageCircleShare } from './icons/IconMessageCircleShare.mjs';\nexport { default as IconMessageCircleStar } from './icons/IconMessageCircleStar.mjs';\nexport { default as IconMessageCircleUp } from './icons/IconMessageCircleUp.mjs';\nexport { default as IconMessageCircleUser } from './icons/IconMessageCircleUser.mjs';\nexport { default as IconMessageCircleX } from './icons/IconMessageCircleX.mjs';\nexport { default as IconMessageCode } from './icons/IconMessageCode.mjs';\nexport { default as IconMessageCog } from './icons/IconMessageCog.mjs';\nexport { default as IconMessageDollar } from './icons/IconMessageDollar.mjs';\nexport { default as IconMessageDots } from './icons/IconMessageDots.mjs';\nexport { default as IconMessageDown } from './icons/IconMessageDown.mjs';\nexport { default as IconMessageExclamation } from './icons/IconMessageExclamation.mjs';\nexport { default as IconMessageForward } from './icons/IconMessageForward.mjs';\nexport { default as IconMessageHeart } from './icons/IconMessageHeart.mjs';\nexport { default as IconMessageLanguage } from './icons/IconMessageLanguage.mjs';\nexport { default as IconMessageMinus } from './icons/IconMessageMinus.mjs';\nexport { default as IconMessageOff } from './icons/IconMessageOff.mjs';\nexport { default as IconMessagePause } from './icons/IconMessagePause.mjs';\nexport { default as IconMessagePin } from './icons/IconMessagePin.mjs';\nexport { default as IconMessagePlus } from './icons/IconMessagePlus.mjs';\nexport { default as IconMessageQuestion } from './icons/IconMessageQuestion.mjs';\nexport { default as IconMessageReply } from './icons/IconMessageReply.mjs';\nexport { default as IconMessageReport } from './icons/IconMessageReport.mjs';\nexport { default as IconMessageSearch } from './icons/IconMessageSearch.mjs';\nexport { default as IconMessageShare } from './icons/IconMessageShare.mjs';\nexport { default as IconMessageStar } from './icons/IconMessageStar.mjs';\nexport { default as IconMessageUp } from './icons/IconMessageUp.mjs';\nexport { default as IconMessageUser } from './icons/IconMessageUser.mjs';\nexport { default as IconMessageX } from './icons/IconMessageX.mjs';\nexport { default as IconMessage } from './icons/IconMessage.mjs';\nexport { default as IconMessagesOff } from './icons/IconMessagesOff.mjs';\nexport { default as IconMessages } from './icons/IconMessages.mjs';\nexport { default as IconMeteorOff } from './icons/IconMeteorOff.mjs';\nexport { default as IconMeteor } from './icons/IconMeteor.mjs';\nexport { default as IconMeterCube } from './icons/IconMeterCube.mjs';\nexport { default as IconMeterSquare } from './icons/IconMeterSquare.mjs';\nexport { default as IconMetronome } from './icons/IconMetronome.mjs';\nexport { default as IconMichelinBibGourmand } from './icons/IconMichelinBibGourmand.mjs';\nexport { default as IconMichelinStarGreen } from './icons/IconMichelinStarGreen.mjs';\nexport { default as IconMichelinStar } from './icons/IconMichelinStar.mjs';\nexport { default as IconMickey } from './icons/IconMickey.mjs';\nexport { default as IconMicrofrontends } from './icons/IconMicrofrontends.mjs';\nexport { default as IconMicrophone2Off } from './icons/IconMicrophone2Off.mjs';\nexport { default as IconMicrophone2 } from './icons/IconMicrophone2.mjs';\nexport { default as IconMicrophoneOff } from './icons/IconMicrophoneOff.mjs';\nexport { default as IconMicrophone } from './icons/IconMicrophone.mjs';\nexport { default as IconMicroscopeOff } from './icons/IconMicroscopeOff.mjs';\nexport { default as IconMicroscope } from './icons/IconMicroscope.mjs';\nexport { default as IconMicrowaveOff } from './icons/IconMicrowaveOff.mjs';\nexport { default as IconMicrowave } from './icons/IconMicrowave.mjs';\nexport { default as IconMiddleware } from './icons/IconMiddleware.mjs';\nexport { default as IconMilitaryAward } from './icons/IconMilitaryAward.mjs';\nexport { default as IconMilitaryRank } from './icons/IconMilitaryRank.mjs';\nexport { default as IconMilkOff } from './icons/IconMilkOff.mjs';\nexport { default as IconMilk } from './icons/IconMilk.mjs';\nexport { default as IconMilkshake } from './icons/IconMilkshake.mjs';\nexport { default as IconMinimize } from './icons/IconMinimize.mjs';\nexport { default as IconMinusVertical } from './icons/IconMinusVertical.mjs';\nexport { default as IconMinus } from './icons/IconMinus.mjs';\nexport { default as IconMistOff } from './icons/IconMistOff.mjs';\nexport { default as IconMist } from './icons/IconMist.mjs';\nexport { default as IconMobiledataOff } from './icons/IconMobiledataOff.mjs';\nexport { default as IconMobiledata } from './icons/IconMobiledata.mjs';\nexport { default as IconMoneybagEdit } from './icons/IconMoneybagEdit.mjs';\nexport { default as IconMoneybagHeart } from './icons/IconMoneybagHeart.mjs';\nexport { default as IconMoneybagMinus } from './icons/IconMoneybagMinus.mjs';\nexport { default as IconMoneybagMoveBack } from './icons/IconMoneybagMoveBack.mjs';\nexport { default as IconMoneybagMove } from './icons/IconMoneybagMove.mjs';\nexport { default as IconMoneybagPlus } from './icons/IconMoneybagPlus.mjs';\nexport { default as IconMoneybag } from './icons/IconMoneybag.mjs';\nexport { default as IconMonkeybar } from './icons/IconMonkeybar.mjs';\nexport { default as IconMoodAngry } from './icons/IconMoodAngry.mjs';\nexport { default as IconMoodAnnoyed2 } from './icons/IconMoodAnnoyed2.mjs';\nexport { default as IconMoodAnnoyed } from './icons/IconMoodAnnoyed.mjs';\nexport { default as IconMoodBitcoin } from './icons/IconMoodBitcoin.mjs';\nexport { default as IconMoodBoy } from './icons/IconMoodBoy.mjs';\nexport { default as IconMoodCheck } from './icons/IconMoodCheck.mjs';\nexport { default as IconMoodCog } from './icons/IconMoodCog.mjs';\nexport { default as IconMoodConfuzed } from './icons/IconMoodConfuzed.mjs';\nexport { default as IconMoodCrazyHappy } from './icons/IconMoodCrazyHappy.mjs';\nexport { default as IconMoodCry } from './icons/IconMoodCry.mjs';\nexport { default as IconMoodDollar } from './icons/IconMoodDollar.mjs';\nexport { default as IconMoodEdit } from './icons/IconMoodEdit.mjs';\nexport { default as IconMoodEmpty } from './icons/IconMoodEmpty.mjs';\nexport { default as IconMoodHappy } from './icons/IconMoodHappy.mjs';\nexport { default as IconMoodHeart } from './icons/IconMoodHeart.mjs';\nexport { default as IconMoodKid } from './icons/IconMoodKid.mjs';\nexport { default as IconMoodLookDown } from './icons/IconMoodLookDown.mjs';\nexport { default as IconMoodLookLeft } from './icons/IconMoodLookLeft.mjs';\nexport { default as IconMoodLookRight } from './icons/IconMoodLookRight.mjs';\nexport { default as IconMoodLookUp } from './icons/IconMoodLookUp.mjs';\nexport { default as IconMoodMinus } from './icons/IconMoodMinus.mjs';\nexport { default as IconMoodNerd } from './icons/IconMoodNerd.mjs';\nexport { default as IconMoodNervous } from './icons/IconMoodNervous.mjs';\nexport { default as IconMoodNeutral } from './icons/IconMoodNeutral.mjs';\nexport { default as IconMoodOff } from './icons/IconMoodOff.mjs';\nexport { default as IconMoodPin } from './icons/IconMoodPin.mjs';\nexport { default as IconMoodPlus } from './icons/IconMoodPlus.mjs';\nexport { default as IconMoodPuzzled } from './icons/IconMoodPuzzled.mjs';\nexport { default as IconMoodSad2 } from './icons/IconMoodSad2.mjs';\nexport { default as IconMoodSadDizzy } from './icons/IconMoodSadDizzy.mjs';\nexport { default as IconMoodSadSquint } from './icons/IconMoodSadSquint.mjs';\nexport { default as IconMoodSad } from './icons/IconMoodSad.mjs';\nexport { default as IconMoodSearch } from './icons/IconMoodSearch.mjs';\nexport { default as IconMoodShare } from './icons/IconMoodShare.mjs';\nexport { default as IconMoodSick } from './icons/IconMoodSick.mjs';\nexport { default as IconMoodSilence } from './icons/IconMoodSilence.mjs';\nexport { default as IconMoodSing } from './icons/IconMoodSing.mjs';\nexport { default as IconMoodSmileBeam } from './icons/IconMoodSmileBeam.mjs';\nexport { default as IconMoodSmileDizzy } from './icons/IconMoodSmileDizzy.mjs';\nexport { default as IconMoodSmile } from './icons/IconMoodSmile.mjs';\nexport { default as IconMoodSpark } from './icons/IconMoodSpark.mjs';\nexport { default as IconMoodTongueWink2 } from './icons/IconMoodTongueWink2.mjs';\nexport { default as IconMoodTongueWink } from './icons/IconMoodTongueWink.mjs';\nexport { default as IconMoodTongue } from './icons/IconMoodTongue.mjs';\nexport { default as IconMoodUnamused } from './icons/IconMoodUnamused.mjs';\nexport { default as IconMoodUp } from './icons/IconMoodUp.mjs';\nexport { default as IconMoodWink2 } from './icons/IconMoodWink2.mjs';\nexport { default as IconMoodWink } from './icons/IconMoodWink.mjs';\nexport { default as IconMoodWrrr } from './icons/IconMoodWrrr.mjs';\nexport { default as IconMoodX } from './icons/IconMoodX.mjs';\nexport { default as IconMoodXd } from './icons/IconMoodXd.mjs';\nexport { default as IconMoon2 } from './icons/IconMoon2.mjs';\nexport { default as IconMoonOff } from './icons/IconMoonOff.mjs';\nexport { default as IconMoonStars } from './icons/IconMoonStars.mjs';\nexport { default as IconMoon } from './icons/IconMoon.mjs';\nexport { default as IconMoped } from './icons/IconMoped.mjs';\nexport { default as IconMotorbike } from './icons/IconMotorbike.mjs';\nexport { default as IconMountainOff } from './icons/IconMountainOff.mjs';\nexport { default as IconMountain } from './icons/IconMountain.mjs';\nexport { default as IconMouse2 } from './icons/IconMouse2.mjs';\nexport { default as IconMouseOff } from './icons/IconMouseOff.mjs';\nexport { default as IconMouse } from './icons/IconMouse.mjs';\nexport { default as IconMoustache } from './icons/IconMoustache.mjs';\nexport { default as IconMovieOff } from './icons/IconMovieOff.mjs';\nexport { default as IconMovie } from './icons/IconMovie.mjs';\nexport { default as IconMugOff } from './icons/IconMugOff.mjs';\nexport { default as IconMug } from './icons/IconMug.mjs';\nexport { default as IconMultiplier05x } from './icons/IconMultiplier05x.mjs';\nexport { default as IconMultiplier15x } from './icons/IconMultiplier15x.mjs';\nexport { default as IconMultiplier1x } from './icons/IconMultiplier1x.mjs';\nexport { default as IconMultiplier2x } from './icons/IconMultiplier2x.mjs';\nexport { default as IconMushroomOff } from './icons/IconMushroomOff.mjs';\nexport { default as IconMushroom } from './icons/IconMushroom.mjs';\nexport { default as IconMusicBolt } from './icons/IconMusicBolt.mjs';\nexport { default as IconMusicCancel } from './icons/IconMusicCancel.mjs';\nexport { default as IconMusicCheck } from './icons/IconMusicCheck.mjs';\nexport { default as IconMusicCode } from './icons/IconMusicCode.mjs';\nexport { default as IconMusicCog } from './icons/IconMusicCog.mjs';\nexport { default as IconMusicDiscount } from './icons/IconMusicDiscount.mjs';\nexport { default as IconMusicDollar } from './icons/IconMusicDollar.mjs';\nexport { default as IconMusicDown } from './icons/IconMusicDown.mjs';\nexport { default as IconMusicExclamation } from './icons/IconMusicExclamation.mjs';\nexport { default as IconMusicHeart } from './icons/IconMusicHeart.mjs';\nexport { default as IconMusicMinus } from './icons/IconMusicMinus.mjs';\nexport { default as IconMusicOff } from './icons/IconMusicOff.mjs';\nexport { default as IconMusicPause } from './icons/IconMusicPause.mjs';\nexport { default as IconMusicPin } from './icons/IconMusicPin.mjs';\nexport { default as IconMusicPlus } from './icons/IconMusicPlus.mjs';\nexport { default as IconMusicQuestion } from './icons/IconMusicQuestion.mjs';\nexport { default as IconMusicSearch } from './icons/IconMusicSearch.mjs';\nexport { default as IconMusicShare } from './icons/IconMusicShare.mjs';\nexport { default as IconMusicStar } from './icons/IconMusicStar.mjs';\nexport { default as IconMusicUp } from './icons/IconMusicUp.mjs';\nexport { default as IconMusicX } from './icons/IconMusicX.mjs';\nexport { default as IconMusic } from './icons/IconMusic.mjs';\nexport { default as IconNavigationBolt } from './icons/IconNavigationBolt.mjs';\nexport { default as IconNavigationCancel } from './icons/IconNavigationCancel.mjs';\nexport { default as IconNavigationCheck } from './icons/IconNavigationCheck.mjs';\nexport { default as IconNavigationCode } from './icons/IconNavigationCode.mjs';\nexport { default as IconNavigationCog } from './icons/IconNavigationCog.mjs';\nexport { default as IconNavigationDiscount } from './icons/IconNavigationDiscount.mjs';\nexport { default as IconNavigationDollar } from './icons/IconNavigationDollar.mjs';\nexport { default as IconNavigationDown } from './icons/IconNavigationDown.mjs';\nexport { default as IconNavigationEast } from './icons/IconNavigationEast.mjs';\nexport { default as IconNavigationExclamation } from './icons/IconNavigationExclamation.mjs';\nexport { default as IconNavigationHeart } from './icons/IconNavigationHeart.mjs';\nexport { default as IconNavigationMinus } from './icons/IconNavigationMinus.mjs';\nexport { default as IconNavigationNorth } from './icons/IconNavigationNorth.mjs';\nexport { default as IconNavigationOff } from './icons/IconNavigationOff.mjs';\nexport { default as IconNavigationPause } from './icons/IconNavigationPause.mjs';\nexport { default as IconNavigationPin } from './icons/IconNavigationPin.mjs';\nexport { default as IconNavigationPlus } from './icons/IconNavigationPlus.mjs';\nexport { default as IconNavigationQuestion } from './icons/IconNavigationQuestion.mjs';\nexport { default as IconNavigationSearch } from './icons/IconNavigationSearch.mjs';\nexport { default as IconNavigationShare } from './icons/IconNavigationShare.mjs';\nexport { default as IconNavigationSouth } from './icons/IconNavigationSouth.mjs';\nexport { default as IconNavigationStar } from './icons/IconNavigationStar.mjs';\nexport { default as IconNavigationTop } from './icons/IconNavigationTop.mjs';\nexport { default as IconNavigationUp } from './icons/IconNavigationUp.mjs';\nexport { default as IconNavigationWest } from './icons/IconNavigationWest.mjs';\nexport { default as IconNavigationX } from './icons/IconNavigationX.mjs';\nexport { default as IconNavigation } from './icons/IconNavigation.mjs';\nexport { default as IconNeedleThread } from './icons/IconNeedleThread.mjs';\nexport { default as IconNeedle } from './icons/IconNeedle.mjs';\nexport { default as IconNetworkOff } from './icons/IconNetworkOff.mjs';\nexport { default as IconNetwork } from './icons/IconNetwork.mjs';\nexport { default as IconNewSection } from './icons/IconNewSection.mjs';\nexport { default as IconNewsOff } from './icons/IconNewsOff.mjs';\nexport { default as IconNews } from './icons/IconNews.mjs';\nexport { default as IconNfcOff } from './icons/IconNfcOff.mjs';\nexport { default as IconNfc } from './icons/IconNfc.mjs';\nexport { default as IconNoCopyright } from './icons/IconNoCopyright.mjs';\nexport { default as IconNoCreativeCommons } from './icons/IconNoCreativeCommons.mjs';\nexport { default as IconNoDerivatives } from './icons/IconNoDerivatives.mjs';\nexport { default as IconNorthStar } from './icons/IconNorthStar.mjs';\nexport { default as IconNoteOff } from './icons/IconNoteOff.mjs';\nexport { default as IconNote } from './icons/IconNote.mjs';\nexport { default as IconNotebookOff } from './icons/IconNotebookOff.mjs';\nexport { default as IconNotebook } from './icons/IconNotebook.mjs';\nexport { default as IconNotesOff } from './icons/IconNotesOff.mjs';\nexport { default as IconNotes } from './icons/IconNotes.mjs';\nexport { default as IconNotificationOff } from './icons/IconNotificationOff.mjs';\nexport { default as IconNotification } from './icons/IconNotification.mjs';\nexport { default as IconNumber0Small } from './icons/IconNumber0Small.mjs';\nexport { default as IconNumber0 } from './icons/IconNumber0.mjs';\nexport { default as IconNumber1Small } from './icons/IconNumber1Small.mjs';\nexport { default as IconNumber1 } from './icons/IconNumber1.mjs';\nexport { default as IconNumber10Small } from './icons/IconNumber10Small.mjs';\nexport { default as IconNumber10 } from './icons/IconNumber10.mjs';\nexport { default as IconNumber100Small } from './icons/IconNumber100Small.mjs';\nexport { default as IconNumber11Small } from './icons/IconNumber11Small.mjs';\nexport { default as IconNumber11 } from './icons/IconNumber11.mjs';\nexport { default as IconNumber12Small } from './icons/IconNumber12Small.mjs';\nexport { default as IconNumber13Small } from './icons/IconNumber13Small.mjs';\nexport { default as IconNumber14Small } from './icons/IconNumber14Small.mjs';\nexport { default as IconNumber15Small } from './icons/IconNumber15Small.mjs';\nexport { default as IconNumber16Small } from './icons/IconNumber16Small.mjs';\nexport { default as IconNumber17Small } from './icons/IconNumber17Small.mjs';\nexport { default as IconNumber18Small } from './icons/IconNumber18Small.mjs';\nexport { default as IconNumber19Small } from './icons/IconNumber19Small.mjs';\nexport { default as IconNumber2Small } from './icons/IconNumber2Small.mjs';\nexport { default as IconNumber2 } from './icons/IconNumber2.mjs';\nexport { default as IconNumber20Small } from './icons/IconNumber20Small.mjs';\nexport { default as IconNumber21Small } from './icons/IconNumber21Small.mjs';\nexport { default as IconNumber22Small } from './icons/IconNumber22Small.mjs';\nexport { default as IconNumber23Small } from './icons/IconNumber23Small.mjs';\nexport { default as IconNumber24Small } from './icons/IconNumber24Small.mjs';\nexport { default as IconNumber25Small } from './icons/IconNumber25Small.mjs';\nexport { default as IconNumber26Small } from './icons/IconNumber26Small.mjs';\nexport { default as IconNumber27Small } from './icons/IconNumber27Small.mjs';\nexport { default as IconNumber28Small } from './icons/IconNumber28Small.mjs';\nexport { default as IconNumber29Small } from './icons/IconNumber29Small.mjs';\nexport { default as IconNumber3Small } from './icons/IconNumber3Small.mjs';\nexport { default as IconNumber3 } from './icons/IconNumber3.mjs';\nexport { default as IconNumber30Small } from './icons/IconNumber30Small.mjs';\nexport { default as IconNumber31Small } from './icons/IconNumber31Small.mjs';\nexport { default as IconNumber32Small } from './icons/IconNumber32Small.mjs';\nexport { default as IconNumber33Small } from './icons/IconNumber33Small.mjs';\nexport { default as IconNumber34Small } from './icons/IconNumber34Small.mjs';\nexport { default as IconNumber35Small } from './icons/IconNumber35Small.mjs';\nexport { default as IconNumber36Small } from './icons/IconNumber36Small.mjs';\nexport { default as IconNumber37Small } from './icons/IconNumber37Small.mjs';\nexport { default as IconNumber38Small } from './icons/IconNumber38Small.mjs';\nexport { default as IconNumber39Small } from './icons/IconNumber39Small.mjs';\nexport { default as IconNumber4Small } from './icons/IconNumber4Small.mjs';\nexport { default as IconNumber4 } from './icons/IconNumber4.mjs';\nexport { default as IconNumber40Small } from './icons/IconNumber40Small.mjs';\nexport { default as IconNumber41Small } from './icons/IconNumber41Small.mjs';\nexport { default as IconNumber42Small } from './icons/IconNumber42Small.mjs';\nexport { default as IconNumber43Small } from './icons/IconNumber43Small.mjs';\nexport { default as IconNumber44Small } from './icons/IconNumber44Small.mjs';\nexport { default as IconNumber45Small } from './icons/IconNumber45Small.mjs';\nexport { default as IconNumber46Small } from './icons/IconNumber46Small.mjs';\nexport { default as IconNumber47Small } from './icons/IconNumber47Small.mjs';\nexport { default as IconNumber48Small } from './icons/IconNumber48Small.mjs';\nexport { default as IconNumber49Small } from './icons/IconNumber49Small.mjs';\nexport { default as IconNumber5Small } from './icons/IconNumber5Small.mjs';\nexport { default as IconNumber5 } from './icons/IconNumber5.mjs';\nexport { default as IconNumber50Small } from './icons/IconNumber50Small.mjs';\nexport { default as IconNumber51Small } from './icons/IconNumber51Small.mjs';\nexport { default as IconNumber52Small } from './icons/IconNumber52Small.mjs';\nexport { default as IconNumber53Small } from './icons/IconNumber53Small.mjs';\nexport { default as IconNumber54Small } from './icons/IconNumber54Small.mjs';\nexport { default as IconNumber55Small } from './icons/IconNumber55Small.mjs';\nexport { default as IconNumber56Small } from './icons/IconNumber56Small.mjs';\nexport { default as IconNumber57Small } from './icons/IconNumber57Small.mjs';\nexport { default as IconNumber58Small } from './icons/IconNumber58Small.mjs';\nexport { default as IconNumber59Small } from './icons/IconNumber59Small.mjs';\nexport { default as IconNumber6Small } from './icons/IconNumber6Small.mjs';\nexport { default as IconNumber6 } from './icons/IconNumber6.mjs';\nexport { default as IconNumber60Small } from './icons/IconNumber60Small.mjs';\nexport { default as IconNumber61Small } from './icons/IconNumber61Small.mjs';\nexport { default as IconNumber62Small } from './icons/IconNumber62Small.mjs';\nexport { default as IconNumber63Small } from './icons/IconNumber63Small.mjs';\nexport { default as IconNumber64Small } from './icons/IconNumber64Small.mjs';\nexport { default as IconNumber65Small } from './icons/IconNumber65Small.mjs';\nexport { default as IconNumber66Small } from './icons/IconNumber66Small.mjs';\nexport { default as IconNumber67Small } from './icons/IconNumber67Small.mjs';\nexport { default as IconNumber68Small } from './icons/IconNumber68Small.mjs';\nexport { default as IconNumber69Small } from './icons/IconNumber69Small.mjs';\nexport { default as IconNumber7Small } from './icons/IconNumber7Small.mjs';\nexport { default as IconNumber7 } from './icons/IconNumber7.mjs';\nexport { default as IconNumber70Small } from './icons/IconNumber70Small.mjs';\nexport { default as IconNumber71Small } from './icons/IconNumber71Small.mjs';\nexport { default as IconNumber72Small } from './icons/IconNumber72Small.mjs';\nexport { default as IconNumber73Small } from './icons/IconNumber73Small.mjs';\nexport { default as IconNumber74Small } from './icons/IconNumber74Small.mjs';\nexport { default as IconNumber75Small } from './icons/IconNumber75Small.mjs';\nexport { default as IconNumber76Small } from './icons/IconNumber76Small.mjs';\nexport { default as IconNumber77Small } from './icons/IconNumber77Small.mjs';\nexport { default as IconNumber78Small } from './icons/IconNumber78Small.mjs';\nexport { default as IconNumber79Small } from './icons/IconNumber79Small.mjs';\nexport { default as IconNumber8Small } from './icons/IconNumber8Small.mjs';\nexport { default as IconNumber8 } from './icons/IconNumber8.mjs';\nexport { default as IconNumber80Small } from './icons/IconNumber80Small.mjs';\nexport { default as IconNumber81Small } from './icons/IconNumber81Small.mjs';\nexport { default as IconNumber82Small } from './icons/IconNumber82Small.mjs';\nexport { default as IconNumber83Small } from './icons/IconNumber83Small.mjs';\nexport { default as IconNumber84Small } from './icons/IconNumber84Small.mjs';\nexport { default as IconNumber85Small } from './icons/IconNumber85Small.mjs';\nexport { default as IconNumber86Small } from './icons/IconNumber86Small.mjs';\nexport { default as IconNumber87Small } from './icons/IconNumber87Small.mjs';\nexport { default as IconNumber88Small } from './icons/IconNumber88Small.mjs';\nexport { default as IconNumber89Small } from './icons/IconNumber89Small.mjs';\nexport { default as IconNumber9Small } from './icons/IconNumber9Small.mjs';\nexport { default as IconNumber9 } from './icons/IconNumber9.mjs';\nexport { default as IconNumber90Small } from './icons/IconNumber90Small.mjs';\nexport { default as IconNumber91Small } from './icons/IconNumber91Small.mjs';\nexport { default as IconNumber92Small } from './icons/IconNumber92Small.mjs';\nexport { default as IconNumber93Small } from './icons/IconNumber93Small.mjs';\nexport { default as IconNumber94Small } from './icons/IconNumber94Small.mjs';\nexport { default as IconNumber95Small } from './icons/IconNumber95Small.mjs';\nexport { default as IconNumber96Small } from './icons/IconNumber96Small.mjs';\nexport { default as IconNumber97Small } from './icons/IconNumber97Small.mjs';\nexport { default as IconNumber98Small } from './icons/IconNumber98Small.mjs';\nexport { default as IconNumber99Small } from './icons/IconNumber99Small.mjs';\nexport { default as IconNumber } from './icons/IconNumber.mjs';\nexport { default as IconNumbers } from './icons/IconNumbers.mjs';\nexport { default as IconNurse } from './icons/IconNurse.mjs';\nexport { default as IconNut } from './icons/IconNut.mjs';\nexport { default as IconObjectScan } from './icons/IconObjectScan.mjs';\nexport { default as IconOctagonMinus2 } from './icons/IconOctagonMinus2.mjs';\nexport { default as IconOctagonMinus } from './icons/IconOctagonMinus.mjs';\nexport { default as IconOctagonOff } from './icons/IconOctagonOff.mjs';\nexport { default as IconOctagonPlus2 } from './icons/IconOctagonPlus2.mjs';\nexport { default as IconOctagonPlus } from './icons/IconOctagonPlus.mjs';\nexport { default as IconOctagon } from './icons/IconOctagon.mjs';\nexport { default as IconOctahedronOff } from './icons/IconOctahedronOff.mjs';\nexport { default as IconOctahedronPlus } from './icons/IconOctahedronPlus.mjs';\nexport { default as IconOctahedron } from './icons/IconOctahedron.mjs';\nexport { default as IconOld } from './icons/IconOld.mjs';\nexport { default as IconOlympicsOff } from './icons/IconOlympicsOff.mjs';\nexport { default as IconOlympics } from './icons/IconOlympics.mjs';\nexport { default as IconOm } from './icons/IconOm.mjs';\nexport { default as IconOmega } from './icons/IconOmega.mjs';\nexport { default as IconOption } from './icons/IconOption.mjs';\nexport { default as IconOutbound } from './icons/IconOutbound.mjs';\nexport { default as IconOutlet } from './icons/IconOutlet.mjs';\nexport { default as IconOvalVertical } from './icons/IconOvalVertical.mjs';\nexport { default as IconOval } from './icons/IconOval.mjs';\nexport { default as IconOverline } from './icons/IconOverline.mjs';\nexport { default as IconPackageExport } from './icons/IconPackageExport.mjs';\nexport { default as IconPackageImport } from './icons/IconPackageImport.mjs';\nexport { default as IconPackageOff } from './icons/IconPackageOff.mjs';\nexport { default as IconPackages } from './icons/IconPackages.mjs';\nexport { default as IconPacman } from './icons/IconPacman.mjs';\nexport { default as IconPageBreak } from './icons/IconPageBreak.mjs';\nexport { default as IconPaintOff } from './icons/IconPaintOff.mjs';\nexport { default as IconPaint } from './icons/IconPaint.mjs';\nexport { default as IconPaletteOff } from './icons/IconPaletteOff.mjs';\nexport { default as IconPalette } from './icons/IconPalette.mjs';\nexport { default as IconPanoramaHorizontalOff } from './icons/IconPanoramaHorizontalOff.mjs';\nexport { default as IconPanoramaHorizontal } from './icons/IconPanoramaHorizontal.mjs';\nexport { default as IconPanoramaVerticalOff } from './icons/IconPanoramaVerticalOff.mjs';\nexport { default as IconPanoramaVertical } from './icons/IconPanoramaVertical.mjs';\nexport { default as IconPaperBagOff } from './icons/IconPaperBagOff.mjs';\nexport { default as IconPaperBag } from './icons/IconPaperBag.mjs';\nexport { default as IconPaperclip } from './icons/IconPaperclip.mjs';\nexport { default as IconParachuteOff } from './icons/IconParachuteOff.mjs';\nexport { default as IconParachute } from './icons/IconParachute.mjs';\nexport { default as IconParenthesesOff } from './icons/IconParenthesesOff.mjs';\nexport { default as IconParentheses } from './icons/IconParentheses.mjs';\nexport { default as IconParkingCircle } from './icons/IconParkingCircle.mjs';\nexport { default as IconParkingOff } from './icons/IconParkingOff.mjs';\nexport { default as IconParking } from './icons/IconParking.mjs';\nexport { default as IconPasswordFingerprint } from './icons/IconPasswordFingerprint.mjs';\nexport { default as IconPasswordMobilePhone } from './icons/IconPasswordMobilePhone.mjs';\nexport { default as IconPasswordUser } from './icons/IconPasswordUser.mjs';\nexport { default as IconPassword } from './icons/IconPassword.mjs';\nexport { default as IconPawOff } from './icons/IconPawOff.mjs';\nexport { default as IconPaw } from './icons/IconPaw.mjs';\nexport { default as IconPaywall } from './icons/IconPaywall.mjs';\nexport { default as IconPdf } from './icons/IconPdf.mjs';\nexport { default as IconPeace } from './icons/IconPeace.mjs';\nexport { default as IconPencilBolt } from './icons/IconPencilBolt.mjs';\nexport { default as IconPencilCancel } from './icons/IconPencilCancel.mjs';\nexport { default as IconPencilCheck } from './icons/IconPencilCheck.mjs';\nexport { default as IconPencilCode } from './icons/IconPencilCode.mjs';\nexport { default as IconPencilCog } from './icons/IconPencilCog.mjs';\nexport { default as IconPencilDiscount } from './icons/IconPencilDiscount.mjs';\nexport { default as IconPencilDollar } from './icons/IconPencilDollar.mjs';\nexport { default as IconPencilDown } from './icons/IconPencilDown.mjs';\nexport { default as IconPencilExclamation } from './icons/IconPencilExclamation.mjs';\nexport { default as IconPencilHeart } from './icons/IconPencilHeart.mjs';\nexport { default as IconPencilMinus } from './icons/IconPencilMinus.mjs';\nexport { default as IconPencilOff } from './icons/IconPencilOff.mjs';\nexport { default as IconPencilPause } from './icons/IconPencilPause.mjs';\nexport { default as IconPencilPin } from './icons/IconPencilPin.mjs';\nexport { default as IconPencilPlus } from './icons/IconPencilPlus.mjs';\nexport { default as IconPencilQuestion } from './icons/IconPencilQuestion.mjs';\nexport { default as IconPencilSearch } from './icons/IconPencilSearch.mjs';\nexport { default as IconPencilShare } from './icons/IconPencilShare.mjs';\nexport { default as IconPencilStar } from './icons/IconPencilStar.mjs';\nexport { default as IconPencilUp } from './icons/IconPencilUp.mjs';\nexport { default as IconPencilX } from './icons/IconPencilX.mjs';\nexport { default as IconPencil } from './icons/IconPencil.mjs';\nexport { default as IconPennant2 } from './icons/IconPennant2.mjs';\nexport { default as IconPennantOff } from './icons/IconPennantOff.mjs';\nexport { default as IconPennant } from './icons/IconPennant.mjs';\nexport { default as IconPentagonMinus } from './icons/IconPentagonMinus.mjs';\nexport { default as IconPentagonNumber0 } from './icons/IconPentagonNumber0.mjs';\nexport { default as IconPentagonNumber1 } from './icons/IconPentagonNumber1.mjs';\nexport { default as IconPentagonNumber2 } from './icons/IconPentagonNumber2.mjs';\nexport { default as IconPentagonNumber3 } from './icons/IconPentagonNumber3.mjs';\nexport { default as IconPentagonNumber4 } from './icons/IconPentagonNumber4.mjs';\nexport { default as IconPentagonNumber5 } from './icons/IconPentagonNumber5.mjs';\nexport { default as IconPentagonNumber6 } from './icons/IconPentagonNumber6.mjs';\nexport { default as IconPentagonNumber7 } from './icons/IconPentagonNumber7.mjs';\nexport { default as IconPentagonNumber8 } from './icons/IconPentagonNumber8.mjs';\nexport { default as IconPentagonNumber9 } from './icons/IconPentagonNumber9.mjs';\nexport { default as IconPentagonOff } from './icons/IconPentagonOff.mjs';\nexport { default as IconPentagonPlus } from './icons/IconPentagonPlus.mjs';\nexport { default as IconPentagonX } from './icons/IconPentagonX.mjs';\nexport { default as IconPentagon } from './icons/IconPentagon.mjs';\nexport { default as IconPentagram } from './icons/IconPentagram.mjs';\nexport { default as IconPepperOff } from './icons/IconPepperOff.mjs';\nexport { default as IconPepper } from './icons/IconPepper.mjs';\nexport { default as IconPercentage0 } from './icons/IconPercentage0.mjs';\nexport { default as IconPercentage10 } from './icons/IconPercentage10.mjs';\nexport { default as IconPercentage100 } from './icons/IconPercentage100.mjs';\nexport { default as IconPercentage20 } from './icons/IconPercentage20.mjs';\nexport { default as IconPercentage25 } from './icons/IconPercentage25.mjs';\nexport { default as IconPercentage30 } from './icons/IconPercentage30.mjs';\nexport { default as IconPercentage33 } from './icons/IconPercentage33.mjs';\nexport { default as IconPercentage40 } from './icons/IconPercentage40.mjs';\nexport { default as IconPercentage50 } from './icons/IconPercentage50.mjs';\nexport { default as IconPercentage60 } from './icons/IconPercentage60.mjs';\nexport { default as IconPercentage66 } from './icons/IconPercentage66.mjs';\nexport { default as IconPercentage70 } from './icons/IconPercentage70.mjs';\nexport { default as IconPercentage75 } from './icons/IconPercentage75.mjs';\nexport { default as IconPercentage80 } from './icons/IconPercentage80.mjs';\nexport { default as IconPercentage90 } from './icons/IconPercentage90.mjs';\nexport { default as IconPercentage } from './icons/IconPercentage.mjs';\nexport { default as IconPerfume } from './icons/IconPerfume.mjs';\nexport { default as IconPerspectiveOff } from './icons/IconPerspectiveOff.mjs';\nexport { default as IconPerspective } from './icons/IconPerspective.mjs';\nexport { default as IconPhoneCall } from './icons/IconPhoneCall.mjs';\nexport { default as IconPhoneCalling } from './icons/IconPhoneCalling.mjs';\nexport { default as IconPhoneCheck } from './icons/IconPhoneCheck.mjs';\nexport { default as IconPhoneDone } from './icons/IconPhoneDone.mjs';\nexport { default as IconPhoneEnd } from './icons/IconPhoneEnd.mjs';\nexport { default as IconPhoneIncoming } from './icons/IconPhoneIncoming.mjs';\nexport { default as IconPhoneOff } from './icons/IconPhoneOff.mjs';\nexport { default as IconPhoneOutgoing } from './icons/IconPhoneOutgoing.mjs';\nexport { default as IconPhonePause } from './icons/IconPhonePause.mjs';\nexport { default as IconPhonePlus } from './icons/IconPhonePlus.mjs';\nexport { default as IconPhoneRinging } from './icons/IconPhoneRinging.mjs';\nexport { default as IconPhoneSpark } from './icons/IconPhoneSpark.mjs';\nexport { default as IconPhoneX } from './icons/IconPhoneX.mjs';\nexport { default as IconPhone } from './icons/IconPhone.mjs';\nexport { default as IconPhotoAi } from './icons/IconPhotoAi.mjs';\nexport { default as IconPhotoBitcoin } from './icons/IconPhotoBitcoin.mjs';\nexport { default as IconPhotoBolt } from './icons/IconPhotoBolt.mjs';\nexport { default as IconPhotoCancel } from './icons/IconPhotoCancel.mjs';\nexport { default as IconPhotoCheck } from './icons/IconPhotoCheck.mjs';\nexport { default as IconPhotoCircleMinus } from './icons/IconPhotoCircleMinus.mjs';\nexport { default as IconPhotoCirclePlus } from './icons/IconPhotoCirclePlus.mjs';\nexport { default as IconPhotoCircle } from './icons/IconPhotoCircle.mjs';\nexport { default as IconPhotoCode } from './icons/IconPhotoCode.mjs';\nexport { default as IconPhotoCog } from './icons/IconPhotoCog.mjs';\nexport { default as IconPhotoDollar } from './icons/IconPhotoDollar.mjs';\nexport { default as IconPhotoDown } from './icons/IconPhotoDown.mjs';\nexport { default as IconPhotoEdit } from './icons/IconPhotoEdit.mjs';\nexport { default as IconPhotoExclamation } from './icons/IconPhotoExclamation.mjs';\nexport { default as IconPhotoHeart } from './icons/IconPhotoHeart.mjs';\nexport { default as IconPhotoHexagon } from './icons/IconPhotoHexagon.mjs';\nexport { default as IconPhotoMinus } from './icons/IconPhotoMinus.mjs';\nexport { default as IconPhotoOff } from './icons/IconPhotoOff.mjs';\nexport { default as IconPhotoPause } from './icons/IconPhotoPause.mjs';\nexport { default as IconPhotoPentagon } from './icons/IconPhotoPentagon.mjs';\nexport { default as IconPhotoPin } from './icons/IconPhotoPin.mjs';\nexport { default as IconPhotoPlus } from './icons/IconPhotoPlus.mjs';\nexport { default as IconPhotoQuestion } from './icons/IconPhotoQuestion.mjs';\nexport { default as IconPhotoScan } from './icons/IconPhotoScan.mjs';\nexport { default as IconPhotoSearch } from './icons/IconPhotoSearch.mjs';\nexport { default as IconPhotoSensor2 } from './icons/IconPhotoSensor2.mjs';\nexport { default as IconPhotoSensor3 } from './icons/IconPhotoSensor3.mjs';\nexport { default as IconPhotoSensor } from './icons/IconPhotoSensor.mjs';\nexport { default as IconPhotoShare } from './icons/IconPhotoShare.mjs';\nexport { default as IconPhotoShield } from './icons/IconPhotoShield.mjs';\nexport { default as IconPhotoSpark } from './icons/IconPhotoSpark.mjs';\nexport { default as IconPhotoSquareRounded } from './icons/IconPhotoSquareRounded.mjs';\nexport { default as IconPhotoStar } from './icons/IconPhotoStar.mjs';\nexport { default as IconPhotoUp } from './icons/IconPhotoUp.mjs';\nexport { default as IconPhotoVideo } from './icons/IconPhotoVideo.mjs';\nexport { default as IconPhotoX } from './icons/IconPhotoX.mjs';\nexport { default as IconPhoto } from './icons/IconPhoto.mjs';\nexport { default as IconPhysotherapist } from './icons/IconPhysotherapist.mjs';\nexport { default as IconPiano } from './icons/IconPiano.mjs';\nexport { default as IconPick } from './icons/IconPick.mjs';\nexport { default as IconPicnicTable } from './icons/IconPicnicTable.mjs';\nexport { default as IconPictureInPictureOff } from './icons/IconPictureInPictureOff.mjs';\nexport { default as IconPictureInPictureOn } from './icons/IconPictureInPictureOn.mjs';\nexport { default as IconPictureInPictureTop } from './icons/IconPictureInPictureTop.mjs';\nexport { default as IconPictureInPicture } from './icons/IconPictureInPicture.mjs';\nexport { default as IconPigMoney } from './icons/IconPigMoney.mjs';\nexport { default as IconPigOff } from './icons/IconPigOff.mjs';\nexport { default as IconPig } from './icons/IconPig.mjs';\nexport { default as IconPilcrowLeft } from './icons/IconPilcrowLeft.mjs';\nexport { default as IconPilcrowRight } from './icons/IconPilcrowRight.mjs';\nexport { default as IconPilcrow } from './icons/IconPilcrow.mjs';\nexport { default as IconPillOff } from './icons/IconPillOff.mjs';\nexport { default as IconPill } from './icons/IconPill.mjs';\nexport { default as IconPills } from './icons/IconPills.mjs';\nexport { default as IconPinEnd } from './icons/IconPinEnd.mjs';\nexport { default as IconPinInvoke } from './icons/IconPinInvoke.mjs';\nexport { default as IconPin } from './icons/IconPin.mjs';\nexport { default as IconPingPong } from './icons/IconPingPong.mjs';\nexport { default as IconPinnedOff } from './icons/IconPinnedOff.mjs';\nexport { default as IconPinned } from './icons/IconPinned.mjs';\nexport { default as IconPizzaOff } from './icons/IconPizzaOff.mjs';\nexport { default as IconPizza } from './icons/IconPizza.mjs';\nexport { default as IconPlaceholder } from './icons/IconPlaceholder.mjs';\nexport { default as IconPlaneArrival } from './icons/IconPlaneArrival.mjs';\nexport { default as IconPlaneDeparture } from './icons/IconPlaneDeparture.mjs';\nexport { default as IconPlaneInflight } from './icons/IconPlaneInflight.mjs';\nexport { default as IconPlaneOff } from './icons/IconPlaneOff.mjs';\nexport { default as IconPlaneTilt } from './icons/IconPlaneTilt.mjs';\nexport { default as IconPlane } from './icons/IconPlane.mjs';\nexport { default as IconPlanetOff } from './icons/IconPlanetOff.mjs';\nexport { default as IconPlanet } from './icons/IconPlanet.mjs';\nexport { default as IconPlant2Off } from './icons/IconPlant2Off.mjs';\nexport { default as IconPlant2 } from './icons/IconPlant2.mjs';\nexport { default as IconPlantOff } from './icons/IconPlantOff.mjs';\nexport { default as IconPlant } from './icons/IconPlant.mjs';\nexport { default as IconPlayBasketball } from './icons/IconPlayBasketball.mjs';\nexport { default as IconPlayCard1 } from './icons/IconPlayCard1.mjs';\nexport { default as IconPlayCard10 } from './icons/IconPlayCard10.mjs';\nexport { default as IconPlayCard2 } from './icons/IconPlayCard2.mjs';\nexport { default as IconPlayCard3 } from './icons/IconPlayCard3.mjs';\nexport { default as IconPlayCard4 } from './icons/IconPlayCard4.mjs';\nexport { default as IconPlayCard5 } from './icons/IconPlayCard5.mjs';\nexport { default as IconPlayCard6 } from './icons/IconPlayCard6.mjs';\nexport { default as IconPlayCard7 } from './icons/IconPlayCard7.mjs';\nexport { default as IconPlayCard8 } from './icons/IconPlayCard8.mjs';\nexport { default as IconPlayCard9 } from './icons/IconPlayCard9.mjs';\nexport { default as IconPlayCardA } from './icons/IconPlayCardA.mjs';\nexport { default as IconPlayCardJ } from './icons/IconPlayCardJ.mjs';\nexport { default as IconPlayCardK } from './icons/IconPlayCardK.mjs';\nexport { default as IconPlayCardOff } from './icons/IconPlayCardOff.mjs';\nexport { default as IconPlayCardQ } from './icons/IconPlayCardQ.mjs';\nexport { default as IconPlayCardStar } from './icons/IconPlayCardStar.mjs';\nexport { default as IconPlayCard } from './icons/IconPlayCard.mjs';\nexport { default as IconPlayFootball } from './icons/IconPlayFootball.mjs';\nexport { default as IconPlayHandball } from './icons/IconPlayHandball.mjs';\nexport { default as IconPlayVolleyball } from './icons/IconPlayVolleyball.mjs';\nexport { default as IconPlayerEject } from './icons/IconPlayerEject.mjs';\nexport { default as IconPlayerPause } from './icons/IconPlayerPause.mjs';\nexport { default as IconPlayerPlay } from './icons/IconPlayerPlay.mjs';\nexport { default as IconPlayerRecord } from './icons/IconPlayerRecord.mjs';\nexport { default as IconPlayerSkipBack } from './icons/IconPlayerSkipBack.mjs';\nexport { default as IconPlayerSkipForward } from './icons/IconPlayerSkipForward.mjs';\nexport { default as IconPlayerStop } from './icons/IconPlayerStop.mjs';\nexport { default as IconPlayerTrackNext } from './icons/IconPlayerTrackNext.mjs';\nexport { default as IconPlayerTrackPrev } from './icons/IconPlayerTrackPrev.mjs';\nexport { default as IconPlaylistAdd } from './icons/IconPlaylistAdd.mjs';\nexport { default as IconPlaylistOff } from './icons/IconPlaylistOff.mjs';\nexport { default as IconPlaylistX } from './icons/IconPlaylistX.mjs';\nexport { default as IconPlaylist } from './icons/IconPlaylist.mjs';\nexport { default as IconPlaystationCircle } from './icons/IconPlaystationCircle.mjs';\nexport { default as IconPlaystationSquare } from './icons/IconPlaystationSquare.mjs';\nexport { default as IconPlaystationTriangle } from './icons/IconPlaystationTriangle.mjs';\nexport { default as IconPlaystationX } from './icons/IconPlaystationX.mjs';\nexport { default as IconPlugConnectedX } from './icons/IconPlugConnectedX.mjs';\nexport { default as IconPlugConnected } from './icons/IconPlugConnected.mjs';\nexport { default as IconPlugOff } from './icons/IconPlugOff.mjs';\nexport { default as IconPlugX } from './icons/IconPlugX.mjs';\nexport { default as IconPlug } from './icons/IconPlug.mjs';\nexport { default as IconPlusEqual } from './icons/IconPlusEqual.mjs';\nexport { default as IconPlusMinus } from './icons/IconPlusMinus.mjs';\nexport { default as IconPlus } from './icons/IconPlus.mjs';\nexport { default as IconPng } from './icons/IconPng.mjs';\nexport { default as IconPodiumOff } from './icons/IconPodiumOff.mjs';\nexport { default as IconPodium } from './icons/IconPodium.mjs';\nexport { default as IconPointOff } from './icons/IconPointOff.mjs';\nexport { default as IconPoint } from './icons/IconPoint.mjs';\nexport { default as IconPointerBolt } from './icons/IconPointerBolt.mjs';\nexport { default as IconPointerCancel } from './icons/IconPointerCancel.mjs';\nexport { default as IconPointerCheck } from './icons/IconPointerCheck.mjs';\nexport { default as IconPointerCode } from './icons/IconPointerCode.mjs';\nexport { default as IconPointerCog } from './icons/IconPointerCog.mjs';\nexport { default as IconPointerDollar } from './icons/IconPointerDollar.mjs';\nexport { default as IconPointerDown } from './icons/IconPointerDown.mjs';\nexport { default as IconPointerExclamation } from './icons/IconPointerExclamation.mjs';\nexport { default as IconPointerHeart } from './icons/IconPointerHeart.mjs';\nexport { default as IconPointerMinus } from './icons/IconPointerMinus.mjs';\nexport { default as IconPointerOff } from './icons/IconPointerOff.mjs';\nexport { default as IconPointerPause } from './icons/IconPointerPause.mjs';\nexport { default as IconPointerPin } from './icons/IconPointerPin.mjs';\nexport { default as IconPointerPlus } from './icons/IconPointerPlus.mjs';\nexport { default as IconPointerQuestion } from './icons/IconPointerQuestion.mjs';\nexport { default as IconPointerSearch } from './icons/IconPointerSearch.mjs';\nexport { default as IconPointerShare } from './icons/IconPointerShare.mjs';\nexport { default as IconPointerStar } from './icons/IconPointerStar.mjs';\nexport { default as IconPointerUp } from './icons/IconPointerUp.mjs';\nexport { default as IconPointerX } from './icons/IconPointerX.mjs';\nexport { default as IconPointer } from './icons/IconPointer.mjs';\nexport { default as IconPokeballOff } from './icons/IconPokeballOff.mjs';\nexport { default as IconPokeball } from './icons/IconPokeball.mjs';\nexport { default as IconPokerChip } from './icons/IconPokerChip.mjs';\nexport { default as IconPolaroid } from './icons/IconPolaroid.mjs';\nexport { default as IconPolygonOff } from './icons/IconPolygonOff.mjs';\nexport { default as IconPolygon } from './icons/IconPolygon.mjs';\nexport { default as IconPoo } from './icons/IconPoo.mjs';\nexport { default as IconPoolOff } from './icons/IconPoolOff.mjs';\nexport { default as IconPool } from './icons/IconPool.mjs';\nexport { default as IconPower } from './icons/IconPower.mjs';\nexport { default as IconPray } from './icons/IconPray.mjs';\nexport { default as IconPremiumRights } from './icons/IconPremiumRights.mjs';\nexport { default as IconPrescription } from './icons/IconPrescription.mjs';\nexport { default as IconPresentationAnalytics } from './icons/IconPresentationAnalytics.mjs';\nexport { default as IconPresentationOff } from './icons/IconPresentationOff.mjs';\nexport { default as IconPresentation } from './icons/IconPresentation.mjs';\nexport { default as IconPrinterOff } from './icons/IconPrinterOff.mjs';\nexport { default as IconPrinter } from './icons/IconPrinter.mjs';\nexport { default as IconPrismLight } from './icons/IconPrismLight.mjs';\nexport { default as IconPrismOff } from './icons/IconPrismOff.mjs';\nexport { default as IconPrismPlus } from './icons/IconPrismPlus.mjs';\nexport { default as IconPrism } from './icons/IconPrism.mjs';\nexport { default as IconPrison } from './icons/IconPrison.mjs';\nexport { default as IconProgressAlert } from './icons/IconProgressAlert.mjs';\nexport { default as IconProgressBolt } from './icons/IconProgressBolt.mjs';\nexport { default as IconProgressCheck } from './icons/IconProgressCheck.mjs';\nexport { default as IconProgressDown } from './icons/IconProgressDown.mjs';\nexport { default as IconProgressHelp } from './icons/IconProgressHelp.mjs';\nexport { default as IconProgressX } from './icons/IconProgressX.mjs';\nexport { default as IconProgress } from './icons/IconProgress.mjs';\nexport { default as IconPrompt } from './icons/IconPrompt.mjs';\nexport { default as IconProng } from './icons/IconProng.mjs';\nexport { default as IconPropellerOff } from './icons/IconPropellerOff.mjs';\nexport { default as IconPropeller } from './icons/IconPropeller.mjs';\nexport { default as IconProtocol } from './icons/IconProtocol.mjs';\nexport { default as IconPumpkinScary } from './icons/IconPumpkinScary.mjs';\nexport { default as IconPuzzle2 } from './icons/IconPuzzle2.mjs';\nexport { default as IconPuzzleOff } from './icons/IconPuzzleOff.mjs';\nexport { default as IconPuzzle } from './icons/IconPuzzle.mjs';\nexport { default as IconPyramidOff } from './icons/IconPyramidOff.mjs';\nexport { default as IconPyramidPlus } from './icons/IconPyramidPlus.mjs';\nexport { default as IconPyramid } from './icons/IconPyramid.mjs';\nexport { default as IconQrcodeOff } from './icons/IconQrcodeOff.mjs';\nexport { default as IconQrcode } from './icons/IconQrcode.mjs';\nexport { default as IconQuestionMark } from './icons/IconQuestionMark.mjs';\nexport { default as IconQueuePopIn } from './icons/IconQueuePopIn.mjs';\nexport { default as IconQueuePopOut } from './icons/IconQueuePopOut.mjs';\nexport { default as IconQuoteOff } from './icons/IconQuoteOff.mjs';\nexport { default as IconQuote } from './icons/IconQuote.mjs';\nexport { default as IconQuotes } from './icons/IconQuotes.mjs';\nexport { default as IconRadar2 } from './icons/IconRadar2.mjs';\nexport { default as IconRadarOff } from './icons/IconRadarOff.mjs';\nexport { default as IconRadar } from './icons/IconRadar.mjs';\nexport { default as IconRadioOff } from './icons/IconRadioOff.mjs';\nexport { default as IconRadio } from './icons/IconRadio.mjs';\nexport { default as IconRadioactiveOff } from './icons/IconRadioactiveOff.mjs';\nexport { default as IconRadioactive } from './icons/IconRadioactive.mjs';\nexport { default as IconRadiusBottomLeft } from './icons/IconRadiusBottomLeft.mjs';\nexport { default as IconRadiusBottomRight } from './icons/IconRadiusBottomRight.mjs';\nexport { default as IconRadiusTopLeft } from './icons/IconRadiusTopLeft.mjs';\nexport { default as IconRadiusTopRight } from './icons/IconRadiusTopRight.mjs';\nexport { default as IconRainbowOff } from './icons/IconRainbowOff.mjs';\nexport { default as IconRainbow } from './icons/IconRainbow.mjs';\nexport { default as IconRating12Plus } from './icons/IconRating12Plus.mjs';\nexport { default as IconRating14Plus } from './icons/IconRating14Plus.mjs';\nexport { default as IconRating16Plus } from './icons/IconRating16Plus.mjs';\nexport { default as IconRating18Plus } from './icons/IconRating18Plus.mjs';\nexport { default as IconRating21Plus } from './icons/IconRating21Plus.mjs';\nexport { default as IconRazorElectric } from './icons/IconRazorElectric.mjs';\nexport { default as IconRazor } from './icons/IconRazor.mjs';\nexport { default as IconReceipt2 } from './icons/IconReceipt2.mjs';\nexport { default as IconReceiptBitcoin } from './icons/IconReceiptBitcoin.mjs';\nexport { default as IconReceiptDollar } from './icons/IconReceiptDollar.mjs';\nexport { default as IconReceiptEuro } from './icons/IconReceiptEuro.mjs';\nexport { default as IconReceiptOff } from './icons/IconReceiptOff.mjs';\nexport { default as IconReceiptPound } from './icons/IconReceiptPound.mjs';\nexport { default as IconReceiptRefund } from './icons/IconReceiptRefund.mjs';\nexport { default as IconReceiptRupee } from './icons/IconReceiptRupee.mjs';\nexport { default as IconReceiptTax } from './icons/IconReceiptTax.mjs';\nexport { default as IconReceiptYen } from './icons/IconReceiptYen.mjs';\nexport { default as IconReceiptYuan } from './icons/IconReceiptYuan.mjs';\nexport { default as IconReceipt } from './icons/IconReceipt.mjs';\nexport { default as IconRecharging } from './icons/IconRecharging.mjs';\nexport { default as IconRecordMailOff } from './icons/IconRecordMailOff.mjs';\nexport { default as IconRecordMail } from './icons/IconRecordMail.mjs';\nexport { default as IconRectangleRoundedBottom } from './icons/IconRectangleRoundedBottom.mjs';\nexport { default as IconRectangleRoundedTop } from './icons/IconRectangleRoundedTop.mjs';\nexport { default as IconRectangleVertical } from './icons/IconRectangleVertical.mjs';\nexport { default as IconRectangle } from './icons/IconRectangle.mjs';\nexport { default as IconRectangularPrismOff } from './icons/IconRectangularPrismOff.mjs';\nexport { default as IconRectangularPrismPlus } from './icons/IconRectangularPrismPlus.mjs';\nexport { default as IconRectangularPrism } from './icons/IconRectangularPrism.mjs';\nexport { default as IconRecycleOff } from './icons/IconRecycleOff.mjs';\nexport { default as IconRecycle } from './icons/IconRecycle.mjs';\nexport { default as IconRefreshAlert } from './icons/IconRefreshAlert.mjs';\nexport { default as IconRefreshDot } from './icons/IconRefreshDot.mjs';\nexport { default as IconRefreshOff } from './icons/IconRefreshOff.mjs';\nexport { default as IconRefresh } from './icons/IconRefresh.mjs';\nexport { default as IconRegexOff } from './icons/IconRegexOff.mjs';\nexport { default as IconRegex } from './icons/IconRegex.mjs';\nexport { default as IconRegistered } from './icons/IconRegistered.mjs';\nexport { default as IconRelationManyToMany } from './icons/IconRelationManyToMany.mjs';\nexport { default as IconRelationOneToMany } from './icons/IconRelationOneToMany.mjs';\nexport { default as IconRelationOneToOne } from './icons/IconRelationOneToOne.mjs';\nexport { default as IconReload } from './icons/IconReload.mjs';\nexport { default as IconReorder } from './icons/IconReorder.mjs';\nexport { default as IconRepeatOff } from './icons/IconRepeatOff.mjs';\nexport { default as IconRepeatOnce } from './icons/IconRepeatOnce.mjs';\nexport { default as IconRepeat } from './icons/IconRepeat.mjs';\nexport { default as IconReplaceOff } from './icons/IconReplaceOff.mjs';\nexport { default as IconReplaceUser } from './icons/IconReplaceUser.mjs';\nexport { default as IconReplace } from './icons/IconReplace.mjs';\nexport { default as IconReportAnalytics } from './icons/IconReportAnalytics.mjs';\nexport { default as IconReportMedical } from './icons/IconReportMedical.mjs';\nexport { default as IconReportMoney } from './icons/IconReportMoney.mjs';\nexport { default as IconReportOff } from './icons/IconReportOff.mjs';\nexport { default as IconReportSearch } from './icons/IconReportSearch.mjs';\nexport { default as IconReport } from './icons/IconReport.mjs';\nexport { default as IconReservedLine } from './icons/IconReservedLine.mjs';\nexport { default as IconResize } from './icons/IconResize.mjs';\nexport { default as IconRestore } from './icons/IconRestore.mjs';\nexport { default as IconRewindBackward10 } from './icons/IconRewindBackward10.mjs';\nexport { default as IconRewindBackward15 } from './icons/IconRewindBackward15.mjs';\nexport { default as IconRewindBackward20 } from './icons/IconRewindBackward20.mjs';\nexport { default as IconRewindBackward30 } from './icons/IconRewindBackward30.mjs';\nexport { default as IconRewindBackward40 } from './icons/IconRewindBackward40.mjs';\nexport { default as IconRewindBackward5 } from './icons/IconRewindBackward5.mjs';\nexport { default as IconRewindBackward50 } from './icons/IconRewindBackward50.mjs';\nexport { default as IconRewindBackward60 } from './icons/IconRewindBackward60.mjs';\nexport { default as IconRewindForward10 } from './icons/IconRewindForward10.mjs';\nexport { default as IconRewindForward15 } from './icons/IconRewindForward15.mjs';\nexport { default as IconRewindForward20 } from './icons/IconRewindForward20.mjs';\nexport { default as IconRewindForward30 } from './icons/IconRewindForward30.mjs';\nexport { default as IconRewindForward40 } from './icons/IconRewindForward40.mjs';\nexport { default as IconRewindForward5 } from './icons/IconRewindForward5.mjs';\nexport { default as IconRewindForward50 } from './icons/IconRewindForward50.mjs';\nexport { default as IconRewindForward60 } from './icons/IconRewindForward60.mjs';\nexport { default as IconRibbonHealth } from './icons/IconRibbonHealth.mjs';\nexport { default as IconRings } from './icons/IconRings.mjs';\nexport { default as IconRippleDown } from './icons/IconRippleDown.mjs';\nexport { default as IconRippleOff } from './icons/IconRippleOff.mjs';\nexport { default as IconRippleUp } from './icons/IconRippleUp.mjs';\nexport { default as IconRipple } from './icons/IconRipple.mjs';\nexport { default as IconRoadOff } from './icons/IconRoadOff.mjs';\nexport { default as IconRoadSign } from './icons/IconRoadSign.mjs';\nexport { default as IconRoad } from './icons/IconRoad.mjs';\nexport { default as IconRobotFace } from './icons/IconRobotFace.mjs';\nexport { default as IconRobotOff } from './icons/IconRobotOff.mjs';\nexport { default as IconRobot } from './icons/IconRobot.mjs';\nexport { default as IconRocketOff } from './icons/IconRocketOff.mjs';\nexport { default as IconRocket } from './icons/IconRocket.mjs';\nexport { default as IconRollerSkating } from './icons/IconRollerSkating.mjs';\nexport { default as IconRollercoasterOff } from './icons/IconRollercoasterOff.mjs';\nexport { default as IconRollercoaster } from './icons/IconRollercoaster.mjs';\nexport { default as IconRosetteAsterisk } from './icons/IconRosetteAsterisk.mjs';\nexport { default as IconRosetteDiscountCheckOff } from './icons/IconRosetteDiscountCheckOff.mjs';\nexport { default as IconRosetteNumber0 } from './icons/IconRosetteNumber0.mjs';\nexport { default as IconRosetteNumber1 } from './icons/IconRosetteNumber1.mjs';\nexport { default as IconRosetteNumber2 } from './icons/IconRosetteNumber2.mjs';\nexport { default as IconRosetteNumber3 } from './icons/IconRosetteNumber3.mjs';\nexport { default as IconRosetteNumber4 } from './icons/IconRosetteNumber4.mjs';\nexport { default as IconRosetteNumber5 } from './icons/IconRosetteNumber5.mjs';\nexport { default as IconRosetteNumber6 } from './icons/IconRosetteNumber6.mjs';\nexport { default as IconRosetteNumber7 } from './icons/IconRosetteNumber7.mjs';\nexport { default as IconRosetteNumber8 } from './icons/IconRosetteNumber8.mjs';\nexport { default as IconRosetteNumber9 } from './icons/IconRosetteNumber9.mjs';\nexport { default as IconRosette } from './icons/IconRosette.mjs';\nexport { default as IconRotate2 } from './icons/IconRotate2.mjs';\nexport { default as IconRotate360 } from './icons/IconRotate360.mjs';\nexport { default as IconRotateClockwise2 } from './icons/IconRotateClockwise2.mjs';\nexport { default as IconRotateClockwise } from './icons/IconRotateClockwise.mjs';\nexport { default as IconRotateDot } from './icons/IconRotateDot.mjs';\nexport { default as IconRotateRectangle } from './icons/IconRotateRectangle.mjs';\nexport { default as IconRotate } from './icons/IconRotate.mjs';\nexport { default as IconRoute2 } from './icons/IconRoute2.mjs';\nexport { default as IconRouteAltLeft } from './icons/IconRouteAltLeft.mjs';\nexport { default as IconRouteAltRight } from './icons/IconRouteAltRight.mjs';\nexport { default as IconRouteOff } from './icons/IconRouteOff.mjs';\nexport { default as IconRouteScan } from './icons/IconRouteScan.mjs';\nexport { default as IconRouteSquare2 } from './icons/IconRouteSquare2.mjs';\nexport { default as IconRouteSquare } from './icons/IconRouteSquare.mjs';\nexport { default as IconRouteX2 } from './icons/IconRouteX2.mjs';\nexport { default as IconRouteX } from './icons/IconRouteX.mjs';\nexport { default as IconRoute } from './icons/IconRoute.mjs';\nexport { default as IconRouterOff } from './icons/IconRouterOff.mjs';\nexport { default as IconRouter } from './icons/IconRouter.mjs';\nexport { default as IconRowInsertBottom } from './icons/IconRowInsertBottom.mjs';\nexport { default as IconRowInsertTop } from './icons/IconRowInsertTop.mjs';\nexport { default as IconRowRemove } from './icons/IconRowRemove.mjs';\nexport { default as IconRss } from './icons/IconRss.mjs';\nexport { default as IconRubberStampOff } from './icons/IconRubberStampOff.mjs';\nexport { default as IconRubberStamp } from './icons/IconRubberStamp.mjs';\nexport { default as IconRuler2Off } from './icons/IconRuler2Off.mjs';\nexport { default as IconRuler2 } from './icons/IconRuler2.mjs';\nexport { default as IconRuler3 } from './icons/IconRuler3.mjs';\nexport { default as IconRulerMeasure2 } from './icons/IconRulerMeasure2.mjs';\nexport { default as IconRulerMeasure } from './icons/IconRulerMeasure.mjs';\nexport { default as IconRulerOff } from './icons/IconRulerOff.mjs';\nexport { default as IconRuler } from './icons/IconRuler.mjs';\nexport { default as IconRun } from './icons/IconRun.mjs';\nexport { default as IconRvTruck } from './icons/IconRvTruck.mjs';\nexport { default as IconSTurnDown } from './icons/IconSTurnDown.mjs';\nexport { default as IconSTurnLeft } from './icons/IconSTurnLeft.mjs';\nexport { default as IconSTurnRight } from './icons/IconSTurnRight.mjs';\nexport { default as IconSTurnUp } from './icons/IconSTurnUp.mjs';\nexport { default as IconSailboat2 } from './icons/IconSailboat2.mjs';\nexport { default as IconSailboatOff } from './icons/IconSailboatOff.mjs';\nexport { default as IconSailboat } from './icons/IconSailboat.mjs';\nexport { default as IconSalad } from './icons/IconSalad.mjs';\nexport { default as IconSalt } from './icons/IconSalt.mjs';\nexport { default as IconSandbox } from './icons/IconSandbox.mjs';\nexport { default as IconSatelliteOff } from './icons/IconSatelliteOff.mjs';\nexport { default as IconSatellite } from './icons/IconSatellite.mjs';\nexport { default as IconSausage } from './icons/IconSausage.mjs';\nexport { default as IconScaleOff } from './icons/IconScaleOff.mjs';\nexport { default as IconScaleOutlineOff } from './icons/IconScaleOutlineOff.mjs';\nexport { default as IconScaleOutline } from './icons/IconScaleOutline.mjs';\nexport { default as IconScale } from './icons/IconScale.mjs';\nexport { default as IconScanEye } from './icons/IconScanEye.mjs';\nexport { default as IconScanPosition } from './icons/IconScanPosition.mjs';\nexport { default as IconScanTraces } from './icons/IconScanTraces.mjs';\nexport { default as IconScan } from './icons/IconScan.mjs';\nexport { default as IconSchemaOff } from './icons/IconSchemaOff.mjs';\nexport { default as IconSchema } from './icons/IconSchema.mjs';\nexport { default as IconSchoolBell } from './icons/IconSchoolBell.mjs';\nexport { default as IconSchoolOff } from './icons/IconSchoolOff.mjs';\nexport { default as IconSchool } from './icons/IconSchool.mjs';\nexport { default as IconScissorsOff } from './icons/IconScissorsOff.mjs';\nexport { default as IconScissors } from './icons/IconScissors.mjs';\nexport { default as IconScooterElectric } from './icons/IconScooterElectric.mjs';\nexport { default as IconScooter } from './icons/IconScooter.mjs';\nexport { default as IconScoreboard } from './icons/IconScoreboard.mjs';\nexport { default as IconScreenShareOff } from './icons/IconScreenShareOff.mjs';\nexport { default as IconScreenShare } from './icons/IconScreenShare.mjs';\nexport { default as IconScreenshot } from './icons/IconScreenshot.mjs';\nexport { default as IconScribbleOff } from './icons/IconScribbleOff.mjs';\nexport { default as IconScribble } from './icons/IconScribble.mjs';\nexport { default as IconScriptMinus } from './icons/IconScriptMinus.mjs';\nexport { default as IconScriptPlus } from './icons/IconScriptPlus.mjs';\nexport { default as IconScriptX } from './icons/IconScriptX.mjs';\nexport { default as IconScript } from './icons/IconScript.mjs';\nexport { default as IconScubaDivingTank } from './icons/IconScubaDivingTank.mjs';\nexport { default as IconScubaDiving } from './icons/IconScubaDiving.mjs';\nexport { default as IconScubaMaskOff } from './icons/IconScubaMaskOff.mjs';\nexport { default as IconScubaMask } from './icons/IconScubaMask.mjs';\nexport { default as IconSdk } from './icons/IconSdk.mjs';\nexport { default as IconSearchOff } from './icons/IconSearchOff.mjs';\nexport { default as IconSearch } from './icons/IconSearch.mjs';\nexport { default as IconSectionSign } from './icons/IconSectionSign.mjs';\nexport { default as IconSection } from './icons/IconSection.mjs';\nexport { default as IconSelectAll } from './icons/IconSelectAll.mjs';\nexport { default as IconSelect } from './icons/IconSelect.mjs';\nexport { default as IconSelector } from './icons/IconSelector.mjs';\nexport { default as IconSend2 } from './icons/IconSend2.mjs';\nexport { default as IconSendOff } from './icons/IconSendOff.mjs';\nexport { default as IconSend } from './icons/IconSend.mjs';\nexport { default as IconSeo } from './icons/IconSeo.mjs';\nexport { default as IconSeparatorHorizontal } from './icons/IconSeparatorHorizontal.mjs';\nexport { default as IconSeparatorVertical } from './icons/IconSeparatorVertical.mjs';\nexport { default as IconSeparator } from './icons/IconSeparator.mjs';\nexport { default as IconServer2 } from './icons/IconServer2.mjs';\nexport { default as IconServerBolt } from './icons/IconServerBolt.mjs';\nexport { default as IconServerCog } from './icons/IconServerCog.mjs';\nexport { default as IconServerOff } from './icons/IconServerOff.mjs';\nexport { default as IconServerSpark } from './icons/IconServerSpark.mjs';\nexport { default as IconServer } from './icons/IconServer.mjs';\nexport { default as IconServerless } from './icons/IconServerless.mjs';\nexport { default as IconServicemark } from './icons/IconServicemark.mjs';\nexport { default as IconSettings2 } from './icons/IconSettings2.mjs';\nexport { default as IconSettingsAi } from './icons/IconSettingsAi.mjs';\nexport { default as IconSettingsAutomation } from './icons/IconSettingsAutomation.mjs';\nexport { default as IconSettingsBolt } from './icons/IconSettingsBolt.mjs';\nexport { default as IconSettingsCancel } from './icons/IconSettingsCancel.mjs';\nexport { default as IconSettingsCheck } from './icons/IconSettingsCheck.mjs';\nexport { default as IconSettingsCode } from './icons/IconSettingsCode.mjs';\nexport { default as IconSettingsCog } from './icons/IconSettingsCog.mjs';\nexport { default as IconSettingsDollar } from './icons/IconSettingsDollar.mjs';\nexport { default as IconSettingsDown } from './icons/IconSettingsDown.mjs';\nexport { default as IconSettingsExclamation } from './icons/IconSettingsExclamation.mjs';\nexport { default as IconSettingsHeart } from './icons/IconSettingsHeart.mjs';\nexport { default as IconSettingsMinus } from './icons/IconSettingsMinus.mjs';\nexport { default as IconSettingsOff } from './icons/IconSettingsOff.mjs';\nexport { default as IconSettingsPause } from './icons/IconSettingsPause.mjs';\nexport { default as IconSettingsPin } from './icons/IconSettingsPin.mjs';\nexport { default as IconSettingsPlus } from './icons/IconSettingsPlus.mjs';\nexport { default as IconSettingsQuestion } from './icons/IconSettingsQuestion.mjs';\nexport { default as IconSettingsSearch } from './icons/IconSettingsSearch.mjs';\nexport { default as IconSettingsShare } from './icons/IconSettingsShare.mjs';\nexport { default as IconSettingsSpark } from './icons/IconSettingsSpark.mjs';\nexport { default as IconSettingsStar } from './icons/IconSettingsStar.mjs';\nexport { default as IconSettingsUp } from './icons/IconSettingsUp.mjs';\nexport { default as IconSettingsX } from './icons/IconSettingsX.mjs';\nexport { default as IconSettings } from './icons/IconSettings.mjs';\nexport { default as IconShadowOff } from './icons/IconShadowOff.mjs';\nexport { default as IconShadow } from './icons/IconShadow.mjs';\nexport { default as IconShape2 } from './icons/IconShape2.mjs';\nexport { default as IconShape3 } from './icons/IconShape3.mjs';\nexport { default as IconShapeOff } from './icons/IconShapeOff.mjs';\nexport { default as IconShape } from './icons/IconShape.mjs';\nexport { default as IconShare2 } from './icons/IconShare2.mjs';\nexport { default as IconShare3 } from './icons/IconShare3.mjs';\nexport { default as IconShareOff } from './icons/IconShareOff.mjs';\nexport { default as IconShare } from './icons/IconShare.mjs';\nexport { default as IconShareplay } from './icons/IconShareplay.mjs';\nexport { default as IconShieldBolt } from './icons/IconShieldBolt.mjs';\nexport { default as IconShieldCancel } from './icons/IconShieldCancel.mjs';\nexport { default as IconShieldCheck } from './icons/IconShieldCheck.mjs';\nexport { default as IconShieldCheckered } from './icons/IconShieldCheckered.mjs';\nexport { default as IconShieldChevron } from './icons/IconShieldChevron.mjs';\nexport { default as IconShieldCode } from './icons/IconShieldCode.mjs';\nexport { default as IconShieldCog } from './icons/IconShieldCog.mjs';\nexport { default as IconShieldDollar } from './icons/IconShieldDollar.mjs';\nexport { default as IconShieldDown } from './icons/IconShieldDown.mjs';\nexport { default as IconShieldExclamation } from './icons/IconShieldExclamation.mjs';\nexport { default as IconShieldHalf } from './icons/IconShieldHalf.mjs';\nexport { default as IconShieldHeart } from './icons/IconShieldHeart.mjs';\nexport { default as IconShieldLock } from './icons/IconShieldLock.mjs';\nexport { default as IconShieldMinus } from './icons/IconShieldMinus.mjs';\nexport { default as IconShieldOff } from './icons/IconShieldOff.mjs';\nexport { default as IconShieldPause } from './icons/IconShieldPause.mjs';\nexport { default as IconShieldPin } from './icons/IconShieldPin.mjs';\nexport { default as IconShieldPlus } from './icons/IconShieldPlus.mjs';\nexport { default as IconShieldQuestion } from './icons/IconShieldQuestion.mjs';\nexport { default as IconShieldSearch } from './icons/IconShieldSearch.mjs';\nexport { default as IconShieldShare } from './icons/IconShieldShare.mjs';\nexport { default as IconShieldStar } from './icons/IconShieldStar.mjs';\nexport { default as IconShieldUp } from './icons/IconShieldUp.mjs';\nexport { default as IconShieldX } from './icons/IconShieldX.mjs';\nexport { default as IconShield } from './icons/IconShield.mjs';\nexport { default as IconShipOff } from './icons/IconShipOff.mjs';\nexport { default as IconShip } from './icons/IconShip.mjs';\nexport { default as IconShirtOff } from './icons/IconShirtOff.mjs';\nexport { default as IconShirtSport } from './icons/IconShirtSport.mjs';\nexport { default as IconShirt } from './icons/IconShirt.mjs';\nexport { default as IconShoeOff } from './icons/IconShoeOff.mjs';\nexport { default as IconShoe } from './icons/IconShoe.mjs';\nexport { default as IconShoppingBagCheck } from './icons/IconShoppingBagCheck.mjs';\nexport { default as IconShoppingBagDiscount } from './icons/IconShoppingBagDiscount.mjs';\nexport { default as IconShoppingBagEdit } from './icons/IconShoppingBagEdit.mjs';\nexport { default as IconShoppingBagExclamation } from './icons/IconShoppingBagExclamation.mjs';\nexport { default as IconShoppingBagHeart } from './icons/IconShoppingBagHeart.mjs';\nexport { default as IconShoppingBagMinus } from './icons/IconShoppingBagMinus.mjs';\nexport { default as IconShoppingBagPlus } from './icons/IconShoppingBagPlus.mjs';\nexport { default as IconShoppingBagSearch } from './icons/IconShoppingBagSearch.mjs';\nexport { default as IconShoppingBagX } from './icons/IconShoppingBagX.mjs';\nexport { default as IconShoppingBag } from './icons/IconShoppingBag.mjs';\nexport { default as IconShoppingCartBolt } from './icons/IconShoppingCartBolt.mjs';\nexport { default as IconShoppingCartCancel } from './icons/IconShoppingCartCancel.mjs';\nexport { default as IconShoppingCartCheck } from './icons/IconShoppingCartCheck.mjs';\nexport { default as IconShoppingCartCode } from './icons/IconShoppingCartCode.mjs';\nexport { default as IconShoppingCartCog } from './icons/IconShoppingCartCog.mjs';\nexport { default as IconShoppingCartCopy } from './icons/IconShoppingCartCopy.mjs';\nexport { default as IconShoppingCartDiscount } from './icons/IconShoppingCartDiscount.mjs';\nexport { default as IconShoppingCartDollar } from './icons/IconShoppingCartDollar.mjs';\nexport { default as IconShoppingCartDown } from './icons/IconShoppingCartDown.mjs';\nexport { default as IconShoppingCartExclamation } from './icons/IconShoppingCartExclamation.mjs';\nexport { default as IconShoppingCartHeart } from './icons/IconShoppingCartHeart.mjs';\nexport { default as IconShoppingCartMinus } from './icons/IconShoppingCartMinus.mjs';\nexport { default as IconShoppingCartOff } from './icons/IconShoppingCartOff.mjs';\nexport { default as IconShoppingCartPause } from './icons/IconShoppingCartPause.mjs';\nexport { default as IconShoppingCartPin } from './icons/IconShoppingCartPin.mjs';\nexport { default as IconShoppingCartPlus } from './icons/IconShoppingCartPlus.mjs';\nexport { default as IconShoppingCartQuestion } from './icons/IconShoppingCartQuestion.mjs';\nexport { default as IconShoppingCartSearch } from './icons/IconShoppingCartSearch.mjs';\nexport { default as IconShoppingCartShare } from './icons/IconShoppingCartShare.mjs';\nexport { default as IconShoppingCartStar } from './icons/IconShoppingCartStar.mjs';\nexport { default as IconShoppingCartUp } from './icons/IconShoppingCartUp.mjs';\nexport { default as IconShoppingCartX } from './icons/IconShoppingCartX.mjs';\nexport { default as IconShoppingCart } from './icons/IconShoppingCart.mjs';\nexport { default as IconShovelPitchforks } from './icons/IconShovelPitchforks.mjs';\nexport { default as IconShovel } from './icons/IconShovel.mjs';\nexport { default as IconShredder } from './icons/IconShredder.mjs';\nexport { default as IconSignLeft } from './icons/IconSignLeft.mjs';\nexport { default as IconSignRight } from './icons/IconSignRight.mjs';\nexport { default as IconSignal2g } from './icons/IconSignal2g.mjs';\nexport { default as IconSignal3g } from './icons/IconSignal3g.mjs';\nexport { default as IconSignal4gPlus } from './icons/IconSignal4gPlus.mjs';\nexport { default as IconSignal4g } from './icons/IconSignal4g.mjs';\nexport { default as IconSignal5g } from './icons/IconSignal5g.mjs';\nexport { default as IconSignal6g } from './icons/IconSignal6g.mjs';\nexport { default as IconSignalE } from './icons/IconSignalE.mjs';\nexport { default as IconSignalG } from './icons/IconSignalG.mjs';\nexport { default as IconSignalHPlus } from './icons/IconSignalHPlus.mjs';\nexport { default as IconSignalH } from './icons/IconSignalH.mjs';\nexport { default as IconSignalLte } from './icons/IconSignalLte.mjs';\nexport { default as IconSignatureOff } from './icons/IconSignatureOff.mjs';\nexport { default as IconSignature } from './icons/IconSignature.mjs';\nexport { default as IconSitemapOff } from './icons/IconSitemapOff.mjs';\nexport { default as IconSitemap } from './icons/IconSitemap.mjs';\nexport { default as IconSkateboardOff } from './icons/IconSkateboardOff.mjs';\nexport { default as IconSkateboard } from './icons/IconSkateboard.mjs';\nexport { default as IconSkateboarding } from './icons/IconSkateboarding.mjs';\nexport { default as IconSkewX } from './icons/IconSkewX.mjs';\nexport { default as IconSkewY } from './icons/IconSkewY.mjs';\nexport { default as IconSkull } from './icons/IconSkull.mjs';\nexport { default as IconSlash } from './icons/IconSlash.mjs';\nexport { default as IconSlashes } from './icons/IconSlashes.mjs';\nexport { default as IconSleigh } from './icons/IconSleigh.mjs';\nexport { default as IconSlice } from './icons/IconSlice.mjs';\nexport { default as IconSlideshow } from './icons/IconSlideshow.mjs';\nexport { default as IconSmartHomeOff } from './icons/IconSmartHomeOff.mjs';\nexport { default as IconSmartHome } from './icons/IconSmartHome.mjs';\nexport { default as IconSmokingNo } from './icons/IconSmokingNo.mjs';\nexport { default as IconSmoking } from './icons/IconSmoking.mjs';\nexport { default as IconSnowboarding } from './icons/IconSnowboarding.mjs';\nexport { default as IconSnowflakeOff } from './icons/IconSnowflakeOff.mjs';\nexport { default as IconSnowflake } from './icons/IconSnowflake.mjs';\nexport { default as IconSnowman } from './icons/IconSnowman.mjs';\nexport { default as IconSoccerField } from './icons/IconSoccerField.mjs';\nexport { default as IconSocialOff } from './icons/IconSocialOff.mjs';\nexport { default as IconSocial } from './icons/IconSocial.mjs';\nexport { default as IconSock } from './icons/IconSock.mjs';\nexport { default as IconSofaOff } from './icons/IconSofaOff.mjs';\nexport { default as IconSofa } from './icons/IconSofa.mjs';\nexport { default as IconSolarElectricity } from './icons/IconSolarElectricity.mjs';\nexport { default as IconSolarPanel2 } from './icons/IconSolarPanel2.mjs';\nexport { default as IconSolarPanel } from './icons/IconSolarPanel.mjs';\nexport { default as IconSort09 } from './icons/IconSort09.mjs';\nexport { default as IconSort90 } from './icons/IconSort90.mjs';\nexport { default as IconSortAZ } from './icons/IconSortAZ.mjs';\nexport { default as IconSortAscending2 } from './icons/IconSortAscending2.mjs';\nexport { default as IconSortAscendingLetters } from './icons/IconSortAscendingLetters.mjs';\nexport { default as IconSortAscendingNumbers } from './icons/IconSortAscendingNumbers.mjs';\nexport { default as IconSortAscendingShapes } from './icons/IconSortAscendingShapes.mjs';\nexport { default as IconSortAscendingSmallBig } from './icons/IconSortAscendingSmallBig.mjs';\nexport { default as IconSortAscending } from './icons/IconSortAscending.mjs';\nexport { default as IconSortDescending2 } from './icons/IconSortDescending2.mjs';\nexport { default as IconSortDescendingLetters } from './icons/IconSortDescendingLetters.mjs';\nexport { default as IconSortDescendingNumbers } from './icons/IconSortDescendingNumbers.mjs';\nexport { default as IconSortDescendingShapes } from './icons/IconSortDescendingShapes.mjs';\nexport { default as IconSortDescending } from './icons/IconSortDescending.mjs';\nexport { default as IconSortZA } from './icons/IconSortZA.mjs';\nexport { default as IconSos } from './icons/IconSos.mjs';\nexport { default as IconSoupOff } from './icons/IconSoupOff.mjs';\nexport { default as IconSoup } from './icons/IconSoup.mjs';\nexport { default as IconSourceCode } from './icons/IconSourceCode.mjs';\nexport { default as IconSpaceOff } from './icons/IconSpaceOff.mjs';\nexport { default as IconSpace } from './icons/IconSpace.mjs';\nexport { default as IconSpaces } from './icons/IconSpaces.mjs';\nexport { default as IconSpacingHorizontal } from './icons/IconSpacingHorizontal.mjs';\nexport { default as IconSpacingVertical } from './icons/IconSpacingVertical.mjs';\nexport { default as IconSpade } from './icons/IconSpade.mjs';\nexport { default as IconSparkles2 } from './icons/IconSparkles2.mjs';\nexport { default as IconSparkles } from './icons/IconSparkles.mjs';\nexport { default as IconSpeakerphone } from './icons/IconSpeakerphone.mjs';\nexport { default as IconSpeedboat } from './icons/IconSpeedboat.mjs';\nexport { default as IconSphereOff } from './icons/IconSphereOff.mjs';\nexport { default as IconSpherePlus } from './icons/IconSpherePlus.mjs';\nexport { default as IconSphere } from './icons/IconSphere.mjs';\nexport { default as IconSpider } from './icons/IconSpider.mjs';\nexport { default as IconSpiralOff } from './icons/IconSpiralOff.mjs';\nexport { default as IconSpiral } from './icons/IconSpiral.mjs';\nexport { default as IconSportBillard } from './icons/IconSportBillard.mjs';\nexport { default as IconSpray } from './icons/IconSpray.mjs';\nexport { default as IconSpyOff } from './icons/IconSpyOff.mjs';\nexport { default as IconSpy } from './icons/IconSpy.mjs';\nexport { default as IconSql } from './icons/IconSql.mjs';\nexport { default as IconSquareArrowDown } from './icons/IconSquareArrowDown.mjs';\nexport { default as IconSquareArrowLeft } from './icons/IconSquareArrowLeft.mjs';\nexport { default as IconSquareArrowRight } from './icons/IconSquareArrowRight.mjs';\nexport { default as IconSquareArrowUp } from './icons/IconSquareArrowUp.mjs';\nexport { default as IconSquareAsterisk } from './icons/IconSquareAsterisk.mjs';\nexport { default as IconSquareCheck } from './icons/IconSquareCheck.mjs';\nexport { default as IconSquareChevronDown } from './icons/IconSquareChevronDown.mjs';\nexport { default as IconSquareChevronLeft } from './icons/IconSquareChevronLeft.mjs';\nexport { default as IconSquareChevronRight } from './icons/IconSquareChevronRight.mjs';\nexport { default as IconSquareChevronUp } from './icons/IconSquareChevronUp.mjs';\nexport { default as IconSquareChevronsDown } from './icons/IconSquareChevronsDown.mjs';\nexport { default as IconSquareChevronsLeft } from './icons/IconSquareChevronsLeft.mjs';\nexport { default as IconSquareChevronsRight } from './icons/IconSquareChevronsRight.mjs';\nexport { default as IconSquareChevronsUp } from './icons/IconSquareChevronsUp.mjs';\nexport { default as IconSquareDashed } from './icons/IconSquareDashed.mjs';\nexport { default as IconSquareDot } from './icons/IconSquareDot.mjs';\nexport { default as IconSquareF0 } from './icons/IconSquareF0.mjs';\nexport { default as IconSquareF1 } from './icons/IconSquareF1.mjs';\nexport { default as IconSquareF2 } from './icons/IconSquareF2.mjs';\nexport { default as IconSquareF3 } from './icons/IconSquareF3.mjs';\nexport { default as IconSquareF4 } from './icons/IconSquareF4.mjs';\nexport { default as IconSquareF5 } from './icons/IconSquareF5.mjs';\nexport { default as IconSquareF6 } from './icons/IconSquareF6.mjs';\nexport { default as IconSquareF7 } from './icons/IconSquareF7.mjs';\nexport { default as IconSquareF8 } from './icons/IconSquareF8.mjs';\nexport { default as IconSquareF9 } from './icons/IconSquareF9.mjs';\nexport { default as IconSquareForbid2 } from './icons/IconSquareForbid2.mjs';\nexport { default as IconSquareForbid } from './icons/IconSquareForbid.mjs';\nexport { default as IconSquareHalf } from './icons/IconSquareHalf.mjs';\nexport { default as IconSquareKey } from './icons/IconSquareKey.mjs';\nexport { default as IconSquareLetterA } from './icons/IconSquareLetterA.mjs';\nexport { default as IconSquareLetterB } from './icons/IconSquareLetterB.mjs';\nexport { default as IconSquareLetterC } from './icons/IconSquareLetterC.mjs';\nexport { default as IconSquareLetterD } from './icons/IconSquareLetterD.mjs';\nexport { default as IconSquareLetterE } from './icons/IconSquareLetterE.mjs';\nexport { default as IconSquareLetterF } from './icons/IconSquareLetterF.mjs';\nexport { default as IconSquareLetterG } from './icons/IconSquareLetterG.mjs';\nexport { default as IconSquareLetterH } from './icons/IconSquareLetterH.mjs';\nexport { default as IconSquareLetterI } from './icons/IconSquareLetterI.mjs';\nexport { default as IconSquareLetterJ } from './icons/IconSquareLetterJ.mjs';\nexport { default as IconSquareLetterK } from './icons/IconSquareLetterK.mjs';\nexport { default as IconSquareLetterL } from './icons/IconSquareLetterL.mjs';\nexport { default as IconSquareLetterM } from './icons/IconSquareLetterM.mjs';\nexport { default as IconSquareLetterN } from './icons/IconSquareLetterN.mjs';\nexport { default as IconSquareLetterO } from './icons/IconSquareLetterO.mjs';\nexport { default as IconSquareLetterP } from './icons/IconSquareLetterP.mjs';\nexport { default as IconSquareLetterQ } from './icons/IconSquareLetterQ.mjs';\nexport { default as IconSquareLetterR } from './icons/IconSquareLetterR.mjs';\nexport { default as IconSquareLetterS } from './icons/IconSquareLetterS.mjs';\nexport { default as IconSquareLetterT } from './icons/IconSquareLetterT.mjs';\nexport { default as IconSquareLetterU } from './icons/IconSquareLetterU.mjs';\nexport { default as IconSquareLetterV } from './icons/IconSquareLetterV.mjs';\nexport { default as IconSquareLetterW } from './icons/IconSquareLetterW.mjs';\nexport { default as IconSquareLetterX } from './icons/IconSquareLetterX.mjs';\nexport { default as IconSquareLetterY } from './icons/IconSquareLetterY.mjs';\nexport { default as IconSquareLetterZ } from './icons/IconSquareLetterZ.mjs';\nexport { default as IconSquareMinus2 } from './icons/IconSquareMinus2.mjs';\nexport { default as IconSquareMinus } from './icons/IconSquareMinus.mjs';\nexport { default as IconSquareOff } from './icons/IconSquareOff.mjs';\nexport { default as IconSquarePercentage } from './icons/IconSquarePercentage.mjs';\nexport { default as IconSquarePlus2 } from './icons/IconSquarePlus2.mjs';\nexport { default as IconSquarePlus } from './icons/IconSquarePlus.mjs';\nexport { default as IconSquareRoot2 } from './icons/IconSquareRoot2.mjs';\nexport { default as IconSquareRoot } from './icons/IconSquareRoot.mjs';\nexport { default as IconSquareRotatedAsterisk } from './icons/IconSquareRotatedAsterisk.mjs';\nexport { default as IconSquareRotatedForbid2 } from './icons/IconSquareRotatedForbid2.mjs';\nexport { default as IconSquareRotatedForbid } from './icons/IconSquareRotatedForbid.mjs';\nexport { default as IconSquareRotatedOff } from './icons/IconSquareRotatedOff.mjs';\nexport { default as IconSquareRotated } from './icons/IconSquareRotated.mjs';\nexport { default as IconSquareRoundedArrowDown } from './icons/IconSquareRoundedArrowDown.mjs';\nexport { default as IconSquareRoundedArrowLeft } from './icons/IconSquareRoundedArrowLeft.mjs';\nexport { default as IconSquareRoundedArrowRight } from './icons/IconSquareRoundedArrowRight.mjs';\nexport { default as IconSquareRoundedArrowUp } from './icons/IconSquareRoundedArrowUp.mjs';\nexport { default as IconSquareRoundedCheck } from './icons/IconSquareRoundedCheck.mjs';\nexport { default as IconSquareRoundedChevronDown } from './icons/IconSquareRoundedChevronDown.mjs';\nexport { default as IconSquareRoundedChevronLeft } from './icons/IconSquareRoundedChevronLeft.mjs';\nexport { default as IconSquareRoundedChevronRight } from './icons/IconSquareRoundedChevronRight.mjs';\nexport { default as IconSquareRoundedChevronUp } from './icons/IconSquareRoundedChevronUp.mjs';\nexport { default as IconSquareRoundedChevronsDown } from './icons/IconSquareRoundedChevronsDown.mjs';\nexport { default as IconSquareRoundedChevronsLeft } from './icons/IconSquareRoundedChevronsLeft.mjs';\nexport { default as IconSquareRoundedChevronsRight } from './icons/IconSquareRoundedChevronsRight.mjs';\nexport { default as IconSquareRoundedChevronsUp } from './icons/IconSquareRoundedChevronsUp.mjs';\nexport { default as IconSquareRoundedLetterA } from './icons/IconSquareRoundedLetterA.mjs';\nexport { default as IconSquareRoundedLetterB } from './icons/IconSquareRoundedLetterB.mjs';\nexport { default as IconSquareRoundedLetterC } from './icons/IconSquareRoundedLetterC.mjs';\nexport { default as IconSquareRoundedLetterD } from './icons/IconSquareRoundedLetterD.mjs';\nexport { default as IconSquareRoundedLetterE } from './icons/IconSquareRoundedLetterE.mjs';\nexport { default as IconSquareRoundedLetterF } from './icons/IconSquareRoundedLetterF.mjs';\nexport { default as IconSquareRoundedLetterG } from './icons/IconSquareRoundedLetterG.mjs';\nexport { default as IconSquareRoundedLetterH } from './icons/IconSquareRoundedLetterH.mjs';\nexport { default as IconSquareRoundedLetterI } from './icons/IconSquareRoundedLetterI.mjs';\nexport { default as IconSquareRoundedLetterJ } from './icons/IconSquareRoundedLetterJ.mjs';\nexport { default as IconSquareRoundedLetterK } from './icons/IconSquareRoundedLetterK.mjs';\nexport { default as IconSquareRoundedLetterL } from './icons/IconSquareRoundedLetterL.mjs';\nexport { default as IconSquareRoundedLetterM } from './icons/IconSquareRoundedLetterM.mjs';\nexport { default as IconSquareRoundedLetterN } from './icons/IconSquareRoundedLetterN.mjs';\nexport { default as IconSquareRoundedLetterO } from './icons/IconSquareRoundedLetterO.mjs';\nexport { default as IconSquareRoundedLetterP } from './icons/IconSquareRoundedLetterP.mjs';\nexport { default as IconSquareRoundedLetterQ } from './icons/IconSquareRoundedLetterQ.mjs';\nexport { default as IconSquareRoundedLetterR } from './icons/IconSquareRoundedLetterR.mjs';\nexport { default as IconSquareRoundedLetterS } from './icons/IconSquareRoundedLetterS.mjs';\nexport { default as IconSquareRoundedLetterT } from './icons/IconSquareRoundedLetterT.mjs';\nexport { default as IconSquareRoundedLetterU } from './icons/IconSquareRoundedLetterU.mjs';\nexport { default as IconSquareRoundedLetterV } from './icons/IconSquareRoundedLetterV.mjs';\nexport { default as IconSquareRoundedLetterW } from './icons/IconSquareRoundedLetterW.mjs';\nexport { default as IconSquareRoundedLetterX } from './icons/IconSquareRoundedLetterX.mjs';\nexport { default as IconSquareRoundedLetterY } from './icons/IconSquareRoundedLetterY.mjs';\nexport { default as IconSquareRoundedLetterZ } from './icons/IconSquareRoundedLetterZ.mjs';\nexport { default as IconSquareRoundedMinus2 } from './icons/IconSquareRoundedMinus2.mjs';\nexport { default as IconSquareRoundedMinus } from './icons/IconSquareRoundedMinus.mjs';\nexport { default as IconSquareRoundedNumber0 } from './icons/IconSquareRoundedNumber0.mjs';\nexport { default as IconSquareRoundedNumber1 } from './icons/IconSquareRoundedNumber1.mjs';\nexport { default as IconSquareRoundedNumber2 } from './icons/IconSquareRoundedNumber2.mjs';\nexport { default as IconSquareRoundedNumber3 } from './icons/IconSquareRoundedNumber3.mjs';\nexport { default as IconSquareRoundedNumber4 } from './icons/IconSquareRoundedNumber4.mjs';\nexport { default as IconSquareRoundedNumber5 } from './icons/IconSquareRoundedNumber5.mjs';\nexport { default as IconSquareRoundedNumber6 } from './icons/IconSquareRoundedNumber6.mjs';\nexport { default as IconSquareRoundedNumber7 } from './icons/IconSquareRoundedNumber7.mjs';\nexport { default as IconSquareRoundedNumber8 } from './icons/IconSquareRoundedNumber8.mjs';\nexport { default as IconSquareRoundedNumber9 } from './icons/IconSquareRoundedNumber9.mjs';\nexport { default as IconSquareRoundedPercentage } from './icons/IconSquareRoundedPercentage.mjs';\nexport { default as IconSquareRoundedPlus2 } from './icons/IconSquareRoundedPlus2.mjs';\nexport { default as IconSquareRoundedPlus } from './icons/IconSquareRoundedPlus.mjs';\nexport { default as IconSquareRoundedX } from './icons/IconSquareRoundedX.mjs';\nexport { default as IconSquareRounded } from './icons/IconSquareRounded.mjs';\nexport { default as IconSquareToggleHorizontal } from './icons/IconSquareToggleHorizontal.mjs';\nexport { default as IconSquareToggle } from './icons/IconSquareToggle.mjs';\nexport { default as IconSquareX } from './icons/IconSquareX.mjs';\nexport { default as IconSquare } from './icons/IconSquare.mjs';\nexport { default as IconSquaresDiagonal } from './icons/IconSquaresDiagonal.mjs';\nexport { default as IconSquaresSelected } from './icons/IconSquaresSelected.mjs';\nexport { default as IconSquares } from './icons/IconSquares.mjs';\nexport { default as IconStack2 } from './icons/IconStack2.mjs';\nexport { default as IconStack3 } from './icons/IconStack3.mjs';\nexport { default as IconStackBack } from './icons/IconStackBack.mjs';\nexport { default as IconStackBackward } from './icons/IconStackBackward.mjs';\nexport { default as IconStackForward } from './icons/IconStackForward.mjs';\nexport { default as IconStackFront } from './icons/IconStackFront.mjs';\nexport { default as IconStackMiddle } from './icons/IconStackMiddle.mjs';\nexport { default as IconStackPop } from './icons/IconStackPop.mjs';\nexport { default as IconStackPush } from './icons/IconStackPush.mjs';\nexport { default as IconStack } from './icons/IconStack.mjs';\nexport { default as IconStairsDown } from './icons/IconStairsDown.mjs';\nexport { default as IconStairsUp } from './icons/IconStairsUp.mjs';\nexport { default as IconStairs } from './icons/IconStairs.mjs';\nexport { default as IconStarHalf } from './icons/IconStarHalf.mjs';\nexport { default as IconStarOff } from './icons/IconStarOff.mjs';\nexport { default as IconStar } from './icons/IconStar.mjs';\nexport { default as IconStarsOff } from './icons/IconStarsOff.mjs';\nexport { default as IconStars } from './icons/IconStars.mjs';\nexport { default as IconStatusChange } from './icons/IconStatusChange.mjs';\nexport { default as IconSteam } from './icons/IconSteam.mjs';\nexport { default as IconSteeringWheelOff } from './icons/IconSteeringWheelOff.mjs';\nexport { default as IconSteeringWheel } from './icons/IconSteeringWheel.mjs';\nexport { default as IconStepInto } from './icons/IconStepInto.mjs';\nexport { default as IconStepOut } from './icons/IconStepOut.mjs';\nexport { default as IconStereoGlasses } from './icons/IconStereoGlasses.mjs';\nexport { default as IconStethoscopeOff } from './icons/IconStethoscopeOff.mjs';\nexport { default as IconStethoscope } from './icons/IconStethoscope.mjs';\nexport { default as IconSticker2 } from './icons/IconSticker2.mjs';\nexport { default as IconSticker } from './icons/IconSticker.mjs';\nexport { default as IconStopwatch } from './icons/IconStopwatch.mjs';\nexport { default as IconStormOff } from './icons/IconStormOff.mjs';\nexport { default as IconStorm } from './icons/IconStorm.mjs';\nexport { default as IconStretching2 } from './icons/IconStretching2.mjs';\nexport { default as IconStretching } from './icons/IconStretching.mjs';\nexport { default as IconStrikethrough } from './icons/IconStrikethrough.mjs';\nexport { default as IconStrokeCurved } from './icons/IconStrokeCurved.mjs';\nexport { default as IconStrokeDynamic } from './icons/IconStrokeDynamic.mjs';\nexport { default as IconStrokeStraight } from './icons/IconStrokeStraight.mjs';\nexport { default as IconSubmarine } from './icons/IconSubmarine.mjs';\nexport { default as IconSubscript } from './icons/IconSubscript.mjs';\nexport { default as IconSubtask } from './icons/IconSubtask.mjs';\nexport { default as IconSubtitlesAi } from './icons/IconSubtitlesAi.mjs';\nexport { default as IconSubtitlesEdit } from './icons/IconSubtitlesEdit.mjs';\nexport { default as IconSubtitlesOff } from './icons/IconSubtitlesOff.mjs';\nexport { default as IconSubtitles } from './icons/IconSubtitles.mjs';\nexport { default as IconSumOff } from './icons/IconSumOff.mjs';\nexport { default as IconSum } from './icons/IconSum.mjs';\nexport { default as IconSunElectricity } from './icons/IconSunElectricity.mjs';\nexport { default as IconSunHigh } from './icons/IconSunHigh.mjs';\nexport { default as IconSunLow } from './icons/IconSunLow.mjs';\nexport { default as IconSunMoon } from './icons/IconSunMoon.mjs';\nexport { default as IconSunOff } from './icons/IconSunOff.mjs';\nexport { default as IconSunWind } from './icons/IconSunWind.mjs';\nexport { default as IconSun } from './icons/IconSun.mjs';\nexport { default as IconSunglasses } from './icons/IconSunglasses.mjs';\nexport { default as IconSunrise } from './icons/IconSunrise.mjs';\nexport { default as IconSunset2 } from './icons/IconSunset2.mjs';\nexport { default as IconSunset } from './icons/IconSunset.mjs';\nexport { default as IconSuperscript } from './icons/IconSuperscript.mjs';\nexport { default as IconSvg } from './icons/IconSvg.mjs';\nexport { default as IconSwimming } from './icons/IconSwimming.mjs';\nexport { default as IconSwipeDown } from './icons/IconSwipeDown.mjs';\nexport { default as IconSwipeLeft } from './icons/IconSwipeLeft.mjs';\nexport { default as IconSwipeRight } from './icons/IconSwipeRight.mjs';\nexport { default as IconSwipeUp } from './icons/IconSwipeUp.mjs';\nexport { default as IconSwipe } from './icons/IconSwipe.mjs';\nexport { default as IconSwitch2 } from './icons/IconSwitch2.mjs';\nexport { default as IconSwitch3 } from './icons/IconSwitch3.mjs';\nexport { default as IconSwitchHorizontal } from './icons/IconSwitchHorizontal.mjs';\nexport { default as IconSwitchVertical } from './icons/IconSwitchVertical.mjs';\nexport { default as IconSwitch } from './icons/IconSwitch.mjs';\nexport { default as IconSwordOff } from './icons/IconSwordOff.mjs';\nexport { default as IconSword } from './icons/IconSword.mjs';\nexport { default as IconSwords } from './icons/IconSwords.mjs';\nexport { default as IconTableAlias } from './icons/IconTableAlias.mjs';\nexport { default as IconTableColumn } from './icons/IconTableColumn.mjs';\nexport { default as IconTableDashed } from './icons/IconTableDashed.mjs';\nexport { default as IconTableDown } from './icons/IconTableDown.mjs';\nexport { default as IconTableExport } from './icons/IconTableExport.mjs';\nexport { default as IconTableHeart } from './icons/IconTableHeart.mjs';\nexport { default as IconTableImport } from './icons/IconTableImport.mjs';\nexport { default as IconTableMinus } from './icons/IconTableMinus.mjs';\nexport { default as IconTableOff } from './icons/IconTableOff.mjs';\nexport { default as IconTableOptions } from './icons/IconTableOptions.mjs';\nexport { default as IconTablePlus } from './icons/IconTablePlus.mjs';\nexport { default as IconTableRow } from './icons/IconTableRow.mjs';\nexport { default as IconTableShare } from './icons/IconTableShare.mjs';\nexport { default as IconTableShortcut } from './icons/IconTableShortcut.mjs';\nexport { default as IconTableSpark } from './icons/IconTableSpark.mjs';\nexport { default as IconTable } from './icons/IconTable.mjs';\nexport { default as IconTagMinus } from './icons/IconTagMinus.mjs';\nexport { default as IconTagOff } from './icons/IconTagOff.mjs';\nexport { default as IconTagPlus } from './icons/IconTagPlus.mjs';\nexport { default as IconTagStarred } from './icons/IconTagStarred.mjs';\nexport { default as IconTag } from './icons/IconTag.mjs';\nexport { default as IconTagsOff } from './icons/IconTagsOff.mjs';\nexport { default as IconTags } from './icons/IconTags.mjs';\nexport { default as IconTallymark1 } from './icons/IconTallymark1.mjs';\nexport { default as IconTallymark2 } from './icons/IconTallymark2.mjs';\nexport { default as IconTallymark3 } from './icons/IconTallymark3.mjs';\nexport { default as IconTallymark4 } from './icons/IconTallymark4.mjs';\nexport { default as IconTallymarks } from './icons/IconTallymarks.mjs';\nexport { default as IconTank } from './icons/IconTank.mjs';\nexport { default as IconTargetArrow } from './icons/IconTargetArrow.mjs';\nexport { default as IconTargetOff } from './icons/IconTargetOff.mjs';\nexport { default as IconTarget } from './icons/IconTarget.mjs';\nexport { default as IconTaxEuro } from './icons/IconTaxEuro.mjs';\nexport { default as IconTaxPound } from './icons/IconTaxPound.mjs';\nexport { default as IconTax } from './icons/IconTax.mjs';\nexport { default as IconTeapot } from './icons/IconTeapot.mjs';\nexport { default as IconTelescopeOff } from './icons/IconTelescopeOff.mjs';\nexport { default as IconTelescope } from './icons/IconTelescope.mjs';\nexport { default as IconTemperatureCelsius } from './icons/IconTemperatureCelsius.mjs';\nexport { default as IconTemperatureFahrenheit } from './icons/IconTemperatureFahrenheit.mjs';\nexport { default as IconTemperatureMinus } from './icons/IconTemperatureMinus.mjs';\nexport { default as IconTemperatureOff } from './icons/IconTemperatureOff.mjs';\nexport { default as IconTemperaturePlus } from './icons/IconTemperaturePlus.mjs';\nexport { default as IconTemperatureSnow } from './icons/IconTemperatureSnow.mjs';\nexport { default as IconTemperatureSun } from './icons/IconTemperatureSun.mjs';\nexport { default as IconTemperature } from './icons/IconTemperature.mjs';\nexport { default as IconTemplateOff } from './icons/IconTemplateOff.mjs';\nexport { default as IconTemplate } from './icons/IconTemplate.mjs';\nexport { default as IconTentOff } from './icons/IconTentOff.mjs';\nexport { default as IconTent } from './icons/IconTent.mjs';\nexport { default as IconTerminal2 } from './icons/IconTerminal2.mjs';\nexport { default as IconTerminal } from './icons/IconTerminal.mjs';\nexport { default as IconTestPipe2 } from './icons/IconTestPipe2.mjs';\nexport { default as IconTestPipeOff } from './icons/IconTestPipeOff.mjs';\nexport { default as IconTestPipe } from './icons/IconTestPipe.mjs';\nexport { default as IconTex } from './icons/IconTex.mjs';\nexport { default as IconTextCaption } from './icons/IconTextCaption.mjs';\nexport { default as IconTextColor } from './icons/IconTextColor.mjs';\nexport { default as IconTextDecrease } from './icons/IconTextDecrease.mjs';\nexport { default as IconTextDirectionLtr } from './icons/IconTextDirectionLtr.mjs';\nexport { default as IconTextDirectionRtl } from './icons/IconTextDirectionRtl.mjs';\nexport { default as IconTextGrammar } from './icons/IconTextGrammar.mjs';\nexport { default as IconTextIncrease } from './icons/IconTextIncrease.mjs';\nexport { default as IconTextOrientation } from './icons/IconTextOrientation.mjs';\nexport { default as IconTextPlus } from './icons/IconTextPlus.mjs';\nexport { default as IconTextRecognition } from './icons/IconTextRecognition.mjs';\nexport { default as IconTextResize } from './icons/IconTextResize.mjs';\nexport { default as IconTextScan2 } from './icons/IconTextScan2.mjs';\nexport { default as IconTextSize } from './icons/IconTextSize.mjs';\nexport { default as IconTextSpellcheck } from './icons/IconTextSpellcheck.mjs';\nexport { default as IconTextWrapColumn } from './icons/IconTextWrapColumn.mjs';\nexport { default as IconTextWrapDisabled } from './icons/IconTextWrapDisabled.mjs';\nexport { default as IconTextWrap } from './icons/IconTextWrap.mjs';\nexport { default as IconTexture } from './icons/IconTexture.mjs';\nexport { default as IconTheater } from './icons/IconTheater.mjs';\nexport { default as IconThermometer } from './icons/IconThermometer.mjs';\nexport { default as IconThumbDownOff } from './icons/IconThumbDownOff.mjs';\nexport { default as IconThumbDown } from './icons/IconThumbDown.mjs';\nexport { default as IconThumbUpOff } from './icons/IconThumbUpOff.mjs';\nexport { default as IconThumbUp } from './icons/IconThumbUp.mjs';\nexport { default as IconTicTac } from './icons/IconTicTac.mjs';\nexport { default as IconTicketOff } from './icons/IconTicketOff.mjs';\nexport { default as IconTicket } from './icons/IconTicket.mjs';\nexport { default as IconTie } from './icons/IconTie.mjs';\nexport { default as IconTilde } from './icons/IconTilde.mjs';\nexport { default as IconTiltShiftOff } from './icons/IconTiltShiftOff.mjs';\nexport { default as IconTiltShift } from './icons/IconTiltShift.mjs';\nexport { default as IconTimeDuration0 } from './icons/IconTimeDuration0.mjs';\nexport { default as IconTimeDuration10 } from './icons/IconTimeDuration10.mjs';\nexport { default as IconTimeDuration15 } from './icons/IconTimeDuration15.mjs';\nexport { default as IconTimeDuration30 } from './icons/IconTimeDuration30.mjs';\nexport { default as IconTimeDuration45 } from './icons/IconTimeDuration45.mjs';\nexport { default as IconTimeDuration5 } from './icons/IconTimeDuration5.mjs';\nexport { default as IconTimeDuration60 } from './icons/IconTimeDuration60.mjs';\nexport { default as IconTimeDuration90 } from './icons/IconTimeDuration90.mjs';\nexport { default as IconTimeDurationOff } from './icons/IconTimeDurationOff.mjs';\nexport { default as IconTimelineEventExclamation } from './icons/IconTimelineEventExclamation.mjs';\nexport { default as IconTimelineEventMinus } from './icons/IconTimelineEventMinus.mjs';\nexport { default as IconTimelineEventPlus } from './icons/IconTimelineEventPlus.mjs';\nexport { default as IconTimelineEventText } from './icons/IconTimelineEventText.mjs';\nexport { default as IconTimelineEventX } from './icons/IconTimelineEventX.mjs';\nexport { default as IconTimelineEvent } from './icons/IconTimelineEvent.mjs';\nexport { default as IconTimeline } from './icons/IconTimeline.mjs';\nexport { default as IconTimezone } from './icons/IconTimezone.mjs';\nexport { default as IconTipJarEuro } from './icons/IconTipJarEuro.mjs';\nexport { default as IconTipJarPound } from './icons/IconTipJarPound.mjs';\nexport { default as IconTipJar } from './icons/IconTipJar.mjs';\nexport { default as IconTir } from './icons/IconTir.mjs';\nexport { default as IconToggleLeft } from './icons/IconToggleLeft.mjs';\nexport { default as IconToggleRight } from './icons/IconToggleRight.mjs';\nexport { default as IconToiletPaperOff } from './icons/IconToiletPaperOff.mjs';\nexport { default as IconToiletPaper } from './icons/IconToiletPaper.mjs';\nexport { default as IconToml } from './icons/IconToml.mjs';\nexport { default as IconTool } from './icons/IconTool.mjs';\nexport { default as IconToolsKitchen2Off } from './icons/IconToolsKitchen2Off.mjs';\nexport { default as IconToolsKitchen2 } from './icons/IconToolsKitchen2.mjs';\nexport { default as IconToolsKitchen3 } from './icons/IconToolsKitchen3.mjs';\nexport { default as IconToolsKitchenOff } from './icons/IconToolsKitchenOff.mjs';\nexport { default as IconToolsKitchen } from './icons/IconToolsKitchen.mjs';\nexport { default as IconToolsOff } from './icons/IconToolsOff.mjs';\nexport { default as IconTools } from './icons/IconTools.mjs';\nexport { default as IconTooltip } from './icons/IconTooltip.mjs';\nexport { default as IconTopologyBus } from './icons/IconTopologyBus.mjs';\nexport { default as IconTopologyComplex } from './icons/IconTopologyComplex.mjs';\nexport { default as IconTopologyFullHierarchy } from './icons/IconTopologyFullHierarchy.mjs';\nexport { default as IconTopologyFull } from './icons/IconTopologyFull.mjs';\nexport { default as IconTopologyRing2 } from './icons/IconTopologyRing2.mjs';\nexport { default as IconTopologyRing3 } from './icons/IconTopologyRing3.mjs';\nexport { default as IconTopologyRing } from './icons/IconTopologyRing.mjs';\nexport { default as IconTopologyStar2 } from './icons/IconTopologyStar2.mjs';\nexport { default as IconTopologyStar3 } from './icons/IconTopologyStar3.mjs';\nexport { default as IconTopologyStarRing2 } from './icons/IconTopologyStarRing2.mjs';\nexport { default as IconTopologyStarRing3 } from './icons/IconTopologyStarRing3.mjs';\nexport { default as IconTopologyStarRing } from './icons/IconTopologyStarRing.mjs';\nexport { default as IconTopologyStar } from './icons/IconTopologyStar.mjs';\nexport { default as IconTorii } from './icons/IconTorii.mjs';\nexport { default as IconTornado } from './icons/IconTornado.mjs';\nexport { default as IconTournament } from './icons/IconTournament.mjs';\nexport { default as IconTowerOff } from './icons/IconTowerOff.mjs';\nexport { default as IconTower } from './icons/IconTower.mjs';\nexport { default as IconTrack } from './icons/IconTrack.mjs';\nexport { default as IconTractor } from './icons/IconTractor.mjs';\nexport { default as IconTrademark } from './icons/IconTrademark.mjs';\nexport { default as IconTrafficConeOff } from './icons/IconTrafficConeOff.mjs';\nexport { default as IconTrafficCone } from './icons/IconTrafficCone.mjs';\nexport { default as IconTrafficLightsOff } from './icons/IconTrafficLightsOff.mjs';\nexport { default as IconTrafficLights } from './icons/IconTrafficLights.mjs';\nexport { default as IconTrain } from './icons/IconTrain.mjs';\nexport { default as IconTransactionBitcoin } from './icons/IconTransactionBitcoin.mjs';\nexport { default as IconTransactionDollar } from './icons/IconTransactionDollar.mjs';\nexport { default as IconTransactionEuro } from './icons/IconTransactionEuro.mjs';\nexport { default as IconTransactionPound } from './icons/IconTransactionPound.mjs';\nexport { default as IconTransactionRupee } from './icons/IconTransactionRupee.mjs';\nexport { default as IconTransactionYen } from './icons/IconTransactionYen.mjs';\nexport { default as IconTransactionYuan } from './icons/IconTransactionYuan.mjs';\nexport { default as IconTransferIn } from './icons/IconTransferIn.mjs';\nexport { default as IconTransferOut } from './icons/IconTransferOut.mjs';\nexport { default as IconTransferVertical } from './icons/IconTransferVertical.mjs';\nexport { default as IconTransfer } from './icons/IconTransfer.mjs';\nexport { default as IconTransformPointBottomLeft } from './icons/IconTransformPointBottomLeft.mjs';\nexport { default as IconTransformPointBottomRight } from './icons/IconTransformPointBottomRight.mjs';\nexport { default as IconTransformPointTopLeft } from './icons/IconTransformPointTopLeft.mjs';\nexport { default as IconTransformPointTopRight } from './icons/IconTransformPointTopRight.mjs';\nexport { default as IconTransformPoint } from './icons/IconTransformPoint.mjs';\nexport { default as IconTransform } from './icons/IconTransform.mjs';\nexport { default as IconTransitionBottom } from './icons/IconTransitionBottom.mjs';\nexport { default as IconTransitionLeft } from './icons/IconTransitionLeft.mjs';\nexport { default as IconTransitionRight } from './icons/IconTransitionRight.mjs';\nexport { default as IconTransitionTop } from './icons/IconTransitionTop.mjs';\nexport { default as IconTrashOff } from './icons/IconTrashOff.mjs';\nexport { default as IconTrashX } from './icons/IconTrashX.mjs';\nexport { default as IconTrash } from './icons/IconTrash.mjs';\nexport { default as IconTreadmill } from './icons/IconTreadmill.mjs';\nexport { default as IconTree } from './icons/IconTree.mjs';\nexport { default as IconTrees } from './icons/IconTrees.mjs';\nexport { default as IconTrekking } from './icons/IconTrekking.mjs';\nexport { default as IconTrendingDown2 } from './icons/IconTrendingDown2.mjs';\nexport { default as IconTrendingDown3 } from './icons/IconTrendingDown3.mjs';\nexport { default as IconTrendingDown } from './icons/IconTrendingDown.mjs';\nexport { default as IconTrendingUp2 } from './icons/IconTrendingUp2.mjs';\nexport { default as IconTrendingUp3 } from './icons/IconTrendingUp3.mjs';\nexport { default as IconTrendingUpDown } from './icons/IconTrendingUpDown.mjs';\nexport { default as IconTrendingUp } from './icons/IconTrendingUp.mjs';\nexport { default as IconTriangleInverted } from './icons/IconTriangleInverted.mjs';\nexport { default as IconTriangleMinus2 } from './icons/IconTriangleMinus2.mjs';\nexport { default as IconTriangleMinus } from './icons/IconTriangleMinus.mjs';\nexport { default as IconTriangleOff } from './icons/IconTriangleOff.mjs';\nexport { default as IconTrianglePlus2 } from './icons/IconTrianglePlus2.mjs';\nexport { default as IconTrianglePlus } from './icons/IconTrianglePlus.mjs';\nexport { default as IconTriangleSquareCircle } from './icons/IconTriangleSquareCircle.mjs';\nexport { default as IconTriangle } from './icons/IconTriangle.mjs';\nexport { default as IconTriangles } from './icons/IconTriangles.mjs';\nexport { default as IconTrident } from './icons/IconTrident.mjs';\nexport { default as IconTrolley } from './icons/IconTrolley.mjs';\nexport { default as IconTrophyOff } from './icons/IconTrophyOff.mjs';\nexport { default as IconTrophy } from './icons/IconTrophy.mjs';\nexport { default as IconTrowel } from './icons/IconTrowel.mjs';\nexport { default as IconTruckDelivery } from './icons/IconTruckDelivery.mjs';\nexport { default as IconTruckLoading } from './icons/IconTruckLoading.mjs';\nexport { default as IconTruckOff } from './icons/IconTruckOff.mjs';\nexport { default as IconTruckReturn } from './icons/IconTruckReturn.mjs';\nexport { default as IconTruck } from './icons/IconTruck.mjs';\nexport { default as IconTxt } from './icons/IconTxt.mjs';\nexport { default as IconTypeface } from './icons/IconTypeface.mjs';\nexport { default as IconTypographyOff } from './icons/IconTypographyOff.mjs';\nexport { default as IconTypography } from './icons/IconTypography.mjs';\nexport { default as IconUTurnLeft } from './icons/IconUTurnLeft.mjs';\nexport { default as IconUTurnRight } from './icons/IconUTurnRight.mjs';\nexport { default as IconUfoOff } from './icons/IconUfoOff.mjs';\nexport { default as IconUfo } from './icons/IconUfo.mjs';\nexport { default as IconUhd } from './icons/IconUhd.mjs';\nexport { default as IconUmbrella2 } from './icons/IconUmbrella2.mjs';\nexport { default as IconUmbrellaClosed2 } from './icons/IconUmbrellaClosed2.mjs';\nexport { default as IconUmbrellaClosed } from './icons/IconUmbrellaClosed.mjs';\nexport { default as IconUmbrellaOff } from './icons/IconUmbrellaOff.mjs';\nexport { default as IconUmbrella } from './icons/IconUmbrella.mjs';\nexport { default as IconUnderline } from './icons/IconUnderline.mjs';\nexport { default as IconUniverse } from './icons/IconUniverse.mjs';\nexport { default as IconUnlink } from './icons/IconUnlink.mjs';\nexport { default as IconUpload } from './icons/IconUpload.mjs';\nexport { default as IconUrgent } from './icons/IconUrgent.mjs';\nexport { default as IconUsb } from './icons/IconUsb.mjs';\nexport { default as IconUserBitcoin } from './icons/IconUserBitcoin.mjs';\nexport { default as IconUserBolt } from './icons/IconUserBolt.mjs';\nexport { default as IconUserCancel } from './icons/IconUserCancel.mjs';\nexport { default as IconUserCheck } from './icons/IconUserCheck.mjs';\nexport { default as IconUserCircle } from './icons/IconUserCircle.mjs';\nexport { default as IconUserCode } from './icons/IconUserCode.mjs';\nexport { default as IconUserCog } from './icons/IconUserCog.mjs';\nexport { default as IconUserDollar } from './icons/IconUserDollar.mjs';\nexport { default as IconUserDown } from './icons/IconUserDown.mjs';\nexport { default as IconUserEdit } from './icons/IconUserEdit.mjs';\nexport { default as IconUserExclamation } from './icons/IconUserExclamation.mjs';\nexport { default as IconUserHeart } from './icons/IconUserHeart.mjs';\nexport { default as IconUserHexagon } from './icons/IconUserHexagon.mjs';\nexport { default as IconUserKey } from './icons/IconUserKey.mjs';\nexport { default as IconUserMinus } from './icons/IconUserMinus.mjs';\nexport { default as IconUserOff } from './icons/IconUserOff.mjs';\nexport { default as IconUserPause } from './icons/IconUserPause.mjs';\nexport { default as IconUserPentagon } from './icons/IconUserPentagon.mjs';\nexport { default as IconUserPin } from './icons/IconUserPin.mjs';\nexport { default as IconUserPlus } from './icons/IconUserPlus.mjs';\nexport { default as IconUserQuestion } from './icons/IconUserQuestion.mjs';\nexport { default as IconUserScan } from './icons/IconUserScan.mjs';\nexport { default as IconUserScreen } from './icons/IconUserScreen.mjs';\nexport { default as IconUserSearch } from './icons/IconUserSearch.mjs';\nexport { default as IconUserShare } from './icons/IconUserShare.mjs';\nexport { default as IconUserShield } from './icons/IconUserShield.mjs';\nexport { default as IconUserSquareRounded } from './icons/IconUserSquareRounded.mjs';\nexport { default as IconUserSquare } from './icons/IconUserSquare.mjs';\nexport { default as IconUserStar } from './icons/IconUserStar.mjs';\nexport { default as IconUserUp } from './icons/IconUserUp.mjs';\nexport { default as IconUserX } from './icons/IconUserX.mjs';\nexport { default as IconUser } from './icons/IconUser.mjs';\nexport { default as IconUsersGroup } from './icons/IconUsersGroup.mjs';\nexport { default as IconUsersMinus } from './icons/IconUsersMinus.mjs';\nexport { default as IconUsersPlus } from './icons/IconUsersPlus.mjs';\nexport { default as IconUsers } from './icons/IconUsers.mjs';\nexport { default as IconUvIndex } from './icons/IconUvIndex.mjs';\nexport { default as IconUxCircle } from './icons/IconUxCircle.mjs';\nexport { default as IconVaccineBottleOff } from './icons/IconVaccineBottleOff.mjs';\nexport { default as IconVaccineBottle } from './icons/IconVaccineBottle.mjs';\nexport { default as IconVaccineOff } from './icons/IconVaccineOff.mjs';\nexport { default as IconVaccine } from './icons/IconVaccine.mjs';\nexport { default as IconVacuumCleaner } from './icons/IconVacuumCleaner.mjs';\nexport { default as IconVariableMinus } from './icons/IconVariableMinus.mjs';\nexport { default as IconVariableOff } from './icons/IconVariableOff.mjs';\nexport { default as IconVariablePlus } from './icons/IconVariablePlus.mjs';\nexport { default as IconVariable } from './icons/IconVariable.mjs';\nexport { default as IconVectorBezier2 } from './icons/IconVectorBezier2.mjs';\nexport { default as IconVectorBezierArc } from './icons/IconVectorBezierArc.mjs';\nexport { default as IconVectorBezierCircle } from './icons/IconVectorBezierCircle.mjs';\nexport { default as IconVectorBezier } from './icons/IconVectorBezier.mjs';\nexport { default as IconVectorOff } from './icons/IconVectorOff.mjs';\nexport { default as IconVectorSpline } from './icons/IconVectorSpline.mjs';\nexport { default as IconVectorTriangleOff } from './icons/IconVectorTriangleOff.mjs';\nexport { default as IconVectorTriangle } from './icons/IconVectorTriangle.mjs';\nexport { default as IconVector } from './icons/IconVector.mjs';\nexport { default as IconVenus } from './icons/IconVenus.mjs';\nexport { default as IconVersionsOff } from './icons/IconVersionsOff.mjs';\nexport { default as IconVersions } from './icons/IconVersions.mjs';\nexport { default as IconVideoMinus } from './icons/IconVideoMinus.mjs';\nexport { default as IconVideoOff } from './icons/IconVideoOff.mjs';\nexport { default as IconVideoPlus } from './icons/IconVideoPlus.mjs';\nexport { default as IconVideo } from './icons/IconVideo.mjs';\nexport { default as IconView360Off } from './icons/IconView360Off.mjs';\nexport { default as IconView360 } from './icons/IconView360.mjs';\nexport { default as IconViewfinderOff } from './icons/IconViewfinderOff.mjs';\nexport { default as IconViewfinder } from './icons/IconViewfinder.mjs';\nexport { default as IconViewportNarrow } from './icons/IconViewportNarrow.mjs';\nexport { default as IconViewportShort } from './icons/IconViewportShort.mjs';\nexport { default as IconViewportTall } from './icons/IconViewportTall.mjs';\nexport { default as IconViewportWide } from './icons/IconViewportWide.mjs';\nexport { default as IconVinyl } from './icons/IconVinyl.mjs';\nexport { default as IconVip2 } from './icons/IconVip2.mjs';\nexport { default as IconVipOff } from './icons/IconVipOff.mjs';\nexport { default as IconVip } from './icons/IconVip.mjs';\nexport { default as IconVirusOff } from './icons/IconVirusOff.mjs';\nexport { default as IconVirusSearch } from './icons/IconVirusSearch.mjs';\nexport { default as IconVirus } from './icons/IconVirus.mjs';\nexport { default as IconVocabularyOff } from './icons/IconVocabularyOff.mjs';\nexport { default as IconVocabulary } from './icons/IconVocabulary.mjs';\nexport { default as IconVolcano } from './icons/IconVolcano.mjs';\nexport { default as IconVolume2 } from './icons/IconVolume2.mjs';\nexport { default as IconVolume3 } from './icons/IconVolume3.mjs';\nexport { default as IconVolume4 } from './icons/IconVolume4.mjs';\nexport { default as IconVolumeOff } from './icons/IconVolumeOff.mjs';\nexport { default as IconVolume } from './icons/IconVolume.mjs';\nexport { default as IconVs } from './icons/IconVs.mjs';\nexport { default as IconWalk } from './icons/IconWalk.mjs';\nexport { default as IconWallOff } from './icons/IconWallOff.mjs';\nexport { default as IconWall } from './icons/IconWall.mjs';\nexport { default as IconWalletOff } from './icons/IconWalletOff.mjs';\nexport { default as IconWallet } from './icons/IconWallet.mjs';\nexport { default as IconWallpaperOff } from './icons/IconWallpaperOff.mjs';\nexport { default as IconWallpaper } from './icons/IconWallpaper.mjs';\nexport { default as IconWandOff } from './icons/IconWandOff.mjs';\nexport { default as IconWand } from './icons/IconWand.mjs';\nexport { default as IconWashDry1 } from './icons/IconWashDry1.mjs';\nexport { default as IconWashDry2 } from './icons/IconWashDry2.mjs';\nexport { default as IconWashDry3 } from './icons/IconWashDry3.mjs';\nexport { default as IconWashDryA } from './icons/IconWashDryA.mjs';\nexport { default as IconWashDryDip } from './icons/IconWashDryDip.mjs';\nexport { default as IconWashDryF } from './icons/IconWashDryF.mjs';\nexport { default as IconWashDryFlat } from './icons/IconWashDryFlat.mjs';\nexport { default as IconWashDryHang } from './icons/IconWashDryHang.mjs';\nexport { default as IconWashDryOff } from './icons/IconWashDryOff.mjs';\nexport { default as IconWashDryP } from './icons/IconWashDryP.mjs';\nexport { default as IconWashDryShade } from './icons/IconWashDryShade.mjs';\nexport { default as IconWashDryW } from './icons/IconWashDryW.mjs';\nexport { default as IconWashDry } from './icons/IconWashDry.mjs';\nexport { default as IconWashDrycleanOff } from './icons/IconWashDrycleanOff.mjs';\nexport { default as IconWashDryclean } from './icons/IconWashDryclean.mjs';\nexport { default as IconWashEco } from './icons/IconWashEco.mjs';\nexport { default as IconWashGentle } from './icons/IconWashGentle.mjs';\nexport { default as IconWashHand } from './icons/IconWashHand.mjs';\nexport { default as IconWashMachine } from './icons/IconWashMachine.mjs';\nexport { default as IconWashOff } from './icons/IconWashOff.mjs';\nexport { default as IconWashPress } from './icons/IconWashPress.mjs';\nexport { default as IconWashTemperature1 } from './icons/IconWashTemperature1.mjs';\nexport { default as IconWashTemperature2 } from './icons/IconWashTemperature2.mjs';\nexport { default as IconWashTemperature3 } from './icons/IconWashTemperature3.mjs';\nexport { default as IconWashTemperature4 } from './icons/IconWashTemperature4.mjs';\nexport { default as IconWashTemperature5 } from './icons/IconWashTemperature5.mjs';\nexport { default as IconWashTemperature6 } from './icons/IconWashTemperature6.mjs';\nexport { default as IconWashTumbleDry } from './icons/IconWashTumbleDry.mjs';\nexport { default as IconWashTumbleOff } from './icons/IconWashTumbleOff.mjs';\nexport { default as IconWash } from './icons/IconWash.mjs';\nexport { default as IconWaterpolo } from './icons/IconWaterpolo.mjs';\nexport { default as IconWaveSawTool } from './icons/IconWaveSawTool.mjs';\nexport { default as IconWaveSine } from './icons/IconWaveSine.mjs';\nexport { default as IconWaveSquare } from './icons/IconWaveSquare.mjs';\nexport { default as IconWavesElectricity } from './icons/IconWavesElectricity.mjs';\nexport { default as IconWebhookOff } from './icons/IconWebhookOff.mjs';\nexport { default as IconWebhook } from './icons/IconWebhook.mjs';\nexport { default as IconWeight } from './icons/IconWeight.mjs';\nexport { default as IconWheatOff } from './icons/IconWheatOff.mjs';\nexport { default as IconWheat } from './icons/IconWheat.mjs';\nexport { default as IconWheel } from './icons/IconWheel.mjs';\nexport { default as IconWheelchairOff } from './icons/IconWheelchairOff.mjs';\nexport { default as IconWheelchair } from './icons/IconWheelchair.mjs';\nexport { default as IconWhirl } from './icons/IconWhirl.mjs';\nexport { default as IconWhisk } from './icons/IconWhisk.mjs';\nexport { default as IconWifi0 } from './icons/IconWifi0.mjs';\nexport { default as IconWifi1 } from './icons/IconWifi1.mjs';\nexport { default as IconWifi2 } from './icons/IconWifi2.mjs';\nexport { default as IconWifiOff } from './icons/IconWifiOff.mjs';\nexport { default as IconWifi } from './icons/IconWifi.mjs';\nexport { default as IconWindElectricity } from './icons/IconWindElectricity.mjs';\nexport { default as IconWindOff } from './icons/IconWindOff.mjs';\nexport { default as IconWind } from './icons/IconWind.mjs';\nexport { default as IconWindmillOff } from './icons/IconWindmillOff.mjs';\nexport { default as IconWindmill } from './icons/IconWindmill.mjs';\nexport { default as IconWindowMaximize } from './icons/IconWindowMaximize.mjs';\nexport { default as IconWindowMinimize } from './icons/IconWindowMinimize.mjs';\nexport { default as IconWindowOff } from './icons/IconWindowOff.mjs';\nexport { default as IconWindow } from './icons/IconWindow.mjs';\nexport { default as IconWindsock } from './icons/IconWindsock.mjs';\nexport { default as IconWiperWash } from './icons/IconWiperWash.mjs';\nexport { default as IconWiper } from './icons/IconWiper.mjs';\nexport { default as IconWoman } from './icons/IconWoman.mjs';\nexport { default as IconWood } from './icons/IconWood.mjs';\nexport { default as IconWorldBolt } from './icons/IconWorldBolt.mjs';\nexport { default as IconWorldCancel } from './icons/IconWorldCancel.mjs';\nexport { default as IconWorldCheck } from './icons/IconWorldCheck.mjs';\nexport { default as IconWorldCode } from './icons/IconWorldCode.mjs';\nexport { default as IconWorldCog } from './icons/IconWorldCog.mjs';\nexport { default as IconWorldDollar } from './icons/IconWorldDollar.mjs';\nexport { default as IconWorldDown } from './icons/IconWorldDown.mjs';\nexport { default as IconWorldDownload } from './icons/IconWorldDownload.mjs';\nexport { default as IconWorldExclamation } from './icons/IconWorldExclamation.mjs';\nexport { default as IconWorldHeart } from './icons/IconWorldHeart.mjs';\nexport { default as IconWorldLatitude } from './icons/IconWorldLatitude.mjs';\nexport { default as IconWorldLongitude } from './icons/IconWorldLongitude.mjs';\nexport { default as IconWorldMap } from './icons/IconWorldMap.mjs';\nexport { default as IconWorldMinus } from './icons/IconWorldMinus.mjs';\nexport { default as IconWorldOff } from './icons/IconWorldOff.mjs';\nexport { default as IconWorldPause } from './icons/IconWorldPause.mjs';\nexport { default as IconWorldPin } from './icons/IconWorldPin.mjs';\nexport { default as IconWorldPlus } from './icons/IconWorldPlus.mjs';\nexport { default as IconWorldQuestion } from './icons/IconWorldQuestion.mjs';\nexport { default as IconWorldSearch } from './icons/IconWorldSearch.mjs';\nexport { default as IconWorldShare } from './icons/IconWorldShare.mjs';\nexport { default as IconWorldStar } from './icons/IconWorldStar.mjs';\nexport { default as IconWorldUp } from './icons/IconWorldUp.mjs';\nexport { default as IconWorldUpload } from './icons/IconWorldUpload.mjs';\nexport { default as IconWorldWww } from './icons/IconWorldWww.mjs';\nexport { default as IconWorldX } from './icons/IconWorldX.mjs';\nexport { default as IconWorld } from './icons/IconWorld.mjs';\nexport { default as IconWreckingBall } from './icons/IconWreckingBall.mjs';\nexport { default as IconWritingOff } from './icons/IconWritingOff.mjs';\nexport { default as IconWritingSignOff } from './icons/IconWritingSignOff.mjs';\nexport { default as IconWritingSign } from './icons/IconWritingSign.mjs';\nexport { default as IconWriting } from './icons/IconWriting.mjs';\nexport { default as IconXPowerY } from './icons/IconXPowerY.mjs';\nexport { default as IconX } from './icons/IconX.mjs';\nexport { default as IconXboxA } from './icons/IconXboxA.mjs';\nexport { default as IconXboxB } from './icons/IconXboxB.mjs';\nexport { default as IconXboxX } from './icons/IconXboxX.mjs';\nexport { default as IconXboxY } from './icons/IconXboxY.mjs';\nexport { default as IconXd } from './icons/IconXd.mjs';\nexport { default as IconXxx } from './icons/IconXxx.mjs';\nexport { default as IconYinYang } from './icons/IconYinYang.mjs';\nexport { default as IconYoga } from './icons/IconYoga.mjs';\nexport { default as IconZeppelinOff } from './icons/IconZeppelinOff.mjs';\nexport { default as IconZeppelin } from './icons/IconZeppelin.mjs';\nexport { default as IconZeroConfig } from './icons/IconZeroConfig.mjs';\nexport { default as IconZip } from './icons/IconZip.mjs';\nexport { default as IconZodiacAquarius } from './icons/IconZodiacAquarius.mjs';\nexport { default as IconZodiacAries } from './icons/IconZodiacAries.mjs';\nexport { default as IconZodiacCancer } from './icons/IconZodiacCancer.mjs';\nexport { default as IconZodiacCapricorn } from './icons/IconZodiacCapricorn.mjs';\nexport { default as IconZodiacGemini } from './icons/IconZodiacGemini.mjs';\nexport { default as IconZodiacLeo } from './icons/IconZodiacLeo.mjs';\nexport { default as IconZodiacLibra } from './icons/IconZodiacLibra.mjs';\nexport { default as IconZodiacPisces } from './icons/IconZodiacPisces.mjs';\nexport { default as IconZodiacSagittarius } from './icons/IconZodiacSagittarius.mjs';\nexport { default as IconZodiacScorpio } from './icons/IconZodiacScorpio.mjs';\nexport { default as IconZodiacTaurus } from './icons/IconZodiacTaurus.mjs';\nexport { default as IconZodiacVirgo } from './icons/IconZodiacVirgo.mjs';\nexport { default as IconZoomCancel } from './icons/IconZoomCancel.mjs';\nexport { default as IconZoomCheck } from './icons/IconZoomCheck.mjs';\nexport { default as IconZoomCode } from './icons/IconZoomCode.mjs';\nexport { default as IconZoomExclamation } from './icons/IconZoomExclamation.mjs';\nexport { default as IconZoomInArea } from './icons/IconZoomInArea.mjs';\nexport { default as IconZoomIn } from './icons/IconZoomIn.mjs';\nexport { default as IconZoomMoney } from './icons/IconZoomMoney.mjs';\nexport { default as IconZoomOutArea } from './icons/IconZoomOutArea.mjs';\nexport { default as IconZoomOut } from './icons/IconZoomOut.mjs';\nexport { default as IconZoomPan } from './icons/IconZoomPan.mjs';\nexport { default as IconZoomQuestion } from './icons/IconZoomQuestion.mjs';\nexport { default as IconZoomReplace } from './icons/IconZoomReplace.mjs';\nexport { default as IconZoomReset } from './icons/IconZoomReset.mjs';\nexport { default as IconZoomScan } from './icons/IconZoomScan.mjs';\nexport { default as IconZoom } from './icons/IconZoom.mjs';\nexport { default as IconZzzOff } from './icons/IconZzzOff.mjs';\nexport { default as IconZzz } from './icons/IconZzz.mjs';\nexport { default as IconAccessibleFilled } from './icons/IconAccessibleFilled.mjs';\nexport { default as IconAdCircleFilled } from './icons/IconAdCircleFilled.mjs';\nexport { default as IconAdFilled } from './icons/IconAdFilled.mjs';\nexport { default as IconAdjustmentsHorizontalFilled } from './icons/IconAdjustmentsHorizontalFilled.mjs';\nexport { default as IconAdjustmentsFilled } from './icons/IconAdjustmentsFilled.mjs';\nexport { default as IconAerialLiftFilled } from './icons/IconAerialLiftFilled.mjs';\nexport { default as IconAffiliateFilled } from './icons/IconAffiliateFilled.mjs';\nexport { default as IconAirBalloonFilled } from './icons/IconAirBalloonFilled.mjs';\nexport { default as IconAlarmMinusFilled } from './icons/IconAlarmMinusFilled.mjs';\nexport { default as IconAlarmPlusFilled } from './icons/IconAlarmPlusFilled.mjs';\nexport { default as IconAlarmSnoozeFilled } from './icons/IconAlarmSnoozeFilled.mjs';\nexport { default as IconAlarmFilled } from './icons/IconAlarmFilled.mjs';\nexport { default as IconAlertCircleFilled } from './icons/IconAlertCircleFilled.mjs';\nexport { default as IconAlertHexagonFilled } from './icons/IconAlertHexagonFilled.mjs';\nexport { default as IconAlertOctagonFilled } from './icons/IconAlertOctagonFilled.mjs';\nexport { default as IconAlertSquareRoundedFilled } from './icons/IconAlertSquareRoundedFilled.mjs';\nexport { default as IconAlertSquareFilled } from './icons/IconAlertSquareFilled.mjs';\nexport { default as IconAlertTriangleFilled } from './icons/IconAlertTriangleFilled.mjs';\nexport { default as IconAlienFilled } from './icons/IconAlienFilled.mjs';\nexport { default as IconAlignBoxBottomCenterFilled } from './icons/IconAlignBoxBottomCenterFilled.mjs';\nexport { default as IconAlignBoxBottomLeftFilled } from './icons/IconAlignBoxBottomLeftFilled.mjs';\nexport { default as IconAlignBoxBottomRightFilled } from './icons/IconAlignBoxBottomRightFilled.mjs';\nexport { default as IconAlignBoxCenterMiddleFilled } from './icons/IconAlignBoxCenterMiddleFilled.mjs';\nexport { default as IconAlignBoxLeftBottomFilled } from './icons/IconAlignBoxLeftBottomFilled.mjs';\nexport { default as IconAlignBoxLeftMiddleFilled } from './icons/IconAlignBoxLeftMiddleFilled.mjs';\nexport { default as IconAlignBoxLeftTopFilled } from './icons/IconAlignBoxLeftTopFilled.mjs';\nexport { default as IconAlignBoxRightBottomFilled } from './icons/IconAlignBoxRightBottomFilled.mjs';\nexport { default as IconAlignBoxRightMiddleFilled } from './icons/IconAlignBoxRightMiddleFilled.mjs';\nexport { default as IconAlignBoxRightTopFilled } from './icons/IconAlignBoxRightTopFilled.mjs';\nexport { default as IconAlignBoxTopCenterFilled } from './icons/IconAlignBoxTopCenterFilled.mjs';\nexport { default as IconAlignBoxTopLeftFilled } from './icons/IconAlignBoxTopLeftFilled.mjs';\nexport { default as IconAlignBoxTopRightFilled } from './icons/IconAlignBoxTopRightFilled.mjs';\nexport { default as IconAnalyzeFilled } from './icons/IconAnalyzeFilled.mjs';\nexport { default as IconAppWindowFilled } from './icons/IconAppWindowFilled.mjs';\nexport { default as IconAppleFilled } from './icons/IconAppleFilled.mjs';\nexport { default as IconAppsFilled } from './icons/IconAppsFilled.mjs';\nexport { default as IconArchiveFilled } from './icons/IconArchiveFilled.mjs';\nexport { default as IconArrowAutofitContentFilled } from './icons/IconArrowAutofitContentFilled.mjs';\nexport { default as IconArrowAutofitDownFilled } from './icons/IconArrowAutofitDownFilled.mjs';\nexport { default as IconArrowAutofitHeightFilled } from './icons/IconArrowAutofitHeightFilled.mjs';\nexport { default as IconArrowAutofitLeftFilled } from './icons/IconArrowAutofitLeftFilled.mjs';\nexport { default as IconArrowAutofitRightFilled } from './icons/IconArrowAutofitRightFilled.mjs';\nexport { default as IconArrowAutofitUpFilled } from './icons/IconArrowAutofitUpFilled.mjs';\nexport { default as IconArrowAutofitWidthFilled } from './icons/IconArrowAutofitWidthFilled.mjs';\nexport { default as IconArrowBadgeDownFilled } from './icons/IconArrowBadgeDownFilled.mjs';\nexport { default as IconArrowBadgeLeftFilled } from './icons/IconArrowBadgeLeftFilled.mjs';\nexport { default as IconArrowBadgeRightFilled } from './icons/IconArrowBadgeRightFilled.mjs';\nexport { default as IconArrowBadgeUpFilled } from './icons/IconArrowBadgeUpFilled.mjs';\nexport { default as IconArrowBigDownLineFilled } from './icons/IconArrowBigDownLineFilled.mjs';\nexport { default as IconArrowBigDownLinesFilled } from './icons/IconArrowBigDownLinesFilled.mjs';\nexport { default as IconArrowBigDownFilled } from './icons/IconArrowBigDownFilled.mjs';\nexport { default as IconArrowBigLeftLineFilled } from './icons/IconArrowBigLeftLineFilled.mjs';\nexport { default as IconArrowBigLeftLinesFilled } from './icons/IconArrowBigLeftLinesFilled.mjs';\nexport { default as IconArrowBigLeftFilled } from './icons/IconArrowBigLeftFilled.mjs';\nexport { default as IconArrowBigRightLineFilled } from './icons/IconArrowBigRightLineFilled.mjs';\nexport { default as IconArrowBigRightLinesFilled } from './icons/IconArrowBigRightLinesFilled.mjs';\nexport { default as IconArrowBigRightFilled } from './icons/IconArrowBigRightFilled.mjs';\nexport { default as IconArrowBigUpLineFilled } from './icons/IconArrowBigUpLineFilled.mjs';\nexport { default as IconArrowBigUpLinesFilled } from './icons/IconArrowBigUpLinesFilled.mjs';\nexport { default as IconArrowBigUpFilled } from './icons/IconArrowBigUpFilled.mjs';\nexport { default as IconArrowDownCircleFilled } from './icons/IconArrowDownCircleFilled.mjs';\nexport { default as IconArrowDownRhombusFilled } from './icons/IconArrowDownRhombusFilled.mjs';\nexport { default as IconArrowDownSquareFilled } from './icons/IconArrowDownSquareFilled.mjs';\nexport { default as IconArrowGuideFilled } from './icons/IconArrowGuideFilled.mjs';\nexport { default as IconArrowLeftCircleFilled } from './icons/IconArrowLeftCircleFilled.mjs';\nexport { default as IconArrowLeftRhombusFilled } from './icons/IconArrowLeftRhombusFilled.mjs';\nexport { default as IconArrowLeftSquareFilled } from './icons/IconArrowLeftSquareFilled.mjs';\nexport { default as IconArrowMoveDownFilled } from './icons/IconArrowMoveDownFilled.mjs';\nexport { default as IconArrowMoveLeftFilled } from './icons/IconArrowMoveLeftFilled.mjs';\nexport { default as IconArrowMoveRightFilled } from './icons/IconArrowMoveRightFilled.mjs';\nexport { default as IconArrowMoveUpFilled } from './icons/IconArrowMoveUpFilled.mjs';\nexport { default as IconArrowRightCircleFilled } from './icons/IconArrowRightCircleFilled.mjs';\nexport { default as IconArrowRightRhombusFilled } from './icons/IconArrowRightRhombusFilled.mjs';\nexport { default as IconArrowRightSquareFilled } from './icons/IconArrowRightSquareFilled.mjs';\nexport { default as IconArrowUpCircleFilled } from './icons/IconArrowUpCircleFilled.mjs';\nexport { default as IconArrowUpRhombusFilled } from './icons/IconArrowUpRhombusFilled.mjs';\nexport { default as IconArrowUpSquareFilled } from './icons/IconArrowUpSquareFilled.mjs';\nexport { default as IconArtboardFilled } from './icons/IconArtboardFilled.mjs';\nexport { default as IconArticleFilled } from './icons/IconArticleFilled.mjs';\nexport { default as IconAspectRatioFilled } from './icons/IconAspectRatioFilled.mjs';\nexport { default as IconAssemblyFilled } from './icons/IconAssemblyFilled.mjs';\nexport { default as IconAssetFilled } from './icons/IconAssetFilled.mjs';\nexport { default as IconAtom2Filled } from './icons/IconAtom2Filled.mjs';\nexport { default as IconAutomaticGearboxFilled } from './icons/IconAutomaticGearboxFilled.mjs';\nexport { default as IconAwardFilled } from './icons/IconAwardFilled.mjs';\nexport { default as IconBabyCarriageFilled } from './icons/IconBabyCarriageFilled.mjs';\nexport { default as IconBackspaceFilled } from './icons/IconBackspaceFilled.mjs';\nexport { default as IconBadge3dFilled } from './icons/IconBadge3dFilled.mjs';\nexport { default as IconBadge4kFilled } from './icons/IconBadge4kFilled.mjs';\nexport { default as IconBadge8kFilled } from './icons/IconBadge8kFilled.mjs';\nexport { default as IconBadgeAdFilled } from './icons/IconBadgeAdFilled.mjs';\nexport { default as IconBadgeArFilled } from './icons/IconBadgeArFilled.mjs';\nexport { default as IconBadgeCcFilled } from './icons/IconBadgeCcFilled.mjs';\nexport { default as IconBadgeHdFilled } from './icons/IconBadgeHdFilled.mjs';\nexport { default as IconBadgeSdFilled } from './icons/IconBadgeSdFilled.mjs';\nexport { default as IconBadgeTmFilled } from './icons/IconBadgeTmFilled.mjs';\nexport { default as IconBadgeVoFilled } from './icons/IconBadgeVoFilled.mjs';\nexport { default as IconBadgeVrFilled } from './icons/IconBadgeVrFilled.mjs';\nexport { default as IconBadgeWcFilled } from './icons/IconBadgeWcFilled.mjs';\nexport { default as IconBadgeFilled } from './icons/IconBadgeFilled.mjs';\nexport { default as IconBadgesFilled } from './icons/IconBadgesFilled.mjs';\nexport { default as IconBallBowlingFilled } from './icons/IconBallBowlingFilled.mjs';\nexport { default as IconBalloonFilled } from './icons/IconBalloonFilled.mjs';\nexport { default as IconBallpenFilled } from './icons/IconBallpenFilled.mjs';\nexport { default as IconBandageFilled } from './icons/IconBandageFilled.mjs';\nexport { default as IconBarbellFilled } from './icons/IconBarbellFilled.mjs';\nexport { default as IconBarrierBlockFilled } from './icons/IconBarrierBlockFilled.mjs';\nexport { default as IconBasketFilled } from './icons/IconBasketFilled.mjs';\nexport { default as IconBathFilled } from './icons/IconBathFilled.mjs';\nexport { default as IconBattery1Filled } from './icons/IconBattery1Filled.mjs';\nexport { default as IconBattery2Filled } from './icons/IconBattery2Filled.mjs';\nexport { default as IconBattery3Filled } from './icons/IconBattery3Filled.mjs';\nexport { default as IconBattery4Filled } from './icons/IconBattery4Filled.mjs';\nexport { default as IconBatteryAutomotiveFilled } from './icons/IconBatteryAutomotiveFilled.mjs';\nexport { default as IconBatteryVertical1Filled } from './icons/IconBatteryVertical1Filled.mjs';\nexport { default as IconBatteryVertical2Filled } from './icons/IconBatteryVertical2Filled.mjs';\nexport { default as IconBatteryVertical3Filled } from './icons/IconBatteryVertical3Filled.mjs';\nexport { default as IconBatteryVertical4Filled } from './icons/IconBatteryVertical4Filled.mjs';\nexport { default as IconBatteryVerticalFilled } from './icons/IconBatteryVerticalFilled.mjs';\nexport { default as IconBatteryFilled } from './icons/IconBatteryFilled.mjs';\nexport { default as IconBedFlatFilled } from './icons/IconBedFlatFilled.mjs';\nexport { default as IconBedFilled } from './icons/IconBedFilled.mjs';\nexport { default as IconBeerFilled } from './icons/IconBeerFilled.mjs';\nexport { default as IconBellMinusFilled } from './icons/IconBellMinusFilled.mjs';\nexport { default as IconBellPlusFilled } from './icons/IconBellPlusFilled.mjs';\nexport { default as IconBellRinging2Filled } from './icons/IconBellRinging2Filled.mjs';\nexport { default as IconBellRingingFilled } from './icons/IconBellRingingFilled.mjs';\nexport { default as IconBellXFilled } from './icons/IconBellXFilled.mjs';\nexport { default as IconBellZFilled } from './icons/IconBellZFilled.mjs';\nexport { default as IconBellFilled } from './icons/IconBellFilled.mjs';\nexport { default as IconBikeFilled } from './icons/IconBikeFilled.mjs';\nexport { default as IconBinaryTree2Filled } from './icons/IconBinaryTree2Filled.mjs';\nexport { default as IconBinaryTreeFilled } from './icons/IconBinaryTreeFilled.mjs';\nexport { default as IconBinocularsFilled } from './icons/IconBinocularsFilled.mjs';\nexport { default as IconBiohazardFilled } from './icons/IconBiohazardFilled.mjs';\nexport { default as IconBladeFilled } from './icons/IconBladeFilled.mjs';\nexport { default as IconBlenderFilled } from './icons/IconBlenderFilled.mjs';\nexport { default as IconBlobFilled } from './icons/IconBlobFilled.mjs';\nexport { default as IconBoltFilled } from './icons/IconBoltFilled.mjs';\nexport { default as IconBombFilled } from './icons/IconBombFilled.mjs';\nexport { default as IconBoneFilled } from './icons/IconBoneFilled.mjs';\nexport { default as IconBongFilled } from './icons/IconBongFilled.mjs';\nexport { default as IconBookFilled } from './icons/IconBookFilled.mjs';\nexport { default as IconBookmarkFilled } from './icons/IconBookmarkFilled.mjs';\nexport { default as IconBookmarksFilled } from './icons/IconBookmarksFilled.mjs';\nexport { default as IconBoomFilled } from './icons/IconBoomFilled.mjs';\nexport { default as IconBottleFilled } from './icons/IconBottleFilled.mjs';\nexport { default as IconBounceLeftFilled } from './icons/IconBounceLeftFilled.mjs';\nexport { default as IconBounceRightFilled } from './icons/IconBounceRightFilled.mjs';\nexport { default as IconBowFilled } from './icons/IconBowFilled.mjs';\nexport { default as IconBowlChopsticksFilled } from './icons/IconBowlChopsticksFilled.mjs';\nexport { default as IconBowlSpoonFilled } from './icons/IconBowlSpoonFilled.mjs';\nexport { default as IconBowlFilled } from './icons/IconBowlFilled.mjs';\nexport { default as IconBoxAlignBottomLeftFilled } from './icons/IconBoxAlignBottomLeftFilled.mjs';\nexport { default as IconBoxAlignBottomRightFilled } from './icons/IconBoxAlignBottomRightFilled.mjs';\nexport { default as IconBoxAlignBottomFilled } from './icons/IconBoxAlignBottomFilled.mjs';\nexport { default as IconBoxAlignLeftFilled } from './icons/IconBoxAlignLeftFilled.mjs';\nexport { default as IconBoxAlignRightFilled } from './icons/IconBoxAlignRightFilled.mjs';\nexport { default as IconBoxAlignTopLeftFilled } from './icons/IconBoxAlignTopLeftFilled.mjs';\nexport { default as IconBoxAlignTopRightFilled } from './icons/IconBoxAlignTopRightFilled.mjs';\nexport { default as IconBoxAlignTopFilled } from './icons/IconBoxAlignTopFilled.mjs';\nexport { default as IconBoxMultipleFilled } from './icons/IconBoxMultipleFilled.mjs';\nexport { default as IconBrandAngularFilled } from './icons/IconBrandAngularFilled.mjs';\nexport { default as IconBrandAppleFilled } from './icons/IconBrandAppleFilled.mjs';\nexport { default as IconBrandBitbucketFilled } from './icons/IconBrandBitbucketFilled.mjs';\nexport { default as IconBrandDiscordFilled } from './icons/IconBrandDiscordFilled.mjs';\nexport { default as IconBrandDribbbleFilled } from './icons/IconBrandDribbbleFilled.mjs';\nexport { default as IconBrandFacebookFilled } from './icons/IconBrandFacebookFilled.mjs';\nexport { default as IconBrandGithubFilled } from './icons/IconBrandGithubFilled.mjs';\nexport { default as IconBrandGoogleFilled } from './icons/IconBrandGoogleFilled.mjs';\nexport { default as IconBrandInstagramFilled } from './icons/IconBrandInstagramFilled.mjs';\nexport { default as IconBrandKickFilled } from './icons/IconBrandKickFilled.mjs';\nexport { default as IconBrandLinkedinFilled } from './icons/IconBrandLinkedinFilled.mjs';\nexport { default as IconBrandMessengerFilled } from './icons/IconBrandMessengerFilled.mjs';\nexport { default as IconBrandOpenSourceFilled } from './icons/IconBrandOpenSourceFilled.mjs';\nexport { default as IconBrandOperaFilled } from './icons/IconBrandOperaFilled.mjs';\nexport { default as IconBrandPatreonFilled } from './icons/IconBrandPatreonFilled.mjs';\nexport { default as IconBrandPaypalFilled } from './icons/IconBrandPaypalFilled.mjs';\nexport { default as IconBrandPinterestFilled } from './icons/IconBrandPinterestFilled.mjs';\nexport { default as IconBrandSketchFilled } from './icons/IconBrandSketchFilled.mjs';\nexport { default as IconBrandSnapchatFilled } from './icons/IconBrandSnapchatFilled.mjs';\nexport { default as IconBrandSpotifyFilled } from './icons/IconBrandSpotifyFilled.mjs';\nexport { default as IconBrandSteamFilled } from './icons/IconBrandSteamFilled.mjs';\nexport { default as IconBrandStripeFilled } from './icons/IconBrandStripeFilled.mjs';\nexport { default as IconBrandTablerFilled } from './icons/IconBrandTablerFilled.mjs';\nexport { default as IconBrandTiktokFilled } from './icons/IconBrandTiktokFilled.mjs';\nexport { default as IconBrandTinderFilled } from './icons/IconBrandTinderFilled.mjs';\nexport { default as IconBrandTumblrFilled } from './icons/IconBrandTumblrFilled.mjs';\nexport { default as IconBrandTwitterFilled } from './icons/IconBrandTwitterFilled.mjs';\nexport { default as IconBrandVercelFilled } from './icons/IconBrandVercelFilled.mjs';\nexport { default as IconBrandVimeoFilled } from './icons/IconBrandVimeoFilled.mjs';\nexport { default as IconBrandWeiboFilled } from './icons/IconBrandWeiboFilled.mjs';\nexport { default as IconBrandWhatsappFilled } from './icons/IconBrandWhatsappFilled.mjs';\nexport { default as IconBrandWindowsFilled } from './icons/IconBrandWindowsFilled.mjs';\nexport { default as IconBrandXFilled } from './icons/IconBrandXFilled.mjs';\nexport { default as IconBrandYoutubeFilled } from './icons/IconBrandYoutubeFilled.mjs';\nexport { default as IconBreadFilled } from './icons/IconBreadFilled.mjs';\nexport { default as IconBriefcase2Filled } from './icons/IconBriefcase2Filled.mjs';\nexport { default as IconBriefcaseFilled } from './icons/IconBriefcaseFilled.mjs';\nexport { default as IconBrightnessAutoFilled } from './icons/IconBrightnessAutoFilled.mjs';\nexport { default as IconBrightnessDownFilled } from './icons/IconBrightnessDownFilled.mjs';\nexport { default as IconBrightnessUpFilled } from './icons/IconBrightnessUpFilled.mjs';\nexport { default as IconBrightnessFilled } from './icons/IconBrightnessFilled.mjs';\nexport { default as IconBubbleTextFilled } from './icons/IconBubbleTextFilled.mjs';\nexport { default as IconBubbleFilled } from './icons/IconBubbleFilled.mjs';\nexport { default as IconBugFilled } from './icons/IconBugFilled.mjs';\nexport { default as IconBuildingBridge2Filled } from './icons/IconBuildingBridge2Filled.mjs';\nexport { default as IconBuildingBroadcastTowerFilled } from './icons/IconBuildingBroadcastTowerFilled.mjs';\nexport { default as IconBulbFilled } from './icons/IconBulbFilled.mjs';\nexport { default as IconBusFilled } from './icons/IconBusFilled.mjs';\nexport { default as IconButterflyFilled } from './icons/IconButterflyFilled.mjs';\nexport { default as IconCactusFilled } from './icons/IconCactusFilled.mjs';\nexport { default as IconCalculatorFilled } from './icons/IconCalculatorFilled.mjs';\nexport { default as IconCalendarEventFilled } from './icons/IconCalendarEventFilled.mjs';\nexport { default as IconCalendarMonthFilled } from './icons/IconCalendarMonthFilled.mjs';\nexport { default as IconCalendarWeekFilled } from './icons/IconCalendarWeekFilled.mjs';\nexport { default as IconCalendarFilled } from './icons/IconCalendarFilled.mjs';\nexport { default as IconCameraFilled } from './icons/IconCameraFilled.mjs';\nexport { default as IconCampfireFilled } from './icons/IconCampfireFilled.mjs';\nexport { default as IconCandleFilled } from './icons/IconCandleFilled.mjs';\nexport { default as IconCannabisFilled } from './icons/IconCannabisFilled.mjs';\nexport { default as IconCapsuleHorizontalFilled } from './icons/IconCapsuleHorizontalFilled.mjs';\nexport { default as IconCapsuleFilled } from './icons/IconCapsuleFilled.mjs';\nexport { default as IconCaptureFilled } from './icons/IconCaptureFilled.mjs';\nexport { default as IconCar4wdFilled } from './icons/IconCar4wdFilled.mjs';\nexport { default as IconCarCraneFilled } from './icons/IconCarCraneFilled.mjs';\nexport { default as IconCarFanFilled } from './icons/IconCarFanFilled.mjs';\nexport { default as IconCarSuvFilled } from './icons/IconCarSuvFilled.mjs';\nexport { default as IconCarFilled } from './icons/IconCarFilled.mjs';\nexport { default as IconCarambolaFilled } from './icons/IconCarambolaFilled.mjs';\nexport { default as IconCaravanFilled } from './icons/IconCaravanFilled.mjs';\nexport { default as IconCardboardsFilled } from './icons/IconCardboardsFilled.mjs';\nexport { default as IconCardsFilled } from './icons/IconCardsFilled.mjs';\nexport { default as IconCaretDownFilled } from './icons/IconCaretDownFilled.mjs';\nexport { default as IconCaretLeftRightFilled } from './icons/IconCaretLeftRightFilled.mjs';\nexport { default as IconCaretLeftFilled } from './icons/IconCaretLeftFilled.mjs';\nexport { default as IconCaretRightFilled } from './icons/IconCaretRightFilled.mjs';\nexport { default as IconCaretUpDownFilled } from './icons/IconCaretUpDownFilled.mjs';\nexport { default as IconCaretUpFilled } from './icons/IconCaretUpFilled.mjs';\nexport { default as IconCarouselHorizontalFilled } from './icons/IconCarouselHorizontalFilled.mjs';\nexport { default as IconCarouselVerticalFilled } from './icons/IconCarouselVerticalFilled.mjs';\nexport { default as IconCashBanknoteFilled } from './icons/IconCashBanknoteFilled.mjs';\nexport { default as IconCategoryFilled } from './icons/IconCategoryFilled.mjs';\nexport { default as IconChargingPileFilled } from './icons/IconChargingPileFilled.mjs';\nexport { default as IconChartAreaLineFilled } from './icons/IconChartAreaLineFilled.mjs';\nexport { default as IconChartAreaFilled } from './icons/IconChartAreaFilled.mjs';\nexport { default as IconChartBubbleFilled } from './icons/IconChartBubbleFilled.mjs';\nexport { default as IconChartCandleFilled } from './icons/IconChartCandleFilled.mjs';\nexport { default as IconChartDonutFilled } from './icons/IconChartDonutFilled.mjs';\nexport { default as IconChartDots2Filled } from './icons/IconChartDots2Filled.mjs';\nexport { default as IconChartDots3Filled } from './icons/IconChartDots3Filled.mjs';\nexport { default as IconChartDotsFilled } from './icons/IconChartDotsFilled.mjs';\nexport { default as IconChartFunnelFilled } from './icons/IconChartFunnelFilled.mjs';\nexport { default as IconChartGridDotsFilled } from './icons/IconChartGridDotsFilled.mjs';\nexport { default as IconChartPie2Filled } from './icons/IconChartPie2Filled.mjs';\nexport { default as IconChartPie3Filled } from './icons/IconChartPie3Filled.mjs';\nexport { default as IconChartPie4Filled } from './icons/IconChartPie4Filled.mjs';\nexport { default as IconChartPieFilled } from './icons/IconChartPieFilled.mjs';\nexport { default as IconCheckFilled } from './icons/IconCheckFilled.mjs';\nexport { default as IconChefHatFilled } from './icons/IconChefHatFilled.mjs';\nexport { default as IconCherryFilled } from './icons/IconCherryFilled.mjs';\nexport { default as IconChessBishopFilled } from './icons/IconChessBishopFilled.mjs';\nexport { default as IconChessKingFilled } from './icons/IconChessKingFilled.mjs';\nexport { default as IconChessKnightFilled } from './icons/IconChessKnightFilled.mjs';\nexport { default as IconChessQueenFilled } from './icons/IconChessQueenFilled.mjs';\nexport { default as IconChessRookFilled } from './icons/IconChessRookFilled.mjs';\nexport { default as IconChessFilled } from './icons/IconChessFilled.mjs';\nexport { default as IconChevronDownFilled } from './icons/IconChevronDownFilled.mjs';\nexport { default as IconChevronRightFilled } from './icons/IconChevronRightFilled.mjs';\nexport { default as IconChristmasTreeFilled } from './icons/IconChristmasTreeFilled.mjs';\nexport { default as IconCircleArrowDownLeftFilled } from './icons/IconCircleArrowDownLeftFilled.mjs';\nexport { default as IconCircleArrowDownRightFilled } from './icons/IconCircleArrowDownRightFilled.mjs';\nexport { default as IconCircleArrowDownFilled } from './icons/IconCircleArrowDownFilled.mjs';\nexport { default as IconCircleArrowLeftFilled } from './icons/IconCircleArrowLeftFilled.mjs';\nexport { default as IconCircleArrowRightFilled } from './icons/IconCircleArrowRightFilled.mjs';\nexport { default as IconCircleArrowUpLeftFilled } from './icons/IconCircleArrowUpLeftFilled.mjs';\nexport { default as IconCircleArrowUpRightFilled } from './icons/IconCircleArrowUpRightFilled.mjs';\nexport { default as IconCircleArrowUpFilled } from './icons/IconCircleArrowUpFilled.mjs';\nexport { default as IconCircleCaretDownFilled } from './icons/IconCircleCaretDownFilled.mjs';\nexport { default as IconCircleCaretLeftFilled } from './icons/IconCircleCaretLeftFilled.mjs';\nexport { default as IconCircleCaretRightFilled } from './icons/IconCircleCaretRightFilled.mjs';\nexport { default as IconCircleCaretUpFilled } from './icons/IconCircleCaretUpFilled.mjs';\nexport { default as IconCircleCheckFilled } from './icons/IconCircleCheckFilled.mjs';\nexport { default as IconCircleChevronDownFilled } from './icons/IconCircleChevronDownFilled.mjs';\nexport { default as IconCircleChevronLeftFilled } from './icons/IconCircleChevronLeftFilled.mjs';\nexport { default as IconCircleChevronRightFilled } from './icons/IconCircleChevronRightFilled.mjs';\nexport { default as IconCircleChevronUpFilled } from './icons/IconCircleChevronUpFilled.mjs';\nexport { default as IconCircleChevronsDownFilled } from './icons/IconCircleChevronsDownFilled.mjs';\nexport { default as IconCircleChevronsLeftFilled } from './icons/IconCircleChevronsLeftFilled.mjs';\nexport { default as IconCircleChevronsRightFilled } from './icons/IconCircleChevronsRightFilled.mjs';\nexport { default as IconCircleChevronsUpFilled } from './icons/IconCircleChevronsUpFilled.mjs';\nexport { default as IconCircleDotFilled } from './icons/IconCircleDotFilled.mjs';\nexport { default as IconCircleKeyFilled } from './icons/IconCircleKeyFilled.mjs';\nexport { default as IconCircleLetterAFilled } from './icons/IconCircleLetterAFilled.mjs';\nexport { default as IconCircleLetterBFilled } from './icons/IconCircleLetterBFilled.mjs';\nexport { default as IconCircleLetterCFilled } from './icons/IconCircleLetterCFilled.mjs';\nexport { default as IconCircleLetterDFilled } from './icons/IconCircleLetterDFilled.mjs';\nexport { default as IconCircleLetterEFilled } from './icons/IconCircleLetterEFilled.mjs';\nexport { default as IconCircleLetterFFilled } from './icons/IconCircleLetterFFilled.mjs';\nexport { default as IconCircleLetterGFilled } from './icons/IconCircleLetterGFilled.mjs';\nexport { default as IconCircleLetterHFilled } from './icons/IconCircleLetterHFilled.mjs';\nexport { default as IconCircleLetterIFilled } from './icons/IconCircleLetterIFilled.mjs';\nexport { default as IconCircleLetterJFilled } from './icons/IconCircleLetterJFilled.mjs';\nexport { default as IconCircleLetterKFilled } from './icons/IconCircleLetterKFilled.mjs';\nexport { default as IconCircleLetterLFilled } from './icons/IconCircleLetterLFilled.mjs';\nexport { default as IconCircleLetterMFilled } from './icons/IconCircleLetterMFilled.mjs';\nexport { default as IconCircleLetterNFilled } from './icons/IconCircleLetterNFilled.mjs';\nexport { default as IconCircleLetterOFilled } from './icons/IconCircleLetterOFilled.mjs';\nexport { default as IconCircleLetterPFilled } from './icons/IconCircleLetterPFilled.mjs';\nexport { default as IconCircleLetterQFilled } from './icons/IconCircleLetterQFilled.mjs';\nexport { default as IconCircleLetterRFilled } from './icons/IconCircleLetterRFilled.mjs';\nexport { default as IconCircleLetterSFilled } from './icons/IconCircleLetterSFilled.mjs';\nexport { default as IconCircleLetterTFilled } from './icons/IconCircleLetterTFilled.mjs';\nexport { default as IconCircleLetterUFilled } from './icons/IconCircleLetterUFilled.mjs';\nexport { default as IconCircleLetterVFilled } from './icons/IconCircleLetterVFilled.mjs';\nexport { default as IconCircleLetterWFilled } from './icons/IconCircleLetterWFilled.mjs';\nexport { default as IconCircleLetterXFilled } from './icons/IconCircleLetterXFilled.mjs';\nexport { default as IconCircleLetterYFilled } from './icons/IconCircleLetterYFilled.mjs';\nexport { default as IconCircleLetterZFilled } from './icons/IconCircleLetterZFilled.mjs';\nexport { default as IconCircleNumber0Filled } from './icons/IconCircleNumber0Filled.mjs';\nexport { default as IconCircleNumber1Filled } from './icons/IconCircleNumber1Filled.mjs';\nexport { default as IconCircleNumber2Filled } from './icons/IconCircleNumber2Filled.mjs';\nexport { default as IconCircleNumber3Filled } from './icons/IconCircleNumber3Filled.mjs';\nexport { default as IconCircleNumber4Filled } from './icons/IconCircleNumber4Filled.mjs';\nexport { default as IconCircleNumber5Filled } from './icons/IconCircleNumber5Filled.mjs';\nexport { default as IconCircleNumber6Filled } from './icons/IconCircleNumber6Filled.mjs';\nexport { default as IconCircleNumber7Filled } from './icons/IconCircleNumber7Filled.mjs';\nexport { default as IconCircleNumber8Filled } from './icons/IconCircleNumber8Filled.mjs';\nexport { default as IconCircleNumber9Filled } from './icons/IconCircleNumber9Filled.mjs';\nexport { default as IconCirclePercentageFilled } from './icons/IconCirclePercentageFilled.mjs';\nexport { default as IconCirclePlusFilled } from './icons/IconCirclePlusFilled.mjs';\nexport { default as IconCircleRectangleFilled } from './icons/IconCircleRectangleFilled.mjs';\nexport { default as IconCircleXFilled } from './icons/IconCircleXFilled.mjs';\nexport { default as IconCircleFilled } from './icons/IconCircleFilled.mjs';\nexport { default as IconCirclesFilled } from './icons/IconCirclesFilled.mjs';\nexport { default as IconClickFilled } from './icons/IconClickFilled.mjs';\nexport { default as IconClipboardCheckFilled } from './icons/IconClipboardCheckFilled.mjs';\nexport { default as IconClipboardDataFilled } from './icons/IconClipboardDataFilled.mjs';\nexport { default as IconClipboardListFilled } from './icons/IconClipboardListFilled.mjs';\nexport { default as IconClipboardPlusFilled } from './icons/IconClipboardPlusFilled.mjs';\nexport { default as IconClipboardSmileFilled } from './icons/IconClipboardSmileFilled.mjs';\nexport { default as IconClipboardTextFilled } from './icons/IconClipboardTextFilled.mjs';\nexport { default as IconClipboardTypographyFilled } from './icons/IconClipboardTypographyFilled.mjs';\nexport { default as IconClipboardXFilled } from './icons/IconClipboardXFilled.mjs';\nexport { default as IconClipboardFilled } from './icons/IconClipboardFilled.mjs';\nexport { default as IconClockHour1Filled } from './icons/IconClockHour1Filled.mjs';\nexport { default as IconClockHour10Filled } from './icons/IconClockHour10Filled.mjs';\nexport { default as IconClockHour11Filled } from './icons/IconClockHour11Filled.mjs';\nexport { default as IconClockHour12Filled } from './icons/IconClockHour12Filled.mjs';\nexport { default as IconClockHour2Filled } from './icons/IconClockHour2Filled.mjs';\nexport { default as IconClockHour3Filled } from './icons/IconClockHour3Filled.mjs';\nexport { default as IconClockHour4Filled } from './icons/IconClockHour4Filled.mjs';\nexport { default as IconClockHour5Filled } from './icons/IconClockHour5Filled.mjs';\nexport { default as IconClockHour6Filled } from './icons/IconClockHour6Filled.mjs';\nexport { default as IconClockHour7Filled } from './icons/IconClockHour7Filled.mjs';\nexport { default as IconClockHour8Filled } from './icons/IconClockHour8Filled.mjs';\nexport { default as IconClockHour9Filled } from './icons/IconClockHour9Filled.mjs';\nexport { default as IconClockFilled } from './icons/IconClockFilled.mjs';\nexport { default as IconCloudComputingFilled } from './icons/IconCloudComputingFilled.mjs';\nexport { default as IconCloudDataConnectionFilled } from './icons/IconCloudDataConnectionFilled.mjs';\nexport { default as IconCloudFilled } from './icons/IconCloudFilled.mjs';\nexport { default as IconCloverFilled } from './icons/IconCloverFilled.mjs';\nexport { default as IconClubsFilled } from './icons/IconClubsFilled.mjs';\nexport { default as IconCodeCircle2Filled } from './icons/IconCodeCircle2Filled.mjs';\nexport { default as IconCodeCircleFilled } from './icons/IconCodeCircleFilled.mjs';\nexport { default as IconCoinBitcoinFilled } from './icons/IconCoinBitcoinFilled.mjs';\nexport { default as IconCoinEuroFilled } from './icons/IconCoinEuroFilled.mjs';\nexport { default as IconCoinMoneroFilled } from './icons/IconCoinMoneroFilled.mjs';\nexport { default as IconCoinPoundFilled } from './icons/IconCoinPoundFilled.mjs';\nexport { default as IconCoinRupeeFilled } from './icons/IconCoinRupeeFilled.mjs';\nexport { default as IconCoinTakaFilled } from './icons/IconCoinTakaFilled.mjs';\nexport { default as IconCoinYenFilled } from './icons/IconCoinYenFilled.mjs';\nexport { default as IconCoinYuanFilled } from './icons/IconCoinYuanFilled.mjs';\nexport { default as IconCoinFilled } from './icons/IconCoinFilled.mjs';\nexport { default as IconColumns1Filled } from './icons/IconColumns1Filled.mjs';\nexport { default as IconColumns2Filled } from './icons/IconColumns2Filled.mjs';\nexport { default as IconColumns3Filled } from './icons/IconColumns3Filled.mjs';\nexport { default as IconCompassFilled } from './icons/IconCompassFilled.mjs';\nexport { default as IconCone2Filled } from './icons/IconCone2Filled.mjs';\nexport { default as IconConeFilled } from './icons/IconConeFilled.mjs';\nexport { default as IconConfettiFilled } from './icons/IconConfettiFilled.mjs';\nexport { default as IconContainerFilled } from './icons/IconContainerFilled.mjs';\nexport { default as IconContrast2Filled } from './icons/IconContrast2Filled.mjs';\nexport { default as IconContrastFilled } from './icons/IconContrastFilled.mjs';\nexport { default as IconCookieManFilled } from './icons/IconCookieManFilled.mjs';\nexport { default as IconCookieFilled } from './icons/IconCookieFilled.mjs';\nexport { default as IconCopyCheckFilled } from './icons/IconCopyCheckFilled.mjs';\nexport { default as IconCopyMinusFilled } from './icons/IconCopyMinusFilled.mjs';\nexport { default as IconCopyPlusFilled } from './icons/IconCopyPlusFilled.mjs';\nexport { default as IconCopyXFilled } from './icons/IconCopyXFilled.mjs';\nexport { default as IconCopyFilled } from './icons/IconCopyFilled.mjs';\nexport { default as IconCopyleftFilled } from './icons/IconCopyleftFilled.mjs';\nexport { default as IconCopyrightFilled } from './icons/IconCopyrightFilled.mjs';\nexport { default as IconCreditCardFilled } from './icons/IconCreditCardFilled.mjs';\nexport { default as IconCrop11Filled } from './icons/IconCrop11Filled.mjs';\nexport { default as IconCrop169Filled } from './icons/IconCrop169Filled.mjs';\nexport { default as IconCrop32Filled } from './icons/IconCrop32Filled.mjs';\nexport { default as IconCrop54Filled } from './icons/IconCrop54Filled.mjs';\nexport { default as IconCrop75Filled } from './icons/IconCrop75Filled.mjs';\nexport { default as IconCropLandscapeFilled } from './icons/IconCropLandscapeFilled.mjs';\nexport { default as IconCropPortraitFilled } from './icons/IconCropPortraitFilled.mjs';\nexport { default as IconCrossFilled } from './icons/IconCrossFilled.mjs';\nexport { default as IconCrownFilled } from './icons/IconCrownFilled.mjs';\nexport { default as IconCurrentLocationFilled } from './icons/IconCurrentLocationFilled.mjs';\nexport { default as IconDashboardFilled } from './icons/IconDashboardFilled.mjs';\nexport { default as IconDatabaseFilled } from './icons/IconDatabaseFilled.mjs';\nexport { default as IconDeviceCctvFilled } from './icons/IconDeviceCctvFilled.mjs';\nexport { default as IconDeviceDesktopFilled } from './icons/IconDeviceDesktopFilled.mjs';\nexport { default as IconDeviceFloppyFilled } from './icons/IconDeviceFloppyFilled.mjs';\nexport { default as IconDeviceGamepad2Filled } from './icons/IconDeviceGamepad2Filled.mjs';\nexport { default as IconDeviceGamepad3Filled } from './icons/IconDeviceGamepad3Filled.mjs';\nexport { default as IconDeviceGamepadFilled } from './icons/IconDeviceGamepadFilled.mjs';\nexport { default as IconDeviceHeartMonitorFilled } from './icons/IconDeviceHeartMonitorFilled.mjs';\nexport { default as IconDeviceImacFilled } from './icons/IconDeviceImacFilled.mjs';\nexport { default as IconDeviceIpadFilled } from './icons/IconDeviceIpadFilled.mjs';\nexport { default as IconDeviceMobileFilled } from './icons/IconDeviceMobileFilled.mjs';\nexport { default as IconDeviceRemoteFilled } from './icons/IconDeviceRemoteFilled.mjs';\nexport { default as IconDeviceSpeakerFilled } from './icons/IconDeviceSpeakerFilled.mjs';\nexport { default as IconDeviceTabletFilled } from './icons/IconDeviceTabletFilled.mjs';\nexport { default as IconDeviceTvOldFilled } from './icons/IconDeviceTvOldFilled.mjs';\nexport { default as IconDeviceTvFilled } from './icons/IconDeviceTvFilled.mjs';\nexport { default as IconDeviceUnknownFilled } from './icons/IconDeviceUnknownFilled.mjs';\nexport { default as IconDeviceUsbFilled } from './icons/IconDeviceUsbFilled.mjs';\nexport { default as IconDeviceVisionProFilled } from './icons/IconDeviceVisionProFilled.mjs';\nexport { default as IconDeviceWatchFilled } from './icons/IconDeviceWatchFilled.mjs';\nexport { default as IconDialpadFilled } from './icons/IconDialpadFilled.mjs';\nexport { default as IconDiamondFilled } from './icons/IconDiamondFilled.mjs';\nexport { default as IconDiamondsFilled } from './icons/IconDiamondsFilled.mjs';\nexport { default as IconDice1Filled } from './icons/IconDice1Filled.mjs';\nexport { default as IconDice2Filled } from './icons/IconDice2Filled.mjs';\nexport { default as IconDice3Filled } from './icons/IconDice3Filled.mjs';\nexport { default as IconDice4Filled } from './icons/IconDice4Filled.mjs';\nexport { default as IconDice5Filled } from './icons/IconDice5Filled.mjs';\nexport { default as IconDice6Filled } from './icons/IconDice6Filled.mjs';\nexport { default as IconDiceFilled } from './icons/IconDiceFilled.mjs';\nexport { default as IconDirectionArrowsFilled } from './icons/IconDirectionArrowsFilled.mjs';\nexport { default as IconDirectionSignFilled } from './icons/IconDirectionSignFilled.mjs';\nexport { default as IconDirectionsFilled } from './icons/IconDirectionsFilled.mjs';\nexport { default as IconDiscFilled } from './icons/IconDiscFilled.mjs';\nexport { default as IconDiscountFilled } from './icons/IconDiscountFilled.mjs';\nexport { default as IconDotsVerticalFilled } from './icons/IconDotsVerticalFilled.mjs';\nexport { default as IconDotsFilled } from './icons/IconDotsFilled.mjs';\nexport { default as IconDownloadFilled } from './icons/IconDownloadFilled.mjs';\nexport { default as IconDropCircleFilled } from './icons/IconDropCircleFilled.mjs';\nexport { default as IconDropletHalf2Filled } from './icons/IconDropletHalf2Filled.mjs';\nexport { default as IconDropletHalfFilled } from './icons/IconDropletHalfFilled.mjs';\nexport { default as IconDropletFilled } from './icons/IconDropletFilled.mjs';\nexport { default as IconDropletsFilled } from './icons/IconDropletsFilled.mjs';\nexport { default as IconDualScreenFilled } from './icons/IconDualScreenFilled.mjs';\nexport { default as IconDumplingFilled } from './icons/IconDumplingFilled.mjs';\nexport { default as IconEaseInControlPointFilled } from './icons/IconEaseInControlPointFilled.mjs';\nexport { default as IconEaseInOutControlPointsFilled } from './icons/IconEaseInOutControlPointsFilled.mjs';\nexport { default as IconEaseOutControlPointFilled } from './icons/IconEaseOutControlPointFilled.mjs';\nexport { default as IconEditFilled } from './icons/IconEditFilled.mjs';\nexport { default as IconEggCrackedFilled } from './icons/IconEggCrackedFilled.mjs';\nexport { default as IconEggFriedFilled } from './icons/IconEggFriedFilled.mjs';\nexport { default as IconEggFilled } from './icons/IconEggFilled.mjs';\nexport { default as IconElevatorFilled } from './icons/IconElevatorFilled.mjs';\nexport { default as IconEngineFilled } from './icons/IconEngineFilled.mjs';\nexport { default as IconEscalatorDownFilled } from './icons/IconEscalatorDownFilled.mjs';\nexport { default as IconEscalatorUpFilled } from './icons/IconEscalatorUpFilled.mjs';\nexport { default as IconEscalatorFilled } from './icons/IconEscalatorFilled.mjs';\nexport { default as IconExchangeFilled } from './icons/IconExchangeFilled.mjs';\nexport { default as IconExclamationCircleFilled } from './icons/IconExclamationCircleFilled.mjs';\nexport { default as IconExplicitFilled } from './icons/IconExplicitFilled.mjs';\nexport { default as IconExposureFilled } from './icons/IconExposureFilled.mjs';\nexport { default as IconExternalLinkFilled } from './icons/IconExternalLinkFilled.mjs';\nexport { default as IconEyeTableFilled } from './icons/IconEyeTableFilled.mjs';\nexport { default as IconEyeFilled } from './icons/IconEyeFilled.mjs';\nexport { default as IconEyeglass2Filled } from './icons/IconEyeglass2Filled.mjs';\nexport { default as IconEyeglassFilled } from './icons/IconEyeglassFilled.mjs';\nexport { default as IconFaceMaskFilled } from './icons/IconFaceMaskFilled.mjs';\nexport { default as IconFaviconFilled } from './icons/IconFaviconFilled.mjs';\nexport { default as IconFeatherFilled } from './icons/IconFeatherFilled.mjs';\nexport { default as IconFenceFilled } from './icons/IconFenceFilled.mjs';\nexport { default as IconFerryFilled } from './icons/IconFerryFilled.mjs';\nexport { default as IconFidgetSpinnerFilled } from './icons/IconFidgetSpinnerFilled.mjs';\nexport { default as IconFileAnalyticsFilled } from './icons/IconFileAnalyticsFilled.mjs';\nexport { default as IconFileCheckFilled } from './icons/IconFileCheckFilled.mjs';\nexport { default as IconFileCode2Filled } from './icons/IconFileCode2Filled.mjs';\nexport { default as IconFileCodeFilled } from './icons/IconFileCodeFilled.mjs';\nexport { default as IconFileCvFilled } from './icons/IconFileCvFilled.mjs';\nexport { default as IconFileDeltaFilled } from './icons/IconFileDeltaFilled.mjs';\nexport { default as IconFileDescriptionFilled } from './icons/IconFileDescriptionFilled.mjs';\nexport { default as IconFileDiffFilled } from './icons/IconFileDiffFilled.mjs';\nexport { default as IconFileDigitFilled } from './icons/IconFileDigitFilled.mjs';\nexport { default as IconFileDollarFilled } from './icons/IconFileDollarFilled.mjs';\nexport { default as IconFileDotsFilled } from './icons/IconFileDotsFilled.mjs';\nexport { default as IconFileDownloadFilled } from './icons/IconFileDownloadFilled.mjs';\nexport { default as IconFileEuroFilled } from './icons/IconFileEuroFilled.mjs';\nexport { default as IconFileFunctionFilled } from './icons/IconFileFunctionFilled.mjs';\nexport { default as IconFileHorizontalFilled } from './icons/IconFileHorizontalFilled.mjs';\nexport { default as IconFileInfoFilled } from './icons/IconFileInfoFilled.mjs';\nexport { default as IconFileInvoiceFilled } from './icons/IconFileInvoiceFilled.mjs';\nexport { default as IconFileLambdaFilled } from './icons/IconFileLambdaFilled.mjs';\nexport { default as IconFileMinusFilled } from './icons/IconFileMinusFilled.mjs';\nexport { default as IconFileMusicFilled } from './icons/IconFileMusicFilled.mjs';\nexport { default as IconFileNeutralFilled } from './icons/IconFileNeutralFilled.mjs';\nexport { default as IconFilePencilFilled } from './icons/IconFilePencilFilled.mjs';\nexport { default as IconFilePercentFilled } from './icons/IconFilePercentFilled.mjs';\nexport { default as IconFilePhoneFilled } from './icons/IconFilePhoneFilled.mjs';\nexport { default as IconFilePowerFilled } from './icons/IconFilePowerFilled.mjs';\nexport { default as IconFileRssFilled } from './icons/IconFileRssFilled.mjs';\nexport { default as IconFileSadFilled } from './icons/IconFileSadFilled.mjs';\nexport { default as IconFileScissorsFilled } from './icons/IconFileScissorsFilled.mjs';\nexport { default as IconFileSettingsFilled } from './icons/IconFileSettingsFilled.mjs';\nexport { default as IconFileSignalFilled } from './icons/IconFileSignalFilled.mjs';\nexport { default as IconFileSmileFilled } from './icons/IconFileSmileFilled.mjs';\nexport { default as IconFileStarFilled } from './icons/IconFileStarFilled.mjs';\nexport { default as IconFileTextFilled } from './icons/IconFileTextFilled.mjs';\nexport { default as IconFileTimeFilled } from './icons/IconFileTimeFilled.mjs';\nexport { default as IconFileTypographyFilled } from './icons/IconFileTypographyFilled.mjs';\nexport { default as IconFileUnknownFilled } from './icons/IconFileUnknownFilled.mjs';\nexport { default as IconFileUploadFilled } from './icons/IconFileUploadFilled.mjs';\nexport { default as IconFileVectorFilled } from './icons/IconFileVectorFilled.mjs';\nexport { default as IconFileXFilled } from './icons/IconFileXFilled.mjs';\nexport { default as IconFileFilled } from './icons/IconFileFilled.mjs';\nexport { default as IconFilesFilled } from './icons/IconFilesFilled.mjs';\nexport { default as IconFilterFilled } from './icons/IconFilterFilled.mjs';\nexport { default as IconFiltersFilled } from './icons/IconFiltersFilled.mjs';\nexport { default as IconFishBoneFilled } from './icons/IconFishBoneFilled.mjs';\nexport { default as IconFlag2Filled } from './icons/IconFlag2Filled.mjs';\nexport { default as IconFlag3Filled } from './icons/IconFlag3Filled.mjs';\nexport { default as IconFlagFilled } from './icons/IconFlagFilled.mjs';\nexport { default as IconFlameFilled } from './icons/IconFlameFilled.mjs';\nexport { default as IconFlareFilled } from './icons/IconFlareFilled.mjs';\nexport { default as IconFlask2Filled } from './icons/IconFlask2Filled.mjs';\nexport { default as IconFlaskFilled } from './icons/IconFlaskFilled.mjs';\nexport { default as IconFlowerFilled } from './icons/IconFlowerFilled.mjs';\nexport { default as IconFolderOpenFilled } from './icons/IconFolderOpenFilled.mjs';\nexport { default as IconFolderFilled } from './icons/IconFolderFilled.mjs';\nexport { default as IconFoldersFilled } from './icons/IconFoldersFilled.mjs';\nexport { default as IconForbid2Filled } from './icons/IconForbid2Filled.mjs';\nexport { default as IconForbidFilled } from './icons/IconForbidFilled.mjs';\nexport { default as IconFountainFilled } from './icons/IconFountainFilled.mjs';\nexport { default as IconFunctionFilled } from './icons/IconFunctionFilled.mjs';\nexport { default as IconGardenCartFilled } from './icons/IconGardenCartFilled.mjs';\nexport { default as IconGasStationFilled } from './icons/IconGasStationFilled.mjs';\nexport { default as IconGaugeFilled } from './icons/IconGaugeFilled.mjs';\nexport { default as IconGhost2Filled } from './icons/IconGhost2Filled.mjs';\nexport { default as IconGhost3Filled } from './icons/IconGhost3Filled.mjs';\nexport { default as IconGhostFilled } from './icons/IconGhostFilled.mjs';\nexport { default as IconGiftCardFilled } from './icons/IconGiftCardFilled.mjs';\nexport { default as IconGiftFilled } from './icons/IconGiftFilled.mjs';\nexport { default as IconGlassFullFilled } from './icons/IconGlassFullFilled.mjs';\nexport { default as IconGlassFilled } from './icons/IconGlassFilled.mjs';\nexport { default as IconGlobeFilled } from './icons/IconGlobeFilled.mjs';\nexport { default as IconGolfFilled } from './icons/IconGolfFilled.mjs';\nexport { default as IconGpsFilled } from './icons/IconGpsFilled.mjs';\nexport { default as IconGraphFilled } from './icons/IconGraphFilled.mjs';\nexport { default as IconGridPatternFilled } from './icons/IconGridPatternFilled.mjs';\nexport { default as IconGuitarPickFilled } from './icons/IconGuitarPickFilled.mjs';\nexport { default as IconHanger2Filled } from './icons/IconHanger2Filled.mjs';\nexport { default as IconHeadphonesFilled } from './icons/IconHeadphonesFilled.mjs';\nexport { default as IconHeadsetFilled } from './icons/IconHeadsetFilled.mjs';\nexport { default as IconHeartBrokenFilled } from './icons/IconHeartBrokenFilled.mjs';\nexport { default as IconHeartFilled } from './icons/IconHeartFilled.mjs';\nexport { default as IconHelicopterLandingFilled } from './icons/IconHelicopterLandingFilled.mjs';\nexport { default as IconHelicopterFilled } from './icons/IconHelicopterFilled.mjs';\nexport { default as IconHelpCircleFilled } from './icons/IconHelpCircleFilled.mjs';\nexport { default as IconHelpHexagonFilled } from './icons/IconHelpHexagonFilled.mjs';\nexport { default as IconHelpOctagonFilled } from './icons/IconHelpOctagonFilled.mjs';\nexport { default as IconHelpSquareRoundedFilled } from './icons/IconHelpSquareRoundedFilled.mjs';\nexport { default as IconHelpSquareFilled } from './icons/IconHelpSquareFilled.mjs';\nexport { default as IconHelpTriangleFilled } from './icons/IconHelpTriangleFilled.mjs';\nexport { default as IconHelpFilled } from './icons/IconHelpFilled.mjs';\nexport { default as IconHexagonLetterAFilled } from './icons/IconHexagonLetterAFilled.mjs';\nexport { default as IconHexagonLetterBFilled } from './icons/IconHexagonLetterBFilled.mjs';\nexport { default as IconHexagonLetterCFilled } from './icons/IconHexagonLetterCFilled.mjs';\nexport { default as IconHexagonLetterDFilled } from './icons/IconHexagonLetterDFilled.mjs';\nexport { default as IconHexagonLetterEFilled } from './icons/IconHexagonLetterEFilled.mjs';\nexport { default as IconHexagonLetterFFilled } from './icons/IconHexagonLetterFFilled.mjs';\nexport { default as IconHexagonLetterGFilled } from './icons/IconHexagonLetterGFilled.mjs';\nexport { default as IconHexagonLetterHFilled } from './icons/IconHexagonLetterHFilled.mjs';\nexport { default as IconHexagonLetterIFilled } from './icons/IconHexagonLetterIFilled.mjs';\nexport { default as IconHexagonLetterJFilled } from './icons/IconHexagonLetterJFilled.mjs';\nexport { default as IconHexagonLetterKFilled } from './icons/IconHexagonLetterKFilled.mjs';\nexport { default as IconHexagonLetterLFilled } from './icons/IconHexagonLetterLFilled.mjs';\nexport { default as IconHexagonLetterMFilled } from './icons/IconHexagonLetterMFilled.mjs';\nexport { default as IconHexagonLetterNFilled } from './icons/IconHexagonLetterNFilled.mjs';\nexport { default as IconHexagonLetterOFilled } from './icons/IconHexagonLetterOFilled.mjs';\nexport { default as IconHexagonLetterPFilled } from './icons/IconHexagonLetterPFilled.mjs';\nexport { default as IconHexagonLetterQFilled } from './icons/IconHexagonLetterQFilled.mjs';\nexport { default as IconHexagonLetterRFilled } from './icons/IconHexagonLetterRFilled.mjs';\nexport { default as IconHexagonLetterSFilled } from './icons/IconHexagonLetterSFilled.mjs';\nexport { default as IconHexagonLetterTFilled } from './icons/IconHexagonLetterTFilled.mjs';\nexport { default as IconHexagonLetterUFilled } from './icons/IconHexagonLetterUFilled.mjs';\nexport { default as IconHexagonLetterVFilled } from './icons/IconHexagonLetterVFilled.mjs';\nexport { default as IconHexagonLetterWFilled } from './icons/IconHexagonLetterWFilled.mjs';\nexport { default as IconHexagonLetterXFilled } from './icons/IconHexagonLetterXFilled.mjs';\nexport { default as IconHexagonLetterYFilled } from './icons/IconHexagonLetterYFilled.mjs';\nexport { default as IconHexagonLetterZFilled } from './icons/IconHexagonLetterZFilled.mjs';\nexport { default as IconHexagonMinusFilled } from './icons/IconHexagonMinusFilled.mjs';\nexport { default as IconHexagonNumber0Filled } from './icons/IconHexagonNumber0Filled.mjs';\nexport { default as IconHexagonNumber1Filled } from './icons/IconHexagonNumber1Filled.mjs';\nexport { default as IconHexagonNumber2Filled } from './icons/IconHexagonNumber2Filled.mjs';\nexport { default as IconHexagonNumber3Filled } from './icons/IconHexagonNumber3Filled.mjs';\nexport { default as IconHexagonNumber4Filled } from './icons/IconHexagonNumber4Filled.mjs';\nexport { default as IconHexagonNumber5Filled } from './icons/IconHexagonNumber5Filled.mjs';\nexport { default as IconHexagonNumber6Filled } from './icons/IconHexagonNumber6Filled.mjs';\nexport { default as IconHexagonNumber7Filled } from './icons/IconHexagonNumber7Filled.mjs';\nexport { default as IconHexagonNumber8Filled } from './icons/IconHexagonNumber8Filled.mjs';\nexport { default as IconHexagonNumber9Filled } from './icons/IconHexagonNumber9Filled.mjs';\nexport { default as IconHexagonPlusFilled } from './icons/IconHexagonPlusFilled.mjs';\nexport { default as IconHexagonFilled } from './icons/IconHexagonFilled.mjs';\nexport { default as IconHome2Filled } from './icons/IconHome2Filled.mjs';\nexport { default as IconHomeFilled } from './icons/IconHomeFilled.mjs';\nexport { default as IconHospitalCircleFilled } from './icons/IconHospitalCircleFilled.mjs';\nexport { default as IconHourglassFilled } from './icons/IconHourglassFilled.mjs';\nexport { default as IconIconsFilled } from './icons/IconIconsFilled.mjs';\nexport { default as IconIdFilled } from './icons/IconIdFilled.mjs';\nexport { default as IconInfoCircleFilled } from './icons/IconInfoCircleFilled.mjs';\nexport { default as IconInfoHexagonFilled } from './icons/IconInfoHexagonFilled.mjs';\nexport { default as IconInfoOctagonFilled } from './icons/IconInfoOctagonFilled.mjs';\nexport { default as IconInfoSquareRoundedFilled } from './icons/IconInfoSquareRoundedFilled.mjs';\nexport { default as IconInfoSquareFilled } from './icons/IconInfoSquareFilled.mjs';\nexport { default as IconInfoTriangleFilled } from './icons/IconInfoTriangleFilled.mjs';\nexport { default as IconInnerShadowBottomLeftFilled } from './icons/IconInnerShadowBottomLeftFilled.mjs';\nexport { default as IconInnerShadowBottomRightFilled } from './icons/IconInnerShadowBottomRightFilled.mjs';\nexport { default as IconInnerShadowBottomFilled } from './icons/IconInnerShadowBottomFilled.mjs';\nexport { default as IconInnerShadowLeftFilled } from './icons/IconInnerShadowLeftFilled.mjs';\nexport { default as IconInnerShadowRightFilled } from './icons/IconInnerShadowRightFilled.mjs';\nexport { default as IconInnerShadowTopLeftFilled } from './icons/IconInnerShadowTopLeftFilled.mjs';\nexport { default as IconInnerShadowTopRightFilled } from './icons/IconInnerShadowTopRightFilled.mjs';\nexport { default as IconInnerShadowTopFilled } from './icons/IconInnerShadowTopFilled.mjs';\nexport { default as IconIroning1Filled } from './icons/IconIroning1Filled.mjs';\nexport { default as IconIroning2Filled } from './icons/IconIroning2Filled.mjs';\nexport { default as IconIroning3Filled } from './icons/IconIroning3Filled.mjs';\nexport { default as IconIroningSteamFilled } from './icons/IconIroningSteamFilled.mjs';\nexport { default as IconIroningFilled } from './icons/IconIroningFilled.mjs';\nexport { default as IconJetpackFilled } from './icons/IconJetpackFilled.mjs';\nexport { default as IconJewishStarFilled } from './icons/IconJewishStarFilled.mjs';\nexport { default as IconKeyFilled } from './icons/IconKeyFilled.mjs';\nexport { default as IconKeyboardFilled } from './icons/IconKeyboardFilled.mjs';\nexport { default as IconKeyframeAlignCenterFilled } from './icons/IconKeyframeAlignCenterFilled.mjs';\nexport { default as IconKeyframeAlignHorizontalFilled } from './icons/IconKeyframeAlignHorizontalFilled.mjs';\nexport { default as IconKeyframeAlignVerticalFilled } from './icons/IconKeyframeAlignVerticalFilled.mjs';\nexport { default as IconKeyframeFilled } from './icons/IconKeyframeFilled.mjs';\nexport { default as IconKeyframesFilled } from './icons/IconKeyframesFilled.mjs';\nexport { default as IconLabelImportantFilled } from './icons/IconLabelImportantFilled.mjs';\nexport { default as IconLabelFilled } from './icons/IconLabelFilled.mjs';\nexport { default as IconLassoPolygonFilled } from './icons/IconLassoPolygonFilled.mjs';\nexport { default as IconLaurelWreath1Filled } from './icons/IconLaurelWreath1Filled.mjs';\nexport { default as IconLaurelWreath2Filled } from './icons/IconLaurelWreath2Filled.mjs';\nexport { default as IconLaurelWreath3Filled } from './icons/IconLaurelWreath3Filled.mjs';\nexport { default as IconLaurelWreathFilled } from './icons/IconLaurelWreathFilled.mjs';\nexport { default as IconLayout2Filled } from './icons/IconLayout2Filled.mjs';\nexport { default as IconLayoutAlignBottomFilled } from './icons/IconLayoutAlignBottomFilled.mjs';\nexport { default as IconLayoutAlignCenterFilled } from './icons/IconLayoutAlignCenterFilled.mjs';\nexport { default as IconLayoutAlignLeftFilled } from './icons/IconLayoutAlignLeftFilled.mjs';\nexport { default as IconLayoutAlignMiddleFilled } from './icons/IconLayoutAlignMiddleFilled.mjs';\nexport { default as IconLayoutAlignRightFilled } from './icons/IconLayoutAlignRightFilled.mjs';\nexport { default as IconLayoutAlignTopFilled } from './icons/IconLayoutAlignTopFilled.mjs';\nexport { default as IconLayoutBoardSplitFilled } from './icons/IconLayoutBoardSplitFilled.mjs';\nexport { default as IconLayoutBoardFilled } from './icons/IconLayoutBoardFilled.mjs';\nexport { default as IconLayoutBottombarCollapseFilled } from './icons/IconLayoutBottombarCollapseFilled.mjs';\nexport { default as IconLayoutBottombarExpandFilled } from './icons/IconLayoutBottombarExpandFilled.mjs';\nexport { default as IconLayoutBottombarFilled } from './icons/IconLayoutBottombarFilled.mjs';\nexport { default as IconLayoutCardsFilled } from './icons/IconLayoutCardsFilled.mjs';\nexport { default as IconLayoutDashboardFilled } from './icons/IconLayoutDashboardFilled.mjs';\nexport { default as IconLayoutDistributeHorizontalFilled } from './icons/IconLayoutDistributeHorizontalFilled.mjs';\nexport { default as IconLayoutDistributeVerticalFilled } from './icons/IconLayoutDistributeVerticalFilled.mjs';\nexport { default as IconLayoutGridFilled } from './icons/IconLayoutGridFilled.mjs';\nexport { default as IconLayoutKanbanFilled } from './icons/IconLayoutKanbanFilled.mjs';\nexport { default as IconLayoutListFilled } from './icons/IconLayoutListFilled.mjs';\nexport { default as IconLayoutNavbarCollapseFilled } from './icons/IconLayoutNavbarCollapseFilled.mjs';\nexport { default as IconLayoutNavbarExpandFilled } from './icons/IconLayoutNavbarExpandFilled.mjs';\nexport { default as IconLayoutNavbarFilled } from './icons/IconLayoutNavbarFilled.mjs';\nexport { default as IconLayoutSidebarLeftCollapseFilled } from './icons/IconLayoutSidebarLeftCollapseFilled.mjs';\nexport { default as IconLayoutSidebarLeftExpandFilled } from './icons/IconLayoutSidebarLeftExpandFilled.mjs';\nexport { default as IconLayoutSidebarRightCollapseFilled } from './icons/IconLayoutSidebarRightCollapseFilled.mjs';\nexport { default as IconLayoutSidebarRightExpandFilled } from './icons/IconLayoutSidebarRightExpandFilled.mjs';\nexport { default as IconLayoutSidebarRightFilled } from './icons/IconLayoutSidebarRightFilled.mjs';\nexport { default as IconLayoutSidebarFilled } from './icons/IconLayoutSidebarFilled.mjs';\nexport { default as IconLayoutFilled } from './icons/IconLayoutFilled.mjs';\nexport { default as IconLeafFilled } from './icons/IconLeafFilled.mjs';\nexport { default as IconLegoFilled } from './icons/IconLegoFilled.mjs';\nexport { default as IconLemon2Filled } from './icons/IconLemon2Filled.mjs';\nexport { default as IconLibraryPlusFilled } from './icons/IconLibraryPlusFilled.mjs';\nexport { default as IconLibraryFilled } from './icons/IconLibraryFilled.mjs';\nexport { default as IconLifebuoyFilled } from './icons/IconLifebuoyFilled.mjs';\nexport { default as IconLinkFilled } from './icons/IconLinkFilled.mjs';\nexport { default as IconListCheckFilled } from './icons/IconListCheckFilled.mjs';\nexport { default as IconListDetailsFilled } from './icons/IconListDetailsFilled.mjs';\nexport { default as IconListFilled } from './icons/IconListFilled.mjs';\nexport { default as IconLivePhotoFilled } from './icons/IconLivePhotoFilled.mjs';\nexport { default as IconLiveViewFilled } from './icons/IconLiveViewFilled.mjs';\nexport { default as IconLocationFilled } from './icons/IconLocationFilled.mjs';\nexport { default as IconLockSquareRoundedFilled } from './icons/IconLockSquareRoundedFilled.mjs';\nexport { default as IconLockFilled } from './icons/IconLockFilled.mjs';\nexport { default as IconLungsFilled } from './icons/IconLungsFilled.mjs';\nexport { default as IconMacroFilled } from './icons/IconMacroFilled.mjs';\nexport { default as IconMagnetFilled } from './icons/IconMagnetFilled.mjs';\nexport { default as IconMailOpenedFilled } from './icons/IconMailOpenedFilled.mjs';\nexport { default as IconMailFilled } from './icons/IconMailFilled.mjs';\nexport { default as IconManFilled } from './icons/IconManFilled.mjs';\nexport { default as IconManualGearboxFilled } from './icons/IconManualGearboxFilled.mjs';\nexport { default as IconMapPinFilled } from './icons/IconMapPinFilled.mjs';\nexport { default as IconMedicalCrossFilled } from './icons/IconMedicalCrossFilled.mjs';\nexport { default as IconMeepleFilled } from './icons/IconMeepleFilled.mjs';\nexport { default as IconMelonFilled } from './icons/IconMelonFilled.mjs';\nexport { default as IconMenu2Filled } from './icons/IconMenu2Filled.mjs';\nexport { default as IconMessage2Filled } from './icons/IconMessage2Filled.mjs';\nexport { default as IconMessageChatbotFilled } from './icons/IconMessageChatbotFilled.mjs';\nexport { default as IconMessageReportFilled } from './icons/IconMessageReportFilled.mjs';\nexport { default as IconMessageFilled } from './icons/IconMessageFilled.mjs';\nexport { default as IconMessagesFilled } from './icons/IconMessagesFilled.mjs';\nexport { default as IconMeteorFilled } from './icons/IconMeteorFilled.mjs';\nexport { default as IconMichelinStarFilled } from './icons/IconMichelinStarFilled.mjs';\nexport { default as IconMickeyFilled } from './icons/IconMickeyFilled.mjs';\nexport { default as IconMicrophoneFilled } from './icons/IconMicrophoneFilled.mjs';\nexport { default as IconMicroscopeFilled } from './icons/IconMicroscopeFilled.mjs';\nexport { default as IconMicrowaveFilled } from './icons/IconMicrowaveFilled.mjs';\nexport { default as IconMilitaryRankFilled } from './icons/IconMilitaryRankFilled.mjs';\nexport { default as IconMilkFilled } from './icons/IconMilkFilled.mjs';\nexport { default as IconMoodAngryFilled } from './icons/IconMoodAngryFilled.mjs';\nexport { default as IconMoodConfuzedFilled } from './icons/IconMoodConfuzedFilled.mjs';\nexport { default as IconMoodCrazyHappyFilled } from './icons/IconMoodCrazyHappyFilled.mjs';\nexport { default as IconMoodEmptyFilled } from './icons/IconMoodEmptyFilled.mjs';\nexport { default as IconMoodHappyFilled } from './icons/IconMoodHappyFilled.mjs';\nexport { default as IconMoodKidFilled } from './icons/IconMoodKidFilled.mjs';\nexport { default as IconMoodNeutralFilled } from './icons/IconMoodNeutralFilled.mjs';\nexport { default as IconMoodSadFilled } from './icons/IconMoodSadFilled.mjs';\nexport { default as IconMoodSmileFilled } from './icons/IconMoodSmileFilled.mjs';\nexport { default as IconMoodWrrrFilled } from './icons/IconMoodWrrrFilled.mjs';\nexport { default as IconMoonFilled } from './icons/IconMoonFilled.mjs';\nexport { default as IconMotorbikeFilled } from './icons/IconMotorbikeFilled.mjs';\nexport { default as IconMountainFilled } from './icons/IconMountainFilled.mjs';\nexport { default as IconMouseFilled } from './icons/IconMouseFilled.mjs';\nexport { default as IconMugFilled } from './icons/IconMugFilled.mjs';\nexport { default as IconMushroomFilled } from './icons/IconMushroomFilled.mjs';\nexport { default as IconNavigationFilled } from './icons/IconNavigationFilled.mjs';\nexport { default as IconNurseFilled } from './icons/IconNurseFilled.mjs';\nexport { default as IconOctagonMinusFilled } from './icons/IconOctagonMinusFilled.mjs';\nexport { default as IconOctagonPlusFilled } from './icons/IconOctagonPlusFilled.mjs';\nexport { default as IconOctagonFilled } from './icons/IconOctagonFilled.mjs';\nexport { default as IconOvalVerticalFilled } from './icons/IconOvalVerticalFilled.mjs';\nexport { default as IconOvalFilled } from './icons/IconOvalFilled.mjs';\nexport { default as IconPacmanFilled } from './icons/IconPacmanFilled.mjs';\nexport { default as IconPaintFilled } from './icons/IconPaintFilled.mjs';\nexport { default as IconPaletteFilled } from './icons/IconPaletteFilled.mjs';\nexport { default as IconPanoramaHorizontalFilled } from './icons/IconPanoramaHorizontalFilled.mjs';\nexport { default as IconPanoramaVerticalFilled } from './icons/IconPanoramaVerticalFilled.mjs';\nexport { default as IconParkingCircleFilled } from './icons/IconParkingCircleFilled.mjs';\nexport { default as IconPawFilled } from './icons/IconPawFilled.mjs';\nexport { default as IconPencilFilled } from './icons/IconPencilFilled.mjs';\nexport { default as IconPennant2Filled } from './icons/IconPennant2Filled.mjs';\nexport { default as IconPennantFilled } from './icons/IconPennantFilled.mjs';\nexport { default as IconPentagonFilled } from './icons/IconPentagonFilled.mjs';\nexport { default as IconPhoneCallFilled } from './icons/IconPhoneCallFilled.mjs';\nexport { default as IconPhoneCallingFilled } from './icons/IconPhoneCallingFilled.mjs';\nexport { default as IconPhoneCheckFilled } from './icons/IconPhoneCheckFilled.mjs';\nexport { default as IconPhoneXFilled } from './icons/IconPhoneXFilled.mjs';\nexport { default as IconPhoneFilled } from './icons/IconPhoneFilled.mjs';\nexport { default as IconPhotoFilled } from './icons/IconPhotoFilled.mjs';\nexport { default as IconPictureInPictureTopFilled } from './icons/IconPictureInPictureTopFilled.mjs';\nexport { default as IconPictureInPictureFilled } from './icons/IconPictureInPictureFilled.mjs';\nexport { default as IconPigFilled } from './icons/IconPigFilled.mjs';\nexport { default as IconPillFilled } from './icons/IconPillFilled.mjs';\nexport { default as IconPinFilled } from './icons/IconPinFilled.mjs';\nexport { default as IconPinnedFilled } from './icons/IconPinnedFilled.mjs';\nexport { default as IconPizzaFilled } from './icons/IconPizzaFilled.mjs';\nexport { default as IconPlaneArrivalFilled } from './icons/IconPlaneArrivalFilled.mjs';\nexport { default as IconPlaneDepartureFilled } from './icons/IconPlaneDepartureFilled.mjs';\nexport { default as IconPlaneTiltFilled } from './icons/IconPlaneTiltFilled.mjs';\nexport { default as IconPlaneFilled } from './icons/IconPlaneFilled.mjs';\nexport { default as IconPlayCard1Filled } from './icons/IconPlayCard1Filled.mjs';\nexport { default as IconPlayCard10Filled } from './icons/IconPlayCard10Filled.mjs';\nexport { default as IconPlayCard2Filled } from './icons/IconPlayCard2Filled.mjs';\nexport { default as IconPlayCard3Filled } from './icons/IconPlayCard3Filled.mjs';\nexport { default as IconPlayCard4Filled } from './icons/IconPlayCard4Filled.mjs';\nexport { default as IconPlayCard5Filled } from './icons/IconPlayCard5Filled.mjs';\nexport { default as IconPlayCard6Filled } from './icons/IconPlayCard6Filled.mjs';\nexport { default as IconPlayCard7Filled } from './icons/IconPlayCard7Filled.mjs';\nexport { default as IconPlayCard8Filled } from './icons/IconPlayCard8Filled.mjs';\nexport { default as IconPlayCard9Filled } from './icons/IconPlayCard9Filled.mjs';\nexport { default as IconPlayCardAFilled } from './icons/IconPlayCardAFilled.mjs';\nexport { default as IconPlayCardJFilled } from './icons/IconPlayCardJFilled.mjs';\nexport { default as IconPlayCardKFilled } from './icons/IconPlayCardKFilled.mjs';\nexport { default as IconPlayCardQFilled } from './icons/IconPlayCardQFilled.mjs';\nexport { default as IconPlayCardStarFilled } from './icons/IconPlayCardStarFilled.mjs';\nexport { default as IconPlayCardFilled } from './icons/IconPlayCardFilled.mjs';\nexport { default as IconPlayerEjectFilled } from './icons/IconPlayerEjectFilled.mjs';\nexport { default as IconPlayerPauseFilled } from './icons/IconPlayerPauseFilled.mjs';\nexport { default as IconPlayerPlayFilled } from './icons/IconPlayerPlayFilled.mjs';\nexport { default as IconPlayerRecordFilled } from './icons/IconPlayerRecordFilled.mjs';\nexport { default as IconPlayerSkipBackFilled } from './icons/IconPlayerSkipBackFilled.mjs';\nexport { default as IconPlayerSkipForwardFilled } from './icons/IconPlayerSkipForwardFilled.mjs';\nexport { default as IconPlayerStopFilled } from './icons/IconPlayerStopFilled.mjs';\nexport { default as IconPlayerTrackNextFilled } from './icons/IconPlayerTrackNextFilled.mjs';\nexport { default as IconPlayerTrackPrevFilled } from './icons/IconPlayerTrackPrevFilled.mjs';\nexport { default as IconPlaylistFilled } from './icons/IconPlaylistFilled.mjs';\nexport { default as IconPlusFilled } from './icons/IconPlusFilled.mjs';\nexport { default as IconPointFilled } from './icons/IconPointFilled.mjs';\nexport { default as IconPointerFilled } from './icons/IconPointerFilled.mjs';\nexport { default as IconPolaroidFilled } from './icons/IconPolaroidFilled.mjs';\nexport { default as IconPooFilled } from './icons/IconPooFilled.mjs';\nexport { default as IconPresentationAnalyticsFilled } from './icons/IconPresentationAnalyticsFilled.mjs';\nexport { default as IconPresentationFilled } from './icons/IconPresentationFilled.mjs';\nexport { default as IconPuzzleFilled } from './icons/IconPuzzleFilled.mjs';\nexport { default as IconQuoteFilled } from './icons/IconQuoteFilled.mjs';\nexport { default as IconRadarFilled } from './icons/IconRadarFilled.mjs';\nexport { default as IconRadioactiveFilled } from './icons/IconRadioactiveFilled.mjs';\nexport { default as IconReceiptDollarFilled } from './icons/IconReceiptDollarFilled.mjs';\nexport { default as IconReceiptEuroFilled } from './icons/IconReceiptEuroFilled.mjs';\nexport { default as IconReceiptPoundFilled } from './icons/IconReceiptPoundFilled.mjs';\nexport { default as IconReceiptRupeeFilled } from './icons/IconReceiptRupeeFilled.mjs';\nexport { default as IconReceiptYenFilled } from './icons/IconReceiptYenFilled.mjs';\nexport { default as IconReceiptYuanFilled } from './icons/IconReceiptYuanFilled.mjs';\nexport { default as IconReceiptFilled } from './icons/IconReceiptFilled.mjs';\nexport { default as IconRectangleVerticalFilled } from './icons/IconRectangleVerticalFilled.mjs';\nexport { default as IconRectangleFilled } from './icons/IconRectangleFilled.mjs';\nexport { default as IconRegisteredFilled } from './icons/IconRegisteredFilled.mjs';\nexport { default as IconRelationManyToManyFilled } from './icons/IconRelationManyToManyFilled.mjs';\nexport { default as IconRelationOneToManyFilled } from './icons/IconRelationOneToManyFilled.mjs';\nexport { default as IconRelationOneToOneFilled } from './icons/IconRelationOneToOneFilled.mjs';\nexport { default as IconReplaceFilled } from './icons/IconReplaceFilled.mjs';\nexport { default as IconReportAnalyticsFilled } from './icons/IconReportAnalyticsFilled.mjs';\nexport { default as IconReportMoneyFilled } from './icons/IconReportMoneyFilled.mjs';\nexport { default as IconRollercoasterFilled } from './icons/IconRollercoasterFilled.mjs';\nexport { default as IconRosetteDiscountFilled } from './icons/IconRosetteDiscountFilled.mjs';\nexport { default as IconRosetteFilled } from './icons/IconRosetteFilled.mjs';\nexport { default as IconSaladFilled } from './icons/IconSaladFilled.mjs';\nexport { default as IconSatelliteFilled } from './icons/IconSatelliteFilled.mjs';\nexport { default as IconScaleFilled } from './icons/IconScaleFilled.mjs';\nexport { default as IconSchoolFilled } from './icons/IconSchoolFilled.mjs';\nexport { default as IconScubaDivingTankFilled } from './icons/IconScubaDivingTankFilled.mjs';\nexport { default as IconSearchFilled } from './icons/IconSearchFilled.mjs';\nexport { default as IconSectionFilled } from './icons/IconSectionFilled.mjs';\nexport { default as IconSendFilled } from './icons/IconSendFilled.mjs';\nexport { default as IconSettingsFilled } from './icons/IconSettingsFilled.mjs';\nexport { default as IconShieldCheckFilled } from './icons/IconShieldCheckFilled.mjs';\nexport { default as IconShieldCheckeredFilled } from './icons/IconShieldCheckeredFilled.mjs';\nexport { default as IconShieldHalfFilled } from './icons/IconShieldHalfFilled.mjs';\nexport { default as IconShieldLockFilled } from './icons/IconShieldLockFilled.mjs';\nexport { default as IconShieldFilled } from './icons/IconShieldFilled.mjs';\nexport { default as IconShirtFilled } from './icons/IconShirtFilled.mjs';\nexport { default as IconShoppingCartFilled } from './icons/IconShoppingCartFilled.mjs';\nexport { default as IconSignLeftFilled } from './icons/IconSignLeftFilled.mjs';\nexport { default as IconSignRightFilled } from './icons/IconSignRightFilled.mjs';\nexport { default as IconSitemapFilled } from './icons/IconSitemapFilled.mjs';\nexport { default as IconSortAscending2Filled } from './icons/IconSortAscending2Filled.mjs';\nexport { default as IconSortAscendingShapesFilled } from './icons/IconSortAscendingShapesFilled.mjs';\nexport { default as IconSortDescending2Filled } from './icons/IconSortDescending2Filled.mjs';\nexport { default as IconSortDescendingShapesFilled } from './icons/IconSortDescendingShapesFilled.mjs';\nexport { default as IconSoupFilled } from './icons/IconSoupFilled.mjs';\nexport { default as IconSpadeFilled } from './icons/IconSpadeFilled.mjs';\nexport { default as IconSparkles2Filled } from './icons/IconSparkles2Filled.mjs';\nexport { default as IconSparklesFilled } from './icons/IconSparklesFilled.mjs';\nexport { default as IconSpeedboatFilled } from './icons/IconSpeedboatFilled.mjs';\nexport { default as IconSpiderFilled } from './icons/IconSpiderFilled.mjs';\nexport { default as IconSquareArrowDownFilled } from './icons/IconSquareArrowDownFilled.mjs';\nexport { default as IconSquareArrowLeftFilled } from './icons/IconSquareArrowLeftFilled.mjs';\nexport { default as IconSquareArrowRightFilled } from './icons/IconSquareArrowRightFilled.mjs';\nexport { default as IconSquareArrowUpFilled } from './icons/IconSquareArrowUpFilled.mjs';\nexport { default as IconSquareAsteriskFilled } from './icons/IconSquareAsteriskFilled.mjs';\nexport { default as IconSquareCheckFilled } from './icons/IconSquareCheckFilled.mjs';\nexport { default as IconSquareChevronDownFilled } from './icons/IconSquareChevronDownFilled.mjs';\nexport { default as IconSquareChevronLeftFilled } from './icons/IconSquareChevronLeftFilled.mjs';\nexport { default as IconSquareChevronRightFilled } from './icons/IconSquareChevronRightFilled.mjs';\nexport { default as IconSquareChevronUpFilled } from './icons/IconSquareChevronUpFilled.mjs';\nexport { default as IconSquareChevronsDownFilled } from './icons/IconSquareChevronsDownFilled.mjs';\nexport { default as IconSquareChevronsLeftFilled } from './icons/IconSquareChevronsLeftFilled.mjs';\nexport { default as IconSquareChevronsRightFilled } from './icons/IconSquareChevronsRightFilled.mjs';\nexport { default as IconSquareChevronsUpFilled } from './icons/IconSquareChevronsUpFilled.mjs';\nexport { default as IconSquareDotFilled } from './icons/IconSquareDotFilled.mjs';\nexport { default as IconSquareF0Filled } from './icons/IconSquareF0Filled.mjs';\nexport { default as IconSquareF1Filled } from './icons/IconSquareF1Filled.mjs';\nexport { default as IconSquareF2Filled } from './icons/IconSquareF2Filled.mjs';\nexport { default as IconSquareF3Filled } from './icons/IconSquareF3Filled.mjs';\nexport { default as IconSquareF4Filled } from './icons/IconSquareF4Filled.mjs';\nexport { default as IconSquareF5Filled } from './icons/IconSquareF5Filled.mjs';\nexport { default as IconSquareF6Filled } from './icons/IconSquareF6Filled.mjs';\nexport { default as IconSquareF7Filled } from './icons/IconSquareF7Filled.mjs';\nexport { default as IconSquareF8Filled } from './icons/IconSquareF8Filled.mjs';\nexport { default as IconSquareF9Filled } from './icons/IconSquareF9Filled.mjs';\nexport { default as IconSquareLetterAFilled } from './icons/IconSquareLetterAFilled.mjs';\nexport { default as IconSquareLetterBFilled } from './icons/IconSquareLetterBFilled.mjs';\nexport { default as IconSquareLetterCFilled } from './icons/IconSquareLetterCFilled.mjs';\nexport { default as IconSquareLetterDFilled } from './icons/IconSquareLetterDFilled.mjs';\nexport { default as IconSquareLetterEFilled } from './icons/IconSquareLetterEFilled.mjs';\nexport { default as IconSquareLetterFFilled } from './icons/IconSquareLetterFFilled.mjs';\nexport { default as IconSquareLetterGFilled } from './icons/IconSquareLetterGFilled.mjs';\nexport { default as IconSquareLetterHFilled } from './icons/IconSquareLetterHFilled.mjs';\nexport { default as IconSquareLetterIFilled } from './icons/IconSquareLetterIFilled.mjs';\nexport { default as IconSquareLetterJFilled } from './icons/IconSquareLetterJFilled.mjs';\nexport { default as IconSquareLetterKFilled } from './icons/IconSquareLetterKFilled.mjs';\nexport { default as IconSquareLetterLFilled } from './icons/IconSquareLetterLFilled.mjs';\nexport { default as IconSquareLetterMFilled } from './icons/IconSquareLetterMFilled.mjs';\nexport { default as IconSquareLetterNFilled } from './icons/IconSquareLetterNFilled.mjs';\nexport { default as IconSquareLetterOFilled } from './icons/IconSquareLetterOFilled.mjs';\nexport { default as IconSquareLetterPFilled } from './icons/IconSquareLetterPFilled.mjs';\nexport { default as IconSquareLetterQFilled } from './icons/IconSquareLetterQFilled.mjs';\nexport { default as IconSquareLetterRFilled } from './icons/IconSquareLetterRFilled.mjs';\nexport { default as IconSquareLetterSFilled } from './icons/IconSquareLetterSFilled.mjs';\nexport { default as IconSquareLetterTFilled } from './icons/IconSquareLetterTFilled.mjs';\nexport { default as IconSquareLetterUFilled } from './icons/IconSquareLetterUFilled.mjs';\nexport { default as IconSquareLetterVFilled } from './icons/IconSquareLetterVFilled.mjs';\nexport { default as IconSquareLetterWFilled } from './icons/IconSquareLetterWFilled.mjs';\nexport { default as IconSquareLetterXFilled } from './icons/IconSquareLetterXFilled.mjs';\nexport { default as IconSquareLetterYFilled } from './icons/IconSquareLetterYFilled.mjs';\nexport { default as IconSquareLetterZFilled } from './icons/IconSquareLetterZFilled.mjs';\nexport { default as IconSquareMinusFilled } from './icons/IconSquareMinusFilled.mjs';\nexport { default as IconSquareNumber0Filled } from './icons/IconSquareNumber0Filled.mjs';\nexport { default as IconSquareNumber1Filled } from './icons/IconSquareNumber1Filled.mjs';\nexport { default as IconSquareNumber2Filled } from './icons/IconSquareNumber2Filled.mjs';\nexport { default as IconSquareNumber3Filled } from './icons/IconSquareNumber3Filled.mjs';\nexport { default as IconSquareNumber4Filled } from './icons/IconSquareNumber4Filled.mjs';\nexport { default as IconSquareNumber5Filled } from './icons/IconSquareNumber5Filled.mjs';\nexport { default as IconSquareNumber6Filled } from './icons/IconSquareNumber6Filled.mjs';\nexport { default as IconSquareNumber7Filled } from './icons/IconSquareNumber7Filled.mjs';\nexport { default as IconSquareNumber8Filled } from './icons/IconSquareNumber8Filled.mjs';\nexport { default as IconSquareNumber9Filled } from './icons/IconSquareNumber9Filled.mjs';\nexport { default as IconSquareRotatedFilled } from './icons/IconSquareRotatedFilled.mjs';\nexport { default as IconSquareRoundedArrowDownFilled } from './icons/IconSquareRoundedArrowDownFilled.mjs';\nexport { default as IconSquareRoundedArrowLeftFilled } from './icons/IconSquareRoundedArrowLeftFilled.mjs';\nexport { default as IconSquareRoundedArrowRightFilled } from './icons/IconSquareRoundedArrowRightFilled.mjs';\nexport { default as IconSquareRoundedArrowUpFilled } from './icons/IconSquareRoundedArrowUpFilled.mjs';\nexport { default as IconSquareRoundedCheckFilled } from './icons/IconSquareRoundedCheckFilled.mjs';\nexport { default as IconSquareRoundedChevronDownFilled } from './icons/IconSquareRoundedChevronDownFilled.mjs';\nexport { default as IconSquareRoundedChevronLeftFilled } from './icons/IconSquareRoundedChevronLeftFilled.mjs';\nexport { default as IconSquareRoundedChevronRightFilled } from './icons/IconSquareRoundedChevronRightFilled.mjs';\nexport { default as IconSquareRoundedChevronUpFilled } from './icons/IconSquareRoundedChevronUpFilled.mjs';\nexport { default as IconSquareRoundedChevronsDownFilled } from './icons/IconSquareRoundedChevronsDownFilled.mjs';\nexport { default as IconSquareRoundedChevronsLeftFilled } from './icons/IconSquareRoundedChevronsLeftFilled.mjs';\nexport { default as IconSquareRoundedChevronsRightFilled } from './icons/IconSquareRoundedChevronsRightFilled.mjs';\nexport { default as IconSquareRoundedChevronsUpFilled } from './icons/IconSquareRoundedChevronsUpFilled.mjs';\nexport { default as IconSquareRoundedLetterAFilled } from './icons/IconSquareRoundedLetterAFilled.mjs';\nexport { default as IconSquareRoundedLetterBFilled } from './icons/IconSquareRoundedLetterBFilled.mjs';\nexport { default as IconSquareRoundedLetterCFilled } from './icons/IconSquareRoundedLetterCFilled.mjs';\nexport { default as IconSquareRoundedLetterDFilled } from './icons/IconSquareRoundedLetterDFilled.mjs';\nexport { default as IconSquareRoundedLetterEFilled } from './icons/IconSquareRoundedLetterEFilled.mjs';\nexport { default as IconSquareRoundedLetterFFilled } from './icons/IconSquareRoundedLetterFFilled.mjs';\nexport { default as IconSquareRoundedLetterGFilled } from './icons/IconSquareRoundedLetterGFilled.mjs';\nexport { default as IconSquareRoundedLetterHFilled } from './icons/IconSquareRoundedLetterHFilled.mjs';\nexport { default as IconSquareRoundedLetterIFilled } from './icons/IconSquareRoundedLetterIFilled.mjs';\nexport { default as IconSquareRoundedLetterJFilled } from './icons/IconSquareRoundedLetterJFilled.mjs';\nexport { default as IconSquareRoundedLetterKFilled } from './icons/IconSquareRoundedLetterKFilled.mjs';\nexport { default as IconSquareRoundedLetterLFilled } from './icons/IconSquareRoundedLetterLFilled.mjs';\nexport { default as IconSquareRoundedLetterMFilled } from './icons/IconSquareRoundedLetterMFilled.mjs';\nexport { default as IconSquareRoundedLetterNFilled } from './icons/IconSquareRoundedLetterNFilled.mjs';\nexport { default as IconSquareRoundedLetterOFilled } from './icons/IconSquareRoundedLetterOFilled.mjs';\nexport { default as IconSquareRoundedLetterPFilled } from './icons/IconSquareRoundedLetterPFilled.mjs';\nexport { default as IconSquareRoundedLetterQFilled } from './icons/IconSquareRoundedLetterQFilled.mjs';\nexport { default as IconSquareRoundedLetterRFilled } from './icons/IconSquareRoundedLetterRFilled.mjs';\nexport { default as IconSquareRoundedLetterSFilled } from './icons/IconSquareRoundedLetterSFilled.mjs';\nexport { default as IconSquareRoundedLetterTFilled } from './icons/IconSquareRoundedLetterTFilled.mjs';\nexport { default as IconSquareRoundedLetterUFilled } from './icons/IconSquareRoundedLetterUFilled.mjs';\nexport { default as IconSquareRoundedLetterVFilled } from './icons/IconSquareRoundedLetterVFilled.mjs';\nexport { default as IconSquareRoundedLetterWFilled } from './icons/IconSquareRoundedLetterWFilled.mjs';\nexport { default as IconSquareRoundedLetterXFilled } from './icons/IconSquareRoundedLetterXFilled.mjs';\nexport { default as IconSquareRoundedLetterYFilled } from './icons/IconSquareRoundedLetterYFilled.mjs';\nexport { default as IconSquareRoundedLetterZFilled } from './icons/IconSquareRoundedLetterZFilled.mjs';\nexport { default as IconSquareRoundedMinusFilled } from './icons/IconSquareRoundedMinusFilled.mjs';\nexport { default as IconSquareRoundedNumber0Filled } from './icons/IconSquareRoundedNumber0Filled.mjs';\nexport { default as IconSquareRoundedNumber1Filled } from './icons/IconSquareRoundedNumber1Filled.mjs';\nexport { default as IconSquareRoundedNumber2Filled } from './icons/IconSquareRoundedNumber2Filled.mjs';\nexport { default as IconSquareRoundedNumber3Filled } from './icons/IconSquareRoundedNumber3Filled.mjs';\nexport { default as IconSquareRoundedNumber4Filled } from './icons/IconSquareRoundedNumber4Filled.mjs';\nexport { default as IconSquareRoundedNumber5Filled } from './icons/IconSquareRoundedNumber5Filled.mjs';\nexport { default as IconSquareRoundedNumber6Filled } from './icons/IconSquareRoundedNumber6Filled.mjs';\nexport { default as IconSquareRoundedNumber7Filled } from './icons/IconSquareRoundedNumber7Filled.mjs';\nexport { default as IconSquareRoundedNumber8Filled } from './icons/IconSquareRoundedNumber8Filled.mjs';\nexport { default as IconSquareRoundedNumber9Filled } from './icons/IconSquareRoundedNumber9Filled.mjs';\nexport { default as IconSquareRoundedPlusFilled } from './icons/IconSquareRoundedPlusFilled.mjs';\nexport { default as IconSquareRoundedXFilled } from './icons/IconSquareRoundedXFilled.mjs';\nexport { default as IconSquareRoundedFilled } from './icons/IconSquareRoundedFilled.mjs';\nexport { default as IconSquareXFilled } from './icons/IconSquareXFilled.mjs';\nexport { default as IconSquareFilled } from './icons/IconSquareFilled.mjs';\nexport { default as IconSquaresFilled } from './icons/IconSquaresFilled.mjs';\nexport { default as IconStack2Filled } from './icons/IconStack2Filled.mjs';\nexport { default as IconStack3Filled } from './icons/IconStack3Filled.mjs';\nexport { default as IconStackFilled } from './icons/IconStackFilled.mjs';\nexport { default as IconStarHalfFilled } from './icons/IconStarHalfFilled.mjs';\nexport { default as IconStarFilled } from './icons/IconStarFilled.mjs';\nexport { default as IconStarsFilled } from './icons/IconStarsFilled.mjs';\nexport { default as IconSteeringWheelFilled } from './icons/IconSteeringWheelFilled.mjs';\nexport { default as IconSunHighFilled } from './icons/IconSunHighFilled.mjs';\nexport { default as IconSunLowFilled } from './icons/IconSunLowFilled.mjs';\nexport { default as IconSunFilled } from './icons/IconSunFilled.mjs';\nexport { default as IconSunglassesFilled } from './icons/IconSunglassesFilled.mjs';\nexport { default as IconSunriseFilled } from './icons/IconSunriseFilled.mjs';\nexport { default as IconSunset2Filled } from './icons/IconSunset2Filled.mjs';\nexport { default as IconSunsetFilled } from './icons/IconSunsetFilled.mjs';\nexport { default as IconSwipeDownFilled } from './icons/IconSwipeDownFilled.mjs';\nexport { default as IconSwipeLeftFilled } from './icons/IconSwipeLeftFilled.mjs';\nexport { default as IconSwipeRightFilled } from './icons/IconSwipeRightFilled.mjs';\nexport { default as IconSwipeUpFilled } from './icons/IconSwipeUpFilled.mjs';\nexport { default as IconTableFilled } from './icons/IconTableFilled.mjs';\nexport { default as IconTagFilled } from './icons/IconTagFilled.mjs';\nexport { default as IconTagsFilled } from './icons/IconTagsFilled.mjs';\nexport { default as IconTemperatureMinusFilled } from './icons/IconTemperatureMinusFilled.mjs';\nexport { default as IconTemperaturePlusFilled } from './icons/IconTemperaturePlusFilled.mjs';\nexport { default as IconTemplateFilled } from './icons/IconTemplateFilled.mjs';\nexport { default as IconTestPipe2Filled } from './icons/IconTestPipe2Filled.mjs';\nexport { default as IconThumbDownFilled } from './icons/IconThumbDownFilled.mjs';\nexport { default as IconThumbUpFilled } from './icons/IconThumbUpFilled.mjs';\nexport { default as IconTicketFilled } from './icons/IconTicketFilled.mjs';\nexport { default as IconTiltShiftFilled } from './icons/IconTiltShiftFilled.mjs';\nexport { default as IconTimelineEventFilled } from './icons/IconTimelineEventFilled.mjs';\nexport { default as IconToggleLeftFilled } from './icons/IconToggleLeftFilled.mjs';\nexport { default as IconToggleRightFilled } from './icons/IconToggleRightFilled.mjs';\nexport { default as IconToolsKitchen2Filled } from './icons/IconToolsKitchen2Filled.mjs';\nexport { default as IconTrainFilled } from './icons/IconTrainFilled.mjs';\nexport { default as IconTransformFilled } from './icons/IconTransformFilled.mjs';\nexport { default as IconTransitionBottomFilled } from './icons/IconTransitionBottomFilled.mjs';\nexport { default as IconTransitionLeftFilled } from './icons/IconTransitionLeftFilled.mjs';\nexport { default as IconTransitionRightFilled } from './icons/IconTransitionRightFilled.mjs';\nexport { default as IconTransitionTopFilled } from './icons/IconTransitionTopFilled.mjs';\nexport { default as IconTrashXFilled } from './icons/IconTrashXFilled.mjs';\nexport { default as IconTrashFilled } from './icons/IconTrashFilled.mjs';\nexport { default as IconTriangleInvertedFilled } from './icons/IconTriangleInvertedFilled.mjs';\nexport { default as IconTriangleSquareCircleFilled } from './icons/IconTriangleSquareCircleFilled.mjs';\nexport { default as IconTriangleFilled } from './icons/IconTriangleFilled.mjs';\nexport { default as IconTrolleyFilled } from './icons/IconTrolleyFilled.mjs';\nexport { default as IconTrophyFilled } from './icons/IconTrophyFilled.mjs';\nexport { default as IconTruckFilled } from './icons/IconTruckFilled.mjs';\nexport { default as IconUfoFilled } from './icons/IconUfoFilled.mjs';\nexport { default as IconUmbrellaFilled } from './icons/IconUmbrellaFilled.mjs';\nexport { default as IconUserFilled } from './icons/IconUserFilled.mjs';\nexport { default as IconVersionsFilled } from './icons/IconVersionsFilled.mjs';\nexport { default as IconVideoMinusFilled } from './icons/IconVideoMinusFilled.mjs';\nexport { default as IconVideoPlusFilled } from './icons/IconVideoPlusFilled.mjs';\nexport { default as IconVideoFilled } from './icons/IconVideoFilled.mjs';\nexport { default as IconWindmillFilled } from './icons/IconWindmillFilled.mjs';\nexport { default as IconWindsockFilled } from './icons/IconWindsockFilled.mjs';\nexport { default as IconWomanFilled } from './icons/IconWomanFilled.mjs';\nexport { default as IconWorldFilled } from './icons/IconWorldFilled.mjs';\nexport { default as IconWritingSignFilled } from './icons/IconWritingSignFilled.mjs';\nexport { default as IconWritingFilled } from './icons/IconWritingFilled.mjs';\nexport { default as IconXFilled } from './icons/IconXFilled.mjs';\nexport { default as IconXboxAFilled } from './icons/IconXboxAFilled.mjs';\nexport { default as IconXboxBFilled } from './icons/IconXboxBFilled.mjs';\nexport { default as IconXboxXFilled } from './icons/IconXboxXFilled.mjs';\nexport { default as IconXboxYFilled } from './icons/IconXboxYFilled.mjs';\nexport { default as IconYinYangFilled } from './icons/IconYinYangFilled.mjs';\nexport { default as IconZeppelinFilled } from './icons/IconZeppelinFilled.mjs';\nexport { default as IconZoomCancelFilled } from './icons/IconZoomCancelFilled.mjs';\nexport { default as IconZoomCheckFilled } from './icons/IconZoomCheckFilled.mjs';\nexport { default as IconZoomCodeFilled } from './icons/IconZoomCodeFilled.mjs';\nexport { default as IconZoomExclamationFilled } from './icons/IconZoomExclamationFilled.mjs';\nexport { default as IconZoomInAreaFilled } from './icons/IconZoomInAreaFilled.mjs';\nexport { default as IconZoomInFilled } from './icons/IconZoomInFilled.mjs';\nexport { default as IconZoomMoneyFilled } from './icons/IconZoomMoneyFilled.mjs';\nexport { default as IconZoomOutAreaFilled } from './icons/IconZoomOutAreaFilled.mjs';\nexport { default as IconZoomOutFilled } from './icons/IconZoomOutFilled.mjs';\nexport { default as IconZoomPanFilled } from './icons/IconZoomPanFilled.mjs';\nexport { default as IconZoomQuestionFilled } from './icons/IconZoomQuestionFilled.mjs';\nexport { default as IconZoomScanFilled } from './icons/IconZoomScanFilled.mjs';\nexport { default as IconZoomFilled } from './icons/IconZoomFilled.mjs';\n//# sourceMappingURL=tabler-icons-react.mjs.map\n","const awaitSelector = (selector: string, rootNode?: HTMLElement, fallbackDelay?: number) =>\n  new Promise((resolve, reject) => {\n    try {\n      const root = rootNode || document;\n      // @ts-ignore\n      const ObserverClass = MutationObserver || WebKitMutationObserver || null;\n      const mutationObserverSupported = typeof ObserverClass === \"function\";\n      let observer: any;\n      const stopWatching = () => {\n        // @ts-ignore\n        if (observer) {\n          if (mutationObserverSupported) {\n            observer.disconnect();\n          } else {\n            clearInterval(observer);\n          }\n          observer = null;\n        }\n      };\n      const findAndResolveElements = () => {\n        const allElements = root.querySelectorAll(selector);\n        if (allElements.length === 0) return;\n        // @ts-ignore\n        const newElements = [];\n        const attributeForBypassing = \"data-awaitselector-resolved\";\n        allElements.forEach((el, i) => {\n          // @ts-ignore\n          if (typeof el[attributeForBypassing] === \"undefined\") {\n            // @ts-ignore\n            allElements[i][attributeForBypassing] = \"\";\n            newElements.push(allElements[i]);\n          }\n        });\n        if (newElements.length > 0) {\n          stopWatching();\n          // @ts-ignore\n          resolve(newElements);\n        }\n      };\n      if (mutationObserverSupported) {\n        observer = new ObserverClass((mutationRecords) => {\n          const nodesWereAdded = mutationRecords.reduce(\n            (found, record) => found || (record.addedNodes && record.addedNodes.length > 0),\n            false,\n          );\n          if (nodesWereAdded) {\n            findAndResolveElements();\n          }\n        });\n        observer.observe(root, {\n          childList: true,\n          subtree: true,\n        });\n      } else {\n        observer = setInterval(findAndResolveElements, fallbackDelay || 250);\n      }\n      findAndResolveElements();\n    } catch (exception) {\n      reject(exception);\n    }\n  });\n\nexport const watchAwaitSelector = (\n  callback: () => void,\n  selector: string,\n  rootNode?: HTMLElement,\n  fallbackDelay?: number,\n) => {\n  (function awaiter(continueWatching = true) {\n    try {\n      document.querySelector(selector);\n    } catch (e) {\n      console.error(`Invalid selector: \"${selector}\"`, e);\n      return;\n    }\n\n    if (continueWatching === false) return;\n    awaitSelector(selector, rootNode, fallbackDelay)\n      .then(callback)\n      // @ts-ignore\n      .then(awaiter);\n  })();\n};\n","export type ThemeMode = \"light\" | \"dark\";\nexport type ThemeModeSetting = ThemeMode | \"system\";\n\ntype ThemeRecord = Record<string, any>;\n\nconst isObject = (value: unknown): value is ThemeRecord =>\n  Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst mergeThemeObjects = <T extends ThemeRecord | undefined | null>(\n  ...themes: Array<T | undefined | null>\n): ThemeRecord => {\n  const merged: ThemeRecord = {};\n\n  for (const theme of themes) {\n    if (!isObject(theme)) continue;\n\n    for (const [key, value] of Object.entries(theme)) {\n      if (value === undefined || key === \"modes\") continue;\n\n      if (isObject(value) && isObject(merged[key])) {\n        merged[key] = mergeThemeObjects(merged[key], value);\n      } else {\n        merged[key] = value;\n      }\n    }\n  }\n\n  return merged;\n};\n\nexport const resolveThemeMode = (\n  mode: ThemeModeSetting | null | undefined,\n  ownerWindow?: Window | null,\n): ThemeMode => {\n  if (mode === \"dark\") return \"dark\";\n  if (mode !== \"system\") return \"light\";\n\n  const targetWindow = ownerWindow || (typeof window !== \"undefined\" ? window : undefined);\n\n  return targetWindow?.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n};\n\nexport const resolveModeAwareTheme = <T extends ThemeRecord | undefined | null>(\n  theme: T,\n  mode: ThemeModeSetting | null | undefined,\n  ownerWindow?: Window | null,\n): ThemeRecord => {\n  if (!isObject(theme)) return {};\n\n  const resolvedMode = resolveThemeMode(mode, ownerWindow);\n  return mergeThemeObjects(theme, theme.modes?.[resolvedMode]);\n};\n\nexport const resolveEngagementTheme = <T extends ThemeRecord | undefined | null>({\n  theme,\n  overrideTheme,\n  mode,\n  ownerWindow,\n}: {\n  theme?: T;\n  overrideTheme?: T;\n  mode?: ThemeModeSetting | null;\n  ownerWindow?: Window | null;\n}): ThemeRecord => {\n  const resolvedTheme = resolveModeAwareTheme(theme, mode, ownerWindow);\n  const resolvedOverrideTheme = resolveModeAwareTheme(overrideTheme, mode, ownerWindow);\n\n  return mergeThemeObjects(resolvedTheme, resolvedOverrideTheme);\n};\n","import { useEffect, useState } from \"react\";\nimport { resolveThemeMode, type ThemeMode, type ThemeModeSetting } from \"../lib/theme\";\n\nexport function useResolvedThemeMode(\n  mode: ThemeModeSetting | null | undefined,\n  ownerWindow?: Window | null,\n): ThemeMode {\n  const [resolvedMode, setResolvedMode] = useState<ThemeMode>(() =>\n    resolveThemeMode(mode, ownerWindow),\n  );\n\n  useEffect(() => {\n    const targetWindow = ownerWindow || (typeof window !== \"undefined\" ? window : undefined);\n\n    setResolvedMode(resolveThemeMode(mode, targetWindow));\n\n    if (mode !== \"system\" || !targetWindow?.matchMedia) return;\n\n    const mediaQuery = targetWindow.matchMedia(\"(prefers-color-scheme: dark)\");\n    const updateMode = () => setResolvedMode(resolveThemeMode(\"system\", targetWindow));\n\n    mediaQuery.addEventListener?.(\"change\", updateMode);\n    return () => mediaQuery.removeEventListener?.(\"change\", updateMode);\n  }, [mode, ownerWindow]);\n\n  return resolvedMode;\n}\n","import { render, hydrate, unmountComponentAtNode } from 'preact/compat';\n\nexport function createRoot(container) {\n\treturn {\n\t\t// eslint-disable-next-line\n\t\trender: function (children) {\n\t\t\trender(children, container);\n\t\t},\n\t\t// eslint-disable-next-line\n\t\tunmount: function () {\n\t\t\tunmountComponentAtNode(container);\n\t\t}\n\t};\n}\n\nexport function hydrateRoot(container, children) {\n\thydrate(children, container);\n\treturn createRoot(container);\n}\n\nexport default {\n\tcreateRoot,\n\thydrateRoot\n};\n","export const USERORBIT_OWNED_HOST_ATTRIBUTE = \"data-userorbit-owned-host\";\n\nexport function markUserorbitOwnedHost<T extends Element>(element: T): T {\n  element.setAttribute(USERORBIT_OWNED_HOST_ATTRIBUTE, \"true\");\n  return element;\n}\n\nexport function isUserorbitOwnedNode(value: EventTarget | Node | null | undefined): boolean {\n  if (!isNode(value)) return false;\n\n  let node: Node | null = value;\n  const visited = new Set<Node>();\n  while (node && !visited.has(node)) {\n    visited.add(node);\n    const element = node.nodeType === Node.ELEMENT_NODE ? (node as Element) : node.parentElement;\n    if (element?.closest(`[${USERORBIT_OWNED_HOST_ATTRIBUTE}]`)) return true;\n\n    const ownerDocument = node.ownerDocument;\n\n    const root = node.getRootNode?.();\n    if (root && \"host\" in root && isNode((root as ShadowRoot).host)) {\n      node = (root as ShadowRoot).host;\n      continue;\n    }\n\n    try {\n      const frameElement = ownerDocument?.defaultView?.frameElement;\n      if (frameElement) {\n        node = frameElement;\n        continue;\n      }\n    } catch {\n      return false;\n    }\n\n    node = element?.parentElement ?? null;\n  }\n\n  return false;\n}\n\nfunction isNode(value: unknown): value is Node {\n  return !!value && typeof value === \"object\" && \"nodeType\" in value && \"getRootNode\" in value;\n}\n\nexport function eventTouchesUserorbitOwnedHost(event: Event) {\n  const path = typeof event.composedPath === \"function\" ? event.composedPath() : [event.target];\n  return path.some((entry) => isUserorbitOwnedNode(entry as Node));\n}\n","@tailwind base;\n\n#uojs {\n  --editor-text-default: hsl(240 10% 3.9%);\n  --editor-text-gray: hsl(240 3.8% 46.1%);\n  --editor-text-brown: hsl(25 95% 53%);\n  --editor-text-orange: hsl(24 95% 53%);\n  --editor-text-yellow: hsl(48 96% 53%);\n  --editor-text-green: hsl(142 71% 45%);\n  --editor-text-blue: hsl(221 83% 53%);\n  --editor-text-purple: hsl(269 75% 55%);\n  --editor-text-pink: hsl(336 80% 58%);\n  --editor-text-red: hsl(0 84% 60%);\n  --editor-highlight-default: hsl(0 0% 98%);\n  --editor-highlight-gray: hsl(240 5% 96%);\n  --editor-highlight-brown: hsl(43 96% 96%);\n  --editor-highlight-orange: hsl(33 100% 96%);\n  --editor-highlight-yellow: hsl(54 100% 96%);\n  --editor-highlight-green: hsl(142 71% 96%);\n  --editor-highlight-blue: hsl(217 91% 96%);\n  --editor-highlight-purple: hsl(269 97% 96%);\n  --editor-highlight-pink: hsl(336 80% 96%);\n  --editor-highlight-red: hsl(0 84% 96%);\n  --uo-background: 0 0% 100%;\n  --uo-foreground: 222.2 84% 4.9%;\n\n  /* background */\n  --unh-bg-emphasis: hsla(220, 13%, 91%, 1);\n  --unh-bg: hsla(0, 0%, 100%, 1);\n  --unh-bg-subtle: hsla(220, 14%, 96%, 1);\n  --unh-bg-muted: hsla(210, 20%, 98%, 1);\n  --unh-bg-inverted: hsla(0, 0%, 6%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(218, 83%, 98%, 1);\n  --unh-bg-success: hsla(134, 76%, 94%, 1);\n  --unh-bg-attention: hsla(37, 86%, 92%, 1);\n  --unh-bg-error: hsla(3, 66%, 93%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-border: hsla(216, 12%, 84%, 1);\n  --unh-border-subtle: hsla(220, 13%, 91%, 1);\n  --unh-border-booker: #e5e7eb;\n  --unh-border-muted: hsla(220, 14%, 96%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 10%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(217, 19%, 27%, 1);\n  --unh-text: hsla(217, 19%, 27%, 1);\n  --unh-text-subtle: hsla(220, 9%, 46%, 1);\n  --unh-text-muted: hsla(218, 11%, 65%, 1);\n  --unh-text-inverted: hsla(0, 0%, 100%, 1);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(228, 56%, 33%, 1);\n  --unh-text-success: hsla(133, 34%, 24%, 1);\n  --unh-text-attention: hsla(16, 62%, 28%, 1);\n  --unh-text-error: hsla(2, 55%, 30%, 1);\n\n  /* Brand */\n  --unh-brand: hsla(251, 85%, 48%, 1);\n  --unh-brand-emphasis: hsla(0, 0%, 6%, 1);\n  --unh-brand-text: hsla(251, 85%, 48%, 1);\n\n  --background: 0 0% 100%;\n  --foreground: 222.2 84% 4.9%;\n\n  --card: 0 0% 100%;\n  --card-foreground: 222.2 84% 4.9%;\n\n  --popover: 0 0% 100%;\n  --popover-foreground: 222.2 84% 4.9%;\n\n  --text-primary: #171717;\n  --text-secondary: #525252;\n  --text-tertiary: #737373;\n\n  --bg-tertiary: #f9fafb;\n\n  /* light blue */\n  /* --primary: 216 100% 63%; */\n\n  --color-primary: #3912e2;\n  --primary: 251 85% 48%;\n\n  /* --primary: 251 84% 54%; */\n  /* --primary: 256 67% 50%; */\n  /* --primary: 248 64% 41%; */\n  --primary-foreground: 210 40% 98%;\n\n  --secondary: 210 40% 96.1%;\n  --secondary-foreground: 222.2 47.4% 11.2%;\n\n  --muted: 210 40% 96.1%;\n  --muted-foreground: 215.4 16.3% 46.9%;\n\n  --accent: 210 40% 96.1%;\n  --accent-foreground: 222.2 47.4% 11.2%;\n\n  --destructive: 0 84.2% 60.2%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 214.3 31.8% 91.4%;\n  --input: 214.3 31.8% 91.4%;\n  --ring: 222.2 9.52% 29.46%;\n\n  --radius: 0.5rem;\n\n  --novel-highlight-default: #ffffff;\n  --novel-highlight-purple: #f6f3f8;\n  --novel-highlight-red: #fdebeb;\n  --novel-highlight-yellow: #fbf4a2;\n  --novel-highlight-blue: #dbe9ff;\n  --novel-highlight-green: #acf79f;\n  --novel-highlight-orange: #faebdd;\n  --novel-highlight-pink: #faf1f5;\n  --novel-highlight-gray: #f1f1ef;\n\n  .card-radius {\n    border-radius: 0.75rem;\n  }\n\n  .card-bg {\n    background-color: rgb(255 255 255 / 80%);\n  }\n\n  .page-bg {\n    background-color: #f7f8f9;\n  }\n\n  .button-bg {\n    background-color: rgb(0 0 0 / 4%);\n    color: rgb(0 0 0 / 80%);\n    border: 1px solid rgb(0 0 0 / 12%);\n  }\n\n  .card-hover-border {\n    border: 1px solid var(--card-hover-border-color);\n  }\n\n  .card-hover-shadow {\n    box-shadow: var(--card-hover-shadow);\n  }\n\n  .card-border {\n    border: 1px solid rgb(0 0 0 / 12%);\n  }\n\n  .card-border-color {\n    border-color: rgb(0 0 0 / 12%);\n  }\n\n  .button-hover-bg {\n    background-color: rgb(19 21 23 / 64%);\n  }\n\n  .divider {\n    border-top: 1px solid rgba(19, 21, 23, 0.08);\n  }\n\n  .card-hover-bg {\n    background-color: rgb(247 248 249 / 80%);\n  }\n}\n\n#uojs .dark {\n  --uo-background: 0 0% 6%;\n  --uo-foreground: 210 40% 98%;\n\n  /* background */\n  --unh-bg-emphasis: rgb(57, 55, 55);\n  --unh-bg: hsla(0, 0%, 10%, 1);\n  --unh-bg-subtle: hsla(224, 30%, 17%, 1);\n  --unh-bg-muted: hsla(0, 0%, 12%, 1);\n  --unh-bg-inverted: hsla(220, 14%, 96%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(228, 56%, 33%, 1);\n  --unh-bg-success: hsla(133, 34%, 24%, 1);\n  --unh-bg-attention: hsla(16, 62%, 28%, 1);\n  --unh-bg-error: hsla(2, 55%, 30%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(0, 0%, 46%, 1);\n  --unh-border: hsla(0, 0%, 34%, 1);\n  --unh-border-subtle: hsla(0, 0%, 22%, 1);\n  --unh-border-booker: hsla(0, 0%, 22%, 1);\n  --unh-border-muted: hsla(0, 0%, 18%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 100%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(240, 20%, 99%, 1);\n  --unh-text: hsla(0, 0%, 84%, 1);\n  --unh-text-subtle: hsla(0, 0%, 65%, 1);\n  --unh-text-muted: hsla(0, 0%, 34%, 1);\n  --unh-text-inverted: hsla(0, 0%, 10%, 1);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(218, 83%, 93%, 1);\n  --unh-text-success: hsla(134, 76%, 94%, 1);\n  --unh-text-attention: hsla(37, 86%, 92%, 1);\n  --unh-text-error: hsla(3, 66%, 93%, 1);\n\n  /* Brand */\n  --unh-brand: rgb(153, 152, 162);\n  --unh-brand-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-brand-text: rgb(123, 123, 126);\n\n  --background: 0 0% 4%;\n  --foreground: 210 40% 98%;\n\n  --card: 222.2 84% 4.9%;\n  --card-foreground: 210 40% 98%;\n\n  --popover: 0deg 0% 9.02%;\n  --popover-foreground: 210 40% 98%;\n\n  --color-primary: #3912e2;\n\n  --primary: 251 84% 54%;\n  --primary-foreground: 222.2 47.4% 11.2%;\n\n  --secondary: 217.2 32.6% 17.5%;\n  --secondary-foreground: 210 40% 98%;\n\n  --muted: 217.2 32.6% 17.5%;\n  --muted-foreground: 215 20.2% 65.1%;\n\n  --accent: 217.2 32.6% 17.5%;\n  --accent-foreground: 210 40% 98%;\n\n  --destructive: 0 62.8% 30.6%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 0 0% 100% / 0.12;\n  --input: 0 0% 100% / 0.12;\n  --ring: 212.7 26.8% 83.9%;\n\n  --text-primary: #f5f5f5;\n  --text-secondary: #d4d4d4;\n  --text-tertiary: #a3a3a3;\n\n  --bg-tertiary: #0f172a;\n\n  --novel-highlight-default: #000000;\n  --novel-highlight-purple: #3f2c4b;\n  --novel-highlight-red: #5c1a1a;\n  --novel-highlight-yellow: #5c4b1a;\n  --novel-highlight-blue: #1a3d5c;\n  --novel-highlight-green: #1a5c20;\n  --novel-highlight-orange: #5c3a1a;\n  --novel-highlight-pink: #5c1a3a;\n  --novel-highlight-gray: #3a3a3a;\n\n  .divider {\n    border-top: 1px solid rgba(255, 255, 255, 0.08);\n  }\n\n  .button-hover-bg {\n    background-color: rgb(255 255 255 / 10%);\n    color: rgb(255 255 255 / 80%);\n  }\n\n  .card-hover-bg {\n    background-color: rgb(19 21 23 / 64%);\n  }\n\n  .card-bg {\n    background-color: rgb(255 255 255 / 4%);\n  }\n\n  .card-border {\n    border: 1px solid rgb(255 255 255 / 4%);\n  }\n\n  .button-bg {\n    background-color: rgb(255 255 255 / 8%);\n    color: rgb(255 255 255 / 80%);\n    border: 1px solid rgb(255 255 255 / 12%);\n  }\n\n  .card-border-color {\n    border-color: rgb(255 255 255 / 4%);\n  }\n\n  .page-bg {\n    background-color: rgb(19 21 23);\n  }\n}\n\n#uojs.unh-widget {\n  outline: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  background: transparent;\n  border: 0px;\n}\n\n#uojs ::selection {\n  color: #000000;\n  background: #c4b7ff;\n}\n\n#uojs {\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizelegibility;\n  font-size: 1rem;\n  line-height: 1.5;\n  margin: 0px;\n  padding: 0px;\n}\n\n#uojs.unh-widget {\n  outline: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  background: transparent;\n  border: 0px;\n}\n\n#uojs {\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizelegibility;\n  font-size: 1rem;\n  line-height: 1.5;\n  margin: 0px;\n  padding: 0px;\n  font-family:\n    ui-sans-serif,\n    -apple-system,\n    BlinkMacSystemFont,\n    \"Segoe UI\",\n    Roboto,\n    Helvetica,\n    Arial,\n    sans-serif,\n    \"Apple Color Emoji\",\n    \"Segoe UI Emoji\",\n    \"Segoe UI Symbol\";\n\n  --unh-bg-emphasis: hsla(220, 13%, 91%, 1);\n  --unh-bg: hsla(0, 0%, 100%, 1);\n  --unh-bg-subtle: hsla(220, 14%, 96%, 1);\n  --unh-bg-muted: hsla(210, 20%, 98%, 1);\n  --unh-bg-inverted: hsla(0, 0%, 6%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(218, 83%, 98%, 1);\n  --unh-bg-success: hsla(134, 76%, 94%, 1);\n  --unh-bg-attention: hsla(37, 86%, 92%, 1);\n  --unh-bg-error: hsla(3, 66%, 93%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-border: hsla(216, 12%, 84%, 1);\n  --unh-border-subtle: hsla(220, 13%, 91%, 1);\n  --unh-border-booker: #e5e7eb;\n  --unh-border-muted: hsla(220, 14%, 96%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 10%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(217, 19%, 27%, 1);\n  --unh-text: hsla(217, 19%, 27%, 1);\n  --unh-text-subtle: hsla(220, 9%, 46%, 1);\n  --unh-text-muted: hsla(218, 11%, 65%, 1);\n  --unh-text-inverted: hsla(0, 0%, 100%, 1);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(228, 56%, 33%, 1);\n  --unh-text-success: hsla(133, 34%, 24%, 1);\n  --unh-text-attention: hsla(16, 62%, 28%, 1);\n  --unh-text-error: hsla(2, 55%, 30%, 1);\n\n  /* Brand */\n  --unh-brand: hsla(251, 85%, 48%, 1);\n  --unh-brand-emphasis: hsla(0, 0%, 6%, 1);\n  --unh-brand-text: hsla(251, 85%, 48%, 1);\n\n  --background: 0 0% 100%;\n  --foreground: 222.2 84% 4.9%;\n\n  --card: 0 0% 100%;\n  --card-foreground: 222.2 84% 4.9%;\n\n  --popover: 0 0% 100%;\n  --popover-foreground: 222.2 84% 4.9%;\n\n  --text-primary: #171717;\n  --text-secondary: #525252;\n  --text-tertiary: #737373;\n\n  --bg-tertiary: #f9fafb;\n\n  /* light blue */\n  /* --primary: 216 100% 63%; */\n\n  --primary: 251 85% 48%;\n\n  /* --primary: 251 84% 54%; */\n  /* --primary: 256 67% 50%; */\n  /* --primary: 248 64% 41%; */\n  --primary-foreground: 210 40% 98%;\n\n  --secondary: 210 40% 96.1%;\n  --secondary-foreground: 222.2 47.4% 11.2%;\n\n  --muted: 210 40% 96.1%;\n  --muted-foreground: 215.4 16.3% 46.9%;\n\n  --accent: 210 40% 96.1%;\n  --accent-foreground: 222.2 47.4% 11.2%;\n\n  --destructive: 0 84.2% 60.2%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 214.3 31.8% 91.4%;\n  --input: 214.3 31.8% 91.4%;\n  --ring: 222.2 9.52% 29.46%;\n\n  --radius: 0.5rem;\n\n  --novel-highlight-default: #ffffff;\n  --novel-highlight-purple: #f6f3f8;\n  --novel-highlight-red: #fdebeb;\n  --novel-highlight-yellow: #fbf4a2;\n  --novel-highlight-blue: #dbe9ff;\n  --novel-highlight-green: #acf79f;\n  --novel-highlight-orange: #faebdd;\n  --novel-highlight-pink: #faf1f5;\n  --novel-highlight-gray: #f1f1ef;\n}\n\n#uojs .dark {\n  /* background */\n  --unh-bg-emphasis: rgb(57, 55, 55);\n  --unh-bg: hsla(0, 0%, 10%, 1);\n  --unh-bg-subtle: hsla(224, 30%, 17%, 1);\n  --unh-bg-muted: hsla(0, 0%, 12%, 1);\n  --unh-bg-inverted: hsla(220, 14%, 96%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(228, 56%, 33%, 1);\n  --unh-bg-success: hsla(133, 34%, 24%, 1);\n  --unh-bg-attention: hsla(16, 62%, 28%, 1);\n  --unh-bg-error: hsla(2, 55%, 30%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(0, 0%, 46%, 1);\n  --unh-border: hsla(0, 0%, 34%, 1);\n  --unh-border-subtle: hsla(0, 0%, 22%, 1);\n  --unh-border-booker: hsla(0, 0%, 22%, 1);\n  --unh-border-muted: hsla(0, 0%, 18%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 100%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(240, 20%, 99%, 1);\n  --unh-text: hsla(0, 0%, 84%, 1);\n  --unh-text-subtle: hsla(0, 0%, 65%, 1);\n  --unh-text-muted: hsla(0, 0%, 34%, 1);\n  --unh-text-inverted: hsla(0, 0%, 10%, 1);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(218, 83%, 93%, 1);\n  --unh-text-success: hsla(134, 76%, 94%, 1);\n  --unh-text-attention: hsla(37, 86%, 92%, 1);\n  --unh-text-error: hsla(3, 66%, 93%, 1);\n\n  /* Brand */\n  --unh-brand: rgb(153, 152, 162);\n  --unh-brand-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-brand-text: rgb(123, 123, 126);\n\n  --background: 0 0% 4%;\n  --foreground: 210 40% 98%;\n\n  --card: 222.2 84% 4.9%;\n  --card-foreground: 210 40% 98%;\n\n  --popover: 0deg 0% 9.02%;\n  --popover-foreground: 210 40% 98%;\n\n  --primary: 251 84% 54%;\n  --primary-foreground: 222.2 47.4% 11.2%;\n\n  --secondary: 217.2 32.6% 17.5%;\n  --secondary-foreground: 210 40% 98%;\n\n  --muted: 217.2 32.6% 17.5%;\n  --muted-foreground: 215 20.2% 65.1%;\n\n  --accent: 217.2 32.6% 17.5%;\n  --accent-foreground: 210 40% 98%;\n\n  --destructive: 0 62.8% 30.6%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 0 0% 100% / 0.12;\n  --input: 0 0% 100% / 0.12;\n  --ring: 212.7 26.8% 83.9%;\n\n  --text-primary: #f5f5f5;\n  --text-secondary: #d4d4d4;\n  --text-tertiary: #a3a3a3;\n\n  --bg-tertiary: #0f172a;\n\n  --novel-highlight-default: #000000;\n  --novel-highlight-purple: #3f2c4b;\n  --novel-highlight-red: #5c1a1a;\n  --novel-highlight-yellow: #5c4b1a;\n  --novel-highlight-blue: #1a3d5c;\n  --novel-highlight-green: #1a5c20;\n  --novel-highlight-orange: #5c3a1a;\n  --novel-highlight-pink: #5c1a3a;\n  --novel-highlight-gray: #3a3a3a;\n}\n\n#uojs .step-content {\n  max-height: 65vh;\n  overflow: auto;\n  color: var(--text-color, #222);\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6,\n  p {\n    line-height: 1.1;\n    margin: 0;\n    border: 0;\n  }\n\n  h2 {\n    display: block;\n    font-size: 22px;\n    font-weight: bold;\n    line-height: 1.6;\n  }\n\n  h3 {\n    display: block;\n    font-size: 1.17em;\n    font-weight: 600;\n    line-height: 1.6;\n  }\n\n  h1 {\n    display: block;\n    font-size: 2em;\n    font-weight: bold;\n    line-height: 1.6;\n  }\n\n  p {\n    font-size: 14px;\n    min-height: 18px;\n    line-height: 1.4;\n  }\n\n  br {\n    min-height: 1rem;\n    content: \" \";\n    display: block;\n  }\n}\n\n/* // sidebar */\n\n.StyledTourPanel {\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  bottom: 0px;\n  right: 0;\n  width: 100vw;\n  border-radius: 4px;\n}\n\n.StyledTourPanel .unh-content {\n  width: 100%;\n  box-sizing: border-box;\n  overflow: auto;\n  padding: 0;\n  height: 100%;\n}\n\n.StyledNavBar .tour-option .unh-tour-option-settings {\n  display: flex;\n  margin-left: 10px;\n}\n\n.StyledNavBar .unh-builder-header {\n  display: flex;\n  justify-content: space-between;\n  width: 100%;\n}\n\n.StyledNavBar .unh-builder-info {\n  display: flex;\n}\n\n.StyledNavBar .unh-actions {\n  display: flex;\n}\n\n.StyledNavBar .unh-actions .move-up {\n  display: flex;\n  cursor: pointer;\n  padding: 7px 5px 3px 10px;\n}\n\n.StyledNavBar .unh-actions .support-menu {\n  padding: 0 6px;\n  height: 30px;\n  display: flex;\n  align-items: center;\n  margin-right: 5px;\n  margin-top: 6px;\n}\n\n.StyledNavBar .unh-actions .support-menu a {\n  height: 17px;\n}\n\n.StyledNavBar .nav-menu {\n  display: flex;\n  align-items: center;\n  width: 100%;\n  height: 30px;\n  margin-top: 5px;\n}\n\n.StyledNavBar .nav-menu a {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  padding: 5px 10px;\n  margin: 0;\n  font-size: 14px;\n  text-decoration: none;\n  text-transform: capitalize;\n}\n\n.StyledNavBar .nav-menu a.active {\n  font-weight: 500;\n  background: #fff;\n  box-shadow: 0 5px 0px 0 black;\n  border-left: 1px solid #eee;\n  border-right: 1px solid #eee;\n  border-top: 1px solid #eee;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n\n/* step settings */\n.StyledStepSettings {\n  display: flex;\n  flex-direction: column;\n  padding: 0 15px;\n}\n\n.StyledStepSettings .unh-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  font-weight: 500;\n  font-size: 20px;\n  margin-bottom: 12px;\n}\n\n.StyledStepSettings .unh-step-settings {\n  display: flex;\n  gap: 25px;\n}\n\n.StyledStepSettings .delete-icon {\n  cursor: pointer;\n}\n\n.StyledStepSettings .label {\n  padding-bottom: 8px;\n}\n\n.StyledStepSettings .unh-footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  box-sizing: border-box;\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 52px;\n  background-color: #fff;\n  border: 1px solid #eee;\n  box-shadow: 0px 2px 4px 2px #000;\n  padding: 0 12px;\n}\n\n.StyledStepSettings .actions-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.StyledStepSettings .pivot-element {\n  border: 1px solid #efefef;\n  font-size: 14px;\n  padding: 4px 8px;\n  background: #fff;\n  max-width: 150px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  cursor: default;\n  border-radius: 4px;\n}\n\n.StyledStepSettings .pivot-pointer {\n  min-width: auto;\n  width: 30px;\n  text-align: center;\n  padding: 0px;\n  height: 30px;\n  display: flex;\n  align-items: center;\n}\n\n@layer base {\n  :root {\n    --background: 0 0% 100%;\n    --foreground: 0 0% 3.9%;\n    --card: 0 0% 100%;\n    --card-foreground: 0 0% 3.9%;\n    --popover: 0 0% 100%;\n    --popover-foreground: 0 0% 3.9%;\n    --primary: 0 0% 9%;\n    --primary-foreground: 0 0% 98%;\n    --secondary: 0 0% 96.1%;\n    --secondary-foreground: 0 0% 9%;\n    --muted: 0 0% 96.1%;\n    --muted-foreground: 0 0% 45.1%;\n    --accent: 0 0% 96.1%;\n    --accent-foreground: 0 0% 9%;\n    --destructive: 0 84.2% 60.2%;\n    --destructive-foreground: 0 0% 98%;\n    --border: 0 0% 89.8%;\n    --input: 0 0% 89.8%;\n    --ring: 0 0% 3.9%;\n    --chart-1: 12 76% 61%;\n    --chart-2: 173 58% 39%;\n    --chart-3: 197 37% 24%;\n    --chart-4: 43 74% 66%;\n    --chart-5: 27 87% 67%;\n    --radius: 0.5rem;\n  }\n\n  .dark {\n    --background: 0 0% 3.9%;\n    --foreground: 0 0% 98%;\n    --card: 0 0% 3.9%;\n    --card-foreground: 0 0% 98%;\n    --popover: 0 0% 3.9%;\n    --popover-foreground: 0 0% 98%;\n    --primary: 0 0% 98%;\n    --primary-foreground: 0 0% 9%;\n    --secondary: 0 0% 14.9%;\n    --secondary-foreground: 0 0% 98%;\n    --muted: 0 0% 14.9%;\n    --muted-foreground: 0 0% 63.9%;\n    --accent: 0 0% 14.9%;\n    --accent-foreground: 0 0% 98%;\n    --destructive: 0 62.8% 30.6%;\n    --destructive-foreground: 0 0% 98%;\n    --border: 0 0% 14.9%;\n    --input: 0 0% 14.9%;\n    --ring: 0 0% 83.1%;\n    --chart-1: 220 70% 50%;\n    --chart-2: 160 60% 45%;\n    --chart-3: 30 80% 55%;\n    --chart-4: 280 65% 60%;\n    --chart-5: 340 75% 55%;\n  }\n}\n\n[data-unheard-activeelement=\"1\"] {\n  outline: 3px solid #2d3748 !important;\n}\n\n/* tour builder reset */\n:where(#uojs.unheard-builder-frame)\n  :where(blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre) {\n  margin: 0;\n}\n\n/* step editor shell */\n:where(#uojs) .uo-step-editor-shell {\n  border: 1px solid rgb(38 38 38);\n  box-sizing: border-box;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-header {\n  height: 48px !important;\n  min-height: 48px !important;\n  padding: 0 24px !important;\n  border-bottom: 1px solid rgb(38 38 38) !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-title {\n  font-size: 16px !important;\n  line-height: 20px !important;\n  font-weight: 500 !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tabs {\n  height: 48px !important;\n  margin-top: 0 !important;\n  padding: 0 8px !important;\n  gap: 0 !important;\n  border-bottom: 1px solid rgb(38 38 38) !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tab {\n  height: 100% !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border-bottom: 3px solid transparent !important;\n  color: rgb(161 161 170) !important;\n  font-size: 15px !important;\n  font-weight: 600 !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tab:hover {\n  border-bottom-color: transparent !important;\n  color: rgb(212 212 216) !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tab[data-state=\"active\"] {\n  border-bottom-color: rgb(229 229 229) !important;\n  color: rgb(229 229 229) !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tab-label {\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  width: calc(100% - 8px) !important;\n  min-height: 32px !important;\n  margin-bottom: 0 !important;\n  border-radius: 8px !important;\n  padding: 5px 16px !important;\n  box-sizing: border-box !important;\n  color: inherit !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .uo-step-editor-tab:hover .uo-step-editor-tab-label,\n:where(#uojs)\n  .uo-step-editor-shell\n  .uo-step-editor-tab[data-state=\"active\"]\n  .uo-step-editor-tab-label {\n  background: rgb(38 38 38) !important;\n}\n\n:where(#uojs) .uo-step-editor-shell .addon-wrapper button svg {\n  color: rgb(229 229 229) !important;\n  stroke: currentColor !important;\n}\n\n#uojs .upload {\n  position: relative;\n  width: 1.5rem;\n  height: 1.5rem;\n  margin-left: -4px;\n}\n\n#uojs [type=\"file\"] {\n  height: 0;\n  position: absolute;\n  overflow: hidden;\n  width: 0;\n  margin: 0;\n  padding: 0;\n}\n\n#uojs .sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n#uojs .arrow-element {\n  top: -6px;\n  border-radius: 0px;\n  position: absolute;\n  z-index: -1;\n}\n\n.editor .ProseMirror .variable-token {\n  padding: 0.25rem;\n}\n\n.prose h2 {\n  font-size: 20px;\n  font-weight: 600;\n}\n\n.prose h3 {\n  font-size: 18px;\n  font-weight: 500;\n}\n\n.prose p {\n  font-size: 14px;\n  font-weight: 400;\n  /* color: var(--text-secondary); */\n}\n\n.editor .ProseMirror.tiptap img.ProseMirror-selectednode {\n  outline: 3px solid #6a00f5;\n}\n\n:root {\n  border-style: solid;\n  border-color: rgb(229 229 229 / 1);\n}\n\n/* step editor */\n\n.editor {\n  border-radius: 5px;\n  overflow: hidden;\n}\n\n.editor .upload {\n  position: relative;\n  width: 1.5rem;\n  height: 1.5rem;\n  margin-left: -4px;\n}\n\n.editor [type=\"file\"] {\n  height: 0;\n  position: absolute;\n  overflow: hidden;\n  width: 0;\n  margin: 0;\n  padding: 0;\n}\n\n.editor .ProseMirror ul,\n.editor .ProseMirror ol {\n  padding: 0 1rem;\n}\n\n.editor .bubble-menu {\n  display: flex;\n  background-color: #0d0d0d;\n  padding: 0.2rem;\n  border-radius: 0.5rem;\n}\n\n.editor .bubble-menu button {\n  border: none;\n  background: none;\n  color: #fff;\n  font-size: 0.85rem;\n  font-weight: 500;\n  padding: 0 0.2rem;\n  opacity: 0.6;\n}\n\n.editor .bubble-menu button:hover,\n.editor .bubble-menu button.is-active {\n  opacity: 1;\n}\n\n.editor .floating-menu {\n  display: flex;\n  background-color: #0d0d0d 10;\n  padding: 0.2rem;\n  border-radius: 0.5rem;\n}\n\n.editor .floating-menu button {\n  border: none;\n  background: none;\n  font-size: 0.85rem;\n  font-weight: 500;\n  padding: 0 0.2rem;\n  opacity: 0.6;\n  display: flex;\n  align-items: center;\n  color: #222;\n}\n\n.editor .floating-menu button:hover,\n.editor .floating-menu button.is-active {\n  opacity: 1;\n}\n\n.editor .editor-content {\n  max-height: 640px;\n  overflow: auto;\n}\n\n.prose {\n  color: var(--tw-prose-body);\n  max-width: 65ch;\n}\n\n.prose :where(p):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n}\n\n.prose :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-lead);\n  font-size: 1.25em;\n  line-height: 1.6;\n  margin-top: 1.2em;\n  margin-bottom: 1.2em;\n}\n\n.prose :where(a):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-links);\n  text-decoration: underline;\n  font-weight: 500;\n}\n\n.prose :where(strong):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-bold);\n  font-weight: 600;\n}\n\n.prose :where(a strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(blockquote strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(thead th strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(ol):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: decimal;\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n  padding-left: 1.625em;\n}\n\n.prose :where(ol[type=\"A\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-alpha;\n}\n\n.prose :where(ol[type=\"a\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-alpha;\n}\n\n.prose :where(ol[type=\"A s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-alpha;\n}\n\n.prose :where(ol[type=\"a s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-alpha;\n}\n\n.prose :where(ol[type=\"I\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-roman;\n}\n\n.prose :where(ol[type=\"i\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-roman;\n}\n\n.prose :where(ol[type=\"I s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-roman;\n}\n\n.prose :where(ol[type=\"i s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-roman;\n}\n\n.prose :where(ol[type=\"1\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: decimal;\n}\n\n.prose :where(ul):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: disc;\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n  padding-left: 1.625em;\n}\n\n.prose :where(ol > li):not(:where([class~=\"not-prose\"] *))::marker {\n  font-weight: 400;\n  color: var(--tw-prose-counters);\n}\n\n.prose :where(ul > li):not(:where([class~=\"not-prose\"] *))::marker {\n  color: var(--tw-prose-bullets);\n}\n\n.prose :where(hr):not(:where([class~=\"not-prose\"] *)) {\n  border-color: var(--tw-prose-hr);\n  border-top-width: 1px;\n  margin-top: 3em;\n  margin-bottom: 3em;\n}\n\n.prose :where(blockquote):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 500;\n  font-style: italic;\n  color: var(--tw-prose-quotes);\n  border-left-width: 0.25rem;\n  border-left-color: var(--tw-prose-quote-borders);\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n  margin-top: 1.6em;\n  margin-bottom: 1.6em;\n  padding-left: 1em;\n}\n\n.prose :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"] *)):before {\n  content: open-quote;\n}\n\n.prose :where(blockquote p:last-of-type):not(:where([class~=\"not-prose\"] *)):after {\n  content: close-quote;\n}\n\n.prose :where(h1):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 2.25em;\n  margin-top: 0;\n  margin-bottom: 0.8888889em;\n  line-height: 1.1111111;\n}\n\n.prose :where(h1 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h2):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 1.5em;\n  margin-top: 2em;\n  margin-bottom: 1em;\n  line-height: 1.3333333;\n}\n\n.prose :where(h2 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h3):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 1.25em;\n  margin-top: 1.6em;\n  margin-bottom: 0.6em;\n  line-height: 1.6;\n}\n\n.prose :where(h3 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h4):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  margin-top: 1.5em;\n  margin-bottom: 0.5em;\n  line-height: 1.5;\n}\n\n.prose :where(h4 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 700;\n  color: inherit;\n}\n\n.prose :where(figure > *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose :where(figcaption):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-captions);\n  font-size: 0.875em;\n  line-height: 1.4285714;\n  margin-top: 0.8571429em;\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-code);\n  font-weight: 600;\n  font-size: 0.875em;\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)):before {\n  content: \"`\";\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)):after {\n  content: \"`\";\n}\n\n.prose :where(a code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(h1 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(h2 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n  font-size: 0.875em;\n}\n\n.prose :where(h3 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n  font-size: 0.9em;\n}\n\n.prose :where(h4 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(blockquote code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(thead th code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(pre):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-pre-code);\n  background-color: var(--tw-prose-pre-bg);\n  overflow-x: auto;\n  font-weight: 400;\n  font-size: 0.875em;\n  line-height: 1.7142857;\n  margin-top: 1.7142857em;\n  margin-bottom: 1.7142857em;\n  border-radius: 0.375rem;\n  padding: 0.8571429em 1.1428571em;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)) {\n  background-color: transparent;\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  font-weight: inherit;\n  color: inherit;\n  font-size: inherit;\n  font-family: inherit;\n  line-height: inherit;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)):before {\n  content: none;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)):after {\n  content: none;\n}\n\n.prose :where(table):not(:where([class~=\"not-prose\"] *)) {\n  width: 100%;\n  table-layout: auto;\n  text-align: left;\n  margin-top: 2em;\n  margin-bottom: 2em;\n  font-size: 0.875em;\n  line-height: 1.7142857;\n}\n\n.prose :where(thead):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-th-borders);\n}\n\n.prose :where(thead th):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  vertical-align: bottom;\n  padding-right: 0.5714286em;\n  padding-bottom: 0.5714286em;\n  padding-left: 0.5714286em;\n}\n\n.prose :where(tbody tr):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-td-borders);\n}\n\n.prose :where(tbody tr:last-child):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 0;\n}\n\n.prose :where(tbody td):not(:where([class~=\"not-prose\"] *)) {\n  vertical-align: baseline;\n}\n\n.prose :where(tfoot):not(:where([class~=\"not-prose\"] *)) {\n  border-top-width: 1px;\n  border-top-color: var(--tw-prose-th-borders);\n}\n\n.prose :where(tfoot td):not(:where([class~=\"not-prose\"] *)) {\n  vertical-align: top;\n}\n\n.prose {\n  --tw-prose-body: #374151;\n  --tw-prose-headings: #111827;\n  --tw-prose-lead: #4b5563;\n  --tw-prose-links: #111827;\n  --tw-prose-bold: #111827;\n  --tw-prose-counters: #6b7280;\n  --tw-prose-bullets: #d1d5db;\n  --tw-prose-hr: #e5e7eb;\n  --tw-prose-quotes: #111827;\n  --tw-prose-quote-borders: #e5e7eb;\n  --tw-prose-captions: #6b7280;\n  --tw-prose-code: #111827;\n  --tw-prose-pre-code: #e5e7eb;\n  --tw-prose-pre-bg: #1f2937;\n  --tw-prose-th-borders: #d1d5db;\n  --tw-prose-td-borders: #e5e7eb;\n  --tw-prose-invert-body: #d1d5db;\n  --tw-prose-invert-headings: #fff;\n  --tw-prose-invert-lead: #9ca3af;\n  --tw-prose-invert-links: #fff;\n  --tw-prose-invert-bold: #fff;\n  --tw-prose-invert-counters: #9ca3af;\n  --tw-prose-invert-bullets: #4b5563;\n  --tw-prose-invert-hr: #374151;\n  --tw-prose-invert-quotes: #f3f4f6;\n  --tw-prose-invert-quote-borders: #374151;\n  --tw-prose-invert-captions: #9ca3af;\n  --tw-prose-invert-code: #fff;\n  --tw-prose-invert-pre-code: #d1d5db;\n  --tw-prose-invert-pre-bg: rgba(0, 0, 0, 0.5);\n  --tw-prose-invert-th-borders: #4b5563;\n  --tw-prose-invert-td-borders: #374151;\n  font-size: 0.9375rem;\n  line-height: 1.75;\n}\n\n.prose img[align=\"left\"] {\n  margin-right: 1em;\n}\n\n.prose img[align=\"right\"] {\n  margin-left: 1em;\n}\n\n.prose img[align=\"center\"] {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.prose :where(video):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 2em;\n  margin-bottom: 2em;\n}\n\n.prose :where(figure):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n.prose :where(li):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.5em;\n  margin-bottom: 0.5em;\n}\n\n.prose :where(ol > li):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0.375em;\n}\n\n.prose :where(ul > li):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0.375em;\n}\n\n.prose :where(.prose > ul > li p):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n\n.prose :where(.prose > ul > li > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n}\n\n.prose :where(.prose > ul > li > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 1.25em;\n}\n\n.prose :where(.prose > ol > li > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n}\n\n.prose :where(.prose > ol > li > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 1.25em;\n}\n\n.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n\n.prose :where(hr + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h2 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h3 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h4 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0;\n}\n\n.prose :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-right: 0;\n}\n\n.prose :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\n  padding: 0.5714286em;\n}\n\n.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0;\n}\n\n.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-right: 0;\n}\n\n.prose :where(.prose > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(.prose > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 0;\n}\n\n.prose {\n  max-width: 100%;\n  overflow-wrap: break-word;\n  line-height: 1.5;\n  color: var(--text-primary);\n  word-break: break-word;\n  word-wrap: break-word;\n}\n\n.prose blockquote:not(:where([class~=\"not-prose\"] *)),\n.prose ol:not(:where([class~=\"not-prose\"] *)),\n.prose p:not(:where([class~=\"not-prose\"] *)),\n.prose pre:not(:where([class~=\"not-prose\"] *)),\n.prose ul:not(:where([class~=\"not-prose\"] *)),\n.prose > div:not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n.prose :where(h1, h2, h3, h1 strong, h2 strong, h3 strong):not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 10px;\n  margin-top: 0;\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n.prose\n  :where(h1, h2, h3, h1 strong, h2 strong, h3 strong):not(:where([class~=\"not-prose\"]) *)\n  a.prose-link:not(.mention) {\n  font-weight: 600;\n}\n\n.prose h1:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.prose h2:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n\n.prose h3:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) {\n  background-clip: padding-box;\n  border-width: 0.5px;\n  background-color: var(--bg-tertiary);\n  padding: 16px;\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *):is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(64 64 64 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) code {\n  white-space: pre;\n  border-style: none;\n  background-color: transparent;\n  padding: 0;\n  color: var(--text-primary);\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) code:is(.dark *) {\n  background-color: transparent;\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *) {\n  background-clip: padding-box;\n  white-space: pre-wrap;\n  border-radius: 0.25rem;\n  border-width: 0.5px;\n  background-color: var(--bg-tertiary);\n  padding: 1px 4px;\n  font-weight: 500;\n  color: var(--text-primary);\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *):is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(64 64 64 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *):after,\n.prose code:not(:where([class~=\"not-prose\"]) *):before {\n  display: none;\n}\n\n.prose blockquote:not(:where([class~=\"not-prose\"]) *) {\n  border-color: var(--border-primary);\n  font-weight: 400;\n  color: var(--text-secondary);\n}\n\n.prose blockquote p:first-of-type:not(:where([class~=\"not-prose\"]) *):after,\n.prose blockquote p:first-of-type:not(:where([class~=\"not-prose\"]) *):before {\n  display: none;\n}\n\n.prose blockquote blockquote:not(:where([class~=\"not-prose\"]) *) {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose a.prose-link:not(.mention) {\n  font-weight: 400;\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n\n@media (hover: hover) and (pointer: fine) {\n  .prose a.prose-link:not(.mention):hover {\n    text-decoration-line: underline;\n  }\n}\n\n.prose .mention {\n  cursor: pointer;\n  font-weight: 600;\n  color: var(--text-primary);\n  display: inline-flex;\n  align-items: center;\n}\n\n.prose .mention[data-kind=\"teammate\"]::after {\n  content: \"\";\n  width: 0.875rem;\n  height: 0.875rem;\n  flex: none;\n  margin-inline-start: 0.125rem;\n  background: center / contain no-repeat\n    url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='m17.999 10c0-1.097-.567-2.113-1.465-2.707.215-1.054-.103-2.174-.878-2.95-.775-.776-1.896-1.094-2.95-.878C12.113 2.568 11.097 2.001 10 2.001s-2.113.567-2.706 1.464c-1.053-.216-2.174.102-2.95.878s-1.093 1.896-.878 2.949C2.569 7.885 2.001 8.902 2.001 9.999s.567 2.113 1.465 2.707c-.215 1.054.103 2.174.878 2.95s1.898 1.092 2.95.878c.593.897 1.609 1.464 2.706 1.464s2.113-.568 2.706-1.465c1.059.214 2.176-.103 2.95-.878.776-.776 1.094-1.896.878-2.95.897-.593 1.465-1.609 1.465-2.707Zm-4.218-1.875-4 5a.997.997 0 0 1-.726.374l-.056.001a.997.997 0 0 1-.707-.293l-2-2a.999.999 0 1 1 1.414-1.414l1.21 1.21 3.302-4.127a1 1 0 1 1 1.562 1.249Z' fill='%23f59e0b'/%3E%3C/svg%3E\");\n}\n\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) ol,\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) ul {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) p {\n  margin: 0;\n}\n\n.prose ul.task-list {\n  list-style-type: none;\n}\n\n.prose ul.task-list li.task-item {\n  position: relative;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"] {\n  background-clip: padding-box;\n  margin-left: -6px;\n  margin-right: 12px;\n  margin-top: 2px;\n  height: 20px;\n  width: 20px;\n  max-width: 20rem;\n  cursor: pointer;\n  border-radius: 0.25rem;\n  border-width: 0.5px;\n  border-color: rgba(0, 0, 0, 0.12);\n  background-color: var(--bg-elevated);\n  background-clip: border-box;\n  vertical-align: top;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:checked {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:focus {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)\n    var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width))\n    var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity));\n  --tw-ring-offset-width: 0px;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:disabled {\n  cursor: default;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:is(.dark *) {\n  border-color: hsla(0, 0%, 100%, 0.08);\n  background-color: var(--bg-quaternary);\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:checked:is(.dark *) {\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:focus:is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(96 165 250 / var(--tw-border-opacity));\n  --tw-ring-color: rgba(37, 99, 235, 0.2);\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"] {\n  position: absolute;\n  left: -20px;\n  top: 0;\n}\n\n.prose ul.task-list li.task-item div:first-of-type:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 0;\n  min-width: 1em;\n}\n\n.prose ul.task-list li.task-item[data-checked=\"true\"] > div > p {\n  color: var(--text-quaternary);\n  text-decoration-line: line-through;\n  text-decoration-thickness: 2px;\n}\n\n.prose ul.task-list li.task-item[data-checked=\"true\"] > div > p > code {\n  display: inline-block;\n  color: var(--text-quaternary);\n}\n\n.prose ul.task-list li.task-item :last-child:not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 0;\n}\n\n.prose .task-list-disabled {\n  cursor: default;\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n\n.prose .task-list-disabled:focus {\n  border-color: rgba(0, 0, 0, 0.12);\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)\n    var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width))\n    var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.prose .task-list-disabled:focus:is(.dark *) {\n  border-color: hsla(0, 0%, 100%, 0.08);\n}\n\n.prose strong:not(:where([class~=\"not-prose\"]) *) {\n  color: inherit;\n}\n\n.guide-popover-content [style^=\"color:\"] :where(*),\n.guide-popover-content [style*=\"; color:\"] :where(*),\n.step-content [style^=\"color:\"] :where(*),\n.step-content [style*=\"; color:\"] :where(*) {\n  color: inherit;\n}\n\n.prose div[data-hr-wrapper] {\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\n.prose div[data-hr-wrapper] hr {\n  margin-top: 0;\n  margin-bottom: 0;\n  border-top-width: 2px;\n}\n\n.prose div[data-hr-wrapper].ProseMirror-selectednode hr {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n\n.prose .note-comment {\n  cursor: pointer;\n  border-bottom-width: 2px;\n  --tw-border-opacity: 1;\n  border-color: rgb(253 224 71 / var(--tw-border-opacity));\n  background-color: rgba(253, 224, 71, 0.2);\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 0.1s;\n}\n\n.prose .note-comment:is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\n}\n\n.prose .note-comment:hover {\n  background-color: rgba(253, 224, 71, 0.5);\n}\n\n.prose > .node-mediaGallery:first-child {\n  margin-top: 0;\n}\n\n.prose > .node-mediaGallery:last-child {\n  margin-bottom: 4px;\n}\n\n.prose .collaboration-cursor__caret {\n  background-clip: padding-box;\n  position: relative;\n  margin-left: -1px;\n  margin-right: -1px;\n  display: inline;\n  border-left-width: 0.5px;\n  border-right-width: 0.5px;\n  word-break: normal;\n}\n\n@keyframes autohide-cursor {\n  to {\n    opacity: 0;\n  }\n}\n\n.prose .collaboration-cursor__label {\n  pointer-events: none;\n  position: absolute;\n  left: -1px;\n  top: 0;\n  --tw-translate-y: -100%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))\n    skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))\n    scaleY(var(--tw-scale-y));\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  white-space: nowrap;\n  border-radius: 0.375rem;\n  border-bottom-left-radius: 0;\n  padding: 4px;\n  font-size: 0.75rem;\n  line-height: 1rem;\n  font-weight: 500;\n  line-height: 1;\n  animation: autohide-cursor 0.1s ease-out 1.5s forwards;\n}\n\n.prose .collaboration-cursor__caret:hover .collaboration-cursor__label {\n  animation: none;\n}\n\n.prose > :first-child {\n  margin-top: 0;\n}\n\n.prose * {\n  clear: both;\n}\n\n.prose > img {\n  display: block;\n}\n\n.prose > :last-child {\n  margin-bottom: 0;\n}\n\n.prose[data-reactions-only=\"true\"] {\n  font-size: 2.25rem;\n  line-height: 2.5rem;\n  line-height: 1;\n}\n\n.prose[data-reactions-only=\"true\"] img[data-type=\"reaction\"] {\n  height: 36px;\n  width: 36px;\n}\n\n.prose.note {\n  font-size: 1rem;\n}\n\n.prose.\\!note {\n  font-size: 1rem !important;\n}\n\n.prose.note\n  :where(\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    h1 strong,\n    h2 strong,\n    h3 strong,\n    h4 strong,\n    h5 strong,\n    h6 strong\n  ):not(:where([class~=\"not-prose\"]) *) {\n  font-weight: 700;\n  line-height: 1.3;\n}\n\n.prose.\\!note\n  :where(\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    h1 strong,\n    h2 strong,\n    h3 strong,\n    h4 strong,\n    h5 strong,\n    h6 strong\n  ):not(:where([class~=\"not-prose\"]) *) {\n  font-weight: 700;\n  line-height: 1.3;\n}\n\n.prose.note h1:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 40px;\n  font-size: clamp(1.575rem, 4vw, 1.875rem);\n}\n\n.prose.\\!note h1:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 40px;\n  font-size: clamp(1.575rem, 4vw, 1.875rem);\n}\n\n.prose.note h2:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 32px;\n  font-size: clamp(1.275rem, 4vw, 1.575rem);\n}\n\n.prose.\\!note h2:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 32px;\n  font-size: clamp(1.275rem, 4vw, 1.575rem);\n}\n\n.prose.note h3:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 6px;\n  margin-top: 24px;\n  font-size: clamp(1.175rem, 4vw, 1.275rem);\n}\n\n.prose.\\!note h3:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 6px;\n  margin-top: 24px;\n  font-size: clamp(1.175rem, 4vw, 1.275rem);\n}\n\n.prose.note:not(.dragging) .ProseMirror-selectednode {\n  outline: none !important;\n  box-shadow: none;\n}\n\n.prose.\\!note:not(.dragging) .ProseMirror-selectednode {\n  outline: none !important;\n  box-shadow: none !important;\n}\n\n.prose a:where(:not([class~=\"not-prose\"]) *) {\n  overflow-wrap: break-word;\n  font-weight: 400;\n  /* text-decoration-line: none; */\n  word-break: break-word;\n  word-wrap: break-word;\n}\n\n.prose a {\n  font-feature-settings: \"calt\" 0;\n}\n\n.prose img[data-type=\"reaction\"] {\n  margin-top: 0;\n  margin-bottom: 0;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n  cursor: text;\n  -o-object-fit: contain;\n  object-fit: contain;\n  vertical-align: text-top;\n  -webkit-touch-callout: none;\n}\n\n.prose span[data-type=\"reaction\"] {\n  font-family: emoji;\n  line-height: 1;\n}\n\n.prose.truncate-links a[data-truncated] span {\n  display: none;\n}\n\n.drag-handle {\n  pointer-events: none;\n  position: fixed;\n  cursor: grab;\n  opacity: 0;\n  transition: opacity 0.1s ease-in;\n  border-radius: 0.25rem;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(163, 163, 163, 1)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E\");\n  background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);\n  background-repeat: no-repeat;\n  background-position: 50%;\n  width: 1.2rem;\n  height: 1.5rem;\n}\n\n.drag-handle:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.drag-handle:hover:is(.dark *) {\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.drag-handle:hover {\n  transition: background-color 0.1s;\n}\n\n.drag-handle.hide {\n  pointer-events: none;\n  display: none;\n}\n\n.ProseMirror-focused {\n  outline: none;\n}\n\n.ProseMirror-focused + .drag-handle {\n  pointer-events: auto;\n}\n\n.drag-handle:active,\n:has(> .ProseMirror-focused):hover > .drag-handle {\n  pointer-events: auto;\n  opacity: 1;\n}\n\n@media (hover: none) and (pointer: coarse) {\n  .drag-handle {\n    pointer-events: none;\n    display: none;\n  }\n}\n\n.ProseMirror:has(> :only-child:not(ul):not(ol)) + .drag-handle {\n  display: none;\n}\n\n.tiptap {\n  --white: #fff;\n  --black: #2e2b29;\n  --black-contrast: #110f0e;\n  --gray-1: rgba(61, 37, 20, 0.05);\n  --gray-2: rgba(61, 37, 20, 0.08);\n  --gray-3: rgba(61, 37, 20, 0.12);\n  --gray-4: rgba(53, 38, 28, 0.3);\n  --gray-5: rgba(28, 25, 23, 0.6);\n  --green: #22c55e;\n  --purple: #6a00f5;\n  --purple-contrast: #5800cc;\n  --purple-light: rgba(88, 5, 255, 0.05);\n  --yellow-contrast: #facc15;\n  --yellow: rgba(250, 204, 21, 0.4);\n  --yellow-light: #fffae5;\n  --red: #ff5c33;\n  --red-light: #ffebe5;\n  --shadow: 0px 12px 33px 0px rgba(0, 0, 0, 0.06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, 0.04);\n\n  :first-child {\n    margin-top: 0;\n  }\n\n  pre {\n    background: var(--black);\n    border-radius: 0.5rem;\n    color: var(--white);\n    font-family: \"JetBrainsMono\", monospace;\n    margin: 1.5rem 0;\n    padding: 0.75rem 1rem;\n\n    code {\n      background: none;\n      color: inherit;\n      font-size: 0.8rem;\n      padding: 0;\n    }\n\n    /* Code styling */\n    .hljs-comment,\n    .hljs-quote {\n      color: #616161;\n    }\n\n    .hljs-variable,\n    .hljs-template-variable,\n    .hljs-attribute,\n    .hljs-tag,\n    .hljs-regexp,\n    .hljs-link,\n    .hljs-name,\n    .hljs-selector-id,\n    .hljs-selector-class {\n      color: #f98181;\n    }\n\n    .hljs-number,\n    .hljs-meta,\n    .hljs-built_in,\n    .hljs-builtin-name,\n    .hljs-literal,\n    .hljs-type,\n    .hljs-params {\n      color: #fbbc88;\n    }\n\n    .hljs-string,\n    .hljs-symbol,\n    .hljs-bullet {\n      color: #b9f18d;\n    }\n\n    .hljs-title,\n    .hljs-section {\n      color: #faf594;\n    }\n\n    .hljs-keyword,\n    .hljs-selector-tag {\n      color: #70cff8;\n    }\n\n    .hljs-emphasis {\n      font-style: italic;\n    }\n\n    .hljs-strong {\n      font-weight: 700;\n    }\n  }\n}\n\n.unh-step-description * {\n  margin: 5px 0;\n}\n\n.guide-popover video,\n.editor .ProseMirror video {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  background: #000;\n}\n\n.guide-popover video[data-frameless=\"true\"],\n.guide-popover video.uo-step-video-frameless,\n.guide-popover video.uo-video-frameless {\n  margin: 0;\n  border-radius: 0;\n}\n\n.react-colorful {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 200px;\n  height: 200px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  cursor: default;\n}\n\n.react-colorful__saturation {\n  position: relative;\n  flex-grow: 1;\n  border-color: transparent;\n  border-bottom: 12px solid #000;\n  border-radius: 8px 8px 0 0;\n  background-image:\n    linear-gradient(0deg, #000, transparent), linear-gradient(90deg, #fff, hsla(0, 0%, 100%, 0));\n}\n\n.react-colorful__alpha-gradient,\n.react-colorful__pointer-fill {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n  border-radius: inherit;\n}\n\n.react-colorful__alpha-gradient,\n.react-colorful__saturation {\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n}\n\n.react-colorful__alpha,\n.react-colorful__hue {\n  position: relative;\n  height: 24px;\n}\n\n.react-colorful__hue {\n  background: linear-gradient(90deg, red 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, red);\n}\n\n.react-colorful__last-control {\n  border-radius: 0 0 8px 8px;\n}\n\n.react-colorful__interactive {\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  border-radius: inherit;\n  outline: none;\n  touch-action: none;\n}\n\n.react-colorful__pointer {\n  position: absolute;\n  z-index: 1;\n  box-sizing: border-box;\n  width: 28px;\n  height: 28px;\n  transform: translate(-50%, -50%);\n  background-color: #fff;\n  border: 2px solid #fff;\n  border-radius: 50%;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.react-colorful__interactive:focus .react-colorful__pointer {\n  transform: translate(-50%, -50%) scale(1.1);\n}\n\n.react-colorful__alpha,\n.react-colorful__alpha-pointer {\n  background-color: #fff;\n  background-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>');\n}\n\n.react-colorful__saturation-pointer {\n  z-index: 3;\n}\n\n.react-colorful__hue-pointer {\n  z-index: 2;\n}\n\n.scroll-container {\n  scrollbar-gutter: stable;\n  scrollbar-width: thin;\n  scrollbar-color: var(--unh-border) transparent;\n}\n\n/* Selection indicator animation */\n@keyframes selectionPulse {\n  0%,\n  100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0.7;\n  }\n}\n","@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n#uojs ol.steps-list {\n  list-style: none;\n  padding-left: 0;\n  counter-reset: steps-counter;\n  position: relative;\n}\n\n#uojs ol.steps-list > li {\n  counter-increment: steps-counter;\n  position: relative;\n  margin: 0;\n  padding-left: 3.2rem;\n  padding-bottom: 1rem;\n}\n\n#uojs ol.steps-list > li:last-child {\n  padding-bottom: 0;\n}\n\n#uojs ol.steps-list > * {\n  margin: 0;\n}\n\n#uojs ol.steps-list > li::before {\n  content: counter(steps-counter);\n  position: absolute;\n  left: 0;\n  top: 0.15rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 1.75rem;\n  height: 1.75rem;\n  border-radius: 0.5rem;\n  border: 1.5px solid var(--unh-border, hsl(251, 85%, 48%));\n  background: var(--unh-border-subtle);\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: var(--unh-foreground);\n}\n\n#uojs ol.steps-list > li[data-step]::before {\n  content: attr(data-step);\n}\n\n#uojs ol.steps-list > li::after {\n  content: \"\";\n  position: absolute;\n  left: 0.84rem;\n  top: 2.15rem;\n  bottom: 0rem;\n  width: 1.5px;\n  background: var(--unh-border-muted, hsl(216, 12%, 84%));\n}\n\n#uojs ol.steps-list > li:last-child::after {\n  display: none;\n}\n\n#uojs ol.steps-list > li > p:first-child {\n  font-weight: 600;\n  margin-bottom: 0.25rem;\n  padding-top: 3px;\n  font-size: 0.98rem;\n}\n\n#uojs ol.steps-list > li > img,\n#uojs ol.steps-list > li > figure,\n#uojs ol.steps-list > li > video,\n#uojs ol.steps-list > li > iframe {\n  display: block;\n  float: none !important;\n  clear: none;\n  max-width: 100%;\n  margin-top: 0.75rem;\n  margin-bottom: 0.75rem;\n}\n\n#uojs ol.steps-list > li > img[align=\"center\"],\n#uojs ol.steps-list > li > figure[align=\"center\"] {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n#uojs ol.steps-list > li > *:not(:first-child) {\n  /*color: var(--unh-text-subtle, hsl(240 4% 46%));*/\n  opacity: 0.7;\n  font-size: 1em;\n}\n\n#uojs .prose-post [data-type=\"imported-hint\"] {\n  margin: 1rem 0;\n  padding: 0.875rem 1rem;\n  border-left: 4px solid var(--primary-brand, hsl(251, 85%, 48%));\n  border-radius: 0.5rem;\n  background: var(--unh-bg-subtle, hsl(220, 14%, 96%));\n}\n\n#uojs .prose details.uo-rte-accordion {\n  --uo-changelog-heading: var(--unh-text-emphasis, hsl(217, 19%, 27%));\n  --uo-changelog-text: var(--unh-text, hsl(217, 19%, 27%));\n  --uo-changelog-chevron: #62666d;\n  --uo-changelog-pill-bg: transparent;\n  --uo-changelog-pill-border: var(--unh-border, #d1d5db);\n  --uo-changelog-code-bg: #f4f4f5;\n  --uo-changelog-code-border: #dedee3;\n  --uo-changelog-divider: rgb(0 0 0 / 8%);\n  margin: 0;\n  border: 0;\n}\n\n#uojs[data-theme=\"dark\"] .prose details.uo-rte-accordion,\n#uojs .dark .prose details.uo-rte-accordion {\n  --uo-changelog-heading: #f7f8f8;\n  --uo-changelog-text: #d0d6e0;\n  --uo-changelog-pill-bg: transparent;\n  --uo-changelog-pill-border: #34343a;\n  --uo-changelog-code-bg: #1c1c1f;\n  --uo-changelog-code-border: #34343a;\n  --uo-changelog-divider: rgb(255 255 255 / 5%);\n}\n\n#uojs .prose details.uo-rte-accordion + details.uo-rte-accordion {\n  border-top: 1px solid var(--uo-changelog-divider);\n}\n\n#uojs .prose details.uo-rte-accordion > summary {\n  display: flex;\n  min-height: 3.5rem;\n  align-items: center;\n  margin: 0;\n  padding: 1rem 0;\n  border-radius: 0.5rem;\n  color: var(--uo-changelog-heading);\n  font-size: 0.9375rem;\n  font-weight: 510;\n  line-height: 1.5rem;\n  letter-spacing: -0.011em;\n  list-style: none;\n  cursor: pointer;\n}\n\n#uojs .prose details.uo-rte-accordion > summary::-webkit-details-marker {\n  display: none;\n}\n\n#uojs .prose details.uo-rte-accordion > summary:focus-visible {\n  outline: 1px solid #5e69d1;\n  outline-offset: 2px;\n}\n\n#uojs .prose details.uo-rte-accordion > summary::after {\n  width: 1rem;\n  height: 1.5rem;\n  flex: 0 0 1rem;\n  margin-left: auto;\n  background: var(--uo-changelog-chevron);\n  content: \"\";\n  -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z'/%3E%3C/svg%3E\")\n    center / 1rem 1rem no-repeat;\n  mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z'/%3E%3C/svg%3E\")\n    center / 1rem 1rem no-repeat;\n  transform: rotate(0deg);\n  transition: transform 120ms ease;\n}\n\n#uojs .prose details.uo-rte-accordion[open] > summary::after {\n  transform: rotate(90deg);\n}\n\n#uojs .prose details.uo-rte-accordion > [data-type=\"details-content\"] {\n  padding-bottom: 1rem;\n}\n\n#uojs .prose details.uo-rte-accordion ul {\n  margin: 0;\n  padding-left: 1.5rem;\n}\n\n#uojs .prose details.uo-rte-accordion li {\n  margin: 0;\n  padding: 0;\n}\n\n#uojs .prose details.uo-rte-accordion li + li {\n  margin-top: 0.5rem;\n}\n\n#uojs .prose details.uo-rte-accordion li::marker {\n  color: currentColor;\n}\n\n#uojs .prose details.uo-rte-accordion li > p {\n  margin: 0 !important;\n  color: inherit !important;\n  font-family: inherit !important;\n  font-size: inherit !important;\n  font-weight: inherit !important;\n  line-height: inherit !important;\n  letter-spacing: inherit !important;\n}\n\n#uojs .prose details.uo-rte-accordion code:not(:where(pre code, [class~=\"not-prose\"] *)) {\n  padding: 0.0875em 0.21875em;\n  border: 1px solid var(--uo-changelog-code-border);\n  border-radius: 0.2625em;\n  background: var(--uo-changelog-code-bg);\n  color: inherit;\n  font-size: 0.875em;\n  font-weight: 400;\n  line-height: 1.3;\n}\n\n#uojs .prose details.uo-rte-accordion code::before,\n#uojs .prose details.uo-rte-accordion code::after {\n  content: none !important;\n}\n\n#uojs .prose .uo-project-tag {\n  display: inline-flex;\n  max-width: 100%;\n  min-height: 1.5625rem;\n  align-items: center;\n  gap: 0.375rem;\n  padding: 0 0.5rem;\n  border: 1px solid var(--uo-changelog-pill-border, var(--unh-border, #d1d5db));\n  border-radius: 9999px;\n  background: var(--uo-changelog-pill-bg, transparent);\n  color: var(--uo-changelog-text, var(--unh-text, #3f3e45));\n  font-size: 0.8125rem;\n  font-weight: 400;\n  line-height: 1.6;\n  letter-spacing: normal;\n  text-overflow: ellipsis;\n  vertical-align: baseline;\n  overflow: hidden;\n  white-space: nowrap;\n}\n\n#uojs[data-theme=\"dark\"] .prose .uo-project-tag,\n#uojs .dark .prose .uo-project-tag {\n  --uo-changelog-pill-bg: transparent;\n  --uo-changelog-pill-border: #34343a;\n  --uo-changelog-text: #d0d6e0;\n}\n\n#uojs .prose .uo-project-tag-dot {\n  width: 0.5625rem;\n  height: 0.5625rem;\n  flex: 0 0 auto;\n}\n\n#uojs .prose-post .uo-rte-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 7rem;\n  max-width: 100%;\n  min-height: 2.5rem;\n  margin: 0.5rem 0;\n  padding: 0.625rem 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.5rem;\n  background: var(--primary-brand, hsl(251, 85%, 48%));\n  color: hsl(0, 0%, 100%);\n  font: inherit;\n  font-weight: 600;\n  line-height: 1.2;\n  text-align: center;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n#uojs .prose-post .uo-rte-button:hover {\n  filter: brightness(0.96);\n}\n\n#uojs .prose-post .uo-rte-button[data-uo-bg=\"secondary\"] {\n  border-color: var(--unh-border, hsl(216, 12%, 84%));\n  background: var(--unh-bg-subtle, hsl(220, 14%, 96%));\n}\n\n#uojs .prose-post .uo-rte-button[data-uo-color=\"secondary\"] {\n  color: var(--unh-text-emphasis, hsl(217, 19%, 27%));\n}\n\n#uojs .prose-post [data-type=\"imported-hint\"]::before {\n  content: attr(data-label);\n  display: block;\n  margin-bottom: 0.25rem;\n  color: var(--unh-text-emphasis, hsl(217, 19%, 27%));\n  font-weight: 700;\n}\n\n#uojs .prose-post [data-type=\"imported-hint\"][data-variant=\"warning\"] {\n  border-left-color: hsl(38, 92%, 50%);\n  background: hsl(48, 96%, 96%);\n}\n\n#uojs .prose-post [data-type=\"imported-hint\"][data-variant=\"danger\"] {\n  border-left-color: hsl(0, 84%, 60%);\n  background: hsl(0, 84%, 96%);\n}\n\n#uojs .prose-post [data-type=\"imported-hint\"][data-variant=\"success\"] {\n  border-left-color: hsl(142, 71%, 45%);\n  background: hsl(142, 71%, 96%);\n}\n\n#uojs .prose-post [data-type=\"imported-tabs\"] {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  margin: 1rem 0;\n  border: 1px solid var(--unh-border, hsl(216, 12%, 84%));\n  border-radius: 0.5rem;\n  background: linear-gradient(\n    to bottom,\n    var(--unh-bg-subtle, hsl(220, 14%, 96%)) 0,\n    var(--unh-bg-subtle, hsl(220, 14%, 96%)) 2.5rem,\n    var(--unh-bg, hsl(0, 0%, 100%)) 2.5rem,\n    var(--unh-bg, hsl(0, 0%, 100%)) 100%\n  );\n  overflow: hidden;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"] {\n  display: contents;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"] > h3:first-child {\n  order: 1;\n  margin: 0;\n  padding: 0.625rem 0.875rem;\n  border: 0;\n  background: var(--unh-bg-subtle, hsl(220, 14%, 96%));\n  color: var(--unh-text-subtle, hsl(220, 9%, 46%));\n  font-size: 0.875rem;\n  font-weight: 700;\n  line-height: 1.25rem;\n  cursor: pointer;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"].is-active > h3:first-child,\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"]:not(:has(> [data-type=\"imported-tab\"].is-active))\n  > [data-type=\"imported-tab\"]:first-child\n  > h3:first-child {\n  border-bottom-color: transparent;\n  background: var(--unh-bg, hsl(0, 0%, 100%));\n  color: var(--unh-text-emphasis, hsl(217, 19%, 27%));\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"] > :not(h3:first-child) {\n  order: 2;\n  display: none;\n  flex-basis: 100%;\n  width: 100%;\n  background: var(--unh-bg, hsl(0, 0%, 100%));\n  padding-right: 0.875rem;\n  padding-left: 0.875rem;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"].is-active > :not(h3:first-child),\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"]:not(:has(> [data-type=\"imported-tab\"].is-active))\n  > [data-type=\"imported-tab\"]:first-child\n  > :not(h3:first-child) {\n  display: block;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"].is-active > h3:first-child + *,\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"]:not(:has(> [data-type=\"imported-tab\"].is-active))\n  > [data-type=\"imported-tab\"]:first-child\n  > h3:first-child\n  + * {\n  padding-top: 0.875rem;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"].is-active > :last-child,\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"]:not(:has(> [data-type=\"imported-tab\"].is-active))\n  > [data-type=\"imported-tab\"]:first-child\n  > :last-child {\n  padding-bottom: 0.875rem;\n}\n\n#uojs .prose-post [data-type=\"imported-tab\"] > :where(pre, [data-type=\"imported-hint\"]) {\n  width: calc(100% - 1.75rem);\n  margin-right: 0.875rem;\n  margin-left: 0.875rem;\n}\n\n#uojs .prose-post [data-type=\"imported-tabs\"][data-component=\"code-group\"] {\n  position: relative;\n  border-radius: 0.5rem;\n}\n\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"][data-component=\"code-group\"]\n  > [data-type=\"imported-tab\"]\n  > h3:first-child {\n  padding: 0.625rem 0.875rem;\n  border: 0;\n  background: var(--unh-bg-subtle, hsl(220, 14%, 96%));\n  color: var(--unh-text-subtle, hsl(220, 9%, 46%));\n  font-size: 0.875rem;\n  font-weight: 700;\n  line-height: 1.25rem;\n}\n\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"][data-component=\"code-group\"]\n  > [data-type=\"imported-tab\"].is-active\n  > h3:first-child {\n  border-bottom-color: transparent;\n  background: var(--unh-bg, hsl(0, 0%, 100%));\n  color: var(--unh-text-emphasis, hsl(217, 19%, 27%));\n  box-shadow: none;\n}\n\n#uojs\n  .prose-post\n  [data-type=\"imported-tabs\"][data-component=\"code-group\"]\n  > [data-type=\"imported-tab\"]\n  > pre {\n  width: calc(100% - 1.75rem);\n  margin: 0 0.875rem 0.875rem;\n}\n\n#uojs .prose-post .code-group-copy {\n  order: 1;\n  position: absolute;\n  top: 0.75rem;\n  right: 0.75rem;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 1.75rem;\n  height: 1.75rem;\n  border: 0;\n  border-radius: 0.5rem;\n  background: hsl(220, 13%, 94%, 0.9);\n  color: hsl(222, 12%, 16%);\n  cursor: pointer;\n}\n\n#uojs .prose-post .code-group-copy:hover,\n#uojs .prose-post .code-block-copy:hover,\n#uojs .prose-post .code-group-copy[data-copied=\"true\"],\n#uojs .prose-post .code-block-copy[data-copied=\"true\"] {\n  background: rgb(255 255 255 / 0.07);\n  color: #f7f5fb;\n}\n\n#uojs.unh-widget {\n  outline: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  background: transparent;\n  border: 0px;\n}\n\n#uojs {\n  --editor-text-default: hsl(240 10% 3.9%);\n  --editor-text-gray: hsl(240 3.8% 46.1%);\n  --editor-text-brown: hsl(25 95% 53%);\n  --editor-text-orange: hsl(24 95% 53%);\n  --editor-text-yellow: hsl(48 96% 53%);\n  --editor-text-green: hsl(142 71% 45%);\n  --editor-text-blue: hsl(221 83% 53%);\n  --editor-text-purple: hsl(269 75% 55%);\n  --editor-text-pink: hsl(336 80% 58%);\n  --editor-text-red: hsl(0 84% 60%);\n  --editor-highlight-default: hsl(0 0% 98%);\n  --editor-highlight-gray: hsl(240 5% 96%);\n  --editor-highlight-brown: hsl(43 96% 96%);\n  --editor-highlight-orange: hsl(33 100% 96%);\n  --editor-highlight-yellow: hsl(54 100% 96%);\n  --editor-highlight-green: hsl(142 71% 96%);\n  --editor-highlight-blue: hsl(217 91% 96%);\n  --editor-highlight-purple: hsl(269 97% 96%);\n  --editor-highlight-pink: hsl(336 80% 96%);\n  --editor-highlight-red: hsl(0 84% 96%);\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizelegibility;\n  font-size: 1rem;\n  line-height: 1.5;\n  margin: 0px;\n  padding: 0px;\n  font-family:\n    ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\",\n    \"Noto Color Emoji\";\n\n  --modal-shadow:\n    0 0 0 1px rgba(19, 21, 23, 0.08), 0 3px 3px rgba(0, 0, 0, 0.03), 0 8px 7px rgba(0, 0, 0, 0.04),\n    0 17px 14px rgba(0, 0, 0, 0.05), 0 35px 29px rgba(0, 0, 0, 0.06),\n    0px -4px 4px 0px rgba(0, 0, 0, 0.04) inset;\n  --modal-bg-color: #fffd;\n  --uo-muted: rgba(0, 0, 0, 0.08);\n\n  --unh-bg-emphasis: hsla(220, 13%, 91%, 1);\n  --unh-bg: hsla(0, 0%, 100%, 1);\n  --unh-bg-subtle: hsla(220, 14%, 96%, 1);\n  --unh-bg-muted: hsla(210, 20%, 98%, 1);\n  --unh-bg-inverted: hsla(0, 0%, 6%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(218, 83%, 98%, 1);\n  --unh-bg-success: hsla(134, 76%, 94%, 1);\n  --unh-bg-attention: hsla(37, 86%, 92%, 1);\n  --unh-bg-error: hsla(3, 66%, 93%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-border: hsla(216, 12%, 84%, 1);\n  --unh-border-subtle: hsla(220, 13%, 91%, 1);\n  --unh-border-booker: #e5e7eb;\n  --unh-border-muted: hsla(220, 14%, 96%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 10%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(217, 19%, 27%, 1);\n  --unh-text: hsla(217, 19%, 27%, 1);\n  --unh-text-subtle: hsla(220, 9%, 46%, 1);\n  --unh-text-muted: hsla(218, 11%, 65%, 1);\n  --unh-text-inverted: hsla(0, 0%, 100%, 1);\n  --unh-text-primary: rgb(20, 22, 26);\n  --unh-text-secondary: rgb(108, 111, 116);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(228, 56%, 33%, 1);\n  --unh-text-success: hsla(133, 34%, 24%, 1);\n  --unh-text-attention: hsla(16, 62%, 28%, 1);\n  --unh-text-error: hsla(2, 55%, 30%, 1);\n\n  /* Brand */\n  --unh-brand: hsla(251, 85%, 48%, 1);\n  --unh-brand-emphasis: hsla(0, 0%, 6%, 1);\n  --unh-brand-text: hsla(251, 85%, 48%, 1);\n\n  --background: 0 0% 100%;\n  --foreground: 222.2 84% 4.9%;\n\n  --card: 0 0% 100%;\n  --card-foreground: 222.2 84% 4.9%;\n\n  --popover: 0 0% 100%;\n  --popover-foreground: 222.2 84% 4.9%;\n\n  --text-primary: #171717;\n  --text-secondary: #525252;\n  --text-tertiary: #737373;\n\n  --bg-tertiary: #f9fafb;\n\n  /* light blue */\n  /* --primary: 216 100% 63%; */\n\n  --primary: 251 85% 48%;\n\n  /* --primary: 251 84% 54%; */\n  /* --primary: 256 67% 50%; */\n  /* --primary: 248 64% 41%; */\n  --primary-foreground: 210 40% 98%;\n\n  --secondary: 210 40% 96.1%;\n  --secondary-foreground: 222.2 47.4% 11.2%;\n\n  --muted: 210 40% 96.1%;\n  --muted-foreground: 215.4 16.3% 46.9%;\n\n  --accent: 210 40% 96.1%;\n  --accent-foreground: 222.2 47.4% 11.2%;\n\n  --destructive: 0 84.2% 60.2%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 214.3 31.8% 91.4%;\n  --input: 214.3 31.8% 91.4%;\n  --ring: 222.2 9.52% 29.46%;\n\n  --radius: 0.5rem;\n\n  --novel-highlight-default: #ffffff;\n  --novel-highlight-purple: #f6f3f8;\n  --novel-highlight-red: #fdebeb;\n  --novel-highlight-yellow: #fbf4a2;\n  --novel-highlight-blue: #dbe9ff;\n  --novel-highlight-green: #acf79f;\n  --novel-highlight-orange: #faebdd;\n  --novel-highlight-pink: #faf1f5;\n  --novel-highlight-gray: #f1f1ef;\n}\n\n:where(#uojs) :where(h1) {\n  font-size: 24px;\n}\n\n:where(#uojs) :where(h2) {\n  font-size: 18px;\n}\n\n:where(#uojs) :where(p) {\n  font-size: 13px;\n}\n\n#uojs .dark {\n  --modal-shadow:\n    0 0 0 1px rgba(255, 255, 255, 0.08), 0 3px 3px rgba(0, 0, 0, 0.1),\n    0 8px 7px rgba(0, 0, 0, 0.13), 0 17px 14px rgba(0, 0, 0, 0.17), 0 35px 29px rgba(0, 0, 0, 0.22),\n    0px -4px 4px 0px rgba(0, 0, 0, 0.04) inset;\n  --modal-bg-color: #222b;\n  --uo-muted: rgba(255, 255, 255, 0.08);\n\n  /* background */\n  --unh-bg-emphasis: rgb(57, 55, 55);\n  --unh-bg: hsla(0, 0%, 10%, 1);\n  --unh-bg-subtle: hsla(224, 30%, 17%, 1);\n  --unh-bg-muted: hsla(0, 0%, 12%, 1);\n  --unh-bg-inverted: hsla(220, 14%, 96%, 1);\n\n  /* background -> components*/\n  --unh-bg-info: hsla(228, 56%, 33%, 1);\n  --unh-bg-success: hsla(133, 34%, 24%, 1);\n  --unh-bg-attention: hsla(16, 62%, 28%, 1);\n  --unh-bg-error: hsla(2, 55%, 30%, 1);\n  --unh-bg-dark-error: hsla(2, 55%, 30%, 1);\n\n  /* Borders */\n  --unh-border-emphasis: hsla(0, 0%, 46%, 1);\n  --unh-border: hsla(0, 0%, 34%, 1);\n  --unh-border-subtle: hsla(0, 0%, 22%, 1);\n  --unh-border-booker: hsla(0, 0%, 22%, 1);\n  --unh-border-muted: hsla(0, 0%, 18%, 1);\n  --unh-border-error: hsla(4, 63%, 41%, 1);\n  --unh-border-focus: hsla(0, 0%, 100%, 1);\n\n  /* Content/Text */\n  --unh-text-emphasis: hsla(240, 20%, 99%, 1);\n  --unh-text: hsla(0, 0%, 84%, 1);\n  --unh-text-subtle: hsla(0, 0%, 65%, 1);\n  --unh-text-muted: hsla(0, 0%, 34%, 1);\n  --unh-text-inverted: hsla(0, 0%, 10%, 1);\n  --unh-text-primary: rgb(247, 247, 247);\n  --unh-text-secondary: rgb(160, 162, 166);\n\n  /* Content/Text -> components */\n  --unh-text-info: hsla(218, 83%, 93%, 1);\n  --unh-text-success: hsla(134, 76%, 94%, 1);\n  --unh-text-attention: hsla(37, 86%, 92%, 1);\n  --unh-text-error: hsla(3, 66%, 93%, 1);\n\n  /* Brand */\n  --unh-brand: rgb(153, 152, 162);\n  --unh-brand-emphasis: hsla(218, 11%, 65%, 1);\n  --unh-brand-text: rgb(123, 123, 126);\n\n  --background: 0 0% 4%;\n  --foreground: 210 40% 98%;\n\n  --card: 222.2 84% 4.9%;\n  --card-foreground: 210 40% 98%;\n\n  --popover: 0deg 0% 9.02%;\n  --popover-foreground: 210 40% 98%;\n\n  --primary: 251 84% 54%;\n  --primary-foreground: 222.2 47.4% 11.2%;\n\n  --secondary: 217.2 32.6% 17.5%;\n  --secondary-foreground: 210 40% 98%;\n\n  --muted: 217.2 32.6% 17.5%;\n  --muted-foreground: 215 20.2% 65.1%;\n\n  --accent: 217.2 32.6% 17.5%;\n  --accent-foreground: 210 40% 98%;\n\n  --destructive: 0 62.8% 30.6%;\n  --destructive-foreground: 210 40% 98%;\n\n  --border: 0 0% 100% / 0.12;\n  --input: 0 0% 100% / 0.12;\n  --ring: 212.7 26.8% 83.9%;\n\n  --text-primary: #f5f5f5;\n  --text-secondary: #d4d4d4;\n  --text-tertiary: #a3a3a3;\n\n  --bg-tertiary: #0f172a;\n}\n\n@layer base {\n  :root {\n    --background: 0 0% 100%;\n    --foreground: 0 0% 3.9%;\n    --card: 0 0% 100%;\n    --card-foreground: 0 0% 3.9%;\n    --popover: 0 0% 100%;\n    --popover-foreground: 0 0% 3.9%;\n    --primary: 0 0% 9%;\n    --primary-foreground: 0 0% 98%;\n    --secondary: 0 0% 96.1%;\n    --secondary-foreground: 0 0% 9%;\n    --muted: 0 0% 96.1%;\n    --muted-foreground: 0 0% 45.1%;\n    --accent: 0 0% 96.1%;\n    --accent-foreground: 0 0% 9%;\n    --destructive: 0 84.2% 60.2%;\n    --destructive-foreground: 0 0% 98%;\n    --border: 0 0% 89.8%;\n    --input: 0 0% 89.8%;\n    --ring: 0 0% 3.9%;\n    --chart-1: 12 76% 61%;\n    --chart-2: 173 58% 39%;\n    --chart-3: 197 37% 24%;\n    --chart-4: 43 74% 66%;\n    --chart-5: 27 87% 67%;\n    --radius: 0.5rem;\n  }\n  .dark {\n    --background: 0 0% 3.9%;\n    --foreground: 0 0% 98%;\n    --card: 0 0% 3.9%;\n    --card-foreground: 0 0% 98%;\n    --popover: 0 0% 3.9%;\n    --popover-foreground: 0 0% 98%;\n    --primary: 0 0% 98%;\n    --primary-foreground: 0 0% 9%;\n    --secondary: 0 0% 14.9%;\n    --secondary-foreground: 0 0% 98%;\n    --muted: 0 0% 14.9%;\n    --muted-foreground: 0 0% 63.9%;\n    --accent: 0 0% 14.9%;\n    --accent-foreground: 0 0% 98%;\n    --destructive: 0 62.8% 30.6%;\n    --destructive-foreground: 0 0% 98%;\n    --border: 0 0% 14.9%;\n    --input: 0 0% 14.9%;\n    --ring: 0 0% 83.1%;\n    --chart-1: 220 70% 50%;\n    --chart-2: 160 60% 45%;\n    --chart-3: 30 80% 55%;\n    --chart-4: 280 65% 60%;\n    --chart-5: 340 75% 55%;\n  }\n}\n\n[data-unheard-activeelement=\"1\"] {\n  outline: 3px solid #2d3748 !important;\n}\n\n#uojs .step-content {\n  padding: 0px 1.5rem;\n  max-height: 65vh;\n  overflow: auto;\n  color: var(--text-color);\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6,\n  p {\n    line-height: 1.1;\n    margin: 0;\n    border: 0;\n  }\n\n  h2 {\n    display: block;\n    font-size: 18px;\n    font-weight: bold;\n    line-height: 1.6;\n  }\n\n  h3 {\n    display: block;\n    font-size: 1.17em;\n    font-weight: 600;\n    line-height: 1.6;\n  }\n\n  h1 {\n    display: block;\n    font-size: 24px;\n    font-weight: bold;\n    line-height: 1.6;\n  }\n\n  p {\n    font-size: 13px;\n    min-height: 18px;\n    line-height: 1.4;\n  }\n\n  br {\n    min-height: 1rem;\n    content: \" \";\n    display: block;\n  }\n\n  img {\n    max-width: 100%;\n    height: auto;\n    width: fit-content;\n  }\n}\n\n#uojs div {\n  border-color: var(--border-color);\n}\n\n#uojs * {\n  box-sizing: border-box;\n  border-width: 0;\n\n  /* // temp style fixes */\n  --primary: #3415f5;\n  --input: 214.3 31.8% 91.4%;\n  --radius: 0.5rem;\n}\n\n#uojs p {\n  margin: 0;\n}\n\n#uojs .prose p:not(.steps-list *) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n#uojs .uo-ai-markdown {\n  min-width: 0;\n  width: 100%;\n  max-width: 100%;\n  overflow-wrap: anywhere;\n  word-break: normal;\n}\n\n#uojs .uo-ai-markdown > :first-child {\n  margin-top: 0;\n}\n\n#uojs .uo-ai-markdown > :last-child {\n  margin-bottom: 0;\n}\n\n#uojs .uo-ai-markdown p,\n#uojs .uo-ai-markdown h1,\n#uojs .uo-ai-markdown h2,\n#uojs .uo-ai-markdown h3,\n#uojs .uo-ai-markdown ul,\n#uojs .uo-ai-markdown ol,\n#uojs .uo-ai-markdown pre,\n#uojs .uo-ai-markdown blockquote {\n  margin-top: 0.55rem;\n  margin-bottom: 0.55rem;\n}\n\n#uojs .uo-ai-markdown h1,\n#uojs .uo-ai-markdown h2,\n#uojs .uo-ai-markdown h3 {\n  font-size: 1em;\n  font-weight: 700;\n  line-height: 1.5;\n  text-wrap: pretty;\n}\n\n#uojs .uo-ai-markdown ol {\n  list-style: decimal;\n  padding-left: 1.5rem;\n}\n\n#uojs .uo-ai-markdown ul {\n  list-style: disc;\n  padding-left: 1.35rem;\n}\n\n#uojs .uo-ai-markdown li {\n  margin-top: 0.25rem;\n  margin-bottom: 0.25rem;\n  padding-left: 0.2rem;\n}\n\n#uojs .uo-ai-markdown li::marker {\n  color: #737373;\n  font-weight: 500;\n}\n\n#uojs .uo-ai-markdown strong {\n  font-weight: 700;\n}\n\n#uojs .uo-ai-markdown a {\n  color: inherit;\n  text-decoration: underline;\n  text-underline-offset: 3px;\n}\n\n#uojs .uo-ai-markdown img {\n  display: block;\n  width: 100%;\n  height: auto;\n  aspect-ratio: auto 2;\n  max-height: 18rem;\n  object-fit: contain;\n  margin: 0.65rem 0;\n  border: 1px solid #e5e5e5;\n  border-radius: 0.5rem;\n  background-color: #fafafa;\n}\n\n#uojs .uo-image-frame {\n  position: relative;\n  isolation: isolate;\n  margin: 1.25rem 0;\n  padding: 0.5rem;\n  border-radius: 1rem;\n  background: rgba(249, 250, 251, 0.65);\n  overflow: hidden;\n}\n\n#uojs .uo-image-frame::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  z-index: 2;\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-radius: inherit;\n  pointer-events: none;\n}\n\n#uojs .uo-image-frame-content {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  aspect-ratio: var(--uo-image-aspect-ratio, 2);\n  border-radius: 0.75rem;\n  overflow: hidden;\n}\n\n#uojs .uo-video-frame {\n  margin: 1rem 0;\n  overflow: hidden;\n  border-radius: 0.75rem;\n  background: #000;\n}\n\n#uojs .uo-video-frame video {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n}\n\n#uojs .prose-post .announcement__text-preview .uo-image-frame img,\n#uojs .uo-ai-markdown .uo-image-frame img {\n  width: auto;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  border: 0;\n  background: transparent;\n  box-shadow: none;\n}\n\n#uojs .uo-ai-markdown table {\n  width: 100%;\n  margin: 0.65rem 0;\n  border: 1px solid #e5e5e5;\n  border-collapse: separate;\n  border-spacing: 0;\n  border-radius: 0.5rem;\n  overflow: hidden;\n}\n\n#uojs .uo-ai-markdown th,\n#uojs .uo-ai-markdown td {\n  border-right: 1px solid #e5e5e5;\n  border-bottom: 1px solid #e5e5e5;\n  padding: 0.5rem 0.625rem;\n  text-align: left;\n  vertical-align: top;\n}\n\n#uojs .uo-ai-markdown th {\n  background: #fafafa;\n  font-weight: 700;\n}\n\n#uojs .uo-ai-markdown th:last-child,\n#uojs .uo-ai-markdown td:last-child {\n  border-right: 0;\n}\n\n#uojs .uo-ai-markdown tr:last-child th,\n#uojs .uo-ai-markdown tr:last-child td {\n  border-bottom: 0;\n}\n\n#uojs .uo-ai-markdown th > p,\n#uojs .uo-ai-markdown td > p {\n  margin: 0;\n}\n\n#uojs .uo-ai-markdown code {\n  border-radius: 0.25rem;\n  background-color: #f5f5f5;\n  padding: 0.0625rem 0.25rem;\n  font-size: 0.8125em;\n  font-weight: 500;\n}\n\n#uojs .uo-ai-markdown pre:not(.uo-ai-code-block) {\n  max-width: 100%;\n  overflow-x: auto;\n  white-space: pre-wrap;\n  overflow-wrap: anywhere;\n}\n\n#uojs .uo-ai-markdown pre:not(.uo-ai-code-block) code {\n  white-space: inherit;\n  overflow-wrap: inherit;\n}\n\n#uojs .uo-ai-markdown pre.uo-ai-code-block {\n  max-width: 100%;\n  overflow-x: auto;\n  border-radius: 0.65rem;\n  background-color: #1c2531;\n  padding: 0.85rem 1rem;\n}\n\n#uojs .uo-ai-markdown pre.uo-ai-code-block code {\n  display: block;\n  min-width: max-content;\n  border-radius: 0;\n  background-color: transparent;\n  padding: 0;\n  color: #fff;\n  font-size: 0.8125rem;\n  font-weight: 450;\n  line-height: 1.6;\n  white-space: pre;\n}\n\n#uojs .dark .uo-ai-markdown li::marker {\n  color: #a3a3a3;\n}\n\n#uojs .dark .uo-ai-markdown code,\n#uojs .dark .uo-ai-markdown pre.uo-ai-code-block {\n  background-color: #262626;\n}\n\n#uojs .dark .uo-ai-markdown img {\n  border-color: #404040;\n  background-color: #171717;\n}\n\n#uojs .dark .uo-image-frame {\n  background: rgba(31, 41, 55, 0.25);\n}\n\n#uojs .dark .uo-image-frame::after {\n  border-color: rgba(255, 255, 255, 0.05);\n}\n\n#uojs .dark .uo-ai-markdown table,\n#uojs .dark .uo-ai-markdown th,\n#uojs .dark .uo-ai-markdown td {\n  border-color: #404040;\n}\n\n#uojs .dark .uo-ai-markdown th {\n  background: #262626;\n}\n\n#uojs .dark .uo-ai-markdown pre.uo-ai-code-block code {\n  color: #e5e5e5;\n}\n\n#uojs.unh-widget {\n  outline: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  cursor: pointer;\n  top: 0;\n  left: 0;\n  background: transparent;\n  border: 0px;\n}\n\n#uojs fieldset {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  background-color: transparent;\n}\n\n#uojs button {\n  cursor: pointer;\n  background-color: transparent;\n  background-image: none;\n  border: none;\n  font-family:\n    ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\",\n    \"Noto Color Emoji\";\n}\n\n#uojs input {\n  font-family:\n    ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\",\n    \"Noto Color Emoji\";\n}\n\n#uojs .border {\n  border-style: solid;\n}\n\n@keyframes timer-animation {\n  0% {\n    width: 100%;\n  }\n  100% {\n    width: 0%;\n  }\n}\n\n.guide-active .guide-overlay {\n  pointer-events: none;\n}\n\n.guide-active * {\n  pointer-events: none;\n}\n\n.guide-active .guide-active-element,\n.guide-active .guide-active-element *,\n.guide-popover,\n.guide-popover * {\n  pointer-events: auto;\n}\n\n@keyframes animate-fade-in {\n  0% {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n#uojs .guide-overlay {\n  animation: animate-fade-in 200ms ease-in-out;\n}\n\n#uojs .guide-popover {\n  animation: animate-fade-in 200ms;\n}\n\n/* Popover styles */\n.guide-popover {\n  --editor-text-default: hsl(240 10% 3.9%);\n  --editor-text-gray: hsl(240 3.8% 46.1%);\n  --editor-text-brown: hsl(25 95% 53%);\n  --editor-text-orange: hsl(24 95% 53%);\n  --editor-text-yellow: hsl(48 96% 53%);\n  --editor-text-green: hsl(142 71% 45%);\n  --editor-text-blue: hsl(221 83% 53%);\n  --editor-text-purple: hsl(269 75% 55%);\n  --editor-text-pink: hsl(336 80% 58%);\n  --editor-text-red: hsl(0 84% 60%);\n  --editor-highlight-default: hsl(0 0% 98%);\n  --editor-highlight-gray: hsl(240 5% 96%);\n  --editor-highlight-brown: hsl(43 96% 96%);\n  --editor-highlight-orange: hsl(33 100% 96%);\n  --editor-highlight-yellow: hsl(54 100% 96%);\n  --editor-highlight-green: hsl(142 71% 96%);\n  --editor-highlight-blue: hsl(217 91% 96%);\n  --editor-highlight-purple: hsl(269 97% 96%);\n  --editor-highlight-pink: hsl(336 80% 96%);\n  --editor-highlight-red: hsl(0 84% 96%);\n  all: unset;\n  overflow: visible;\n  box-sizing: border-box;\n  color: #2d2d2d;\n  margin: 0;\n  padding: 15px;\n  border-radius: 5px;\n  min-width: 250px;\n  max-width: 300px;\n  z-index: 2147483647;\n  position: fixed;\n  top: 0;\n  right: 0;\n  background-color: #fff;\n}\n\n.guide-popover * {\n  font-family:\n    ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\",\n    \"Noto Color Emoji\";\n}\n\n.guide-popover-close {\n  position: absolute;\n  border: 0px solid transparent;\n  display: flex;\n  justify-content: end;\n  width: 22px;\n  height: 28px;\n  background: transparent;\n  color: #555;\n  border: none;\n  cursor: pointer;\n}\n\n.guide-popover-title {\n  font: 19px / normal sans-serif;\n  font-weight: 700;\n  display: block;\n  position: relative;\n  line-height: 1.5;\n  zoom: 1;\n  margin: 0;\n}\n\n.guide-popover-close-btn {\n  all: unset;\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 22px;\n  height: 28px;\n  cursor: pointer;\n  font-size: 18px;\n  font-weight: 500;\n  color: #d2d2d2;\n  z-index: 1;\n  text-align: center;\n  transition: color;\n  transition-duration: 200ms;\n}\n\n.guide-popover-close-btn:hover,\n.guide-popover-close-btn:focus {\n  color: #2d2d2d;\n}\n\n.guide-popover-footer {\n  text-align: right;\n  zoom: 1;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.guide-popover-progress-text {\n  font-size: 13px;\n  font-weight: 400;\n  color: #727272;\n  zoom: 1;\n}\n\n/* Disable the scrolling of parent element if it has an active element*/\n:not(body):has(> .guide-active-element) {\n  overflow: hidden !important;\n}\n\n.guide-no-interaction,\n.guide-no-interaction * {\n  pointer-events: none !important;\n}\n\n.guide-popover-navigation-btns {\n  display: flex;\n  flex-grow: 1;\n  justify-content: flex-end;\n}\n\n.guide-popover-navigation-btns button + button {\n  margin-left: 4px;\n}\n\n.guide-popover-arrow {\n  content: \"\";\n  position: absolute;\n  border: 5px solid #fff;\n}\n\n.guide-popover-arrow-side-over {\n  display: none;\n}\n\n/** Popover Arrow Sides **/\n.guide-popover-arrow-side-left {\n  left: 100%;\n  border-right-color: transparent;\n  border-bottom-color: transparent;\n  border-top-color: transparent;\n}\n\n.guide-popover-arrow-side-right {\n  right: 100%;\n  border-left-color: transparent;\n  border-bottom-color: transparent;\n  border-top-color: transparent;\n}\n\n.guide-popover-arrow-side-top {\n  top: 100%;\n  border-right-color: transparent;\n  border-bottom-color: transparent;\n  border-left-color: transparent;\n}\n\n.guide-popover-arrow-side-bottom {\n  bottom: 100%;\n  border-left-color: transparent;\n  border-top-color: transparent;\n  border-right-color: transparent;\n}\n\n.guide-popover-arrow-side-center {\n  display: none;\n}\n\n/* Left/Start + Right/Start */\n.guide-popover-arrow-side-left.guide-popover-arrow-align-start,\n.guide-popover-arrow-side-right.guide-popover-arrow-align-start {\n  top: 15px;\n}\n\n/* Top/Start + Bottom/Start */\n.guide-popover-arrow-side-top.guide-popover-arrow-align-start,\n.guide-popover-arrow-side-bottom.guide-popover-arrow-align-start {\n  left: 15px;\n}\n\n/* End/Left + End/Right */\n.guide-popover-arrow-align-end.guide-popover-arrow-side-left,\n.guide-popover-arrow-align-end.guide-popover-arrow-side-right {\n  bottom: 15px;\n}\n\n/* Top/End + Bottom/End */\n.guide-popover-arrow-side-top.guide-popover-arrow-align-end,\n.guide-popover-arrow-side-bottom.guide-popover-arrow-align-end {\n  right: 15px;\n}\n\n/* Left/Center + Right/Center */\n.guide-popover-arrow-side-left.guide-popover-arrow-align-center,\n.guide-popover-arrow-side-right.guide-popover-arrow-align-center {\n  top: 50%;\n  margin-top: -5px;\n}\n\n/* Top/Center + Bottom/Center */\n.guide-popover-arrow-side-top.guide-popover-arrow-align-center,\n.guide-popover-arrow-side-bottom.guide-popover-arrow-align-center {\n  left: 50%;\n  margin-left: -5px;\n}\n\n/* No arrow */\n.guide-popover-arrow-none {\n  display: none;\n}\n\n.guide-popover-content img {\n  display: block;\n  width: 100%;\n  min-height: var(--media-min-height, 180px);\n  height: auto;\n  border-radius: inherit;\n}\n\n.prose {\n  color: var(--tw-prose-body);\n  max-width: 65ch;\n}\n\n.prose :where(p):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n}\n\n.prose :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-lead);\n  font-size: 1.25em;\n  line-height: 1.6;\n  margin-top: 1.2em;\n  margin-bottom: 1.2em;\n}\n\n.prose :where(a):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-links);\n  text-decoration: underline;\n  font-weight: 500;\n}\n\n.prose :where(strong):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-bold);\n  font-weight: 600;\n}\n\n.prose :where(a strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(blockquote strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(thead th strong):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(ol):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: decimal;\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n  padding-left: 1.625em;\n}\n\n.prose :where(ol[type=\"A\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-alpha;\n}\n\n.prose :where(ol[type=\"a\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-alpha;\n}\n\n.prose :where(ol[type=\"A s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-alpha;\n}\n\n.prose :where(ol[type=\"a s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-alpha;\n}\n\n.prose :where(ol[type=\"I\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-roman;\n}\n\n.prose :where(ol[type=\"i\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-roman;\n}\n\n.prose :where(ol[type=\"I s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: upper-roman;\n}\n\n.prose :where(ol[type=\"i s\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: lower-roman;\n}\n\n.prose :where(ol[type=\"1\"]):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: decimal;\n}\n\n.prose :where(ul):not(:where([class~=\"not-prose\"] *)) {\n  list-style-type: disc;\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n  padding-left: 1.625em;\n}\n\n.prose :where(ol > li):not(:where([class~=\"not-prose\"] *))::marker {\n  font-weight: 400;\n  color: var(--tw-prose-counters);\n}\n\n.prose :where(ul > li):not(:where([class~=\"not-prose\"] *))::marker {\n  color: var(--tw-prose-bullets);\n}\n\n.prose :where(hr):not(:where([class~=\"not-prose\"] *)) {\n  border-color: var(--tw-prose-hr);\n  border-top-width: 1px;\n  margin-top: 3em;\n  margin-bottom: 3em;\n}\n\n.prose :where(blockquote):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 500;\n  font-style: italic;\n  color: var(--tw-prose-quotes);\n  border-left-width: 0.25rem;\n  border-left-color: var(--tw-prose-quote-borders);\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n  margin-top: 1.6em;\n  margin-bottom: 1.6em;\n  padding-left: 1em;\n}\n\n.prose :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"] *)):before {\n  content: open-quote;\n}\n\n.prose :where(blockquote p:last-of-type):not(:where([class~=\"not-prose\"] *)):after {\n  content: close-quote;\n}\n\n.prose :where(h1):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 2.25em;\n  margin-top: 0;\n  margin-bottom: 0.8888889em;\n  line-height: 1.1111111;\n}\n\n.prose :where(h1 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h2):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 1.5em;\n  margin-top: 2em;\n  margin-bottom: 1em;\n  line-height: 1.3333333;\n}\n\n.prose :where(h2 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h3):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 1.25em;\n  margin-top: 1.6em;\n  margin-bottom: 0.6em;\n  line-height: 1.6;\n}\n\n.prose :where(h3 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(h4):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  margin-top: 1.5em;\n  margin-bottom: 0.5em;\n  line-height: 1.5;\n}\n\n.prose :where(h4 strong):not(:where([class~=\"not-prose\"] *)) {\n  font-weight: 600;\n  color: inherit;\n}\n\n.prose :where(img):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n  margin-bottom: 0;\n  width: 100%;\n}\n\n.prose :where(figure > *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose :where(figcaption):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-captions);\n  font-size: 0.875em;\n  line-height: 1.4285714;\n  margin-top: 0.8571429em;\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-code);\n  font-weight: 600;\n  font-size: 0.875em;\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)):before {\n  content: \"`\";\n}\n\n.prose :where(code):not(:where([class~=\"not-prose\"] *)):after {\n  content: \"`\";\n}\n\n.prose :where(a code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(h1 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(h2 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n  font-size: 0.875em;\n}\n\n.prose :where(h3 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n  font-size: 0.9em;\n}\n\n.prose :where(h4 code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(blockquote code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(thead th code):not(:where([class~=\"not-prose\"] *)) {\n  color: inherit;\n}\n\n.prose :where(pre):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-pre-code);\n  background-color: var(--tw-prose-pre-bg);\n  overflow-x: auto;\n  font-weight: 400;\n  font-size: 0.875em;\n  line-height: 1.7142857;\n  margin-top: 1.7142857em;\n  margin-bottom: 1.7142857em;\n  border-radius: 0.375rem;\n  padding: 0.8571429em 1.1428571em;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)) {\n  background-color: transparent;\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  font-weight: inherit;\n  color: inherit;\n  font-size: inherit;\n  font-family: inherit;\n  line-height: inherit;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)):before {\n  content: none;\n}\n\n.prose :where(pre code):not(:where([class~=\"not-prose\"] *)):after {\n  content: none;\n}\n\n.prose :where(table):not(:where([class~=\"not-prose\"] *)) {\n  width: 100%;\n  table-layout: auto;\n  text-align: left;\n  margin-top: 2em;\n  margin-bottom: 2em;\n  font-size: 0.875em;\n  line-height: 1.7142857;\n}\n\n.prose :where(thead):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-th-borders);\n}\n\n.prose :where(thead th):not(:where([class~=\"not-prose\"] *)) {\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  vertical-align: bottom;\n  padding-right: 0.5714286em;\n  padding-bottom: 0.5714286em;\n  padding-left: 0.5714286em;\n}\n\n.prose :where(tbody tr):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-td-borders);\n}\n\n.prose :where(tbody tr:last-child):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 0;\n}\n\n.prose :where(tbody td):not(:where([class~=\"not-prose\"] *)) {\n  vertical-align: baseline;\n}\n\n.prose :where(tfoot):not(:where([class~=\"not-prose\"] *)) {\n  border-top-width: 1px;\n  border-top-color: var(--tw-prose-th-borders);\n}\n\n.prose :where(tfoot td):not(:where([class~=\"not-prose\"] *)) {\n  vertical-align: top;\n}\n\n.prose {\n  --tw-prose-body: #374151;\n  --tw-prose-headings: #111827;\n  --tw-prose-lead: #4b5563;\n  --tw-prose-links: #111827;\n  --tw-prose-bold: #111827;\n  --tw-prose-counters: #6b7280;\n  --tw-prose-bullets: #d1d5db;\n  --tw-prose-hr: #e5e7eb;\n  --tw-prose-quotes: #111827;\n  --tw-prose-quote-borders: #e5e7eb;\n  --tw-prose-captions: #6b7280;\n  --tw-prose-code: #111827;\n  --tw-prose-pre-code: #e5e7eb;\n  --tw-prose-pre-bg: #1f2937;\n  --tw-prose-th-borders: #d1d5db;\n  --tw-prose-td-borders: #e5e7eb;\n  --tw-prose-invert-body: #d1d5db;\n  --tw-prose-invert-headings: #fff;\n  --tw-prose-invert-lead: #9ca3af;\n  --tw-prose-invert-links: #fff;\n  --tw-prose-invert-bold: #fff;\n  --tw-prose-invert-counters: #9ca3af;\n  --tw-prose-invert-bullets: #4b5563;\n  --tw-prose-invert-hr: #374151;\n  --tw-prose-invert-quotes: #f3f4f6;\n  --tw-prose-invert-quote-borders: #374151;\n  --tw-prose-invert-captions: #9ca3af;\n  --tw-prose-invert-code: #fff;\n  --tw-prose-invert-pre-code: #d1d5db;\n  --tw-prose-invert-pre-bg: rgba(0, 0, 0, 0.5);\n  --tw-prose-invert-th-borders: #4b5563;\n  --tw-prose-invert-td-borders: #374151;\n  font-size: 0.9375rem;\n  line-height: 1.75;\n}\n\n.prose img[align=\"left\"] {\n  margin-right: 1em;\n}\n\n.prose img[align=\"right\"] {\n  margin-left: 1em;\n}\n\n.prose img[align=\"center\"] {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.prose :where(video):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 2em;\n  margin-bottom: 2em;\n  width: 100%;\n  max-width: 100%;\n  border-radius: 0.75rem;\n  background: #000;\n}\n\n.prose\n  :where(video[data-frameless=\"true\"].uo-step-video, video.uo-step-video-frameless):not(\n    :where([class~=\"not-prose\"] *)\n  ) {\n  margin-top: 0;\n  margin-bottom: 0;\n  border-radius: 0;\n}\n\n.prose :where(figure):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n.prose :where(li):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.5em;\n  margin-bottom: 0.5em;\n}\n\n.prose :where(ol > li):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0.375em;\n}\n\n.prose :where(ul > li):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0.375em;\n}\n\n.prose :where(.prose > ul > li p):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n\n.prose :where(.prose > ul > li > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n}\n\n.prose :where(.prose > ul > li > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 1.25em;\n}\n\n.prose :where(.prose > ol > li > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1.25em;\n}\n\n.prose :where(.prose > ol > li > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 1.25em;\n}\n\n.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n\n.prose :where(hr + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h2 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h3 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(h4 + *):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0;\n}\n\n.prose :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-right: 0;\n}\n\n.prose :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\n  padding: 0.5714286em;\n}\n\n.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0;\n}\n\n.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-right: 0;\n}\n\n.prose :where(table):not(:where([class~=\"not-prose\"] *)) {\n  border-collapse: separate;\n  border-spacing: 0;\n  border: 1px solid var(--tw-prose-td-borders);\n  border-radius: 0.5rem;\n  overflow: hidden;\n}\n\n.prose :where(thead):not(:where([class~=\"not-prose\"] *)),\n.prose :where(tbody tr):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom-width: 0;\n}\n\n.prose :where(thead th):not(:where([class~=\"not-prose\"] *)) {\n  border-right: 1px solid var(--tw-prose-td-borders);\n  border-bottom: 1px solid var(--tw-prose-td-borders);\n  background: rgb(249 250 251);\n}\n\n.prose :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\n  border-right: 1px solid var(--tw-prose-td-borders);\n  border-bottom: 1px solid var(--tw-prose-td-borders);\n}\n\n.prose :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)),\n.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\n  padding-left: 0.5714286em;\n}\n\n.prose :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)),\n.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\n  border-right: 0;\n  padding-right: 0.5714286em;\n}\n\n.prose :where(tbody tr:last-child td, tbody tr:last-child th):not(:where([class~=\"not-prose\"] *)),\n.prose :where(tfoot tr:last-child td, tfoot tr:last-child th):not(:where([class~=\"not-prose\"] *)) {\n  border-bottom: 0;\n}\n\n.prose :where(th > p, td > p):not(:where([class~=\"not-prose\"] *)) {\n  margin: 0;\n}\n\n:is(.dark, [data-theme=\"dark\"]) .prose :where(thead th):not(:where([class~=\"not-prose\"] *)) {\n  background: rgb(38 38 38);\n}\n\n.prose :where(.prose > :first-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 0;\n}\n\n.prose :where(.prose > :last-child):not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 0;\n}\n\n.prose {\n  max-width: 100%;\n  overflow-wrap: break-word;\n  line-height: 1.5;\n  color: var(--text-primary);\n  word-break: break-word;\n  word-wrap: break-word;\n}\n\n.prose blockquote:not(:where([class~=\"not-prose\"] *)),\n.prose ol:not(:where([class~=\"not-prose\"] *)),\n.prose p:not(:where([class~=\"not-prose\"] *)),\n.prose pre:not(:where([class~=\"not-prose\"] *)),\n.prose ul:not(:where([class~=\"not-prose\"] *)),\n.prose > div:not(:where([class~=\"not-prose\"] *)) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n.prose :where(h1, h2, h3, h1 strong, h2 strong, h3 strong):not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 10px;\n  margin-top: 0;\n  font-weight: 600;\n  color: var(--text-primary);\n}\n\n.prose\n  :where(h1, h2, h3, h1 strong, h2 strong, h3 strong):not(:where([class~=\"not-prose\"]) *)\n  a.prose-link:not(.mention) {\n  font-weight: 600;\n}\n\n.prose h1:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 24px;\n  line-height: 1.75rem;\n}\n\n.prose h2:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 18px;\n  line-height: 1.75rem;\n}\n\n.prose p:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 13px;\n}\n\n.prose h3:not(:where([class~=\"not-prose\"]) *) {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) {\n  background-clip: padding-box;\n  border-width: 0.5px;\n  background-color: var(--bg-tertiary);\n  padding: 16px;\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *):is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(64 64 64 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) code {\n  white-space: pre;\n  border-style: none;\n  background-color: transparent;\n  padding: 0;\n  color: var(--text-primary);\n}\n\n.prose pre:not(:where([class~=\"not-prose\"]) *) code:is(.dark *) {\n  background-color: transparent;\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *) {\n  background-clip: padding-box;\n  white-space: pre-wrap;\n  border-radius: 0.25rem;\n  border-width: 0.5px;\n  background-color: var(--bg-tertiary);\n  padding: 1px 4px;\n  font-weight: 500;\n  color: var(--text-primary);\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *):is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(64 64 64 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.prose code:not(:where([class~=\"not-prose\"]) *):after,\n.prose code:not(:where([class~=\"not-prose\"]) *):before {\n  display: none;\n}\n\n#uojs .prose-post code:not(:where(pre code, [class~=\"not-prose\"] *)) {\n  border: 0;\n  background: transparent;\n  padding: 0;\n  color: inherit;\n  font-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  font-size: 0.875em;\n  font-weight: 600;\n  white-space: pre-wrap;\n}\n\n#uojs .prose-post code:not(:where(pre code, [class~=\"not-prose\"] *))::before {\n  display: inline;\n  content: \"`\";\n}\n\n#uojs .prose-post code:not(:where(pre code, [class~=\"not-prose\"] *))::after {\n  display: inline;\n  content: \"`\";\n}\n\n#uojs .post-body .prose.prose-post pre:not(:where([class~=\"not-prose\"] *)) {\n  position: relative;\n  margin: 1.5rem 0;\n  padding: 4.25rem 2rem 1.75rem;\n  border: 1px solid #2b2a34;\n  border-radius: 0.75rem;\n  background: #222129;\n  color: #f1eef7;\n  box-shadow: none;\n  overflow-x: auto;\n}\n\n#uojs .prose-post .code-block-copy,\n#uojs .prose-post .code-block-language {\n  position: absolute;\n  top: 1.125rem;\n  z-index: 1;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: 0;\n  background: transparent;\n  color: #b7b5c4;\n}\n\n#uojs .prose-post .code-block-copy {\n  right: 1.125rem;\n  width: 2rem;\n  height: 2rem;\n  border-radius: 0.375rem;\n  cursor: pointer;\n}\n\n#uojs .prose-post .code-block-language {\n  left: 1.75rem;\n  min-height: 2rem;\n  max-width: calc(100% - 6rem);\n  font-family: Inter, ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.875rem;\n  font-weight: 650;\n  line-height: 1;\n  white-space: nowrap;\n}\n\n#uojs .prose-post .code-group-copy svg,\n#uojs .prose-post .code-block-copy svg {\n  width: 1.125rem;\n  height: 1.125rem;\n  pointer-events: none;\n}\n\n#uojs .post-body .prose.prose-post pre:not(:where([class~=\"not-prose\"] *)) code {\n  display: block;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  color: inherit;\n  font-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  font-size: 0.95rem;\n  line-height: 1.62;\n  white-space: pre;\n}\n\n#uojs .prose-post .hljs-comment,\n#uojs .prose-post .hljs-quote {\n  color: #8c8997;\n}\n\n#uojs .prose-post .hljs-variable,\n#uojs .prose-post .hljs-template-variable,\n#uojs .prose-post .hljs-title,\n#uojs .prose-post .hljs-section,\n#uojs .prose-post .hljs-params {\n  color: #ff7b86;\n}\n\n#uojs .prose-post .hljs-attribute,\n#uojs .prose-post .hljs-tag,\n#uojs .prose-post .hljs-regexp,\n#uojs .prose-post .hljs-link,\n#uojs .prose-post .hljs-name,\n#uojs .prose-post .hljs-selector-id,\n#uojs .prose-post .hljs-selector-class,\n#uojs .prose-post .hljs-selector-tag {\n  color: #ff7b86;\n}\n\n#uojs .prose-post .hljs-keyword {\n  color: #6ecbff;\n}\n\n#uojs .prose-post .hljs-string,\n#uojs .prose-post .hljs-symbol,\n#uojs .prose-post .hljs-bullet {\n  color: #b8f58d;\n}\n\n#uojs .prose-post .hljs-number,\n#uojs .prose-post .hljs-meta,\n#uojs .prose-post .hljs-built_in,\n#uojs .prose-post .hljs-builtin-name,\n#uojs .prose-post .hljs-literal,\n#uojs .prose-post .hljs-type {\n  color: #f0e66f;\n}\n\n.prose blockquote:not(:where([class~=\"not-prose\"]) *) {\n  border-color: var(--border-primary);\n  font-weight: 400;\n  color: var(--text-secondary);\n}\n\n.prose blockquote p:first-of-type:not(:where([class~=\"not-prose\"]) *):after,\n.prose blockquote p:first-of-type:not(:where([class~=\"not-prose\"]) *):before {\n  display: none;\n}\n\n.prose blockquote blockquote:not(:where([class~=\"not-prose\"]) *) {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose a.prose-link:not(.mention) {\n  font-weight: 400;\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n\n@media (hover: hover) and (pointer: fine) {\n  .prose a.prose-link:not(.mention):hover {\n    text-decoration-line: underline;\n  }\n}\n\n.prose .mention {\n  cursor: pointer;\n  font-weight: 600;\n  color: var(--text-primary);\n  display: inline-flex;\n  align-items: center;\n}\n\n.prose .mention[data-kind=\"teammate\"]::after {\n  content: \"\";\n  width: 0.875rem;\n  height: 0.875rem;\n  flex: none;\n  margin-inline-start: 0.125rem;\n  background: center / contain no-repeat\n    url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='m17.999 10c0-1.097-.567-2.113-1.465-2.707.215-1.054-.103-2.174-.878-2.95-.775-.776-1.896-1.094-2.95-.878C12.113 2.568 11.097 2.001 10 2.001s-2.113.567-2.706 1.464c-1.053-.216-2.174.102-2.95.878s-1.093 1.896-.878 2.949C2.569 7.885 2.001 8.902 2.001 9.999s.567 2.113 1.465 2.707c-.215 1.054.103 2.174.878 2.95s1.898 1.092 2.95.878c.593.897 1.609 1.464 2.706 1.464s2.113-.568 2.706-1.465c1.059.214 2.176-.103 2.95-.878.776-.776 1.094-1.896.878-2.95.897-.593 1.465-1.609 1.465-2.707Zm-4.218-1.875-4 5a.997.997 0 0 1-.726.374l-.056.001a.997.997 0 0 1-.707-.293l-2-2a.999.999 0 1 1 1.414-1.414l1.21 1.21 3.302-4.127a1 1 0 1 1 1.562 1.249Z' fill='%23f59e0b'/%3E%3C/svg%3E\");\n}\n\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) ol,\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) ul {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.prose :where(ul, ol):not(:where([class~=\"not-prose\"]) *) p {\n  margin: 0;\n}\n\n.prose ul.task-list {\n  list-style-type: none;\n}\n\n.prose ul.task-list li.task-item {\n  position: relative;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"] {\n  background-clip: padding-box;\n  margin-left: -6px;\n  margin-right: 12px;\n  margin-top: 2px;\n  height: 20px;\n  width: 20px;\n  max-width: 20rem;\n  cursor: pointer;\n  border-radius: 0.25rem;\n  border-width: 0.5px;\n  border-color: rgba(0, 0, 0, 0.12);\n  background-color: var(--bg-elevated);\n  background-clip: border-box;\n  vertical-align: top;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:checked {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:focus {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)\n    var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width))\n    var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity));\n  --tw-ring-offset-width: 0px;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:disabled {\n  cursor: default;\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:is(.dark *) {\n  border-color: hsla(0, 0%, 100%, 0.08);\n  background-color: var(--bg-quaternary);\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:checked:is(.dark *) {\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"]:focus:is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(96 165 250 / var(--tw-border-opacity));\n  --tw-ring-color: rgba(37, 99, 235, 0.2);\n}\n\n.prose ul.task-list li.task-item input[type=\"checkbox\"] {\n  position: absolute;\n  left: -20px;\n  top: 0;\n}\n\n.prose ul.task-list li.task-item div:first-of-type:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 0;\n  min-width: 1em;\n}\n\n.prose ul.task-list li.task-item[data-checked=\"true\"] > div > p {\n  color: var(--text-quaternary);\n  text-decoration-line: line-through;\n  text-decoration-thickness: 2px;\n}\n\n.prose ul.task-list li.task-item[data-checked=\"true\"] > div > p > code {\n  display: inline-block;\n  color: var(--text-quaternary);\n}\n\n.prose ul.task-list li.task-item :last-child:not(:where([class~=\"not-prose\"] *)) {\n  margin-bottom: 0;\n}\n\n.prose .task-list-disabled {\n  cursor: default;\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n\n.prose .task-list-disabled:focus {\n  border-color: rgba(0, 0, 0, 0.12);\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)\n    var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width))\n    var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.prose .task-list-disabled:focus:is(.dark *) {\n  border-color: hsla(0, 0%, 100%, 0.08);\n}\n\n.prose strong:not(:where([class~=\"not-prose\"]) *) {\n  color: inherit;\n}\n\n.guide-popover-content [style^=\"color:\"] :where(*),\n.guide-popover-content [style*=\"; color:\"] :where(*),\n.step-content [style^=\"color:\"] :where(*),\n.step-content [style*=\"; color:\"] :where(*) {\n  color: inherit;\n}\n\n.prose div[data-hr-wrapper] {\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\n.prose div[data-hr-wrapper] hr {\n  margin-top: 0;\n  margin-bottom: 0;\n  border-top-width: 2px;\n}\n\n.prose div[data-hr-wrapper].ProseMirror-selectednode hr {\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n\n.prose .note-comment {\n  cursor: pointer;\n  border-bottom-width: 2px;\n  --tw-border-opacity: 1;\n  border-color: rgb(253 224 71 / var(--tw-border-opacity));\n  background-color: rgba(253, 224, 71, 0.2);\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 0.1s;\n}\n\n.prose .note-comment:is(.dark *) {\n  --tw-border-opacity: 1;\n  border-color: rgb(234 179 8 / var(--tw-border-opacity));\n}\n\n.prose .note-comment:hover {\n  background-color: rgba(253, 224, 71, 0.5);\n}\n\n.prose > .node-mediaGallery:first-child {\n  margin-top: 0;\n}\n\n.prose > .node-mediaGallery:last-child {\n  margin-bottom: 4px;\n}\n\n.prose .collaboration-cursor__caret {\n  background-clip: padding-box;\n  position: relative;\n  margin-left: -1px;\n  margin-right: -1px;\n  display: inline;\n  border-left-width: 0.5px;\n  border-right-width: 0.5px;\n  word-break: normal;\n}\n\n@keyframes autohide-cursor {\n  to {\n    opacity: 0;\n  }\n}\n\n.prose .collaboration-cursor__label {\n  pointer-events: none;\n  position: absolute;\n  left: -1px;\n  top: 0;\n  --tw-translate-y: -100%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))\n    skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))\n    scaleY(var(--tw-scale-y));\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  white-space: nowrap;\n  border-radius: 0.375rem;\n  border-bottom-left-radius: 0;\n  padding: 4px;\n  font-size: 0.75rem;\n  line-height: 1rem;\n  font-weight: 500;\n  line-height: 1;\n  animation: autohide-cursor 0.1s ease-out 1.5s forwards;\n}\n\n.prose .collaboration-cursor__caret:hover .collaboration-cursor__label {\n  animation: none;\n}\n\n.prose > :first-child {\n  margin-top: 0;\n}\n\n.prose * {\n  clear: both;\n}\n\n.prose > img {\n  display: block;\n}\n\n.prose > :last-child {\n  margin-bottom: 0;\n}\n\n.prose[data-reactions-only=\"true\"] {\n  font-size: 2.25rem;\n  line-height: 2.5rem;\n  line-height: 1;\n}\n\n.prose[data-reactions-only=\"true\"] img[data-type=\"reaction\"] {\n  height: 36px;\n  width: 36px;\n}\n\n.prose.note {\n  font-size: 1rem;\n}\n\n.prose.\\!note {\n  font-size: 1rem !important;\n}\n\n.prose.note\n  :where(\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    h1 strong,\n    h2 strong,\n    h3 strong,\n    h4 strong,\n    h5 strong,\n    h6 strong\n  ):not(:where([class~=\"not-prose\"]) *) {\n  font-weight: 700;\n  line-height: 1.3;\n}\n\n.prose.\\!note\n  :where(\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    h1 strong,\n    h2 strong,\n    h3 strong,\n    h4 strong,\n    h5 strong,\n    h6 strong\n  ):not(:where([class~=\"not-prose\"]) *) {\n  font-weight: 700;\n  line-height: 1.3;\n}\n\n.prose.note h1:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 40px;\n  font-size: clamp(1.575rem, 4vw, 1.875rem);\n}\n\n.prose.\\!note h1:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 40px;\n  font-size: clamp(1.575rem, 4vw, 1.875rem);\n}\n\n.prose.note h2:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 32px;\n  font-size: clamp(1.275rem, 4vw, 1.575rem);\n}\n\n.prose.\\!note h2:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 8px;\n  margin-top: 32px;\n  font-size: clamp(1.275rem, 4vw, 1.575rem);\n}\n\n.prose.note h3:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 6px;\n  margin-top: 24px;\n  font-size: clamp(1.175rem, 4vw, 1.275rem);\n}\n\n.prose.\\!note h3:not(:where([class~=\"not-prose\"]) *) {\n  margin-bottom: 6px;\n  margin-top: 24px;\n  font-size: clamp(1.175rem, 4vw, 1.275rem);\n}\n\n.prose.note:not(.dragging) .ProseMirror-selectednode {\n  outline: none !important;\n  box-shadow: none;\n}\n\n.prose.\\!note:not(.dragging) .ProseMirror-selectednode {\n  outline: none !important;\n  box-shadow: none !important;\n}\n\n.prose a:where(:not([class~=\"not-prose\"]) *) {\n  overflow-wrap: break-word;\n  font-weight: 400;\n  /* text-decoration-line: none; */\n  word-break: break-word;\n  word-wrap: break-word;\n}\n\n.prose a {\n  font-feature-settings: \"calt\" 0;\n}\n\n.prose img[data-type=\"reaction\"] {\n  margin-top: 0;\n  margin-bottom: 0;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n  cursor: text;\n  -o-object-fit: contain;\n  object-fit: contain;\n  vertical-align: text-top;\n  -webkit-touch-callout: none;\n}\n\n.prose span[data-type=\"reaction\"] {\n  font-family: emoji;\n  line-height: 1;\n}\n\n.prose.truncate-links a[data-truncated] span {\n  display: none;\n}\n\n.drag-handle {\n  pointer-events: none;\n  position: fixed;\n  cursor: grab;\n  opacity: 0;\n  transition: opacity 0.1s ease-in;\n  border-radius: 0.25rem;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(163, 163, 163, 1)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E\");\n  background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);\n  background-repeat: no-repeat;\n  background-position: 50%;\n  width: 1.2rem;\n  height: 1.5rem;\n}\n\n.drag-handle:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.drag-handle:hover:is(.dark *) {\n  --tw-bg-opacity: 1;\n  background-color: rgb(38 38 38 / var(--tw-bg-opacity));\n}\n\n.drag-handle:hover {\n  transition: background-color 0.1s;\n}\n\n.drag-handle.hide {\n  pointer-events: none;\n  display: none;\n}\n\n.ProseMirror-focused {\n  outline: none;\n}\n\n.ProseMirror-focused + .drag-handle {\n  pointer-events: auto;\n}\n\n.drag-handle:active,\n:has(> .ProseMirror-focused):hover > .drag-handle {\n  pointer-events: auto;\n  opacity: 1;\n}\n\n@media (hover: none) and (pointer: coarse) {\n  .drag-handle {\n    pointer-events: none;\n    display: none;\n  }\n}\n\n.ProseMirror:has(> :only-child:not(ul):not(ol)) + .drag-handle {\n  display: none;\n}\n\n.tiptap {\n  --white: #fff;\n  --black: #2e2b29;\n  --black-contrast: #110f0e;\n  --gray-1: rgba(61, 37, 20, 0.05);\n  --gray-2: rgba(61, 37, 20, 0.08);\n  --gray-3: rgba(61, 37, 20, 0.12);\n  --gray-4: rgba(53, 38, 28, 0.3);\n  --gray-5: rgba(28, 25, 23, 0.6);\n  --green: #22c55e;\n  --purple: #6a00f5;\n  --purple-contrast: #5800cc;\n  --purple-light: rgba(88, 5, 255, 0.05);\n  --yellow-contrast: #facc15;\n  --yellow: rgba(250, 204, 21, 0.4);\n  --yellow-light: #fffae5;\n  --red: #ff5c33;\n  --red-light: #ffebe5;\n  --shadow: 0px 12px 33px 0px rgba(0, 0, 0, 0.06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, 0.04);\n\n  :first-child {\n    margin-top: 0;\n  }\n\n  pre {\n    background: var(--black);\n    border-radius: 0.5rem;\n    color: var(--white);\n    font-family: \"JetBrainsMono\", monospace;\n    margin: 1.5rem 0;\n    padding: 0.75rem 1rem;\n\n    code {\n      background: none;\n      color: inherit;\n      font-size: 0.8rem;\n      padding: 0;\n    }\n\n    /* Code styling */\n    .hljs-comment,\n    .hljs-quote {\n      color: #616161;\n    }\n\n    .hljs-variable,\n    .hljs-template-variable,\n    .hljs-attribute,\n    .hljs-tag,\n    .hljs-regexp,\n    .hljs-link,\n    .hljs-name,\n    .hljs-selector-id,\n    .hljs-selector-class {\n      color: #f98181;\n    }\n\n    .hljs-number,\n    .hljs-meta,\n    .hljs-built_in,\n    .hljs-builtin-name,\n    .hljs-literal,\n    .hljs-type,\n    .hljs-params {\n      color: #fbbc88;\n    }\n\n    .hljs-string,\n    .hljs-symbol,\n    .hljs-bullet {\n      color: #b9f18d;\n    }\n\n    .hljs-title,\n    .hljs-section {\n      color: #faf594;\n    }\n\n    .hljs-keyword,\n    .hljs-selector-tag {\n      color: #70cff8;\n    }\n\n    .hljs-emphasis {\n      font-style: italic;\n    }\n\n    .hljs-strong {\n      font-weight: 700;\n    }\n  }\n}\n\n@layer components {\n  .card-radius {\n    border-radius: 0.75rem;\n  }\n\n  .card-bg {\n    background-color: rgb(255 255 255 / 80%);\n  }\n\n  .page-bg {\n    background-color: #f7f8f9;\n  }\n\n  .button-bg {\n    background-color: rgb(0 0 0 / 4%);\n    color: rgb(0 0 0 / 80%);\n    border: 1px solid rgb(0 0 0 / 12%);\n  }\n\n  .card-hover-border {\n    border: 1px solid var(--card-hover-border-color);\n  }\n\n  .card-hover-shadow {\n    box-shadow: var(--card-hover-shadow);\n  }\n\n  .card-border {\n    border: 1px solid rgb(0 0 0 / 12%);\n  }\n\n  .card-border-color {\n    border-color: rgb(0 0 0 / 12%);\n  }\n\n  .button-hover-bg {\n    background-color: rgb(19 21 23 / 64%);\n  }\n\n  .divider {\n    border-top: 1px solid rgba(19, 21, 23, 0.08);\n  }\n\n  .card-hover-bg {\n    background-color: rgb(247 248 249 / 80%);\n  }\n\n  [data-theme=\"dark\"] .divider {\n    border-top: 1px solid rgba(255, 255, 255, 0.08);\n  }\n\n  [data-theme=\"dark\"] .button-hover-bg {\n    background-color: rgb(255 255 255 / 10%);\n    color: rgb(255 255 255 / 80%);\n  }\n\n  [data-theme=\"dark\"] .card-hover-bg {\n    background-color: rgb(19 21 23 / 64%);\n  }\n\n  [data-theme=\"dark\"] .card-bg {\n    background-color: rgb(255 255 255 / 4%);\n  }\n\n  [data-theme=\"dark\"] .card-border {\n    border: 1px solid rgb(255 255 255 / 4%);\n  }\n\n  [data-theme=\"dark\"] .button-bg {\n    background-color: rgb(255 255 255 / 8%);\n    color: rgb(255 255 255 / 80%);\n    border: 1px solid rgb(255 255 255 / 12%);\n  }\n\n  [data-theme=\"dark\"] .card-border-color {\n    border-color: rgb(255 255 255 / 4%);\n  }\n\n  [data-theme=\"dark\"] .page-bg {\n    background-color: rgb(19 21 23);\n  }\n}\n\n@keyframes braille-pulse {\n  0%,\n  100% {\n    opacity: 0.15;\n  }\n  50% {\n    opacity: 0.8;\n  }\n}\n\n@keyframes shimmer-text {\n  0% {\n    background-position: -200% center;\n  }\n  100% {\n    background-position: 200% center;\n  }\n}\n\n@keyframes rage-shimmer {\n  0% {\n    transform: translateX(-200%);\n  }\n  100% {\n    transform: translateX(200%);\n  }\n}\n\n.rage-shimmer::after {\n  content: \"\";\n  position: absolute;\n  top: -50%;\n  left: -50%;\n  width: 200%;\n  height: 200%;\n  pointer-events: none;\n  background: linear-gradient(\n    105deg,\n    transparent 30%,\n    rgba(255, 255, 255, 0.4) 45%,\n    rgba(255, 255, 255, 0.6) 50%,\n    rgba(255, 255, 255, 0.4) 55%,\n    transparent 70%\n  );\n  animation: rage-shimmer 1.5s ease-in-out infinite;\n}\n\n.dark .rage-shimmer::after {\n  background: linear-gradient(\n    105deg,\n    transparent 30%,\n    rgba(0, 0, 0, 0.3) 45%,\n    rgba(0, 0, 0, 0.5) 50%,\n    rgba(0, 0, 0, 0.3) 55%,\n    transparent 70%\n  );\n}\n\n.scroll-container {\n  scrollbar-gutter: stable;\n  scrollbar-width: thin;\n  scrollbar-color: var(--unh-border) transparent;\n}\n\n#uojs .uo-chat-scroll {\n  scrollbar-width: thin;\n  scrollbar-color: transparent transparent;\n}\n\n#uojs .uo-chat-scroll:hover {\n  scrollbar-color: rgb(9 14 21 / 20%) transparent;\n}\n\n#uojs .uo-chat-scroll::-webkit-scrollbar {\n  width: 6px;\n  height: 6px;\n}\n\n#uojs .uo-chat-scroll::-webkit-scrollbar-track,\n#uojs .uo-chat-scroll::-webkit-scrollbar-thumb {\n  background-color: transparent;\n}\n\n#uojs .uo-chat-scroll::-webkit-scrollbar-thumb {\n  border-radius: 3px;\n}\n\n#uojs .uo-chat-scroll:hover::-webkit-scrollbar-thumb {\n  background-color: rgb(9 14 21 / 20%);\n}\n\n#uojs .dark .uo-chat-scroll:hover {\n  scrollbar-color: rgb(255 255 255 / 20%) transparent;\n}\n\n#uojs .dark .uo-chat-scroll:hover::-webkit-scrollbar-thumb {\n  background-color: rgb(255 255 255 / 20%);\n}\n","/* ABOUTME: Userorbit design-system tokens (--uo-*) for embedded UI, generated from uo-tokens.js. */\n/* ABOUTME: Light values live on the widget (or standalone form) root; .dark swaps colors and shadows. */\n\n#uojs .floating-widget-root,\n#uojs.floating-widget {\n  --uo-radius-xs: 6px;\n  --uo-radius-sm: 8px;\n  --uo-radius-md: 12px;\n  --uo-radius-lg: 16px;\n  --uo-radius-xl: 20px;\n  --uo-radius-2xl: 24px;\n  --uo-radius-pill: 999px;\n  --uo-radius-panel: var(--uo-radius-2xl);\n  --uo-radius-card: var(--uo-radius-lg);\n  --uo-radius-composer: var(--uo-radius-xl);\n  --uo-radius-overlay-card: var(--uo-radius-xl);\n  --uo-radius-control: var(--uo-radius-md);\n  --uo-radius-menu: var(--uo-radius-md);\n  --uo-radius-media: var(--uo-radius-md);\n  --uo-radius-button: var(--uo-radius-pill);\n  --uo-radius-chip: var(--uo-radius-pill);\n  --uo-space-0-5: 2px;\n  --uo-space-1: 4px;\n  --uo-space-1-5: 6px;\n  --uo-space-2: 8px;\n  --uo-space-3: 12px;\n  --uo-space-4: 16px;\n  --uo-space-5: 20px;\n  --uo-space-6: 24px;\n  --uo-space-8: 32px;\n  --uo-space-10: 40px;\n  --uo-space-12: 48px;\n  --uo-space-panel-gutter: 8px;\n  --uo-space-card-gap: 6px;\n  --uo-space-card-padding: 16px;\n  --uo-space-card-padding-compact: 12px;\n  --uo-space-stack: 12px;\n  --uo-space-inline: 8px;\n  --uo-size-control-sm: 28px;\n  --uo-size-control-md: 36px;\n  --uo-size-control-lg: 44px;\n  --uo-size-icon-button: 32px;\n  --uo-size-touch-min: 40px;\n  --uo-size-launcher: 48px;\n  --uo-size-avatar-sm: 20px;\n  --uo-size-avatar-md: 28px;\n  --uo-size-avatar-lg: 36px;\n  --uo-size-icon: 18px;\n  --uo-border-hairline: 1px;\n  --uo-border-mode: 1.5px dashed;\n  --uo-border-focus: 2px;\n  --uo-focus-offset: 2px;\n  --uo-font-family: inherit;\n  --uo-font-family-fallback:\n    \"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  --uo-font-mono: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n  --uo-font-size-display: 24px;\n  --uo-line-height-display: 30px;\n  --uo-font-weight-display: 600;\n  --uo-font-size-title-lg: 18px;\n  --uo-line-height-title-lg: 24px;\n  --uo-font-weight-title-lg: 600;\n  --uo-font-size-title: 16px;\n  --uo-line-height-title: 22px;\n  --uo-font-weight-title: 600;\n  --uo-font-size-body-lg: 16px;\n  --uo-line-height-body-lg: 24px;\n  --uo-font-weight-body-lg: 400;\n  --uo-font-size-body: 15px;\n  --uo-line-height-body: 22px;\n  --uo-font-weight-body: 400;\n  --uo-font-size-body-sm: 14px;\n  --uo-line-height-body-sm: 20px;\n  --uo-font-weight-body-sm: 400;\n  --uo-font-size-meta: 13px;\n  --uo-line-height-meta: 18px;\n  --uo-font-weight-meta: 400;\n  --uo-font-size-label: 12px;\n  --uo-line-height-label: 16px;\n  --uo-font-weight-label: 500;\n  --uo-font-size-code: 13px;\n  --uo-line-height-code: 20px;\n  --uo-font-weight-code: 400;\n  --uo-duration-instant: 80ms;\n  --uo-duration-fast: 140ms;\n  --uo-duration-base: 200ms;\n  --uo-duration-slow: 280ms;\n  --uo-duration-slower: 360ms;\n  --uo-ease-standard: cubic-bezier(0.2, 0, 0, 1);\n  --uo-ease-enter: cubic-bezier(0.16, 1, 0.3, 1);\n  --uo-ease-exit: cubic-bezier(0.4, 0, 1, 1);\n  --uo-ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);\n  --uo-z-base: 2147482000;\n  --uo-z-overlay: 2147482100;\n  --uo-z-panel: 2147482200;\n  --uo-z-launcher: 2147482300;\n  --uo-z-hud: 2147482400;\n  --uo-z-toast: 2147482500;\n  --uo-color-surface-0: #f6f6f7;\n  --uo-color-surface-1: #ffffff;\n  --uo-color-surface-2: #f4f4f5;\n  --uo-color-surface-3: #e9e9ec;\n  --uo-color-surface-raised: #ffffff;\n  --uo-color-surface-inverse: #18181b;\n  --uo-color-surface-hud: #111113;\n  --uo-color-border-subtle: #ececef;\n  --uo-color-border-default: #e0e0e4;\n  --uo-color-border-strong: #c4c4cb;\n  --uo-color-text-primary: #111113;\n  --uo-color-text-secondary: #4b4b53;\n  --uo-color-text-tertiary: #6b6b74;\n  --uo-color-text-disabled: #a6a6ae;\n  --uo-color-text-inverse: #fafafa;\n  --uo-color-text-on-hud: #f4f4f5;\n  --uo-color-fill-hover: rgba(17, 17, 19, 0.05);\n  --uo-color-fill-active: rgba(17, 17, 19, 0.09);\n  --uo-color-scrim: rgba(10, 10, 12, 0.36);\n  --uo-color-scrim-spotlight: rgba(10, 10, 12, 0.55);\n  --uo-color-primary: #111113;\n  --uo-color-primary-hover: #2c2c30;\n  --uo-color-primary-active: #3a3a3f;\n  --uo-color-on-primary: #ffffff;\n  --uo-color-primary-subtle: #eeeef0;\n  --uo-color-primary-text: #111113;\n  --uo-color-focus-ring: #111113;\n  --uo-color-success-fg: #157f3d;\n  --uo-color-success-bg: #ebf8ef;\n  --uo-color-success-border: #bfe6cb;\n  --uo-color-success-solid: #1a9e4b;\n  --uo-color-warning-fg: #9a5500;\n  --uo-color-warning-bg: #fff5e5;\n  --uo-color-warning-border: #f5d9a8;\n  --uo-color-warning-solid: #e08a00;\n  --uo-color-danger-fg: #c4271f;\n  --uo-color-danger-bg: #fdeeec;\n  --uo-color-danger-border: #f5c6c1;\n  --uo-color-danger-solid: #d92d20;\n  --uo-color-info-fg: #1f5bd6;\n  --uo-color-info-bg: #edf3ff;\n  --uo-color-info-border: #c6d7fb;\n  --uo-color-info-solid: #2563eb;\n  --uo-color-status-review: #6d3fd9;\n  --uo-color-status-review-bg: #f3eeff;\n  --uo-color-status-planned: #1f5bd6;\n  --uo-color-status-planned-bg: #edf3ff;\n  --uo-color-status-progress: #9a5500;\n  --uo-color-status-progress-bg: #fff5e5;\n  --uo-color-status-completed: #157f3d;\n  --uo-color-status-completed-bg: #ebf8ef;\n  --uo-color-status-closed: #6b6b74;\n  --uo-color-status-closed-bg: #efeff1;\n  --uo-color-label-gray: #8a8a94;\n  --uo-color-label-blue: #3b82f6;\n  --uo-color-label-green: #22a55a;\n  --uo-color-label-yellow: #d9a400;\n  --uo-color-label-orange: #ea6c1a;\n  --uo-color-label-red: #e0443a;\n  --uo-color-label-purple: #8a5cf0;\n  --uo-color-label-pink: #db4b98;\n  --uo-color-pick: #2563eb;\n  --uo-color-pick-tint: rgba(37, 99, 235, 0.08);\n  --uo-color-record: #d92d20;\n  --uo-color-record-tint: rgba(217, 45, 32, 0.06);\n  --uo-color-presence: #1a9e4b;\n  --uo-shadow-0: none;\n  --uo-shadow-1: 0 1px 2px rgba(16, 16, 20, 0.04), 0 0 0 1px rgba(16, 16, 20, 0.04);\n  --uo-shadow-2: 0 6px 16px -4px rgba(16, 16, 20, 0.1), 0 0 0 1px rgba(16, 16, 20, 0.06);\n  --uo-shadow-3: 0 18px 44px -10px rgba(16, 16, 20, 0.2), 0 0 0 1px rgba(16, 16, 20, 0.06);\n  --uo-shadow-4: 0 32px 80px -16px rgba(16, 16, 20, 0.3), 0 0 0 1px rgba(16, 16, 20, 0.06);\n}\n\n#uojs .floating-widget-root.dark,\n#uojs.floating-widget.dark {\n  --uo-color-surface-0: #111113;\n  --uo-color-surface-1: #1a1a1d;\n  --uo-color-surface-2: #232327;\n  --uo-color-surface-3: #2e2e33;\n  --uo-color-surface-raised: #232327;\n  --uo-color-surface-inverse: #f4f4f5;\n  --uo-color-surface-hud: #26262b;\n  --uo-color-border-subtle: #242428;\n  --uo-color-border-default: #313136;\n  --uo-color-border-strong: #4a4a52;\n  --uo-color-text-primary: #f4f4f5;\n  --uo-color-text-secondary: #b4b4bc;\n  --uo-color-text-tertiary: #8a8a94;\n  --uo-color-text-disabled: #55555c;\n  --uo-color-text-inverse: #111113;\n  --uo-color-text-on-hud: #f4f4f5;\n  --uo-color-fill-hover: rgba(255, 255, 255, 0.07);\n  --uo-color-fill-active: rgba(255, 255, 255, 0.11);\n  --uo-color-scrim: rgba(0, 0, 0, 0.6);\n  --uo-color-scrim-spotlight: rgba(0, 0, 0, 0.7);\n  --uo-color-primary: #f4f4f5;\n  --uo-color-primary-hover: #dcdce0;\n  --uo-color-primary-active: #c8c8ce;\n  --uo-color-on-primary: #111113;\n  --uo-color-primary-subtle: #26262a;\n  --uo-color-primary-text: #f4f4f5;\n  --uo-color-focus-ring: #f4f4f5;\n  --uo-color-success-fg: #5cd68a;\n  --uo-color-success-bg: #12251a;\n  --uo-color-success-border: #1f4a2e;\n  --uo-color-success-solid: #2fb463;\n  --uo-color-warning-fg: #f5b94e;\n  --uo-color-warning-bg: #2a2010;\n  --uo-color-warning-border: #54401a;\n  --uo-color-warning-solid: #e9a23b;\n  --uo-color-danger-fg: #ff7a70;\n  --uo-color-danger-bg: #2c1514;\n  --uo-color-danger-border: #5a2723;\n  --uo-color-danger-solid: #d7362b;\n  --uo-color-info-fg: #7da8ff;\n  --uo-color-info-bg: #142038;\n  --uo-color-info-border: #24406e;\n  --uo-color-info-solid: #4c8dff;\n  --uo-color-status-review: #b49bff;\n  --uo-color-status-review-bg: #221a38;\n  --uo-color-status-planned: #7da8ff;\n  --uo-color-status-planned-bg: #142038;\n  --uo-color-status-progress: #f5b94e;\n  --uo-color-status-progress-bg: #2a2010;\n  --uo-color-status-completed: #5cd68a;\n  --uo-color-status-completed-bg: #12251a;\n  --uo-color-status-closed: #8a8a94;\n  --uo-color-status-closed-bg: #26262a;\n  --uo-color-label-gray: #8a8a94;\n  --uo-color-label-blue: #5b9bff;\n  --uo-color-label-green: #3cc274;\n  --uo-color-label-yellow: #e8ba2e;\n  --uo-color-label-orange: #f2873e;\n  --uo-color-label-red: #f0645a;\n  --uo-color-label-purple: #a586ff;\n  --uo-color-label-pink: #ee6db0;\n  --uo-color-pick: #4c8dff;\n  --uo-color-pick-tint: rgba(76, 141, 255, 0.14);\n  --uo-color-record: #d7362b;\n  --uo-color-record-tint: rgba(229, 72, 77, 0.12);\n  --uo-color-presence: #2fb463;\n  --uo-shadow-0: none;\n  --uo-shadow-1: inset 0 0 0 1px rgba(255, 255, 255, 0.04);\n  --uo-shadow-2: 0 8px 20px -4px rgba(0, 0, 0, 0.55), inset 0 0 0 1px rgba(255, 255, 255, 0.07);\n  --uo-shadow-3:\n    0 22px 52px -10px rgba(0, 0, 0, 0.65), 0 0 0 1px rgba(0, 0, 0, 0.5),\n    inset 0 0 0 1px rgba(255, 255, 255, 0.08);\n  --uo-shadow-4:\n    0 40px 96px -16px rgba(0, 0, 0, 0.75), 0 0 0 1px rgba(0, 0, 0, 0.5),\n    inset 0 0 0 1px rgba(255, 255, 255, 0.09);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #uojs .floating-widget-root,\n  #uojs.floating-widget {\n    --uo-duration-base: 140ms;\n    --uo-duration-slow: 140ms;\n    --uo-duration-slower: 140ms;\n  }\n}\n","export const hexToRGBA = (hex: string | undefined, opacity: number): string | undefined => {\n  // return undefined if hex is undefined, this is important for adding the default values to the CSS variables\n  // TODO: find a better way to handle this\n  if (!hex || hex === \"\") return undefined;\n\n  // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n  const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n  hex = hex.replace(shorthandRegex, (_, r, g, b) => r + r + g + g + b + b);\n\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  if (!result) return \"\";\n\n  const r = Number.parseInt(result[1], 16);\n  const g = Number.parseInt(result[2], 16);\n  const b = Number.parseInt(result[3], 16);\n\n  return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n};\n\nexport const lightenDarkenColor = (hexColor: string, magnitude: number): string => {\n  hexColor = hexColor.replace(`#`, ``);\n\n  // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n  if (hexColor.length === 3) {\n    hexColor = hexColor\n      .split(\"\")\n      .map((char) => char + char)\n      .join(\"\");\n  }\n\n  if (hexColor.length === 6) {\n    const decimalColor = Number.parseInt(hexColor, 16);\n    let r = (decimalColor >> 16) + magnitude;\n    r = Math.max(0, Math.min(255, r)); // Clamp value between 0 and 255\n    let g = ((decimalColor >> 8) & 0x00ff) + magnitude;\n    g = Math.max(0, Math.min(255, g)); // Clamp value between 0 and 255\n    let b = (decimalColor & 0x0000ff) + magnitude;\n    b = Math.max(0, Math.min(255, b)); // Clamp value between 0 and 255\n\n    // Convert back to hex and return\n    return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n  } else {\n    // Return the original color if it's neither 3 nor 6 characters\n    return hexColor;\n  }\n};\n\nexport const mixColor = (hexColor: string, mixWithHex: string, weight: number): string => {\n  // Convert both colors to RGBA format\n  const color1 = hexToRGBA(hexColor, 1) || \"\";\n  const color2 = hexToRGBA(mixWithHex, 1) || \"\";\n\n  // Extract RGBA values\n  const [r1, g1, b1] = color1.match(/\\d+/g)?.map(Number) || [0, 0, 0];\n  const [r2, g2, b2] = color2.match(/\\d+/g)?.map(Number) || [0, 0, 0];\n\n  // Mix the colors\n  const r = Math.round(r1 * (1 - weight) + r2 * weight);\n  const g = Math.round(g1 * (1 - weight) + g2 * weight);\n  const b = Math.round(b1 * (1 - weight) + b2 * weight);\n\n  return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n};\n\nexport const isLight = (color: string) => {\n  let r: number | undefined, g: number | undefined, b: number | undefined;\n\n  if (color.length === 4) {\n    r = Number.parseInt(color[1] + color[1], 16);\n    g = Number.parseInt(color[2] + color[2], 16);\n    b = Number.parseInt(color[3] + color[3], 16);\n  } else if (color.length === 7) {\n    r = Number.parseInt(color[1] + color[2], 16);\n    g = Number.parseInt(color[3] + color[4], 16);\n    b = Number.parseInt(color[5] + color[6], 16);\n  }\n  if (r === undefined || g === undefined || b === undefined) {\n    throw new Error(\"Invalid color\");\n  }\n  return r * 0.299 + g * 0.587 + b * 0.114 > 128;\n};\n\nexport const getReadableTextColor = (backgroundColor: string) => {\n  try {\n    return isLight(backgroundColor) ? \"#111827\" : \"#ffffff\";\n  } catch {\n    return \"#ffffff\";\n  }\n};\n","import component from \"@userorbit/ui/src/global.css?inline\";\nimport global from \"../styles/global.css?inline\";\nimport tokens from \"../styles/tokens.css?inline\";\n// import preflight from \"../styles/preflight.css?inline\";\nimport { getReadableTextColor, isLight, mixColor } from \"./colors\";\n\nexport const addStylesToDom = () => {\n  if (document.getElementById(\"userorbit__css\") === null) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.id = \"userorbit__css\";\n    styleElement.innerHTML = global + tokens;\n    document.head.appendChild(styleElement);\n  }\n};\n\nexport const addStylesToShadowDom = (shadowRoot: ShadowRoot) => {\n  if (shadowRoot && shadowRoot.getElementById(\"userorbit__css\") === null) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.id = \"userorbit__css\";\n    styleElement.innerHTML = global + tokens + component;\n    shadowRoot.appendChild(styleElement);\n  }\n};\n\nexport const addCustomCssToShadowDom = ({\n  css,\n  shadowRoot,\n}: {\n  css?: string | null;\n  shadowRoot: ShadowRoot;\n}) => {\n  const trimmedCss = css?.trim();\n  const existingStyle = shadowRoot.getElementById(\"userorbit__css__custom_overrides\");\n\n  if (!trimmedCss) {\n    existingStyle?.remove();\n    return;\n  }\n\n  const styleElement = existingStyle || document.createElement(\"style\");\n  styleElement.id = \"userorbit__css__custom_overrides\";\n  styleElement.textContent = trimmedCss;\n\n  if (!existingStyle) {\n    shadowRoot.appendChild(styleElement);\n  }\n};\n\nexport const addCustomThemeToShadowDom = ({\n  styling,\n  shadowRoot,\n}: {\n  styling: any;\n  shadowRoot?: ShadowRoot;\n}) => {\n  if (!styling) {\n    return;\n  }\n  let styleElement;\n  if (shadowRoot) {\n    styleElement = shadowRoot.getElementById(\"userorbit__css__custom\");\n  } else {\n    styleElement = document.getElementById(\"userorbit__css__custom\");\n  }\n\n  // If the style element doesn't exist, create it and append it to the shadow root\n  if (!styleElement) {\n    styleElement = document.createElement(\"style\");\n    styleElement.id = \"userorbit__css__custom\";\n    if (shadowRoot) {\n      shadowRoot.appendChild(styleElement);\n    } else {\n      document.head.appendChild(styleElement);\n    }\n  }\n\n  let cssVariables = \"* {\\n\";\n\n  // Helper function to append the variable if it's not undefined\n  const appendCssVariable = (\n    variableName: string,\n    value: string | undefined,\n    noPrefix?: boolean,\n  ) => {\n    if (value !== undefined) {\n      cssVariables += `${!noPrefix ? \"--\" : \"\"}${variableName}: ${value};\\n`;\n    }\n  };\n\n  // Use the helper function to append CSS variables\n  appendCssVariable(\"brand-color\", styling.brandColor?.light);\n  appendCssVariable(\"focus-color\", styling.brandColor?.light);\n  if (styling.brandColor?.light) {\n    // If the brand color is defined, set the text color based on the lightness of the brand color\n    appendCssVariable(\"brand-text-color\", isLight(styling.brandColor?.light) ? \"black\" : \"white\");\n  } else {\n    // If the brand color is undefined, default to white\n    appendCssVariable(\"brand-text-color\", \"#ffffff\");\n  }\n\n  const primaryColor = styling.primaryColor || \"#3415f5\";\n  appendCssVariable(\"color-primary\", primaryColor);\n  appendCssVariable(\"color-primary-foreground\", getReadableTextColor(primaryColor));\n  appendCssVariable(\"primary\", primaryColor, true);\n\n  if (styling.brandColor?.light) {\n    const brandColor = styling.brandColor.light;\n\n    const accentColor = mixColor(brandColor, \"#ffffff\", 0.8);\n    const accentColorSelected = mixColor(brandColor, \"#ffffff\", 0.7);\n\n    appendCssVariable(\"accent-background-color\", accentColor);\n    appendCssVariable(\"accent-background-color-selected\", accentColorSelected);\n  }\n\n  // Close the :host block\n  cssVariables += \"}\";\n\n  // Set the innerHTML of the style element\n  styleElement.innerHTML = cssVariables;\n};\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import React from \"react\";\n\nexport interface DotPosition {\n  top?: string;\n  right?: string;\n  bottom?: string;\n  left?: string;\n}\n\nexport interface NotificationButtonProps {\n  active: boolean;\n  onClick: () => void;\n  dotPosition?: DotPosition;\n  hideDot?: boolean;\n}\n\nconst NotificationButton = ({\n  active,\n  onClick,\n  dotPosition = { top: \"0px\", right: \"0px\" },\n  hideDot = false,\n}: NotificationButtonProps) => {\n  return (\n    <button\n      type=\"button\"\n      className={`button ${active && \"button--active\"}`}\n      style={{\n        outline: \"none\",\n        cursor: \"pointer\",\n        display: \"block\",\n        width: \"100%\",\n        height: \"100%\",\n        position: \"absolute\",\n        top: \"0\",\n        left: \"0\",\n        background: \"transparent\",\n        border: \"none\",\n      }}\n      onClick={onClick}\n    >\n      {!hideDot && (\n        <div\n          className={`${active ? \"active\" : \"\"}`}\n          style={{\n            ...dotPosition,\n            backgroundColor: \"#cd4b5b\",\n            animation: \"pulse1 1.5s infinite\",\n            transform: \"scale(0.6)\",\n            opacity: \"1\",\n            transition: \"all .4s cubic-bezier(.32, .72, 0, 1)\",\n            willChange: \"transform\",\n            position: \"absolute\",\n            cursor: \"pointer\",\n            fontSize: \"11px\",\n            lineHeight: \"16px\",\n            textAlign: \"center\",\n            display: \"block\",\n            borderRadius: \"50%\",\n            color: \"#fff\",\n            height: \"16px\",\n            width: \"16px\",\n          }}\n        />\n      )}\n    </button>\n  );\n};\n\nexport default NotificationButton;\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","import { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n    const ref = useRef(null);\n    if (ref.current === null) {\n        ref.current = init();\n    }\n    return ref.current;\n}\n\nexport { useConstant };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n    transformPagePoint: (p) => p,\n    isStatic: false,\n    reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n    getSnapshotBeforeUpdate(prevProps) {\n        const element = this.props.childRef.current;\n        if (element && prevProps.isPresent && !this.props.isPresent) {\n            const size = this.props.sizeRef.current;\n            size.height = element.offsetHeight || 0;\n            size.width = element.offsetWidth || 0;\n            size.top = element.offsetTop;\n            size.left = element.offsetLeft;\n        }\n        return null;\n    }\n    /**\n     * Required with getSnapshotBeforeUpdate to stop React complaining.\n     */\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\nfunction PopChild({ children, isPresent }) {\n    const id = useId();\n    const ref = useRef(null);\n    const size = useRef({\n        width: 0,\n        height: 0,\n        top: 0,\n        left: 0,\n    });\n    const { nonce } = useContext(MotionConfigContext);\n    /**\n     * We create and inject a style block so we can apply this explicit\n     * sizing in a non-destructive manner by just deleting the style block.\n     *\n     * We can't apply size via render as the measurement happens\n     * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n     * styles directly on the DOM node, we might be overwriting\n     * styles set via the style prop.\n     */\n    useInsertionEffect(() => {\n        const { width, height, top, left } = size.current;\n        if (isPresent || !ref.current || !width || !height)\n            return;\n        ref.current.dataset.motionPopId = id;\n        const style = document.createElement(\"style\");\n        if (nonce)\n            style.nonce = nonce;\n        document.head.appendChild(style);\n        if (style.sheet) {\n            style.sheet.insertRule(`\n          [data-motion-pop-id=\"${id}\"] {\n            position: absolute !important;\n            width: ${width}px !important;\n            height: ${height}px !important;\n            top: ${top}px !important;\n            left: ${left}px !important;\n          }\n        `);\n        }\n        return () => {\n            document.head.removeChild(style);\n        };\n    }, [isPresent]);\n    return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, children: React.cloneElement(children, { ref }) }));\n}\n\nexport { PopChild };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useCallback, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, }) => {\n    const presenceChildren = useConstant(newChildrenMap);\n    const id = useId();\n    const memoizedOnExitComplete = useCallback((childId) => {\n        presenceChildren.set(childId, true);\n        for (const isComplete of presenceChildren.values()) {\n            if (!isComplete)\n                return; // can stop searching when any is incomplete\n        }\n        onExitComplete && onExitComplete();\n    }, [presenceChildren, onExitComplete]);\n    const context = useMemo(() => ({\n        id,\n        initial,\n        isPresent,\n        custom,\n        onExitComplete: memoizedOnExitComplete,\n        register: (childId) => {\n            presenceChildren.set(childId, false);\n            return () => presenceChildren.delete(childId);\n        },\n    }), \n    /**\n     * If the presence of a child affects the layout of the components around it,\n     * we want to make a new context value to ensure they get re-rendered\n     * so they can detect that layout change.\n     */\n    presenceAffectsLayout\n        ? [Math.random(), memoizedOnExitComplete]\n        : [isPresent, memoizedOnExitComplete]);\n    useMemo(() => {\n        presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n    }, [isPresent]);\n    /**\n     * If there's no `motion` components to fire exit animations, we want to remove this\n     * component immediately.\n     */\n    React.useEffect(() => {\n        !isPresent &&\n            !presenceChildren.size &&\n            onExitComplete &&\n            onExitComplete();\n    }, [isPresent]);\n    if (mode === \"popLayout\") {\n        children = jsx(PopChild, { isPresent: isPresent, children: children });\n    }\n    return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n    return new Map();\n}\n\nexport { PresenceChild };\n","import { useContext, useId, useEffect, useCallback } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const [isPresent, safeToRemove] = usePresence()\n *\n *   useEffect(() => {\n *     !isPresent && setTimeout(safeToRemove, 1000)\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence(subscribe = true) {\n    const context = useContext(PresenceContext);\n    if (context === null)\n        return [true, null];\n    const { isPresent, onExitComplete, register } = context;\n    // It's safe to call the following hooks conditionally (after an early return) because the context will always\n    // either be null or non-null for the lifespan of the component.\n    const id = useId();\n    useEffect(() => {\n        if (subscribe)\n            register(id);\n    }, [subscribe]);\n    const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n    return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const isPresent = useIsPresent()\n *\n *   useEffect(() => {\n *     !isPresent && console.log(\"I've been removed!\")\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n    return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n    return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n","import { Children, isValidElement } from 'react';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction onlyElements(children) {\n    const filtered = [];\n    // We use forEach here instead of map as map mutates the component key by preprending `.$`\n    Children.forEach(children, (child) => {\n        if (isValidElement(child))\n            filtered.push(child);\n    });\n    return filtered;\n}\n\nexport { getChildKey, onlyElements };\n","const isBrowser = typeof window !== \"undefined\";\n\nexport { isBrowser };\n","import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","\"use client\";\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useMemo, useRef, useState, useContext } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { usePresence } from './use-presence.mjs';\nimport { onlyElements, getChildKey } from './utils.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n *   <AnimatePresence>\n *     {items.map(item => (\n *       <motion.div\n *         key={item.id}\n *         initial={{ opacity: 0 }}\n *         animate={{ opacity: 1 }}\n *         exit={{ opacity: 0 }}\n *       />\n *     ))}\n *   </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = \"sync\", propagate = false, }) => {\n    const [isParentPresent, safeToRemove] = usePresence(propagate);\n    /**\n     * Filter any children that aren't ReactElements. We can only track components\n     * between renders with a props.key.\n     */\n    const presentChildren = useMemo(() => onlyElements(children), [children]);\n    /**\n     * Track the keys of the currently rendered children. This is used to\n     * determine which children are exiting.\n     */\n    const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);\n    /**\n     * If `initial={false}` we only want to pass this to components in the first render.\n     */\n    const isInitialRender = useRef(true);\n    /**\n     * A ref containing the currently present children. When all exit animations\n     * are complete, we use this to re-render the component with the latest children\n     * *committed* rather than the latest children *rendered*.\n     */\n    const pendingPresentChildren = useRef(presentChildren);\n    /**\n     * Track which exiting children have finished animating out.\n     */\n    const exitComplete = useConstant(() => new Map());\n    /**\n     * Save children to render as React state. To ensure this component is concurrent-safe,\n     * we check for exiting children via an effect.\n     */\n    const [diffedChildren, setDiffedChildren] = useState(presentChildren);\n    const [renderedChildren, setRenderedChildren] = useState(presentChildren);\n    useIsomorphicLayoutEffect(() => {\n        isInitialRender.current = false;\n        pendingPresentChildren.current = presentChildren;\n        /**\n         * Update complete status of exiting children.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const key = getChildKey(renderedChildren[i]);\n            if (!presentKeys.includes(key)) {\n                if (exitComplete.get(key) !== true) {\n                    exitComplete.set(key, false);\n                }\n            }\n            else {\n                exitComplete.delete(key);\n            }\n        }\n    }, [renderedChildren, presentKeys.length, presentKeys.join(\"-\")]);\n    const exitingChildren = [];\n    if (presentChildren !== diffedChildren) {\n        let nextChildren = [...presentChildren];\n        /**\n         * Loop through all the currently rendered components and decide which\n         * are exiting.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const child = renderedChildren[i];\n            const key = getChildKey(child);\n            if (!presentKeys.includes(key)) {\n                nextChildren.splice(i, 0, child);\n                exitingChildren.push(child);\n            }\n        }\n        /**\n         * If we're in \"wait\" mode, and we have exiting children, we want to\n         * only render these until they've all exited.\n         */\n        if (mode === \"wait\" && exitingChildren.length) {\n            nextChildren = exitingChildren;\n        }\n        setRenderedChildren(onlyElements(nextChildren));\n        setDiffedChildren(presentChildren);\n        /**\n         * Early return to ensure once we've set state with the latest diffed\n         * children, we can immediately re-render.\n         */\n        return;\n    }\n    if (process.env.NODE_ENV !== \"production\" &&\n        mode === \"wait\" &&\n        renderedChildren.length > 1) {\n        console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n    }\n    /**\n     * If we've been provided a forceRender function by the LayoutGroupContext,\n     * we can use it to force a re-render amongst all surrounding components once\n     * all components have finished animating out.\n     */\n    const { forceRender } = useContext(LayoutGroupContext);\n    return (jsx(Fragment, { children: renderedChildren.map((child) => {\n            const key = getChildKey(child);\n            const isPresent = propagate && !isParentPresent\n                ? false\n                : presentChildren === renderedChildren ||\n                    presentKeys.includes(key);\n            const onExit = () => {\n                if (exitComplete.has(key)) {\n                    exitComplete.set(key, true);\n                }\n                else {\n                    return;\n                }\n                let isEveryExitComplete = true;\n                exitComplete.forEach((isExitComplete) => {\n                    if (!isExitComplete)\n                        isEveryExitComplete = false;\n                });\n                if (isEveryExitComplete) {\n                    forceRender === null || forceRender === void 0 ? void 0 : forceRender();\n                    setRenderedChildren(pendingPresentChildren.current);\n                    propagate && (safeToRemove === null || safeToRemove === void 0 ? void 0 : safeToRemove());\n                    onExitComplete && onExitComplete();\n                }\n            };\n            return (jsx(PresenceChild, { isPresent: isPresent, initial: !isInitialRender.current || initial\n                    ? undefined\n                    : false, custom: isPresent ? undefined : custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, onExitComplete: isPresent ? undefined : onExit, children: child }, key));\n        }) }));\n};\n\nexport { AnimatePresence };\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\n","import { noop } from './noop.mjs';\n\nlet warning = noop;\nlet invariant = noop;\nif (process.env.NODE_ENV !== \"production\") {\n    warning = (check, message) => {\n        if (!check && typeof console !== \"undefined\") {\n            console.warn(message);\n        }\n    };\n    invariant = (check, message) => {\n        if (!check) {\n            throw new Error(message);\n        }\n    };\n}\n\nexport { invariant, warning };\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n    let result;\n    return () => {\n        if (result === undefined)\n            result = callback();\n        return result;\n    };\n}\n\nexport { memo };\n","/*\n  Progress within given range\n\n  Given a lower limit and an upper limit, we return the progress\n  (expressed as a number 0-1) represented by the given value, and\n  limit that progress to within 0-1.\n\n  @param [number]: Lower limit\n  @param [number]: Upper limit\n  @param [number]: Value to find progress within given range\n  @return [number]: Progress of value within range as expressed 0-1\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n    const toFromDifference = to - from;\n    return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","export { invariant, warning } from './errors.mjs';\nexport { memo } from './memo.mjs';\nexport { noop } from './noop.mjs';\nexport { progress } from './progress.mjs';\nexport { millisecondsToSeconds, secondsToMilliseconds } from './time-conversion.mjs';\n","const MotionGlobalConfig = {\n    skipAnimations: false,\n    useManualTiming: false,\n};\n\nexport { MotionGlobalConfig };\n","function createRenderStep(runNextFrame) {\n    /**\n     * We create and reuse two queues, one to queue jobs for the current frame\n     * and one for the next. We reuse to avoid triggering GC after x frames.\n     */\n    let thisFrame = new Set();\n    let nextFrame = new Set();\n    /**\n     * Track whether we're currently processing jobs in this step. This way\n     * we can decide whether to schedule new jobs for this frame or next.\n     */\n    let isProcessing = false;\n    let flushNextFrame = false;\n    /**\n     * A set of processes which were marked keepAlive when scheduled.\n     */\n    const toKeepAlive = new WeakSet();\n    let latestFrameData = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    function triggerCallback(callback) {\n        if (toKeepAlive.has(callback)) {\n            step.schedule(callback);\n            runNextFrame();\n        }\n        callback(latestFrameData);\n    }\n    const step = {\n        /**\n         * Schedule a process to run on the next frame.\n         */\n        schedule: (callback, keepAlive = false, immediate = false) => {\n            const addToCurrentFrame = immediate && isProcessing;\n            const queue = addToCurrentFrame ? thisFrame : nextFrame;\n            if (keepAlive)\n                toKeepAlive.add(callback);\n            if (!queue.has(callback))\n                queue.add(callback);\n            return callback;\n        },\n        /**\n         * Cancel the provided callback from running on the next frame.\n         */\n        cancel: (callback) => {\n            nextFrame.delete(callback);\n            toKeepAlive.delete(callback);\n        },\n        /**\n         * Execute all schedule callbacks.\n         */\n        process: (frameData) => {\n            latestFrameData = frameData;\n            /**\n             * If we're already processing we've probably been triggered by a flushSync\n             * inside an existing process. Instead of executing, mark flushNextFrame\n             * as true and ensure we flush the following frame at the end of this one.\n             */\n            if (isProcessing) {\n                flushNextFrame = true;\n                return;\n            }\n            isProcessing = true;\n            [thisFrame, nextFrame] = [nextFrame, thisFrame];\n            // Execute this frame\n            thisFrame.forEach(triggerCallback);\n            // Clear the frame so no callbacks remain. This is to avoid\n            // memory leaks should this render step not run for a while.\n            thisFrame.clear();\n            isProcessing = false;\n            if (flushNextFrame) {\n                flushNextFrame = false;\n                step.process(frameData);\n            }\n        },\n    };\n    return step;\n}\n\nexport { createRenderStep };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst stepsOrder = [\n    \"read\", // Read\n    \"resolveKeyframes\", // Write/Read/Write/Read\n    \"update\", // Compute\n    \"preRender\", // Compute\n    \"render\", // Write\n    \"postRender\", // Compute\n];\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n    let runNextFrame = false;\n    let useDefaultElapsed = true;\n    const state = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    const flagRunNextFrame = () => (runNextFrame = true);\n    const steps = stepsOrder.reduce((acc, key) => {\n        acc[key] = createRenderStep(flagRunNextFrame);\n        return acc;\n    }, {});\n    const { read, resolveKeyframes, update, preRender, render, postRender } = steps;\n    const processBatch = () => {\n        const timestamp = MotionGlobalConfig.useManualTiming\n            ? state.timestamp\n            : performance.now();\n        runNextFrame = false;\n        state.delta = useDefaultElapsed\n            ? 1000 / 60\n            : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n        state.timestamp = timestamp;\n        state.isProcessing = true;\n        // Unrolled render loop for better per-frame performance\n        read.process(state);\n        resolveKeyframes.process(state);\n        update.process(state);\n        preRender.process(state);\n        render.process(state);\n        postRender.process(state);\n        state.isProcessing = false;\n        if (runNextFrame && allowKeepAlive) {\n            useDefaultElapsed = false;\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const wake = () => {\n        runNextFrame = true;\n        useDefaultElapsed = true;\n        if (!state.isProcessing) {\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const schedule = stepsOrder.reduce((acc, key) => {\n        const step = steps[key];\n        acc[key] = (process, keepAlive = false, immediate = false) => {\n            if (!runNextFrame)\n                wake();\n            return step.schedule(process, keepAlive, immediate);\n        };\n        return acc;\n    }, {});\n    const cancel = (process) => {\n        for (let i = 0; i < stepsOrder.length; i++) {\n            steps[stepsOrder[i]].cancel(process);\n        }\n    };\n    return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher, stepsOrder };\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","const featureProps = {\n    animation: [\n        \"animate\",\n        \"variants\",\n        \"whileHover\",\n        \"whileTap\",\n        \"exit\",\n        \"whileInView\",\n        \"whileFocus\",\n        \"whileDrag\",\n    ],\n    exit: [\"exit\"],\n    drag: [\"drag\", \"dragControls\"],\n    focus: [\"whileFocus\"],\n    hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n    tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n    pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n    inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n    layout: [\"layout\", \"layoutId\"],\n};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n    featureDefinitions[key] = {\n        isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n    };\n}\n\nexport { featureDefinitions };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n    for (const key in features) {\n        featureDefinitions[key] = {\n            ...featureDefinitions[key],\n            ...features[key],\n        };\n    }\n}\n\nexport { loadFeatures };\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n    \"animate\",\n    \"exit\",\n    \"variants\",\n    \"initial\",\n    \"style\",\n    \"values\",\n    \"variants\",\n    \"transition\",\n    \"transformTemplate\",\n    \"custom\",\n    \"inherit\",\n    \"onBeforeLayoutMeasure\",\n    \"onAnimationStart\",\n    \"onAnimationComplete\",\n    \"onUpdate\",\n    \"onDragStart\",\n    \"onDrag\",\n    \"onDragEnd\",\n    \"onMeasureDragConstraints\",\n    \"onDirectionLock\",\n    \"onDragTransitionEnd\",\n    \"_dragX\",\n    \"_dragY\",\n    \"onHoverStart\",\n    \"onHoverEnd\",\n    \"onViewportEnter\",\n    \"onViewportLeave\",\n    \"globalTapTarget\",\n    \"ignoreStrict\",\n    \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n    return (key.startsWith(\"while\") ||\n        (key.startsWith(\"drag\") && key !== \"draggable\") ||\n        key.startsWith(\"layout\") ||\n        key.startsWith(\"onTap\") ||\n        key.startsWith(\"onPan\") ||\n        key.startsWith(\"onLayout\") ||\n        validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n    if (!isValidProp)\n        return;\n    // Explicitly filter our events\n    shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n    /**\n     * We attempt to import this package but require won't be defined in esm environments, in that case\n     * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n     * in favour of explicit injection.\n     */\n    loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n    // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n    const filteredProps = {};\n    for (const key in props) {\n        /**\n         * values is considered a valid prop by Emotion, so if it's present\n         * this will be rendered out to the DOM unless explicitly filtered.\n         *\n         * We check the type as it could be used with the `feColorMatrix`\n         * element, which we support.\n         */\n        if (key === \"values\" && typeof props.values === \"object\")\n            continue;\n        if (shouldForward(key) ||\n            (forwardMotionProps === true && isValidMotionProp(key)) ||\n            (!isDom && !isValidMotionProp(key)) ||\n            // If trying to use native HTML drag events, forward drag listeners\n            (props[\"draggable\"] &&\n                key.startsWith(\"onDrag\"))) {\n            filteredProps[key] =\n                props[key];\n        }\n    }\n    return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","import { warnOnce } from '../../utils/warn-once.mjs';\n\nfunction createDOMMotionComponentProxy(componentFactory) {\n    if (typeof Proxy === \"undefined\") {\n        return componentFactory;\n    }\n    /**\n     * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n     * Rather than generating them anew every render.\n     */\n    const componentCache = new Map();\n    const deprecatedFactoryFunction = (...args) => {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, \"motion() is deprecated. Use motion.create() instead.\");\n        }\n        return componentFactory(...args);\n    };\n    return new Proxy(deprecatedFactoryFunction, {\n        /**\n         * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n         * The prop name is passed through as `key` and we can use that to generate a `motion`\n         * DOM component with that name.\n         */\n        get: (_target, key) => {\n            if (key === \"create\")\n                return componentFactory;\n            /**\n             * If this element doesn't exist in the component cache, create it and cache.\n             */\n            if (!componentCache.has(key)) {\n                componentCache.set(key, componentFactory(key));\n            }\n            return componentCache.get(key);\n        },\n    });\n}\n\nexport { createDOMMotionComponentProxy };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst MotionContext = createContext({});\n\nexport { MotionContext };\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n    return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n","function isAnimationControls(v) {\n    return (v !== null &&\n        typeof v === \"object\" &&\n        typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n","const variantPriorityOrder = [\n    \"animate\",\n    \"whileInView\",\n    \"whileFocus\",\n    \"whileHover\",\n    \"whileTap\",\n    \"whileDrag\",\n    \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n    return (isAnimationControls(props.animate) ||\n        variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n    return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n","import { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\nimport { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction getCurrentTreeVariants(props, context) {\n    if (isControllingVariants(props)) {\n        const { initial, animate } = props;\n        return {\n            initial: initial === false || isVariantLabel(initial)\n                ? initial\n                : undefined,\n            animate: isVariantLabel(animate) ? animate : undefined,\n        };\n    }\n    return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n","import { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction useCreateMotionContext(props) {\n    const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n    return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n    return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\nexport { useCreateMotionContext };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","function isRefObject(ref) {\n    return (ref &&\n        typeof ref === \"object\" &&\n        Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","import { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n    return useCallback((instance) => {\n        if (instance) {\n            visualState.onMount && visualState.onMount(instance);\n        }\n        if (visualElement) {\n            if (instance) {\n                visualElement.mount(instance);\n            }\n            else {\n                visualElement.unmount();\n            }\n        }\n        if (externalRef) {\n            if (typeof externalRef === \"function\") {\n                externalRef(instance);\n            }\n            else if (isRefObject(externalRef)) {\n                externalRef.current = instance;\n            }\n        }\n    }, \n    /**\n     * Only pass a new ref callback to React if we've received a visual element\n     * factory. Otherwise we'll be mounting/remounting every time externalRef\n     * or other dependencies change.\n     */\n    [visualElement]);\n}\n\nexport { useMotionRef };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","import { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor) {\n    var _a, _b;\n    const { visualElement: parent } = useContext(MotionContext);\n    const lazyContext = useContext(LazyContext);\n    const presenceContext = useContext(PresenceContext);\n    const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n    const visualElementRef = useRef(null);\n    /**\n     * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n     */\n    createVisualElement = createVisualElement || lazyContext.renderer;\n    if (!visualElementRef.current && createVisualElement) {\n        visualElementRef.current = createVisualElement(Component, {\n            visualState,\n            parent,\n            props,\n            presenceContext,\n            blockInitialAnimation: presenceContext\n                ? presenceContext.initial === false\n                : false,\n            reducedMotionConfig,\n        });\n    }\n    const visualElement = visualElementRef.current;\n    /**\n     * Load Motion gesture and animation features. These are rendered as renderless\n     * components so each feature can optionally make use of React lifecycle methods.\n     */\n    const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n    if (visualElement &&\n        !visualElement.projection &&\n        ProjectionNodeConstructor &&\n        (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n        createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n    }\n    const isMounted = useRef(false);\n    useInsertionEffect(() => {\n        /**\n         * Check the component has already mounted before calling\n         * `update` unnecessarily. This ensures we skip the initial update.\n         */\n        if (visualElement && isMounted.current) {\n            visualElement.update(props, presenceContext);\n        }\n    });\n    /**\n     * Cache this value as we want to know whether HandoffAppearAnimations\n     * was present on initial render - it will be deleted after this.\n     */\n    const optimisedAppearId = props[optimizedAppearDataAttribute];\n    const wantsHandoff = useRef(Boolean(optimisedAppearId) &&\n        !((_a = window.MotionHandoffIsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId)) &&\n        ((_b = window.MotionHasOptimisedAnimation) === null || _b === void 0 ? void 0 : _b.call(window, optimisedAppearId)));\n    useIsomorphicLayoutEffect(() => {\n        if (!visualElement)\n            return;\n        isMounted.current = true;\n        window.MotionIsMounted = true;\n        visualElement.updateFeatures();\n        microtask.render(visualElement.render);\n        /**\n         * Ideally this function would always run in a useEffect.\n         *\n         * However, if we have optimised appear animations to handoff from,\n         * it needs to happen synchronously to ensure there's no flash of\n         * incorrect styles in the event of a hydration error.\n         *\n         * So if we detect a situtation where optimised appear animations\n         * are running, we use useLayoutEffect to trigger animations.\n         */\n        if (wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n    });\n    useEffect(() => {\n        if (!visualElement)\n            return;\n        if (!wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n        if (wantsHandoff.current) {\n            // This ensures all future calls to animateChanges() in this component will run in useEffect\n            queueMicrotask(() => {\n                var _a;\n                (_a = window.MotionHandoffMarkAsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId);\n            });\n            wantsHandoff.current = false;\n        }\n    });\n    return visualElement;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n    const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = props;\n    visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n        ? undefined\n        : getClosestProjectingNode(visualElement.parent));\n    visualElement.projection.setOptions({\n        layoutId,\n        layout,\n        alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n        visualElement,\n        /**\n         * TODO: Update options in an effect. This could be tricky as it'll be too late\n         * to update by the time layout animations run.\n         * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n         * ensuring it gets called if there's no potential layout animations.\n         *\n         */\n        animationType: typeof layout === \"string\" ? layout : \"both\",\n        initialPromotionConfig,\n        layoutScroll,\n        layoutRoot,\n    });\n}\nfunction getClosestProjectingNode(visualElement) {\n    if (!visualElement)\n        return undefined;\n    return visualElement.options.allowProjection !== false\n        ? visualElement.projection\n        : getClosestProjectingNode(visualElement.parent);\n}\n\nexport { useVisualElement };\n","\"use client\";\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { warning, invariant } from 'motion-utils';\nimport { forwardRef, useContext } from 'react';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { featureDefinitions } from './features/definitions.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createRendererMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n    var _a, _b;\n    preloadedFeatures && loadFeatures(preloadedFeatures);\n    function MotionComponent(props, externalRef) {\n        /**\n         * If we need to measure the element we load this functionality in a\n         * separate class component in order to gain access to getSnapshotBeforeUpdate.\n         */\n        let MeasureLayout;\n        const configAndProps = {\n            ...useContext(MotionConfigContext),\n            ...props,\n            layoutId: useLayoutId(props),\n        };\n        const { isStatic } = configAndProps;\n        const context = useCreateMotionContext(props);\n        const visualState = useVisualState(props, isStatic);\n        if (!isStatic && isBrowser) {\n            useStrictMode(configAndProps, preloadedFeatures);\n            const layoutProjection = getProjectionFunctionality(configAndProps);\n            MeasureLayout = layoutProjection.MeasureLayout;\n            /**\n             * Create a VisualElement for this component. A VisualElement provides a common\n             * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n             * providing a way of rendering to these APIs outside of the React render loop\n             * for more performant animations and interactions\n             */\n            context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode);\n        }\n        /**\n         * The mount order and hierarchy is specific to ensure our element ref\n         * is hydrated by the time features fire their effects.\n         */\n        return (jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)] }));\n    }\n    MotionComponent.displayName = `motion.${typeof Component === \"string\"\n        ? Component\n        : `create(${(_b = (_a = Component.displayName) !== null && _a !== void 0 ? _a : Component.name) !== null && _b !== void 0 ? _b : \"\"})`}`;\n    const ForwardRefMotionComponent = forwardRef(MotionComponent);\n    ForwardRefMotionComponent[motionComponentSymbol] = Component;\n    return ForwardRefMotionComponent;\n}\nfunction useLayoutId({ layoutId }) {\n    const layoutGroupId = useContext(LayoutGroupContext).id;\n    return layoutGroupId && layoutId !== undefined\n        ? layoutGroupId + \"-\" + layoutId\n        : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n    const isStrict = useContext(LazyContext).strict;\n    /**\n     * If we're in development mode, check to make sure we're not rendering a motion component\n     * as a child of LazyMotion, as this will break the file-size benefits of using it.\n     */\n    if (process.env.NODE_ENV !== \"production\" &&\n        preloadedFeatures &&\n        isStrict) {\n        const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n        configAndProps.ignoreStrict\n            ? warning(false, strictMessage)\n            : invariant(false, strictMessage);\n    }\n}\nfunction getProjectionFunctionality(props) {\n    const { drag, layout } = featureDefinitions;\n    if (!drag && !layout)\n        return {};\n    const combined = { ...drag, ...layout };\n    return {\n        MeasureLayout: (drag === null || drag === void 0 ? void 0 : drag.isEnabled(props)) || (layout === null || layout === void 0 ? void 0 : layout.isEnabled(props))\n            ? combined.MeasureLayout\n            : undefined,\n        ProjectionNode: combined.ProjectionNode,\n    };\n}\n\nexport { createRendererMotionComponent };\n","/**\n * We keep these listed separately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n    \"animate\",\n    \"circle\",\n    \"defs\",\n    \"desc\",\n    \"ellipse\",\n    \"g\",\n    \"image\",\n    \"line\",\n    \"filter\",\n    \"marker\",\n    \"mask\",\n    \"metadata\",\n    \"path\",\n    \"pattern\",\n    \"polygon\",\n    \"polyline\",\n    \"rect\",\n    \"stop\",\n    \"switch\",\n    \"symbol\",\n    \"svg\",\n    \"text\",\n    \"tspan\",\n    \"use\",\n    \"view\",\n];\n\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n    if (\n    /**\n     * If it's not a string, it's a custom React component. Currently we only support\n     * HTML custom React components.\n     */\n    typeof Component !== \"string\" ||\n        /**\n         * If it contains a dash, the element is a custom HTML webcomponent.\n         */\n        Component.includes(\"-\")) {\n        return false;\n    }\n    else if (\n    /**\n     * If it's in our list of lowercase SVG tags, it's an SVG component\n     */\n    lowercaseSVGElements.indexOf(Component) > -1 ||\n        /**\n         * If it contains a capital letter, it's an SVG component\n         */\n        /[A-Z]/u.test(Component)) {\n        return true;\n    }\n    return false;\n}\n\nexport { isSVGComponent };\n","function getValueState(visualElement) {\n    const state = [{}, {}];\n    visualElement === null || visualElement === void 0 ? void 0 : visualElement.values.forEach((value, key) => {\n        state[0][key] = value.get();\n        state[1][key] = value.getVelocity();\n    });\n    return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n    /**\n     * If the variant definition is a function, resolve.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    /**\n     * If the variant definition is a variant label, or\n     * the function returned a variant label, resolve.\n     */\n    if (typeof definition === \"string\") {\n        definition = props.variants && props.variants[definition];\n    }\n    /**\n     * At this point we've resolved both functions and variant labels,\n     * but the resolved variant label might itself have been a function.\n     * If so, resolve. This can only have returned a valid target object.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    return definition;\n}\n\nexport { resolveVariantFromProps };\n","const isKeyframesTarget = (v) => {\n    return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';\n\nconst isCustomValue = (v) => {\n    return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n    // TODO maybe throw if v.length - 1 is placeholder token?\n    return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nexport { isCustomValue, resolveFinalValueInKeyframes };\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n","import { isCustomValue } from '../../utils/resolve-value.mjs';\nimport { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n    const unwrappedValue = isMotionValue(value) ? value.get() : value;\n    return isCustomValue(unwrappedValue)\n        ? unwrappedValue.toValue()\n        : unwrappedValue;\n}\n\nexport { resolveMotionValue };\n","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onUpdate, }, props, context, presenceContext) {\n    const state = {\n        latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n        renderState: createRenderState(),\n    };\n    if (onUpdate) {\n        /**\n         * onMount works without the VisualElement because it could be\n         * called before the VisualElement payload has been hydrated.\n         * (e.g. if someone is using m components <m.circle />)\n         */\n        state.onMount = (instance) => onUpdate({ props, current: instance, ...state });\n        state.onUpdate = (visualElement) => onUpdate(visualElement);\n    }\n    return state;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n    const context = useContext(MotionContext);\n    const presenceContext = useContext(PresenceContext);\n    const make = () => makeState(config, props, context, presenceContext);\n    return isStatic ? make() : useConstant(make);\n};\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n    const values = {};\n    const motionValues = scrapeMotionValues(props, {});\n    for (const key in motionValues) {\n        values[key] = resolveMotionValue(motionValues[key]);\n    }\n    let { initial, animate } = props;\n    const isControllingVariants$1 = isControllingVariants(props);\n    const isVariantNode$1 = isVariantNode(props);\n    if (context &&\n        isVariantNode$1 &&\n        !isControllingVariants$1 &&\n        props.inherit !== false) {\n        if (initial === undefined)\n            initial = context.initial;\n        if (animate === undefined)\n            animate = context.animate;\n    }\n    let isInitialAnimationBlocked = presenceContext\n        ? presenceContext.initial === false\n        : false;\n    isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n    const variantToSet = isInitialAnimationBlocked ? animate : initial;\n    if (variantToSet &&\n        typeof variantToSet !== \"boolean\" &&\n        !isAnimationControls(variantToSet)) {\n        const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n        for (let i = 0; i < list.length; i++) {\n            const resolved = resolveVariantFromProps(props, list[i]);\n            if (resolved) {\n                const { transitionEnd, transition, ...target } = resolved;\n                for (const key in target) {\n                    let valueTarget = target[key];\n                    if (Array.isArray(valueTarget)) {\n                        /**\n                         * Take final keyframe if the initial animation is blocked because\n                         * we want to initialise at the end of that blocked animation.\n                         */\n                        const index = isInitialAnimationBlocked\n                            ? valueTarget.length - 1\n                            : 0;\n                        valueTarget = valueTarget[index];\n                    }\n                    if (valueTarget !== null) {\n                        values[key] = valueTarget;\n                    }\n                }\n                for (const key in transitionEnd) {\n                    values[key] = transitionEnd[key];\n                }\n            }\n        }\n    }\n    return values;\n}\n\nexport { makeUseVisualState };\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n    \"transformPerspective\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"translateX\",\n    \"translateY\",\n    \"translateZ\",\n    \"scale\",\n    \"scaleX\",\n    \"scaleY\",\n    \"rotate\",\n    \"rotateX\",\n    \"rotateY\",\n    \"rotateZ\",\n    \"skew\",\n    \"skewX\",\n    \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n */\nconst transformProps = new Set(transformPropOrder);\n\nexport { transformPropOrder, transformProps };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n    const startsWithToken = startsAsVariableToken(value);\n    if (!startsWithToken)\n        return false;\n    // Ensure any comments are stripped from the value as this can harm performance of the regex.\n    return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n\nexport { isCSSVariableName, isCSSVariableToken };\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n    return type && typeof value === \"number\"\n        ? type.transform(value)\n        : value;\n};\n\nexport { getValueAsType };\n","const clamp = (min, max, v) => {\n    if (v > max)\n        return max;\n    if (v < min)\n        return min;\n    return v;\n};\n\nexport { clamp };\n","import { clamp } from '../../../utils/clamp.mjs';\n\nconst number = {\n    test: (v) => typeof v === \"number\",\n    parse: parseFloat,\n    transform: (v) => v,\n};\nconst alpha = {\n    ...number,\n    transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n    ...number,\n    default: 1,\n};\n\nexport { alpha, number, scale };\n","const createUnitType = (unit) => ({\n    test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n    parse: parseFloat,\n    transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = {\n    ...percent,\n    parse: (v) => percent.parse(v) / 100,\n    transform: (v) => percent.transform(v * 100),\n};\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst browserNumberValueTypes = {\n    // Border props\n    borderWidth: px,\n    borderTopWidth: px,\n    borderRightWidth: px,\n    borderBottomWidth: px,\n    borderLeftWidth: px,\n    borderRadius: px,\n    radius: px,\n    borderTopLeftRadius: px,\n    borderTopRightRadius: px,\n    borderBottomRightRadius: px,\n    borderBottomLeftRadius: px,\n    // Positioning props\n    width: px,\n    maxWidth: px,\n    height: px,\n    maxHeight: px,\n    top: px,\n    right: px,\n    bottom: px,\n    left: px,\n    // Spacing props\n    padding: px,\n    paddingTop: px,\n    paddingRight: px,\n    paddingBottom: px,\n    paddingLeft: px,\n    margin: px,\n    marginTop: px,\n    marginRight: px,\n    marginBottom: px,\n    marginLeft: px,\n    // Misc\n    backgroundPositionX: px,\n    backgroundPositionY: px,\n};\n\nexport { browserNumberValueTypes };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { degrees, px, progressPercentage } from '../../../value/types/numbers/units.mjs';\n\nconst transformValueTypes = {\n    rotate: degrees,\n    rotateX: degrees,\n    rotateY: degrees,\n    rotateZ: degrees,\n    scale,\n    scaleX: scale,\n    scaleY: scale,\n    scaleZ: scale,\n    skew: degrees,\n    skewX: degrees,\n    skewY: degrees,\n    distance: px,\n    translateX: px,\n    translateY: px,\n    translateZ: px,\n    x: px,\n    y: px,\n    z: px,\n    perspective: px,\n    transformPerspective: px,\n    opacity: alpha,\n    originX: progressPercentage,\n    originY: progressPercentage,\n    originZ: px,\n};\n\nexport { transformValueTypes };\n","import { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n    ...number,\n    transform: Math.round,\n};\n\nexport { int };\n","import { alpha } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\nimport { browserNumberValueTypes } from './number-browser.mjs';\nimport { transformValueTypes } from './transform.mjs';\nimport { int } from './type-int.mjs';\n\nconst numberValueTypes = {\n    ...browserNumberValueTypes,\n    ...transformValueTypes,\n    zIndex: int,\n    size: px,\n    // SVG\n    fillOpacity: alpha,\n    strokeOpacity: alpha,\n    numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\nimport { transformPropOrder } from './keys-transform.mjs';\n\nconst translateAlias = {\n    x: \"translateX\",\n    y: \"translateY\",\n    z: \"translateZ\",\n    transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(latestValues, transform, transformTemplate) {\n    // The transform string we're going to build into.\n    let transformString = \"\";\n    let transformIsDefault = true;\n    /**\n     * Loop over all possible transforms in order, adding the ones that\n     * are present to the transform string.\n     */\n    for (let i = 0; i < numTransforms; i++) {\n        const key = transformPropOrder[i];\n        const value = latestValues[key];\n        if (value === undefined)\n            continue;\n        let valueIsDefault = true;\n        if (typeof value === \"number\") {\n            valueIsDefault = value === (key.startsWith(\"scale\") ? 1 : 0);\n        }\n        else {\n            valueIsDefault = parseFloat(value) === 0;\n        }\n        if (!valueIsDefault || transformTemplate) {\n            const valueAsType = getValueAsType(value, numberValueTypes[key]);\n            if (!valueIsDefault) {\n                transformIsDefault = false;\n                const transformName = translateAlias[key] || key;\n                transformString += `${transformName}(${valueAsType}) `;\n            }\n            if (transformTemplate) {\n                transform[key] = valueAsType;\n            }\n        }\n    }\n    transformString = transformString.trim();\n    // If we have a custom `transform` template, pass our transform values and\n    // generated transformString to that before returning\n    if (transformTemplate) {\n        transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n    }\n    else if (transformIsDefault) {\n        transformString = \"none\";\n    }\n    return transformString;\n}\n\nexport { buildTransform };\n","import { isCSSVariableName } from '../../dom/utils/is-css-variable.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\nimport { buildTransform } from './build-transform.mjs';\nimport { transformProps } from './keys-transform.mjs';\n\nfunction buildHTMLStyles(state, latestValues, transformTemplate) {\n    const { style, vars, transformOrigin } = state;\n    // Track whether we encounter any transform or transformOrigin values.\n    let hasTransform = false;\n    let hasTransformOrigin = false;\n    /**\n     * Loop over all our latest animated values and decide whether to handle them\n     * as a style or CSS variable.\n     *\n     * Transforms and transform origins are kept separately for further processing.\n     */\n    for (const key in latestValues) {\n        const value = latestValues[key];\n        if (transformProps.has(key)) {\n            // If this is a transform, flag to enable further transform processing\n            hasTransform = true;\n            continue;\n        }\n        else if (isCSSVariableName(key)) {\n            vars[key] = value;\n            continue;\n        }\n        else {\n            // Convert the value to its default value type, ie 0 -> \"0px\"\n            const valueAsType = getValueAsType(value, numberValueTypes[key]);\n            if (key.startsWith(\"origin\")) {\n                // If this is a transform origin, flag and enable further transform-origin processing\n                hasTransformOrigin = true;\n                transformOrigin[key] =\n                    valueAsType;\n            }\n            else {\n                style[key] = valueAsType;\n            }\n        }\n    }\n    if (!latestValues.transform) {\n        if (hasTransform || transformTemplate) {\n            style.transform = buildTransform(latestValues, state.transform, transformTemplate);\n        }\n        else if (style.transform) {\n            /**\n             * If we have previously created a transform but currently don't have any,\n             * reset transform style to none.\n             */\n            style.transform = \"none\";\n        }\n    }\n    /**\n     * Build a transformOrigin style. Uses the same defaults as the browser for\n     * undefined origins.\n     */\n    if (hasTransformOrigin) {\n        const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n        style.transformOrigin = `${originX} ${originY} ${originZ}`;\n    }\n}\n\nexport { buildHTMLStyles };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst dashKeys = {\n    offset: \"stroke-dashoffset\",\n    array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n    offset: \"strokeDashoffset\",\n    array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n    // Normalise path length by setting SVG attribute pathLength to 1\n    attrs.pathLength = 1;\n    // We use dash case when setting attributes directly to the DOM node and camel case\n    // when defining props on a React component.\n    const keys = useDashCase ? dashKeys : camelKeys;\n    // Build the dash offset\n    attrs[keys.offset] = px.transform(-offset);\n    // Build the dash array\n    const pathLength = px.transform(length);\n    const pathSpacing = px.transform(spacing);\n    attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\nexport { buildSVGPath };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nfunction calcOrigin(origin, offset, size) {\n    return typeof origin === \"string\"\n        ? origin\n        : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n    const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n    const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n    return `${pxOriginX} ${pxOriginY}`;\n}\n\nexport { calcSVGTransformOrigin };\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { buildSVGPath } from './path.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate) {\n    buildHTMLStyles(state, latest, transformTemplate);\n    /**\n     * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n     * as normal HTML tags.\n     */\n    if (isSVGTag) {\n        if (state.style.viewBox) {\n            state.attrs.viewBox = state.style.viewBox;\n        }\n        return;\n    }\n    state.attrs = state.style;\n    state.style = {};\n    const { attrs, style, dimensions } = state;\n    /**\n     * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n     * and copy it into style.\n     */\n    if (attrs.transform) {\n        if (dimensions)\n            style.transform = attrs.transform;\n        delete attrs.transform;\n    }\n    // Parse transformOrigin\n    if (dimensions &&\n        (originX !== undefined || originY !== undefined || style.transform)) {\n        style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n    }\n    // Render attrX/attrY/attrScale as attributes\n    if (attrX !== undefined)\n        attrs.x = attrX;\n    if (attrY !== undefined)\n        attrs.y = attrY;\n    if (attrScale !== undefined)\n        attrs.scale = attrScale;\n    // Build SVG path if one has been defined\n    if (pathLength !== undefined) {\n        buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n    }\n}\n\nexport { buildSVGAttrs };\n","const createHtmlRenderState = () => ({\n    style: {},\n    transform: {},\n    transformOrigin: {},\n    vars: {},\n});\n\nexport { createHtmlRenderState };\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n    ...createHtmlRenderState(),\n    attrs: {},\n});\n\nexport { createSvgRenderState };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n    Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n    // Loop over any CSS variables and assign those.\n    for (const key in vars) {\n        element.style.setProperty(key, vars[key]);\n    }\n}\n\nexport { renderHTML };\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n    \"baseFrequency\",\n    \"diffuseConstant\",\n    \"kernelMatrix\",\n    \"kernelUnitLength\",\n    \"keySplines\",\n    \"keyTimes\",\n    \"limitingConeAngle\",\n    \"markerHeight\",\n    \"markerWidth\",\n    \"numOctaves\",\n    \"targetX\",\n    \"targetY\",\n    \"surfaceScale\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"stdDeviation\",\n    \"tableValues\",\n    \"viewBox\",\n    \"gradientTransform\",\n    \"pathLength\",\n    \"startOffset\",\n    \"textLength\",\n    \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n    renderHTML(element, renderState, undefined, projection);\n    for (const key in renderState.attrs) {\n        element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n    }\n}\n\nexport { renderSVG };\n","const scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n    Object.assign(scaleCorrectors, correctors);\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n","import { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/keys-transform.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n    return (transformProps.has(key) ||\n        key.startsWith(\"origin\") ||\n        ((layout || layoutId !== undefined) &&\n            (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue };\n","import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    var _a;\n    const { style } = props;\n    const newValues = {};\n    for (const key in style) {\n        if (isMotionValue(style[key]) ||\n            (prevProps.style &&\n                isMotionValue(prevProps.style[key])) ||\n            isForcedMotionValue(key, props) ||\n            ((_a = visualElement === null || visualElement === void 0 ? void 0 : visualElement.getValue(key)) === null || _a === void 0 ? void 0 : _a.liveStyle) !== undefined) {\n            newValues[key] = style[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { transformPropOrder } from '../../html/utils/keys-transform.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n    for (const key in props) {\n        if (isMotionValue(props[key]) ||\n            isMotionValue(prevProps[key])) {\n            const targetKey = transformPropOrder.indexOf(key) !== -1\n                ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n                : key;\n            newValues[targetKey] = props[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { frame } from '../../frameloop/frame.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { transformProps } from '../html/utils/keys-transform.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction updateSVGDimensions(instance, renderState) {\n    try {\n        renderState.dimensions =\n            typeof instance.getBBox === \"function\"\n                ? instance.getBBox()\n                : instance.getBoundingClientRect();\n    }\n    catch (e) {\n        // Most likely trying to measure an unrendered element under Firefox\n        renderState.dimensions = {\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0,\n        };\n    }\n}\nconst layoutProps = [\"x\", \"y\", \"width\", \"height\", \"cx\", \"cy\", \"r\"];\nconst svgMotionConfig = {\n    useVisualState: makeUseVisualState({\n        scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n        createRenderState: createSvgRenderState,\n        onUpdate: ({ props, prevProps, current, renderState, latestValues, }) => {\n            if (!current)\n                return;\n            let hasTransform = !!props.drag;\n            if (!hasTransform) {\n                for (const key in latestValues) {\n                    if (transformProps.has(key)) {\n                        hasTransform = true;\n                        break;\n                    }\n                }\n            }\n            if (!hasTransform)\n                return;\n            let needsMeasure = !prevProps;\n            if (prevProps) {\n                /**\n                 * Check the layout props for changes, if any are found we need to\n                 * measure the element again.\n                 */\n                for (let i = 0; i < layoutProps.length; i++) {\n                    const key = layoutProps[i];\n                    if (props[key] !==\n                        prevProps[key]) {\n                        needsMeasure = true;\n                    }\n                }\n            }\n            if (!needsMeasure)\n                return;\n            frame.read(() => {\n                updateSVGDimensions(current, renderState);\n                frame.render(() => {\n                    buildSVGAttrs(renderState, latestValues, isSVGTag(current.tagName), props.transformTemplate);\n                    renderSVG(current, renderState);\n                });\n            });\n        },\n    }),\n};\n\nexport { svgMotionConfig };\n","import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst htmlMotionConfig = {\n    useVisualState: makeUseVisualState({\n        scrapeMotionValuesFromProps,\n        createRenderState: createHtmlRenderState,\n    }),\n};\n\nexport { htmlMotionConfig };\n","import { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n    for (const key in source) {\n        if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n            target[key] = source[key];\n        }\n    }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState) {\n    return useMemo(() => {\n        const state = createHtmlRenderState();\n        buildHTMLStyles(state, visualState, transformTemplate);\n        return Object.assign({}, state.vars, state.style);\n    }, [visualState]);\n}\nfunction useStyle(props, visualState) {\n    const styleProp = props.style || {};\n    const style = {};\n    /**\n     * Copy non-Motion Values straight into style\n     */\n    copyRawValuesOnly(style, styleProp, props);\n    Object.assign(style, useInitialMotionValues(props, visualState));\n    return style;\n}\nfunction useHTMLProps(props, visualState) {\n    // The `any` isn't ideal but it is the type of createElement props argument\n    const htmlProps = {};\n    const style = useStyle(props, visualState);\n    if (props.drag && props.dragListener !== false) {\n        // Disable the ghost element when a user drags\n        htmlProps.draggable = false;\n        // Disable text selection\n        style.userSelect =\n            style.WebkitUserSelect =\n                style.WebkitTouchCallout =\n                    \"none\";\n        // Disable scrolling on the draggable direction\n        style.touchAction =\n            props.drag === true\n                ? \"none\"\n                : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n    }\n    if (props.tabIndex === undefined &&\n        (props.onTap || props.onTapStart || props.whileTap)) {\n        htmlProps.tabIndex = 0;\n    }\n    htmlProps.style = style;\n    return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n","import { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n    const visualProps = useMemo(() => {\n        const state = createSvgRenderState();\n        buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate);\n        return {\n            ...state.attrs,\n            style: { ...state.style },\n        };\n    }, [visualState]);\n    if (props.style) {\n        const rawStyles = {};\n        copyRawValuesOnly(rawStyles, props.style, props);\n        visualProps.style = { ...rawStyles, ...visualProps.style };\n    }\n    return visualProps;\n}\n\nexport { useSVGProps };\n","import { Fragment, useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction createUseRender(forwardMotionProps = false) {\n    const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n        const useVisualProps = isSVGComponent(Component)\n            ? useSVGProps\n            : useHTMLProps;\n        const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n        const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n        const elementProps = Component !== Fragment\n            ? { ...filteredProps, ...visualProps, ref }\n            : {};\n        /**\n         * If component has been handed a motion value as its child,\n         * memoise its initial value and render that. Subsequent updates\n         * will be handled by the onChange handler\n         */\n        const { children } = props;\n        const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n        return createElement(Component, {\n            ...elementProps,\n            children: renderedChildren,\n        });\n    };\n    return useRender;\n}\n\nexport { createUseRender };\n","import { createRendererMotionComponent } from '../../motion/index.mjs';\nimport { isSVGComponent } from '../dom/utils/is-svg-component.mjs';\nimport { svgMotionConfig } from '../svg/config-motion.mjs';\nimport { htmlMotionConfig } from '../html/config-motion.mjs';\nimport { createUseRender } from '../dom/use-render.mjs';\n\nfunction createMotionComponentFactory(preloadedFeatures, createVisualElement) {\n    return function createMotionComponent(Component, { forwardMotionProps } = { forwardMotionProps: false }) {\n        const baseConfig = isSVGComponent(Component)\n            ? svgMotionConfig\n            : htmlMotionConfig;\n        const config = {\n            ...baseConfig,\n            preloadedFeatures,\n            useRender: createUseRender(forwardMotionProps),\n            createVisualElement,\n            Component,\n        };\n        return createRendererMotionComponent(config);\n    };\n}\n\nexport { createMotionComponentFactory };\n","function shallowCompare(next, prev) {\n    if (!Array.isArray(prev))\n        return false;\n    const prevLength = prev.length;\n    if (prevLength !== next.length)\n        return false;\n    for (let i = 0; i < prevLength; i++) {\n        if (prev[i] !== next[i])\n            return false;\n    }\n    return true;\n}\n\nexport { shallowCompare };\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n    const props = visualElement.getProps();\n    return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n","import { memo } from 'motion-utils';\n\nconst supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);\n\nexport { supportsScrollTimeline };\n","import { supportsScrollTimeline } from '../../utils/supports/scroll-timeline.mjs';\n\nclass BaseGroupPlaybackControls {\n    constructor(animations) {\n        // Bound to accomodate common `return animation.stop` pattern\n        this.stop = () => this.runAll(\"stop\");\n        this.animations = animations.filter(Boolean);\n    }\n    get finished() {\n        // Support for new finished Promise and legacy thennable API\n        return Promise.all(this.animations.map((animation) => \"finished\" in animation ? animation.finished : animation));\n    }\n    /**\n     * TODO: Filter out cancelled or stopped animations before returning\n     */\n    getAll(propName) {\n        return this.animations[0][propName];\n    }\n    setAll(propName, newValue) {\n        for (let i = 0; i < this.animations.length; i++) {\n            this.animations[i][propName] = newValue;\n        }\n    }\n    attachTimeline(timeline, fallback) {\n        const subscriptions = this.animations.map((animation) => {\n            if (supportsScrollTimeline() && animation.attachTimeline) {\n                return animation.attachTimeline(timeline);\n            }\n            else if (typeof fallback === \"function\") {\n                return fallback(animation);\n            }\n        });\n        return () => {\n            subscriptions.forEach((cancel, i) => {\n                cancel && cancel();\n                this.animations[i].stop();\n            });\n        };\n    }\n    get time() {\n        return this.getAll(\"time\");\n    }\n    set time(time) {\n        this.setAll(\"time\", time);\n    }\n    get speed() {\n        return this.getAll(\"speed\");\n    }\n    set speed(speed) {\n        this.setAll(\"speed\", speed);\n    }\n    get startTime() {\n        return this.getAll(\"startTime\");\n    }\n    get duration() {\n        let max = 0;\n        for (let i = 0; i < this.animations.length; i++) {\n            max = Math.max(max, this.animations[i].duration);\n        }\n        return max;\n    }\n    runAll(methodName) {\n        this.animations.forEach((controls) => controls[methodName]());\n    }\n    flatten() {\n        this.runAll(\"flatten\");\n    }\n    play() {\n        this.runAll(\"play\");\n    }\n    pause() {\n        this.runAll(\"pause\");\n    }\n    cancel() {\n        this.runAll(\"cancel\");\n    }\n    complete() {\n        this.runAll(\"complete\");\n    }\n}\n\nexport { BaseGroupPlaybackControls };\n","import { BaseGroupPlaybackControls } from './BaseGroup.mjs';\n\n/**\n * TODO: This is a temporary class to support the legacy\n * thennable API\n */\nclass GroupPlaybackControls extends BaseGroupPlaybackControls {\n    then(onResolve, onReject) {\n        return Promise.all(this.animations).then(onResolve).catch(onReject);\n    }\n}\n\nexport { GroupPlaybackControls };\n","function getValueTransition(transition, key) {\n    return transition\n        ? transition[key] ||\n            transition[\"default\"] ||\n            transition\n        : undefined;\n}\n\nexport { getValueTransition };\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n    let duration = 0;\n    const timeStep = 50;\n    let state = generator.next(duration);\n    while (!state.done && duration < maxGeneratorDuration) {\n        duration += timeStep;\n        state = generator.next(duration);\n    }\n    return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n","function isGenerator(type) {\n    return typeof type === \"function\";\n}\n\nexport { isGenerator };\n","function attachTimeline(animation, timeline) {\n    animation.timeline = timeline;\n    animation.onfinish = null;\n}\n\nexport { attachTimeline };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {\n    linearEasing: undefined,\n};\n\nexport { supportsFlags };\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n    const memoized = memo(callback);\n    return () => { var _a; return (_a = supportsFlags[supportsFlag]) !== null && _a !== void 0 ? _a : memoized(); };\n}\n\nexport { memoSupports };\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n    try {\n        document\n            .createElement(\"div\")\n            .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n","import { progress } from 'motion-utils';\n\nconst generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n    let points = \"\";\n    const numPoints = Math.max(Math.round(duration / resolution), 2);\n    for (let i = 0; i < numPoints; i++) {\n        points += easing(progress(0, numPoints - 1, i)) + \", \";\n    }\n    return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n","import { isBezierDefinition } from '../../../utils/is-bezier-definition.mjs';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from './linear.mjs';\n\nfunction isWaapiSupportedEasing(easing) {\n    return Boolean((typeof easing === \"function\" && supportsLinearEasing()) ||\n        !easing ||\n        (typeof easing === \"string\" &&\n            (easing in supportedWaapiEasing || supportsLinearEasing())) ||\n        isBezierDefinition(easing) ||\n        (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n    linear: \"linear\",\n    ease: \"ease\",\n    easeIn: \"ease-in\",\n    easeOut: \"ease-out\",\n    easeInOut: \"ease-in-out\",\n    circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n    circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n    backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n    backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing, duration) {\n    if (!easing) {\n        return undefined;\n    }\n    else if (typeof easing === \"function\" && supportsLinearEasing()) {\n        return generateLinearEasing(easing, duration);\n    }\n    else if (isBezierDefinition(easing)) {\n        return cubicBezierAsString(easing);\n    }\n    else if (Array.isArray(easing)) {\n        return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n            supportedWaapiEasing.easeOut);\n    }\n    else {\n        return supportedWaapiEasing[easing];\n    }\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","const isDragging = {\n    x: false,\n    y: false,\n};\nfunction isDragActive() {\n    return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n    var _a;\n    if (elementOrSelector instanceof Element) {\n        return [elementOrSelector];\n    }\n    else if (typeof elementOrSelector === \"string\") {\n        let root = document;\n        if (scope) {\n            // TODO: Refactor to utils package\n            // invariant(\n            //     Boolean(scope.current),\n            //     \"Scope provided, but no element detected.\"\n            // )\n            root = scope.current;\n        }\n        const elements = (_a = selectorCache === null || selectorCache === void 0 ? void 0 : selectorCache[elementOrSelector]) !== null && _a !== void 0 ? _a : root.querySelectorAll(elementOrSelector);\n        return elements ? Array.from(elements) : [];\n    }\n    return Array.from(elementOrSelector);\n}\n\nexport { resolveElements };\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n    const elements = resolveElements(elementOrSelector);\n    const gestureAbortController = new AbortController();\n    const eventOptions = {\n        passive: true,\n        ...options,\n        signal: gestureAbortController.signal,\n    };\n    const cancel = () => gestureAbortController.abort();\n    return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\n/**\n * Filter out events that are not pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction filterEvents(callback) {\n    return (event) => {\n        if (event.pointerType === \"touch\" || isDragActive())\n            return;\n        callback(event);\n    };\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n    const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n    const onPointerEnter = filterEvents((enterEvent) => {\n        const { target } = enterEvent;\n        const onHoverEnd = onHoverStart(enterEvent);\n        if (typeof onHoverEnd !== \"function\" || !target)\n            return;\n        const onPointerLeave = filterEvents((leaveEvent) => {\n            onHoverEnd(leaveEvent);\n            target.removeEventListener(\"pointerleave\", onPointerLeave);\n        });\n        target.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n    });\n    elements.forEach((element) => {\n        element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n    });\n    return cancel;\n}\n\nexport { hover };\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n    if (!child) {\n        return false;\n    }\n    else if (parent === child) {\n        return true;\n    }\n    else {\n        return isNodeOrChild(parent, child.parentElement);\n    }\n};\n\nexport { isNodeOrChild };\n","const isPrimaryPointer = (event) => {\n    if (event.pointerType === \"mouse\") {\n        return typeof event.button !== \"number\" || event.button <= 0;\n    }\n    else {\n        /**\n         * isPrimary is true for all mice buttons, whereas every touch point\n         * is regarded as its own input. So subsequent concurrent touch points\n         * will be false.\n         *\n         * Specifically match against false here as incomplete versions of\n         * PointerEvents in very old browser might have it set as undefined.\n         */\n        return event.isPrimary !== false;\n    }\n};\n\nexport { isPrimaryPointer };\n","const focusableElements = new Set([\n    \"BUTTON\",\n    \"INPUT\",\n    \"SELECT\",\n    \"TEXTAREA\",\n    \"A\",\n]);\nfunction isElementKeyboardAccessible(element) {\n    return (focusableElements.has(element.tagName) ||\n        element.tabIndex !== -1);\n}\n\nexport { isElementKeyboardAccessible };\n","const isPressing = new WeakSet();\n\nexport { isPressing };\n","import { isPressing } from './state.mjs';\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback) {\n    return (event) => {\n        if (event.key !== \"Enter\")\n            return;\n        callback(event);\n    };\n}\nfunction firePointerEvent(target, type) {\n    target.dispatchEvent(new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true }));\n}\nconst enableKeyboardPress = (focusEvent, eventOptions) => {\n    const element = focusEvent.currentTarget;\n    if (!element)\n        return;\n    const handleKeydown = filterEvents(() => {\n        if (isPressing.has(element))\n            return;\n        firePointerEvent(element, \"down\");\n        const handleKeyup = filterEvents(() => {\n            firePointerEvent(element, \"up\");\n        });\n        const handleBlur = () => firePointerEvent(element, \"cancel\");\n        element.addEventListener(\"keyup\", handleKeyup, eventOptions);\n        element.addEventListener(\"blur\", handleBlur, eventOptions);\n    });\n    element.addEventListener(\"keydown\", handleKeydown, eventOptions);\n    /**\n     * Add an event listener that fires on blur to remove the keydown events.\n     */\n    element.addEventListener(\"blur\", () => element.removeEventListener(\"keydown\", handleKeydown), eventOptions);\n};\n\nexport { enableKeyboardPress };\n","import { isDragActive } from '../drag/state/is-active.mjs';\nimport { isNodeOrChild } from '../utils/is-node-or-child.mjs';\nimport { isPrimaryPointer } from '../utils/is-primary-pointer.mjs';\nimport { setupGesture } from '../utils/setup.mjs';\nimport { isElementKeyboardAccessible } from './utils/is-keyboard-accessible.mjs';\nimport { enableKeyboardPress } from './utils/keyboard.mjs';\nimport { isPressing } from './utils/state.mjs';\n\n/**\n * Filter out events that are not primary pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction isValidPressEvent(event) {\n    return isPrimaryPointer(event) && !isDragActive();\n}\n/**\n * Create a press gesture.\n *\n * Press is different to `\"pointerdown\"`, `\"pointerup\"` in that it\n * automatically filters out secondary pointer events like right\n * click and multitouch.\n *\n * It also adds accessibility support for keyboards, where\n * an element with a press gesture will receive focus and\n *  trigger on Enter `\"keydown\"` and `\"keyup\"` events.\n *\n * This is different to a browser's `\"click\"` event, which does\n * respond to keyboards but only for the `\"click\"` itself, rather\n * than the press start and end/cancel. The element also needs\n * to be focusable for this to work, whereas a press gesture will\n * make an element focusable by default.\n *\n * @public\n */\nfunction press(elementOrSelector, onPressStart, options = {}) {\n    const [elements, eventOptions, cancelEvents] = setupGesture(elementOrSelector, options);\n    const startPress = (startEvent) => {\n        const element = startEvent.currentTarget;\n        if (!isValidPressEvent(startEvent) || isPressing.has(element))\n            return;\n        isPressing.add(element);\n        const onPressEnd = onPressStart(startEvent);\n        const onPointerEnd = (endEvent, success) => {\n            window.removeEventListener(\"pointerup\", onPointerUp);\n            window.removeEventListener(\"pointercancel\", onPointerCancel);\n            if (!isValidPressEvent(endEvent) || !isPressing.has(element)) {\n                return;\n            }\n            isPressing.delete(element);\n            if (typeof onPressEnd === \"function\") {\n                onPressEnd(endEvent, { success });\n            }\n        };\n        const onPointerUp = (upEvent) => {\n            onPointerEnd(upEvent, options.useGlobalTarget ||\n                isNodeOrChild(element, upEvent.target));\n        };\n        const onPointerCancel = (cancelEvent) => {\n            onPointerEnd(cancelEvent, false);\n        };\n        window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n        window.addEventListener(\"pointercancel\", onPointerCancel, eventOptions);\n    };\n    elements.forEach((element) => {\n        if (!isElementKeyboardAccessible(element) &&\n            element.getAttribute(\"tabindex\") === null) {\n            element.tabIndex = 0;\n        }\n        const target = options.useGlobalTarget ? window : element;\n        target.addEventListener(\"pointerdown\", startPress, eventOptions);\n        element.addEventListener(\"focus\", (event) => enableKeyboardPress(event, eventOptions), eventOptions);\n    });\n    return cancelEvents;\n}\n\nexport { press };\n","import { secondsToMilliseconds } from 'motion-utils';\nimport { BaseGroupPlaybackControls } from '../animation/controls/BaseGroup.mjs';\nimport { getValueTransition } from '../animation/utils/get-value-transition.mjs';\nimport { NativeAnimationControls } from '../animation/waapi/NativeAnimationControls.mjs';\nimport { PseudoAnimation } from '../animation/waapi/PseudoAnimation.mjs';\nimport { applyGeneratorOptions } from '../animation/waapi/utils/convert-options.mjs';\nimport { mapEasingToNativeEasing } from '../animation/waapi/utils/easing.mjs';\nimport { chooseLayerType } from './utils/choose-layer-type.mjs';\nimport { css } from './utils/css.mjs';\nimport { getLayerName } from './utils/get-layer-name.mjs';\nimport { getViewAnimations } from './utils/get-view-animations.mjs';\nimport { hasTarget } from './utils/has-target.mjs';\n\nconst definitionNames = [\"layout\", \"enter\", \"exit\", \"new\", \"old\"];\nfunction startViewAnimation(update, defaultOptions, targets) {\n    if (!document.startViewTransition) {\n        return new Promise(async (resolve) => {\n            await update();\n            resolve(new BaseGroupPlaybackControls([]));\n        });\n    }\n    // TODO: Go over existing targets and ensure they all have ids\n    /**\n     * If we don't have any animations defined for the root target,\n     * remove it from being captured.\n     */\n    if (!hasTarget(\"root\", targets)) {\n        css.set(\":root\", {\n            \"view-transition-name\": \"none\",\n        });\n    }\n    /**\n     * Set the timing curve to linear for all view transition layers.\n     * This gets baked into the keyframes, which can't be changed\n     * without breaking the generated animation.\n     *\n     * This allows us to set easing via updateTiming - which can be changed.\n     */\n    css.set(\"::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*)\", { \"animation-timing-function\": \"linear !important\" });\n    css.commit(); // Write\n    const transition = document.startViewTransition(async () => {\n        await update();\n        // TODO: Go over new targets and ensure they all have ids\n    });\n    transition.finished.finally(() => {\n        css.remove(); // Write\n    });\n    return new Promise((resolve) => {\n        transition.ready.then(() => {\n            var _a;\n            const generatedViewAnimations = getViewAnimations();\n            const animations = [];\n            /**\n             * Create animations for our definitions\n             */\n            targets.forEach((definition, target) => {\n                // TODO: If target is not \"root\", resolve elements\n                // and iterate over each\n                for (const key of definitionNames) {\n                    if (!definition[key])\n                        continue;\n                    const { keyframes, options } = definition[key];\n                    for (let [valueName, valueKeyframes] of Object.entries(keyframes)) {\n                        if (!valueKeyframes)\n                            continue;\n                        const valueOptions = {\n                            ...getValueTransition(defaultOptions, valueName),\n                            ...getValueTransition(options, valueName),\n                        };\n                        const type = chooseLayerType(key);\n                        /**\n                         * If this is an opacity animation, and keyframes are not an array,\n                         * we need to convert them into an array and set an initial value.\n                         */\n                        if (valueName === \"opacity\" &&\n                            !Array.isArray(valueKeyframes)) {\n                            const initialValue = type === \"new\" ? 0 : 1;\n                            valueKeyframes = [initialValue, valueKeyframes];\n                        }\n                        /**\n                         * Resolve stagger function if provided.\n                         */\n                        if (typeof valueOptions.delay === \"function\") {\n                            valueOptions.delay = valueOptions.delay(0, 1);\n                        }\n                        const animation = new PseudoAnimation(document.documentElement, `::view-transition-${type}(${target})`, valueName, valueKeyframes, valueOptions);\n                        animations.push(animation);\n                    }\n                }\n            });\n            /**\n             * Handle browser generated animations\n             */\n            for (const animation of generatedViewAnimations) {\n                if (animation.playState === \"finished\")\n                    continue;\n                const { effect } = animation;\n                if (!effect || !(effect instanceof KeyframeEffect))\n                    continue;\n                const { pseudoElement } = effect;\n                if (!pseudoElement)\n                    continue;\n                const name = getLayerName(pseudoElement);\n                if (!name)\n                    continue;\n                const targetDefinition = targets.get(name.layer);\n                if (!targetDefinition) {\n                    /**\n                     * If transition name is group then update the timing of the animation\n                     * whereas if it's old or new then we could possibly replace it using\n                     * the above method.\n                     */\n                    const transitionName = name.type === \"group\" ? \"layout\" : \"\";\n                    const animationTransition = {\n                        ...getValueTransition(defaultOptions, transitionName),\n                    };\n                    applyGeneratorOptions(animationTransition);\n                    const easing = mapEasingToNativeEasing(animationTransition.ease, animationTransition.duration);\n                    effect.updateTiming({\n                        delay: secondsToMilliseconds((_a = animationTransition.delay) !== null && _a !== void 0 ? _a : 0),\n                        duration: animationTransition.duration,\n                        easing,\n                    });\n                    animations.push(new NativeAnimationControls(animation));\n                }\n                else if (hasOpacity(targetDefinition, \"enter\") &&\n                    hasOpacity(targetDefinition, \"exit\") &&\n                    effect\n                        .getKeyframes()\n                        .some((keyframe) => keyframe.mixBlendMode)) {\n                    animations.push(new NativeAnimationControls(animation));\n                }\n                else {\n                    animation.cancel();\n                }\n            }\n            resolve(new BaseGroupPlaybackControls(animations));\n        });\n    });\n}\nfunction hasOpacity(target, key) {\n    var _a;\n    return (_a = target === null || target === void 0 ? void 0 : target[key]) === null || _a === void 0 ? void 0 : _a.keyframes.opacity;\n}\n\nexport { startViewAnimation };\n","import { noop } from 'motion-utils';\nimport { startViewAnimation } from './start.mjs';\n\n/**\n * TODO:\n * - Create view transition on next tick\n * - Replace animations with Motion animations\n * - Return GroupAnimation on next tick\n */\nclass ViewTransitionBuilder {\n    constructor(update, options = {}) {\n        this.currentTarget = \"root\";\n        this.targets = new Map();\n        this.notifyReady = noop;\n        this.readyPromise = new Promise((resolve) => {\n            this.notifyReady = resolve;\n        });\n        queueMicrotask(() => {\n            startViewAnimation(update, options, this.targets).then((animation) => this.notifyReady(animation));\n        });\n    }\n    get(selector) {\n        this.currentTarget = selector;\n        return this;\n    }\n    layout(keyframes, options) {\n        this.updateTarget(\"layout\", keyframes, options);\n        return this;\n    }\n    new(keyframes, options) {\n        this.updateTarget(\"new\", keyframes, options);\n        return this;\n    }\n    old(keyframes, options) {\n        this.updateTarget(\"old\", keyframes, options);\n        return this;\n    }\n    enter(keyframes, options) {\n        this.updateTarget(\"enter\", keyframes, options);\n        return this;\n    }\n    exit(keyframes, options) {\n        this.updateTarget(\"exit\", keyframes, options);\n        return this;\n    }\n    crossfade(options) {\n        this.updateTarget(\"enter\", { opacity: 1 }, options);\n        this.updateTarget(\"exit\", { opacity: 0 }, options);\n        return this;\n    }\n    updateTarget(target, keyframes, options = {}) {\n        const { currentTarget, targets } = this;\n        if (!targets.has(currentTarget)) {\n            targets.set(currentTarget, {});\n        }\n        const targetData = targets.get(currentTarget);\n        targetData[target] = { keyframes, options };\n    }\n    then(resolve, reject) {\n        return this.readyPromise.then(resolve, reject);\n    }\n}\nfunction view(update, defaultOptions = {}) {\n    return new ViewTransitionBuilder(update, defaultOptions);\n}\n\nexport { ViewTransitionBuilder, view };\n","import { isDragging } from './is-active.mjs';\n\nfunction setDragLock(axis) {\n    if (axis === \"x\" || axis === \"y\") {\n        if (isDragging[axis]) {\n            return null;\n        }\n        else {\n            isDragging[axis] = true;\n            return () => {\n                isDragging[axis] = false;\n            };\n        }\n    }\n    else {\n        if (isDragging.x || isDragging.y) {\n            return null;\n        }\n        else {\n            isDragging.x = isDragging.y = true;\n            return () => {\n                isDragging.x = isDragging.y = false;\n            };\n        }\n    }\n}\n\nexport { setDragLock };\n","export { GroupPlaybackControls } from './animation/controls/Group.mjs';\nexport { getValueTransition } from './animation/utils/get-value-transition.mjs';\nexport { calcGeneratorDuration, maxGeneratorDuration } from './animation/generators/utils/calc-duration.mjs';\nexport { createGeneratorEasing } from './animation/generators/utils/create-generator-easing.mjs';\nexport { isGenerator } from './animation/generators/utils/is-generator.mjs';\nexport { NativeAnimationControls } from './animation/waapi/NativeAnimationControls.mjs';\nexport { attachTimeline } from './animation/waapi/utils/attach-timeline.mjs';\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing } from './animation/waapi/utils/easing.mjs';\nexport { generateLinearEasing } from './animation/waapi/utils/linear.mjs';\nexport { hover } from './gestures/hover.mjs';\nexport { press } from './gestures/press/index.mjs';\nexport { isBezierDefinition } from './utils/is-bezier-definition.mjs';\nexport { resolveElements } from './utils/resolve-elements.mjs';\nexport { supportsFlags } from './utils/supports/flags.mjs';\nexport { supportsLinearEasing } from './utils/supports/linear-easing.mjs';\nexport { supportsScrollTimeline } from './utils/supports/scroll-timeline.mjs';\nexport { ViewTransitionBuilder, view } from './view/index.mjs';\nexport { isDragActive, isDragging } from './gestures/drag/state/is-active.mjs';\nexport { setDragLock } from './gestures/drag/state/set-active.mjs';\nexport { isNodeOrChild } from './gestures/utils/is-node-or-child.mjs';\nexport { isPrimaryPointer } from './gestures/utils/is-primary-pointer.mjs';\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n    \"width\",\n    \"height\",\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n    now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n    now: () => {\n        if (now === undefined) {\n            time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n                ? frameData.timestamp\n                : performance.now());\n        }\n        return now;\n    },\n    set: (newTime) => {\n        now = newTime;\n        queueMicrotask(clearTime);\n    },\n};\n\nexport { time };\n","function addUniqueItem(arr, item) {\n    if (arr.indexOf(item) === -1)\n        arr.push(item);\n}\nfunction removeItem(arr, item) {\n    const index = arr.indexOf(item);\n    if (index > -1)\n        arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n    const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n    if (startIndex >= 0 && startIndex < arr.length) {\n        const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n        const [item] = arr.splice(fromIndex, 1);\n        arr.splice(endIndex, 0, item);\n    }\n    return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n    constructor() {\n        this.subscriptions = [];\n    }\n    add(handler) {\n        addUniqueItem(this.subscriptions, handler);\n        return () => removeItem(this.subscriptions, handler);\n    }\n    notify(a, b, c) {\n        const numSubscriptions = this.subscriptions.length;\n        if (!numSubscriptions)\n            return;\n        if (numSubscriptions === 1) {\n            /**\n             * If there's only a single handler we can just call it without invoking a loop.\n             */\n            this.subscriptions[0](a, b, c);\n        }\n        else {\n            for (let i = 0; i < numSubscriptions; i++) {\n                /**\n                 * Check whether the handler exists before firing as it's possible\n                 * the subscriptions were modified during this loop running.\n                 */\n                const handler = this.subscriptions[i];\n                handler && handler(a, b, c);\n            }\n        }\n    }\n    getSize() {\n        return this.subscriptions.length;\n    }\n    clear() {\n        this.subscriptions.length = 0;\n    }\n}\n\nexport { SubscriptionManager };\n","/*\n  Convert velocity into velocity per second\n\n  @param [number]: Unit per frame\n  @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n    return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n","import { time } from '../frameloop/sync-time.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n    return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n    current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n    /**\n     * @param init - The initiating value\n     * @param config - Optional configuration options\n     *\n     * -  `transformer`: A function to transform incoming values with.\n     *\n     * @internal\n     */\n    constructor(init, options = {}) {\n        /**\n         * This will be replaced by the build step with the latest version number.\n         * When MotionValues are provided to motion components, warn if versions are mixed.\n         */\n        this.version = \"11.18.2\";\n        /**\n         * Tracks whether this value can output a velocity. Currently this is only true\n         * if the value is numerical, but we might be able to widen the scope here and support\n         * other value types.\n         *\n         * @internal\n         */\n        this.canTrackVelocity = null;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        this.updateAndNotify = (v, render = true) => {\n            const currentTime = time.now();\n            /**\n             * If we're updating the value during another frame or eventloop\n             * than the previous frame, then the we set the previous frame value\n             * to current.\n             */\n            if (this.updatedAt !== currentTime) {\n                this.setPrevFrameValue();\n            }\n            this.prev = this.current;\n            this.setCurrent(v);\n            // Update update subscribers\n            if (this.current !== this.prev && this.events.change) {\n                this.events.change.notify(this.current);\n            }\n            // Update render subscribers\n            if (render && this.events.renderRequest) {\n                this.events.renderRequest.notify(this.current);\n            }\n        };\n        this.hasAnimated = false;\n        this.setCurrent(init);\n        this.owner = options.owner;\n    }\n    setCurrent(current) {\n        this.current = current;\n        this.updatedAt = time.now();\n        if (this.canTrackVelocity === null && current !== undefined) {\n            this.canTrackVelocity = isFloat(this.current);\n        }\n    }\n    setPrevFrameValue(prevFrameValue = this.current) {\n        this.prevFrameValue = prevFrameValue;\n        this.prevUpdatedAt = this.updatedAt;\n    }\n    /**\n     * Adds a function that will be notified when the `MotionValue` is updated.\n     *\n     * It returns a function that, when called, will cancel the subscription.\n     *\n     * When calling `onChange` inside a React component, it should be wrapped with the\n     * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n     * from the `useEffect` function to ensure you don't add duplicate subscribers..\n     *\n     * ```jsx\n     * export const MyComponent = () => {\n     *   const x = useMotionValue(0)\n     *   const y = useMotionValue(0)\n     *   const opacity = useMotionValue(1)\n     *\n     *   useEffect(() => {\n     *     function updateOpacity() {\n     *       const maxXY = Math.max(x.get(), y.get())\n     *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\n     *       opacity.set(newOpacity)\n     *     }\n     *\n     *     const unsubscribeX = x.on(\"change\", updateOpacity)\n     *     const unsubscribeY = y.on(\"change\", updateOpacity)\n     *\n     *     return () => {\n     *       unsubscribeX()\n     *       unsubscribeY()\n     *     }\n     *   }, [])\n     *\n     *   return <motion.div style={{ x }} />\n     * }\n     * ```\n     *\n     * @param subscriber - A function that receives the latest value.\n     * @returns A function that, when called, will cancel this subscription.\n     *\n     * @deprecated\n     */\n    onChange(subscription) {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n        }\n        return this.on(\"change\", subscription);\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        const unsubscribe = this.events[eventName].add(callback);\n        if (eventName === \"change\") {\n            return () => {\n                unsubscribe();\n                /**\n                 * If we have no more change listeners by the start\n                 * of the next frame, stop active animations.\n                 */\n                frame.read(() => {\n                    if (!this.events.change.getSize()) {\n                        this.stop();\n                    }\n                });\n            };\n        }\n        return unsubscribe;\n    }\n    clearListeners() {\n        for (const eventManagers in this.events) {\n            this.events[eventManagers].clear();\n        }\n    }\n    /**\n     * Attaches a passive effect to the `MotionValue`.\n     *\n     * @internal\n     */\n    attach(passiveEffect, stopPassiveEffect) {\n        this.passiveEffect = passiveEffect;\n        this.stopPassiveEffect = stopPassiveEffect;\n    }\n    /**\n     * Sets the state of the `MotionValue`.\n     *\n     * @remarks\n     *\n     * ```jsx\n     * const x = useMotionValue(0)\n     * x.set(10)\n     * ```\n     *\n     * @param latest - Latest value to set.\n     * @param render - Whether to notify render subscribers. Defaults to `true`\n     *\n     * @public\n     */\n    set(v, render = true) {\n        if (!render || !this.passiveEffect) {\n            this.updateAndNotify(v, render);\n        }\n        else {\n            this.passiveEffect(v, this.updateAndNotify);\n        }\n    }\n    setWithVelocity(prev, current, delta) {\n        this.set(current);\n        this.prev = undefined;\n        this.prevFrameValue = prev;\n        this.prevUpdatedAt = this.updatedAt - delta;\n    }\n    /**\n     * Set the state of the `MotionValue`, stopping any active animations,\n     * effects, and resets velocity to `0`.\n     */\n    jump(v, endAnimation = true) {\n        this.updateAndNotify(v);\n        this.prev = v;\n        this.prevUpdatedAt = this.prevFrameValue = undefined;\n        endAnimation && this.stop();\n        if (this.stopPassiveEffect)\n            this.stopPassiveEffect();\n    }\n    /**\n     * Returns the latest state of `MotionValue`\n     *\n     * @returns - The latest state of `MotionValue`\n     *\n     * @public\n     */\n    get() {\n        if (collectMotionValues.current) {\n            collectMotionValues.current.push(this);\n        }\n        return this.current;\n    }\n    /**\n     * @public\n     */\n    getPrevious() {\n        return this.prev;\n    }\n    /**\n     * Returns the latest velocity of `MotionValue`\n     *\n     * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n     *\n     * @public\n     */\n    getVelocity() {\n        const currentTime = time.now();\n        if (!this.canTrackVelocity ||\n            this.prevFrameValue === undefined ||\n            currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n            return 0;\n        }\n        const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n        // Casts because of parseFloat's poor typing\n        return velocityPerSecond(parseFloat(this.current) -\n            parseFloat(this.prevFrameValue), delta);\n    }\n    /**\n     * Registers a new animation to control this `MotionValue`. Only one\n     * animation can drive a `MotionValue` at one time.\n     *\n     * ```jsx\n     * value.start()\n     * ```\n     *\n     * @param animation - A function that starts the provided animation\n     *\n     * @internal\n     */\n    start(startAnimation) {\n        this.stop();\n        return new Promise((resolve) => {\n            this.hasAnimated = true;\n            this.animation = startAnimation(resolve);\n            if (this.events.animationStart) {\n                this.events.animationStart.notify();\n            }\n        }).then(() => {\n            if (this.events.animationComplete) {\n                this.events.animationComplete.notify();\n            }\n            this.clearAnimation();\n        });\n    }\n    /**\n     * Stop the currently active animation.\n     *\n     * @public\n     */\n    stop() {\n        if (this.animation) {\n            this.animation.stop();\n            if (this.events.animationCancel) {\n                this.events.animationCancel.notify();\n            }\n        }\n        this.clearAnimation();\n    }\n    /**\n     * Returns `true` if this value is currently animating.\n     *\n     * @public\n     */\n    isAnimating() {\n        return !!this.animation;\n    }\n    clearAnimation() {\n        delete this.animation;\n    }\n    /**\n     * Destroy and clean up subscribers to this `MotionValue`.\n     *\n     * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n     * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n     * created a `MotionValue` via the `motionValue` function.\n     *\n     * @public\n     */\n    destroy() {\n        this.clearListeners();\n        this.stop();\n        if (this.stopPassiveEffect) {\n            this.stopPassiveEffect();\n        }\n    }\n}\nfunction motionValue(init, options) {\n    return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n","import { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n    if (visualElement.hasValue(key)) {\n        visualElement.getValue(key).set(value);\n    }\n    else {\n        visualElement.addValue(key, motionValue(value));\n    }\n}\nfunction setTarget(visualElement, definition) {\n    const resolved = resolveVariant(visualElement, definition);\n    let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n    target = { ...target, ...transitionEnd };\n    for (const key in target) {\n        const value = resolveFinalValueInKeyframes(target[key]);\n        setMotionValue(visualElement, key, value);\n    }\n}\n\nexport { setTarget };\n","import { isMotionValue } from '../utils/is-motion-value.mjs';\n\nfunction isWillChangeMotionValue(value) {\n    return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n","import { isWillChangeMotionValue } from './is.mjs';\n\nfunction addValueToWillChange(visualElement, key) {\n    const willChange = visualElement.getValue(\"willChange\");\n    /**\n     * It could be that a user has set willChange to a regular MotionValue,\n     * in which case we can't add the value to it.\n     */\n    if (isWillChangeMotionValue(willChange)) {\n        return willChange.add(key);\n    }\n}\n\nexport { addValueToWillChange };\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n    return visualElement.props[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n","const instantAnimationState = {\n    current: false,\n};\n\nexport { instantAnimationState };\n","import { noop } from 'motion-utils';\n\n/*\n  Bezier function generator\n  This has been modified from Gaëtan Renaudeau's BezierEasing\n  https://github.com/gre/bezier-easing/blob/master/src/index.js\n  https://github.com/gre/bezier-easing/blob/master/LICENSE\n  \n  I've removed the newtonRaphsonIterate algo because in benchmarking it\n  wasn't noticiably faster than binarySubdivision, indeed removing it\n  usually improved times, depending on the curve.\n  I also removed the lookup table, as for the added bundle size and loop we're\n  only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n  to 12 to compensate and this still tended to be faster for no perceivable\n  loss in accuracy.\n  Usage\n    const easeOut = cubicBezier(.17,.67,.83,.67);\n    const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n    t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n    let currentX;\n    let currentT;\n    let i = 0;\n    do {\n        currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - x;\n        if (currentX > 0.0) {\n            upperBound = currentT;\n        }\n        else {\n            lowerBound = currentT;\n        }\n    } while (Math.abs(currentX) > subdivisionPrecision &&\n        ++i < subdivisionMaxIterations);\n    return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n    // If this is a linear gradient, return linear easing\n    if (mX1 === mY1 && mX2 === mY2)\n        return noop;\n    const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n    // If animation is at start/end, return t without easing\n    return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n","import { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\n\nfunction isNone(value) {\n    if (typeof value === \"number\") {\n        return value === 0;\n    }\n    else if (value !== null) {\n        return value === \"none\" || value === \"0\" || isZeroValueString(value);\n    }\n    else {\n        return true;\n    }\n}\n\nexport { isNone };\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n","function isNullish(v) {\n    return v == null;\n}\n\nexport { isNullish };\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n    return Boolean((typeof v === \"string\" &&\n        singleColorRegex.test(v) &&\n        v.startsWith(type)) ||\n        (testProp &&\n            !isNullish(v) &&\n            Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n    if (typeof v !== \"string\")\n        return v;\n    const [a, b, c, alpha] = v.match(floatRegex);\n    return {\n        [aName]: parseFloat(a),\n        [bName]: parseFloat(b),\n        [cName]: parseFloat(c),\n        alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n    };\n};\n\nexport { isColorString, splitColor };\n","import { clamp } from '../../../utils/clamp.mjs';\nimport { alpha, number } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n    ...number,\n    transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n    test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n    parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n    transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n        rgbUnit.transform(red) +\n        \", \" +\n        rgbUnit.transform(green) +\n        \", \" +\n        rgbUnit.transform(blue) +\n        \", \" +\n        sanitize(alpha.transform(alpha$1)) +\n        \")\",\n};\n\nexport { rgbUnit, rgba };\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n    let r = \"\";\n    let g = \"\";\n    let b = \"\";\n    let a = \"\";\n    // If we have 6 characters, ie #FF0000\n    if (v.length > 5) {\n        r = v.substring(1, 3);\n        g = v.substring(3, 5);\n        b = v.substring(5, 7);\n        a = v.substring(7, 9);\n        // Or we have 3 characters, ie #F00\n    }\n    else {\n        r = v.substring(1, 2);\n        g = v.substring(2, 3);\n        b = v.substring(3, 4);\n        a = v.substring(4, 5);\n        r += r;\n        g += g;\n        b += b;\n        a += a;\n    }\n    return {\n        red: parseInt(r, 16),\n        green: parseInt(g, 16),\n        blue: parseInt(b, 16),\n        alpha: a ? parseInt(a, 16) / 255 : 1,\n    };\n}\nconst hex = {\n    test: /*@__PURE__*/ isColorString(\"#\"),\n    parse: parseHex,\n    transform: rgba.transform,\n};\n\nexport { hex };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n    test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n    parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n    transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n        return (\"hsla(\" +\n            Math.round(hue) +\n            \", \" +\n            percent.transform(sanitize(saturation)) +\n            \", \" +\n            percent.transform(sanitize(lightness)) +\n            \", \" +\n            sanitize(alpha.transform(alpha$1)) +\n            \")\");\n    },\n};\n\nexport { hsla };\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n    test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n    parse: (v) => {\n        if (rgba.test(v)) {\n            return rgba.parse(v);\n        }\n        else if (hsla.test(v)) {\n            return hsla.parse(v);\n        }\n        else {\n            return hex.parse(v);\n        }\n    },\n    transform: (v) => {\n        return typeof v === \"string\"\n            ? v\n            : v.hasOwnProperty(\"red\")\n                ? rgba.transform(v)\n                : hsla.transform(v);\n    },\n};\n\nexport { color };\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\nfunction test(v) {\n    var _a, _b;\n    return (isNaN(v) &&\n        typeof v === \"string\" &&\n        (((_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) || 0) +\n            (((_b = v.match(colorRegex)) === null || _b === void 0 ? void 0 : _b.length) || 0) >\n            0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n    const originalValue = value.toString();\n    const values = [];\n    const indexes = {\n        color: [],\n        number: [],\n        var: [],\n    };\n    const types = [];\n    let i = 0;\n    const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n        if (color.test(parsedValue)) {\n            indexes.color.push(i);\n            types.push(COLOR_TOKEN);\n            values.push(color.parse(parsedValue));\n        }\n        else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n            indexes.var.push(i);\n            types.push(VAR_TOKEN);\n            values.push(parsedValue);\n        }\n        else {\n            indexes.number.push(i);\n            types.push(NUMBER_TOKEN);\n            values.push(parseFloat(parsedValue));\n        }\n        ++i;\n        return SPLIT_TOKEN;\n    });\n    const split = tokenised.split(SPLIT_TOKEN);\n    return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n    return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n    const { split, types } = analyseComplexValue(source);\n    const numSections = split.length;\n    return (v) => {\n        let output = \"\";\n        for (let i = 0; i < numSections; i++) {\n            output += split[i];\n            if (v[i] !== undefined) {\n                const type = types[i];\n                if (type === NUMBER_TOKEN) {\n                    output += sanitize(v[i]);\n                }\n                else if (type === COLOR_TOKEN) {\n                    output += color.transform(v[i]);\n                }\n                else {\n                    output += v[i];\n                }\n            }\n        }\n        return output;\n    };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n    const parsed = parseComplexValue(v);\n    const transformer = createTransformer(v);\n    return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n    test,\n    parse: parseComplexValue,\n    createTransformer,\n    getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n    const [name, value] = v.slice(0, -1).split(\"(\");\n    if (name === \"drop-shadow\")\n        return v;\n    const [number] = value.match(floatRegex) || [];\n    if (!number)\n        return v;\n    const unit = value.replace(number, \"\");\n    let defaultValue = maxDefaults.has(name) ? 1 : 0;\n    if (number !== value)\n        defaultValue *= 100;\n    return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const functions = v.match(functionRegex);\n        return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n    },\n};\n\nexport { filter };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n    ...numberValueTypes,\n    // Color props\n    color,\n    backgroundColor: color,\n    outlineColor: color,\n    fill: color,\n    stroke: color,\n    // Border props\n    borderColor: color,\n    borderTopColor: color,\n    borderRightColor: color,\n    borderBottomColor: color,\n    borderLeftColor: color,\n    filter,\n    WebkitFilter: filter,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n","import { complex } from '../../../value/types/complex/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { getDefaultValueType } from './defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n    let defaultValueType = getDefaultValueType(key);\n    if (defaultValueType !== filter)\n        defaultValueType = complex;\n    // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n    return defaultValueType.getAnimatableNone\n        ? defaultValueType.getAnimatableNone(value)\n        : undefined;\n}\n\nexport { getAnimatableNone };\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../dom/value-types/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n    let i = 0;\n    let animatableTemplate = undefined;\n    while (i < unresolvedKeyframes.length && !animatableTemplate) {\n        const keyframe = unresolvedKeyframes[i];\n        if (typeof keyframe === \"string\" &&\n            !invalidTemplates.has(keyframe) &&\n            analyseComplexValue(keyframe).values.length) {\n            animatableTemplate = unresolvedKeyframes[i];\n        }\n        i++;\n    }\n    if (animatableTemplate && name) {\n        for (const noneIndex of noneKeyframeIndexes) {\n            unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n        }\n    }\n}\n\nexport { makeNoneKeyframesAnimatable };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\nimport { transformPropOrder } from '../../html/utils/keys-transform.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n    if (transform === \"none\" || !transform)\n        return 0;\n    const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/u);\n    if (matrix3d) {\n        return getPosFromMatrix(matrix3d[1], pos3);\n    }\n    else {\n        const matrix = transform.match(/^matrix\\((.+)\\)$/u);\n        if (matrix) {\n            return getPosFromMatrix(matrix[1], pos2);\n        }\n        else {\n            return 0;\n        }\n    }\n};\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n    const removedTransforms = [];\n    nonTranslationalTransformKeys.forEach((key) => {\n        const value = visualElement.getValue(key);\n        if (value !== undefined) {\n            removedTransforms.push([key, value.get()]);\n            value.set(key.startsWith(\"scale\") ? 1 : 0);\n        }\n    });\n    return removedTransforms;\n}\nconst positionalValues = {\n    // Dimensions\n    width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n    height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\n    top: (_bbox, { top }) => parseFloat(top),\n    left: (_bbox, { left }) => parseFloat(left),\n    bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n    right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n    // Transform\n    x: getTranslateFromMatrix(4, 13),\n    y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n","import { removeNonTranslationalTransform } from '../dom/utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nfunction measureAllKeyframes() {\n    if (anyNeedsMeasurement) {\n        const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n        const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n        const transformsToRestore = new Map();\n        /**\n         * Write pass\n         * If we're measuring elements we want to remove bounding box-changing transforms.\n         */\n        elementsToMeasure.forEach((element) => {\n            const removedTransforms = removeNonTranslationalTransform(element);\n            if (!removedTransforms.length)\n                return;\n            transformsToRestore.set(element, removedTransforms);\n            element.render();\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n        // Write\n        elementsToMeasure.forEach((element) => {\n            element.render();\n            const restore = transformsToRestore.get(element);\n            if (restore) {\n                restore.forEach(([key, value]) => {\n                    var _a;\n                    (_a = element.getValue(key)) === null || _a === void 0 ? void 0 : _a.set(value);\n                });\n            }\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n        // Write\n        resolversToMeasure.forEach((resolver) => {\n            if (resolver.suspendedScrollY !== undefined) {\n                window.scrollTo(0, resolver.suspendedScrollY);\n            }\n        });\n    }\n    anyNeedsMeasurement = false;\n    isScheduled = false;\n    toResolve.forEach((resolver) => resolver.complete());\n    toResolve.clear();\n}\nfunction readAllKeyframes() {\n    toResolve.forEach((resolver) => {\n        resolver.readKeyframes();\n        if (resolver.needsMeasurement) {\n            anyNeedsMeasurement = true;\n        }\n    });\n}\nfunction flushKeyframeResolvers() {\n    readAllKeyframes();\n    measureAllKeyframes();\n}\nclass KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n        /**\n         * Track whether this resolver has completed. Once complete, it never\n         * needs to attempt keyframe resolution again.\n         */\n        this.isComplete = false;\n        /**\n         * Track whether this resolver is async. If it is, it'll be added to the\n         * resolver queue and flushed in the next frame. Resolvers that aren't going\n         * to trigger read/write thrashing don't need to be async.\n         */\n        this.isAsync = false;\n        /**\n         * Track whether this resolver needs to perform a measurement\n         * to resolve its keyframes.\n         */\n        this.needsMeasurement = false;\n        /**\n         * Track whether this resolver is currently scheduled to resolve\n         * to allow it to be cancelled and resumed externally.\n         */\n        this.isScheduled = false;\n        this.unresolvedKeyframes = [...unresolvedKeyframes];\n        this.onComplete = onComplete;\n        this.name = name;\n        this.motionValue = motionValue;\n        this.element = element;\n        this.isAsync = isAsync;\n    }\n    scheduleResolve() {\n        this.isScheduled = true;\n        if (this.isAsync) {\n            toResolve.add(this);\n            if (!isScheduled) {\n                isScheduled = true;\n                frame.read(readAllKeyframes);\n                frame.resolveKeyframes(measureAllKeyframes);\n            }\n        }\n        else {\n            this.readKeyframes();\n            this.complete();\n        }\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, name, element, motionValue } = this;\n        /**\n         * If a keyframe is null, we hydrate it either by reading it from\n         * the instance, or propagating from previous keyframes.\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (unresolvedKeyframes[i] === null) {\n                /**\n                 * If the first keyframe is null, we need to find its value by sampling the element\n                 */\n                if (i === 0) {\n                    const currentValue = motionValue === null || motionValue === void 0 ? void 0 : motionValue.get();\n                    const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n                    if (currentValue !== undefined) {\n                        unresolvedKeyframes[0] = currentValue;\n                    }\n                    else if (element && name) {\n                        const valueAsRead = element.readValue(name, finalKeyframe);\n                        if (valueAsRead !== undefined && valueAsRead !== null) {\n                            unresolvedKeyframes[0] = valueAsRead;\n                        }\n                    }\n                    if (unresolvedKeyframes[0] === undefined) {\n                        unresolvedKeyframes[0] = finalKeyframe;\n                    }\n                    if (motionValue && currentValue === undefined) {\n                        motionValue.set(unresolvedKeyframes[0]);\n                    }\n                }\n                else {\n                    unresolvedKeyframes[i] = unresolvedKeyframes[i - 1];\n                }\n            }\n        }\n    }\n    setFinalKeyframe() { }\n    measureInitialState() { }\n    renderEndStyles() { }\n    measureEndState() { }\n    complete() {\n        this.isComplete = true;\n        this.onComplete(this.unresolvedKeyframes, this.finalKeyframe);\n        toResolve.delete(this);\n    }\n    cancel() {\n        if (!this.isComplete) {\n            this.isScheduled = false;\n            toResolve.delete(this);\n        }\n    }\n    resume() {\n        if (!this.isComplete)\n            this.scheduleResolve();\n    }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n","import { invariant } from 'motion-utils';\nimport { isNumericalString } from '../../../utils/is-numerical-string.mjs';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n    const match = splitCSSVariableRegex.exec(current);\n    if (!match)\n        return [,];\n    const [, token1, token2, fallback] = match;\n    return [`--${token1 !== null && token1 !== void 0 ? token1 : token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n    invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`);\n    const [token, fallback] = parseCSSVariable(current);\n    // No CSS variable detected\n    if (!token)\n        return;\n    // Attempt to read this CSS variable off the element\n    const resolved = window.getComputedStyle(element).getPropertyValue(token);\n    if (resolved) {\n        const trimmed = resolved.trim();\n        return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n    }\n    return isCSSVariableToken(fallback)\n        ? getVariableValue(fallback, element, depth + 1)\n        : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n    test: (v) => v === \"auto\",\n    parse: (v) => v,\n};\n\nexport { auto };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';\nimport { testValueType } from './test.mjs';\nimport { auto } from './type-auto.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n","import { isNone } from '../../animation/utils/is-none.mjs';\nimport { positionalKeys } from '../html/utils/keys-position.mjs';\nimport { makeNoneKeyframesAnimatable } from '../html/utils/make-none-animatable.mjs';\nimport { KeyframeResolver } from '../utils/KeyframesResolver.mjs';\nimport { getVariableValue } from './utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken } from './utils/is-css-variable.mjs';\nimport { isNumOrPxType, positionalValues } from './utils/unit-conversion.mjs';\nimport { findDimensionValueType } from './value-types/dimensions.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n        super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, element, name } = this;\n        if (!element || !element.current)\n            return;\n        super.readKeyframes();\n        /**\n         * If any keyframe is a CSS variable, we need to find its value by sampling the element\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            let keyframe = unresolvedKeyframes[i];\n            if (typeof keyframe === \"string\") {\n                keyframe = keyframe.trim();\n                if (isCSSVariableToken(keyframe)) {\n                    const resolved = getVariableValue(keyframe, element.current);\n                    if (resolved !== undefined) {\n                        unresolvedKeyframes[i] = resolved;\n                    }\n                    if (i === unresolvedKeyframes.length - 1) {\n                        this.finalKeyframe = keyframe;\n                    }\n                }\n            }\n        }\n        /**\n         * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n         * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n         * have a far bigger performance impact.\n         */\n        this.resolveNoneKeyframes();\n        /**\n         * Check to see if unit type has changed. If so schedule jobs that will\n         * temporarily set styles to the destination keyframes.\n         * Skip if we have more than two keyframes or this isn't a positional value.\n         * TODO: We can throw if there are multiple keyframes and the value type changes.\n         */\n        if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n            return;\n        }\n        const [origin, target] = unresolvedKeyframes;\n        const originType = findDimensionValueType(origin);\n        const targetType = findDimensionValueType(target);\n        /**\n         * Either we don't recognise these value types or we can animate between them.\n         */\n        if (originType === targetType)\n            return;\n        /**\n         * If both values are numbers or pixels, we can animate between them by\n         * converting them to numbers.\n         */\n        if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n            for (let i = 0; i < unresolvedKeyframes.length; i++) {\n                const value = unresolvedKeyframes[i];\n                if (typeof value === \"string\") {\n                    unresolvedKeyframes[i] = parseFloat(value);\n                }\n            }\n        }\n        else {\n            /**\n             * Else, the only way to resolve this is by measuring the element.\n             */\n            this.needsMeasurement = true;\n        }\n    }\n    resolveNoneKeyframes() {\n        const { unresolvedKeyframes, name } = this;\n        const noneKeyframeIndexes = [];\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (isNone(unresolvedKeyframes[i])) {\n                noneKeyframeIndexes.push(i);\n            }\n        }\n        if (noneKeyframeIndexes.length) {\n            makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n        }\n    }\n    measureInitialState() {\n        const { element, unresolvedKeyframes, name } = this;\n        if (!element || !element.current)\n            return;\n        if (name === \"height\") {\n            this.suspendedScrollY = window.pageYOffset;\n        }\n        this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        unresolvedKeyframes[0] = this.measuredOrigin;\n        // Set final key frame to measure after next render\n        const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n        if (measureKeyframe !== undefined) {\n            element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n        }\n    }\n    measureEndState() {\n        var _a;\n        const { element, name, unresolvedKeyframes } = this;\n        if (!element || !element.current)\n            return;\n        const value = element.getValue(name);\n        value && value.jump(this.measuredOrigin, false);\n        const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n        const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n        unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n            this.finalKeyframe = finalKeyframe;\n        }\n        // If we removed transform values, reapply them before the next render\n        if ((_a = this.removedTransforms) === null || _a === void 0 ? void 0 : _a.length) {\n            this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n                element\n                    .getValue(unsetTransformName)\n                    .set(unsetTransformValue);\n            });\n        }\n        this.resolveNoneKeyframes();\n    }\n}\n\nexport { DOMKeyframesResolver };\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n    // If the list of keys tat might be non-animatable grows, replace with Set\n    if (name === \"zIndex\")\n        return false;\n    // If it's a number or a keyframes array, we can animate it. We might at some point\n    // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n    // but for now lets leave it like this for performance reasons\n    if (typeof value === \"number\" || Array.isArray(value))\n        return true;\n    if (typeof value === \"string\" && // It's animatable if we have a string\n        (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n        !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n    ) {\n        return true;\n    }\n    return false;\n};\n\nexport { isAnimatable };\n","import { isGenerator } from 'motion-dom';\nimport { warning } from 'motion-utils';\nimport { isAnimatable } from '../../utils/is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n    const current = keyframes[0];\n    if (keyframes.length === 1)\n        return true;\n    for (let i = 0; i < keyframes.length; i++) {\n        if (keyframes[i] !== current)\n            return true;\n    }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n    /**\n     * Check if we're able to animate between the start and end keyframes,\n     * and throw a warning if we're attempting to animate between one that's\n     * animatable and another that isn't.\n     */\n    const originKeyframe = keyframes[0];\n    if (originKeyframe === null)\n        return false;\n    /**\n     * These aren't traditionally animatable but we do support them.\n     * In future we could look into making this more generic or replacing\n     * this function with mix() === mixImmediate\n     */\n    if (name === \"display\" || name === \"visibility\")\n        return true;\n    const targetKeyframe = keyframes[keyframes.length - 1];\n    const isOriginAnimatable = isAnimatable(originKeyframe, name);\n    const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n    warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n    // Always skip if any of these are true\n    if (!isOriginAnimatable || !isTargetAnimatable) {\n        return false;\n    }\n    return (hasKeyframesChanged(keyframes) ||\n        ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe) {\n    const resolvedKeyframes = keyframes.filter(isNotNull);\n    const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n        ? 0\n        : resolvedKeyframes.length - 1;\n    return !index || finalKeyframe === undefined\n        ? resolvedKeyframes[index]\n        : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { flushKeyframeResolvers } from '../../render/utils/KeyframesResolver.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass BaseAnimation {\n    constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", ...options }) {\n        // Track whether the animation has been stopped. Stopped animations won't restart.\n        this.isStopped = false;\n        this.hasAttemptedResolve = false;\n        this.createdAt = time.now();\n        this.options = {\n            autoplay,\n            delay,\n            type,\n            repeat,\n            repeatDelay,\n            repeatType,\n            ...options,\n        };\n        this.updateFinishedPromise();\n    }\n    /**\n     * This method uses the createdAt and resolvedAt to calculate the\n     * animation startTime. *Ideally*, we would use the createdAt time as t=0\n     * as the following frame would then be the first frame of the animation in\n     * progress, which would feel snappier.\n     *\n     * However, if there's a delay (main thread work) between the creation of\n     * the animation and the first commited frame, we prefer to use resolvedAt\n     * to avoid a sudden jump into the animation.\n     */\n    calcStartTime() {\n        if (!this.resolvedAt)\n            return this.createdAt;\n        return this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n            ? this.resolvedAt\n            : this.createdAt;\n    }\n    /**\n     * A getter for resolved data. If keyframes are not yet resolved, accessing\n     * this.resolved will synchronously flush all pending keyframe resolvers.\n     * This is a deoptimisation, but at its worst still batches read/writes.\n     */\n    get resolved() {\n        if (!this._resolved && !this.hasAttemptedResolve) {\n            flushKeyframeResolvers();\n        }\n        return this._resolved;\n    }\n    /**\n     * A method to be called when the keyframes resolver completes. This method\n     * will check if its possible to run the animation and, if not, skip it.\n     * Otherwise, it will call initPlayback on the implementing class.\n     */\n    onKeyframesResolved(keyframes, finalKeyframe) {\n        this.resolvedAt = time.now();\n        this.hasAttemptedResolve = true;\n        const { name, type, velocity, delay, onComplete, onUpdate, isGenerator, } = this.options;\n        /**\n         * If we can't animate this value with the resolved keyframes\n         * then we should complete it immediately.\n         */\n        if (!isGenerator && !canAnimate(keyframes, name, type, velocity)) {\n            // Finish immediately\n            if (instantAnimationState.current || !delay) {\n                onUpdate &&\n                    onUpdate(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n                onComplete && onComplete();\n                this.resolveFinishedPromise();\n                return;\n            }\n            // Finish after a delay\n            else {\n                this.options.duration = 0;\n            }\n        }\n        const resolvedAnimation = this.initPlayback(keyframes, finalKeyframe);\n        if (resolvedAnimation === false)\n            return;\n        this._resolved = {\n            keyframes,\n            finalKeyframe,\n            ...resolvedAnimation,\n        };\n        this.onPostResolved();\n    }\n    onPostResolved() { }\n    /**\n     * Allows the returned animation to be awaited or promise-chained. Currently\n     * resolves when the animation finishes at all but in a future update could/should\n     * reject if its cancels.\n     */\n    then(resolve, reject) {\n        return this.currentFinishedPromise.then(resolve, reject);\n    }\n    flatten() {\n        this.options.type = \"keyframes\";\n        this.options.ease = \"linear\";\n    }\n    updateFinishedPromise() {\n        this.currentFinishedPromise = new Promise((resolve) => {\n            this.resolveFinishedPromise = resolve;\n        });\n    }\n}\n\nexport { BaseAnimation };\n","/*\n  Value in range from progress\n\n  Given a lower limit and an upper limit, we return the value within\n  that range as expressed by progress (usually a number from 0 to 1)\n\n  So progress = 0.5 would change\n\n  from -------- to\n\n  to\n\n  from ---- to\n\n  E.g. from = 10, to = 20, progress = 0.5 => 15\n\n  @param [number]: Lower limit of range\n  @param [number]: Upper limit of range\n  @param [number]: The progress between lower and upper limits expressed 0-1\n  @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n    return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n    if (t < 0)\n        t += 1;\n    if (t > 1)\n        t -= 1;\n    if (t < 1 / 6)\n        return p + (q - p) * 6 * t;\n    if (t < 1 / 2)\n        return q;\n    if (t < 2 / 3)\n        return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n    hue /= 360;\n    saturation /= 100;\n    lightness /= 100;\n    let red = 0;\n    let green = 0;\n    let blue = 0;\n    if (!saturation) {\n        red = green = blue = lightness;\n    }\n    else {\n        const q = lightness < 0.5\n            ? lightness * (1 + saturation)\n            : lightness + saturation - lightness * saturation;\n        const p = 2 * lightness - q;\n        red = hueToRgb(p, q, hue + 1 / 3);\n        green = hueToRgb(p, q, hue);\n        blue = hueToRgb(p, q, hue - 1 / 3);\n    }\n    return {\n        red: Math.round(red * 255),\n        green: Math.round(green * 255),\n        blue: Math.round(blue * 255),\n        alpha,\n    };\n}\n\nexport { hslaToRgba };\n","function mixImmediate(a, b) {\n    return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n","import { mixNumber } from './number.mjs';\nimport { warning } from 'motion-utils';\nimport { hslaToRgba } from '../hsla-to-rgba.mjs';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n    const fromExpo = from * from;\n    const expo = v * (to * to - fromExpo) + fromExpo;\n    return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n    const type = getColorType(color);\n    warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n    if (!Boolean(type))\n        return false;\n    let model = type.parse(color);\n    if (type === hsla) {\n        // TODO Remove this cast - needed since Motion's stricter typing\n        model = hslaToRgba(model);\n    }\n    return model;\n}\nconst mixColor = (from, to) => {\n    const fromRGBA = asRGBA(from);\n    const toRGBA = asRGBA(to);\n    if (!fromRGBA || !toRGBA) {\n        return mixImmediate(from, to);\n    }\n    const blended = { ...fromRGBA };\n    return (v) => {\n        blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n        blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n        blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n        blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n        return rgba.transform(blended);\n    };\n};\n\nexport { mixColor, mixLinearColor };\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param  {...functions} transformers\n * @return {function}\n */\nconst combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n    if (invisibleValues.has(origin)) {\n        return (p) => (p <= 0 ? origin : target);\n    }\n    else {\n        return (p) => (p >= 1 ? target : origin);\n    }\n}\n\nexport { invisibleValues, mixVisibility };\n","import { mixNumber as mixNumber$1 } from './number.mjs';\nimport { mixColor } from './color.mjs';\nimport { pipe } from '../pipe.mjs';\nimport { warning } from 'motion-utils';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { isCSSVariableToken } from '../../render/dom/utils/is-css-variable.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\nfunction mixNumber(a, b) {\n    return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n    if (typeof a === \"number\") {\n        return mixNumber;\n    }\n    else if (typeof a === \"string\") {\n        return isCSSVariableToken(a)\n            ? mixImmediate\n            : color.test(a)\n                ? mixColor\n                : mixComplex;\n    }\n    else if (Array.isArray(a)) {\n        return mixArray;\n    }\n    else if (typeof a === \"object\") {\n        return color.test(a) ? mixColor : mixObject;\n    }\n    return mixImmediate;\n}\nfunction mixArray(a, b) {\n    const output = [...a];\n    const numValues = output.length;\n    const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n    return (p) => {\n        for (let i = 0; i < numValues; i++) {\n            output[i] = blendValue[i](p);\n        }\n        return output;\n    };\n}\nfunction mixObject(a, b) {\n    const output = { ...a, ...b };\n    const blendValue = {};\n    for (const key in output) {\n        if (a[key] !== undefined && b[key] !== undefined) {\n            blendValue[key] = getMixer(a[key])(a[key], b[key]);\n        }\n    }\n    return (v) => {\n        for (const key in blendValue) {\n            output[key] = blendValue[key](v);\n        }\n        return output;\n    };\n}\nfunction matchOrder(origin, target) {\n    var _a;\n    const orderedOrigin = [];\n    const pointers = { color: 0, var: 0, number: 0 };\n    for (let i = 0; i < target.values.length; i++) {\n        const type = target.types[i];\n        const originIndex = origin.indexes[type][pointers[type]];\n        const originValue = (_a = origin.values[originIndex]) !== null && _a !== void 0 ? _a : 0;\n        orderedOrigin[i] = originValue;\n        pointers[type]++;\n    }\n    return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n    const template = complex.createTransformer(target);\n    const originStats = analyseComplexValue(origin);\n    const targetStats = analyseComplexValue(target);\n    const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n        originStats.indexes.color.length === targetStats.indexes.color.length &&\n        originStats.indexes.number.length >= targetStats.indexes.number.length;\n    if (canInterpolate) {\n        if ((invisibleValues.has(origin) &&\n            !targetStats.values.length) ||\n            (invisibleValues.has(target) &&\n                !originStats.values.length)) {\n            return mixVisibility(origin, target);\n        }\n        return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n    }\n    else {\n        warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);\n        return mixImmediate(origin, target);\n    }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n    if (typeof from === \"number\" &&\n        typeof to === \"number\" &&\n        typeof p === \"number\") {\n        return mixNumber(from, to, p);\n    }\n    const mixer = getMixer(from);\n    return mixer(from, to);\n}\n\nexport { mix };\n","import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n    const prevT = Math.max(t - velocitySampleDuration, 0);\n    return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","const springDefaults = {\n    // Default spring physics\n    stiffness: 100,\n    damping: 10,\n    mass: 1.0,\n    velocity: 0.0,\n    // Default duration/bounce-based options\n    duration: 800, // in ms\n    bounce: 0.3,\n    visualDuration: 0.3, // in seconds\n    // Rest thresholds\n    restSpeed: {\n        granular: 0.01,\n        default: 2,\n    },\n    restDelta: {\n        granular: 0.005,\n        default: 0.5,\n    },\n    // Limits\n    minDuration: 0.01, // in seconds\n    maxDuration: 10.0, // in seconds\n    minDamping: 0.05,\n    maxDamping: 1,\n};\n\nexport { springDefaults };\n","import { warning, secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { springDefaults } from './defaults.mjs';\n\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\");\n    let dampingRatio = 1 - bounce;\n    /**\n     * Restrict dampingRatio and duration to within acceptable ranges.\n     */\n    dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n    duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n    if (dampingRatio < 1) {\n        /**\n         * Underdamped spring\n         */\n        envelope = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const a = exponentialDecay - velocity;\n            const b = calcAngularFreq(undampedFreq, dampingRatio);\n            const c = Math.exp(-delta);\n            return safeMin - (a / b) * c;\n        };\n        derivative = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const d = delta * velocity + velocity;\n            const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n            const f = Math.exp(-delta);\n            const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n            const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n            return (factor * ((d - e) * f)) / g;\n        };\n    }\n    else {\n        /**\n         * Critically-damped spring\n         */\n        envelope = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (undampedFreq - velocity) * duration + 1;\n            return -safeMin + a * b;\n        };\n        derivative = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (velocity - undampedFreq) * (duration * duration);\n            return a * b;\n        };\n    }\n    const initialGuess = 5 / duration;\n    const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n    duration = secondsToMilliseconds(duration);\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: springDefaults.stiffness,\n            damping: springDefaults.damping,\n            duration,\n        };\n    }\n    else {\n        const stiffness = Math.pow(undampedFreq, 2) * mass;\n        return {\n            stiffness,\n            damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n            duration,\n        };\n    }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n    let result = initialGuess;\n    for (let i = 1; i < rootIterations; i++) {\n        result = result - envelope(result) / derivative(result);\n    }\n    return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n    return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring };\n","import { calcGeneratorDuration, maxGeneratorDuration, generateLinearEasing } from 'motion-dom';\nimport { millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { springDefaults } from './defaults.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n    return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n    let springOptions = {\n        velocity: springDefaults.velocity,\n        stiffness: springDefaults.stiffness,\n        damping: springDefaults.damping,\n        mass: springDefaults.mass,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        if (options.visualDuration) {\n            const visualDuration = options.visualDuration;\n            const root = (2 * Math.PI) / (visualDuration * 1.2);\n            const stiffness = root * root;\n            const damping = 2 *\n                clamp(0.05, 1, 1 - (options.bounce || 0)) *\n                Math.sqrt(stiffness);\n            springOptions = {\n                ...springOptions,\n                mass: springDefaults.mass,\n                stiffness,\n                damping,\n            };\n        }\n        else {\n            const derived = findSpring(options);\n            springOptions = {\n                ...springOptions,\n                ...derived,\n                mass: springDefaults.mass,\n            };\n            springOptions.isResolvedFromDuration = true;\n        }\n    }\n    return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n    const options = typeof optionsOrVisualDuration !== \"object\"\n        ? {\n            visualDuration: optionsOrVisualDuration,\n            keyframes: [0, 1],\n            bounce,\n        }\n        : optionsOrVisualDuration;\n    let { restSpeed, restDelta } = options;\n    const origin = options.keyframes[0];\n    const target = options.keyframes[options.keyframes.length - 1];\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = { done: false, value: origin };\n    const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n        ...options,\n        velocity: -millisecondsToSeconds(options.velocity || 0),\n    });\n    const initialVelocity = velocity || 0.0;\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    const initialDelta = target - origin;\n    const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n    /**\n     * If we're working on a granular scale, use smaller defaults for determining\n     * when the spring is finished.\n     *\n     * These defaults have been selected emprically based on what strikes a good\n     * ratio between feeling good and finishing as soon as changes are imperceptible.\n     */\n    const isGranularScale = Math.abs(initialDelta) < 5;\n    restSpeed || (restSpeed = isGranularScale\n        ? springDefaults.restSpeed.granular\n        : springDefaults.restSpeed.default);\n    restDelta || (restDelta = isGranularScale\n        ? springDefaults.restDelta.granular\n        : springDefaults.restDelta.default);\n    let resolveSpring;\n    if (dampingRatio < 1) {\n        const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n        // Underdamped spring\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            return (target -\n                envelope *\n                    (((initialVelocity +\n                        dampingRatio * undampedAngularFreq * initialDelta) /\n                        angularFreq) *\n                        Math.sin(angularFreq * t) +\n                        initialDelta * Math.cos(angularFreq * t)));\n        };\n    }\n    else if (dampingRatio === 1) {\n        // Critically damped spring\n        resolveSpring = (t) => target -\n            Math.exp(-undampedAngularFreq * t) *\n                (initialDelta +\n                    (initialVelocity + undampedAngularFreq * initialDelta) * t);\n    }\n    else {\n        // Overdamped spring\n        const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            // When performing sinh or cosh values can hit Infinity so we cap them here\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (target -\n                (envelope *\n                    ((initialVelocity +\n                        dampingRatio * undampedAngularFreq * initialDelta) *\n                        Math.sinh(freqForT) +\n                        dampedAngularFreq *\n                            initialDelta *\n                            Math.cosh(freqForT))) /\n                    dampedAngularFreq);\n        };\n    }\n    const generator = {\n        calculatedDuration: isResolvedFromDuration ? duration || null : null,\n        next: (t) => {\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                let currentVelocity = 0.0;\n                /**\n                 * We only need to calculate velocity for under-damped springs\n                 * as over- and critically-damped springs can't overshoot, so\n                 * checking only for displacement is enough.\n                 */\n                if (dampingRatio < 1) {\n                    currentVelocity =\n                        t === 0\n                            ? secondsToMilliseconds(initialVelocity)\n                            : calcGeneratorVelocity(resolveSpring, t, current);\n                }\n                const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n                const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n                state.done =\n                    isBelowVelocityThreshold && isBelowDisplacementThreshold;\n            }\n            else {\n                state.done = t >= duration;\n            }\n            state.value = state.done ? target : current;\n            return state;\n        },\n        toString: () => {\n            const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n            const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n            return calculatedDuration + \"ms \" + easing;\n        },\n    };\n    return generator;\n}\n\nexport { spring };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n    const origin = keyframes[0];\n    const state = {\n        done: false,\n        value: origin,\n    };\n    const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n    const nearestBoundary = (v) => {\n        if (min === undefined)\n            return max;\n        if (max === undefined)\n            return min;\n        return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n    };\n    let amplitude = power * velocity;\n    const ideal = origin + amplitude;\n    const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n    /**\n     * If the target has changed we need to re-calculate the amplitude, otherwise\n     * the animation will start from the wrong position.\n     */\n    if (target !== ideal)\n        amplitude = target - origin;\n    const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n    const calcLatest = (t) => target + calcDelta(t);\n    const applyFriction = (t) => {\n        const delta = calcDelta(t);\n        const latest = calcLatest(t);\n        state.done = Math.abs(delta) <= restDelta;\n        state.value = state.done ? target : latest;\n    };\n    /**\n     * Ideally this would resolve for t in a stateless way, we could\n     * do that by always precalculating the animation but as we know\n     * this will be done anyway we can assume that spring will\n     * be discovered during that.\n     */\n    let timeReachedBoundary;\n    let spring$1;\n    const checkCatchBoundary = (t) => {\n        if (!isOutOfBounds(state.value))\n            return;\n        timeReachedBoundary = t;\n        spring$1 = spring({\n            keyframes: [state.value, nearestBoundary(state.value)],\n            velocity: calcGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n            damping: bounceDamping,\n            stiffness: bounceStiffness,\n            restDelta,\n            restSpeed,\n        });\n    };\n    checkCatchBoundary(0);\n    return {\n        calculatedDuration: null,\n        next: (t) => {\n            /**\n             * We need to resolve the friction to figure out if we need a\n             * spring but we don't want to do this twice per frame. So here\n             * we flag if we updated for this frame and later if we did\n             * we can skip doing it again.\n             */\n            let hasUpdatedFrame = false;\n            if (!spring$1 && timeReachedBoundary === undefined) {\n                hasUpdatedFrame = true;\n                applyFriction(t);\n                checkCatchBoundary(t);\n            }\n            /**\n             * If we have a spring and the provided t is beyond the moment the friction\n             * animation crossed the min/max boundary, use the spring.\n             */\n            if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n                return spring$1.next(t - timeReachedBoundary);\n            }\n            else {\n                !hasUpdatedFrame && applyFriction(t);\n                return state;\n            }\n        },\n    };\n}\n\nexport { inertia };\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","const isEasingArray = (ease) => {\n    return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n","import { isBezierDefinition } from 'motion-dom';\nimport { invariant, noop } from 'motion-utils';\nimport { anticipate } from '../anticipate.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\n\nconst easingLookup = {\n    linear: noop,\n    easeIn,\n    easeInOut,\n    easeOut,\n    circIn,\n    circInOut,\n    circOut,\n    backIn,\n    backInOut,\n    backOut,\n    anticipate,\n};\nconst easingDefinitionToFunction = (definition) => {\n    if (isBezierDefinition(definition)) {\n        // If cubic bezier definition, create bezier curve\n        invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n        const [x1, y1, x2, y2] = definition;\n        return cubicBezier(x1, y1, x2, y2);\n    }\n    else if (typeof definition === \"string\") {\n        // Else lookup from table\n        invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n        return easingLookup[definition];\n    }\n    return definition;\n};\n\nexport { easingDefinitionToFunction };\n","import { invariant, noop, progress } from 'motion-utils';\nimport { clamp } from './clamp.mjs';\nimport { mix } from './mix/index.mjs';\nimport { pipe } from './pipe.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n    const mixers = [];\n    const mixerFactory = customMixer || mix;\n    const numMixers = output.length - 1;\n    for (let i = 0; i < numMixers; i++) {\n        let mixer = mixerFactory(output[i], output[i + 1]);\n        if (ease) {\n            const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n            mixer = pipe(easingFunction, mixer);\n        }\n        mixers.push(mixer);\n    }\n    return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n *   - Numbers\n *   - Colors (hex, hsl, hsla, rgb, rgba)\n *   - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revist this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n    const inputLength = input.length;\n    invariant(inputLength === output.length, \"Both input and output ranges must be the same length\");\n    /**\n     * If we're only provided a single input, we can just make a function\n     * that returns the output.\n     */\n    if (inputLength === 1)\n        return () => output[0];\n    if (inputLength === 2 && output[0] === output[1])\n        return () => output[1];\n    const isZeroDeltaRange = input[0] === input[1];\n    // If input runs highest -> lowest, reverse both arrays\n    if (input[0] > input[inputLength - 1]) {\n        input = [...input].reverse();\n        output = [...output].reverse();\n    }\n    const mixers = createMixers(output, ease, mixer);\n    const numMixers = mixers.length;\n    const interpolator = (v) => {\n        if (isZeroDeltaRange && v < input[0])\n            return output[0];\n        let i = 0;\n        if (numMixers > 1) {\n            for (; i < input.length - 2; i++) {\n                if (v < input[i + 1])\n                    break;\n            }\n        }\n        const progressInRange = progress(input[i], input[i + 1], v);\n        return mixers[i](progressInRange);\n    };\n    return isClamp\n        ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n        : interpolator;\n}\n\nexport { interpolate };\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n    const min = offset[offset.length - 1];\n    for (let i = 1; i <= remaining; i++) {\n        const offsetProgress = progress(0, remaining, i);\n        offset.push(mixNumber(min, 1, offsetProgress));\n    }\n}\n\nexport { fillOffset };\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n    const offset = [0];\n    fillOffset(offset, arr.length - 1);\n    return offset;\n}\n\nexport { defaultOffset };\n","function convertOffsetToTimes(offset, duration) {\n    return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { easeInOut } from '../../easing/ease.mjs';\nimport { isEasingArray } from '../../easing/utils/is-easing-array.mjs';\nimport { easingDefinitionToFunction } from '../../easing/utils/map.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../../utils/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n    return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n    /**\n     * Easing functions can be externally defined as strings. Here we convert them\n     * into actual functions.\n     */\n    const easingFunctions = isEasingArray(ease)\n        ? ease.map(easingDefinitionToFunction)\n        : easingDefinitionToFunction(ease);\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = {\n        done: false,\n        value: keyframeValues[0],\n    };\n    /**\n     * Create a times array based on the provided 0-1 offsets\n     */\n    const absoluteTimes = convertOffsetToTimes(\n    // Only use the provided offsets if they're the correct length\n    // TODO Maybe we should warn here if there's a length mismatch\n    times && times.length === keyframeValues.length\n        ? times\n        : defaultOffset(keyframeValues), duration);\n    const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n        ease: Array.isArray(easingFunctions)\n            ? easingFunctions\n            : defaultEasing(keyframeValues, easingFunctions),\n    });\n    return {\n        calculatedDuration: duration,\n        next: (t) => {\n            state.value = mapTimeToKeyframe(t);\n            state.done = t >= duration;\n            return state;\n        },\n    };\n}\n\nexport { defaultEasing, keyframes };\n","import { time } from '../../../frameloop/sync-time.mjs';\nimport { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n    const passTimestamp = ({ timestamp }) => update(timestamp);\n    return {\n        start: () => frame.update(passTimestamp, true),\n        stop: () => cancelFrame(passTimestamp),\n        /**\n         * If we're processing this frame we can use the\n         * framelocked timestamp to keep things in sync.\n         */\n        now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n    };\n};\n\nexport { frameloopDriver };\n","import { isGenerator, calcGeneratorDuration } from 'motion-dom';\nimport { invariant, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { KeyframeResolver } from '../../render/utils/KeyframesResolver.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { mix } from '../../utils/mix/index.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring/index.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { frameloopDriver } from './drivers/driver-frameloop.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\nconst generators = {\n    decay: inertia,\n    inertia,\n    tween: keyframes,\n    keyframes: keyframes,\n    spring,\n};\nconst percentToProgress = (percent) => percent / 100;\n/**\n * Animation that runs on the main thread. Designed to be WAAPI-spec in the subset of\n * features we expose publically. Mostly the compatibility is to ensure visual identity\n * between both WAAPI and main thread animations.\n */\nclass MainThreadAnimation extends BaseAnimation {\n    constructor(options) {\n        super(options);\n        /**\n         * The time at which the animation was paused.\n         */\n        this.holdTime = null;\n        /**\n         * The time at which the animation was cancelled.\n         */\n        this.cancelTime = null;\n        /**\n         * The current time of the animation.\n         */\n        this.currentTime = 0;\n        /**\n         * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n         */\n        this.playbackSpeed = 1;\n        /**\n         * The state of the animation to apply when the animation is resolved. This\n         * allows calls to the public API to control the animation before it is resolved,\n         * without us having to resolve it first.\n         */\n        this.pendingPlayState = \"running\";\n        /**\n         * The time at which the animation was started.\n         */\n        this.startTime = null;\n        this.state = \"idle\";\n        /**\n         * This method is bound to the instance to fix a pattern where\n         * animation.stop is returned as a reference from a useEffect.\n         */\n        this.stop = () => {\n            this.resolver.cancel();\n            this.isStopped = true;\n            if (this.state === \"idle\")\n                return;\n            this.teardown();\n            const { onStop } = this.options;\n            onStop && onStop();\n        };\n        const { name, motionValue, element, keyframes } = this.options;\n        const KeyframeResolver$1 = (element === null || element === void 0 ? void 0 : element.KeyframeResolver) || KeyframeResolver;\n        const onResolved = (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe);\n        this.resolver = new KeyframeResolver$1(keyframes, onResolved, name, motionValue, element);\n        this.resolver.scheduleResolve();\n    }\n    flatten() {\n        super.flatten();\n        // If we've already resolved the animation, re-initialise it\n        if (this._resolved) {\n            Object.assign(this._resolved, this.initPlayback(this._resolved.keyframes));\n        }\n    }\n    initPlayback(keyframes$1) {\n        const { type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = this.options;\n        const generatorFactory = isGenerator(type)\n            ? type\n            : generators[type] || keyframes;\n        /**\n         * If our generator doesn't support mixing numbers, we need to replace keyframes with\n         * [0, 100] and then make a function that maps that to the actual keyframes.\n         *\n         * 100 is chosen instead of 1 as it works nicer with spring animations.\n         */\n        let mapPercentToKeyframes;\n        let mirroredGenerator;\n        if (generatorFactory !== keyframes &&\n            typeof keyframes$1[0] !== \"number\") {\n            if (process.env.NODE_ENV !== \"production\") {\n                invariant(keyframes$1.length === 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`);\n            }\n            mapPercentToKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n            keyframes$1 = [0, 100];\n        }\n        const generator = generatorFactory({ ...this.options, keyframes: keyframes$1 });\n        /**\n         * If we have a mirror repeat type we need to create a second generator that outputs the\n         * mirrored (not reversed) animation and later ping pong between the two generators.\n         */\n        if (repeatType === \"mirror\") {\n            mirroredGenerator = generatorFactory({\n                ...this.options,\n                keyframes: [...keyframes$1].reverse(),\n                velocity: -velocity,\n            });\n        }\n        /**\n         * If duration is undefined and we have repeat options,\n         * we need to calculate a duration from the generator.\n         *\n         * We set it to the generator itself to cache the duration.\n         * Any timeline resolver will need to have already precalculated\n         * the duration by this step.\n         */\n        if (generator.calculatedDuration === null) {\n            generator.calculatedDuration = calcGeneratorDuration(generator);\n        }\n        const { calculatedDuration } = generator;\n        const resolvedDuration = calculatedDuration + repeatDelay;\n        const totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n        return {\n            generator,\n            mirroredGenerator,\n            mapPercentToKeyframes,\n            calculatedDuration,\n            resolvedDuration,\n            totalDuration,\n        };\n    }\n    onPostResolved() {\n        const { autoplay = true } = this.options;\n        this.play();\n        if (this.pendingPlayState === \"paused\" || !autoplay) {\n            this.pause();\n        }\n        else {\n            this.state = this.pendingPlayState;\n        }\n    }\n    tick(timestamp, sample = false) {\n        const { resolved } = this;\n        // If the animations has failed to resolve, return the final keyframe.\n        if (!resolved) {\n            const { keyframes } = this.options;\n            return { done: true, value: keyframes[keyframes.length - 1] };\n        }\n        const { finalKeyframe, generator, mirroredGenerator, mapPercentToKeyframes, keyframes, calculatedDuration, totalDuration, resolvedDuration, } = resolved;\n        if (this.startTime === null)\n            return generator.next(0);\n        const { delay, repeat, repeatType, repeatDelay, onUpdate } = this.options;\n        /**\n         * requestAnimationFrame timestamps can come through as lower than\n         * the startTime as set by performance.now(). Here we prevent this,\n         * though in the future it could be possible to make setting startTime\n         * a pending operation that gets resolved here.\n         */\n        if (this.speed > 0) {\n            this.startTime = Math.min(this.startTime, timestamp);\n        }\n        else if (this.speed < 0) {\n            this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n        }\n        // Update currentTime\n        if (sample) {\n            this.currentTime = timestamp;\n        }\n        else if (this.holdTime !== null) {\n            this.currentTime = this.holdTime;\n        }\n        else {\n            // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n            // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n            // example.\n            this.currentTime =\n                Math.round(timestamp - this.startTime) * this.speed;\n        }\n        // Rebase on delay\n        const timeWithoutDelay = this.currentTime - delay * (this.speed >= 0 ? 1 : -1);\n        const isInDelayPhase = this.speed >= 0\n            ? timeWithoutDelay < 0\n            : timeWithoutDelay > totalDuration;\n        this.currentTime = Math.max(timeWithoutDelay, 0);\n        // If this animation has finished, set the current time  to the total duration.\n        if (this.state === \"finished\" && this.holdTime === null) {\n            this.currentTime = totalDuration;\n        }\n        let elapsed = this.currentTime;\n        let frameGenerator = generator;\n        if (repeat) {\n            /**\n             * Get the current progress (0-1) of the animation. If t is >\n             * than duration we'll get values like 2.5 (midway through the\n             * third iteration)\n             */\n            const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n            /**\n             * Get the current iteration (0 indexed). For instance the floor of\n             * 2.5 is 2.\n             */\n            let currentIteration = Math.floor(progress);\n            /**\n             * Get the current progress of the iteration by taking the remainder\n             * so 2.5 is 0.5 through iteration 2\n             */\n            let iterationProgress = progress % 1.0;\n            /**\n             * If iteration progress is 1 we count that as the end\n             * of the previous iteration.\n             */\n            if (!iterationProgress && progress >= 1) {\n                iterationProgress = 1;\n            }\n            iterationProgress === 1 && currentIteration--;\n            currentIteration = Math.min(currentIteration, repeat + 1);\n            /**\n             * Reverse progress if we're not running in \"normal\" direction\n             */\n            const isOddIteration = Boolean(currentIteration % 2);\n            if (isOddIteration) {\n                if (repeatType === \"reverse\") {\n                    iterationProgress = 1 - iterationProgress;\n                    if (repeatDelay) {\n                        iterationProgress -= repeatDelay / resolvedDuration;\n                    }\n                }\n                else if (repeatType === \"mirror\") {\n                    frameGenerator = mirroredGenerator;\n                }\n            }\n            elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n        }\n        /**\n         * If we're in negative time, set state as the initial keyframe.\n         * This prevents delay: x, duration: 0 animations from finishing\n         * instantly.\n         */\n        const state = isInDelayPhase\n            ? { done: false, value: keyframes[0] }\n            : frameGenerator.next(elapsed);\n        if (mapPercentToKeyframes) {\n            state.value = mapPercentToKeyframes(state.value);\n        }\n        let { done } = state;\n        if (!isInDelayPhase && calculatedDuration !== null) {\n            done =\n                this.speed >= 0\n                    ? this.currentTime >= totalDuration\n                    : this.currentTime <= 0;\n        }\n        const isAnimationFinished = this.holdTime === null &&\n            (this.state === \"finished\" || (this.state === \"running\" && done));\n        if (isAnimationFinished && finalKeyframe !== undefined) {\n            state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe);\n        }\n        if (onUpdate) {\n            onUpdate(state.value);\n        }\n        if (isAnimationFinished) {\n            this.finish();\n        }\n        return state;\n    }\n    get duration() {\n        const { resolved } = this;\n        return resolved ? millisecondsToSeconds(resolved.calculatedDuration) : 0;\n    }\n    get time() {\n        return millisecondsToSeconds(this.currentTime);\n    }\n    set time(newTime) {\n        newTime = secondsToMilliseconds(newTime);\n        this.currentTime = newTime;\n        if (this.holdTime !== null || this.speed === 0) {\n            this.holdTime = newTime;\n        }\n        else if (this.driver) {\n            this.startTime = this.driver.now() - newTime / this.speed;\n        }\n    }\n    get speed() {\n        return this.playbackSpeed;\n    }\n    set speed(newSpeed) {\n        const hasChanged = this.playbackSpeed !== newSpeed;\n        this.playbackSpeed = newSpeed;\n        if (hasChanged) {\n            this.time = millisecondsToSeconds(this.currentTime);\n        }\n    }\n    play() {\n        if (!this.resolver.isScheduled) {\n            this.resolver.resume();\n        }\n        if (!this._resolved) {\n            this.pendingPlayState = \"running\";\n            return;\n        }\n        if (this.isStopped)\n            return;\n        const { driver = frameloopDriver, onPlay, startTime } = this.options;\n        if (!this.driver) {\n            this.driver = driver((timestamp) => this.tick(timestamp));\n        }\n        onPlay && onPlay();\n        const now = this.driver.now();\n        if (this.holdTime !== null) {\n            this.startTime = now - this.holdTime;\n        }\n        else if (!this.startTime) {\n            this.startTime = startTime !== null && startTime !== void 0 ? startTime : this.calcStartTime();\n        }\n        else if (this.state === \"finished\") {\n            this.startTime = now;\n        }\n        if (this.state === \"finished\") {\n            this.updateFinishedPromise();\n        }\n        this.cancelTime = this.startTime;\n        this.holdTime = null;\n        /**\n         * Set playState to running only after we've used it in\n         * the previous logic.\n         */\n        this.state = \"running\";\n        this.driver.start();\n    }\n    pause() {\n        var _a;\n        if (!this._resolved) {\n            this.pendingPlayState = \"paused\";\n            return;\n        }\n        this.state = \"paused\";\n        this.holdTime = (_a = this.currentTime) !== null && _a !== void 0 ? _a : 0;\n    }\n    complete() {\n        if (this.state !== \"running\") {\n            this.play();\n        }\n        this.pendingPlayState = this.state = \"finished\";\n        this.holdTime = null;\n    }\n    finish() {\n        this.teardown();\n        this.state = \"finished\";\n        const { onComplete } = this.options;\n        onComplete && onComplete();\n    }\n    cancel() {\n        if (this.cancelTime !== null) {\n            this.tick(this.cancelTime);\n        }\n        this.teardown();\n        this.updateFinishedPromise();\n    }\n    teardown() {\n        this.state = \"idle\";\n        this.stopDriver();\n        this.resolveFinishedPromise();\n        this.updateFinishedPromise();\n        this.startTime = this.cancelTime = null;\n        this.resolver.cancel();\n    }\n    stopDriver() {\n        if (!this.driver)\n            return;\n        this.driver.stop();\n        this.driver = undefined;\n    }\n    sample(time) {\n        this.startTime = 0;\n        return this.tick(time, true);\n    }\n}\n// Legacy interface\nfunction animateValue(options) {\n    return new MainThreadAnimation(options);\n}\n\nexport { MainThreadAnimation, animateValue };\n","/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n    \"opacity\",\n    \"clipPath\",\n    \"filter\",\n    \"transform\",\n    // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved\n    // or until we implement support for linear() easing.\n    // \"background-color\"\n]);\n\nexport { acceleratedValues };\n","import { mapEasingToNativeEasing } from 'motion-dom';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeInOut\", times, } = {}) {\n    const keyframeOptions = { [valueName]: keyframes };\n    if (times)\n        keyframeOptions.offset = times;\n    const easing = mapEasingToNativeEasing(ease, duration);\n    /**\n     * If this is an easing array, apply to keyframes, not animation as a whole\n     */\n    if (Array.isArray(easing))\n        keyframeOptions.easing = easing;\n    return element.animate(keyframeOptions, {\n        delay,\n        duration,\n        easing: !Array.isArray(easing) ? easing : \"linear\",\n        fill: \"both\",\n        iterations: repeat + 1,\n        direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n    });\n}\n\nexport { startWaapiAnimation };\n","import { memo } from 'motion-utils';\n\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\n\nexport { supportsWaapi };\n","import { supportsLinearEasing, attachTimeline, isGenerator, isWaapiSupportedEasing } from 'motion-dom';\nimport { millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { anticipate } from '../../easing/anticipate.mjs';\nimport { backInOut } from '../../easing/back.mjs';\nimport { circInOut } from '../../easing/circ.mjs';\nimport { DOMKeyframesResolver } from '../../render/dom/DOMKeyframesResolver.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { MainThreadAnimation } from './MainThreadAnimation.mjs';\nimport { acceleratedValues } from './utils/accelerated-values.mjs';\nimport { startWaapiAnimation } from './waapi/index.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\nimport { supportsWaapi } from './waapi/utils/supports-waapi.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxDuration = 20000;\n/**\n * Check if an animation can run natively via WAAPI or requires pregenerated keyframes.\n * WAAPI doesn't support spring or function easings so we run these as JS animation before\n * handing off.\n */\nfunction requiresPregeneratedKeyframes(options) {\n    return (isGenerator(options.type) ||\n        options.type === \"spring\" ||\n        !isWaapiSupportedEasing(options.ease));\n}\nfunction pregenerateKeyframes(keyframes, options) {\n    /**\n     * Create a main-thread animation to pregenerate keyframes.\n     * We sample this at regular intervals to generate keyframes that we then\n     * linearly interpolate between.\n     */\n    const sampleAnimation = new MainThreadAnimation({\n        ...options,\n        keyframes,\n        repeat: 0,\n        delay: 0,\n        isGenerator: true,\n    });\n    let state = { done: false, value: keyframes[0] };\n    const pregeneratedKeyframes = [];\n    /**\n     * Bail after 20 seconds of pre-generated keyframes as it's likely\n     * we're heading for an infinite loop.\n     */\n    let t = 0;\n    while (!state.done && t < maxDuration) {\n        state = sampleAnimation.sample(t);\n        pregeneratedKeyframes.push(state.value);\n        t += sampleDelta;\n    }\n    return {\n        times: undefined,\n        keyframes: pregeneratedKeyframes,\n        duration: t - sampleDelta,\n        ease: \"linear\",\n    };\n}\nconst unsupportedEasingFunctions = {\n    anticipate,\n    backInOut,\n    circInOut,\n};\nfunction isUnsupportedEase(key) {\n    return key in unsupportedEasingFunctions;\n}\nclass AcceleratedAnimation extends BaseAnimation {\n    constructor(options) {\n        super(options);\n        const { name, motionValue, element, keyframes } = this.options;\n        this.resolver = new DOMKeyframesResolver(keyframes, (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe), name, motionValue, element);\n        this.resolver.scheduleResolve();\n    }\n    initPlayback(keyframes, finalKeyframe) {\n        let { duration = 300, times, ease, type, motionValue, name, startTime, } = this.options;\n        /**\n         * If element has since been unmounted, return false to indicate\n         * the animation failed to initialised.\n         */\n        if (!motionValue.owner || !motionValue.owner.current) {\n            return false;\n        }\n        /**\n         * If the user has provided an easing function name that isn't supported\n         * by WAAPI (like \"anticipate\"), we need to provide the corressponding\n         * function. This will later get converted to a linear() easing function.\n         */\n        if (typeof ease === \"string\" &&\n            supportsLinearEasing() &&\n            isUnsupportedEase(ease)) {\n            ease = unsupportedEasingFunctions[ease];\n        }\n        /**\n         * If this animation needs pre-generated keyframes then generate.\n         */\n        if (requiresPregeneratedKeyframes(this.options)) {\n            const { onComplete, onUpdate, motionValue, element, ...options } = this.options;\n            const pregeneratedAnimation = pregenerateKeyframes(keyframes, options);\n            keyframes = pregeneratedAnimation.keyframes;\n            // If this is a very short animation, ensure we have\n            // at least two keyframes to animate between as older browsers\n            // can't animate between a single keyframe.\n            if (keyframes.length === 1) {\n                keyframes[1] = keyframes[0];\n            }\n            duration = pregeneratedAnimation.duration;\n            times = pregeneratedAnimation.times;\n            ease = pregeneratedAnimation.ease;\n            type = \"keyframes\";\n        }\n        const animation = startWaapiAnimation(motionValue.owner.current, name, keyframes, { ...this.options, duration, times, ease });\n        // Override the browser calculated startTime with one synchronised to other JS\n        // and WAAPI animations starting this event loop.\n        animation.startTime = startTime !== null && startTime !== void 0 ? startTime : this.calcStartTime();\n        if (this.pendingTimeline) {\n            attachTimeline(animation, this.pendingTimeline);\n            this.pendingTimeline = undefined;\n        }\n        else {\n            /**\n             * Prefer the `onfinish` prop as it's more widely supported than\n             * the `finished` promise.\n             *\n             * Here, we synchronously set the provided MotionValue to the end\n             * keyframe. If we didn't, when the WAAPI animation is finished it would\n             * be removed from the element which would then revert to its old styles.\n             */\n            animation.onfinish = () => {\n                const { onComplete } = this.options;\n                motionValue.set(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n                onComplete && onComplete();\n                this.cancel();\n                this.resolveFinishedPromise();\n            };\n        }\n        return {\n            animation,\n            duration,\n            times,\n            type,\n            ease,\n            keyframes: keyframes,\n        };\n    }\n    get duration() {\n        const { resolved } = this;\n        if (!resolved)\n            return 0;\n        const { duration } = resolved;\n        return millisecondsToSeconds(duration);\n    }\n    get time() {\n        const { resolved } = this;\n        if (!resolved)\n            return 0;\n        const { animation } = resolved;\n        return millisecondsToSeconds(animation.currentTime || 0);\n    }\n    set time(newTime) {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.currentTime = secondsToMilliseconds(newTime);\n    }\n    get speed() {\n        const { resolved } = this;\n        if (!resolved)\n            return 1;\n        const { animation } = resolved;\n        return animation.playbackRate;\n    }\n    set speed(newSpeed) {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.playbackRate = newSpeed;\n    }\n    get state() {\n        const { resolved } = this;\n        if (!resolved)\n            return \"idle\";\n        const { animation } = resolved;\n        return animation.playState;\n    }\n    get startTime() {\n        const { resolved } = this;\n        if (!resolved)\n            return null;\n        const { animation } = resolved;\n        // Coerce to number as TypeScript incorrectly types this\n        // as CSSNumberish\n        return animation.startTime;\n    }\n    /**\n     * Replace the default DocumentTimeline with another AnimationTimeline.\n     * Currently used for scroll animations.\n     */\n    attachTimeline(timeline) {\n        if (!this._resolved) {\n            this.pendingTimeline = timeline;\n        }\n        else {\n            const { resolved } = this;\n            if (!resolved)\n                return noop;\n            const { animation } = resolved;\n            attachTimeline(animation, timeline);\n        }\n        return noop;\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        if (animation.playState === \"finished\") {\n            this.updateFinishedPromise();\n        }\n        animation.play();\n    }\n    pause() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.pause();\n    }\n    stop() {\n        this.resolver.cancel();\n        this.isStopped = true;\n        if (this.state === \"idle\")\n            return;\n        this.resolveFinishedPromise();\n        this.updateFinishedPromise();\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation, keyframes, duration, type, ease, times } = resolved;\n        if (animation.playState === \"idle\" ||\n            animation.playState === \"finished\") {\n            return;\n        }\n        /**\n         * WAAPI doesn't natively have any interruption capabilities.\n         *\n         * Rather than read commited styles back out of the DOM, we can\n         * create a renderless JS animation and sample it twice to calculate\n         * its current value, \"previous\" value, and therefore allow\n         * Motion to calculate velocity for any subsequent animation.\n         */\n        if (this.time) {\n            const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n            const sampleAnimation = new MainThreadAnimation({\n                ...options,\n                keyframes,\n                duration,\n                type,\n                ease,\n                times,\n                isGenerator: true,\n            });\n            const sampleTime = secondsToMilliseconds(this.time);\n            motionValue.setWithVelocity(sampleAnimation.sample(sampleTime - sampleDelta).value, sampleAnimation.sample(sampleTime).value, sampleDelta);\n        }\n        const { onStop } = this.options;\n        onStop && onStop();\n        this.cancel();\n    }\n    complete() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        resolved.animation.finish();\n    }\n    cancel() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        resolved.animation.cancel();\n    }\n    static supports(options) {\n        const { motionValue, name, repeatDelay, repeatType, damping, type } = options;\n        if (!motionValue ||\n            !motionValue.owner ||\n            !(motionValue.owner.current instanceof HTMLElement)) {\n            return false;\n        }\n        const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n        return (supportsWaapi() &&\n            name &&\n            acceleratedValues.has(name) &&\n            /**\n             * If we're outputting values to onUpdate then we can't use WAAPI as there's\n             * no way to read the value from WAAPI every frame.\n             */\n            !onUpdate &&\n            !transformTemplate &&\n            !repeatDelay &&\n            repeatType !== \"mirror\" &&\n            damping !== 0 &&\n            type !== \"inertia\");\n    }\n}\n\nexport { AcceleratedAnimation };\n","import { transformProps } from '../../render/html/utils/keys-transform.mjs';\n\nconst underDampedSpring = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n    restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n    type: \"spring\",\n    stiffness: 550,\n    damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n    restSpeed: 10,\n});\nconst keyframesTransition = {\n    type: \"keyframes\",\n    duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n    type: \"keyframes\",\n    ease: [0.25, 0.1, 0.35, 1],\n    duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n    if (keyframes.length > 2) {\n        return keyframesTransition;\n    }\n    else if (transformProps.has(valueKey)) {\n        return valueKey.startsWith(\"scale\")\n            ? criticallyDampedSpring(keyframes[1])\n            : underDampedSpring;\n    }\n    return ease;\n};\n\nexport { getDefaultTransition };\n","/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n    return !!Object.keys(transition).length;\n}\n\nexport { isTransitionDefined };\n","import { getValueTransition, GroupPlaybackControls } from 'motion-dom';\nimport { secondsToMilliseconds } from 'motion-utils';\nimport { frame } from '../../frameloop/frame.mjs';\nimport { MotionGlobalConfig } from '../../utils/GlobalConfig.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { AcceleratedAnimation } from '../animators/AcceleratedAnimation.mjs';\nimport { MainThreadAnimation } from '../animators/MainThreadAnimation.mjs';\nimport { getFinalKeyframe } from '../animators/waapi/utils/get-final-keyframe.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n    const valueTransition = getValueTransition(transition, name) || {};\n    /**\n     * Most transition values are currently completely overwritten by value-specific\n     * transitions. In the future it'd be nicer to blend these transitions. But for now\n     * delay actually does inherit from the root transition if not value-specific.\n     */\n    const delay = valueTransition.delay || transition.delay || 0;\n    /**\n     * Elapsed isn't a public transition option but can be passed through from\n     * optimized appear effects in milliseconds.\n     */\n    let { elapsed = 0 } = transition;\n    elapsed = elapsed - secondsToMilliseconds(delay);\n    let options = {\n        keyframes: Array.isArray(target) ? target : [null, target],\n        ease: \"easeOut\",\n        velocity: value.getVelocity(),\n        ...valueTransition,\n        delay: -elapsed,\n        onUpdate: (v) => {\n            value.set(v);\n            valueTransition.onUpdate && valueTransition.onUpdate(v);\n        },\n        onComplete: () => {\n            onComplete();\n            valueTransition.onComplete && valueTransition.onComplete();\n        },\n        name,\n        motionValue: value,\n        element: isHandoff ? undefined : element,\n    };\n    /**\n     * If there's no transition defined for this value, we can generate\n     * unqiue transition settings for this value.\n     */\n    if (!isTransitionDefined(valueTransition)) {\n        options = {\n            ...options,\n            ...getDefaultTransition(name, options),\n        };\n    }\n    /**\n     * Both WAAPI and our internal animation functions use durations\n     * as defined by milliseconds, while our external API defines them\n     * as seconds.\n     */\n    if (options.duration) {\n        options.duration = secondsToMilliseconds(options.duration);\n    }\n    if (options.repeatDelay) {\n        options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n    }\n    if (options.from !== undefined) {\n        options.keyframes[0] = options.from;\n    }\n    let shouldSkip = false;\n    if (options.type === false ||\n        (options.duration === 0 && !options.repeatDelay)) {\n        options.duration = 0;\n        if (options.delay === 0) {\n            shouldSkip = true;\n        }\n    }\n    if (instantAnimationState.current ||\n        MotionGlobalConfig.skipAnimations) {\n        shouldSkip = true;\n        options.duration = 0;\n        options.delay = 0;\n    }\n    /**\n     * If we can or must skip creating the animation, and apply only\n     * the final keyframe, do so. We also check once keyframes are resolved but\n     * this early check prevents the need to create an animation at all.\n     */\n    if (shouldSkip && !isHandoff && value.get() !== undefined) {\n        const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n        if (finalKeyframe !== undefined) {\n            frame.update(() => {\n                options.onUpdate(finalKeyframe);\n                options.onComplete();\n            });\n            // We still want to return some animation controls here rather\n            // than returning undefined\n            return new GroupPlaybackControls([]);\n        }\n    }\n    /**\n     * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n     * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n     * optimised animation.\n     */\n    if (!isHandoff && AcceleratedAnimation.supports(options)) {\n        return new AcceleratedAnimation(options);\n    }\n    else {\n        return new MainThreadAnimation(options);\n    }\n};\n\nexport { animateMotionValue };\n","import { getValueTransition } from 'motion-dom';\nimport { positionalKeys } from '../../render/html/utils/keys-position.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n    const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n    needsAnimating[key] = false;\n    return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n    var _a;\n    let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = targetAndTransition;\n    if (transitionOverride)\n        transition = transitionOverride;\n    const animations = [];\n    const animationTypeState = type &&\n        visualElement.animationState &&\n        visualElement.animationState.getState()[type];\n    for (const key in target) {\n        const value = visualElement.getValue(key, (_a = visualElement.latestValues[key]) !== null && _a !== void 0 ? _a : null);\n        const valueTarget = target[key];\n        if (valueTarget === undefined ||\n            (animationTypeState &&\n                shouldBlockAnimation(animationTypeState, key))) {\n            continue;\n        }\n        const valueTransition = {\n            delay,\n            ...getValueTransition(transition || {}, key),\n        };\n        /**\n         * If this is the first time a value is being animated, check\n         * to see if we're handling off from an existing animation.\n         */\n        let isHandoff = false;\n        if (window.MotionHandoffAnimation) {\n            const appearId = getOptimisedAppearId(visualElement);\n            if (appearId) {\n                const startTime = window.MotionHandoffAnimation(appearId, key, frame);\n                if (startTime !== null) {\n                    valueTransition.startTime = startTime;\n                    isHandoff = true;\n                }\n            }\n        }\n        addValueToWillChange(visualElement, key);\n        value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && positionalKeys.has(key)\n            ? { type: false }\n            : valueTransition, visualElement, isHandoff));\n        const animation = value.animation;\n        if (animation) {\n            animations.push(animation);\n        }\n    }\n    if (transitionEnd) {\n        Promise.all(animations).then(() => {\n            frame.update(() => {\n                transitionEnd && setTarget(visualElement, transitionEnd);\n            });\n        });\n    }\n    return animations;\n}\n\nexport { animateTarget };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n    var _a;\n    const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n        ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n        : undefined);\n    let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n    if (options.transitionOverride) {\n        transition = options.transitionOverride;\n    }\n    /**\n     * If we have a variant, create a callback that runs it as an animation.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getAnimation = resolved\n        ? () => Promise.all(animateTarget(visualElement, resolved, options))\n        : () => Promise.resolve();\n    /**\n     * If we have children, create a callback that runs all their animations.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n        ? (forwardDelay = 0) => {\n            const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n            return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options);\n        }\n        : () => Promise.resolve();\n    /**\n     * If the transition explicitly defines a \"when\" option, we need to resolve either\n     * this animation or all children animations before playing the other.\n     */\n    const { when } = transition;\n    if (when) {\n        const [first, last] = when === \"beforeChildren\"\n            ? [getAnimation, getChildAnimations]\n            : [getChildAnimations, getAnimation];\n        return first().then(() => last());\n    }\n    else {\n        return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n    }\n}\nfunction animateChildren(visualElement, variant, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n    const animations = [];\n    const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n    const generateStaggerDuration = staggerDirection === 1\n        ? (i = 0) => i * staggerChildren\n        : (i = 0) => maxStaggerDuration - i * staggerChildren;\n    Array.from(visualElement.variantChildren)\n        .sort(sortByTreeOrder)\n        .forEach((child, i) => {\n        child.notify(\"AnimationStart\", variant);\n        animations.push(animateVariant(child, variant, {\n            ...options,\n            delay: delayChildren + generateStaggerDuration(i),\n        }).then(() => child.notify(\"AnimationComplete\", variant)));\n    });\n    return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n    return a.sortNodePosition(b);\n}\n\nexport { animateVariant, sortByTreeOrder };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n    visualElement.notify(\"AnimationStart\", definition);\n    let animation;\n    if (Array.isArray(definition)) {\n        const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n        animation = Promise.all(animations);\n    }\n    else if (typeof definition === \"string\") {\n        animation = animateVariant(visualElement, definition, options);\n    }\n    else {\n        const resolvedDefinition = typeof definition === \"function\"\n            ? resolveVariant(visualElement, definition, options.custom)\n            : definition;\n        animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n    }\n    return animation.then(() => {\n        visualElement.notify(\"AnimationComplete\", definition);\n    });\n}\n\nexport { animateVisualElement };\n","import { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nconst numVariantProps = variantProps.length;\nfunction getVariantContext(visualElement) {\n    if (!visualElement)\n        return undefined;\n    if (!visualElement.isControllingVariants) {\n        const context = visualElement.parent\n            ? getVariantContext(visualElement.parent) || {}\n            : {};\n        if (visualElement.props.initial !== undefined) {\n            context.initial = visualElement.props.initial;\n        }\n        return context;\n    }\n    const context = {};\n    for (let i = 0; i < numVariantProps; i++) {\n        const name = variantProps[i];\n        const prop = visualElement.props[name];\n        if (isVariantLabel(prop) || prop === false) {\n            context[name] = prop;\n        }\n    }\n    return context;\n}\n\nexport { getVariantContext };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\nimport { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\nimport { getVariantContext } from './get-variant-context.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n    return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n    let animate = animateList(visualElement);\n    let state = createState();\n    let isInitialRender = true;\n    /**\n     * This function will be used to reduce the animation definitions for\n     * each active animation type into an object of resolved values for it.\n     */\n    const buildResolvedTypeValues = (type) => (acc, definition) => {\n        var _a;\n        const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n            ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n            : undefined);\n        if (resolved) {\n            const { transition, transitionEnd, ...target } = resolved;\n            acc = { ...acc, ...target, ...transitionEnd };\n        }\n        return acc;\n    };\n    /**\n     * This just allows us to inject mocked animation functions\n     * @internal\n     */\n    function setAnimateFunction(makeAnimator) {\n        animate = makeAnimator(visualElement);\n    }\n    /**\n     * When we receive new props, we need to:\n     * 1. Create a list of protected keys for each type. This is a directory of\n     *    value keys that are currently being \"handled\" by types of a higher priority\n     *    so that whenever an animation is played of a given type, these values are\n     *    protected from being animated.\n     * 2. Determine if an animation type needs animating.\n     * 3. Determine if any values have been removed from a type and figure out\n     *    what to animate those to.\n     */\n    function animateChanges(changedActiveType) {\n        const { props } = visualElement;\n        const context = getVariantContext(visualElement.parent) || {};\n        /**\n         * A list of animations that we'll build into as we iterate through the animation\n         * types. This will get executed at the end of the function.\n         */\n        const animations = [];\n        /**\n         * Keep track of which values have been removed. Then, as we hit lower priority\n         * animation types, we can check if they contain removed values and animate to that.\n         */\n        const removedKeys = new Set();\n        /**\n         * A dictionary of all encountered keys. This is an object to let us build into and\n         * copy it without iteration. Each time we hit an animation type we set its protected\n         * keys - the keys its not allowed to animate - to the latest version of this object.\n         */\n        let encounteredKeys = {};\n        /**\n         * If a variant has been removed at a given index, and this component is controlling\n         * variant animations, we want to ensure lower-priority variants are forced to animate.\n         */\n        let removedVariantIndex = Infinity;\n        /**\n         * Iterate through all animation types in reverse priority order. For each, we want to\n         * detect which values it's handling and whether or not they've changed (and therefore\n         * need to be animated). If any values have been removed, we want to detect those in\n         * lower priority props and flag for animation.\n         */\n        for (let i = 0; i < numAnimationTypes; i++) {\n            const type = reversePriorityOrder[i];\n            const typeState = state[type];\n            const prop = props[type] !== undefined\n                ? props[type]\n                : context[type];\n            const propIsVariant = isVariantLabel(prop);\n            /**\n             * If this type has *just* changed isActive status, set activeDelta\n             * to that status. Otherwise set to null.\n             */\n            const activeDelta = type === changedActiveType ? typeState.isActive : null;\n            if (activeDelta === false)\n                removedVariantIndex = i;\n            /**\n             * If this prop is an inherited variant, rather than been set directly on the\n             * component itself, we want to make sure we allow the parent to trigger animations.\n             *\n             * TODO: Can probably change this to a !isControllingVariants check\n             */\n            let isInherited = prop === context[type] &&\n                prop !== props[type] &&\n                propIsVariant;\n            /**\n             *\n             */\n            if (isInherited &&\n                isInitialRender &&\n                visualElement.manuallyAnimateOnMount) {\n                isInherited = false;\n            }\n            /**\n             * Set all encountered keys so far as the protected keys for this type. This will\n             * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n             */\n            typeState.protectedKeys = { ...encounteredKeys };\n            // Check if we can skip analysing this prop early\n            if (\n            // If it isn't active and hasn't *just* been set as inactive\n            (!typeState.isActive && activeDelta === null) ||\n                // If we didn't and don't have any defined prop for this animation type\n                (!prop && !typeState.prevProp) ||\n                // Or if the prop doesn't define an animation\n                isAnimationControls(prop) ||\n                typeof prop === \"boolean\") {\n                continue;\n            }\n            /**\n             * As we go look through the values defined on this type, if we detect\n             * a changed value or a value that was removed in a higher priority, we set\n             * this to true and add this prop to the animation list.\n             */\n            const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n            let shouldAnimateType = variantDidChange ||\n                // If we're making this variant active, we want to always make it active\n                (type === changedActiveType &&\n                    typeState.isActive &&\n                    !isInherited &&\n                    propIsVariant) ||\n                // If we removed a higher-priority variant (i is in reverse order)\n                (i > removedVariantIndex && propIsVariant);\n            let handledRemovedValues = false;\n            /**\n             * As animations can be set as variant lists, variants or target objects, we\n             * coerce everything to an array if it isn't one already\n             */\n            const definitionList = Array.isArray(prop) ? prop : [prop];\n            /**\n             * Build an object of all the resolved values. We'll use this in the subsequent\n             * animateChanges calls to determine whether a value has changed.\n             */\n            let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n            if (activeDelta === false)\n                resolvedValues = {};\n            /**\n             * Now we need to loop through all the keys in the prev prop and this prop,\n             * and decide:\n             * 1. If the value has changed, and needs animating\n             * 2. If it has been removed, and needs adding to the removedKeys set\n             * 3. If it has been removed in a higher priority type and needs animating\n             * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n             *    needs adding to the type's protectedKeys list.\n             */\n            const { prevResolvedValues = {} } = typeState;\n            const allKeys = {\n                ...prevResolvedValues,\n                ...resolvedValues,\n            };\n            const markToAnimate = (key) => {\n                shouldAnimateType = true;\n                if (removedKeys.has(key)) {\n                    handledRemovedValues = true;\n                    removedKeys.delete(key);\n                }\n                typeState.needsAnimating[key] = true;\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = false;\n            };\n            for (const key in allKeys) {\n                const next = resolvedValues[key];\n                const prev = prevResolvedValues[key];\n                // If we've already handled this we can just skip ahead\n                if (encounteredKeys.hasOwnProperty(key))\n                    continue;\n                /**\n                 * If the value has changed, we probably want to animate it.\n                 */\n                let valueHasChanged = false;\n                if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n                    valueHasChanged = !shallowCompare(next, prev);\n                }\n                else {\n                    valueHasChanged = next !== prev;\n                }\n                if (valueHasChanged) {\n                    if (next !== undefined && next !== null) {\n                        // If next is defined and doesn't equal prev, it needs animating\n                        markToAnimate(key);\n                    }\n                    else {\n                        // If it's undefined, it's been removed.\n                        removedKeys.add(key);\n                    }\n                }\n                else if (next !== undefined && removedKeys.has(key)) {\n                    /**\n                     * If next hasn't changed and it isn't undefined, we want to check if it's\n                     * been removed by a higher priority\n                     */\n                    markToAnimate(key);\n                }\n                else {\n                    /**\n                     * If it hasn't changed, we add it to the list of protected values\n                     * to ensure it doesn't get animated.\n                     */\n                    typeState.protectedKeys[key] = true;\n                }\n            }\n            /**\n             * Update the typeState so next time animateChanges is called we can compare the\n             * latest prop and resolvedValues to these.\n             */\n            typeState.prevProp = prop;\n            typeState.prevResolvedValues = resolvedValues;\n            /**\n             *\n             */\n            if (typeState.isActive) {\n                encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n            }\n            if (isInitialRender && visualElement.blockInitialAnimation) {\n                shouldAnimateType = false;\n            }\n            /**\n             * If this is an inherited prop we want to skip this animation\n             * unless the inherited variants haven't changed on this render.\n             */\n            const willAnimateViaParent = isInherited && variantDidChange;\n            const needsAnimating = !willAnimateViaParent || handledRemovedValues;\n            if (shouldAnimateType && needsAnimating) {\n                animations.push(...definitionList.map((animation) => ({\n                    animation: animation,\n                    options: { type },\n                })));\n            }\n        }\n        /**\n         * If there are some removed value that haven't been dealt with,\n         * we need to create a new animation that falls back either to the value\n         * defined in the style prop, or the last read value.\n         */\n        if (removedKeys.size) {\n            const fallbackAnimation = {};\n            removedKeys.forEach((key) => {\n                const fallbackTarget = visualElement.getBaseTarget(key);\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = true;\n                // @ts-expect-error - @mattgperry to figure if we should do something here\n                fallbackAnimation[key] = fallbackTarget !== null && fallbackTarget !== void 0 ? fallbackTarget : null;\n            });\n            animations.push({ animation: fallbackAnimation });\n        }\n        let shouldAnimate = Boolean(animations.length);\n        if (isInitialRender &&\n            (props.initial === false || props.initial === props.animate) &&\n            !visualElement.manuallyAnimateOnMount) {\n            shouldAnimate = false;\n        }\n        isInitialRender = false;\n        return shouldAnimate ? animate(animations) : Promise.resolve();\n    }\n    /**\n     * Change whether a certain animation type is active.\n     */\n    function setActive(type, isActive) {\n        var _a;\n        // If the active state hasn't changed, we can safely do nothing here\n        if (state[type].isActive === isActive)\n            return Promise.resolve();\n        // Propagate active change to children\n        (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n        state[type].isActive = isActive;\n        const animations = animateChanges(type);\n        for (const key in state) {\n            state[key].protectedKeys = {};\n        }\n        return animations;\n    }\n    return {\n        animateChanges,\n        setActive,\n        setAnimateFunction,\n        getState: () => state,\n        reset: () => {\n            state = createState();\n            isInitialRender = true;\n        },\n    };\n}\nfunction checkVariantsDidChange(prev, next) {\n    if (typeof next === \"string\") {\n        return next !== prev;\n    }\n    else if (Array.isArray(next)) {\n        return !shallowCompare(next, prev);\n    }\n    return false;\n}\nfunction createTypeState(isActive = false) {\n    return {\n        isActive,\n        protectedKeys: {},\n        needsAnimating: {},\n        prevResolvedValues: {},\n    };\n}\nfunction createState() {\n    return {\n        animate: createTypeState(true),\n        whileInView: createTypeState(),\n        whileHover: createTypeState(),\n        whileTap: createTypeState(),\n        whileDrag: createTypeState(),\n        whileFocus: createTypeState(),\n        exit: createTypeState(),\n    };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n","class Feature {\n    constructor(node) {\n        this.isMounted = false;\n        this.node = node;\n    }\n    update() { }\n}\n\nexport { Feature };\n","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass AnimationFeature extends Feature {\n    /**\n     * We dynamically generate the AnimationState manager as it contains a reference\n     * to the underlying animation library. We only want to load that if we load this,\n     * so people can optionally code split it out using the `m` component.\n     */\n    constructor(node) {\n        super(node);\n        node.animationState || (node.animationState = createAnimationState(node));\n    }\n    updateAnimationControlsSubscription() {\n        const { animate } = this.node.getProps();\n        if (isAnimationControls(animate)) {\n            this.unmountControls = animate.subscribe(this.node);\n        }\n    }\n    /**\n     * Subscribe any provided AnimationControls to the component's VisualElement\n     */\n    mount() {\n        this.updateAnimationControlsSubscription();\n    }\n    update() {\n        const { animate } = this.node.getProps();\n        const { animate: prevAnimate } = this.node.prevProps || {};\n        if (animate !== prevAnimate) {\n            this.updateAnimationControlsSubscription();\n        }\n    }\n    unmount() {\n        var _a;\n        this.node.animationState.reset();\n        (_a = this.unmountControls) === null || _a === void 0 ? void 0 : _a.call(this);\n    }\n}\n\nexport { AnimationFeature };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.id = id++;\n    }\n    update() {\n        if (!this.node.presenceContext)\n            return;\n        const { isPresent, onExitComplete } = this.node.presenceContext;\n        const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n        if (!this.node.animationState || isPresent === prevIsPresent) {\n            return;\n        }\n        const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n        if (onExitComplete && !isPresent) {\n            exitAnimation.then(() => onExitComplete(this.id));\n        }\n    }\n    mount() {\n        const { register } = this.node.presenceContext || {};\n        if (register) {\n            this.unmount = register(this.id);\n        }\n    }\n    unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n    animation: {\n        Feature: AnimationFeature,\n    },\n    exit: {\n        Feature: ExitAnimationFeature,\n    },\n};\n\nexport { animations };\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n    target.addEventListener(eventName, handler, options);\n    return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n","import { isPrimaryPointer } from 'motion-dom';\n\nfunction extractEventInfo(event) {\n    return {\n        point: {\n            x: event.pageX,\n            y: event.pageY,\n        },\n    };\n}\nconst addPointerInfo = (handler) => {\n    return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n    return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n    // Multi-dimensional\n    const xDelta = distance(a.x, b.x);\n    const yDelta = distance(a.y, b.y);\n    return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n","import { isPrimaryPointer } from 'motion-dom';\nimport { secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n    constructor(event, handlers, { transformPagePoint, contextWindow, dragSnapToOrigin = false, } = {}) {\n        /**\n         * @internal\n         */\n        this.startEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEventInfo = null;\n        /**\n         * @internal\n         */\n        this.handlers = {};\n        /**\n         * @internal\n         */\n        this.contextWindow = window;\n        this.updatePoint = () => {\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const info = getPanInfo(this.lastMoveEventInfo, this.history);\n            const isPanStarted = this.startEvent !== null;\n            // Only start panning if the offset is larger than 3 pixels. If we make it\n            // any larger than this we'll want to reset the pointer history\n            // on the first update to avoid visual snapping to the cursoe.\n            const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\n            if (!isPanStarted && !isDistancePastThreshold)\n                return;\n            const { point } = info;\n            const { timestamp } = frameData;\n            this.history.push({ ...point, timestamp });\n            const { onStart, onMove } = this.handlers;\n            if (!isPanStarted) {\n                onStart && onStart(this.lastMoveEvent, info);\n                this.startEvent = this.lastMoveEvent;\n            }\n            onMove && onMove(this.lastMoveEvent, info);\n        };\n        this.handlePointerMove = (event, info) => {\n            this.lastMoveEvent = event;\n            this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n            // Throttle mouse move event to once per frame\n            frame.update(this.updatePoint, true);\n        };\n        this.handlePointerUp = (event, info) => {\n            this.end();\n            const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n            if (this.dragSnapToOrigin)\n                resumeAnimation && resumeAnimation();\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const panInfo = getPanInfo(event.type === \"pointercancel\"\n                ? this.lastMoveEventInfo\n                : transformPoint(info, this.transformPagePoint), this.history);\n            if (this.startEvent && onEnd) {\n                onEnd(event, panInfo);\n            }\n            onSessionEnd && onSessionEnd(event, panInfo);\n        };\n        // If we have more than one touch, don't start detecting this gesture\n        if (!isPrimaryPointer(event))\n            return;\n        this.dragSnapToOrigin = dragSnapToOrigin;\n        this.handlers = handlers;\n        this.transformPagePoint = transformPagePoint;\n        this.contextWindow = contextWindow || window;\n        const info = extractEventInfo(event);\n        const initialInfo = transformPoint(info, this.transformPagePoint);\n        const { point } = initialInfo;\n        const { timestamp } = frameData;\n        this.history = [{ ...point, timestamp }];\n        const { onSessionStart } = handlers;\n        onSessionStart &&\n            onSessionStart(event, getPanInfo(initialInfo, this.history));\n        this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n    }\n    updateHandlers(handlers) {\n        this.handlers = handlers;\n    }\n    end() {\n        this.removeListeners && this.removeListeners();\n        cancelFrame(this.updatePoint);\n    }\n}\nfunction transformPoint(info, transformPagePoint) {\n    return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n    return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n    return {\n        point,\n        delta: subtractPoint(point, lastDevicePoint(history)),\n        offset: subtractPoint(point, startDevicePoint(history)),\n        velocity: getVelocity(history, 0.1),\n    };\n}\nfunction startDevicePoint(history) {\n    return history[0];\n}\nfunction lastDevicePoint(history) {\n    return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n    if (history.length < 2) {\n        return { x: 0, y: 0 };\n    }\n    let i = history.length - 1;\n    let timestampedPoint = null;\n    const lastPoint = lastDevicePoint(history);\n    while (i >= 0) {\n        timestampedPoint = history[i];\n        if (lastPoint.timestamp - timestampedPoint.timestamp >\n            secondsToMilliseconds(timeDelta)) {\n            break;\n        }\n        i--;\n    }\n    if (!timestampedPoint) {\n        return { x: 0, y: 0 };\n    }\n    const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n    if (time === 0) {\n        return { x: 0, y: 0 };\n    }\n    const currentVelocity = {\n        x: (lastPoint.x - timestampedPoint.x) / time,\n        y: (lastPoint.y - timestampedPoint.y) / time,\n    };\n    if (currentVelocity.x === Infinity) {\n        currentVelocity.x = 0;\n    }\n    if (currentVelocity.y === Infinity) {\n        currentVelocity.y = 0;\n    }\n    return currentVelocity;\n}\n\nexport { PanSession };\n","import { mixNumber } from '../../utils/mix/number.mjs';\n\nconst SCALE_PRECISION = 0.0001;\nconst SCALE_MIN = 1 - SCALE_PRECISION;\nconst SCALE_MAX = 1 + SCALE_PRECISION;\nconst TRANSLATE_PRECISION = 0.01;\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;\nfunction calcLength(axis) {\n    return axis.max - axis.min;\n}\nfunction isNear(value, target, maxDistance) {\n    return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n    delta.origin = origin;\n    delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n    delta.scale = calcLength(target) / calcLength(source);\n    delta.translate =\n        mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n    if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n        isNaN(delta.scale)) {\n        delta.scale = 1.0;\n    }\n    if ((delta.translate >= TRANSLATE_MIN &&\n        delta.translate <= TRANSLATE_MAX) ||\n        isNaN(delta.translate)) {\n        delta.translate = 0.0;\n    }\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n    calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n    calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent) {\n    target.min = parent.min + relative.min;\n    target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n    calcRelativeAxis(target.x, relative.x, parent.x);\n    calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n    target.min = layout.min - parent.min;\n    target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x);\n    calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","import { progress } from 'motion-utils';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n    if (min !== undefined && point < min) {\n        // If we have a min point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(min, point, elastic.min)\n            : Math.max(point, min);\n    }\n    else if (max !== undefined && point > max) {\n        // If we have a max point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(max, point, elastic.max)\n            : Math.min(point, max);\n    }\n    return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n    return {\n        min: min !== undefined ? axis.min + min : undefined,\n        max: max !== undefined\n            ? axis.max + max - (axis.max - axis.min)\n            : undefined,\n    };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n    return {\n        x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n        y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n    };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n    let min = constraintsAxis.min - layoutAxis.min;\n    let max = constraintsAxis.max - layoutAxis.max;\n    // If the constraints axis is actually smaller than the layout axis then we can\n    // flip the constraints\n    if (constraintsAxis.max - constraintsAxis.min <\n        layoutAxis.max - layoutAxis.min) {\n        [min, max] = [max, min];\n    }\n    return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n    return {\n        x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n        y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n    };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n    let origin = 0.5;\n    const sourceLength = calcLength(source);\n    const targetLength = calcLength(target);\n    if (targetLength > sourceLength) {\n        origin = progress(target.min, target.max - sourceLength, source.min);\n    }\n    else if (sourceLength > targetLength) {\n        origin = progress(source.min, source.max - targetLength, target.min);\n    }\n    return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n    const relativeConstraints = {};\n    if (constraints.min !== undefined) {\n        relativeConstraints.min = constraints.min - layout.min;\n    }\n    if (constraints.max !== undefined) {\n        relativeConstraints.max = constraints.max - layout.min;\n    }\n    return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n    if (dragElastic === false) {\n        dragElastic = 0;\n    }\n    else if (dragElastic === true) {\n        dragElastic = defaultElastic;\n    }\n    return {\n        x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n        y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n    };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n    return {\n        min: resolvePointElastic(dragElastic, minLabel),\n        max: resolvePointElastic(dragElastic, maxLabel),\n    };\n}\nfunction resolvePointElastic(dragElastic, label) {\n    return typeof dragElastic === \"number\"\n        ? dragElastic\n        : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n","const createAxisDelta = () => ({\n    translate: 0,\n    scale: 1,\n    origin: 0,\n    originPoint: 0,\n});\nconst createDelta = () => ({\n    x: createAxisDelta(),\n    y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n    x: createAxis(),\n    y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n","function eachAxis(callback) {\n    return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n    return {\n        x: { min: left, max: right },\n        y: { min: top, max: bottom },\n    };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n    return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n    if (!transformPoint)\n        return point;\n    const topLeft = transformPoint({ x: point.left, y: point.top });\n    const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n    return {\n        top: topLeft.y,\n        left: topLeft.x,\n        bottom: bottomRight.y,\n        right: bottomRight.x,\n    };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n","function isIdentityScale(scale) {\n    return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n    return (!isIdentityScale(scale) ||\n        !isIdentityScale(scaleX) ||\n        !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n    return (hasScale(values) ||\n        has2DTranslate(values) ||\n        values.z ||\n        values.rotate ||\n        values.rotateX ||\n        values.rotateY ||\n        values.skewX ||\n        values.skewY);\n}\nfunction has2DTranslate(values) {\n    return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n    return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n    const distanceFromOrigin = point - originPoint;\n    const scaled = scale * distanceFromOrigin;\n    return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n    if (boxScale !== undefined) {\n        point = scalePoint(point, boxScale, originPoint);\n    }\n    return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n    axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n    applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n    applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\nconst TREE_SCALE_SNAP_MIN = 0.999999999999;\nconst TREE_SCALE_SNAP_MAX = 1.0000000000001;\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n    const treeLength = treePath.length;\n    if (!treeLength)\n        return;\n    // Reset the treeScale\n    treeScale.x = treeScale.y = 1;\n    let node;\n    let delta;\n    for (let i = 0; i < treeLength; i++) {\n        node = treePath[i];\n        delta = node.projectionDelta;\n        /**\n         * TODO: Prefer to remove this, but currently we have motion components with\n         * display: contents in Framer.\n         */\n        const { visualElement } = node.options;\n        if (visualElement &&\n            visualElement.props.style &&\n            visualElement.props.style.display === \"contents\") {\n            continue;\n        }\n        if (isSharedTransition &&\n            node.options.layoutScroll &&\n            node.scroll &&\n            node !== node.root) {\n            transformBox(box, {\n                x: -node.scroll.offset.x,\n                y: -node.scroll.offset.y,\n            });\n        }\n        if (delta) {\n            // Incoporate each ancestor's scale into a culmulative treeScale for this component\n            treeScale.x *= delta.x.scale;\n            treeScale.y *= delta.y.scale;\n            // Apply each ancestor's calculated delta into this component's recorded layout box\n            applyBoxDelta(box, delta);\n        }\n        if (isSharedTransition && hasTransform(node.latestValues)) {\n            transformBox(box, node.latestValues);\n        }\n    }\n    /**\n     * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n     * This will help reduce useless scales getting rendered.\n     */\n    if (treeScale.x < TREE_SCALE_SNAP_MAX &&\n        treeScale.x > TREE_SCALE_SNAP_MIN) {\n        treeScale.x = 1.0;\n    }\n    if (treeScale.y < TREE_SCALE_SNAP_MAX &&\n        treeScale.y > TREE_SCALE_SNAP_MIN) {\n        treeScale.y = 1.0;\n    }\n}\nfunction translateAxis(axis, distance) {\n    axis.min = axis.min + distance;\n    axis.max = axis.max + distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {\n    const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n    // Apply the axis delta to the final axis\n    applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);\n}\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n    transformAxis(box.x, transform.x, transform.scaleX, transform.scale, transform.originX);\n    transformAxis(box.y, transform.y, transform.scaleY, transform.scale, transform.originY);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n    return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n    const viewportBox = measureViewportBox(element, transformPagePoint);\n    const { scroll } = rootProjectionNode;\n    if (scroll) {\n        translateAxis(viewportBox.x, scroll.offset.x);\n        translateAxis(viewportBox.y, scroll.offset.y);\n    }\n    return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n","// Fixes https://github.com/motiondivision/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n    return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n","import { invariant } from 'motion-utils';\nimport { setDragLock } from 'motion-dom';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n    constructor(visualElement) {\n        this.openDragLock = null;\n        this.isDragging = false;\n        this.currentDirection = null;\n        this.originPoint = { x: 0, y: 0 };\n        /**\n         * The permitted boundaries of travel, in pixels.\n         */\n        this.constraints = false;\n        this.hasMutatedConstraints = false;\n        /**\n         * The per-axis resolved elastic values.\n         */\n        this.elastic = createBox();\n        this.visualElement = visualElement;\n    }\n    start(originEvent, { snapToCursor = false } = {}) {\n        /**\n         * Don't start dragging if this component is exiting\n         */\n        const { presenceContext } = this.visualElement;\n        if (presenceContext && presenceContext.isPresent === false)\n            return;\n        const onSessionStart = (event) => {\n            const { dragSnapToOrigin } = this.getProps();\n            // Stop or pause any animations on both axis values immediately. This allows the user to throw and catch\n            // the component.\n            dragSnapToOrigin ? this.pauseAnimation() : this.stopAnimation();\n            if (snapToCursor) {\n                this.snapToCursor(extractEventInfo(event).point);\n            }\n        };\n        const onStart = (event, info) => {\n            // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n            const { drag, dragPropagation, onDragStart } = this.getProps();\n            if (drag && !dragPropagation) {\n                if (this.openDragLock)\n                    this.openDragLock();\n                this.openDragLock = setDragLock(drag);\n                // If we don 't have the lock, don't start dragging\n                if (!this.openDragLock)\n                    return;\n            }\n            this.isDragging = true;\n            this.currentDirection = null;\n            this.resolveConstraints();\n            if (this.visualElement.projection) {\n                this.visualElement.projection.isAnimationBlocked = true;\n                this.visualElement.projection.target = undefined;\n            }\n            /**\n             * Record gesture origin\n             */\n            eachAxis((axis) => {\n                let current = this.getAxisMotionValue(axis).get() || 0;\n                /**\n                 * If the MotionValue is a percentage value convert to px\n                 */\n                if (percent.test(current)) {\n                    const { projection } = this.visualElement;\n                    if (projection && projection.layout) {\n                        const measuredAxis = projection.layout.layoutBox[axis];\n                        if (measuredAxis) {\n                            const length = calcLength(measuredAxis);\n                            current = length * (parseFloat(current) / 100);\n                        }\n                    }\n                }\n                this.originPoint[axis] = current;\n            });\n            // Fire onDragStart event\n            if (onDragStart) {\n                frame.postRender(() => onDragStart(event, info));\n            }\n            addValueToWillChange(this.visualElement, \"transform\");\n            const { animationState } = this.visualElement;\n            animationState && animationState.setActive(\"whileDrag\", true);\n        };\n        const onMove = (event, info) => {\n            // latestPointerEvent = event\n            const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n            // If we didn't successfully receive the gesture lock, early return.\n            if (!dragPropagation && !this.openDragLock)\n                return;\n            const { offset } = info;\n            // Attempt to detect drag direction if directionLock is true\n            if (dragDirectionLock && this.currentDirection === null) {\n                this.currentDirection = getCurrentDirection(offset);\n                // If we've successfully set a direction, notify listener\n                if (this.currentDirection !== null) {\n                    onDirectionLock && onDirectionLock(this.currentDirection);\n                }\n                return;\n            }\n            // Update each point with the latest position\n            this.updateAxis(\"x\", info.point, offset);\n            this.updateAxis(\"y\", info.point, offset);\n            /**\n             * Ideally we would leave the renderer to fire naturally at the end of\n             * this frame but if the element is about to change layout as the result\n             * of a re-render we want to ensure the browser can read the latest\n             * bounding box to ensure the pointer and element don't fall out of sync.\n             */\n            this.visualElement.render();\n            /**\n             * This must fire after the render call as it might trigger a state\n             * change which itself might trigger a layout update.\n             */\n            onDrag && onDrag(event, info);\n        };\n        const onSessionEnd = (event, info) => this.stop(event, info);\n        const resumeAnimation = () => eachAxis((axis) => {\n            var _a;\n            return this.getAnimationState(axis) === \"paused\" &&\n                ((_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.play());\n        });\n        const { dragSnapToOrigin } = this.getProps();\n        this.panSession = new PanSession(originEvent, {\n            onSessionStart,\n            onStart,\n            onMove,\n            onSessionEnd,\n            resumeAnimation,\n        }, {\n            transformPagePoint: this.visualElement.getTransformPagePoint(),\n            dragSnapToOrigin,\n            contextWindow: getContextWindow(this.visualElement),\n        });\n    }\n    stop(event, info) {\n        const isDragging = this.isDragging;\n        this.cancel();\n        if (!isDragging)\n            return;\n        const { velocity } = info;\n        this.startAnimation(velocity);\n        const { onDragEnd } = this.getProps();\n        if (onDragEnd) {\n            frame.postRender(() => onDragEnd(event, info));\n        }\n    }\n    cancel() {\n        this.isDragging = false;\n        const { projection, animationState } = this.visualElement;\n        if (projection) {\n            projection.isAnimationBlocked = false;\n        }\n        this.panSession && this.panSession.end();\n        this.panSession = undefined;\n        const { dragPropagation } = this.getProps();\n        if (!dragPropagation && this.openDragLock) {\n            this.openDragLock();\n            this.openDragLock = null;\n        }\n        animationState && animationState.setActive(\"whileDrag\", false);\n    }\n    updateAxis(axis, _point, offset) {\n        const { drag } = this.getProps();\n        // If we're not dragging this axis, do an early return.\n        if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n            return;\n        const axisValue = this.getAxisMotionValue(axis);\n        let next = this.originPoint[axis] + offset[axis];\n        // Apply constraints\n        if (this.constraints && this.constraints[axis]) {\n            next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n        }\n        axisValue.set(next);\n    }\n    resolveConstraints() {\n        var _a;\n        const { dragConstraints, dragElastic } = this.getProps();\n        const layout = this.visualElement.projection &&\n            !this.visualElement.projection.layout\n            ? this.visualElement.projection.measure(false)\n            : (_a = this.visualElement.projection) === null || _a === void 0 ? void 0 : _a.layout;\n        const prevConstraints = this.constraints;\n        if (dragConstraints && isRefObject(dragConstraints)) {\n            if (!this.constraints) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        }\n        else {\n            if (dragConstraints && layout) {\n                this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n            }\n            else {\n                this.constraints = false;\n            }\n        }\n        this.elastic = resolveDragElastic(dragElastic);\n        /**\n         * If we're outputting to external MotionValues, we want to rebase the measured constraints\n         * from viewport-relative to component-relative.\n         */\n        if (prevConstraints !== this.constraints &&\n            layout &&\n            this.constraints &&\n            !this.hasMutatedConstraints) {\n            eachAxis((axis) => {\n                if (this.constraints !== false &&\n                    this.getAxisMotionValue(axis)) {\n                    this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n                }\n            });\n        }\n    }\n    resolveRefConstraints() {\n        const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n        if (!constraints || !isRefObject(constraints))\n            return false;\n        const constraintsElement = constraints.current;\n        invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\");\n        const { projection } = this.visualElement;\n        // TODO\n        if (!projection || !projection.layout)\n            return false;\n        const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n        let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n        /**\n         * If there's an onMeasureDragConstraints listener we call it and\n         * if different constraints are returned, set constraints to that\n         */\n        if (onMeasureDragConstraints) {\n            const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n            this.hasMutatedConstraints = !!userConstraints;\n            if (userConstraints) {\n                measuredConstraints = convertBoundingBoxToBox(userConstraints);\n            }\n        }\n        return measuredConstraints;\n    }\n    startAnimation(velocity) {\n        const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n        const constraints = this.constraints || {};\n        const momentumAnimations = eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, this.currentDirection)) {\n                return;\n            }\n            let transition = (constraints && constraints[axis]) || {};\n            if (dragSnapToOrigin)\n                transition = { min: 0, max: 0 };\n            /**\n             * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n             * of spring animations so we should look into adding a disable spring option to `inertia`.\n             * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n             * using the value of `dragElastic`.\n             */\n            const bounceStiffness = dragElastic ? 200 : 1000000;\n            const bounceDamping = dragElastic ? 40 : 10000000;\n            const inertia = {\n                type: \"inertia\",\n                velocity: dragMomentum ? velocity[axis] : 0,\n                bounceStiffness,\n                bounceDamping,\n                timeConstant: 750,\n                restDelta: 1,\n                restSpeed: 10,\n                ...dragTransition,\n                ...transition,\n            };\n            // If we're not animating on an externally-provided `MotionValue` we can use the\n            // component's animation controls which will handle interactions with whileHover (etc),\n            // otherwise we just have to animate the `MotionValue` itself.\n            return this.startAxisValueAnimation(axis, inertia);\n        });\n        // Run all animations and then resolve the new drag constraints.\n        return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n    }\n    startAxisValueAnimation(axis, transition) {\n        const axisValue = this.getAxisMotionValue(axis);\n        addValueToWillChange(this.visualElement, axis);\n        return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement, false));\n    }\n    stopAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n    }\n    pauseAnimation() {\n        eachAxis((axis) => { var _a; return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.pause(); });\n    }\n    getAnimationState(axis) {\n        var _a;\n        return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.state;\n    }\n    /**\n     * Drag works differently depending on which props are provided.\n     *\n     * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n     * - Otherwise, we apply the delta to the x/y motion values.\n     */\n    getAxisMotionValue(axis) {\n        const dragKey = `_drag${axis.toUpperCase()}`;\n        const props = this.visualElement.getProps();\n        const externalMotionValue = props[dragKey];\n        return externalMotionValue\n            ? externalMotionValue\n            : this.visualElement.getValue(axis, (props.initial\n                ? props.initial[axis]\n                : undefined) || 0);\n    }\n    snapToCursor(point) {\n        eachAxis((axis) => {\n            const { drag } = this.getProps();\n            // If we're not dragging this axis, do an early return.\n            if (!shouldDrag(axis, drag, this.currentDirection))\n                return;\n            const { projection } = this.visualElement;\n            const axisValue = this.getAxisMotionValue(axis);\n            if (projection && projection.layout) {\n                const { min, max } = projection.layout.layoutBox[axis];\n                axisValue.set(point[axis] - mixNumber(min, max, 0.5));\n            }\n        });\n    }\n    /**\n     * When the viewport resizes we want to check if the measured constraints\n     * have changed and, if so, reposition the element within those new constraints\n     * relative to where it was before the resize.\n     */\n    scalePositionWithinConstraints() {\n        if (!this.visualElement.current)\n            return;\n        const { drag, dragConstraints } = this.getProps();\n        const { projection } = this.visualElement;\n        if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n            return;\n        /**\n         * Stop current animations as there can be visual glitching if we try to do\n         * this mid-animation\n         */\n        this.stopAnimation();\n        /**\n         * Record the relative position of the dragged element relative to the\n         * constraints box and save as a progress value.\n         */\n        const boxProgress = { x: 0, y: 0 };\n        eachAxis((axis) => {\n            const axisValue = this.getAxisMotionValue(axis);\n            if (axisValue && this.constraints !== false) {\n                const latest = axisValue.get();\n                boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n            }\n        });\n        /**\n         * Update the layout of this element and resolve the latest drag constraints\n         */\n        const { transformTemplate } = this.visualElement.getProps();\n        this.visualElement.current.style.transform = transformTemplate\n            ? transformTemplate({}, \"\")\n            : \"none\";\n        projection.root && projection.root.updateScroll();\n        projection.updateLayout();\n        this.resolveConstraints();\n        /**\n         * For each axis, calculate the current progress of the layout axis\n         * within the new constraints.\n         */\n        eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, null))\n                return;\n            /**\n             * Calculate a new transform based on the previous box progress\n             */\n            const axisValue = this.getAxisMotionValue(axis);\n            const { min, max } = this.constraints[axis];\n            axisValue.set(mixNumber(min, max, boxProgress[axis]));\n        });\n    }\n    addListeners() {\n        if (!this.visualElement.current)\n            return;\n        elementDragControls.set(this.visualElement, this);\n        const element = this.visualElement.current;\n        /**\n         * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n         */\n        const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n            const { drag, dragListener = true } = this.getProps();\n            drag && dragListener && this.start(event);\n        });\n        const measureDragConstraints = () => {\n            const { dragConstraints } = this.getProps();\n            if (isRefObject(dragConstraints) && dragConstraints.current) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        };\n        const { projection } = this.visualElement;\n        const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n        if (projection && !projection.layout) {\n            projection.root && projection.root.updateScroll();\n            projection.updateLayout();\n        }\n        frame.read(measureDragConstraints);\n        /**\n         * Attach a window resize listener to scale the draggable target within its defined\n         * constraints as the window resizes.\n         */\n        const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n        /**\n         * If the element's layout changes, calculate the delta and apply that to\n         * the drag gesture's origin point.\n         */\n        const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n            if (this.isDragging && hasLayoutChanged) {\n                eachAxis((axis) => {\n                    const motionValue = this.getAxisMotionValue(axis);\n                    if (!motionValue)\n                        return;\n                    this.originPoint[axis] += delta[axis].translate;\n                    motionValue.set(motionValue.get() + delta[axis].translate);\n                });\n                this.visualElement.render();\n            }\n        }));\n        return () => {\n            stopResizeListener();\n            stopPointerListener();\n            stopMeasureLayoutListener();\n            stopLayoutUpdateListener && stopLayoutUpdateListener();\n        };\n    }\n    getProps() {\n        const props = this.visualElement.getProps();\n        const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n        return {\n            ...props,\n            drag,\n            dragDirectionLock,\n            dragPropagation,\n            dragConstraints,\n            dragElastic,\n            dragMomentum,\n        };\n    }\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n    return ((drag === true || drag === direction) &&\n        (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n    let direction = null;\n    if (Math.abs(offset.y) > lockThreshold) {\n        direction = \"y\";\n    }\n    else if (Math.abs(offset.x) > lockThreshold) {\n        direction = \"x\";\n    }\n    return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from 'motion-utils';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n    constructor(node) {\n        super(node);\n        this.removeGroupControls = noop;\n        this.removeListeners = noop;\n        this.controls = new VisualElementDragControls(node);\n    }\n    mount() {\n        // If we've been provided a DragControls for manual control over the drag gesture,\n        // subscribe this component to it on mount.\n        const { dragControls } = this.node.getProps();\n        if (dragControls) {\n            this.removeGroupControls = dragControls.subscribe(this.controls);\n        }\n        this.removeListeners = this.controls.addListeners() || noop;\n    }\n    unmount() {\n        this.removeGroupControls();\n        this.removeListeners();\n    }\n}\n\nexport { DragGesture };\n","import { PanSession } from './PanSession.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from 'motion-utils';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n    if (handler) {\n        frame.postRender(() => handler(event, info));\n    }\n};\nclass PanGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.removePointerDownListener = noop;\n    }\n    onPointerDown(pointerDownEvent) {\n        this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n            transformPagePoint: this.node.getTransformPagePoint(),\n            contextWindow: getContextWindow(this.node),\n        });\n    }\n    createPanHandlers() {\n        const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n        return {\n            onSessionStart: asyncHandler(onPanSessionStart),\n            onStart: asyncHandler(onPanStart),\n            onMove: onPan,\n            onEnd: (event, info) => {\n                delete this.session;\n                if (onPanEnd) {\n                    frame.postRender(() => onPanEnd(event, info));\n                }\n            },\n        };\n    }\n    mount() {\n        this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n    }\n    update() {\n        this.session && this.session.updateHandlers(this.createPanHandlers());\n    }\n    unmount() {\n        this.removePointerDownListener();\n        this.session && this.session.end();\n    }\n}\n\nexport { PanGesture };\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n    /**\n     * Global flag as to whether the tree has animated since the last time\n     * we resized the window\n     */\n    hasAnimatedSinceResize: true,\n    /**\n     * We set this to true once, on the first update. Any nodes added to the tree beyond that\n     * update will be given a `data-projection-id` attribute.\n     */\n    hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n    if (axis.max === axis.min)\n        return 0;\n    return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n    correct: (latest, node) => {\n        if (!node.target)\n            return latest;\n        /**\n         * If latest is a string, if it's a percentage we can return immediately as it's\n         * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n         */\n        if (typeof latest === \"string\") {\n            if (px.test(latest)) {\n                latest = parseFloat(latest);\n            }\n            else {\n                return latest;\n            }\n        }\n        /**\n         * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n         * pixel value as a percentage of each axis\n         */\n        const x = pixelsToPercent(latest, node.target.x);\n        const y = pixelsToPercent(latest, node.target.y);\n        return `${x}% ${y}%`;\n    },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\n\nconst correctBoxShadow = {\n    correct: (latest, { treeScale, projectionDelta }) => {\n        const original = latest;\n        const shadow = complex.parse(latest);\n        // TODO: Doesn't support multiple shadows\n        if (shadow.length > 5)\n            return original;\n        const template = complex.createTransformer(latest);\n        const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n        // Calculate the overall context scale\n        const xScale = projectionDelta.x.scale * treeScale.x;\n        const yScale = projectionDelta.y.scale * treeScale.y;\n        shadow[0 + offset] /= xScale;\n        shadow[1 + offset] /= yScale;\n        /**\n         * Ideally we'd correct x and y scales individually, but because blur and\n         * spread apply to both we have to take a scale average and apply that instead.\n         * We could potentially improve the outcome of this by incorporating the ratio between\n         * the two scales.\n         */\n        const averageScale = mixNumber(xScale, yScale, 0.5);\n        // Blur\n        if (typeof shadow[2 + offset] === \"number\")\n            shadow[2 + offset] /= averageScale;\n        // Spread\n        if (typeof shadow[3 + offset] === \"number\")\n            shadow[3 + offset] /= averageScale;\n        return template(shadow);\n    },\n};\n\nexport { correctBoxShadow };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { useContext, Component } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\nimport { microtask } from '../../../frameloop/microtask.mjs';\nimport { frame } from '../../../frameloop/frame.mjs';\n\nclass MeasureLayoutWithContext extends Component {\n    /**\n     * This only mounts projection nodes for components that\n     * need measuring, we might want to do it for all components\n     * in order to incorporate transforms\n     */\n    componentDidMount() {\n        const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n        const { projection } = visualElement;\n        addScaleCorrector(defaultScaleCorrectors);\n        if (projection) {\n            if (layoutGroup.group)\n                layoutGroup.group.add(projection);\n            if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n                switchLayoutGroup.register(projection);\n            }\n            projection.root.didUpdate();\n            projection.addEventListener(\"animationComplete\", () => {\n                this.safeToRemove();\n            });\n            projection.setOptions({\n                ...projection.options,\n                onExitComplete: () => this.safeToRemove(),\n            });\n        }\n        globalProjectionState.hasEverUpdated = true;\n    }\n    getSnapshotBeforeUpdate(prevProps) {\n        const { layoutDependency, visualElement, drag, isPresent } = this.props;\n        const projection = visualElement.projection;\n        if (!projection)\n            return null;\n        /**\n         * TODO: We use this data in relegate to determine whether to\n         * promote a previous element. There's no guarantee its presence data\n         * will have updated by this point - if a bug like this arises it will\n         * have to be that we markForRelegation and then find a new lead some other way,\n         * perhaps in didUpdate\n         */\n        projection.isPresent = isPresent;\n        if (drag ||\n            prevProps.layoutDependency !== layoutDependency ||\n            layoutDependency === undefined) {\n            projection.willUpdate();\n        }\n        else {\n            this.safeToRemove();\n        }\n        if (prevProps.isPresent !== isPresent) {\n            if (isPresent) {\n                projection.promote();\n            }\n            else if (!projection.relegate()) {\n                /**\n                 * If there's another stack member taking over from this one,\n                 * it's in charge of the exit animation and therefore should\n                 * be in charge of the safe to remove. Otherwise we call it here.\n                 */\n                frame.postRender(() => {\n                    const stack = projection.getStack();\n                    if (!stack || !stack.members.length) {\n                        this.safeToRemove();\n                    }\n                });\n            }\n        }\n        return null;\n    }\n    componentDidUpdate() {\n        const { projection } = this.props.visualElement;\n        if (projection) {\n            projection.root.didUpdate();\n            microtask.postRender(() => {\n                if (!projection.currentAnimation && projection.isLead()) {\n                    this.safeToRemove();\n                }\n            });\n        }\n    }\n    componentWillUnmount() {\n        const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n        const { projection } = visualElement;\n        if (projection) {\n            projection.scheduleCheckAfterUnmount();\n            if (layoutGroup && layoutGroup.group)\n                layoutGroup.group.remove(projection);\n            if (promoteContext && promoteContext.deregister)\n                promoteContext.deregister(projection);\n        }\n    }\n    safeToRemove() {\n        const { safeToRemove } = this.props;\n        safeToRemove && safeToRemove();\n    }\n    render() {\n        return null;\n    }\n}\nfunction MeasureLayout(props) {\n    const [isPresent, safeToRemove] = usePresence();\n    const layoutGroup = useContext(LayoutGroupContext);\n    return (jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\n    borderRadius: {\n        ...correctBorderRadius,\n        applyTo: [\n            \"borderTopLeftRadius\",\n            \"borderTopRightRadius\",\n            \"borderBottomLeftRadius\",\n            \"borderBottomRightRadius\",\n        ],\n    },\n    borderTopLeftRadius: correctBorderRadius,\n    borderTopRightRadius: correctBorderRadius,\n    borderBottomLeftRadius: correctBorderRadius,\n    borderBottomRightRadius: correctBorderRadius,\n    boxShadow: correctBoxShadow,\n};\n\nexport { MeasureLayout };\n","import { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { animateMotionValue } from '../interfaces/motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n    const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n    motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n    return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n","function isSVGElement(element) {\n    return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\nexport { isSVGElement };\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n    constructor() {\n        this.children = [];\n        this.isDirty = false;\n    }\n    add(child) {\n        addUniqueItem(this.children, child);\n        this.isDirty = true;\n    }\n    remove(child) {\n        removeItem(this.children, child);\n        this.isDirty = true;\n    }\n    forEach(callback) {\n        this.isDirty && this.children.sort(compareByDepth);\n        this.isDirty = false;\n        this.children.forEach(callback);\n    }\n}\n\nexport { FlatTree };\n","import { secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n    const start = time.now();\n    const checkElapsed = ({ timestamp }) => {\n        const elapsed = timestamp - start;\n        if (elapsed >= timeout) {\n            cancelFrame(checkElapsed);\n            callback(elapsed - timeout);\n        }\n    };\n    frame.read(checkElapsed, true);\n    return () => cancelFrame(checkElapsed);\n}\nfunction delayInSeconds(callback, timeout) {\n    return delay(callback, secondsToMilliseconds(timeout));\n}\n\nexport { delay, delayInSeconds };\n","import { progress, noop } from 'motion-utils';\nimport { circOut } from '../../easing/circ.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n    if (shouldCrossfadeOpacity) {\n        target.opacity = mixNumber(0, \n        // TODO Reinstate this if only child\n        lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n        target.opacityExit = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n    }\n    else if (isOnlyMember) {\n        target.opacity = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n    }\n    /**\n     * Mix border radius\n     */\n    for (let i = 0; i < numBorders; i++) {\n        const borderLabel = `border${borders[i]}Radius`;\n        let followRadius = getRadius(follow, borderLabel);\n        let leadRadius = getRadius(lead, borderLabel);\n        if (followRadius === undefined && leadRadius === undefined)\n            continue;\n        followRadius || (followRadius = 0);\n        leadRadius || (leadRadius = 0);\n        const canMix = followRadius === 0 ||\n            leadRadius === 0 ||\n            isPx(followRadius) === isPx(leadRadius);\n        if (canMix) {\n            target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n            if (percent.test(leadRadius) || percent.test(followRadius)) {\n                target[borderLabel] += \"%\";\n            }\n        }\n        else {\n            target[borderLabel] = leadRadius;\n        }\n    }\n    /**\n     * Mix rotation\n     */\n    if (follow.rotate || lead.rotate) {\n        target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n    }\n}\nfunction getRadius(values, radiusName) {\n    return values[radiusName] !== undefined\n        ? values[radiusName]\n        : values.borderRadius;\n}\n// /**\n//  * We only want to mix the background color if there's a follow element\n//  * that we're not crossfading opacity between. For instance with switch\n//  * AnimateSharedLayout animations, this helps the illusion of a continuous\n//  * element being animated but also cuts down on the number of paints triggered\n//  * for elements where opacity is doing that work for us.\n//  */\n// if (\n//     !hasFollowElement &&\n//     latestLeadValues.backgroundColor &&\n//     latestFollowValues.backgroundColor\n// ) {\n//     /**\n//      * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n//      * We could probably create a mixer that runs at the start of the animation but\n//      * the idea behind the crossfader is that it runs dynamically between two potentially\n//      * changing targets (ie opacity or borderRadius may be animating independently via variants)\n//      */\n//     leadState.backgroundColor = followState.backgroundColor = mixColor(\n//         latestFollowValues.backgroundColor as string,\n//         latestLeadValues.backgroundColor as string\n//     )(p)\n// }\nconst easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);\nconst easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n    return (p) => {\n        // Could replace ifs with clamp\n        if (p < min)\n            return 0;\n        if (p > max)\n            return 1;\n        return easing(progress(min, max, p));\n    };\n}\n\nexport { mixValues };\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n    axis.min = originAxis.min;\n    axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n    copyAxisInto(box.x, originBox.x);\n    copyAxisInto(box.y, originBox.y);\n}\n/**\n * Reset a delta to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisDeltaInto(delta, originDelta) {\n    delta.translate = originDelta.translate;\n    delta.scale = originDelta.scale;\n    delta.originPoint = originDelta.originPoint;\n    delta.origin = originDelta.origin;\n}\n\nexport { copyAxisDeltaInto, copyAxisInto, copyBoxInto };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n    point -= translate;\n    point = scalePoint(point, 1 / scale, originPoint);\n    if (boxScale !== undefined) {\n        point = scalePoint(point, 1 / boxScale, originPoint);\n    }\n    return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n    if (percent.test(translate)) {\n        translate = parseFloat(translate);\n        const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n        translate = relativeProgress - sourceAxis.min;\n    }\n    if (typeof translate !== \"number\")\n        return;\n    let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n    if (axis === originAxis)\n        originPoint -= translate;\n    axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n    removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n    removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n    removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n    return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n    return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction axisEquals(a, b) {\n    return a.min === b.min && a.max === b.max;\n}\nfunction boxEquals(a, b) {\n    return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);\n}\nfunction axisEqualsRounded(a, b) {\n    return (Math.round(a.min) === Math.round(b.min) &&\n        Math.round(a.max) === Math.round(b.max));\n}\nfunction boxEqualsRounded(a, b) {\n    return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);\n}\nfunction aspectRatio(box) {\n    return calcLength(box.x) / calcLength(box.y);\n}\nfunction axisDeltaEquals(a, b) {\n    return (a.translate === b.translate &&\n        a.scale === b.scale &&\n        a.originPoint === b.originPoint);\n}\n\nexport { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\n\nclass NodeStack {\n    constructor() {\n        this.members = [];\n    }\n    add(node) {\n        addUniqueItem(this.members, node);\n        node.scheduleRender();\n    }\n    remove(node) {\n        removeItem(this.members, node);\n        if (node === this.prevLead) {\n            this.prevLead = undefined;\n        }\n        if (node === this.lead) {\n            const prevLead = this.members[this.members.length - 1];\n            if (prevLead) {\n                this.promote(prevLead);\n            }\n        }\n    }\n    relegate(node) {\n        const indexOfNode = this.members.findIndex((member) => node === member);\n        if (indexOfNode === 0)\n            return false;\n        /**\n         * Find the next projection node that is present\n         */\n        let prevLead;\n        for (let i = indexOfNode; i >= 0; i--) {\n            const member = this.members[i];\n            if (member.isPresent !== false) {\n                prevLead = member;\n                break;\n            }\n        }\n        if (prevLead) {\n            this.promote(prevLead);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    promote(node, preserveFollowOpacity) {\n        const prevLead = this.lead;\n        if (node === prevLead)\n            return;\n        this.prevLead = prevLead;\n        this.lead = node;\n        node.show();\n        if (prevLead) {\n            prevLead.instance && prevLead.scheduleRender();\n            node.scheduleRender();\n            node.resumeFrom = prevLead;\n            if (preserveFollowOpacity) {\n                node.resumeFrom.preserveOpacity = true;\n            }\n            if (prevLead.snapshot) {\n                node.snapshot = prevLead.snapshot;\n                node.snapshot.latestValues =\n                    prevLead.animationValues || prevLead.latestValues;\n            }\n            if (node.root && node.root.isUpdating) {\n                node.isLayoutDirty = true;\n            }\n            const { crossfade } = node.options;\n            if (crossfade === false) {\n                prevLead.hide();\n            }\n            /**\n             * TODO:\n             *   - Test border radius when previous node was deleted\n             *   - boxShadow mixing\n             *   - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n             *   - Shared between element A in transformed container and element B (transform stays the same or changes)\n             *   - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n             * ---\n             *   - Crossfade opacity of root nodes\n             *   - layoutId changes after animation\n             *   - layoutId changes mid animation\n             */\n        }\n    }\n    exitAnimationComplete() {\n        this.members.forEach((node) => {\n            const { options, resumingFrom } = node;\n            options.onExitComplete && options.onExitComplete();\n            if (resumingFrom) {\n                resumingFrom.options.onExitComplete &&\n                    resumingFrom.options.onExitComplete();\n            }\n        });\n    }\n    scheduleRender() {\n        this.members.forEach((node) => {\n            node.instance && node.scheduleRender(false);\n        });\n    }\n    /**\n     * Clear any leads that have been removed this render to prevent them from being\n     * used in future animations and to prevent memory leaks\n     */\n    removeLeadSnapshot() {\n        if (this.lead && this.lead.snapshot) {\n            this.lead.snapshot = undefined;\n        }\n    }\n}\n\nexport { NodeStack };\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n    let transform = \"\";\n    /**\n     * The translations we use to calculate are always relative to the viewport coordinate space.\n     * But when we apply scales, we also scale the coordinate space of an element and its children.\n     * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n     * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n     */\n    const xTranslate = delta.x.translate / treeScale.x;\n    const yTranslate = delta.y.translate / treeScale.y;\n    const zTranslate = (latestTransform === null || latestTransform === void 0 ? void 0 : latestTransform.z) || 0;\n    if (xTranslate || yTranslate || zTranslate) {\n        transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n    }\n    /**\n     * Apply scale correction for the tree transform.\n     * This will apply scale to the screen-orientated axes.\n     */\n    if (treeScale.x !== 1 || treeScale.y !== 1) {\n        transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n    }\n    if (latestTransform) {\n        const { transformPerspective, rotate, rotateX, rotateY, skewX, skewY } = latestTransform;\n        if (transformPerspective)\n            transform = `perspective(${transformPerspective}px) ${transform}`;\n        if (rotate)\n            transform += `rotate(${rotate}deg) `;\n        if (rotateX)\n            transform += `rotateX(${rotateX}deg) `;\n        if (rotateY)\n            transform += `rotateY(${rotateY}deg) `;\n        if (skewX)\n            transform += `skewX(${skewX}deg) `;\n        if (skewY)\n            transform += `skewY(${skewY}deg) `;\n    }\n    /**\n     * Apply scale to match the size of the element to the size we want it.\n     * This will apply scale to the element-orientated axes.\n     */\n    const elementScaleX = delta.x.scale * treeScale.x;\n    const elementScaleY = delta.y.scale * treeScale.y;\n    if (elementScaleX !== 1 || elementScaleY !== 1) {\n        transform += `scale(${elementScaleX}, ${elementScaleY})`;\n    }\n    return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n","import { getValueTransition } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { animateSingleValue } from '../../animation/animate/single-value.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\nimport { cancelFrame, frameData, frameSteps, frame } from '../../frameloop/frame.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\nimport { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto, copyAxisDeltaInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcRelativePosition, calcRelativeBox, calcBoxDelta, calcLength, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { boxEqualsRounded, isDeltaZero, axisDeltaEquals, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { globalProjectionState } from './state.mjs';\n\nconst metrics = {\n    type: \"projectionFrame\",\n    totalNodes: 0,\n    resolvedTargetDeltas: 0,\n    recalculatedProjection: 0,\n};\nconst isDebug = typeof window !== \"undefined\" && window.MotionDebug !== undefined;\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\nconst hiddenVisibility = { visibility: \"hidden\" };\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n    const { latestValues } = visualElement;\n    // Record the distorting transform and then temporarily set it to 0\n    if (latestValues[key]) {\n        values[key] = latestValues[key];\n        visualElement.setStaticValue(key, 0);\n        if (sharedAnimationValues) {\n            sharedAnimationValues[key] = 0;\n        }\n    }\n}\nfunction cancelTreeOptimisedTransformAnimations(projectionNode) {\n    projectionNode.hasCheckedOptimisedAppear = true;\n    if (projectionNode.root === projectionNode)\n        return;\n    const { visualElement } = projectionNode.options;\n    if (!visualElement)\n        return;\n    const appearId = getOptimisedAppearId(visualElement);\n    if (window.MotionHasOptimisedAnimation(appearId, \"transform\")) {\n        const { layout, layoutId } = projectionNode.options;\n        window.MotionCancelOptimisedAnimation(appearId, \"transform\", frame, !(layout || layoutId));\n    }\n    const { parent } = projectionNode;\n    if (parent && !parent.hasCheckedOptimisedAppear) {\n        cancelTreeOptimisedTransformAnimations(parent);\n    }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n    return class ProjectionNode {\n        constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {\n            /**\n             * A unique ID generated for every projection node.\n             */\n            this.id = id++;\n            /**\n             * An id that represents a unique session instigated by startUpdate.\n             */\n            this.animationId = 0;\n            /**\n             * A Set containing all this component's children. This is used to iterate\n             * through the children.\n             *\n             * TODO: This could be faster to iterate as a flat array stored on the root node.\n             */\n            this.children = new Set();\n            /**\n             * Options for the node. We use this to configure what kind of layout animations\n             * we should perform (if any).\n             */\n            this.options = {};\n            /**\n             * We use this to detect when its safe to shut down part of a projection tree.\n             * We have to keep projecting children for scale correction and relative projection\n             * until all their parents stop performing layout animations.\n             */\n            this.isTreeAnimating = false;\n            this.isAnimationBlocked = false;\n            /**\n             * Flag to true if we think this layout has been changed. We can't always know this,\n             * currently we set it to true every time a component renders, or if it has a layoutDependency\n             * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n             * and if one node is dirtied, they all are.\n             */\n            this.isLayoutDirty = false;\n            /**\n             * Flag to true if we think the projection calculations for this node needs\n             * recalculating as a result of an updated transform or layout animation.\n             */\n            this.isProjectionDirty = false;\n            /**\n             * Flag to true if the layout *or* transform has changed. This then gets propagated\n             * throughout the projection tree, forcing any element below to recalculate on the next frame.\n             */\n            this.isSharedProjectionDirty = false;\n            /**\n             * Flag transform dirty. This gets propagated throughout the whole tree but is only\n             * respected by shared nodes.\n             */\n            this.isTransformDirty = false;\n            /**\n             * Block layout updates for instant layout transitions throughout the tree.\n             */\n            this.updateManuallyBlocked = false;\n            this.updateBlockedByResize = false;\n            /**\n             * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n             * call.\n             */\n            this.isUpdating = false;\n            /**\n             * If this is an SVG element we currently disable projection transforms\n             */\n            this.isSVG = false;\n            /**\n             * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n             * its projection styles.\n             */\n            this.needsReset = false;\n            /**\n             * Flags whether this node should have its transform reset prior to measuring.\n             */\n            this.shouldResetTransform = false;\n            /**\n             * Store whether this node has been checked for optimised appear animations. As\n             * effects fire bottom-up, and we want to look up the tree for appear animations,\n             * this makes sure we only check each path once, stopping at nodes that\n             * have already been checked.\n             */\n            this.hasCheckedOptimisedAppear = false;\n            /**\n             * An object representing the calculated contextual/accumulated/tree scale.\n             * This will be used to scale calculcated projection transforms, as these are\n             * calculated in screen-space but need to be scaled for elements to layoutly\n             * make it to their calculated destinations.\n             *\n             * TODO: Lazy-init\n             */\n            this.treeScale = { x: 1, y: 1 };\n            /**\n             *\n             */\n            this.eventHandlers = new Map();\n            this.hasTreeAnimated = false;\n            // Note: Currently only running on root node\n            this.updateScheduled = false;\n            this.scheduleUpdate = () => this.update();\n            this.projectionUpdateScheduled = false;\n            this.checkUpdateFailed = () => {\n                if (this.isUpdating) {\n                    this.isUpdating = false;\n                    this.clearAllSnapshots();\n                }\n            };\n            /**\n             * This is a multi-step process as shared nodes might be of different depths. Nodes\n             * are sorted by depth order, so we need to resolve the entire tree before moving to\n             * the next step.\n             */\n            this.updateProjection = () => {\n                this.projectionUpdateScheduled = false;\n                /**\n                 * Reset debug counts. Manually resetting rather than creating a new\n                 * object each frame.\n                 */\n                if (isDebug) {\n                    metrics.totalNodes =\n                        metrics.resolvedTargetDeltas =\n                            metrics.recalculatedProjection =\n                                0;\n                }\n                this.nodes.forEach(propagateDirtyNodes);\n                this.nodes.forEach(resolveTargetDelta);\n                this.nodes.forEach(calcProjection);\n                this.nodes.forEach(cleanDirtyNodes);\n                if (isDebug) {\n                    window.MotionDebug.record(metrics);\n                }\n            };\n            /**\n             * Frame calculations\n             */\n            this.resolvedRelativeTargetAt = 0.0;\n            this.hasProjected = false;\n            this.isVisible = true;\n            this.animationProgress = 0;\n            /**\n             * Shared layout\n             */\n            // TODO Only running on root node\n            this.sharedNodes = new Map();\n            this.latestValues = latestValues;\n            this.root = parent ? parent.root || parent : this;\n            this.path = parent ? [...parent.path, parent] : [];\n            this.parent = parent;\n            this.depth = parent ? parent.depth + 1 : 0;\n            for (let i = 0; i < this.path.length; i++) {\n                this.path[i].shouldResetTransform = true;\n            }\n            if (this.root === this)\n                this.nodes = new FlatTree();\n        }\n        addEventListener(name, handler) {\n            if (!this.eventHandlers.has(name)) {\n                this.eventHandlers.set(name, new SubscriptionManager());\n            }\n            return this.eventHandlers.get(name).add(handler);\n        }\n        notifyListeners(name, ...args) {\n            const subscriptionManager = this.eventHandlers.get(name);\n            subscriptionManager && subscriptionManager.notify(...args);\n        }\n        hasListeners(name) {\n            return this.eventHandlers.has(name);\n        }\n        /**\n         * Lifecycles\n         */\n        mount(instance, isLayoutDirty = this.root.hasTreeAnimated) {\n            if (this.instance)\n                return;\n            this.isSVG = isSVGElement(instance);\n            this.instance = instance;\n            const { layoutId, layout, visualElement } = this.options;\n            if (visualElement && !visualElement.current) {\n                visualElement.mount(instance);\n            }\n            this.root.nodes.add(this);\n            this.parent && this.parent.children.add(this);\n            if (isLayoutDirty && (layout || layoutId)) {\n                this.isLayoutDirty = true;\n            }\n            if (attachResizeListener) {\n                let cancelDelay;\n                const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n                attachResizeListener(instance, () => {\n                    this.root.updateBlockedByResize = true;\n                    cancelDelay && cancelDelay();\n                    cancelDelay = delay(resizeUnblockUpdate, 250);\n                    if (globalProjectionState.hasAnimatedSinceResize) {\n                        globalProjectionState.hasAnimatedSinceResize = false;\n                        this.nodes.forEach(finishAnimation);\n                    }\n                });\n            }\n            if (layoutId) {\n                this.root.registerSharedNode(layoutId, this);\n            }\n            // Only register the handler if it requires layout animation\n            if (this.options.animate !== false &&\n                visualElement &&\n                (layoutId || layout)) {\n                this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeTargetChanged, layout: newLayout, }) => {\n                    if (this.isTreeAnimationBlocked()) {\n                        this.target = undefined;\n                        this.relativeTarget = undefined;\n                        return;\n                    }\n                    // TODO: Check here if an animation exists\n                    const layoutTransition = this.options.transition ||\n                        visualElement.getDefaultTransition() ||\n                        defaultLayoutTransition;\n                    const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n                    /**\n                     * The target layout of the element might stay the same,\n                     * but its position relative to its parent has changed.\n                     */\n                    const targetChanged = !this.targetLayout ||\n                        !boxEqualsRounded(this.targetLayout, newLayout) ||\n                        hasRelativeTargetChanged;\n                    /**\n                     * If the layout hasn't seemed to have changed, it might be that the\n                     * element is visually in the same place in the document but its position\n                     * relative to its parent has indeed changed. So here we check for that.\n                     */\n                    const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeTargetChanged;\n                    if (this.options.layoutRoot ||\n                        (this.resumeFrom && this.resumeFrom.instance) ||\n                        hasOnlyRelativeTargetChanged ||\n                        (hasLayoutChanged &&\n                            (targetChanged || !this.currentAnimation))) {\n                        if (this.resumeFrom) {\n                            this.resumingFrom = this.resumeFrom;\n                            this.resumingFrom.resumingFrom = undefined;\n                        }\n                        this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n                        const animationOptions = {\n                            ...getValueTransition(layoutTransition, \"layout\"),\n                            onPlay: onLayoutAnimationStart,\n                            onComplete: onLayoutAnimationComplete,\n                        };\n                        if (visualElement.shouldReduceMotion ||\n                            this.options.layoutRoot) {\n                            animationOptions.delay = 0;\n                            animationOptions.type = false;\n                        }\n                        this.startAnimation(animationOptions);\n                    }\n                    else {\n                        /**\n                         * If the layout hasn't changed and we have an animation that hasn't started yet,\n                         * finish it immediately. Otherwise it will be animating from a location\n                         * that was probably never commited to screen and look like a jumpy box.\n                         */\n                        if (!hasLayoutChanged) {\n                            finishAnimation(this);\n                        }\n                        if (this.isLead() && this.options.onExitComplete) {\n                            this.options.onExitComplete();\n                        }\n                    }\n                    this.targetLayout = newLayout;\n                });\n            }\n        }\n        unmount() {\n            this.options.layoutId && this.willUpdate();\n            this.root.nodes.remove(this);\n            const stack = this.getStack();\n            stack && stack.remove(this);\n            this.parent && this.parent.children.delete(this);\n            this.instance = undefined;\n            cancelFrame(this.updateProjection);\n        }\n        // only on the root\n        blockUpdate() {\n            this.updateManuallyBlocked = true;\n        }\n        unblockUpdate() {\n            this.updateManuallyBlocked = false;\n        }\n        isUpdateBlocked() {\n            return this.updateManuallyBlocked || this.updateBlockedByResize;\n        }\n        isTreeAnimationBlocked() {\n            return (this.isAnimationBlocked ||\n                (this.parent && this.parent.isTreeAnimationBlocked()) ||\n                false);\n        }\n        // Note: currently only running on root node\n        startUpdate() {\n            if (this.isUpdateBlocked())\n                return;\n            this.isUpdating = true;\n            this.nodes && this.nodes.forEach(resetSkewAndRotation);\n            this.animationId++;\n        }\n        getTransformTemplate() {\n            const { visualElement } = this.options;\n            return visualElement && visualElement.getProps().transformTemplate;\n        }\n        willUpdate(shouldNotifyListeners = true) {\n            this.root.hasTreeAnimated = true;\n            if (this.root.isUpdateBlocked()) {\n                this.options.onExitComplete && this.options.onExitComplete();\n                return;\n            }\n            /**\n             * If we're running optimised appear animations then these must be\n             * cancelled before measuring the DOM. This is so we can measure\n             * the true layout of the element rather than the WAAPI animation\n             * which will be unaffected by the resetSkewAndRotate step.\n             *\n             * Note: This is a DOM write. Worst case scenario is this is sandwiched\n             * between other snapshot reads which will cause unnecessary style recalculations.\n             * This has to happen here though, as we don't yet know which nodes will need\n             * snapshots in startUpdate(), but we only want to cancel optimised animations\n             * if a layout animation measurement is actually going to be affected by them.\n             */\n            if (window.MotionCancelOptimisedAnimation &&\n                !this.hasCheckedOptimisedAppear) {\n                cancelTreeOptimisedTransformAnimations(this);\n            }\n            !this.root.isUpdating && this.root.startUpdate();\n            if (this.isLayoutDirty)\n                return;\n            this.isLayoutDirty = true;\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                node.shouldResetTransform = true;\n                node.updateScroll(\"snapshot\");\n                if (node.options.layoutRoot) {\n                    node.willUpdate(false);\n                }\n            }\n            const { layoutId, layout } = this.options;\n            if (layoutId === undefined && !layout)\n                return;\n            const transformTemplate = this.getTransformTemplate();\n            this.prevTransformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            this.updateSnapshot();\n            shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n        }\n        update() {\n            this.updateScheduled = false;\n            const updateWasBlocked = this.isUpdateBlocked();\n            // When doing an instant transition, we skip the layout update,\n            // but should still clean up the measurements so that the next\n            // snapshot could be taken correctly.\n            if (updateWasBlocked) {\n                this.unblockUpdate();\n                this.clearAllSnapshots();\n                this.nodes.forEach(clearMeasurements);\n                return;\n            }\n            if (!this.isUpdating) {\n                this.nodes.forEach(clearIsLayoutDirty);\n            }\n            this.isUpdating = false;\n            /**\n             * Write\n             */\n            this.nodes.forEach(resetTransformStyle);\n            /**\n             * Read ==================\n             */\n            // Update layout measurements of updated children\n            this.nodes.forEach(updateLayout);\n            /**\n             * Write\n             */\n            // Notify listeners that the layout is updated\n            this.nodes.forEach(notifyLayoutUpdate);\n            this.clearAllSnapshots();\n            /**\n             * Manually flush any pending updates. Ideally\n             * we could leave this to the following requestAnimationFrame but this seems\n             * to leave a flash of incorrectly styled content.\n             */\n            const now = time.now();\n            frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n            frameData.timestamp = now;\n            frameData.isProcessing = true;\n            frameSteps.update.process(frameData);\n            frameSteps.preRender.process(frameData);\n            frameSteps.render.process(frameData);\n            frameData.isProcessing = false;\n        }\n        didUpdate() {\n            if (!this.updateScheduled) {\n                this.updateScheduled = true;\n                microtask.read(this.scheduleUpdate);\n            }\n        }\n        clearAllSnapshots() {\n            this.nodes.forEach(clearSnapshot);\n            this.sharedNodes.forEach(removeLeadSnapshots);\n        }\n        scheduleUpdateProjection() {\n            if (!this.projectionUpdateScheduled) {\n                this.projectionUpdateScheduled = true;\n                frame.preRender(this.updateProjection, false, true);\n            }\n        }\n        scheduleCheckAfterUnmount() {\n            /**\n             * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n             * we manually call didUpdate to give a chance to the siblings to animate.\n             * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n             */\n            frame.postRender(() => {\n                if (this.isLayoutDirty) {\n                    this.root.didUpdate();\n                }\n                else {\n                    this.root.checkUpdateFailed();\n                }\n            });\n        }\n        /**\n         * Update measurements\n         */\n        updateSnapshot() {\n            if (this.snapshot || !this.instance)\n                return;\n            this.snapshot = this.measure();\n        }\n        updateLayout() {\n            if (!this.instance)\n                return;\n            // TODO: Incorporate into a forwarded scroll offset\n            this.updateScroll();\n            if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n                !this.isLayoutDirty) {\n                return;\n            }\n            /**\n             * When a node is mounted, it simply resumes from the prevLead's\n             * snapshot instead of taking a new one, but the ancestors scroll\n             * might have updated while the prevLead is unmounted. We need to\n             * update the scroll again to make sure the layout we measure is\n             * up to date.\n             */\n            if (this.resumeFrom && !this.resumeFrom.instance) {\n                for (let i = 0; i < this.path.length; i++) {\n                    const node = this.path[i];\n                    node.updateScroll();\n                }\n            }\n            const prevLayout = this.layout;\n            this.layout = this.measure(false);\n            this.layoutCorrected = createBox();\n            this.isLayoutDirty = false;\n            this.projectionDelta = undefined;\n            this.notifyListeners(\"measure\", this.layout.layoutBox);\n            const { visualElement } = this.options;\n            visualElement &&\n                visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n        }\n        updateScroll(phase = \"measure\") {\n            let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n            if (this.scroll &&\n                this.scroll.animationId === this.root.animationId &&\n                this.scroll.phase === phase) {\n                needsMeasurement = false;\n            }\n            if (needsMeasurement) {\n                const isRoot = checkIsScrollRoot(this.instance);\n                this.scroll = {\n                    animationId: this.root.animationId,\n                    phase,\n                    isRoot,\n                    offset: measureScroll(this.instance),\n                    wasRoot: this.scroll ? this.scroll.isRoot : isRoot,\n                };\n            }\n        }\n        resetTransform() {\n            if (!resetTransform)\n                return;\n            const isResetRequested = this.isLayoutDirty ||\n                this.shouldResetTransform ||\n                this.options.alwaysMeasureLayout;\n            const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n            const transformTemplate = this.getTransformTemplate();\n            const transformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n            if (isResetRequested &&\n                (hasProjection ||\n                    hasTransform(this.latestValues) ||\n                    transformTemplateHasChanged)) {\n                resetTransform(this.instance, transformTemplateValue);\n                this.shouldResetTransform = false;\n                this.scheduleRender();\n            }\n        }\n        measure(removeTransform = true) {\n            const pageBox = this.measurePageBox();\n            let layoutBox = this.removeElementScroll(pageBox);\n            /**\n             * Measurements taken during the pre-render stage\n             * still have transforms applied so we remove them\n             * via calculation.\n             */\n            if (removeTransform) {\n                layoutBox = this.removeTransform(layoutBox);\n            }\n            roundBox(layoutBox);\n            return {\n                animationId: this.root.animationId,\n                measuredBox: pageBox,\n                layoutBox,\n                latestValues: {},\n                source: this.id,\n            };\n        }\n        measurePageBox() {\n            var _a;\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return createBox();\n            const box = visualElement.measureViewportBox();\n            const wasInScrollRoot = ((_a = this.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot) || this.path.some(checkNodeWasScrollRoot);\n            if (!wasInScrollRoot) {\n                // Remove viewport scroll to give page-relative coordinates\n                const { scroll } = this.root;\n                if (scroll) {\n                    translateAxis(box.x, scroll.offset.x);\n                    translateAxis(box.y, scroll.offset.y);\n                }\n            }\n            return box;\n        }\n        removeElementScroll(box) {\n            var _a;\n            const boxWithoutScroll = createBox();\n            copyBoxInto(boxWithoutScroll, box);\n            if ((_a = this.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot) {\n                return boxWithoutScroll;\n            }\n            /**\n             * Performance TODO: Keep a cumulative scroll offset down the tree\n             * rather than loop back up the path.\n             */\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                const { scroll, options } = node;\n                if (node !== this.root && scroll && options.layoutScroll) {\n                    /**\n                     * If this is a new scroll root, we want to remove all previous scrolls\n                     * from the viewport box.\n                     */\n                    if (scroll.wasRoot) {\n                        copyBoxInto(boxWithoutScroll, box);\n                    }\n                    translateAxis(boxWithoutScroll.x, scroll.offset.x);\n                    translateAxis(boxWithoutScroll.y, scroll.offset.y);\n                }\n            }\n            return boxWithoutScroll;\n        }\n        applyTransform(box, transformOnly = false) {\n            const withTransforms = createBox();\n            copyBoxInto(withTransforms, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!transformOnly &&\n                    node.options.layoutScroll &&\n                    node.scroll &&\n                    node !== node.root) {\n                    transformBox(withTransforms, {\n                        x: -node.scroll.offset.x,\n                        y: -node.scroll.offset.y,\n                    });\n                }\n                if (!hasTransform(node.latestValues))\n                    continue;\n                transformBox(withTransforms, node.latestValues);\n            }\n            if (hasTransform(this.latestValues)) {\n                transformBox(withTransforms, this.latestValues);\n            }\n            return withTransforms;\n        }\n        removeTransform(box) {\n            const boxWithoutTransform = createBox();\n            copyBoxInto(boxWithoutTransform, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!node.instance)\n                    continue;\n                if (!hasTransform(node.latestValues))\n                    continue;\n                hasScale(node.latestValues) && node.updateSnapshot();\n                const sourceBox = createBox();\n                const nodeBox = node.measurePageBox();\n                copyBoxInto(sourceBox, nodeBox);\n                removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, sourceBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                removeBoxTransforms(boxWithoutTransform, this.latestValues);\n            }\n            return boxWithoutTransform;\n        }\n        setTargetDelta(delta) {\n            this.targetDelta = delta;\n            this.root.scheduleUpdateProjection();\n            this.isProjectionDirty = true;\n        }\n        setOptions(options) {\n            this.options = {\n                ...this.options,\n                ...options,\n                crossfade: options.crossfade !== undefined ? options.crossfade : true,\n            };\n        }\n        clearMeasurements() {\n            this.scroll = undefined;\n            this.layout = undefined;\n            this.snapshot = undefined;\n            this.prevTransformTemplateValue = undefined;\n            this.targetDelta = undefined;\n            this.target = undefined;\n            this.isLayoutDirty = false;\n        }\n        forceRelativeParentToResolveTarget() {\n            if (!this.relativeParent)\n                return;\n            /**\n             * If the parent target isn't up-to-date, force it to update.\n             * This is an unfortunate de-optimisation as it means any updating relative\n             * projection will cause all the relative parents to recalculate back\n             * up the tree.\n             */\n            if (this.relativeParent.resolvedRelativeTargetAt !==\n                frameData.timestamp) {\n                this.relativeParent.resolveTargetDelta(true);\n            }\n        }\n        resolveTargetDelta(forceRecalculation = false) {\n            var _a;\n            /**\n             * Once the dirty status of nodes has been spread through the tree, we also\n             * need to check if we have a shared node of a different depth that has itself\n             * been dirtied.\n             */\n            const lead = this.getLead();\n            this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n            this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n            this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            /**\n             * We don't use transform for this step of processing so we don't\n             * need to check whether any nodes have changed transform.\n             */\n            const canSkip = !(forceRecalculation ||\n                (isShared && this.isSharedProjectionDirty) ||\n                this.isProjectionDirty ||\n                ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n                this.attemptToResolveRelativeTarget ||\n                this.root.updateBlockedByResize);\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If we have no layout, we can't perform projection, so early return\n             */\n            if (!this.layout || !(layout || layoutId))\n                return;\n            this.resolvedRelativeTargetAt = frameData.timestamp;\n            /**\n             * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n             * a relativeParent. This will allow a component to perform scale correction\n             * even if no animation has started.\n             */\n            if (!this.targetDelta && !this.relativeTarget) {\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    relativeParent.layout &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * If we have no relative target or no target delta our target isn't valid\n             * for this frame.\n             */\n            if (!this.relativeTarget && !this.targetDelta)\n                return;\n            /**\n             * Lazy-init target data structure\n             */\n            if (!this.target) {\n                this.target = createBox();\n                this.targetWithTransforms = createBox();\n            }\n            /**\n             * If we've got a relative box for this component, resolve it into a target relative to the parent.\n             */\n            if (this.relativeTarget &&\n                this.relativeTargetOrigin &&\n                this.relativeParent &&\n                this.relativeParent.target) {\n                this.forceRelativeParentToResolveTarget();\n                calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target);\n                /**\n                 * If we've only got a targetDelta, resolve it into a target\n                 */\n            }\n            else if (this.targetDelta) {\n                if (Boolean(this.resumingFrom)) {\n                    // TODO: This is creating a new object every frame\n                    this.target = this.applyTransform(this.layout.layoutBox);\n                }\n                else {\n                    copyBoxInto(this.target, this.layout.layoutBox);\n                }\n                applyBoxDelta(this.target, this.targetDelta);\n            }\n            else {\n                /**\n                 * If no target, use own layout as target\n                 */\n                copyBoxInto(this.target, this.layout.layoutBox);\n            }\n            /**\n             * If we've been told to attempt to resolve a relative target, do so.\n             */\n            if (this.attemptToResolveRelativeTarget) {\n                this.attemptToResolveRelativeTarget = false;\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    Boolean(relativeParent.resumingFrom) ===\n                        Boolean(this.resumingFrom) &&\n                    !relativeParent.options.layoutScroll &&\n                    relativeParent.target &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * Increase debug counter for resolved target deltas\n             */\n            if (isDebug) {\n                metrics.resolvedTargetDeltas++;\n            }\n        }\n        getClosestProjectingParent() {\n            if (!this.parent ||\n                hasScale(this.parent.latestValues) ||\n                has2DTranslate(this.parent.latestValues)) {\n                return undefined;\n            }\n            if (this.parent.isProjecting()) {\n                return this.parent;\n            }\n            else {\n                return this.parent.getClosestProjectingParent();\n            }\n        }\n        isProjecting() {\n            return Boolean((this.relativeTarget ||\n                this.targetDelta ||\n                this.options.layoutRoot) &&\n                this.layout);\n        }\n        calcProjection() {\n            var _a;\n            const lead = this.getLead();\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            let canSkip = true;\n            /**\n             * If this is a normal layout animation and neither this node nor its nearest projecting\n             * is dirty then we can't skip.\n             */\n            if (this.isProjectionDirty || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If this is a shared layout animation and this node's shared projection is dirty then\n             * we can't skip.\n             */\n            if (isShared &&\n                (this.isSharedProjectionDirty || this.isTransformDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If we have resolved the target this frame we must recalculate the\n             * projection to ensure it visually represents the internal calculations.\n             */\n            if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n                canSkip = false;\n            }\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If this section of the tree isn't animating we can\n             * delete our target sources for the following frame.\n             */\n            this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n                this.currentAnimation ||\n                this.pendingAnimation);\n            if (!this.isTreeAnimating) {\n                this.targetDelta = this.relativeTarget = undefined;\n            }\n            if (!this.layout || !(layout || layoutId))\n                return;\n            /**\n             * Reset the corrected box with the latest values from box, as we're then going\n             * to perform mutative operations on it.\n             */\n            copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n            /**\n             * Record previous tree scales before updating.\n             */\n            const prevTreeScaleX = this.treeScale.x;\n            const prevTreeScaleY = this.treeScale.y;\n            /**\n             * Apply all the parent deltas to this box to produce the corrected box. This\n             * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n             */\n            applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n            /**\n             * If this layer needs to perform scale correction but doesn't have a target,\n             * use the layout as the target.\n             */\n            if (lead.layout &&\n                !lead.target &&\n                (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n                lead.target = lead.layout.layoutBox;\n                lead.targetWithTransforms = createBox();\n            }\n            const { target } = lead;\n            if (!target) {\n                /**\n                 * If we don't have a target to project into, but we were previously\n                 * projecting, we want to remove the stored transform and schedule\n                 * a render to ensure the elements reflect the removed transform.\n                 */\n                if (this.prevProjectionDelta) {\n                    this.createProjectionDeltas();\n                    this.scheduleRender();\n                }\n                return;\n            }\n            if (!this.projectionDelta || !this.prevProjectionDelta) {\n                this.createProjectionDeltas();\n            }\n            else {\n                copyAxisDeltaInto(this.prevProjectionDelta.x, this.projectionDelta.x);\n                copyAxisDeltaInto(this.prevProjectionDelta.y, this.projectionDelta.y);\n            }\n            /**\n             * Update the delta between the corrected box and the target box before user-set transforms were applied.\n             * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n             * for our layout reprojection, but still allow them to be scaled correctly by the user.\n             * It might be that to simplify this we may want to accept that user-set scale is also corrected\n             * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n             * to allow people to choose whether these styles are corrected based on just the\n             * layout reprojection or the final bounding box.\n             */\n            calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n            if (this.treeScale.x !== prevTreeScaleX ||\n                this.treeScale.y !== prevTreeScaleY ||\n                !axisDeltaEquals(this.projectionDelta.x, this.prevProjectionDelta.x) ||\n                !axisDeltaEquals(this.projectionDelta.y, this.prevProjectionDelta.y)) {\n                this.hasProjected = true;\n                this.scheduleRender();\n                this.notifyListeners(\"projectionUpdate\", target);\n            }\n            /**\n             * Increase debug counter for recalculated projections\n             */\n            if (isDebug) {\n                metrics.recalculatedProjection++;\n            }\n        }\n        hide() {\n            this.isVisible = false;\n            // TODO: Schedule render\n        }\n        show() {\n            this.isVisible = true;\n            // TODO: Schedule render\n        }\n        scheduleRender(notifyAll = true) {\n            var _a;\n            (_a = this.options.visualElement) === null || _a === void 0 ? void 0 : _a.scheduleRender();\n            if (notifyAll) {\n                const stack = this.getStack();\n                stack && stack.scheduleRender();\n            }\n            if (this.resumingFrom && !this.resumingFrom.instance) {\n                this.resumingFrom = undefined;\n            }\n        }\n        createProjectionDeltas() {\n            this.prevProjectionDelta = createDelta();\n            this.projectionDelta = createDelta();\n            this.projectionDeltaWithTransform = createDelta();\n        }\n        setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n            const snapshot = this.snapshot;\n            const snapshotLatestValues = snapshot\n                ? snapshot.latestValues\n                : {};\n            const mixedValues = { ...this.latestValues };\n            const targetDelta = createDelta();\n            if (!this.relativeParent ||\n                !this.relativeParent.options.layoutRoot) {\n                this.relativeTarget = this.relativeTargetOrigin = undefined;\n            }\n            this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n            const relativeLayout = createBox();\n            const snapshotSource = snapshot ? snapshot.source : undefined;\n            const layoutSource = this.layout ? this.layout.source : undefined;\n            const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n            const stack = this.getStack();\n            const isOnlyMember = !stack || stack.members.length <= 1;\n            const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n                !isOnlyMember &&\n                this.options.crossfade === true &&\n                !this.path.some(hasOpacityCrossfade));\n            this.animationProgress = 0;\n            let prevRelativeTarget;\n            this.mixTargetDelta = (latest) => {\n                const progress = latest / 1000;\n                mixAxisDelta(targetDelta.x, delta.x, progress);\n                mixAxisDelta(targetDelta.y, delta.y, progress);\n                this.setTargetDelta(targetDelta);\n                if (this.relativeTarget &&\n                    this.relativeTargetOrigin &&\n                    this.layout &&\n                    this.relativeParent &&\n                    this.relativeParent.layout) {\n                    calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n                    mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n                    /**\n                     * If this is an unchanged relative target we can consider the\n                     * projection not dirty.\n                     */\n                    if (prevRelativeTarget &&\n                        boxEquals(this.relativeTarget, prevRelativeTarget)) {\n                        this.isProjectionDirty = false;\n                    }\n                    if (!prevRelativeTarget)\n                        prevRelativeTarget = createBox();\n                    copyBoxInto(prevRelativeTarget, this.relativeTarget);\n                }\n                if (isSharedLayoutAnimation) {\n                    this.animationValues = mixedValues;\n                    mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n                }\n                this.root.scheduleUpdateProjection();\n                this.scheduleRender();\n                this.animationProgress = progress;\n            };\n            this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n        }\n        startAnimation(options) {\n            this.notifyListeners(\"animationStart\");\n            this.currentAnimation && this.currentAnimation.stop();\n            if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n                this.resumingFrom.currentAnimation.stop();\n            }\n            if (this.pendingAnimation) {\n                cancelFrame(this.pendingAnimation);\n                this.pendingAnimation = undefined;\n            }\n            /**\n             * Start the animation in the next frame to have a frame with progress 0,\n             * where the target is the same as when the animation started, so we can\n             * calculate the relative positions correctly for instant transitions.\n             */\n            this.pendingAnimation = frame.update(() => {\n                globalProjectionState.hasAnimatedSinceResize = true;\n                this.currentAnimation = animateSingleValue(0, animationTarget, {\n                    ...options,\n                    onUpdate: (latest) => {\n                        this.mixTargetDelta(latest);\n                        options.onUpdate && options.onUpdate(latest);\n                    },\n                    onComplete: () => {\n                        options.onComplete && options.onComplete();\n                        this.completeAnimation();\n                    },\n                });\n                if (this.resumingFrom) {\n                    this.resumingFrom.currentAnimation = this.currentAnimation;\n                }\n                this.pendingAnimation = undefined;\n            });\n        }\n        completeAnimation() {\n            if (this.resumingFrom) {\n                this.resumingFrom.currentAnimation = undefined;\n                this.resumingFrom.preserveOpacity = undefined;\n            }\n            const stack = this.getStack();\n            stack && stack.exitAnimationComplete();\n            this.resumingFrom =\n                this.currentAnimation =\n                    this.animationValues =\n                        undefined;\n            this.notifyListeners(\"animationComplete\");\n        }\n        finishAnimation() {\n            if (this.currentAnimation) {\n                this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n                this.currentAnimation.stop();\n            }\n            this.completeAnimation();\n        }\n        applyTransformsToTarget() {\n            const lead = this.getLead();\n            let { targetWithTransforms, target, layout, latestValues } = lead;\n            if (!targetWithTransforms || !target || !layout)\n                return;\n            /**\n             * If we're only animating position, and this element isn't the lead element,\n             * then instead of projecting into the lead box we instead want to calculate\n             * a new target that aligns the two boxes but maintains the layout shape.\n             */\n            if (this !== lead &&\n                this.layout &&\n                layout &&\n                shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n                target = this.target || createBox();\n                const xLength = calcLength(this.layout.layoutBox.x);\n                target.x.min = lead.target.x.min;\n                target.x.max = target.x.min + xLength;\n                const yLength = calcLength(this.layout.layoutBox.y);\n                target.y.min = lead.target.y.min;\n                target.y.max = target.y.min + yLength;\n            }\n            copyBoxInto(targetWithTransforms, target);\n            /**\n             * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n             * This is the final box that we will then project into by calculating a transform delta and\n             * applying it to the corrected box.\n             */\n            transformBox(targetWithTransforms, latestValues);\n            /**\n             * Update the delta between the corrected box and the final target box, after\n             * user-set transforms are applied to it. This will be used by the renderer to\n             * create a transform style that will reproject the element from its layout layout\n             * into the desired bounding box.\n             */\n            calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n        }\n        registerSharedNode(layoutId, node) {\n            if (!this.sharedNodes.has(layoutId)) {\n                this.sharedNodes.set(layoutId, new NodeStack());\n            }\n            const stack = this.sharedNodes.get(layoutId);\n            stack.add(node);\n            const config = node.options.initialPromotionConfig;\n            node.promote({\n                transition: config ? config.transition : undefined,\n                preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n                    ? config.shouldPreserveFollowOpacity(node)\n                    : undefined,\n            });\n        }\n        isLead() {\n            const stack = this.getStack();\n            return stack ? stack.lead === this : true;\n        }\n        getLead() {\n            var _a;\n            const { layoutId } = this.options;\n            return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n        }\n        getPrevLead() {\n            var _a;\n            const { layoutId } = this.options;\n            return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.prevLead : undefined;\n        }\n        getStack() {\n            const { layoutId } = this.options;\n            if (layoutId)\n                return this.root.sharedNodes.get(layoutId);\n        }\n        promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n            const stack = this.getStack();\n            if (stack)\n                stack.promote(this, preserveFollowOpacity);\n            if (needsReset) {\n                this.projectionDelta = undefined;\n                this.needsReset = true;\n            }\n            if (transition)\n                this.setOptions({ transition });\n        }\n        relegate() {\n            const stack = this.getStack();\n            if (stack) {\n                return stack.relegate(this);\n            }\n            else {\n                return false;\n            }\n        }\n        resetSkewAndRotation() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return;\n            // If there's no detected skew or rotation values, we can early return without a forced render.\n            let hasDistortingTransform = false;\n            /**\n             * An unrolled check for rotation values. Most elements don't have any rotation and\n             * skipping the nested loop and new object creation is 50% faster.\n             */\n            const { latestValues } = visualElement;\n            if (latestValues.z ||\n                latestValues.rotate ||\n                latestValues.rotateX ||\n                latestValues.rotateY ||\n                latestValues.rotateZ ||\n                latestValues.skewX ||\n                latestValues.skewY) {\n                hasDistortingTransform = true;\n            }\n            // If there's no distorting values, we don't need to do any more.\n            if (!hasDistortingTransform)\n                return;\n            const resetValues = {};\n            if (latestValues.z) {\n                resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n            }\n            // Check the skew and rotate value of all axes and reset to 0\n            for (let i = 0; i < transformAxes.length; i++) {\n                resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n                resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n            }\n            // Force a render of this element to apply the transform with all skews and rotations\n            // set to 0.\n            visualElement.render();\n            // Put back all the values we reset\n            for (const key in resetValues) {\n                visualElement.setStaticValue(key, resetValues[key]);\n                if (this.animationValues) {\n                    this.animationValues[key] = resetValues[key];\n                }\n            }\n            // Schedule a render for the next frame. This ensures we won't visually\n            // see the element with the reset rotate value applied.\n            visualElement.scheduleRender();\n        }\n        getProjectionStyles(styleProp) {\n            var _a, _b;\n            if (!this.instance || this.isSVG)\n                return undefined;\n            if (!this.isVisible) {\n                return hiddenVisibility;\n            }\n            const styles = {\n                visibility: \"\",\n            };\n            const transformTemplate = this.getTransformTemplate();\n            if (this.needsReset) {\n                this.needsReset = false;\n                styles.opacity = \"\";\n                styles.pointerEvents =\n                    resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n                styles.transform = transformTemplate\n                    ? transformTemplate(this.latestValues, \"\")\n                    : \"none\";\n                return styles;\n            }\n            const lead = this.getLead();\n            if (!this.projectionDelta || !this.layout || !lead.target) {\n                const emptyStyles = {};\n                if (this.options.layoutId) {\n                    emptyStyles.opacity =\n                        this.latestValues.opacity !== undefined\n                            ? this.latestValues.opacity\n                            : 1;\n                    emptyStyles.pointerEvents =\n                        resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n                }\n                if (this.hasProjected && !hasTransform(this.latestValues)) {\n                    emptyStyles.transform = transformTemplate\n                        ? transformTemplate({}, \"\")\n                        : \"none\";\n                    this.hasProjected = false;\n                }\n                return emptyStyles;\n            }\n            const valuesToRender = lead.animationValues || lead.latestValues;\n            this.applyTransformsToTarget();\n            styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n            if (transformTemplate) {\n                styles.transform = transformTemplate(valuesToRender, styles.transform);\n            }\n            const { x, y } = this.projectionDelta;\n            styles.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n            if (lead.animationValues) {\n                /**\n                 * If the lead component is animating, assign this either the entering/leaving\n                 * opacity\n                 */\n                styles.opacity =\n                    lead === this\n                        ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 1\n                        : this.preserveOpacity\n                            ? this.latestValues.opacity\n                            : valuesToRender.opacityExit;\n            }\n            else {\n                /**\n                 * Or we're not animating at all, set the lead component to its layout\n                 * opacity and other components to hidden.\n                 */\n                styles.opacity =\n                    lead === this\n                        ? valuesToRender.opacity !== undefined\n                            ? valuesToRender.opacity\n                            : \"\"\n                        : valuesToRender.opacityExit !== undefined\n                            ? valuesToRender.opacityExit\n                            : 0;\n            }\n            /**\n             * Apply scale correction\n             */\n            for (const key in scaleCorrectors) {\n                if (valuesToRender[key] === undefined)\n                    continue;\n                const { correct, applyTo } = scaleCorrectors[key];\n                /**\n                 * Only apply scale correction to the value if we have an\n                 * active projection transform. Otherwise these values become\n                 * vulnerable to distortion if the element changes size without\n                 * a corresponding layout animation.\n                 */\n                const corrected = styles.transform === \"none\"\n                    ? valuesToRender[key]\n                    : correct(valuesToRender[key], lead);\n                if (applyTo) {\n                    const num = applyTo.length;\n                    for (let i = 0; i < num; i++) {\n                        styles[applyTo[i]] = corrected;\n                    }\n                }\n                else {\n                    styles[key] = corrected;\n                }\n            }\n            /**\n             * Disable pointer events on follow components. This is to ensure\n             * that if a follow component covers a lead component it doesn't block\n             * pointer events on the lead.\n             */\n            if (this.options.layoutId) {\n                styles.pointerEvents =\n                    lead === this\n                        ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\"\n                        : \"none\";\n            }\n            return styles;\n        }\n        clearSnapshot() {\n            this.resumeFrom = this.snapshot = undefined;\n        }\n        // Only run on root\n        resetTree() {\n            this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.stop(); });\n            this.root.nodes.forEach(clearMeasurements);\n            this.root.sharedNodes.clear();\n        }\n    };\n}\nfunction updateLayout(node) {\n    node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n    var _a;\n    const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.snapshot) || node.snapshot;\n    if (node.isLead() &&\n        node.layout &&\n        snapshot &&\n        node.hasListeners(\"didUpdate\")) {\n        const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n        const { animationType } = node.options;\n        const isShared = snapshot.source !== node.layout.source;\n        // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n        // animations for instance if layout=\"size\" and an element has only changed position\n        if (animationType === \"size\") {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(axisSnapshot);\n                axisSnapshot.min = layout[axis].min;\n                axisSnapshot.max = axisSnapshot.min + length;\n            });\n        }\n        else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(layout[axis]);\n                axisSnapshot.max = axisSnapshot.min + length;\n                /**\n                 * Ensure relative target gets resized and rerendererd\n                 */\n                if (node.relativeTarget && !node.currentAnimation) {\n                    node.isProjectionDirty = true;\n                    node.relativeTarget[axis].max =\n                        node.relativeTarget[axis].min + length;\n                }\n            });\n        }\n        const layoutDelta = createDelta();\n        calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n        const visualDelta = createDelta();\n        if (isShared) {\n            calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n        }\n        else {\n            calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n        }\n        const hasLayoutChanged = !isDeltaZero(layoutDelta);\n        let hasRelativeTargetChanged = false;\n        if (!node.resumeFrom) {\n            const relativeParent = node.getClosestProjectingParent();\n            /**\n             * If the relativeParent is itself resuming from a different element then\n             * the relative snapshot is not relavent\n             */\n            if (relativeParent && !relativeParent.resumeFrom) {\n                const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n                if (parentSnapshot && parentLayout) {\n                    const relativeSnapshot = createBox();\n                    calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n                    const relativeLayout = createBox();\n                    calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n                    if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n                        hasRelativeTargetChanged = true;\n                    }\n                    if (relativeParent.options.layoutRoot) {\n                        node.relativeTarget = relativeLayout;\n                        node.relativeTargetOrigin = relativeSnapshot;\n                        node.relativeParent = relativeParent;\n                    }\n                }\n            }\n        }\n        node.notifyListeners(\"didUpdate\", {\n            layout,\n            snapshot,\n            delta: visualDelta,\n            layoutDelta,\n            hasLayoutChanged,\n            hasRelativeTargetChanged,\n        });\n    }\n    else if (node.isLead()) {\n        const { onExitComplete } = node.options;\n        onExitComplete && onExitComplete();\n    }\n    /**\n     * Clearing transition\n     * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n     * and why we need it at all\n     */\n    node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n    /**\n     * Increase debug counter for nodes encountered this frame\n     */\n    if (isDebug) {\n        metrics.totalNodes++;\n    }\n    if (!node.parent)\n        return;\n    /**\n     * If this node isn't projecting, propagate isProjectionDirty. It will have\n     * no performance impact but it will allow the next child that *is* projecting\n     * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n     * correcting.\n     */\n    if (!node.isProjecting()) {\n        node.isProjectionDirty = node.parent.isProjectionDirty;\n    }\n    /**\n     * Propagate isSharedProjectionDirty and isTransformDirty\n     * throughout the whole tree. A future revision can take another look at\n     * this but for safety we still recalcualte shared nodes.\n     */\n    node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n        node.parent.isProjectionDirty ||\n        node.parent.isSharedProjectionDirty));\n    node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n    node.isProjectionDirty =\n        node.isSharedProjectionDirty =\n            node.isTransformDirty =\n                false;\n}\nfunction clearSnapshot(node) {\n    node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n    node.clearMeasurements();\n}\nfunction clearIsLayoutDirty(node) {\n    node.isLayoutDirty = false;\n}\nfunction resetTransformStyle(node) {\n    const { visualElement } = node.options;\n    if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n        visualElement.notify(\"BeforeLayoutMeasure\");\n    }\n    node.resetTransform();\n}\nfunction finishAnimation(node) {\n    node.finishAnimation();\n    node.targetDelta = node.relativeTarget = node.target = undefined;\n    node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n    node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n    node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n    node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n    stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n    output.translate = mixNumber(delta.translate, 0, p);\n    output.scale = mixNumber(delta.scale, 1, p);\n    output.origin = delta.origin;\n    output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n    output.min = mixNumber(from.min, to.min, p);\n    output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n    mixAxis(output.x, from.x, to.x, p);\n    mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n    return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n    duration: 0.45,\n    ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n    navigator.userAgent &&\n    navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n    ? Math.round\n    : noop;\nfunction roundAxis(axis) {\n    // Round to the nearest .5 pixels to support subpixel layouts\n    axis.min = roundPoint(axis.min);\n    axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n    roundAxis(box.x);\n    roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n    return (animationType === \"position\" ||\n        (animationType === \"preserve-aspect\" &&\n            !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\nfunction checkNodeWasScrollRoot(node) {\n    var _a;\n    return node !== node.root && ((_a = node.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot);\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n    attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n    measureScroll: () => ({\n        x: document.documentElement.scrollLeft || document.body.scrollLeft,\n        y: document.documentElement.scrollTop || document.body.scrollTop,\n    }),\n    checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n    current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n    measureScroll: (instance) => ({\n        x: instance.scrollLeft,\n        y: instance.scrollTop,\n    }),\n    defaultParent: () => {\n        if (!rootProjectionNode.current) {\n            const documentNode = new DocumentProjectionNode({});\n            documentNode.mount(window);\n            documentNode.setOptions({ layoutScroll: true });\n            rootProjectionNode.current = documentNode;\n        }\n        return rootProjectionNode.current;\n    },\n    resetTransform: (instance, value) => {\n        instance.style.transform = value !== undefined ? value : \"none\";\n    },\n    checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n    pan: {\n        Feature: PanGesture,\n    },\n    drag: {\n        Feature: DragGesture,\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { drag };\n","import { Feature } from '../motion/features/Feature.mjs';\nimport { hover } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction handleHoverEvent(node, event, lifecycle) {\n    const { props } = node;\n    if (node.animationState && props.whileHover) {\n        node.animationState.setActive(\"whileHover\", lifecycle === \"Start\");\n    }\n    const eventName = (\"onHover\" + lifecycle);\n    const callback = props[eventName];\n    if (callback) {\n        frame.postRender(() => callback(event, extractEventInfo(event)));\n    }\n}\nclass HoverGesture extends Feature {\n    mount() {\n        const { current } = this.node;\n        if (!current)\n            return;\n        this.unmount = hover(current, (startEvent) => {\n            handleHoverEvent(this.node, startEvent, \"Start\");\n            return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\");\n        });\n    }\n    unmount() { }\n}\n\nexport { HoverGesture };\n","import { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\nclass FocusGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.isActive = false;\n    }\n    onFocus() {\n        let isFocusVisible = false;\n        /**\n         * If this element doesn't match focus-visible then don't\n         * apply whileHover. But, if matches throws that focus-visible\n         * is not a valid selector then in that browser outline styles will be applied\n         * to the element by default and we want to match that behaviour with whileFocus.\n         */\n        try {\n            isFocusVisible = this.node.current.matches(\":focus-visible\");\n        }\n        catch (e) {\n            isFocusVisible = true;\n        }\n        if (!isFocusVisible || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", true);\n        this.isActive = true;\n    }\n    onBlur() {\n        if (!this.isActive || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", false);\n        this.isActive = false;\n    }\n    mount() {\n        this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n    }\n    unmount() { }\n}\n\nexport { FocusGesture };\n","import { Feature } from '../motion/features/Feature.mjs';\nimport { press } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction handlePressEvent(node, event, lifecycle) {\n    const { props } = node;\n    if (node.animationState && props.whileTap) {\n        node.animationState.setActive(\"whileTap\", lifecycle === \"Start\");\n    }\n    const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle));\n    const callback = props[eventName];\n    if (callback) {\n        frame.postRender(() => callback(event, extractEventInfo(event)));\n    }\n}\nclass PressGesture extends Feature {\n    mount() {\n        const { current } = this.node;\n        if (!current)\n            return;\n        this.unmount = press(current, (startEvent) => {\n            handlePressEvent(this.node, startEvent, \"Start\");\n            return (endEvent, { success }) => handlePressEvent(this.node, endEvent, success ? \"End\" : \"Cancel\");\n        }, { useGlobalTarget: this.node.props.globalTapTarget });\n    }\n    unmount() { }\n}\n\nexport { PressGesture };\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n    const callback = observerCallbacks.get(entry.target);\n    callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n    entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n    const lookupRoot = root || document;\n    /**\n     * If we don't have an observer lookup map for this root, create one.\n     */\n    if (!observers.has(lookupRoot)) {\n        observers.set(lookupRoot, {});\n    }\n    const rootObservers = observers.get(lookupRoot);\n    const key = JSON.stringify(options);\n    /**\n     * If we don't have an observer for this combination of root and settings,\n     * create one.\n     */\n    if (!rootObservers[key]) {\n        rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n    }\n    return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n    const rootInteresectionObserver = initIntersectionObserver(options);\n    observerCallbacks.set(element, callback);\n    rootInteresectionObserver.observe(element);\n    return () => {\n        observerCallbacks.delete(element);\n        rootInteresectionObserver.unobserve(element);\n    };\n}\n\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n    some: 0,\n    all: 1,\n};\nclass InViewFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.hasEnteredView = false;\n        this.isInView = false;\n    }\n    startObserver() {\n        this.unmount();\n        const { viewport = {} } = this.node.getProps();\n        const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n        const options = {\n            root: root ? root.current : undefined,\n            rootMargin,\n            threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n        };\n        const onIntersectionUpdate = (entry) => {\n            const { isIntersecting } = entry;\n            /**\n             * If there's been no change in the viewport state, early return.\n             */\n            if (this.isInView === isIntersecting)\n                return;\n            this.isInView = isIntersecting;\n            /**\n             * Handle hasEnteredView. If this is only meant to run once, and\n             * element isn't visible, early return. Otherwise set hasEnteredView to true.\n             */\n            if (once && !isIntersecting && this.hasEnteredView) {\n                return;\n            }\n            else if (isIntersecting) {\n                this.hasEnteredView = true;\n            }\n            if (this.node.animationState) {\n                this.node.animationState.setActive(\"whileInView\", isIntersecting);\n            }\n            /**\n             * Use the latest committed props rather than the ones in scope\n             * when this observer is created\n             */\n            const { onViewportEnter, onViewportLeave } = this.node.getProps();\n            const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n            callback && callback(entry);\n        };\n        return observeIntersection(this.node.current, options, onIntersectionUpdate);\n    }\n    mount() {\n        this.startObserver();\n    }\n    update() {\n        if (typeof IntersectionObserver === \"undefined\")\n            return;\n        const { props, prevProps } = this.node;\n        const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n        if (hasOptionsChanged) {\n            this.startObserver();\n        }\n    }\n    unmount() { }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n    return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n    inView: {\n        Feature: InViewFeature,\n    },\n    tap: {\n        Feature: PressGesture,\n    },\n    focus: {\n        Feature: FocusGesture,\n    },\n    hover: {\n        Feature: HoverGesture,\n    },\n};\n\nexport { gestureAnimations };\n","import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n    layout: {\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { layout };\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n","import { isBrowser } from '../is-browser.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nfunction initPrefersReducedMotion() {\n    hasReducedMotionListener.current = true;\n    if (!isBrowser)\n        return;\n    if (window.matchMedia) {\n        const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n        const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n        motionMediaQuery.addListener(setReducedMotionPreferences);\n        setReducedMotionPreferences();\n    }\n    else {\n        prefersReducedMotion.current = false;\n    }\n}\n\nexport { initPrefersReducedMotion };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { complex } from '../../../value/types/complex/index.mjs';\nimport { dimensionValueTypes } from './dimensions.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { warnOnce } from '../../utils/warn-once.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n    for (const key in next) {\n        const nextValue = next[key];\n        const prevValue = prev[key];\n        if (isMotionValue(nextValue)) {\n            /**\n             * If this is a motion value found in props or style, we want to add it\n             * to our visual element's motion value map.\n             */\n            element.addValue(key, nextValue);\n            /**\n             * Check the version of the incoming motion value with this version\n             * and warn against mismatches.\n             */\n            if (process.env.NODE_ENV === \"development\") {\n                warnOnce(nextValue.version === \"11.18.2\", `Attempting to mix Motion versions ${nextValue.version} with 11.18.2 may not work as expected.`);\n            }\n        }\n        else if (isMotionValue(prevValue)) {\n            /**\n             * If we're swapping from a motion value to a static value,\n             * create a new motion value from that\n             */\n            element.addValue(key, motionValue(nextValue, { owner: element }));\n        }\n        else if (prevValue !== nextValue) {\n            /**\n             * If this is a flat value that has changed, update the motion value\n             * or create one if it doesn't exist. We only want to do this if we're\n             * not handling the value with our animation state.\n             */\n            if (element.hasValue(key)) {\n                const existingValue = element.getValue(key);\n                if (existingValue.liveStyle === true) {\n                    existingValue.jump(nextValue);\n                }\n                else if (!existingValue.hasAnimated) {\n                    existingValue.set(nextValue);\n                }\n            }\n            else {\n                const latestValue = element.getStaticValue(key);\n                element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n            }\n        }\n    }\n    // Handle removed values\n    for (const key in prev) {\n        if (next[key] === undefined)\n            element.removeValue(key);\n    }\n    return next;\n}\n\nexport { updateMotionValuesFromProps };\n","import { time } from '../frameloop/sync-time.mjs';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { isNumericalString } from '../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../utils/is-zero-value-string.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { complex } from '../value/types/complex/index.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { getAnimatableNone } from './dom/value-types/animatable-none.mjs';\nimport { findValueType } from './dom/value-types/find.mjs';\nimport { transformProps } from './html/utils/keys-transform.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { KeyframeResolver } from './utils/KeyframesResolver.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst propEventHandlers = [\n    \"AnimationStart\",\n    \"AnimationComplete\",\n    \"Update\",\n    \"BeforeLayoutMeasure\",\n    \"LayoutMeasure\",\n    \"LayoutAnimationStart\",\n    \"LayoutAnimationComplete\",\n];\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n    /**\n     * This method takes React props and returns found MotionValues. For example, HTML\n     * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n     *\n     * This isn't an abstract method as it needs calling in the constructor, but it is\n     * intended to be one.\n     */\n    scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n        return {};\n    }\n    constructor({ parent, props, presenceContext, reducedMotionConfig, blockInitialAnimation, visualState, }, options = {}) {\n        /**\n         * A reference to the current underlying Instance, e.g. a HTMLElement\n         * or Three.Mesh etc.\n         */\n        this.current = null;\n        /**\n         * A set containing references to this VisualElement's children.\n         */\n        this.children = new Set();\n        /**\n         * Determine what role this visual element should take in the variant tree.\n         */\n        this.isVariantNode = false;\n        this.isControllingVariants = false;\n        /**\n         * Decides whether this VisualElement should animate in reduced motion\n         * mode.\n         *\n         * TODO: This is currently set on every individual VisualElement but feels\n         * like it could be set globally.\n         */\n        this.shouldReduceMotion = null;\n        /**\n         * A map of all motion values attached to this visual element. Motion\n         * values are source of truth for any given animated value. A motion\n         * value might be provided externally by the component via props.\n         */\n        this.values = new Map();\n        this.KeyframeResolver = KeyframeResolver;\n        /**\n         * Cleanup functions for active features (hover/tap/exit etc)\n         */\n        this.features = {};\n        /**\n         * A map of every subscription that binds the provided or generated\n         * motion values onChange listeners to this visual element.\n         */\n        this.valueSubscriptions = new Map();\n        /**\n         * A reference to the previously-provided motion values as returned\n         * from scrapeMotionValuesFromProps. We use the keys in here to determine\n         * if any motion values need to be removed after props are updated.\n         */\n        this.prevMotionValues = {};\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        /**\n         * An object containing an unsubscribe function for each prop event subscription.\n         * For example, every \"Update\" event can have multiple subscribers via\n         * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n         */\n        this.propEventSubscriptions = {};\n        this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n        this.render = () => {\n            if (!this.current)\n                return;\n            this.triggerBuild();\n            this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n        };\n        this.renderScheduledAt = 0.0;\n        this.scheduleRender = () => {\n            const now = time.now();\n            if (this.renderScheduledAt < now) {\n                this.renderScheduledAt = now;\n                frame.render(this.render, false, true);\n            }\n        };\n        const { latestValues, renderState, onUpdate } = visualState;\n        this.onUpdate = onUpdate;\n        this.latestValues = latestValues;\n        this.baseTarget = { ...latestValues };\n        this.initialValues = props.initial ? { ...latestValues } : {};\n        this.renderState = renderState;\n        this.parent = parent;\n        this.props = props;\n        this.presenceContext = presenceContext;\n        this.depth = parent ? parent.depth + 1 : 0;\n        this.reducedMotionConfig = reducedMotionConfig;\n        this.options = options;\n        this.blockInitialAnimation = Boolean(blockInitialAnimation);\n        this.isControllingVariants = isControllingVariants(props);\n        this.isVariantNode = isVariantNode(props);\n        if (this.isVariantNode) {\n            this.variantChildren = new Set();\n        }\n        this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n        /**\n         * Any motion values that are provided to the element when created\n         * aren't yet bound to the element, as this would technically be impure.\n         * However, we iterate through the motion values and set them to the\n         * initial values for this component.\n         *\n         * TODO: This is impure and we should look at changing this to run on mount.\n         * Doing so will break some tests but this isn't necessarily a breaking change,\n         * more a reflection of the test.\n         */\n        const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n        for (const key in initialMotionValues) {\n            const value = initialMotionValues[key];\n            if (latestValues[key] !== undefined && isMotionValue(value)) {\n                value.set(latestValues[key], false);\n            }\n        }\n    }\n    mount(instance) {\n        this.current = instance;\n        visualElementStore.set(instance, this);\n        if (this.projection && !this.projection.instance) {\n            this.projection.mount(instance);\n        }\n        if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n            this.removeFromVariantTree = this.parent.addVariantChild(this);\n        }\n        this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n        if (!hasReducedMotionListener.current) {\n            initPrefersReducedMotion();\n        }\n        this.shouldReduceMotion =\n            this.reducedMotionConfig === \"never\"\n                ? false\n                : this.reducedMotionConfig === \"always\"\n                    ? true\n                    : prefersReducedMotion.current;\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\");\n        }\n        if (this.parent)\n            this.parent.children.add(this);\n        this.update(this.props, this.presenceContext);\n    }\n    unmount() {\n        visualElementStore.delete(this.current);\n        this.projection && this.projection.unmount();\n        cancelFrame(this.notifyUpdate);\n        cancelFrame(this.render);\n        this.valueSubscriptions.forEach((remove) => remove());\n        this.valueSubscriptions.clear();\n        this.removeFromVariantTree && this.removeFromVariantTree();\n        this.parent && this.parent.children.delete(this);\n        for (const key in this.events) {\n            this.events[key].clear();\n        }\n        for (const key in this.features) {\n            const feature = this.features[key];\n            if (feature) {\n                feature.unmount();\n                feature.isMounted = false;\n            }\n        }\n        this.current = null;\n    }\n    bindToMotionValue(key, value) {\n        if (this.valueSubscriptions.has(key)) {\n            this.valueSubscriptions.get(key)();\n        }\n        const valueIsTransform = transformProps.has(key);\n        const removeOnChange = value.on(\"change\", (latestValue) => {\n            this.latestValues[key] = latestValue;\n            this.props.onUpdate && frame.preRender(this.notifyUpdate);\n            if (valueIsTransform && this.projection) {\n                this.projection.isTransformDirty = true;\n            }\n        });\n        const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n        let removeSyncCheck;\n        if (window.MotionCheckAppearSync) {\n            removeSyncCheck = window.MotionCheckAppearSync(this, key, value);\n        }\n        this.valueSubscriptions.set(key, () => {\n            removeOnChange();\n            removeOnRenderRequest();\n            if (removeSyncCheck)\n                removeSyncCheck();\n            if (value.owner)\n                value.stop();\n        });\n    }\n    sortNodePosition(other) {\n        /**\n         * If these nodes aren't even of the same type we can't compare their depth.\n         */\n        if (!this.current ||\n            !this.sortInstanceNodePosition ||\n            this.type !== other.type) {\n            return 0;\n        }\n        return this.sortInstanceNodePosition(this.current, other.current);\n    }\n    updateFeatures() {\n        let key = \"animation\";\n        for (key in featureDefinitions) {\n            const featureDefinition = featureDefinitions[key];\n            if (!featureDefinition)\n                continue;\n            const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n            /**\n             * If this feature is enabled but not active, make a new instance.\n             */\n            if (!this.features[key] &&\n                FeatureConstructor &&\n                isEnabled(this.props)) {\n                this.features[key] = new FeatureConstructor(this);\n            }\n            /**\n             * If we have a feature, mount or update it.\n             */\n            if (this.features[key]) {\n                const feature = this.features[key];\n                if (feature.isMounted) {\n                    feature.update();\n                }\n                else {\n                    feature.mount();\n                    feature.isMounted = true;\n                }\n            }\n        }\n    }\n    triggerBuild() {\n        this.build(this.renderState, this.latestValues, this.props);\n    }\n    /**\n     * Measure the current viewport box with or without transforms.\n     * Only measures axis-aligned boxes, rotate and skew must be manually\n     * removed with a re-render to work.\n     */\n    measureViewportBox() {\n        return this.current\n            ? this.measureInstanceViewportBox(this.current, this.props)\n            : createBox();\n    }\n    getStaticValue(key) {\n        return this.latestValues[key];\n    }\n    setStaticValue(key, value) {\n        this.latestValues[key] = value;\n    }\n    /**\n     * Update the provided props. Ensure any newly-added motion values are\n     * added to our map, old ones removed, and listeners updated.\n     */\n    update(props, presenceContext) {\n        if (props.transformTemplate || this.props.transformTemplate) {\n            this.scheduleRender();\n        }\n        this.prevProps = this.props;\n        this.props = props;\n        this.prevPresenceContext = this.presenceContext;\n        this.presenceContext = presenceContext;\n        /**\n         * Update prop event handlers ie onAnimationStart, onAnimationComplete\n         */\n        for (let i = 0; i < propEventHandlers.length; i++) {\n            const key = propEventHandlers[i];\n            if (this.propEventSubscriptions[key]) {\n                this.propEventSubscriptions[key]();\n                delete this.propEventSubscriptions[key];\n            }\n            const listenerName = (\"on\" + key);\n            const listener = props[listenerName];\n            if (listener) {\n                this.propEventSubscriptions[key] = this.on(key, listener);\n            }\n        }\n        this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps, this), this.prevMotionValues);\n        if (this.handleChildMotionValue) {\n            this.handleChildMotionValue();\n        }\n        this.onUpdate && this.onUpdate(this);\n    }\n    getProps() {\n        return this.props;\n    }\n    /**\n     * Returns the variant definition with a given name.\n     */\n    getVariant(name) {\n        return this.props.variants ? this.props.variants[name] : undefined;\n    }\n    /**\n     * Returns the defined default transition on this component.\n     */\n    getDefaultTransition() {\n        return this.props.transition;\n    }\n    getTransformPagePoint() {\n        return this.props.transformPagePoint;\n    }\n    getClosestVariantNode() {\n        return this.isVariantNode\n            ? this\n            : this.parent\n                ? this.parent.getClosestVariantNode()\n                : undefined;\n    }\n    /**\n     * Add a child visual element to our set of children.\n     */\n    addVariantChild(child) {\n        const closestVariantNode = this.getClosestVariantNode();\n        if (closestVariantNode) {\n            closestVariantNode.variantChildren &&\n                closestVariantNode.variantChildren.add(child);\n            return () => closestVariantNode.variantChildren.delete(child);\n        }\n    }\n    /**\n     * Add a motion value and bind it to this visual element.\n     */\n    addValue(key, value) {\n        // Remove existing value if it exists\n        const existingValue = this.values.get(key);\n        if (value !== existingValue) {\n            if (existingValue)\n                this.removeValue(key);\n            this.bindToMotionValue(key, value);\n            this.values.set(key, value);\n            this.latestValues[key] = value.get();\n        }\n    }\n    /**\n     * Remove a motion value and unbind any active subscriptions.\n     */\n    removeValue(key) {\n        this.values.delete(key);\n        const unsubscribe = this.valueSubscriptions.get(key);\n        if (unsubscribe) {\n            unsubscribe();\n            this.valueSubscriptions.delete(key);\n        }\n        delete this.latestValues[key];\n        this.removeValueFromRenderState(key, this.renderState);\n    }\n    /**\n     * Check whether we have a motion value for this key\n     */\n    hasValue(key) {\n        return this.values.has(key);\n    }\n    getValue(key, defaultValue) {\n        if (this.props.values && this.props.values[key]) {\n            return this.props.values[key];\n        }\n        let value = this.values.get(key);\n        if (value === undefined && defaultValue !== undefined) {\n            value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n            this.addValue(key, value);\n        }\n        return value;\n    }\n    /**\n     * If we're trying to animate to a previously unencountered value,\n     * we need to check for it in our state and as a last resort read it\n     * directly from the instance (which might have performance implications).\n     */\n    readValue(key, target) {\n        var _a;\n        let value = this.latestValues[key] !== undefined || !this.current\n            ? this.latestValues[key]\n            : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\n        if (value !== undefined && value !== null) {\n            if (typeof value === \"string\" &&\n                (isNumericalString(value) || isZeroValueString(value))) {\n                // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n                value = parseFloat(value);\n            }\n            else if (!findValueType(value) && complex.test(target)) {\n                value = getAnimatableNone(key, target);\n            }\n            this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n        }\n        return isMotionValue(value) ? value.get() : value;\n    }\n    /**\n     * Set the base target to later animate back to. This is currently\n     * only hydrated on creation and when we first read a value.\n     */\n    setBaseTarget(key, value) {\n        this.baseTarget[key] = value;\n    }\n    /**\n     * Find the base target for a value thats been removed from all animation\n     * props.\n     */\n    getBaseTarget(key) {\n        var _a;\n        const { initial } = this.props;\n        let valueFromInitial;\n        if (typeof initial === \"string\" || typeof initial === \"object\") {\n            const variant = resolveVariantFromProps(this.props, initial, (_a = this.presenceContext) === null || _a === void 0 ? void 0 : _a.custom);\n            if (variant) {\n                valueFromInitial = variant[key];\n            }\n        }\n        /**\n         * If this value still exists in the current initial variant, read that.\n         */\n        if (initial && valueFromInitial !== undefined) {\n            return valueFromInitial;\n        }\n        /**\n         * Alternatively, if this VisualElement config has defined a getBaseTarget\n         * so we can read the value from an alternative source, try that.\n         */\n        const target = this.getBaseTargetFromProps(this.props, key);\n        if (target !== undefined && !isMotionValue(target))\n            return target;\n        /**\n         * If the value was initially defined on initial, but it doesn't any more,\n         * return undefined. Otherwise return the value as initially read from the DOM.\n         */\n        return this.initialValues[key] !== undefined &&\n            valueFromInitial === undefined\n            ? undefined\n            : this.baseTarget[key];\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        return this.events[eventName].add(callback);\n    }\n    notify(eventName, ...args) {\n        if (this.events[eventName]) {\n            this.events[eventName].notify(...args);\n        }\n    }\n}\n\nexport { VisualElement };\n","import { VisualElement } from '../VisualElement.mjs';\nimport { DOMKeyframesResolver } from './DOMKeyframesResolver.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nclass DOMVisualElement extends VisualElement {\n    constructor() {\n        super(...arguments);\n        this.KeyframeResolver = DOMKeyframesResolver;\n    }\n    sortInstanceNodePosition(a, b) {\n        /**\n         * compareDocumentPosition returns a bitmask, by using the bitwise &\n         * we're returning true if 2 in that bitmask is set to true. 2 is set\n         * to true if b preceeds a.\n         */\n        return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props.style\n            ? props.style[key]\n            : undefined;\n    }\n    removeValueFromRenderState(key, { vars, style }) {\n        delete vars[key];\n        delete style[key];\n    }\n    handleChildMotionValue() {\n        if (this.childSubscription) {\n            this.childSubscription();\n            delete this.childSubscription;\n        }\n        const { children } = this.props;\n        if (isMotionValue(children)) {\n            this.childSubscription = children.on(\"change\", (latest) => {\n                if (this.current) {\n                    this.current.textContent = `${latest}`;\n                }\n            });\n        }\n    }\n}\n\nexport { DOMVisualElement };\n","import { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { transformProps } from './utils/keys-transform.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction getComputedStyle(element) {\n    return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"html\";\n        this.renderInstance = renderHTML;\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            const defaultType = getDefaultValueType(key);\n            return defaultType ? defaultType.default || 0 : 0;\n        }\n        else {\n            const computedStyle = getComputedStyle(instance);\n            const value = (isCSSVariableName(key)\n                ? computedStyle.getPropertyValue(key)\n                : computedStyle[key]) || 0;\n            return typeof value === \"string\" ? value.trim() : value;\n        }\n    }\n    measureInstanceViewportBox(instance, { transformPagePoint }) {\n        return measureViewportBox(instance, transformPagePoint);\n    }\n    build(renderState, latestValues, props) {\n        buildHTMLStyles(renderState, latestValues, props.transformTemplate);\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { createBox } from '../../projection/geometry/models.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { transformProps } from '../html/utils/keys-transform.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"svg\";\n        this.isSVGTag = false;\n        this.measureInstanceViewportBox = createBox;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props[key];\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            const defaultType = getDefaultValueType(key);\n            return defaultType ? defaultType.default || 0 : 0;\n        }\n        key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n        return instance.getAttribute(key);\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n    build(renderState, latestValues, props) {\n        buildSVGAttrs(renderState, latestValues, this.isSVGTag, props.transformTemplate);\n    }\n    renderInstance(instance, renderState, styleProp, projection) {\n        renderSVG(instance, renderState, styleProp, projection);\n    }\n    mount(instance) {\n        this.isSVGTag = isSVGTag(instance.tagName);\n        super.mount(instance);\n    }\n}\n\nexport { SVGVisualElement };\n","import { Fragment } from 'react';\nimport { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n    return isSVGComponent(Component)\n        ? new SVGVisualElement(options)\n        : new HTMLVisualElement(options, {\n            allowProjection: Component !== Fragment,\n        });\n};\n\nexport { createDomVisualElement };\n","import { animations } from '../../../motion/features/animations.mjs';\nimport { drag } from '../../../motion/features/drag.mjs';\nimport { gestureAnimations } from '../../../motion/features/gestures.mjs';\nimport { layout } from '../../../motion/features/layout.mjs';\nimport { createMotionComponentFactory } from '../create-factory.mjs';\nimport { createDomVisualElement } from '../../dom/create-visual-element.mjs';\n\nconst createMotionComponent = /*@__PURE__*/ createMotionComponentFactory({\n    ...animations,\n    ...gestureAnimations,\n    ...drag,\n    ...layout,\n}, createDomVisualElement);\n\nexport { createMotionComponent };\n","import { createDOMMotionComponentProxy } from '../create-proxy.mjs';\nimport { createMotionComponent } from './create.mjs';\n\nconst motion = /*@__PURE__*/ createDOMMotionComponentProxy(createMotionComponent);\n\nexport { motion };\n","\"use client\";\nexport { AnimatePresence } from './components/AnimatePresence/index.mjs';\nexport { LayoutGroup } from './components/LayoutGroup/index.mjs';\nexport { LazyMotion } from './components/LazyMotion/index.mjs';\nexport { MotionConfig } from './components/MotionConfig/index.mjs';\nexport { m } from './render/components/m/proxy.mjs';\nexport { motion } from './render/components/motion/proxy.mjs';\nexport { domAnimation } from './render/dom/features-animation.mjs';\nexport { domMax } from './render/dom/features-max.mjs';\nexport { domMin } from './render/dom/features-min.mjs';\nexport { useMotionValueEvent } from './utils/use-motion-value-event.mjs';\nexport { useElementScroll } from './value/scroll/use-element-scroll.mjs';\nexport { useViewportScroll } from './value/scroll/use-viewport-scroll.mjs';\nexport { useMotionTemplate } from './value/use-motion-template.mjs';\nexport { useMotionValue } from './value/use-motion-value.mjs';\nexport { useScroll } from './value/use-scroll.mjs';\nexport { useSpring } from './value/use-spring.mjs';\nexport { useTime } from './value/use-time.mjs';\nexport { useTransform } from './value/use-transform.mjs';\nexport { useVelocity } from './value/use-velocity.mjs';\nexport { useWillChange } from './value/use-will-change/index.mjs';\nexport { resolveMotionValue } from './value/utils/resolve-motion-value.mjs';\nexport { useReducedMotion } from './utils/reduced-motion/use-reduced-motion.mjs';\nexport { useReducedMotionConfig } from './utils/reduced-motion/use-reduced-motion-config.mjs';\nexport { AcceleratedAnimation } from './animation/animators/AcceleratedAnimation.mjs';\nexport { animateValue } from './animation/animators/MainThreadAnimation.mjs';\nexport { animationControls } from './animation/hooks/animation-controls.mjs';\nexport { useAnimate } from './animation/hooks/use-animate.mjs';\nexport { useAnimateMini } from './animation/hooks/use-animate-style.mjs';\nexport { useAnimation, useAnimationControls } from './animation/hooks/use-animation.mjs';\nexport { animateVisualElement } from './animation/interfaces/visual-element.mjs';\nexport { useIsPresent, usePresence } from './components/AnimatePresence/use-presence.mjs';\nexport { useDomEvent } from './events/use-dom-event.mjs';\nexport { DragControls, useDragControls } from './gestures/drag/use-drag-controls.mjs';\nexport { createRendererMotionComponent } from './motion/index.mjs';\nexport { isMotionComponent } from './motion/utils/is-motion-component.mjs';\nexport { unwrapMotionComponent } from './motion/utils/unwrap-motion-component.mjs';\nexport { isValidMotionProp } from './motion/utils/valid-prop.mjs';\nexport { addScaleCorrector } from './projection/styles/scale-correction.mjs';\nexport { useInstantLayoutTransition } from './projection/use-instant-layout-transition.mjs';\nexport { useResetProjection } from './projection/use-reset-projection.mjs';\nexport { buildTransform } from './render/html/utils/build-transform.mjs';\nexport { visualElementStore } from './render/store.mjs';\nexport { VisualElement } from './render/VisualElement.mjs';\nexport { MotionGlobalConfig } from './utils/GlobalConfig.mjs';\nexport { useAnimationFrame } from './utils/use-animation-frame.mjs';\nexport { useCycle } from './utils/use-cycle.mjs';\nexport { useInView } from './utils/use-in-view.mjs';\nexport { disableInstantTransitions, useInstantTransition } from './utils/use-instant-transition.mjs';\nexport { color } from './value/types/color/index.mjs';\nexport { complex } from './value/types/complex/index.mjs';\nexport { px } from './value/types/numbers/units.mjs';\nexport { spring } from './animation/generators/spring/index.mjs';\nexport { findSpring } from './animation/generators/spring/find.mjs';\nexport { optimizedAppearDataAttribute } from './animation/optimized-appear/data-id.mjs';\nexport { startOptimizedAppearAnimation } from './animation/optimized-appear/start.mjs';\nexport { LayoutGroupContext } from './context/LayoutGroupContext.mjs';\nexport { MotionConfigContext } from './context/MotionConfigContext.mjs';\nexport { MotionContext } from './context/MotionContext/index.mjs';\nexport { PresenceContext } from './context/PresenceContext.mjs';\nexport { SwitchLayoutGroupContext } from './context/SwitchLayoutGroupContext.mjs';\nexport { FlatTree } from './render/utils/flat-tree.mjs';\nexport { useAnimatedState as useDeprecatedAnimatedState } from './animation/hooks/use-animated-state.mjs';\nexport { AnimateSharedLayout } from './components/AnimateSharedLayout.mjs';\nexport { DeprecatedLayoutGroupContext } from './context/DeprecatedLayoutGroupContext.mjs';\nexport { useInvertedScale as useDeprecatedInvertedScale } from './value/use-inverted-scale.mjs';\nexport { delay } from './utils/delay.mjs';\nimport * as namespace from './components/Reorder/namespace.mjs';\nexport { namespace as Reorder };\nexport { isDragActive } from 'motion-dom';\nexport { invariant, noop, progress } from 'motion-utils';\nexport { animate, createScopedAnimate } from './animation/animate/index.mjs';\nexport { animateMini } from './animation/animators/waapi/animate-style.mjs';\nexport { scroll } from './render/dom/scroll/index.mjs';\nexport { scrollInfo } from './render/dom/scroll/track.mjs';\nexport { inView } from './render/dom/viewport/index.mjs';\nexport { MotionValue, motionValue } from './value/index.mjs';\nexport { inertia } from './animation/generators/inertia.mjs';\nexport { keyframes } from './animation/generators/keyframes.mjs';\nexport { stagger } from './animation/utils/stagger.mjs';\nexport { time } from './frameloop/sync-time.mjs';\nexport { clamp } from './utils/clamp.mjs';\nexport { mix } from './utils/mix/index.mjs';\nexport { pipe } from './utils/pipe.mjs';\nexport { transform } from './utils/transform.mjs';\nexport { wrap } from './utils/wrap.mjs';\nexport { cancelSync, sync } from './frameloop/index-legacy.mjs';\nexport { anticipate } from './easing/anticipate.mjs';\nexport { backIn, backInOut, backOut } from './easing/back.mjs';\nexport { circIn, circInOut, circOut } from './easing/circ.mjs';\nexport { cubicBezier } from './easing/cubic-bezier.mjs';\nexport { easeIn, easeInOut, easeOut } from './easing/ease.mjs';\nexport { mirrorEasing } from './easing/modifiers/mirror.mjs';\nexport { reverseEasing } from './easing/modifiers/reverse.mjs';\nexport { steps } from './easing/steps.mjs';\nexport { cancelFrame, frame, frameData, frameSteps } from './frameloop/frame.mjs';\nexport { distance, distance2D } from './utils/distance.mjs';\nexport { interpolate } from './utils/interpolate.mjs';\nexport { animations } from './motion/features/animations.mjs';\nexport { createBox } from './projection/geometry/models.mjs';\nexport { calcLength } from './projection/geometry/delta-calc.mjs';\nexport { filterProps } from './render/dom/utils/filter-props.mjs';\nexport { makeUseVisualState } from './motion/utils/use-visual-state.mjs';\nexport { addPointerEvent } from './events/add-pointer-event.mjs';\nexport { addPointerInfo } from './events/event-info.mjs';\nexport { isMotionValue } from './value/utils/is-motion-value.mjs';\nexport { isBrowser } from './utils/is-browser.mjs';\nexport { useUnmountEffect } from './utils/use-unmount-effect.mjs';\nexport { useIsomorphicLayoutEffect } from './utils/use-isomorphic-effect.mjs';\nexport { useForceUpdate } from './utils/use-force-update.mjs';\n","export type WidgetSizeMode = \"default\" | \"tall\" | \"expanded\";\n\nexport const WIDGET_DEFAULT_HEIGHT = 598;\nexport const WIDGET_TALL_MAX_HEIGHT = 720;\nexport const WIDGET_EXPANDED_MAX_HEIGHT = 750;\nexport const WIDGET_VIEWPORT_GUTTER = 80;\nexport const WIDGET_MIN_HEIGHT = 360;\nexport const WIDGET_HOME_MIN_HEIGHT = 280;\nexport const WIDGET_LOGO_DEFAULT_HEIGHT = 48;\nexport const WIDGET_LOGO_MIN_HEIGHT = 24;\nexport const WIDGET_LOGO_MAX_HEIGHT = 96;\n\nconst WIDGET_DEFAULT_WIDTH = 370;\nconst WIDGET_CROWDED_NAV_WIDTH = 440;\nconst WIDGET_EXPANDED_WIDTH = 530;\nconst WIDGET_STANDALONE_SUPPORT_WIDTH = 420;\nconst WIDGET_STANDALONE_SUPPORT_HEIGHT = 560;\n\nexport function clampWidgetHomeHeight(height: number, maxHeight = WIDGET_DEFAULT_HEIGHT) {\n  return Math.min(maxHeight, Math.max(WIDGET_HOME_MIN_HEIGHT, Math.ceil(height)));\n}\n\nexport function clampWidgetLogoHeight(height?: number | null) {\n  if (typeof height !== \"number\" || !Number.isFinite(height)) {\n    return WIDGET_LOGO_DEFAULT_HEIGHT;\n  }\n\n  return Math.min(WIDGET_LOGO_MAX_HEIGHT, Math.max(WIDGET_LOGO_MIN_HEIGHT, Math.round(height)));\n}\n\nexport function getFloatingWidgetSize({\n  mode,\n  activeTabCount,\n  viewportHeight,\n  standaloneSupport = false,\n}: {\n  mode: WidgetSizeMode;\n  activeTabCount: number;\n  viewportHeight: number;\n  standaloneSupport?: boolean;\n}) {\n  const isExpanded = mode === \"expanded\";\n  const availableViewportHeight = Math.max(\n    WIDGET_MIN_HEIGHT,\n    viewportHeight - WIDGET_VIEWPORT_GUTTER,\n  );\n\n  return {\n    width: isExpanded\n      ? WIDGET_EXPANDED_WIDTH\n      : standaloneSupport\n        ? WIDGET_STANDALONE_SUPPORT_WIDTH\n        : activeTabCount >= 6\n          ? WIDGET_CROWDED_NAV_WIDTH\n          : WIDGET_DEFAULT_WIDTH,\n    height:\n      mode === \"default\"\n        ? standaloneSupport\n          ? WIDGET_STANDALONE_SUPPORT_HEIGHT\n          : WIDGET_DEFAULT_HEIGHT\n        : Math.min(\n            isExpanded ? WIDGET_EXPANDED_MAX_HEIGHT : WIDGET_TALL_MAX_HEIGHT,\n            availableViewportHeight,\n          ),\n  };\n}\n","const SVG_ALLOWED_TAGS = new Set([\n  \"svg\",\n  \"g\",\n  \"path\",\n  \"circle\",\n  \"rect\",\n  \"line\",\n  \"polyline\",\n  \"polygon\",\n  \"ellipse\",\n  \"title\",\n  \"desc\",\n]);\n\nconst SVG_SHAPE_TAGS = new Set([\n  \"path\",\n  \"circle\",\n  \"rect\",\n  \"line\",\n  \"polyline\",\n  \"polygon\",\n  \"ellipse\",\n]);\n\nconst SVG_TEXT_TAGS = new Set([\"title\", \"desc\"]);\n\nconst SVG_ALLOWED_ATTRIBUTES = new Set([\n  \"aria-hidden\",\n  \"clip-rule\",\n  \"cx\",\n  \"cy\",\n  \"d\",\n  \"fill\",\n  \"fill-opacity\",\n  \"fill-rule\",\n  \"focusable\",\n  \"height\",\n  \"opacity\",\n  \"points\",\n  \"r\",\n  \"role\",\n  \"rx\",\n  \"ry\",\n  \"stroke\",\n  \"stroke-dasharray\",\n  \"stroke-dashoffset\",\n  \"stroke-linecap\",\n  \"stroke-linejoin\",\n  \"stroke-miterlimit\",\n  \"stroke-opacity\",\n  \"stroke-width\",\n  \"transform\",\n  \"viewbox\",\n  \"width\",\n  \"x\",\n  \"x1\",\n  \"x2\",\n  \"xmlns\",\n  \"y\",\n  \"y1\",\n  \"y2\",\n]);\n\nconst MAX_SVG_SOURCE_LENGTH = 20_000;\nconst MAX_SVG_ELEMENTS = 100;\nconst MAX_SVG_ATTRIBUTES = 500;\nconst MAX_SVG_ATTRIBUTE_LENGTH = 8_000;\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\n\nconst SVG_ATTRIBUTE_ALIASES: Record<string, string> = {\n  classname: \"class\",\n  cliprule: \"clip-rule\",\n  fillrule: \"fill-rule\",\n  strokedasharray: \"stroke-dasharray\",\n  strokedashoffset: \"stroke-dashoffset\",\n  strokelinecap: \"stroke-linecap\",\n  strokelinejoin: \"stroke-linejoin\",\n  strokemiterlimit: \"stroke-miterlimit\",\n  strokeopacity: \"stroke-opacity\",\n  strokewidth: \"stroke-width\",\n  viewbox: \"viewBox\",\n};\n\nexport function sanitizeLauncherSvg(value?: string | null) {\n  const source = typeof value === \"string\" ? value.trim() : \"\";\n  const domWindow = typeof window === \"undefined\" ? undefined : window;\n  const DOMParserCtor = typeof DOMParser === \"undefined\" ? domWindow?.DOMParser : DOMParser;\n\n  if (!source || !DOMParserCtor) {\n    return null;\n  }\n\n  const loweredSource = source.toLowerCase();\n  if (\n    source.length > MAX_SVG_SOURCE_LENGTH ||\n    loweredSource.includes(\"<!doctype\") ||\n    loweredSource.includes(\"<!entity\")\n  ) {\n    return null;\n  }\n\n  const match = source.match(/<svg[\\s\\S]*<\\/svg>/i);\n  if (!match) return null;\n\n  const doc = new DOMParserCtor().parseFromString(\n    normalizeLauncherSvgMarkup(match[0]),\n    \"image/svg+xml\",\n  );\n  if (doc.querySelector(\"parsererror\")) return null;\n\n  const svg = doc.documentElement;\n  if (!svg || svg.tagName.toLowerCase() !== \"svg\") return null;\n\n  const elements = [svg, ...Array.from(svg.querySelectorAll(\"*\"))];\n  if (elements.length > MAX_SVG_ELEMENTS) return null;\n\n  let attributeCount = 0;\n\n  for (const element of elements) {\n    const tagName = element.tagName.toLowerCase();\n    if (!SVG_ALLOWED_TAGS.has(tagName)) {\n      element.remove();\n      continue;\n    }\n\n    for (const attribute of Array.from(element.attributes)) {\n      attributeCount += 1;\n      if (attributeCount > MAX_SVG_ATTRIBUTES) return null;\n\n      const lowerName = attribute.name.toLowerCase();\n      const normalizedName = SVG_ATTRIBUTE_ALIASES[lowerName] || lowerName;\n      const isAllowed = SVG_ALLOWED_ATTRIBUTES.has(normalizedName.toLowerCase());\n\n      if (\n        lowerName.startsWith(\"on\") ||\n        lowerName.includes(\"href\") ||\n        lowerName === \"style\" ||\n        !isAllowed ||\n        attribute.value.length > MAX_SVG_ATTRIBUTE_LENGTH ||\n        isUnsafeSvgAttributeValue(attribute.value)\n      ) {\n        element.removeAttribute(attribute.name);\n        continue;\n      }\n\n      if (attribute.name !== normalizedName) {\n        element.removeAttribute(attribute.name);\n        element.setAttribute(normalizedName, attribute.value);\n      }\n    }\n\n    for (const colorAttribute of [\"fill\", \"stroke\"]) {\n      const colorValue = element.getAttribute(colorAttribute);\n      if (colorValue && colorValue.trim().toLowerCase() !== \"none\") {\n        element.setAttribute(colorAttribute, \"currentColor\");\n      }\n    }\n\n    if (\n      SVG_SHAPE_TAGS.has(tagName) &&\n      !element.hasAttribute(\"fill\") &&\n      !element.hasAttribute(\"stroke\") &&\n      !hasInheritedSvgPaint(element)\n    ) {\n      element.setAttribute(\"fill\", \"currentColor\");\n    }\n  }\n\n  removeUnsupportedChildNodes(svg);\n  svg.setAttribute(\"aria-hidden\", \"true\");\n  svg.setAttribute(\"focusable\", \"false\");\n  svg.setAttribute(\"height\", \"100%\");\n  svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n  svg.setAttribute(\"width\", \"100%\");\n\n  return svg.outerHTML;\n}\n\nfunction normalizeLauncherSvgMarkup(value: string) {\n  return value\n    .replace(/\\bclassName=/g, \"class=\")\n    .replace(/\\bclipRule=/g, \"clip-rule=\")\n    .replace(/\\bfillRule=/g, \"fill-rule=\")\n    .replace(/\\bstrokeDasharray=/g, \"stroke-dasharray=\")\n    .replace(/\\bstrokeDashoffset=/g, \"stroke-dashoffset=\")\n    .replace(/\\bstrokeLinecap=/g, \"stroke-linecap=\")\n    .replace(/\\bstrokeLinejoin=/g, \"stroke-linejoin=\")\n    .replace(/\\bstrokeMiterlimit=/g, \"stroke-miterlimit=\")\n    .replace(/\\bstrokeMiterLimit=/g, \"stroke-miterlimit=\")\n    .replace(/\\bstrokeOpacity=/g, \"stroke-opacity=\")\n    .replace(/\\bstrokeWidth=/g, \"stroke-width=\");\n}\n\nfunction isUnsafeSvgAttributeValue(value: string) {\n  const normalized = value.trim().toLowerCase();\n  return (\n    normalized.includes(\"javascript:\") ||\n    normalized.includes(\"vbscript:\") ||\n    normalized.includes(\"data:\") ||\n    normalized.includes(\"url(\")\n  );\n}\n\nfunction removeUnsupportedChildNodes(element: Element) {\n  for (const child of Array.from(element.childNodes)) {\n    if (child.nodeType === ELEMENT_NODE) {\n      removeUnsupportedChildNodes(child as Element);\n      continue;\n    }\n\n    if (child.nodeType === TEXT_NODE && SVG_TEXT_TAGS.has(element.tagName.toLowerCase())) {\n      continue;\n    }\n\n    child.remove();\n  }\n}\n\nfunction hasInheritedSvgPaint(element: Element) {\n  let parent = element.parentElement;\n  while (parent) {\n    if (parent.hasAttribute(\"fill\") || parent.hasAttribute(\"stroke\")) return true;\n    parent = parent.parentElement;\n  }\n\n  return false;\n}\n","export const IconLifebuoy = ({ className, size = 20 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={1.5}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"10\" />\n      <path d=\"m4.93 4.93 4.24 4.24\" />\n      <path d=\"m14.83 9.17 4.24-4.24\" />\n      <path d=\"m14.83 14.83 4.24 4.24\" />\n      <path d=\"m9.17 14.83-4.24 4.24\" />\n      <circle cx=\"12\" cy=\"12\" r=\"4\" />\n    </svg>\n  );\n};\n\nexport const IconSparkle = ({\n  className,\n  size = 16,\n  style,\n}: {\n  className?: string;\n  size?: number;\n  style?: import(\"react\").CSSProperties;\n}) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      style={style}\n    >\n      <path\n        d=\"M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n      ></path>\n      <path\n        d=\"M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z\"\n        fill=\"currentColor\"\n      ></path>\n      <path\n        d=\"M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n};\n\nexport const IconAi = ({\n  className,\n  size = 16,\n  style,\n}: {\n  className?: string;\n  size?: number;\n  style?: import(\"react\").CSSProperties;\n}) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      style={style}\n    >\n      <path\n        d=\"m9,10.75c.9665,0,1.75-.7835,1.75-1.75s-.7835-1.75-1.75-1.75-1.75.7835-1.75,1.75.7835,1.75,1.75,1.75Z\"\n        fill=\"currentColor\"\n        opacity=\".3\"\n        strokeWidth=\"0\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"m9,10.75c.9665,0,1.75-.7835,1.75-1.75s-.7835-1.75-1.75-1.75-1.75.7835-1.75,1.75.7835,1.75,1.75,1.75Z\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        d=\"m10.5025,16.0509c-.4686.2906-.9744.4491-1.5025.4491-2.428,0-4.397-3.358-4.397-7.5S6.572,1.5,9,1.5s4.397,3.358,4.397,7.5c0,1.384-.22,2.681-.603,3.793\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        d=\"m8.5735,4.6109c.1413-.0046.2836-.0069.4265-.0069,4.142,0,7.5,1.968,7.5,4.397s-3.358,4.397-7.5,4.397-7.5-1.97-7.5-4.398c0-1.617,1.489-3.03,3.707-3.794\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth=\"1.5\"\n      />\n    </svg>\n  );\n};\n\nexport const IconHome = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <path\n        d=\"M3 11.9896V14.5C3 17.7998 3 19.4497 4.02513 20.4749C5.05025 21.5 6.70017 21.5 10 21.5H14C17.2998 21.5 18.9497 21.5 19.9749 20.4749C21 19.4497 21 17.7998 21 14.5V11.9896C21 10.3083 21 9.46773 20.6441 8.74005C20.2882 8.01237 19.6247 7.49628 18.2976 6.46411L16.2976 4.90855C14.2331 3.30285 13.2009 2.5 12 2.5C10.7991 2.5 9.76689 3.30285 7.70242 4.90855L5.70241 6.46411C4.37533 7.49628 3.71179 8.01237 3.3559 8.74005C3 9.46773 3 10.3083 3 11.9896Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M3 11.9896V14.5C3 17.7998 3 19.4497 4.02513 20.4749C5.05025 21.5 6.70017 21.5 10 21.5H14C17.2998 21.5 18.9497 21.5 19.9749 20.4749C21 19.4497 21 17.7998 21 14.5V11.9896C21 10.3083 21 9.46773 20.6441 8.74005C20.2882 8.01237 19.6247 7.49628 18.2976 6.46411L16.2976 4.90855C14.2331 3.30285 13.2009 2.5 12 2.5C10.7991 2.5 9.76689 3.30285 7.70242 4.90855L5.70241 6.46411C4.37533 7.49628 3.71179 8.01237 3.3559 8.74005C3 9.46773 3 10.3083 3 11.9896Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M15.0002 17C14.2007 17.6224 13.1504 18 12.0002 18C10.8499 18 9.79971 17.6224 9.00018 17\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n};\n\nexport const IconUpdates = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M10 10.75C12.313 10.75 13.7417 13.25 13.7417 13.25V1.75C13.7417 1.75 12.312 4.25 10 4.25H5.75V10.75H10Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M8.805 10.75L9.787 15.397C9.901 15.937 9.556 16.468 9.015 16.582L8.037 16.789C7.497 16.903 6.966 16.558 6.852 16.017L5.75 10.75\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M13.75 13.25C13.75 13.25 11.813 10.75 9.5 10.75H5C3.205 10.75 1.75 9.295 1.75 7.5C1.75 5.705 3.205 4.25 5 4.25H9.5C11.812 4.25 13.75 1.75 13.75 1.75V13.25Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M5.75 4.25V10.75\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M16.3843 6C16.9018 6.2995 17.25 6.8591 17.25 7.5C17.25 8.1409 16.9018 8.7005 16.3843 9\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n};\n\nexport const IconHelp = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n      <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n      <circle cx=\"12\" cy=\"17\" r=\"1.25\" fill=\"currentColor\" />\n      <path\n        d=\"M9.5 9.5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5c0 1.02-.61 1.53-1.3 2.1-.5.4-.95.82-1.08 1.4L12 13.5\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n};\n\nexport const IconMessages = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <path\n        d=\"M8.5 20C9.55038 20.8697 10.8145 21.4238 12.2635 21.5188C13.4052 21.5937 14.5971 21.5936 15.7365 21.5188C16.1288 21.4931 16.5565 21.4007 16.9248 21.251C17.3345 21.0845 17.5395 21.0012 17.6437 21.0138C17.7478 21.0264 17.8989 21.1364 18.2011 21.3563C18.7339 21.744 19.4051 22.0225 20.4005 21.9986C20.9038 21.9865 21.1555 21.9804 21.2681 21.7909C21.3808 21.6013 21.2405 21.3389 20.9598 20.8141C20.5706 20.0862 20.324 19.2529 20.6977 18.5852C21.3413 17.6315 21.8879 16.5021 21.9678 15.2823C22.0107 14.6269 22.0107 13.9481 21.9678 13.2927C21.9146 12.4799 21.7173 11.7073 21.4012 11\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.18\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M12.345 17.4868C15.9006 17.2526 18.7328 14.4069 18.9658 10.8344C19.0114 10.1353 19.0114 9.41131 18.9658 8.71219C18.7328 5.13969 15.9006 2.29401 12.345 2.05985C11.132 1.97997 9.86553 1.98013 8.65499 2.05985C5.09943 2.29401 2.26725 5.13969 2.0342 8.71219C1.9886 9.41131 1.9886 10.1353 2.0342 10.8344C2.11908 12.1356 2.69992 13.3403 3.38372 14.3576C3.78076 15.0697 3.51873 15.9586 3.10518 16.735C2.807 17.2948 2.65791 17.5747 2.77762 17.7769C2.89732 17.9791 3.16472 17.9856 3.69951 17.9985C4.75712 18.024 5.47028 17.7269 6.03638 17.3134C6.35744 17.0788 6.51798 16.9615 6.62862 16.9481C6.73926 16.9346 6.957 17.0234 7.39241 17.2011C7.78374 17.3608 8.23812 17.4593 8.65499 17.4868C9.86553 17.5665 11.132 17.5666 12.345 17.4868Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M7.5 12H13.5M7.5 8H10.5\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M8.5 20C9.55038 20.8697 10.8145 21.4238 12.2635 21.5188C13.4052 21.5937 14.5971 21.5936 15.7365 21.5188C16.1288 21.4931 16.5565 21.4007 16.9248 21.251C17.3345 21.0845 17.5395 21.0012 17.6437 21.0138C17.7478 21.0264 17.8989 21.1364 18.2011 21.3563C18.7339 21.744 19.4051 22.0225 20.4005 21.9986C20.9038 21.9865 21.1555 21.9804 21.2681 21.7909C21.3808 21.6013 21.2405 21.3389 20.9598 20.8141C20.5706 20.0862 20.324 19.2529 20.6977 18.5852C21.3413 17.6315 21.8879 16.5021 21.9678 15.2823C22.0107 14.6269 22.0107 13.9481 21.9678 13.2927C21.9146 12.4799 21.7173 11.7073 21.4012 11\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M12.345 17.4868C15.9006 17.2526 18.7328 14.4069 18.9658 10.8344C19.0114 10.1353 19.0114 9.41131 18.9658 8.71219C18.7328 5.13969 15.9006 2.29401 12.345 2.05985C11.132 1.97997 9.86553 1.98013 8.65499 2.05985C5.09943 2.29401 2.26725 5.13969 2.0342 8.71219C1.9886 9.41131 1.9886 10.1353 2.0342 10.8344C2.11908 12.1356 2.69992 13.3403 3.38372 14.3576C3.78076 15.0697 3.51873 15.9586 3.10518 16.735C2.807 17.2948 2.65791 17.5747 2.77762 17.7769C2.89732 17.9791 3.16472 17.9856 3.69951 17.9985C4.75712 18.024 5.47028 17.7269 6.03638 17.3134C6.35744 17.0788 6.51798 16.9615 6.62862 16.9481C6.73926 16.9346 6.957 17.0234 7.39241 17.2011C7.78374 17.3608 8.23812 17.4593 8.65499 17.4868C9.86553 17.5665 11.132 17.5666 12.345 17.4868Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n};\n\nexport const IconFeedback = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n    >\n      <path\n        d=\"M12.4991 7.74841C14.7077 7.74841 16.4995 9.53761 16.4995 11.7463C16.4995 12.4742 16.3022 13.1541 15.9627 13.7425C15.7254 14.1869 15.992 15.2383 16.4995 15.7467C15.8098 15.784 14.9015 15.472 14.4953 15.2099C14.226 15.3654 13.7976 15.5716 13.2377 15.6783C12.9986 15.7236 12.7515 15.7476 12.4991 15.7476C10.2896 15.7476 8.49951 13.9567 8.49951 11.748C8.49951 9.53929 10.2904 7.74841 12.4991 7.74841Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M12.3181 4.75089C11.2329 3.24959 9.47131 2.26971 7.47751 2.26971C4.17641 2.26971 1.50012 4.94601 1.50012 8.24811C1.50012 9.33511 1.79482 10.3522 2.30292 11.2306C2.65692 11.8956 2.25982 13.4668 1.50012 14.2255C2.53062 14.281 3.88931 13.816 4.49501 13.4227C4.81311 13.6063 5.27912 13.8376 5.87282 14.0045\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M12.4999 7.7467C14.7085 7.7467 16.4995 9.53761 16.4995 11.7463C16.4995 12.4742 16.3022 13.1541 15.9627 13.7425C15.7254 14.1869 15.992 15.2383 16.4995 15.7467C15.8098 15.784 14.9015 15.472 14.4953 15.2099C14.226 15.3654 13.7976 15.5716 13.2377 15.6783C12.9986 15.7236 12.7515 15.7476 12.4991 15.7476C10.2896 15.7476 8.49951 13.9567 8.49951 11.748C8.49951 9.53929 10.2912 7.7467 12.4999 7.7467Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n};\n\nexport const IconNewFeedback = ({\n  className,\n  size = 16,\n}: {\n  className?: string;\n  size?: number;\n}) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      aria-hidden=\"true\"\n      focusable=\"false\"\n    >\n      <path d=\"M16.4249 4.60509L17.4149 3.6151C18.2351 2.79497 19.5648 2.79497 20.3849 3.6151C21.205 4.43524 21.205 5.76493 20.3849 6.58507L19.3949 7.57506M16.4249 4.60509L9.76558 11.2644C9.25807 11.772 8.89804 12.4078 8.72397 13.1041L8 16L10.8959 15.276C11.5922 15.102 12.228 14.7419 12.7356 14.2344L19.3949 7.57506M16.4249 4.60509L19.3949 7.57506\" />\n      <path d=\"M18.9999 13.5C18.9999 16.7875 18.9999 18.4312 18.092 19.5376C17.9258 19.7401 17.7401 19.9258 17.5375 20.092C16.4312 21 14.7874 21 11.4999 21H11C7.22876 21 5.34316 21 4.17159 19.8284C3.00003 18.6569 3 16.7712 3 13V12.5C3 9.21252 3 7.56879 3.90794 6.46244C4.07417 6.2599 4.2599 6.07417 4.46244 5.90794C5.56879 5 7.21252 5 10.5 5\" />\n    </svg>\n  );\n};\n\nexport const IconRoadmap = ({ className, size = 16 }: { className?: string; size?: number }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M6.25 2.79144C6.15493 2.78511 6.05895 2.79229 5.965 2.813L2.533 3.576C2.076 3.677 1.75 4.083 1.75 4.552V13.004C1.75 13.644 2.342 14.119 2.967 13.98L5.965 13.314C6.05895 13.2928 6.15493 13.2856 6.25 13.2921V2.79144ZM11.75 15.2086C11.8451 15.2149 11.9411 15.2077 12.035 15.187L15.467 14.424C15.924 14.323 16.25 13.917 16.25 13.448V4.996C16.25 4.356 15.658 3.881 15.033 4.02L12.035 4.686C11.9411 4.70722 11.8451 4.7144 11.75 4.70794V15.2086Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M6.25 2.792V13.292\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M11.75 4.708V15.208\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M2.533 3.576L5.965 2.813C6.151 2.772 6.345 2.784 6.524 2.849L11.476 4.65C11.655 4.715 11.849 4.728 12.035 4.686L15.033 4.02C15.658 3.881 16.25 4.356 16.25 4.996V13.448C16.25 13.917 15.924 14.323 15.467 14.424L12.035 15.187C11.849 15.228 11.655 15.216 11.476 15.151L6.524 13.35C6.345 13.285 6.151 13.272 5.965 13.314L2.967 13.98C2.342 14.119 1.75 13.644 1.75 13.004V4.552C1.75 4.083 2.076 3.677 2.533 3.576Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n};\n","import { IconChevronDown } from \"@tabler/icons-react\";\nimport { sanitizeLauncherSvg } from \"@userorbit/ui/src/shared/lib/sanitize-launcher-svg\";\nimport { motion } from \"framer-motion\";\nimport { IconLifebuoy } from \"./icons\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface NotificationButtonProps {\n  isOpen: boolean;\n  badgeCount: number;\n  onClick: () => void;\n  themeMode?: \"light\" | \"dark\";\n  shimmer?: boolean;\n  launcherText?: string | null;\n  launcherIconSvg?: string | null;\n  launcherOpenIconSvg?: string | null;\n  launcherBackgroundColor?: string;\n  launcherIconColor?: string;\n}\n\nconst NotificationButton: React.FC<NotificationButtonProps> = ({\n  isOpen,\n  badgeCount,\n  onClick,\n  themeMode = \"light\",\n  shimmer = false,\n  launcherText,\n  launcherIconSvg,\n  launcherOpenIconSvg,\n  launcherBackgroundColor,\n  launcherIconColor,\n}) => {\n  const fallbackBackgroundColor = themeMode === \"dark\" ? \"#ffffff\" : \"#000000\";\n  const fallbackIconColor = themeMode === \"dark\" ? \"#000000\" : \"#ffffff\";\n  const normalizedLauncherText = launcherText?.trim();\n\n  return (\n    <motion.button\n      className={cn(\n        \"widget-launcher-btn\",\n        \"relative h-12 cursor-pointer rounded-full border-none overflow-hidden\",\n        \"flex items-center justify-center gap-2 shadow-lg\",\n        normalizedLauncherText ? \"min-w-12 max-w-[220px] px-4\" : \"w-12\",\n        shimmer && !isOpen && \"rage-shimmer\",\n      )}\n      style={{\n        backgroundColor: launcherBackgroundColor || fallbackBackgroundColor,\n        color: launcherIconColor || fallbackIconColor,\n      }}\n      onClick={onClick}\n      aria-label={\n        isOpen\n          ? `Close ${normalizedLauncherText || \"widget\"}`\n          : `Open ${normalizedLauncherText || \"widget\"}`\n      }\n      whileHover={{ scale: 1.05 }}\n      whileTap={{ scale: 0.96 }}\n      animate={{\n        rotate: 0,\n      }}\n      transition={{\n        type: \"tween\",\n        ease: [0.25, 0.46, 0.45, 0.94],\n        duration: 0.12,\n      }}\n    >\n      <span className=\"grid shrink-0 place-items-center\" aria-hidden=\"true\">\n        <motion.div\n          className=\"widget-launcher-icon widget-launcher-open-icon col-start-1 row-start-1 flex\"\n          initial={false}\n          animate={{ opacity: isOpen ? 1 : 0, scale: isOpen ? 1 : 0.25 }}\n          transition={{ type: \"tween\", duration: 0.12, ease: [0.2, 0, 0, 1] }}\n        >\n          <LauncherIcon launcherIconSvg={launcherOpenIconSvg} fallback=\"chevron\" />\n        </motion.div>\n        <motion.div\n          className=\"widget-launcher-icon widget-launcher-closed-icon col-start-1 row-start-1 flex\"\n          initial={false}\n          animate={{ opacity: isOpen ? 0 : 1, scale: isOpen ? 0.25 : 1 }}\n          transition={{ type: \"tween\", duration: 0.12, ease: [0.2, 0, 0, 1] }}\n        >\n          <LauncherIcon launcherIconSvg={launcherIconSvg} fallback=\"lifebuoy\" />\n        </motion.div>\n      </span>\n      {normalizedLauncherText ? (\n        <span className=\"widget-launcher-label min-w-0 truncate font-sans text-sm font-semibold leading-none\">\n          {normalizedLauncherText}\n        </span>\n      ) : null}\n\n      {/* Badge for new updates */}\n      <React.Fragment>\n        {!isOpen && badgeCount > 0 && (\n          <motion.span\n            className=\"widget-launcher-badge absolute -right-0.5 -top-0.5 flex h-5 min-w-5 items-center justify-center rounded-xl bg-red-500 font-sans text-sm font-bold text-white dark:bg-red-500\"\n            initial={{ scale: 0, opacity: 0 }}\n            animate={{ scale: 1, opacity: 1 }}\n            exit={{ scale: 0, opacity: 0 }}\n            transition={{\n              type: \"spring\",\n              stiffness: 500,\n              damping: 30,\n            }}\n          >\n            {badgeCount > 99 ? \"99+\" : badgeCount}\n          </motion.span>\n        )}\n      </React.Fragment>\n    </motion.button>\n  );\n};\n\nconst LauncherIcon = ({\n  launcherIconSvg,\n  fallback,\n}: {\n  launcherIconSvg?: string | null;\n  fallback: \"chevron\" | \"lifebuoy\";\n}) => {\n  const sanitizedSvg = React.useMemo(() => sanitizeLauncherSvg(launcherIconSvg), [launcherIconSvg]);\n\n  if (sanitizedSvg) {\n    return (\n      <span\n        className=\"block h-7 w-7 [&_svg]:h-full [&_svg]:w-full\"\n        dangerouslySetInnerHTML={{ __html: sanitizedSvg }}\n      />\n    );\n  }\n\n  if (fallback === \"chevron\") {\n    return <IconChevronDown className=\"block\" size={20} strokeWidth={1.5} />;\n  }\n\n  return <IconLifebuoy className=\"block\" size={20} />;\n};\n\nexport default NotificationButton;\n","// ABOUTME: Detects rage clicks (rapid repeated clicks in a small area) anywhere on the page.\n// ABOUTME: Returns a boolean that stays true briefly after a rage click is detected.\n\nimport { useEffect, useRef, useState } from \"react\";\n\nconst CLICK_THRESHOLD = 3;\nconst TIME_WINDOW = 800;\nconst DISTANCE_THRESHOLD = 30;\nconst SHIMMER_DURATION = 4500;\n\ninterface ClickRecord {\n  x: number;\n  y: number;\n  time: number;\n}\n\nexport function useRageClick(): boolean {\n  const [rageDetected, setRageDetected] = useState(false);\n  const clicksRef = useRef<ClickRecord[]>([]);\n  const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  useEffect(() => {\n    const handleClick = (e: MouseEvent) => {\n      const now = Date.now();\n      const click: ClickRecord = { x: e.clientX, y: e.clientY, time: now };\n\n      clicksRef.current.push(click);\n\n      // Prune clicks outside the time window\n      clicksRef.current = clicksRef.current.filter((c) => now - c.time <= TIME_WINDOW);\n\n      if (clicksRef.current.length < CLICK_THRESHOLD) return;\n\n      // Check if all recent clicks are within the distance threshold\n      const recent = clicksRef.current;\n      const first = recent[0];\n      const allNearby = recent.every(\n        (c) =>\n          Math.abs(c.x - first.x) <= DISTANCE_THRESHOLD &&\n          Math.abs(c.y - first.y) <= DISTANCE_THRESHOLD,\n      );\n\n      if (allNearby) {\n        clicksRef.current = [];\n        setRageDetected(true);\n\n        if (timerRef.current) clearTimeout(timerRef.current);\n        timerRef.current = setTimeout(() => {\n          setRageDetected(false);\n        }, SHIMMER_DURATION);\n      }\n    };\n\n    document.addEventListener(\"click\", handleClick, true);\n    return () => {\n      document.removeEventListener(\"click\", handleClick, true);\n      if (timerRef.current) clearTimeout(timerRef.current);\n    };\n  }, []);\n\n  return rageDetected;\n}\n","export function createHelpCenterReportingId() {\n  if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const bytes = new Uint8Array(16);\n  if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n    crypto.getRandomValues(bytes);\n  } else {\n    for (let index = 0; index < bytes.length; index++)\n      bytes[index] = Math.floor(Math.random() * 256);\n  }\n  bytes[6] = (bytes[6] & 0x0f) | 0x40;\n  bytes[8] = (bytes[8] & 0x3f) | 0x80;\n  const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nlet visitorId: string | undefined;\nconst recentEvents = new Map<string, number>();\n\nconst aiReferrers: Record<string, string> = {\n  \"chatgpt.com\": \"openai\",\n  \"chat.openai.com\": \"openai\",\n  \"claude.ai\": \"anthropic\",\n  \"perplexity.ai\": \"perplexity\",\n  \"gemini.google.com\": \"google\",\n  \"copilot.microsoft.com\": \"microsoft\",\n  \"meta.ai\": \"meta\",\n  \"chat.mistral.ai\": \"mistral\",\n  \"chat.deepseek.com\": \"deepseek\",\n  \"you.com\": \"you\",\n};\n\nexport function getAiReferrer(referrer: string) {\n  try {\n    const url = new URL(referrer);\n    if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return null;\n    const host = url.hostname.toLowerCase().replace(/^www\\./, \"\");\n    return aiReferrers[host] || null;\n  } catch {\n    return null;\n  }\n}\n\ntype ReportingSession = { id: string; provider: string | null; lastSeen: number };\nlet session: ReportingSession | undefined;\nlet entryReferrerConsumed = false;\nconst sessionStorageKey = \"uo_help_center_session\";\nconst sessionTimeout = 30 * 60 * 1000;\n\nexport function getHelpCenterReportingSession(now = Date.now()) {\n  if (typeof window === \"undefined\") return {};\n  if (!session) {\n    try {\n      const stored = JSON.parse(window.sessionStorage.getItem(sessionStorageKey) || \"null\");\n      if (\n        stored &&\n        typeof stored.id === \"string\" &&\n        /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(stored.id) &&\n        typeof stored.lastSeen === \"number\" &&\n        (stored.provider === null || Object.values(aiReferrers).includes(stored.provider))\n      )\n        session = stored;\n    } catch {}\n  }\n  const incoming = !entryReferrerConsumed ? getAiReferrer(document.referrer) : null;\n  entryReferrerConsumed = true;\n  if (\n    !session ||\n    now - session.lastSeen >= sessionTimeout ||\n    now < session.lastSeen ||\n    (incoming && incoming !== session.provider)\n  ) {\n    session = { id: createHelpCenterReportingId(), provider: incoming, lastSeen: now };\n  }\n  session.lastSeen = now;\n  try {\n    window.sessionStorage.setItem(sessionStorageKey, JSON.stringify(session));\n  } catch {}\n  return { reportingSessionId: session.id, reportingAiReferrer: session.provider };\n}\n\nexport function getHelpCenterVisitorId() {\n  if (typeof window === \"undefined\") return undefined;\n  if (visitorId) return visitorId;\n  try {\n    const stored = window.localStorage.getItem(\"uo_help_center_visitor\");\n    if (\n      stored &&\n      /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(stored)\n    ) {\n      visitorId = stored;\n    }\n  } catch {}\n  visitorId ||= createHelpCenterReportingId();\n  try {\n    window.localStorage.setItem(\"uo_help_center_visitor\", visitorId);\n  } catch {}\n  return visitorId;\n}\n\n// Suppress immediate remounts, including Strict Mode, while allowing later navigation.\nexport function shouldTrackHelpCenterEvent(key: string, now = Date.now()) {\n  const previous = recentEvents.get(key);\n  if (previous !== undefined && now - previous < 1000) return false;\n  for (const [event, timestamp] of recentEvents) {\n    if (now - timestamp >= 1000) recentEvents.delete(event);\n  }\n  recentEvents.set(key, now);\n  return true;\n}\n","// ABOUTME: Describes the host page and browser at the moment feedback is submitted.\n// ABOUTME: Lets teammates and agents see where the user was without asking them.\n\nexport type PageContext = {\n  url: string;\n  title: string;\n  referrer: string;\n  viewport: {\n    width: number;\n    height: number;\n    scrollX: number;\n    scrollY: number;\n    devicePixelRatio: number;\n  };\n  userAgent: string;\n  language: string;\n  timeZone: string;\n};\n\nexport function describePage(): PageContext {\n  return {\n    url: window.location.href,\n    title: document.title,\n    referrer: document.referrer,\n    viewport: {\n      width: window.innerWidth,\n      height: window.innerHeight,\n      scrollX: Math.round(window.scrollX),\n      scrollY: Math.round(window.scrollY),\n      devicePixelRatio: window.devicePixelRatio || 1,\n    },\n    userAgent: navigator.userAgent,\n    language: navigator.language,\n    timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n  };\n}\n","import { privacyGeneration } from \"../../lib/privacyPreferences\";\nimport { widgetFetch } from \"../../lib/widgetPrivacy\";\nimport {\n  createHelpCenterReportingId,\n  getHelpCenterVisitorId,\n  getHelpCenterReportingSession,\n  shouldTrackHelpCenterEvent,\n} from \"@userorbit/utils/help-center-reporting\";\nimport { Config } from \"../../lib/config\";\nimport { Logger } from \"../../lib/logger\";\nimport type { ReplayEvidence } from \"../../lib/replay\";\nimport { describePage } from \"./feedback-capture/page-context\";\nimport type { PinnedElement } from \"./feedback-capture/pinned-element\";\n\nconst logger = Logger.getInstance();\n\nexport const getRequestAuthBody = () => {\n  const config = Config.getInstance();\n  const configData = config.get();\n\n  if (typeof window === \"undefined\") return {};\n\n  return {\n    ...(configData?.accountId && { account: configData.accountId }),\n    ...(configData?.widgetKey && { widgetKey: configData.widgetKey }),\n    ...(configData?.environmentState?.team?.subdomain && {\n      subdomain: configData.environmentState.team.subdomain,\n    }),\n  };\n};\n\nexport const makeAPIRequest = async (endpoint: string, data: any = {}) => {\n  const config = Config.getInstance();\n  const all = config.get();\n\n  if (!all) {\n    throw new Error(\"userorbit.init() must be called before making API requests\");\n  }\n\n  const url = `${all.apiHost}${endpoint}`;\n\n  try {\n    const response = await widgetFetch(url, () => ({\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      credentials: \"include\",\n      mode: \"cors\",\n      body: JSON.stringify({\n        ...data,\n        ...getRequestAuthBody(),\n      }),\n    }));\n\n    if (!response.ok) {\n      let errorMessage = `HTTP error! status: ${response.status}`;\n      try {\n        const errorData = await response.json();\n        errorMessage = errorData.message || errorData.error || errorMessage;\n        logger.error(\"API error response:\", errorData);\n      } catch {\n        logger.error(\"Failed to parse error response\");\n      }\n      throw new Error(errorMessage);\n    }\n\n    return await response.json();\n  } catch (error) {\n    logger.error(\"API request failed:\", error);\n    throw error;\n  }\n};\n\n// Specific API functions\nexport const fetchTeamInfo = () => {\n  return makeAPIRequest(\"/api/v1/public/teams.info\");\n};\n\nexport const fetchAnnouncements = (limit = 10, offset = 0, token?: string) => {\n  return makeAPIRequest(`/api/v1/public/announcements.list?limit=${limit}&offset=${offset}`, {\n    surface: \"widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const fetchAnnouncementById = (announcementId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/announcements.info\", {\n    id: announcementId,\n    surface: \"widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const fetchTourById = (tourId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/tours.info\", {\n    id: tourId,\n    ...(token && { token }),\n  });\n};\n\nexport const fetchChecklistById = (checklistId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/checklists.info\", {\n    id: checklistId,\n    ...(token && { token }),\n  });\n};\n\nexport const fetchSurveyById = (surveyId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/surveys.info\", {\n    id: surveyId,\n    ...(token && { token }),\n  });\n};\n\nexport const recordAnnouncementVisit = async (announcementId: string, token?: string) => {\n  const config = Config.getInstance();\n  const all = config.get();\n\n  if (!all) {\n    throw new Error(\"userorbit.init() must be called before making API requests\");\n  }\n\n  const response = await widgetFetch(`${all.apiHost}/api/v1/public/announcements.visit`, () => ({\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    credentials: \"include\",\n    mode: \"cors\",\n    body: JSON.stringify({\n      id: announcementId,\n      surface: \"widget\",\n      ...(token && { token }),\n      ...getRequestAuthBody(),\n    }),\n  }));\n\n  await response.body?.cancel();\n  if (!response.ok) {\n    throw new Error(`HTTP error! status: ${response.status}`);\n  }\n};\n\nexport const fetchCollections = () => {\n  return makeAPIRequest(\"/api/v1/public/collections.list\");\n};\n\nexport const fetchTeamMembers = () => {\n  return makeAPIRequest(\"/api/v1/public/team-members.list\");\n};\n\nexport const fetchRoadmapViews = (token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/roadmap-views.list\", {\n    ...(token && { token }),\n  });\n};\n\nexport const fetchRoadmapViewInfo = ({\n  id,\n  slug,\n  token,\n}: {\n  id?: string;\n  slug?: string;\n  token?: string;\n} = {}) => {\n  return makeAPIRequest(\"/api/v1/public/roadmap-views.info\", {\n    ...(id && { id }),\n    ...(slug && { slug }),\n    ...(token && { token }),\n  });\n};\n\nexport const fetchRoadmapViewItems = ({\n  id,\n  slug,\n  token,\n}: {\n  id?: string;\n  slug?: string;\n  token?: string;\n} = {}) => {\n  return makeAPIRequest(\"/api/v1/public/roadmap-views.items\", {\n    ...(id && { id }),\n    ...(slug && { slug }),\n    ...(token && { token }),\n  });\n};\n\nexport const fetchRoadmapItem = async (itemId: string, token?: string, roadmapViewId?: string) => {\n  const roadmapViewsResponse = await fetchRoadmapViews(token);\n  const roadmapViews = roadmapViewsResponse?.data || [];\n  const prioritizedRoadmapViews = roadmapViewId\n    ? roadmapViews.sort((a: { id: string }, b: { id: string }) => {\n        if (a.id === roadmapViewId) return -1;\n        if (b.id === roadmapViewId) return 1;\n        return 0;\n      })\n    : roadmapViews;\n\n  for (const roadmapView of prioritizedRoadmapViews) {\n    const roadmapItemsResponse = await fetchRoadmapViewItems({\n      id: roadmapView.id,\n      token,\n    });\n    const columns = roadmapItemsResponse?.data?.columns || [];\n\n    for (const column of columns) {\n      const item = (column.items || []).find((entry: { id: string }) => entry.id === itemId);\n      if (item) {\n        return {\n          data: item,\n          roadmap: roadmapItemsResponse.data,\n          column,\n        };\n      }\n    }\n  }\n\n  return {\n    data: null,\n  };\n};\n\n// Comments API functions\nexport const fetchDocumentComments = (documentId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/document-comments.list\", {\n    id: documentId,\n    surface: \"widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const createDocumentComment = (\n  documentId: string,\n  text: string,\n  token?: string,\n  parentId?: string,\n) => {\n  return makeAPIRequest(\"/api/v1/public/document-comments.create\", {\n    id: documentId,\n    text,\n    source: \"public\",\n    surface: \"widget\",\n    ...(token && { token }),\n    ...(parentId && { parentId }),\n  });\n};\n\n// Reactions API functions\nexport const createReaction = (documentId: string, reaction: number, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/reactions.create\", {\n    documentId,\n    reaction,\n    surface: \"widget\",\n    ...(token && { token }),\n  });\n};\n\n// Feedback API functions\nexport const searchSimilarFeedback = (query: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedback.search\", {\n    query: query.trim(),\n    limit: 5,\n    ...(token && { token }),\n  });\n};\n\nexport const identifySubscriber = ({\n  email,\n  name,\n  emailHash,\n}: {\n  email: string;\n  name?: string;\n  emailHash?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/subscriber.identify\", {\n    email,\n    ...(name && { name }),\n    ...(emailHash && { emailHash }),\n  });\n};\n\nexport const requestSubscriberAuthentication = ({ email, name }: { email: string; name: string }) =>\n  makeAPIRequest(\"/api/v1/public/subscriber-authentication.request\", {\n    email,\n    name,\n  });\n\nexport const verifySubscriberAuthentication = ({ email, code }: { email: string; code: string }) =>\n  makeAPIRequest(\"/api/v1/public/subscriber-authentication.verify\", {\n    email,\n    code,\n  });\n\nexport const uploadAttachment = async (\n  file: File,\n  token?: string,\n): Promise<{ url: string; name: string; type: string }> => {\n  const privacyEpoch = privacyGeneration(\"widget\");\n  const config = Config.getInstance();\n  const all = config.get();\n\n  if (!all) {\n    throw new Error(\"userorbit.init() must be called before making API requests\");\n  }\n\n  const url = `${all.apiHost}/api/v1/public/attachments.upload`;\n\n  const response = await widgetFetch(\n    url,\n    () => ({\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      credentials: \"include\",\n      mode: \"cors\",\n      body: JSON.stringify({\n        filename: file.name,\n        kind: file.type,\n        size: file.size,\n        ...getRequestAuthBody(),\n        ...(token && { token }),\n      }),\n    }),\n    privacyEpoch,\n  );\n\n  if (!response.ok) {\n    let errorMessage = `HTTP error! status: ${response.status}`;\n    try {\n      const errorData = await response.json();\n      errorMessage = errorData.message || errorData.error || errorMessage;\n      logger.error(\"API error response:\", errorData);\n    } catch {\n      logger.error(\"Failed to parse error response\");\n    }\n    throw new Error(errorMessage);\n  }\n\n  const data = await response.json();\n  const uploadData = data.data;\n\n  const formData = new FormData();\n  if (uploadData.form) {\n    for (const key in uploadData.form) {\n      formData.append(key, uploadData.form[key]);\n    }\n  }\n  formData.append(\"file\", file);\n\n  const uploadResponse = await widgetFetch(\n    uploadData.uploadUrl,\n    () => ({\n      method: \"POST\",\n      body: formData,\n    }),\n    privacyEpoch,\n  );\n  await uploadResponse.body?.cancel();\n  if (!uploadResponse.ok) {\n    throw new Error(`Attachment upload failed with status ${uploadResponse.status}`);\n  }\n\n  return {\n    url: uploadData.asset.url,\n    name: uploadData.asset.name,\n    type: uploadData.asset.contentType,\n  };\n};\n\nexport const createFeedback = ({\n  title,\n  text,\n  token,\n  boardId,\n  attachments,\n  replayEvidence,\n  pinnedElement,\n}: {\n  title: string;\n  text: string;\n  token?: string;\n  boardId?: string;\n  attachments?: Array<{ url: string; name: string; type: string; private?: boolean }>;\n  replayEvidence?: ReplayEvidence | null;\n  pinnedElement?: PinnedElement | null;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/feedbacks.create\", {\n    title: title.trim(),\n    text: text.trim(),\n    ...(boardId && { boardId }),\n    ...(attachments && attachments.length > 0 && { attachments }),\n    ...(replayEvidence && { replayEvidence }),\n    meta: { page: describePage(), ...(pinnedElement && { pinnedElement }) },\n    source: \"floating-widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const updateFeedback = ({\n  id,\n  title,\n  text,\n  token,\n  boardId,\n}: {\n  id: string;\n  title: string;\n  text: string;\n  token?: string;\n  boardId?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/feedbacks.update\", {\n    id,\n    title: title.trim(),\n    text: text.trim(),\n    ...(boardId && { boardId }),\n    ...(token && { token }),\n  });\n};\n\n// Feedback listing functions\nexport const fetchFeedbackItems = (\n  boardId?: string,\n  limit = 20,\n  offset = 0,\n  searchQuery?: string,\n  sortBy: \"newest\" | \"top\" | \"trending\" = \"newest\",\n  token?: string,\n  statuses?: string[],\n) => {\n  const query = new URLSearchParams({\n    limit: limit.toString(),\n    offset: offset.toString(),\n    sortBy,\n  });\n\n  if (boardId && boardId !== \"all\") {\n    query.set(\"boardId\", boardId);\n  }\n  if (searchQuery?.trim()) {\n    query.set(\"search\", searchQuery.trim());\n  }\n  if (statuses?.length) {\n    query.set(\"status\", statuses.join(\",\"));\n  }\n\n  return makeAPIRequest(`/api/v1/public/feedbacks.list?${query.toString()}`, {\n    ...(token && { token }),\n  });\n};\n\nexport const fetchFeedbackBoards = () => {\n  return makeAPIRequest(\"/api/v1/public/feedbacks.summary\");\n};\n\nexport const fetchFeedbackBoardList = () => {\n  return makeAPIRequest(\"/api/v1/public/feedback-boards.list\");\n};\n\nexport const fetchFeedbackVoteInfo = (id: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-votes.info\", {\n    ...(token && { token }),\n    ...(id && { id }),\n  });\n};\n\nexport const createFeedbackVote = (id: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-votes.create\", {\n    id: id,\n    source: \"public\",\n    ...(token && { token }),\n  });\n};\n\nexport const deleteFeedbackVote = (id: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-votes.delete\", {\n    id: id,\n    ...(token && { token }),\n  });\n};\n\nexport const fetchFeedbackList = (url: string, token?: string) => {\n  return makeAPIRequest(url, {\n    ...(token && { token }),\n  });\n};\n\nexport const fetchFeedbackById = (feedbackId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedbacks.info\", {\n    id: feedbackId,\n    ...(token && { token }),\n  });\n};\n\nexport const fetchFeedbackReplayPreview = ({\n  feedbackId,\n  replayEvidence,\n  token,\n}: {\n  feedbackId?: string;\n  replayEvidence?: ReplayEvidence;\n  token?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-replays.preview\", {\n    ...(feedbackId && { feedbackId }),\n    ...(replayEvidence && { replayEvidence }),\n    ...(token && { token }),\n  });\n};\n\n// Feedback comments API functions\nexport const fetchFeedbackComments = (feedbackId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-comments.list\", {\n    id: feedbackId,\n    ...(token && { token }),\n  });\n};\n\nexport const createFeedbackComment = (\n  feedbackId: string,\n  text: string,\n  token?: string,\n  parentId?: string,\n) => {\n  return makeAPIRequest(\"/api/v1/public/feedback-comments.create\", {\n    id: feedbackId,\n    text,\n    source: \"public\",\n    ...(token && { token }),\n    ...(parentId && { parentId }),\n  });\n};\n\n// Help center articles API functions\nexport const fetchArticles = (\n  query?: string,\n  limit = 100,\n  token?: string,\n  language?: string,\n  collectionId?: string,\n  orderByCollection?: boolean,\n) => {\n  return makeAPIRequest(\"/api/v1/public/articles.list\", {\n    ...(query && { search: query }),\n    limit,\n    omitText: true,\n    ...(token && { token }),\n    ...(language && { language }),\n    ...(collectionId && { collectionId }),\n    ...(orderByCollection != null && { orderByCollection }),\n  });\n};\n\nexport const getHelpCenterReportingContext = () => {\n  const config = Config.getInstance().get();\n  if (config?.widget?.preview) return {};\n  return {\n    reportingSource: config?.reportingSource || \"in_app\",\n    reportingVisitorId: getHelpCenterVisitorId(),\n    ...getHelpCenterReportingSession(),\n  };\n};\n\nexport const trackHelpCenterEvent = (\n  event: \"visit\" | \"article_view\" | \"search_click\",\n  details: { articleId?: string; query?: string; searchId?: string; language?: string } = {},\n  token?: string,\n) => {\n  if (Config.getInstance().get()?.widget?.preview) return;\n  const key = JSON.stringify([\n    getRequestAuthBody(),\n    getHelpCenterReportingContext().reportingSource,\n    event,\n    details,\n  ]);\n  if (!shouldTrackHelpCenterEvent(key)) return;\n  void makeAPIRequest(\"/api/v1/public/help-center.track\", {\n    ...getHelpCenterReportingContext(),\n    event,\n    ...details,\n    ...(token && { token }),\n  }).catch(() => {});\n};\n\nexport const trackHelpCenterSearchClick = (article: any, token?: string) => {\n  if (article.reportingSearch) {\n    trackHelpCenterEvent(\n      \"search_click\",\n      { articleId: article.id, ...article.reportingSearch, language: article.language },\n      token,\n    );\n  }\n};\n\nexport const searchArticles = async (\n  query: string,\n  limit = 25,\n  token?: string,\n  language?: string,\n  collectionId?: string,\n) => {\n  const searchId = createHelpCenterReportingId();\n  const response = await makeAPIRequest(\"/api/v1/public/articles.search\", {\n    query: query.trim(),\n    limit,\n    searchId,\n    ...getHelpCenterReportingContext(),\n    ...(token && { token }),\n    ...(language && { language }),\n    ...(collectionId && { collectionId }),\n  });\n  return {\n    ...response,\n    data: (response?.data || []).map((article: any) => ({\n      ...article,\n      reportingSearch: { searchId, query: query.trim() },\n    })),\n  };\n};\n\nexport const fetchPopularArticles = (limit = 5, token?: string, language?: string) => {\n  return makeAPIRequest(\"/api/v1/public/articles.list\", {\n    limit,\n    omitText: true,\n    sortBy: \"popular\",\n    ...(token && { token }),\n    ...(language && { language }),\n  });\n};\n\nexport const fetchArticleById = (articleId: string, token?: string, language?: string) => {\n  return makeAPIRequest(\"/api/v1/public/articles.info\", {\n    id: articleId,\n    ...(token && { token }),\n    ...(language && { language }),\n  });\n};\n\nexport const fetchArticleCollection = (collectionId: string, token?: string, language?: string) => {\n  return makeAPIRequest(\"/api/v1/public/article-collections.info\", {\n    id: collectionId,\n    ...(token && { token }),\n    ...(language && { language }),\n  });\n};\n\nexport const fetchArticleCollections = (token?: string, language?: string) => {\n  return makeAPIRequest(\"/api/v1/public/article-collections.list?includeArticleCount=false\", {\n    ...(token && { token }),\n    ...(language && { language }),\n  });\n};\n\nexport const fetchArticleVoteInfo = (articleId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/article-votes.info\", {\n    id: articleId,\n    ...(token && { token }),\n  });\n};\n\nexport const createArticleVote = (articleId: string, value: number, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/article-votes.create\", {\n    id: articleId,\n    value,\n    ...getHelpCenterReportingContext(),\n    ...(token && { token }),\n  });\n};\n\nexport const deleteArticleVote = (articleId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/article-votes.delete\", {\n    id: articleId,\n    ...(token && { token }),\n  });\n};\n\nexport const fetchPageResources = (url: string, token?: string, language?: string) => {\n  return makeAPIRequest(\"/api/v1/public/page-resources.list\", {\n    url,\n    ...(token && { token }),\n    ...(language && { language }),\n  });\n};\n\nexport const fetchSupportThreads = (\n  token?: string,\n  params?: { active?: boolean; limit?: number },\n) => {\n  return makeAPIRequest(\"/api/v1/public/support-threads.list\", {\n    ...(token && { token }),\n    ...(params?.active && { active: true }),\n    ...(params?.limit && { limit: params.limit }),\n  });\n};\n\nexport const fetchSupportThread = (threadId: string, token?: string) => {\n  return makeAPIRequest(\"/api/v1/public/support-threads.info\", {\n    id: threadId,\n    ...(token && { token }),\n  });\n};\n\nexport const getSupportEventsUrl = (token: string) => {\n  const config = Config.getInstance();\n  const all = config.get();\n  if (!all) return null;\n\n  const params = new URLSearchParams({ token, ...getRequestAuthBody() });\n  return `${all.apiHost}/api/v1/public/support-events.stream?${params.toString()}`;\n};\n\nexport const createSupportThread = ({\n  subject,\n  body,\n  email,\n  emailHash,\n  name,\n  token,\n  currentUrl,\n  attachments,\n  aiConversationId,\n  aiTranscript,\n  includeChatGreeting,\n  priorMessages,\n  handoffOnly,\n  customFields,\n  intent,\n  requestFormId,\n}: {\n  subject?: string;\n  body: string;\n  email?: string;\n  emailHash?: string;\n  name?: string;\n  token?: string;\n  currentUrl?: string;\n  attachments?: Array<{ url: string; name: string; type: string; size?: number }>;\n  aiConversationId?: string;\n  aiTranscript?: Array<{ role: \"user\" | \"assistant\"; content: string }>;\n  includeChatGreeting?: boolean;\n  priorMessages?: string[];\n  handoffOnly?: boolean;\n  customFields?: Array<{ id: string; label: string; value: string | boolean }>;\n  intent?: \"support_request\" | \"product_feedback\";\n  requestFormId?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/support-threads.create\", {\n    subject,\n    body,\n    email,\n    emailHash,\n    name,\n    currentUrl,\n    ...(attachments && attachments.length > 0 && { attachments }),\n    ...(aiConversationId && { aiConversationId }),\n    ...(aiTranscript && aiTranscript.length > 0 && { aiTranscript }),\n    ...(includeChatGreeting && { includeChatGreeting: true }),\n    ...(priorMessages && priorMessages.length > 0 && { priorMessages }),\n    ...(handoffOnly && { handoffOnly: true }),\n    ...(customFields && customFields.length > 0 && { customFields }),\n    ...(intent && { intent }),\n    ...(requestFormId && { requestFormId }),\n    sourceChannel: \"widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const createSupportMessage = ({\n  threadId,\n  body,\n  token,\n  attachments,\n  email,\n}: {\n  threadId: string;\n  body: string;\n  token?: string;\n  attachments?: Array<{ url: string; name: string; type: string; size?: number }>;\n  email?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/support-messages.create\", {\n    threadId,\n    body,\n    ...(attachments && attachments.length > 0 && { attachments }),\n    ...(email && { email }),\n    sourceChannel: \"widget\",\n    ...(token && { token }),\n  });\n};\n\nexport const sendSupportTyping = ({\n  threadId,\n  isTyping,\n  token,\n}: {\n  threadId: string;\n  isTyping: boolean;\n  token?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/support-typing.update\", {\n    threadId,\n    isTyping,\n    ...(token && { token }),\n  });\n};\n\nexport const closeSupportThread = ({\n  threadId,\n  token,\n  email,\n}: {\n  threadId: string;\n  token?: string;\n  email?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/support-threads.close\", {\n    id: threadId,\n    ...(email && { email }),\n    ...(token && { token }),\n  });\n};\n\nexport const reopenSupportThread = ({\n  threadId,\n  token,\n  email,\n}: {\n  threadId: string;\n  token?: string;\n  email?: string;\n}) => {\n  return makeAPIRequest(\"/api/v1/public/support-threads.reopen\", {\n    id: threadId,\n    ...(email && { email }),\n    ...(token && { token }),\n  });\n};\n","import { useEffect, useState } from \"react\";\nimport { Logger } from \"../../lib/logger\";\nimport {\n  fetchAnnouncements,\n  fetchCollections,\n  fetchRoadmapViewItems,\n  fetchRoadmapViews,\n  fetchTeamInfo,\n  fetchTeamMembers,\n} from \"./api-utils\";\nimport { RoadmapData } from \"./use-roadmap-data\";\n\nconst logger = Logger.getInstance();\n\ntype WidgetNavigationTab = \"home\" | \"feedback\" | \"roadmap\" | \"updates\" | \"help\";\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  author?: {\n    name?: string;\n    email?: string;\n  };\n  parentId?: string;\n}\n\ninterface Reaction {\n  id: string;\n  value: number;\n  type: string;\n  count?: number;\n}\n\ninterface Announcement {\n  id: string;\n  title: string;\n  text: string;\n  createdAt: string;\n  url?: string;\n  pinned?: boolean;\n  collectionId?: string;\n  meta?: {\n    ctaLink?: string;\n    ctaTitle?: string;\n    ctaImage?: string;\n    ctaImageCaption?: string;\n  };\n  reactions?: Reaction[];\n  comments?: Comment[];\n  commentsCount?: number;\n  reactionsCount?: number;\n  userReaction?: number;\n}\n\ninterface Team {\n  id: string;\n  name: string;\n  subdomain: string;\n  avatarUrl?: string;\n  theme: {\n    primaryColor: string;\n  };\n  configuration?: {\n    widgetDescription?: string;\n    disableBranding?: boolean;\n    portalLogoLight?: string | null;\n    portalLogoDark?: string | null;\n    aiAssistant?: {\n      enabled?: boolean | null;\n    };\n    feedback?: {\n      enableVoiceFeedback?: boolean;\n      enableReplayEvidence?: boolean;\n      enableScreenRecording?: boolean;\n    };\n    widget?: {\n      primaryColor?: string | null;\n      primaryColorLight?: string | null;\n      primaryColorDark?: string | null;\n      primaryButtonBackgroundColorLight?: string | null;\n      primaryButtonBackgroundColorDark?: string | null;\n      primaryButtonTextColorLight?: string | null;\n      primaryButtonTextColorDark?: string | null;\n      welcomeText?: string | null;\n      showWelcomeLogo?: boolean | null;\n      welcomeLogoUrl?: string | null;\n      welcomeLogoUrlLight?: string | null;\n      welcomeLogoUrlDark?: string | null;\n      welcomeLogoHeight?: number | null;\n      launcherText?: string | null;\n      launcherIconSvg?: string | null;\n      launcherOpenIconSvg?: string | null;\n      launcherBackgroundColorLight?: string | null;\n      launcherIconColorLight?: string | null;\n      launcherBackgroundColorDark?: string | null;\n      launcherIconColorDark?: string | null;\n      activeTabs?: WidgetNavigationTab[];\n      tabOrder?: WidgetNavigationTab[];\n      defaultTab?: WidgetNavigationTab;\n    };\n  };\n}\n\ninterface Collection {\n  id: string;\n  name: string;\n  description?: string;\n  color: string;\n}\n\nexport interface TeamMember {\n  id: string;\n  name: string;\n  avatarUrl?: string;\n  meta?: {\n    role?: string;\n  };\n  email?: string;\n}\n\ninterface WidgetData {\n  team: Team | null;\n  announcements: Announcement[];\n  collections: Collection[];\n  roadmapData: RoadmapData | null;\n  teamMembers: TeamMember[];\n  loading: boolean;\n  error: string | null;\n  newUpdatesCount: number;\n}\n\nexport const useWidgetData = (subscriberCode?: string): WidgetData => {\n  const [data, setData] = useState<WidgetData>({\n    team: null,\n    announcements: [],\n    collections: [],\n    teamMembers: [],\n    roadmapData: null,\n    loading: true,\n    error: null,\n    newUpdatesCount: 0,\n  });\n\n  useEffect(() => {\n    const loadBasicData = async () => {\n      try {\n        setData((prev) => ({ ...prev, loading: true, error: null }));\n\n        // Only fetch team info and collections (needed for basic widget setup)\n        const [teamResponse, collectionsResponse, teamMembersResponse] = await Promise.all([\n          fetchTeamInfo(),\n          fetchCollections(),\n          fetchTeamMembers(),\n        ]);\n\n        const team = teamResponse?.data;\n        const collections = collectionsResponse?.data || [];\n        const teamMembers = teamMembersResponse?.data || [];\n\n        logger.log(\"teamMembers\", teamMembers);\n\n        if (!team) {\n          throw new Error(\"Team information not found\");\n        }\n\n        setData({\n          team,\n          announcements: [],\n          collections,\n          teamMembers,\n          roadmapData: null,\n          loading: false,\n          error: null,\n          newUpdatesCount: 0,\n        });\n      } catch (error) {\n        logger.error(\"Failed to load basic widget data:\", error);\n        setData((prev) => ({\n          ...prev,\n          loading: false,\n          error: error instanceof Error ? error.message : \"Failed to load data\",\n        }));\n      }\n    };\n\n    void loadBasicData();\n  }, [subscriberCode]);\n\n  return data;\n};\n\n// Hook for lazy loading announcements when updates tab is active\nexport const useAnnouncementsData = (isActive: boolean, subscriberCode?: string) => {\n  const [announcements, setAnnouncements] = useState<Announcement[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [newUpdatesCount, setNewUpdatesCount] = useState(0);\n\n  useEffect(() => {\n    if (!isActive) return;\n\n    const loadAnnouncements = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n\n        const announcementsResponse = await fetchAnnouncements(10, 0, subscriberCode);\n        const announcements = announcementsResponse?.data || [];\n\n        // Calculate new updates count (announcements from last 7 days)\n        const oneWeekAgo = new Date();\n        oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);\n\n        const newUpdatesCount = announcements.filter((announcement: Announcement) => {\n          const createdAt = new Date(announcement.createdAt);\n          return createdAt > oneWeekAgo;\n        }).length;\n\n        setAnnouncements(announcements);\n        setNewUpdatesCount(newUpdatesCount);\n      } catch (error) {\n        console.error(\"Failed to load announcements:\", error);\n        setError(error instanceof Error ? error.message : \"Failed to load announcements\");\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    void loadAnnouncements();\n  }, [isActive, subscriberCode]);\n\n  return { announcements, loading, error, newUpdatesCount };\n};\n\n// Hook for lazy loading roadmap data when roadmap tab is active\nexport const useRoadmapDataLazy = (isActive: boolean, subscriberCode?: string) => {\n  const [roadmapData, setRoadmapData] = useState<RoadmapData | null>(null);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    if (!isActive) return;\n\n    const loadRoadmap = async () => {\n      try {\n        setLoading(true);\n        setError(null);\n\n        const roadmapViewsResponse = await fetchRoadmapViews(subscriberCode);\n        const roadmapViews = roadmapViewsResponse?.data || [];\n        const defaultRoadmapView =\n          roadmapViews.find((roadmapView: { isDefault?: boolean }) => roadmapView.isDefault) ||\n          roadmapViews[0];\n        const roadmapResponse = defaultRoadmapView\n          ? await fetchRoadmapViewItems({\n              id: defaultRoadmapView.id,\n              token: subscriberCode,\n            })\n          : null;\n        const roadmapData = roadmapResponse?.data || null;\n\n        setRoadmapData(roadmapData);\n      } catch (error) {\n        logger.error(\"Failed to load roadmap data:\", error);\n        setError(error instanceof Error ? error.message : \"Failed to load roadmap data\");\n      } finally {\n        setLoading(false);\n      }\n    };\n\n    void loadRoadmap();\n  }, [isActive, subscriberCode]);\n\n  return { roadmapData, loading, error };\n};\n\n// Hook for infinite scroll announcements\nexport const useAnnouncementsPagination = (subscriberCode?: string) => {\n  const [announcements, setAnnouncements] = useState<Announcement[]>([]);\n  const [loading, setLoading] = useState(false);\n  const [hasMore, setHasMore] = useState(true);\n  const [page, setPage] = useState(0);\n\n  const loadMore = async () => {\n    if (loading || !hasMore) return;\n\n    try {\n      setLoading(true);\n      const response = await fetchAnnouncements(10, page * 10, subscriberCode);\n      const newAnnouncements = response?.data?.data || [];\n\n      if (newAnnouncements.length === 0) {\n        setHasMore(false);\n      } else {\n        setAnnouncements((prev) => [...prev, ...newAnnouncements]);\n        setPage((prev) => prev + 1);\n      }\n    } catch (error) {\n      logger.error(\"Failed to load more announcements:\", error);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  // Load initial data\n  useEffect(() => {\n    if (page === 0) {\n      void loadMore();\n    }\n  }, []);\n\n  return {\n    announcements,\n    loading,\n    hasMore,\n    loadMore,\n  };\n};\n","// src/subscribable.ts\nvar Subscribable = class {\n  constructor() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.subscribe = this.subscribe.bind(this);\n  }\n  subscribe(listener) {\n    this.listeners.add(listener);\n    this.onSubscribe();\n    return () => {\n      this.listeners.delete(listener);\n      this.onUnsubscribe();\n    };\n  }\n  hasListeners() {\n    return this.listeners.size > 0;\n  }\n  onSubscribe() {\n  }\n  onUnsubscribe() {\n  }\n};\nexport {\n  Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n  #focused;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onFocus) => {\n      if (typeof window !== \"undefined\" && window.addEventListener) {\n        const listener = () => onFocus();\n        window.addEventListener(\"visibilitychange\", listener, false);\n        return () => {\n          window.removeEventListener(\"visibilitychange\", listener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup((focused) => {\n      if (typeof focused === \"boolean\") {\n        this.setFocused(focused);\n      } else {\n        this.onFocus();\n      }\n    });\n  }\n  setFocused(focused) {\n    const changed = this.#focused !== focused;\n    if (changed) {\n      this.#focused = focused;\n      this.onFocus();\n    }\n  }\n  onFocus() {\n    const isFocused = this.isFocused();\n    this.listeners.forEach((listener) => {\n      listener(isFocused);\n    });\n  }\n  isFocused() {\n    if (typeof this.#focused === \"boolean\") {\n      return this.#focused;\n    }\n    return globalThis.document?.visibilityState !== \"hidden\";\n  }\n};\nvar focusManager = new FocusManager();\nexport {\n  FocusManager,\n  focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n  // We need the wrapper function syntax below instead of direct references to\n  // global setTimeout etc.\n  //\n  // BAD: `setTimeout: setTimeout`\n  // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n  //\n  // If we use direct references here, then anything that wants to spy on or\n  // replace the global setTimeout (like tests) won't work since we'll already\n  // have a hard reference to the original implementation at the time when this\n  // file was imported.\n  setTimeout: (callback, delay) => setTimeout(callback, delay),\n  clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n  setInterval: (callback, delay) => setInterval(callback, delay),\n  clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n  // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n  // type at app boot; and if we leave that type, then any new timer provider\n  // would need to support ReturnType<typeof setTimeout>, which is infeasible.\n  //\n  // We settle for type safety for the TimeoutProvider type, and accept that\n  // this class is unsafe internally to allow for extension.\n  #provider = defaultTimeoutProvider;\n  #providerCalled = false;\n  setTimeoutProvider(provider) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (this.#providerCalled && provider !== this.#provider) {\n        console.error(\n          `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n          { previous: this.#provider, provider }\n        );\n      }\n    }\n    this.#provider = provider;\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = false;\n    }\n  }\n  setTimeout(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setTimeout(callback, delay);\n  }\n  clearTimeout(timeoutId) {\n    this.#provider.clearTimeout(timeoutId);\n  }\n  setInterval(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setInterval(callback, delay);\n  }\n  clearInterval(intervalId) {\n    this.#provider.clearInterval(intervalId);\n  }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n  setTimeout(callback, 0);\n}\nexport {\n  TimeoutManager,\n  defaultTimeoutProvider,\n  systemSetTimeoutZero,\n  timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n  return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n  return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n  return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n  return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n  const {\n    type = \"all\",\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale\n  } = filters;\n  if (queryKey) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false;\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false;\n    }\n  }\n  if (type !== \"all\") {\n    const isActive = query.isActive();\n    if (type === \"active\" && !isActive) {\n      return false;\n    }\n    if (type === \"inactive\" && isActive) {\n      return false;\n    }\n  }\n  if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n    return false;\n  }\n  if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n    return false;\n  }\n  if (predicate && !predicate(query)) {\n    return false;\n  }\n  return true;\n}\nfunction matchMutation(filters, mutation) {\n  const { exact, status, predicate, mutationKey } = filters;\n  if (mutationKey) {\n    if (!mutation.options.mutationKey) {\n      return false;\n    }\n    if (exact) {\n      if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n        return false;\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false;\n    }\n  }\n  if (status && mutation.state.status !== status) {\n    return false;\n  }\n  if (predicate && !predicate(mutation)) {\n    return false;\n  }\n  return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n  const hashFn = options?.queryKeyHashFn || hashKey;\n  return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n  return JSON.stringify(\n    queryKey,\n    (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n      result[key] = val[key];\n      return result;\n    }, {}) : val\n  );\n}\nfunction partialMatchKey(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n  }\n  return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n  if (a === b) {\n    return a;\n  }\n  if (depth > 500) return b;\n  const array = isPlainArray(a) && isPlainArray(b);\n  if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n  const aItems = array ? a : Object.keys(a);\n  const aSize = aItems.length;\n  const bItems = array ? b : Object.keys(b);\n  const bSize = bItems.length;\n  const copy = array ? new Array(bSize) : {};\n  let equalItems = 0;\n  for (let i = 0; i < bSize; i++) {\n    const key = array ? i : bItems[i];\n    const aItem = a[key];\n    const bItem = b[key];\n    if (aItem === bItem) {\n      copy[key] = aItem;\n      if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n      continue;\n    }\n    if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n      copy[key] = bItem;\n      continue;\n    }\n    const v = replaceEqualDeep(aItem, bItem, depth + 1);\n    copy[key] = v;\n    if (v === aItem) equalItems++;\n  }\n  return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n  if (!b || Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isPlainArray(value) {\n  return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n  if (!hasObjectPrototype(o)) {\n    return false;\n  }\n  const ctor = o.constructor;\n  if (ctor === void 0) {\n    return true;\n  }\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n  if (Object.getPrototypeOf(o) !== Object.prototype) {\n    return false;\n  }\n  return true;\n}\nfunction hasObjectPrototype(o) {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n  return new Promise((resolve) => {\n    timeoutManager.setTimeout(resolve, timeout);\n  });\n}\nfunction replaceData(prevData, data, options) {\n  if (typeof options.structuralSharing === \"function\") {\n    return options.structuralSharing(prevData, data);\n  } else if (options.structuralSharing !== false) {\n    if (process.env.NODE_ENV !== \"production\") {\n      try {\n        return replaceEqualDeep(prevData, data);\n      } catch (error) {\n        console.error(\n          `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n        );\n        throw error;\n      }\n    }\n    return replaceEqualDeep(prevData, data);\n  }\n  return data;\n}\nfunction keepPreviousData(previousData) {\n  return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n  const newItems = [...items, item];\n  return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n  const newItems = [item, ...items];\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (options.queryFn === skipToken) {\n      console.error(\n        `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n      );\n    }\n  }\n  if (!options.queryFn && fetchOptions?.initialPromise) {\n    return () => fetchOptions.initialPromise;\n  }\n  if (!options.queryFn || options.queryFn === skipToken) {\n    return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n  }\n  return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n  if (typeof throwOnError === \"function\") {\n    return throwOnError(...params);\n  }\n  return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n  let consumed = false;\n  let signal;\n  Object.defineProperty(object, \"signal\", {\n    enumerable: true,\n    get: () => {\n      signal ??= getSignal();\n      if (consumed) {\n        return signal;\n      }\n      consumed = true;\n      if (signal.aborted) {\n        onCancelled();\n      } else {\n        signal.addEventListener(\"abort\", onCancelled, { once: true });\n      }\n      return signal;\n    }\n  });\n  return object;\n}\nexport {\n  addConsumeAwareSignal,\n  addToEnd,\n  addToStart,\n  ensureQueryFn,\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  isPlainArray,\n  isPlainObject,\n  isServer,\n  isValidTimeout,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceData,\n  replaceEqualDeep,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  shouldThrowError,\n  skipToken,\n  sleep,\n  timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n  let isServerFn = () => isServer;\n  return {\n    /**\n     * Returns whether the current runtime should be treated as a server environment.\n     */\n    isServer() {\n      return isServerFn();\n    },\n    /**\n     * Overrides the server check globally.\n     */\n    setIsServer(isServerValue) {\n      isServerFn = isServerValue;\n    }\n  };\n})();\nexport {\n  environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n  let resolve;\n  let reject;\n  const thenable = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  thenable.status = \"pending\";\n  thenable.catch(() => {\n  });\n  function finalize(data) {\n    Object.assign(thenable, data);\n    delete thenable.resolve;\n    delete thenable.reject;\n  }\n  thenable.resolve = (value) => {\n    finalize({\n      status: \"fulfilled\",\n      value\n    });\n    resolve(value);\n  };\n  thenable.reject = (reason) => {\n    finalize({\n      status: \"rejected\",\n      reason\n    });\n    reject(reason);\n  };\n  return thenable;\n}\nfunction tryResolveSync(promise) {\n  let data;\n  promise.then((result) => {\n    data = result;\n    return result;\n  }, noop)?.catch(noop);\n  if (data !== void 0) {\n    return { data };\n  }\n  return void 0;\n}\nexport {\n  pendingThenable,\n  tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n  let queue = [];\n  let transactions = 0;\n  let notifyFn = (callback) => {\n    callback();\n  };\n  let batchNotifyFn = (callback) => {\n    callback();\n  };\n  let scheduleFn = defaultScheduler;\n  const schedule = (callback) => {\n    if (transactions) {\n      queue.push(callback);\n    } else {\n      scheduleFn(() => {\n        notifyFn(callback);\n      });\n    }\n  };\n  const flush = () => {\n    const originalQueue = queue;\n    queue = [];\n    if (originalQueue.length) {\n      scheduleFn(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback);\n          });\n        });\n      });\n    }\n  };\n  return {\n    batch: (callback) => {\n      let result;\n      transactions++;\n      try {\n        result = callback();\n      } finally {\n        transactions--;\n        if (!transactions) {\n          flush();\n        }\n      }\n      return result;\n    },\n    /**\n     * All calls to the wrapped function will be batched.\n     */\n    batchCalls: (callback) => {\n      return (...args) => {\n        schedule(() => {\n          callback(...args);\n        });\n      };\n    },\n    schedule,\n    /**\n     * Use this method to set a custom notify function.\n     * This can be used to for example wrap notifications with `React.act` while running tests.\n     */\n    setNotifyFunction: (fn) => {\n      notifyFn = fn;\n    },\n    /**\n     * Use this method to set a custom function to batch notifications together into a single tick.\n     * By default React Query will use the batch function provided by ReactDOM or React Native.\n     */\n    setBatchNotifyFunction: (fn) => {\n      batchNotifyFn = fn;\n    },\n    setScheduler: (fn) => {\n      scheduleFn = fn;\n    }\n  };\n}\nvar notifyManager = createNotifyManager();\nexport {\n  createNotifyManager,\n  defaultScheduler,\n  notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n  #online = true;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onOnline) => {\n      if (typeof window !== \"undefined\" && window.addEventListener) {\n        const onlineListener = () => onOnline(true);\n        const offlineListener = () => onOnline(false);\n        window.addEventListener(\"online\", onlineListener, false);\n        window.addEventListener(\"offline\", offlineListener, false);\n        return () => {\n          window.removeEventListener(\"online\", onlineListener);\n          window.removeEventListener(\"offline\", offlineListener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup(this.setOnline.bind(this));\n  }\n  setOnline(online) {\n    const changed = this.#online !== online;\n    if (changed) {\n      this.#online = online;\n      this.listeners.forEach((listener) => {\n        listener(online);\n      });\n    }\n  }\n  isOnline() {\n    return this.#online;\n  }\n};\nvar onlineManager = new OnlineManager();\nexport {\n  OnlineManager,\n  onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n  return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n  return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n  constructor(options) {\n    super(\"CancelledError\");\n    this.revert = options?.revert;\n    this.silent = options?.silent;\n  }\n};\nfunction isCancelledError(value) {\n  return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n  let isRetryCancelled = false;\n  let failureCount = 0;\n  let continueFn;\n  const thenable = pendingThenable();\n  const isResolved = () => thenable.status !== \"pending\";\n  const cancel = (cancelOptions) => {\n    if (!isResolved()) {\n      const error = new CancelledError(cancelOptions);\n      reject(error);\n      config.onCancel?.(error);\n    }\n  };\n  const cancelRetry = () => {\n    isRetryCancelled = true;\n  };\n  const continueRetry = () => {\n    isRetryCancelled = false;\n  };\n  const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n  const canStart = () => canFetch(config.networkMode) && config.canRun();\n  const resolve = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.resolve(value);\n    }\n  };\n  const reject = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.reject(value);\n    }\n  };\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        if (isResolved() || canContinue()) {\n          continueResolve(value);\n        }\n      };\n      config.onPause?.();\n    }).then(() => {\n      continueFn = void 0;\n      if (!isResolved()) {\n        config.onContinue?.();\n      }\n    });\n  };\n  const run = () => {\n    if (isResolved()) {\n      return;\n    }\n    let promiseOrValue;\n    const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n    try {\n      promiseOrValue = initialPromise ?? config.fn();\n    } catch (error) {\n      promiseOrValue = Promise.reject(error);\n    }\n    Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n      if (isResolved()) {\n        return;\n      }\n      const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n      const retryDelay = config.retryDelay ?? defaultRetryDelay;\n      const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n      const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n      if (isRetryCancelled || !shouldRetry) {\n        reject(error);\n        return;\n      }\n      failureCount++;\n      config.onFail?.(failureCount, error);\n      sleep(delay).then(() => {\n        return canContinue() ? void 0 : pause();\n      }).then(() => {\n        if (isRetryCancelled) {\n          reject(error);\n        } else {\n          run();\n        }\n      });\n    });\n  };\n  return {\n    promise: thenable,\n    status: () => thenable.status,\n    cancel,\n    continue: () => {\n      continueFn?.();\n      return thenable;\n    },\n    cancelRetry,\n    continueRetry,\n    canStart,\n    start: () => {\n      if (canStart()) {\n        run();\n      } else {\n        pause().then(run);\n      }\n      return thenable;\n    }\n  };\n}\nexport {\n  CancelledError,\n  canFetch,\n  createRetryer,\n  isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n  #gcTimeout;\n  destroy() {\n    this.clearGcTimeout();\n  }\n  scheduleGc() {\n    this.clearGcTimeout();\n    if (isValidTimeout(this.gcTime)) {\n      this.#gcTimeout = timeoutManager.setTimeout(() => {\n        this.optionalRemove();\n      }, this.gcTime);\n    }\n  }\n  updateGcTime(newGcTime) {\n    this.gcTime = Math.max(\n      this.gcTime || 0,\n      newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n    );\n  }\n  clearGcTimeout() {\n    if (this.#gcTimeout) {\n      timeoutManager.clearTimeout(this.#gcTimeout);\n      this.#gcTimeout = void 0;\n    }\n  }\n};\nexport {\n  Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  skipToken,\n  timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n  #initialState;\n  #revertState;\n  #cache;\n  #client;\n  #retryer;\n  #defaultOptions;\n  #abortSignalConsumed;\n  constructor(config) {\n    super();\n    this.#abortSignalConsumed = false;\n    this.#defaultOptions = config.defaultOptions;\n    this.setOptions(config.options);\n    this.observers = [];\n    this.#client = config.client;\n    this.#cache = this.#client.getQueryCache();\n    this.queryKey = config.queryKey;\n    this.queryHash = config.queryHash;\n    this.#initialState = getDefaultState(this.options);\n    this.state = config.state ?? this.#initialState;\n    this.scheduleGc();\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  get promise() {\n    return this.#retryer?.promise;\n  }\n  setOptions(options) {\n    this.options = { ...this.#defaultOptions, ...options };\n    this.updateGcTime(this.options.gcTime);\n    if (this.state && this.state.data === void 0) {\n      const defaultState = getDefaultState(this.options);\n      if (defaultState.data !== void 0) {\n        this.setState(\n          successState(defaultState.data, defaultState.dataUpdatedAt)\n        );\n        this.#initialState = defaultState;\n      }\n    }\n  }\n  optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n      this.#cache.remove(this);\n    }\n  }\n  setData(newData, options) {\n    const data = replaceData(this.state.data, newData, this.options);\n    this.#dispatch({\n      data,\n      type: \"success\",\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual\n    });\n    return data;\n  }\n  setState(state, setStateOptions) {\n    this.#dispatch({ type: \"setState\", state, setStateOptions });\n  }\n  cancel(options) {\n    const promise = this.#retryer?.promise;\n    this.#retryer?.cancel(options);\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n  }\n  destroy() {\n    super.destroy();\n    this.cancel({ silent: true });\n  }\n  get resetState() {\n    return this.#initialState;\n  }\n  reset() {\n    this.destroy();\n    this.setState(this.resetState);\n  }\n  isActive() {\n    return this.observers.some(\n      (observer) => resolveEnabled(observer.options.enabled, this) !== false\n    );\n  }\n  isDisabled() {\n    if (this.getObserversCount() > 0) {\n      return !this.isActive();\n    }\n    return this.options.queryFn === skipToken || !this.isFetched();\n  }\n  isFetched() {\n    return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n  }\n  isStatic() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n      );\n    }\n    return false;\n  }\n  isStale() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale\n      );\n    }\n    return this.state.data === void 0 || this.state.isInvalidated;\n  }\n  isStaleByTime(staleTime = 0) {\n    if (this.state.data === void 0) {\n      return true;\n    }\n    if (staleTime === \"static\") {\n      return false;\n    }\n    if (this.state.isInvalidated) {\n      return true;\n    }\n    return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n  }\n  onFocus() {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  onOnline() {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  addObserver(observer) {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer);\n      this.clearGcTimeout();\n      this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n    }\n  }\n  removeObserver(observer) {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer);\n      if (!this.observers.length) {\n        if (this.#retryer) {\n          if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n            this.#retryer.cancel({ revert: true });\n          } else {\n            this.#retryer.cancelRetry();\n          }\n        }\n        this.scheduleGc();\n      }\n      this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n    }\n  }\n  getObserversCount() {\n    return this.observers.length;\n  }\n  #isInitialPausedFetch() {\n    return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n  }\n  invalidate() {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: \"invalidate\" });\n    }\n  }\n  async fetch(options, fetchOptions) {\n    if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n    // re-start the fetch; there is a chance that the query is still in a\n    // pending state when that happens\n    this.#retryer?.status() !== \"rejected\") {\n      if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n        this.cancel({ silent: true });\n      } else if (this.#retryer) {\n        this.#retryer.continueRetry();\n        return this.#retryer.promise;\n      }\n    }\n    if (options) {\n      this.setOptions(options);\n    }\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn);\n      if (observer) {\n        this.setOptions(observer.options);\n      }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n        );\n      }\n    }\n    const abortController = new AbortController();\n    const addSignalProperty = (object) => {\n      Object.defineProperty(object, \"signal\", {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true;\n          return abortController.signal;\n        }\n      });\n    };\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions);\n      const createQueryFnContext = () => {\n        const queryFnContext2 = {\n          client: this.#client,\n          queryKey: this.queryKey,\n          meta: this.meta\n        };\n        addSignalProperty(queryFnContext2);\n        return queryFnContext2;\n      };\n      const queryFnContext = createQueryFnContext();\n      this.#abortSignalConsumed = false;\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this\n        );\n      }\n      return queryFn(queryFnContext);\n    };\n    const createFetchContext = () => {\n      const context2 = {\n        fetchOptions,\n        options: this.options,\n        queryKey: this.queryKey,\n        client: this.#client,\n        state: this.state,\n        fetchFn\n      };\n      addSignalProperty(context2);\n      return context2;\n    };\n    const context = createFetchContext();\n    this.options.behavior?.onFetch(context, this);\n    this.#revertState = this.state;\n    if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n      this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n    }\n    this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise,\n      fn: context.fetchFn,\n      onCancel: (error) => {\n        if (error instanceof CancelledError && error.revert) {\n          this.setState({\n            ...this.#revertState,\n            fetchStatus: \"idle\"\n          });\n        }\n        abortController.abort();\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true\n    });\n    try {\n      const data = await this.#retryer.start();\n      if (data === void 0) {\n        if (process.env.NODE_ENV !== \"production\") {\n          console.error(\n            `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n          );\n        }\n        throw new Error(`${this.queryHash} data is undefined`);\n      }\n      this.setData(data);\n      this.#cache.config.onSuccess?.(data, this);\n      this.#cache.config.onSettled?.(\n        data,\n        this.state.error,\n        this\n      );\n      return data;\n    } catch (error) {\n      if (error instanceof CancelledError) {\n        if (error.silent) {\n          return this.#retryer.promise;\n        } else if (error.revert) {\n          if (this.state.data === void 0) {\n            throw error;\n          }\n          return this.state.data;\n        }\n      }\n      this.#dispatch({\n        type: \"error\",\n        error\n      });\n      this.#cache.config.onError?.(\n        error,\n        this\n      );\n      this.#cache.config.onSettled?.(\n        this.state.data,\n        error,\n        this\n      );\n      throw error;\n    } finally {\n      this.scheduleGc();\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            fetchStatus: \"paused\"\n          };\n        case \"continue\":\n          return {\n            ...state,\n            fetchStatus: \"fetching\"\n          };\n        case \"fetch\":\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null\n          };\n        case \"success\":\n          const newState = {\n            ...state,\n            ...successState(action.data, action.dataUpdatedAt),\n            dataUpdateCount: state.dataUpdateCount + 1,\n            ...!action.manual && {\n              fetchStatus: \"idle\",\n              fetchFailureCount: 0,\n              fetchFailureReason: null\n            }\n          };\n          this.#revertState = action.manual ? newState : void 0;\n          return newState;\n        case \"error\":\n          const error = action.error;\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: \"idle\",\n            status: \"error\",\n            // flag existing data as invalidated if we get a background error\n            // note that \"no data\" always means stale so we can set unconditionally here\n            isInvalidated: true\n          };\n        case \"invalidate\":\n          return {\n            ...state,\n            isInvalidated: true\n          };\n        case \"setState\":\n          return {\n            ...state,\n            ...action.state\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate();\n      });\n      this.#cache.notify({ query: this, type: \"updated\", action });\n    });\n  }\n};\nfunction fetchState(data, options) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n    ...data === void 0 && {\n      error: null,\n      status: \"pending\"\n    }\n  };\n}\nfunction successState(data, dataUpdatedAt) {\n  return {\n    data,\n    dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n    error: null,\n    isInvalidated: false,\n    status: \"success\"\n  };\n}\nfunction getDefaultState(options) {\n  const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n  const hasData = data !== void 0;\n  const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? \"success\" : \"pending\",\n    fetchStatus: \"idle\"\n  };\n}\nexport {\n  Query,\n  fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n  isValidTimeout,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n  constructor(client, options) {\n    super();\n    this.options = options;\n    this.#client = client;\n    this.#selectError = null;\n    this.#currentThenable = pendingThenable();\n    this.bindMethods();\n    this.setOptions(options);\n  }\n  #client;\n  #currentQuery = void 0;\n  #currentQueryInitialState = void 0;\n  #currentResult = void 0;\n  #currentResultState;\n  #currentResultOptions;\n  #currentThenable;\n  #selectError;\n  #selectFn;\n  #selectResult;\n  // This property keeps track of the last query with defined data.\n  // It will be used to pass the previous data and query to the placeholder function between renders.\n  #lastQueryWithDefinedData;\n  #staleTimeoutId;\n  #refetchIntervalId;\n  #currentRefetchInterval;\n  #trackedProps = /* @__PURE__ */ new Set();\n  bindMethods() {\n    this.refetch = this.refetch.bind(this);\n  }\n  onSubscribe() {\n    if (this.listeners.size === 1) {\n      this.#currentQuery.addObserver(this);\n      if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n        this.#executeFetch();\n      } else {\n        this.updateResult();\n      }\n      this.#updateTimers();\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.destroy();\n    }\n  }\n  shouldFetchOnReconnect() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnReconnect\n    );\n  }\n  shouldFetchOnWindowFocus() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus\n    );\n  }\n  destroy() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.#clearStaleTimeout();\n    this.#clearRefetchInterval();\n    this.#currentQuery.removeObserver(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    const prevQuery = this.#currentQuery;\n    this.options = this.#client.defaultQueryOptions(options);\n    if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n      throw new Error(\n        \"Expected enabled to be a boolean or a callback that returns a boolean\"\n      );\n    }\n    this.#updateQuery();\n    this.#currentQuery.setOptions(this.options);\n    if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getQueryCache().notify({\n        type: \"observerOptionsUpdated\",\n        query: this.#currentQuery,\n        observer: this\n      });\n    }\n    const mounted = this.hasListeners();\n    if (mounted && shouldFetchOptionally(\n      this.#currentQuery,\n      prevQuery,\n      this.options,\n      prevOptions\n    )) {\n      this.#executeFetch();\n    }\n    this.updateResult();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n      this.#updateStaleTimeout();\n    }\n    const nextRefetchInterval = this.#computeRefetchInterval();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n      this.#updateRefetchInterval(nextRefetchInterval);\n    }\n  }\n  getOptimisticResult(options) {\n    const query = this.#client.getQueryCache().build(this.#client, options);\n    const result = this.createResult(query, options);\n    if (shouldAssignObserverCurrentProperties(this, result)) {\n      this.#currentResult = result;\n      this.#currentResultOptions = this.options;\n      this.#currentResultState = this.#currentQuery.state;\n    }\n    return result;\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  trackResult(result, onPropTracked) {\n    return new Proxy(result, {\n      get: (target, key) => {\n        this.trackProp(key);\n        onPropTracked?.(key);\n        if (key === \"promise\") {\n          this.trackProp(\"data\");\n          if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n            this.#currentThenable.reject(\n              new Error(\n                \"experimental_prefetchInRender feature flag is not enabled\"\n              )\n            );\n          }\n        }\n        return Reflect.get(target, key);\n      }\n    });\n  }\n  trackProp(key) {\n    this.#trackedProps.add(key);\n  }\n  getCurrentQuery() {\n    return this.#currentQuery;\n  }\n  refetch({ ...options } = {}) {\n    return this.fetch({\n      ...options\n    });\n  }\n  fetchOptimistic(options) {\n    const defaultedOptions = this.#client.defaultQueryOptions(options);\n    const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n    return query.fetch().then(() => this.createResult(query, defaultedOptions));\n  }\n  fetch(fetchOptions) {\n    return this.#executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true\n    }).then(() => {\n      this.updateResult();\n      return this.#currentResult;\n    });\n  }\n  #executeFetch(fetchOptions) {\n    this.#updateQuery();\n    let promise = this.#currentQuery.fetch(\n      this.options,\n      fetchOptions\n    );\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop);\n    }\n    return promise;\n  }\n  #updateStaleTimeout() {\n    this.#clearStaleTimeout();\n    const staleTime = resolveStaleTime(\n      this.options.staleTime,\n      this.#currentQuery\n    );\n    if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n      return;\n    }\n    const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n    const timeout = time + 1;\n    this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n      if (!this.#currentResult.isStale) {\n        this.updateResult();\n      }\n    }, timeout);\n  }\n  #computeRefetchInterval() {\n    return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n  }\n  #updateRefetchInterval(nextInterval) {\n    this.#clearRefetchInterval();\n    this.#currentRefetchInterval = nextInterval;\n    if (environmentManager.isServer() || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n      return;\n    }\n    this.#refetchIntervalId = timeoutManager.setInterval(() => {\n      if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n        this.#executeFetch();\n      }\n    }, this.#currentRefetchInterval);\n  }\n  #updateTimers() {\n    this.#updateStaleTimeout();\n    this.#updateRefetchInterval(this.#computeRefetchInterval());\n  }\n  #clearStaleTimeout() {\n    if (this.#staleTimeoutId) {\n      timeoutManager.clearTimeout(this.#staleTimeoutId);\n      this.#staleTimeoutId = void 0;\n    }\n  }\n  #clearRefetchInterval() {\n    if (this.#refetchIntervalId) {\n      timeoutManager.clearInterval(this.#refetchIntervalId);\n      this.#refetchIntervalId = void 0;\n    }\n  }\n  createResult(query, options) {\n    const prevQuery = this.#currentQuery;\n    const prevOptions = this.options;\n    const prevResult = this.#currentResult;\n    const prevResultState = this.#currentResultState;\n    const prevResultOptions = this.#currentResultOptions;\n    const queryChange = query !== prevQuery;\n    const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n    const { state } = query;\n    let newState = { ...state };\n    let isPlaceholderData = false;\n    let data;\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners();\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n      const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n      if (fetchOnMount || fetchOptionally) {\n        newState = {\n          ...newState,\n          ...fetchState(state.data, query.options)\n        };\n      }\n      if (options._optimisticResults === \"isRestoring\") {\n        newState.fetchStatus = \"idle\";\n      }\n    }\n    let { error, errorUpdatedAt, status } = newState;\n    data = newState.data;\n    let skipSelect = false;\n    if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n      let placeholderData;\n      if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n        placeholderData = prevResult.data;\n        skipSelect = true;\n      } else {\n        placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n          this.#lastQueryWithDefinedData?.state.data,\n          this.#lastQueryWithDefinedData\n        ) : options.placeholderData;\n      }\n      if (placeholderData !== void 0) {\n        status = \"success\";\n        data = replaceData(\n          prevResult?.data,\n          placeholderData,\n          options\n        );\n        isPlaceholderData = true;\n      }\n    }\n    if (options.select && data !== void 0 && !skipSelect) {\n      if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n        data = this.#selectResult;\n      } else {\n        try {\n          this.#selectFn = options.select;\n          data = options.select(data);\n          data = replaceData(prevResult?.data, data, options);\n          this.#selectResult = data;\n          this.#selectError = null;\n        } catch (selectError) {\n          this.#selectError = selectError;\n        }\n      }\n    }\n    if (this.#selectError) {\n      error = this.#selectError;\n      data = this.#selectResult;\n      errorUpdatedAt = Date.now();\n      status = \"error\";\n    }\n    const isFetching = newState.fetchStatus === \"fetching\";\n    const isPending = status === \"pending\";\n    const isError = status === \"error\";\n    const isLoading = isPending && isFetching;\n    const hasData = data !== void 0;\n    const result = {\n      status,\n      fetchStatus: newState.fetchStatus,\n      isPending,\n      isSuccess: status === \"success\",\n      isError,\n      isInitialLoading: isLoading,\n      isLoading,\n      data,\n      dataUpdatedAt: newState.dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: newState.fetchFailureCount,\n      failureReason: newState.fetchFailureReason,\n      errorUpdateCount: newState.errorUpdateCount,\n      isFetched: query.isFetched(),\n      isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isPending,\n      isLoadingError: isError && !hasData,\n      isPaused: newState.fetchStatus === \"paused\",\n      isPlaceholderData,\n      isRefetchError: isError && hasData,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      promise: this.#currentThenable,\n      isEnabled: resolveEnabled(options.enabled, query) !== false\n    };\n    const nextResult = result;\n    if (this.options.experimental_prefetchInRender) {\n      const hasResultData = nextResult.data !== void 0;\n      const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n      const finalizeThenableIfPossible = (thenable) => {\n        if (isErrorWithoutData) {\n          thenable.reject(nextResult.error);\n        } else if (hasResultData) {\n          thenable.resolve(nextResult.data);\n        }\n      };\n      const recreateThenable = () => {\n        const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n        finalizeThenableIfPossible(pending);\n      };\n      const prevThenable = this.#currentThenable;\n      switch (prevThenable.status) {\n        case \"pending\":\n          if (query.queryHash === prevQuery.queryHash) {\n            finalizeThenableIfPossible(prevThenable);\n          }\n          break;\n        case \"fulfilled\":\n          if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n            recreateThenable();\n          }\n          break;\n        case \"rejected\":\n          if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n            recreateThenable();\n          }\n          break;\n      }\n    }\n    return nextResult;\n  }\n  updateResult() {\n    const prevResult = this.#currentResult;\n    const nextResult = this.createResult(this.#currentQuery, this.options);\n    this.#currentResultState = this.#currentQuery.state;\n    this.#currentResultOptions = this.options;\n    if (this.#currentResultState.data !== void 0) {\n      this.#lastQueryWithDefinedData = this.#currentQuery;\n    }\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return;\n    }\n    this.#currentResult = nextResult;\n    const shouldNotifyListeners = () => {\n      if (!prevResult) {\n        return true;\n      }\n      const { notifyOnChangeProps } = this.options;\n      const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n      if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n        return true;\n      }\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.#trackedProps\n      );\n      if (this.options.throwOnError) {\n        includedProps.add(\"error\");\n      }\n      return Object.keys(this.#currentResult).some((key) => {\n        const typedKey = key;\n        const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n        return changed && includedProps.has(typedKey);\n      });\n    };\n    this.#notify({ listeners: shouldNotifyListeners() });\n  }\n  #updateQuery() {\n    const query = this.#client.getQueryCache().build(this.#client, this.options);\n    if (query === this.#currentQuery) {\n      return;\n    }\n    const prevQuery = this.#currentQuery;\n    this.#currentQuery = query;\n    this.#currentQueryInitialState = query.state;\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this);\n      query.addObserver(this);\n    }\n  }\n  onQueryUpdate() {\n    this.updateResult();\n    if (this.hasListeners()) {\n      this.#updateTimers();\n    }\n  }\n  #notify(notifyOptions) {\n    notifyManager.batch(() => {\n      if (notifyOptions.listeners) {\n        this.listeners.forEach((listener) => {\n          listener(this.#currentResult);\n        });\n      }\n      this.#client.getQueryCache().notify({\n        query: this.#currentQuery,\n        type: \"observerResultsUpdated\"\n      });\n    });\n  }\n};\nfunction shouldLoadOnMount(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n  return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n  if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n    const value = typeof field === \"function\" ? field(query) : field;\n    return value === \"always\" || value !== false && isStale(query, options);\n  }\n  return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n  return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n  if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n    return true;\n  }\n  return false;\n}\nexport {\n  QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport {\n  addConsumeAwareSignal,\n  addToEnd,\n  addToStart,\n  ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n  return {\n    onFetch: (context, query) => {\n      const options = context.options;\n      const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n      const oldPages = context.state.data?.pages || [];\n      const oldPageParams = context.state.data?.pageParams || [];\n      let result = { pages: [], pageParams: [] };\n      let currentPage = 0;\n      const fetchFn = async () => {\n        let cancelled = false;\n        const addSignalProperty = (object) => {\n          addConsumeAwareSignal(\n            object,\n            () => context.signal,\n            () => cancelled = true\n          );\n        };\n        const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n        const fetchPage = async (data, param, previous) => {\n          if (cancelled) {\n            return Promise.reject();\n          }\n          if (param == null && data.pages.length) {\n            return Promise.resolve(data);\n          }\n          const createQueryFnContext = () => {\n            const queryFnContext2 = {\n              client: context.client,\n              queryKey: context.queryKey,\n              pageParam: param,\n              direction: previous ? \"backward\" : \"forward\",\n              meta: context.options.meta\n            };\n            addSignalProperty(queryFnContext2);\n            return queryFnContext2;\n          };\n          const queryFnContext = createQueryFnContext();\n          const page = await queryFn(queryFnContext);\n          const { maxPages } = context.options;\n          const addTo = previous ? addToStart : addToEnd;\n          return {\n            pages: addTo(data.pages, page, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          };\n        };\n        if (direction && oldPages.length) {\n          const previous = direction === \"backward\";\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const oldData = {\n            pages: oldPages,\n            pageParams: oldPageParams\n          };\n          const param = pageParamFn(options, oldData);\n          result = await fetchPage(oldData, param, previous);\n        } else {\n          const remainingPages = pages ?? oldPages.length;\n          do {\n            const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n            if (currentPage > 0 && param == null) {\n              break;\n            }\n            result = await fetchPage(result, param);\n            currentPage++;\n          } while (currentPage < remainingPages);\n        }\n        return result;\n      };\n      if (context.options.persister) {\n        context.fetchFn = () => {\n          return context.options.persister?.(\n            fetchFn,\n            {\n              client: context.client,\n              queryKey: context.queryKey,\n              meta: context.options.meta,\n              signal: context.signal\n            },\n            query\n          );\n        };\n      } else {\n        context.fetchFn = fetchFn;\n      }\n    }\n  };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n  const lastIndex = pages.length - 1;\n  return pages.length > 0 ? options.getNextPageParam(\n    pages[lastIndex],\n    pages,\n    pageParams[lastIndex],\n    pageParams\n  ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n  return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n  if (!data) return false;\n  return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n  if (!data || !options.getPreviousPageParam) return false;\n  return getPreviousPageParam(options, data) != null;\n}\nexport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n} from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n  constructor(client, options) {\n    super(client, options);\n  }\n  bindMethods() {\n    super.bindMethods();\n    this.fetchNextPage = this.fetchNextPage.bind(this);\n    this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n  }\n  setOptions(options) {\n    super.setOptions({\n      ...options,\n      behavior: infiniteQueryBehavior()\n    });\n  }\n  getOptimisticResult(options) {\n    options.behavior = infiniteQueryBehavior();\n    return super.getOptimisticResult(options);\n  }\n  fetchNextPage(options) {\n    return this.fetch({\n      ...options,\n      meta: {\n        fetchMore: { direction: \"forward\" }\n      }\n    });\n  }\n  fetchPreviousPage(options) {\n    return this.fetch({\n      ...options,\n      meta: {\n        fetchMore: { direction: \"backward\" }\n      }\n    });\n  }\n  createResult(query, options) {\n    const { state } = query;\n    const parentResult = super.createResult(query, options);\n    const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n    const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n    const isFetchNextPageError = isError && fetchDirection === \"forward\";\n    const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n    const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n    const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n    const result = {\n      ...parentResult,\n      fetchNextPage: this.fetchNextPage,\n      fetchPreviousPage: this.fetchPreviousPage,\n      hasNextPage: hasNextPage(options, state.data),\n      hasPreviousPage: hasPreviousPage(options, state.data),\n      isFetchNextPageError,\n      isFetchingNextPage,\n      isFetchPreviousPageError,\n      isFetchingPreviousPage,\n      isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n      isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n    };\n    return result;\n  }\n};\nexport {\n  InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n  #client;\n  #observers;\n  #mutationCache;\n  #retryer;\n  constructor(config) {\n    super();\n    this.#client = config.client;\n    this.mutationId = config.mutationId;\n    this.#mutationCache = config.mutationCache;\n    this.#observers = [];\n    this.state = config.state || getDefaultState();\n    this.setOptions(config.options);\n    this.scheduleGc();\n  }\n  setOptions(options) {\n    this.options = options;\n    this.updateGcTime(this.options.gcTime);\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  addObserver(observer) {\n    if (!this.#observers.includes(observer)) {\n      this.#observers.push(observer);\n      this.clearGcTimeout();\n      this.#mutationCache.notify({\n        type: \"observerAdded\",\n        mutation: this,\n        observer\n      });\n    }\n  }\n  removeObserver(observer) {\n    this.#observers = this.#observers.filter((x) => x !== observer);\n    this.scheduleGc();\n    this.#mutationCache.notify({\n      type: \"observerRemoved\",\n      mutation: this,\n      observer\n    });\n  }\n  optionalRemove() {\n    if (!this.#observers.length) {\n      if (this.state.status === \"pending\") {\n        this.scheduleGc();\n      } else {\n        this.#mutationCache.remove(this);\n      }\n    }\n  }\n  continue() {\n    return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n    this.execute(this.state.variables);\n  }\n  async execute(variables) {\n    const onContinue = () => {\n      this.#dispatch({ type: \"continue\" });\n    };\n    const mutationFnContext = {\n      client: this.#client,\n      meta: this.options.meta,\n      mutationKey: this.options.mutationKey\n    };\n    this.#retryer = createRetryer({\n      fn: () => {\n        if (!this.options.mutationFn) {\n          return Promise.reject(new Error(\"No mutationFn found\"));\n        }\n        return this.options.mutationFn(variables, mutationFnContext);\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue,\n      retry: this.options.retry ?? 0,\n      retryDelay: this.options.retryDelay,\n      networkMode: this.options.networkMode,\n      canRun: () => this.#mutationCache.canRun(this)\n    });\n    const restored = this.state.status === \"pending\";\n    const isPaused = !this.#retryer.canStart();\n    try {\n      if (restored) {\n        onContinue();\n      } else {\n        this.#dispatch({ type: \"pending\", variables, isPaused });\n        if (this.#mutationCache.config.onMutate) {\n          await this.#mutationCache.config.onMutate(\n            variables,\n            this,\n            mutationFnContext\n          );\n        }\n        const context = await this.options.onMutate?.(\n          variables,\n          mutationFnContext\n        );\n        if (context !== this.state.context) {\n          this.#dispatch({\n            type: \"pending\",\n            context,\n            variables,\n            isPaused\n          });\n        }\n      }\n      const data = await this.#retryer.start();\n      await this.#mutationCache.config.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      await this.#mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSettled?.(\n        data,\n        null,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      this.#dispatch({ type: \"success\", data });\n      return data;\n    } catch (error) {\n      try {\n        await this.#mutationCache.config.onError?.(\n          error,\n          variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n      } catch (e) {\n        void Promise.reject(e);\n      }\n      try {\n        await this.options.onError?.(\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n      } catch (e) {\n        void Promise.reject(e);\n      }\n      try {\n        await this.#mutationCache.config.onSettled?.(\n          void 0,\n          error,\n          this.state.variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n      } catch (e) {\n        void Promise.reject(e);\n      }\n      try {\n        await this.options.onSettled?.(\n          void 0,\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n      } catch (e) {\n        void Promise.reject(e);\n      }\n      this.#dispatch({ type: \"error\", error });\n      throw error;\n    } finally {\n      this.#mutationCache.runNext(this);\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            isPaused: true\n          };\n        case \"continue\":\n          return {\n            ...state,\n            isPaused: false\n          };\n        case \"pending\":\n          return {\n            ...state,\n            context: action.context,\n            data: void 0,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: action.isPaused,\n            status: \"pending\",\n            variables: action.variables,\n            submittedAt: Date.now()\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: \"success\",\n            isPaused: false\n          };\n        case \"error\":\n          return {\n            ...state,\n            data: void 0,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: \"error\"\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.#observers.forEach((observer) => {\n        observer.onMutationUpdate(action);\n      });\n      this.#mutationCache.notify({\n        mutation: this,\n        type: \"updated\",\n        action\n      });\n    });\n  }\n};\nfunction getDefaultState() {\n  return {\n    context: void 0,\n    data: void 0,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: \"idle\",\n    variables: void 0,\n    submittedAt: 0\n  };\n}\nexport {\n  Mutation,\n  getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#mutations = /* @__PURE__ */ new Set();\n    this.#scopes = /* @__PURE__ */ new Map();\n    this.#mutationId = 0;\n  }\n  #mutations;\n  #scopes;\n  #mutationId;\n  build(client, options, state) {\n    const mutation = new Mutation({\n      client,\n      mutationCache: this,\n      mutationId: ++this.#mutationId,\n      options: client.defaultMutationOptions(options),\n      state\n    });\n    this.add(mutation);\n    return mutation;\n  }\n  add(mutation) {\n    this.#mutations.add(mutation);\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const scopedMutations = this.#scopes.get(scope);\n      if (scopedMutations) {\n        scopedMutations.push(mutation);\n      } else {\n        this.#scopes.set(scope, [mutation]);\n      }\n    }\n    this.notify({ type: \"added\", mutation });\n  }\n  remove(mutation) {\n    if (this.#mutations.delete(mutation)) {\n      const scope = scopeFor(mutation);\n      if (typeof scope === \"string\") {\n        const scopedMutations = this.#scopes.get(scope);\n        if (scopedMutations) {\n          if (scopedMutations.length > 1) {\n            const index = scopedMutations.indexOf(mutation);\n            if (index !== -1) {\n              scopedMutations.splice(index, 1);\n            }\n          } else if (scopedMutations[0] === mutation) {\n            this.#scopes.delete(scope);\n          }\n        }\n      }\n    }\n    this.notify({ type: \"removed\", mutation });\n  }\n  canRun(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const mutationsWithSameScope = this.#scopes.get(scope);\n      const firstPendingMutation = mutationsWithSameScope?.find(\n        (m) => m.state.status === \"pending\"\n      );\n      return !firstPendingMutation || firstPendingMutation === mutation;\n    } else {\n      return true;\n    }\n  }\n  runNext(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n      return foundMutation?.continue() ?? Promise.resolve();\n    } else {\n      return Promise.resolve();\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.#mutations.forEach((mutation) => {\n        this.notify({ type: \"removed\", mutation });\n      });\n      this.#mutations.clear();\n      this.#scopes.clear();\n    });\n  }\n  getAll() {\n    return Array.from(this.#mutations);\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (mutation) => matchMutation(defaultedFilters, mutation)\n    );\n  }\n  findAll(filters = {}) {\n    return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  resumePausedMutations() {\n    const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n    return notifyManager.batch(\n      () => Promise.all(\n        pausedMutations.map((mutation) => mutation.continue().catch(noop))\n      )\n    );\n  }\n};\nfunction scopeFor(mutation) {\n  return mutation.options.scope?.id;\n}\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n  #client;\n  #currentResult = void 0;\n  #currentMutation;\n  #mutateOptions;\n  constructor(client, options) {\n    super();\n    this.#client = client;\n    this.setOptions(options);\n    this.bindMethods();\n    this.#updateResult();\n  }\n  bindMethods() {\n    this.mutate = this.mutate.bind(this);\n    this.reset = this.reset.bind(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    this.options = this.#client.defaultMutationOptions(options);\n    if (!shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getMutationCache().notify({\n        type: \"observerOptionsUpdated\",\n        mutation: this.#currentMutation,\n        observer: this\n      });\n    }\n    if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n      this.reset();\n    } else if (this.#currentMutation?.state.status === \"pending\") {\n      this.#currentMutation.setOptions(this.options);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#currentMutation?.removeObserver(this);\n    }\n  }\n  onMutationUpdate(action) {\n    this.#updateResult();\n    this.#notify(action);\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  reset() {\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = void 0;\n    this.#updateResult();\n    this.#notify();\n  }\n  mutate(variables, options) {\n    this.#mutateOptions = options;\n    this.#currentMutation?.removeObserver(this);\n    this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n    this.#currentMutation.addObserver(this);\n    return this.#currentMutation.execute(variables);\n  }\n  #updateResult() {\n    const state = this.#currentMutation?.state ?? getDefaultState();\n    this.#currentResult = {\n      ...state,\n      isPending: state.status === \"pending\",\n      isSuccess: state.status === \"success\",\n      isError: state.status === \"error\",\n      isIdle: state.status === \"idle\",\n      mutate: this.mutate,\n      reset: this.reset\n    };\n  }\n  #notify(action) {\n    notifyManager.batch(() => {\n      if (this.#mutateOptions && this.hasListeners()) {\n        const variables = this.#currentResult.variables;\n        const onMutateResult = this.#currentResult.context;\n        const context = {\n          client: this.#client,\n          meta: this.options.meta,\n          mutationKey: this.options.mutationKey\n        };\n        if (action?.type === \"success\") {\n          try {\n            this.#mutateOptions.onSuccess?.(\n              action.data,\n              variables,\n              onMutateResult,\n              context\n            );\n          } catch (e) {\n            void Promise.reject(e);\n          }\n          try {\n            this.#mutateOptions.onSettled?.(\n              action.data,\n              null,\n              variables,\n              onMutateResult,\n              context\n            );\n          } catch (e) {\n            void Promise.reject(e);\n          }\n        } else if (action?.type === \"error\") {\n          try {\n            this.#mutateOptions.onError?.(\n              action.error,\n              variables,\n              onMutateResult,\n              context\n            );\n          } catch (e) {\n            void Promise.reject(e);\n          }\n          try {\n            this.#mutateOptions.onSettled?.(\n              void 0,\n              action.error,\n              variables,\n              onMutateResult,\n              context\n            );\n          } catch (e) {\n            void Promise.reject(e);\n          }\n        }\n      }\n      this.listeners.forEach((listener) => {\n        listener(this.#currentResult);\n      });\n    });\n  }\n};\nexport {\n  MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#queries = /* @__PURE__ */ new Map();\n  }\n  #queries;\n  build(client, options, state) {\n    const queryKey = options.queryKey;\n    const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n    let query = this.get(queryHash);\n    if (!query) {\n      query = new Query({\n        client,\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey)\n      });\n      this.add(query);\n    }\n    return query;\n  }\n  add(query) {\n    if (!this.#queries.has(query.queryHash)) {\n      this.#queries.set(query.queryHash, query);\n      this.notify({\n        type: \"added\",\n        query\n      });\n    }\n  }\n  remove(query) {\n    const queryInMap = this.#queries.get(query.queryHash);\n    if (queryInMap) {\n      query.destroy();\n      if (queryInMap === query) {\n        this.#queries.delete(query.queryHash);\n      }\n      this.notify({ type: \"removed\", query });\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        this.remove(query);\n      });\n    });\n  }\n  get(queryHash) {\n    return this.#queries.get(queryHash);\n  }\n  getAll() {\n    return [...this.#queries.values()];\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (query) => matchQuery(defaultedFilters, query)\n    );\n  }\n  findAll(filters = {}) {\n    const queries = this.getAll();\n    return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  onFocus() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onFocus();\n      });\n    });\n  }\n  onOnline() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onOnline();\n      });\n    });\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  noop,\n  partialMatchKey,\n  resolveStaleTime,\n  skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n  #queryCache;\n  #mutationCache;\n  #defaultOptions;\n  #queryDefaults;\n  #mutationDefaults;\n  #mountCount;\n  #unsubscribeFocus;\n  #unsubscribeOnline;\n  constructor(config = {}) {\n    this.#queryCache = config.queryCache || new QueryCache();\n    this.#mutationCache = config.mutationCache || new MutationCache();\n    this.#defaultOptions = config.defaultOptions || {};\n    this.#queryDefaults = /* @__PURE__ */ new Map();\n    this.#mutationDefaults = /* @__PURE__ */ new Map();\n    this.#mountCount = 0;\n  }\n  mount() {\n    this.#mountCount++;\n    if (this.#mountCount !== 1) return;\n    this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n      if (focused) {\n        await this.resumePausedMutations();\n        this.#queryCache.onFocus();\n      }\n    });\n    this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n      if (online) {\n        await this.resumePausedMutations();\n        this.#queryCache.onOnline();\n      }\n    });\n  }\n  unmount() {\n    this.#mountCount--;\n    if (this.#mountCount !== 0) return;\n    this.#unsubscribeFocus?.();\n    this.#unsubscribeFocus = void 0;\n    this.#unsubscribeOnline?.();\n    this.#unsubscribeOnline = void 0;\n  }\n  isFetching(filters) {\n    return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n  }\n  isMutating(filters) {\n    return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n  }\n  /**\n   * Imperative (non-reactive) way to retrieve data for a QueryKey.\n   * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n   *\n   * Hint: Do not use this function inside a component, because it won't receive updates.\n   * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n   */\n  getQueryData(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state.data;\n  }\n  ensureQueryData(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    const query = this.#queryCache.build(this, defaultedOptions);\n    const cachedData = query.state.data;\n    if (cachedData === void 0) {\n      return this.fetchQuery(options);\n    }\n    if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n      void this.prefetchQuery(defaultedOptions);\n    }\n    return Promise.resolve(cachedData);\n  }\n  getQueriesData(filters) {\n    return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n      const data = state.data;\n      return [queryKey, data];\n    });\n  }\n  setQueryData(queryKey, updater, options) {\n    const defaultedOptions = this.defaultQueryOptions({ queryKey });\n    const query = this.#queryCache.get(\n      defaultedOptions.queryHash\n    );\n    const prevData = query?.state.data;\n    const data = functionalUpdate(updater, prevData);\n    if (data === void 0) {\n      return void 0;\n    }\n    return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n  }\n  setQueriesData(filters, updater, options) {\n    return notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n        queryKey,\n        this.setQueryData(queryKey, updater, options)\n      ])\n    );\n  }\n  getQueryState(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(\n      options.queryHash\n    )?.state;\n  }\n  removeQueries(filters) {\n    const queryCache = this.#queryCache;\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query);\n      });\n    });\n  }\n  resetQueries(filters, options) {\n    const queryCache = this.#queryCache;\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset();\n      });\n      return this.refetchQueries(\n        {\n          type: \"active\",\n          ...filters\n        },\n        options\n      );\n    });\n  }\n  cancelQueries(filters, cancelOptions = {}) {\n    const defaultedCancelOptions = { revert: true, ...cancelOptions };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n    );\n    return Promise.all(promises).then(noop).catch(noop);\n  }\n  invalidateQueries(filters, options = {}) {\n    return notifyManager.batch(() => {\n      this.#queryCache.findAll(filters).forEach((query) => {\n        query.invalidate();\n      });\n      if (filters?.refetchType === \"none\") {\n        return Promise.resolve();\n      }\n      return this.refetchQueries(\n        {\n          ...filters,\n          type: filters?.refetchType ?? filters?.type ?? \"active\"\n        },\n        options\n      );\n    });\n  }\n  refetchQueries(filters, options = {}) {\n    const fetchOptions = {\n      ...options,\n      cancelRefetch: options.cancelRefetch ?? true\n    };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n        let promise = query.fetch(void 0, fetchOptions);\n        if (!fetchOptions.throwOnError) {\n          promise = promise.catch(noop);\n        }\n        return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n      })\n    );\n    return Promise.all(promises).then(noop);\n  }\n  fetchQuery(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    if (defaultedOptions.retry === void 0) {\n      defaultedOptions.retry = false;\n    }\n    const query = this.#queryCache.build(this, defaultedOptions);\n    return query.isStaleByTime(\n      resolveStaleTime(defaultedOptions.staleTime, query)\n    ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n  }\n  prefetchQuery(options) {\n    return this.fetchQuery(options).then(noop).catch(noop);\n  }\n  fetchInfiniteQuery(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.fetchQuery(options);\n  }\n  prefetchInfiniteQuery(options) {\n    return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n  }\n  ensureInfiniteQueryData(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.ensureQueryData(options);\n  }\n  resumePausedMutations() {\n    if (onlineManager.isOnline()) {\n      return this.#mutationCache.resumePausedMutations();\n    }\n    return Promise.resolve();\n  }\n  getQueryCache() {\n    return this.#queryCache;\n  }\n  getMutationCache() {\n    return this.#mutationCache;\n  }\n  getDefaultOptions() {\n    return this.#defaultOptions;\n  }\n  setDefaultOptions(options) {\n    this.#defaultOptions = options;\n  }\n  setQueryDefaults(queryKey, options) {\n    this.#queryDefaults.set(hashKey(queryKey), {\n      queryKey,\n      defaultOptions: options\n    });\n  }\n  getQueryDefaults(queryKey) {\n    const defaults = [...this.#queryDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  setMutationDefaults(mutationKey, options) {\n    this.#mutationDefaults.set(hashKey(mutationKey), {\n      mutationKey,\n      defaultOptions: options\n    });\n  }\n  getMutationDefaults(mutationKey) {\n    const defaults = [...this.#mutationDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  defaultQueryOptions(options) {\n    if (options._defaulted) {\n      return options;\n    }\n    const defaultedOptions = {\n      ...this.#defaultOptions.queries,\n      ...this.getQueryDefaults(options.queryKey),\n      ...options,\n      _defaulted: true\n    };\n    if (!defaultedOptions.queryHash) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions\n      );\n    }\n    if (defaultedOptions.refetchOnReconnect === void 0) {\n      defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n    }\n    if (defaultedOptions.throwOnError === void 0) {\n      defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n    }\n    if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n      defaultedOptions.networkMode = \"offlineFirst\";\n    }\n    if (defaultedOptions.queryFn === skipToken) {\n      defaultedOptions.enabled = false;\n    }\n    return defaultedOptions;\n  }\n  defaultMutationOptions(options) {\n    if (options?._defaulted) {\n      return options;\n    }\n    return {\n      ...this.#defaultOptions.mutations,\n      ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n      ...options,\n      _defaulted: true\n    };\n  }\n  clear() {\n    this.#queryCache.clear();\n    this.#mutationCache.clear();\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/types.ts\nvar dataTagSymbol = /* @__PURE__ */ Symbol(\"dataTagSymbol\");\nvar dataTagErrorSymbol = /* @__PURE__ */ Symbol(\"dataTagErrorSymbol\");\nvar unsetMarker = /* @__PURE__ */ Symbol(\"unsetMarker\");\nexport {\n  dataTagErrorSymbol,\n  dataTagSymbol,\n  unsetMarker\n};\n//# sourceMappingURL=types.js.map","// src/index.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport {\n  defaultShouldDehydrateMutation,\n  defaultShouldDehydrateQuery,\n  dehydrate,\n  hydrate\n} from \"./hydration.js\";\nimport { InfiniteQueryObserver } from \"./infiniteQueryObserver.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { MutationObserver } from \"./mutationObserver.js\";\nimport { defaultScheduler, notifyManager } from \"./notifyManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { QueriesObserver } from \"./queriesObserver.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { QueryClient } from \"./queryClient.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { CancelledError, isCancelledError } from \"./retryer.js\";\nimport {\n  timeoutManager\n} from \"./timeoutManager.js\";\nimport {\n  hashKey,\n  isServer,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceEqualDeep,\n  shouldThrowError,\n  skipToken\n} from \"./utils.js\";\nimport { streamedQuery } from \"./streamedQuery.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { Query } from \"./query.js\";\nexport * from \"./types.js\";\nexport {\n  CancelledError,\n  InfiniteQueryObserver,\n  Mutation,\n  MutationCache,\n  MutationObserver,\n  QueriesObserver,\n  Query,\n  QueryCache,\n  QueryClient,\n  QueryObserver,\n  defaultScheduler,\n  defaultShouldDehydrateMutation,\n  defaultShouldDehydrateQuery,\n  dehydrate,\n  environmentManager,\n  streamedQuery as experimental_streamedQuery,\n  focusManager,\n  hashKey,\n  hydrate,\n  isCancelledError,\n  isServer,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  notifyManager,\n  onlineManager,\n  partialMatchKey,\n  replaceEqualDeep,\n  shouldThrowError,\n  skipToken,\n  timeoutManager\n};\n//# sourceMappingURL=index.js.map","//# sourceMappingURL=types.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n  void 0\n);\nvar useQueryClient = (queryClient) => {\n  const client = React.useContext(QueryClientContext);\n  if (queryClient) {\n    return queryClient;\n  }\n  if (!client) {\n    throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n  }\n  return client;\n};\nvar QueryClientProvider = ({\n  client,\n  children\n}) => {\n  React.useEffect(() => {\n    client.mount();\n    return () => {\n      client.unmount();\n    };\n  }, [client]);\n  return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n  QueryClientContext,\n  QueryClientProvider,\n  useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n  IsRestoringProvider,\n  useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n  let isReset = false;\n  return {\n    clearReset: () => {\n      isReset = false;\n    },\n    reset: () => {\n      isReset = true;\n    },\n    isReset: () => {\n      return isReset;\n    }\n  };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n  children\n}) => {\n  const [value] = React.useState(() => createValue());\n  return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n  QueryErrorResetBoundary,\n  useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n  const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n  if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n    if (!errorResetBoundary.isReset()) {\n      options.retryOnMount = false;\n    }\n  }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n  React.useEffect(() => {\n    errorResetBoundary.clearReset();\n  }, [errorResetBoundary]);\n};\nvar getHasError = ({\n  result,\n  errorResetBoundary,\n  throwOnError,\n  query,\n  suspense\n}) => {\n  return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n  if (defaultedOptions.suspense) {\n    const MIN_SUSPENSE_TIME_MS = 1e3;\n    const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n    const originalStaleTime = defaultedOptions.staleTime;\n    defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n    if (typeof defaultedOptions.gcTime === \"number\") {\n      defaultedOptions.gcTime = Math.max(\n        defaultedOptions.gcTime,\n        MIN_SUSPENSE_TIME_MS\n      );\n    }\n  }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n  errorResetBoundary.clearReset();\n});\nexport {\n  defaultThrowOnError,\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof options !== \"object\" || Array.isArray(options)) {\n      throw new Error(\n        'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n      );\n    }\n  }\n  const isRestoring = useIsRestoring();\n  const errorResetBoundary = useQueryErrorResetBoundary();\n  const client = useQueryClient(queryClient);\n  const defaultedOptions = client.defaultQueryOptions(options);\n  client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n    defaultedOptions\n  );\n  const query = client.getQueryCache().get(defaultedOptions.queryHash);\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!defaultedOptions.queryFn) {\n      console.error(\n        `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n      );\n    }\n  }\n  defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n  ensureSuspenseTimers(defaultedOptions);\n  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n  useClearResetErrorBoundary(errorResetBoundary);\n  const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n  const [observer] = React.useState(\n    () => new Observer(\n      client,\n      defaultedOptions\n    )\n  );\n  const result = observer.getOptimisticResult(defaultedOptions);\n  const shouldSubscribe = !isRestoring && options.subscribed !== false;\n  React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => {\n        const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n        observer.updateResult();\n        return unsubscribe;\n      },\n      [observer, shouldSubscribe]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  React.useEffect(() => {\n    observer.setOptions(defaultedOptions);\n  }, [defaultedOptions, observer]);\n  if (shouldSuspend(defaultedOptions, result)) {\n    throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n  }\n  if (getHasError({\n    result,\n    errorResetBoundary,\n    throwOnError: defaultedOptions.throwOnError,\n    query,\n    suspense: defaultedOptions.suspense\n  })) {\n    throw result.error;\n  }\n  ;\n  client.getDefaultOptions().queries?._experimental_afterQuery?.(\n    defaultedOptions,\n    result\n  );\n  if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n    const promise = isNewCacheEntry ? (\n      // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n      fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n    ) : (\n      // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n      query?.promise\n    );\n    promise?.catch(noop).finally(() => {\n      observer.updateResult();\n    });\n  }\n  return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n  useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n  return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n  useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n  MutationObserver,\n  noop,\n  notifyManager,\n  shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n  const client = useQueryClient(queryClient);\n  const [observer] = React.useState(\n    () => new MutationObserver(\n      client,\n      options\n    )\n  );\n  React.useEffect(() => {\n    observer.setOptions(options);\n  }, [observer, options]);\n  const result = React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n      [observer]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  const mutate = React.useCallback(\n    (variables, mutateOptions) => {\n      observer.mutate(variables, mutateOptions).catch(noop);\n    },\n    [observer]\n  );\n  if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n    throw result.error;\n  }\n  return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n  useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n  return useBaseQuery(\n    options,\n    InfiniteQueryObserver,\n    queryClient\n  );\n}\nexport {\n  useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","// src/index.ts\nexport * from \"@tanstack/query-core\";\nexport * from \"./types.js\";\nimport { useQueries } from \"./useQueries.js\";\nimport { useQuery } from \"./useQuery.js\";\nimport { useSuspenseQuery } from \"./useSuspenseQuery.js\";\nimport { useSuspenseInfiniteQuery } from \"./useSuspenseInfiniteQuery.js\";\nimport { useSuspenseQueries } from \"./useSuspenseQueries.js\";\nimport { usePrefetchQuery } from \"./usePrefetchQuery.js\";\nimport { usePrefetchInfiniteQuery } from \"./usePrefetchInfiniteQuery.js\";\nimport { queryOptions } from \"./queryOptions.js\";\nimport { infiniteQueryOptions } from \"./infiniteQueryOptions.js\";\nimport {\n  QueryClientContext,\n  QueryClientProvider,\n  useQueryClient\n} from \"./QueryClientProvider.js\";\nimport { HydrationBoundary } from \"./HydrationBoundary.js\";\nimport {\n  QueryErrorResetBoundary,\n  useQueryErrorResetBoundary\n} from \"./QueryErrorResetBoundary.js\";\nimport { useIsFetching } from \"./useIsFetching.js\";\nimport { useIsMutating, useMutationState } from \"./useMutationState.js\";\nimport { useMutation } from \"./useMutation.js\";\nimport { mutationOptions } from \"./mutationOptions.js\";\nimport { useInfiniteQuery } from \"./useInfiniteQuery.js\";\nimport { useIsRestoring, IsRestoringProvider } from \"./IsRestoringProvider.js\";\nexport {\n  HydrationBoundary,\n  IsRestoringProvider,\n  QueryClientContext,\n  QueryClientProvider,\n  QueryErrorResetBoundary,\n  infiniteQueryOptions,\n  mutationOptions,\n  queryOptions,\n  useInfiniteQuery,\n  useIsFetching,\n  useIsMutating,\n  useIsRestoring,\n  useMutation,\n  useMutationState,\n  usePrefetchInfiniteQuery,\n  usePrefetchQuery,\n  useQueries,\n  useQuery,\n  useQueryClient,\n  useQueryErrorResetBoundary,\n  useSuspenseInfiniteQuery,\n  useSuspenseQueries,\n  useSuspenseQuery\n};\n//# sourceMappingURL=index.js.map","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n  return function handleEvent(event) {\n    originalEventHandler?.(event);\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\nfunction getOwnerWindow(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access window outside of the DOM\");\n  }\n  return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access document outside of the DOM\");\n  }\n  return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    return null;\n  }\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\n  if (activeDescendant) {\n    const id = activeElement.getAttribute(\"aria-activedescendant\");\n    if (id) {\n      const element = getOwnerDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n  return activeElement;\n}\nfunction isFrame(element) {\n  return element.tagName === \"IFRAME\";\n}\nexport {\n  canUseDOM,\n  composeEventHandlers,\n  getActiveElement,\n  getOwnerDocument,\n  getOwnerWindow,\n  isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction composeRefs(...refs) {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == \"function\") {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\nfunction useComposedRefs(...refs) {\n  return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n  composeRefs,\n  useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  const Provider = (props) => {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  };\n  Provider.displayName = rootComponentName + \"Provider\";\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    const Provider = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    };\n    Provider.displayName = rootComponentName + \"Provider\";\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n  const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n  const Slot2 = React.forwardRef((props, forwardedRef) => {\n    const { children, ...slotProps } = props;\n    const childrenArray = React.Children.toArray(children);\n    const slottable = childrenArray.find(isSlottable);\n    if (slottable) {\n      const newElement = slottable.props.children;\n      const newChildren = childrenArray.map((child) => {\n        if (child === slottable) {\n          if (React.Children.count(newElement) > 1) return React.Children.only(null);\n          return React.isValidElement(newElement) ? newElement.props.children : null;\n        } else {\n          return child;\n        }\n      });\n      return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n    }\n    return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n  });\n  Slot2.displayName = `${ownerName}.Slot`;\n  return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n  const SlotClone = React.forwardRef((props, forwardedRef) => {\n    const { children, ...slotProps } = props;\n    if (React.isValidElement(children)) {\n      const childrenRef = getElementRef(children);\n      const props2 = mergeProps(slotProps, children.props);\n      if (children.type !== React.Fragment) {\n        props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n      }\n      return React.cloneElement(children, props2);\n    }\n    return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n  });\n  SlotClone.displayName = `${ownerName}.SlotClone`;\n  return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n  const Slottable2 = ({ children }) => {\n    return /* @__PURE__ */ jsx(Fragment2, { children });\n  };\n  Slottable2.displayName = `${ownerName}.Slottable`;\n  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n  return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n  return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n  const overrideProps = { ...childProps };\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args) => {\n          const result = childPropValue(...args);\n          slotPropValue(...args);\n          return result;\n        };\n      } else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    } else if (propName === \"style\") {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === \"className\") {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n    }\n  }\n  return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nexport {\n  Slot as Root,\n  Slot,\n  Slottable,\n  createSlot,\n  createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n  \"a\",\n  \"button\",\n  \"div\",\n  \"form\",\n  \"h2\",\n  \"h3\",\n  \"img\",\n  \"input\",\n  \"label\",\n  \"li\",\n  \"nav\",\n  \"ol\",\n  \"p\",\n  \"select\",\n  \"span\",\n  \"svg\",\n  \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props, forwardedRef) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp = asChild ? Slot : node;\n    if (typeof window !== \"undefined\") {\n      window[Symbol.for(\"radix-ui\")] = true;\n    }\n    return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n  });\n  Node.displayName = `Primitive.${node}`;\n  return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n  Primitive,\n  Root,\n  dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n  const callbackRef = React.useRef(callback);\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n  return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n  useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n  React.useEffect(() => {\n    const handleKeyDown = (event) => {\n      if (event.key === \"Escape\") {\n        onEscapeKeyDown(event);\n      }\n    };\n    ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n    return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n  }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n  useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n  layers: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = \"none\";\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n          ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        ...layerProps,\n        ref: composedRefs,\n        style: {\n          pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n          ...props.style\n        },\n        onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n        onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n        onPointerDownCapture: composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )\n      }\n    );\n  }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n  return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {\n  });\n  React.useEffect(() => {\n    const handlePointerDown = (event) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        let handleAndDispatchPointerDownOutsideEvent2 = function() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        };\n        var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n        const eventDetail = { originalEvent: event };\n        if (event.pointerType === \"touch\") {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n          ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent2();\n        }\n      } else {\n        ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n      ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n  };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside);\n  const isFocusInsideReactTreeRef = React.useRef(false);\n  React.useEffect(() => {\n    const handleFocus = (event) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false\n        });\n      }\n    };\n    ownerDocument.addEventListener(\"focusin\", handleFocus);\n    return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n  return {\n    onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n    onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n  };\n}\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n  Branch,\n  DismissableLayer,\n  DismissableLayerBranch,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n  useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n  const [id, setId] = React.useState(useReactId());\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n  useId\n};\n//# sourceMappingURL=index.mjs.map\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  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\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  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\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    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 min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, 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 < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : 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 overflow = await platform.detectOverflow(state, detectOverflowOptions);\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      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\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 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      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 && 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            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: 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          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: 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(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\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      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: 0,\n        crossAxis: 0,\n        ...rawOffset\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/**\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      var _state$middlewareData, _state$middlewareData2;\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 noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : 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.ownerDocument.body : 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  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\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) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && 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 || !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 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(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.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(element);\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) {\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    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\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 clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\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 = isHTMLElement(element) ? getScale(element) : createCoords(1);\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') {\n    rect = getViewportRect(element, strategy);\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}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\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 currentContainingBlockComputedStyle = 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    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = 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\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  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !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    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\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) {\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      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // 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      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\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  refresh(true);\n  return cleanup;\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      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : 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 = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\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","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$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 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\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 * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\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 = (options, deps) => {\n  const result = offset$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\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 = (options, deps) => {\n  const result = shift$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n  const result = limitShift$1(options);\n  return {\n    fn: result.fn,\n    options: [options, deps]\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 = (options, deps) => {\n  const result = flip$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\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 = (options, deps) => {\n  const result = size$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\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 = (options, deps) => {\n  const result = autoPlacement$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\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 = (options, deps) => {\n  const result = hide$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\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 = (options, deps) => {\n  const result = inline$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\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 * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n  const result = arrow$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n  const { children, width = 10, height = 5, ...arrowProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.svg,\n    {\n      ...arrowProps,\n      ref: forwardedRef,\n      width,\n      height,\n      viewBox: \"0 0 30 10\",\n      preserveAspectRatio: \"none\",\n      children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n    }\n  );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n  Arrow,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n  const [size, setSize] = React.useState(void 0);\n  useLayoutEffect(() => {\n    if (element) {\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n        if (!entries.length) {\n          return;\n        }\n        const entry = entries[0];\n        let width;\n        let height;\n        if (\"borderBoxSize\" in entry) {\n          const borderSizeEntry = entry[\"borderBoxSize\"];\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize[\"inlineSize\"];\n          height = borderSize[\"blockSize\"];\n        } else {\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n        setSize({ width, height });\n      });\n      resizeObserver.observe(element, { box: \"border-box\" });\n      return () => resizeObserver.unobserve(element);\n    } else {\n      setSize(void 0);\n    }\n  }, [element]);\n  return size;\n}\nexport {\n  useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState(null);\n  return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const anchorRef = React.useRef(null);\n    React.useEffect(() => {\n      const previousAnchor = anchorRef.current;\n      anchorRef.current = virtualRef?.current || ref.current;\n      if (previousAnchor !== anchorRef.current) {\n        context.onAnchorChange(anchorRef.current);\n      }\n    });\n    return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n  }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = \"bottom\",\n      sideOffset = 0,\n      align = \"center\",\n      alignOffset = 0,\n      arrowPadding = 0,\n      avoidCollisions = true,\n      collisionBoundary = [],\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = \"partial\",\n      hideWhenDetached = false,\n      updatePositionStrategy = \"optimized\",\n      onPlaced,\n      ...contentProps\n    } = props;\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n    const [content, setContent] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [arrow, setArrow] = React.useState(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n    const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n    const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n    const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n    const hasExplicitBoundaries = boundary.length > 0;\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries\n    };\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: \"fixed\",\n      placement: desiredPlacement,\n      whileElementsMounted: (...args) => {\n        const cleanup = autoUpdate(...args, {\n          animationFrame: updatePositionStrategy === \"always\"\n        });\n        return cleanup;\n      },\n      elements: {\n        reference: context.anchor\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions && shift({\n          mainAxis: true,\n          crossAxis: false,\n          limiter: sticky === \"partial\" ? limitShift() : void 0,\n          ...detectOverflowOptions\n        }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n          }\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n      ]\n    });\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const [contentZIndex, setContentZIndex] = React.useState();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n    return /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        ref: refs.setFloating,\n        \"data-radix-popper-content-wrapper\": \"\",\n        style: {\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n          // keep off the page when measuring\n          minWidth: \"max-content\",\n          zIndex: contentZIndex,\n          [\"--radix-popper-transform-origin\"]: [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y\n          ].join(\" \"),\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...middlewareData.hide?.referenceHidden && {\n            visibility: \"hidden\",\n            pointerEvents: \"none\"\n          }\n        },\n        dir: props.dir,\n        children: /* @__PURE__ */ jsx(\n          PopperContentProvider,\n          {\n            scope: __scopePopper,\n            placedSide,\n            onArrowChange: setArrow,\n            arrowX,\n            arrowY,\n            shouldHideArrow: cannotCenterArrow,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                \"data-side\": placedSide,\n                \"data-align\": placedAlign,\n                ...contentProps,\n                ref: composedRefs,\n                style: {\n                  ...contentProps.style,\n                  // if the PopperContent hasn't been placed yet (not all measurements done)\n                  // we prevent animations so that users's animation don't kick in too early referring wrong sides\n                  animation: !isPositioned ? \"none\" : void 0\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n  top: \"bottom\",\n  right: \"left\",\n  bottom: \"top\",\n  left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    /* @__PURE__ */ jsx(\n      \"span\",\n      {\n        ref: contentContext.onArrowChange,\n        style: {\n          position: \"absolute\",\n          left: contentContext.arrowX,\n          top: contentContext.arrowY,\n          [baseSide]: 0,\n          transformOrigin: {\n            top: \"\",\n            right: \"0 0\",\n            bottom: \"center 0\",\n            left: \"100% 0\"\n          }[contentContext.placedSide],\n          transform: {\n            top: \"translateY(100%)\",\n            right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n            bottom: `rotate(180deg)`,\n            left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n          }[contentContext.placedSide],\n          visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n        },\n        children: /* @__PURE__ */ jsx(\n          ArrowPrimitive.Root,\n          {\n            ...arrowProps,\n            ref: forwardedRef,\n            style: {\n              ...arrowProps.style,\n              // ensures the element can be measured correctly (mostly for if SVG)\n              display: \"block\"\n            }\n          }\n        )\n      }\n    )\n  );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n  return value !== null;\n}\nvar transformOrigin = (options) => ({\n  name: \"transformOrigin\",\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n    let x = \"\";\n    let y = \"\";\n    if (placedSide === \"bottom\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === \"top\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === \"right\") {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === \"left\") {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n  const [side, align = \"center\"] = placement.split(\"-\");\n  return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n  ALIGN_OPTIONS,\n  Anchor,\n  Arrow,\n  Content,\n  Popper,\n  PopperAnchor,\n  PopperArrow,\n  PopperContent,\n  Root2 as Root,\n  SIDE_OPTIONS,\n  createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || mounted && globalThis?.document?.body;\n  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n  Portal,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef(null);\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n        if (event.target === node && isCurrentAnimation) {\n          send(\"ANIMATION_END\");\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = \"forwards\";\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === \"forwards\") {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      stylesRef.current = node2 ? getComputedStyle(node2) : null;\n      setNode(node2);\n    }, [])\n  };\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n  Presence,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n  prop,\n  defaultProp,\n  onChange = () => {\n  },\n  caller\n}) {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange\n  });\n  const isControlled = prop !== void 0;\n  const value = isControlled ? prop : uncontrolledProp;\n  if (true) {\n    const isControlledRef = React.useRef(prop !== void 0);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const setValue = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value2 !== prop) {\n          onChangeRef.current?.(value2);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef]\n  );\n  return [value, setValue];\n}\nfunction useUncontrolledState({\n  defaultProp,\n  onChange\n}) {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n  return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== void 0;\n  const onChange = useEffectEvent(onChangeProp);\n  if (true) {\n    const isControlledRef = React2.useRef(controlledState !== void 0);\n    React2.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const args = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    args.push(init);\n  }\n  const [internalState, dispatch] = React2.useReducer(\n    (state2, action) => {\n      if (action.type === SYNC_STATE) {\n        return { ...state2, state: action.state };\n      }\n      const next = reducer(state2, action);\n      if (isControlled && !Object.is(next.state, state2.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args\n  );\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React2.useRef(uncontrolledState);\n  React2.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n  const state = React2.useMemo(() => {\n    const isControlled2 = controlledState !== void 0;\n    if (isControlled2) {\n      return { ...internalState, state: controlledState };\n    }\n    return internalState;\n  }, [internalState, controlledState]);\n  React2.useEffect(() => {\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n  return [state, dispatch];\n}\nexport {\n  useControllableState,\n  useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n  // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n  position: \"absolute\",\n  border: 0,\n  width: 1,\n  height: 1,\n  padding: 0,\n  margin: -1,\n  overflow: \"hidden\",\n  clip: \"rect(0, 0, 0, 0)\",\n  whiteSpace: \"nowrap\",\n  wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...props,\n        ref: forwardedRef,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n      }\n    );\n  }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n  Root,\n  VISUALLY_HIDDEN_STYLES,\n  VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n  const {\n    __scopeTooltip,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = 300,\n    disableHoverableContent = false,\n    children\n  } = props;\n  const isOpenDelayedRef = React.useRef(true);\n  const isPointerInTransitRef = React.useRef(false);\n  const skipDelayTimerRef = React.useRef(0);\n  React.useEffect(() => {\n    const skipDelayTimer = skipDelayTimerRef.current;\n    return () => window.clearTimeout(skipDelayTimer);\n  }, []);\n  return /* @__PURE__ */ jsx(\n    TooltipProviderContextProvider,\n    {\n      scope: __scopeTooltip,\n      isOpenDelayedRef,\n      delayDuration,\n      onOpen: React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        isOpenDelayedRef.current = false;\n      }, []),\n      onClose: React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        skipDelayTimerRef.current = window.setTimeout(\n          () => isOpenDelayedRef.current = true,\n          skipDelayDuration\n        );\n      }, [skipDelayDuration]),\n      isPointerInTransitRef,\n      onPointerInTransitChange: React.useCallback((inTransit) => {\n        isPointerInTransitRef.current = inTransit;\n      }, []),\n      disableHoverableContent,\n      children\n    }\n  );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n  const {\n    __scopeTooltip,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    disableHoverableContent: disableHoverableContentProp,\n    delayDuration: delayDurationProp\n  } = props;\n  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n  const popperScope = usePopperScope(__scopeTooltip);\n  const [trigger, setTrigger] = React.useState(null);\n  const contentId = useId();\n  const openTimerRef = React.useRef(0);\n  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n  const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n  const wasOpenDelayedRef = React.useRef(false);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: (open2) => {\n      if (open2) {\n        providerContext.onOpen();\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n      } else {\n        providerContext.onClose();\n      }\n      onOpenChange?.(open2);\n    },\n    caller: TOOLTIP_NAME\n  });\n  const stateAttribute = React.useMemo(() => {\n    return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n  }, [open]);\n  const handleOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    wasOpenDelayedRef.current = false;\n    setOpen(true);\n  }, [setOpen]);\n  const handleClose = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    setOpen(false);\n  }, [setOpen]);\n  const handleDelayedOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = window.setTimeout(() => {\n      wasOpenDelayedRef.current = true;\n      setOpen(true);\n      openTimerRef.current = 0;\n    }, delayDuration);\n  }, [delayDuration, setOpen]);\n  React.useEffect(() => {\n    return () => {\n      if (openTimerRef.current) {\n        window.clearTimeout(openTimerRef.current);\n        openTimerRef.current = 0;\n      }\n    };\n  }, []);\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    TooltipContextProvider,\n    {\n      scope: __scopeTooltip,\n      contentId,\n      open,\n      stateAttribute,\n      trigger,\n      onTriggerChange: setTrigger,\n      onTriggerEnter: React.useCallback(() => {\n        if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n        else handleOpen();\n      }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n      onTriggerLeave: React.useCallback(() => {\n        if (disableHoverableContent) {\n          handleClose();\n        } else {\n          window.clearTimeout(openTimerRef.current);\n          openTimerRef.current = 0;\n        }\n      }, [handleClose, disableHoverableContent]),\n      onOpen: handleOpen,\n      onClose: handleClose,\n      disableHoverableContent,\n      children\n    }\n  ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...triggerProps } = props;\n    const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n    const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n    const isPointerDownRef = React.useRef(false);\n    const hasPointerMoveOpenedRef = React.useRef(false);\n    const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n    React.useEffect(() => {\n      return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n    }, [handlePointerUp]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        \"aria-describedby\": context.open ? context.contentId : void 0,\n        \"data-state\": context.stateAttribute,\n        ...triggerProps,\n        ref: composedRefs,\n        onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n          if (event.pointerType === \"touch\") return;\n          if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n            context.onTriggerEnter();\n            hasPointerMoveOpenedRef.current = true;\n          }\n        }),\n        onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n          context.onTriggerLeave();\n          hasPointerMoveOpenedRef.current = false;\n        }),\n        onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n          if (context.open) {\n            context.onClose();\n          }\n          isPointerDownRef.current = true;\n          document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n        }),\n        onFocus: composeEventHandlers(props.onFocus, () => {\n          if (!isPointerDownRef.current) context.onOpen();\n        }),\n        onBlur: composeEventHandlers(props.onBlur, context.onClose),\n        onClick: composeEventHandlers(props.onClick, context.onClose)\n      }\n    ) });\n  }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n  const { __scopeTooltip, forceMount, children, container } = props;\n  const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n    const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n    const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n  }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n  const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n  const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n  const { trigger, onClose } = context;\n  const content = ref.current;\n  const { onPointerInTransitChange } = providerContext;\n  const handleRemoveGraceArea = React.useCallback(() => {\n    setPointerGraceArea(null);\n    onPointerInTransitChange(false);\n  }, [onPointerInTransitChange]);\n  const handleCreateGraceArea = React.useCallback(\n    (event, hoverTarget) => {\n      const currentTarget = event.currentTarget;\n      const exitPoint = { x: event.clientX, y: event.clientY };\n      const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n      const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n      const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n      const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n      setPointerGraceArea(graceArea);\n      onPointerInTransitChange(true);\n    },\n    [onPointerInTransitChange]\n  );\n  React.useEffect(() => {\n    return () => handleRemoveGraceArea();\n  }, [handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (trigger && content) {\n      const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n      const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n      trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n      content.addEventListener(\"pointerleave\", handleContentLeave);\n      return () => {\n        trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n        content.removeEventListener(\"pointerleave\", handleContentLeave);\n      };\n    }\n  }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (pointerGraceArea) {\n      const handleTrackPointerGrace = (event) => {\n        const target = event.target;\n        const pointerPosition = { x: event.clientX, y: event.clientY };\n        const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n        if (hasEnteredTarget) {\n          handleRemoveGraceArea();\n        } else if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea();\n          onClose();\n        }\n      };\n      document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n      return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n    }\n  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n  return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTooltip,\n      children,\n      \"aria-label\": ariaLabel,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      ...contentProps\n    } = props;\n    const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const { onClose } = context;\n    React.useEffect(() => {\n      document.addEventListener(TOOLTIP_OPEN, onClose);\n      return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n    }, [onClose]);\n    React.useEffect(() => {\n      if (context.trigger) {\n        const handleScroll = (event) => {\n          const target = event.target;\n          if (target?.contains(context.trigger)) onClose();\n        };\n        window.addEventListener(\"scroll\", handleScroll, { capture: true });\n        return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n      }\n    }, [context.trigger, onClose]);\n    return /* @__PURE__ */ jsx(\n      DismissableLayer,\n      {\n        asChild: true,\n        disableOutsidePointerEvents: false,\n        onEscapeKeyDown,\n        onPointerDownOutside,\n        onFocusOutside: (event) => event.preventDefault(),\n        onDismiss: onClose,\n        children: /* @__PURE__ */ jsxs(\n          PopperPrimitive.Content,\n          {\n            \"data-state\": context.stateAttribute,\n            ...popperScope,\n            ...contentProps,\n            ref: forwardedRef,\n            style: {\n              ...contentProps.style,\n              // re-namespace exposed content custom properties\n              ...{\n                \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n                \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n                \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n              }\n            },\n            children: [\n              /* @__PURE__ */ jsx(Slottable, { children }),\n              /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n            ]\n          }\n        )\n      }\n    );\n  }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeTooltip);\n    const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n      ARROW_NAME,\n      __scopeTooltip\n    );\n    return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n  const top = Math.abs(rect.top - point.y);\n  const bottom = Math.abs(rect.bottom - point.y);\n  const right = Math.abs(rect.right - point.x);\n  const left = Math.abs(rect.left - point.x);\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return \"left\";\n    case right:\n      return \"right\";\n    case top:\n      return \"top\";\n    case bottom:\n      return \"bottom\";\n    default:\n      throw new Error(\"unreachable\");\n  }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n  const paddedExitPoints = [];\n  switch (exitSide) {\n    case \"top\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y + padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"bottom\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y - padding }\n      );\n      break;\n    case \"left\":\n      paddedExitPoints.push(\n        { x: exitPoint.x + padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"right\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x - padding, y: exitPoint.y + padding }\n      );\n      break;\n  }\n  return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n  const { top, right, bottom, left } = rect;\n  return [\n    { x: left, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom }\n  ];\n}\nfunction isPointInPolygon(point, polygon) {\n  const { x, y } = point;\n  let inside = false;\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const ii = polygon[i];\n    const jj = polygon[j];\n    const xi = ii.x;\n    const yi = ii.y;\n    const xj = jj.x;\n    const yj = jj.y;\n    const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) inside = !inside;\n  }\n  return inside;\n}\nfunction getHull(points) {\n  const newPoints = points.slice();\n  newPoints.sort((a, b) => {\n    if (a.x < b.x) return -1;\n    else if (a.x > b.x) return 1;\n    else if (a.y < b.y) return -1;\n    else if (a.y > b.y) return 1;\n    else return 0;\n  });\n  return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n  if (points.length <= 1) return points.slice();\n  const upperHull = [];\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i];\n    while (upperHull.length >= 2) {\n      const q = upperHull[upperHull.length - 1];\n      const r = upperHull[upperHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n      else break;\n    }\n    upperHull.push(p);\n  }\n  upperHull.pop();\n  const lowerHull = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i];\n    while (lowerHull.length >= 2) {\n      const q = lowerHull[lowerHull.length - 1];\n      const r = lowerHull[lowerHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n      else break;\n    }\n    lowerHull.push(p);\n  }\n  lowerHull.pop();\n  if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n    return upperHull;\n  } else {\n    return upperHull.concat(lowerHull);\n  }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n  Arrow2 as Arrow,\n  Content2 as Content,\n  Portal,\n  Provider,\n  Root3 as Root,\n  Tooltip,\n  TooltipArrow,\n  TooltipContent,\n  TooltipPortal,\n  TooltipProvider,\n  TooltipTrigger,\n  Trigger,\n  createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n        var _config_compoundVariants;\n        if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n        const { variants, defaultVariants } = config;\n        const getVariantClassNames = Object.keys(variants).map((variant)=>{\n            const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n            const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n            if (variantProp === null) return null;\n            const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n            return variants[variant][variantKey];\n        });\n        const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n            let [key, value] = param;\n            if (value === undefined) {\n                return acc;\n            }\n            acc[key] = value;\n            return acc;\n        }, {});\n        const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n            let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n            return Object.entries(compoundVariantOptions).every((param)=>{\n                let [key, value] = param;\n                return Array.isArray(value) ? value.includes({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                }[key]) : ({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                })[key] === value;\n            }) ? [\n                ...acc,\n                cvClass,\n                cvClassName\n            ] : acc;\n        }, []);\n        return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n    };\n\n","import { type ClassValue, clsx } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return clsx(inputs);\n}\n\nexport const checkIfElementIsVisible = (element: HTMLElement) => {\n  return !!element && element.offsetParent !== null;\n};\n\nexport const focusRing = [\n  // base\n  \"outline outline-offset-2 outline-0 focus-visible:outline-2\",\n  // outline color\n  \"outline-blue-500 dark:outline-neutral-600\",\n];\n\nexport function hexToRGB(hex: string, opacity: number) {\n  // check if rgba is already provided\n  if (hex.startsWith(\"rgba\")) return hex;\n  if (hex.startsWith(\"rgb\")) return hex;\n\n  let c: any;\n  if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n    c = hex.substring(1).split(\"\");\n    if (c.length === 3) {\n      c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n    }\n    c = `0x${c.join(\"\")}`;\n    return `rgba(${[(c >> 16) & 255, (c >> 8) & 255, c & 255].join(\",\")},${opacity / 100})`;\n  }\n  throw new Error(\"Bad Hex\");\n}\n\nfunction getUniqueParamName(name: string, usedParamNames: Set<string>) {\n  if (!usedParamNames.has(name)) {\n    usedParamNames.add(name);\n    return name;\n  }\n\n  let suffix = 2;\n  let uniqueName = `${name}${suffix}`;\n  while (usedParamNames.has(uniqueName)) {\n    suffix++;\n    uniqueName = `${name}${suffix}`;\n  }\n\n  usedParamNames.add(uniqueName);\n  return uniqueName;\n}\n\n/**\n * Detects and generates a URL pattern from a full URL\n * The pattern replaces variable parts like IDs, dates, and slugs with placeholders\n *\n * @param {string} url - The full URL to analyze\n * @param {Object} options - Configuration options\n * @param {boolean} options.removeQueryParams - Whether to remove query parameters completely\n * @return {string} The URL pattern with placeholders\n */\nexport function generateUrlPattern(url: string) {\n  const removeQueryParams = true;\n\n  try {\n    // Parse the URL to handle it properly\n    const parsedUrl = new URL(url);\n\n    // Split pathname into segments for more detailed analysis\n    const segments = parsedUrl.pathname.split(\"/\").filter((segment) => segment.length > 0);\n    const usedParamNames = new Set<string>();\n\n    // Process each segment individually\n    const patternSegments = segments.map((segment) => {\n      // Check for numeric IDs\n      if (/^\\d+$/.test(segment)) {\n        return `:${getUniqueParamName(\"id\", usedParamNames)}`;\n      }\n\n      // Check for UUIDs\n      if (/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(segment)) {\n        return `:${getUniqueParamName(\"uuid\", usedParamNames)}`;\n      }\n\n      // Check for application-specific identifiers (like \"x1744893996277\")\n      if (/^[a-z]\\d+$/i.test(segment)) {\n        return `:${getUniqueParamName(\"appId\", usedParamNames)}`;\n      }\n\n      // Check for alphanumeric identifiers with special characters\n      if (\n        /^[a-z0-9][-a-z0-9_]+$/i.test(segment) &&\n        (segment.length > 10 || (/\\d/.test(segment) && /[a-z]/i.test(segment)))\n      ) {\n        return `:${getUniqueParamName(\"identifier\", usedParamNames)}`;\n      }\n\n      // Check for date formats\n      if (/^\\d{4}-\\d{2}-\\d{2}$/.test(segment)) {\n        return `:${getUniqueParamName(\"date\", usedParamNames)}`;\n      }\n\n      // Check for file formats\n      if (/^[a-z0-9_-]+\\.[a-z0-9]+$/i.test(segment)) {\n        return `:${getUniqueParamName(\"file\", usedParamNames)}`;\n      }\n\n      // Check for slugs\n      if (/^[a-z0-9]+-([a-z0-9]+-)+[a-z0-9]+$/i.test(segment)) {\n        return `:${getUniqueParamName(\"slug\", usedParamNames)}`;\n      }\n\n      // If none of the patterns match, keep the original segment\n      return segment;\n    });\n\n    // Rebuild the pathname with placeholders\n    const patternPath = \"/\" + patternSegments.join(\"/\");\n\n    // Construct the pattern with just the path\n    let pattern = patternPath;\n\n    // Add query parameters if they exist and not removed\n    if (!removeQueryParams && parsedUrl.search) {\n      const searchParams = parsedUrl.searchParams;\n      const queryParams = [];\n      // Convert query parameters to pattern format\n      for (const [key] of Array.from(searchParams.entries())) {\n        queryParams.push(`${key}=:${key}`);\n      }\n\n      if (queryParams.length > 0) {\n        pattern += `?${queryParams.join(\"&\")}`;\n      }\n    }\n\n    // Add hash if it exists\n    if (parsedUrl.hash) {\n      pattern += \"/:hash\";\n    }\n\n    return pattern;\n  } catch (error) {\n    // Return the original URL if parsing fails\n    console.error(\"Error generating URL pattern:\", error);\n    return url;\n  }\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nexport type LinkProps = {\n  className?: string;\n  onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n  href?: string;\n  target?: string;\n  forceInternalLinksBlank?: boolean;\n};\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {\n  const { className, onClick, href, forceInternalLinksBlank = false, ...rest } = props;\n  const classes = cn(\"callout-none\", className);\n  const cleanedHref = href;\n\n  return (\n    <a\n      {...rest}\n      ref={ref}\n      href={cleanedHref}\n      className={classes}\n      target={props.target}\n      onClick={(e) => {\n        onClick?.(e);\n      }}\n    />\n  );\n});\n\nLink.displayName = \"Link\";\n","/* UAParser.js v1.0.41\n   Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n   MIT License */\n(function(window,undefined){\"use strict\";var LIBVERSION=\"1.0.41\",EMPTY=\"\",UNKNOWN=\"?\",FUNC_TYPE=\"function\",UNDEF_TYPE=\"undefined\",OBJ_TYPE=\"object\",STR_TYPE=\"string\",MAJOR=\"major\",MODEL=\"model\",NAME=\"name\",TYPE=\"type\",VENDOR=\"vendor\",VERSION=\"version\",ARCHITECTURE=\"architecture\",CONSOLE=\"console\",MOBILE=\"mobile\",TABLET=\"tablet\",SMARTTV=\"smarttv\",WEARABLE=\"wearable\",EMBEDDED=\"embedded\",UA_MAX_LENGTH=500;var AMAZON=\"Amazon\",APPLE=\"Apple\",ASUS=\"ASUS\",BLACKBERRY=\"BlackBerry\",BROWSER=\"Browser\",CHROME=\"Chrome\",EDGE=\"Edge\",FIREFOX=\"Firefox\",GOOGLE=\"Google\",HONOR=\"Honor\",HUAWEI=\"Huawei\",LENOVO=\"Lenovo\",LG=\"LG\",MICROSOFT=\"Microsoft\",MOTOROLA=\"Motorola\",NVIDIA=\"Nvidia\",ONEPLUS=\"OnePlus\",OPERA=\"Opera\",OPPO=\"OPPO\",SAMSUNG=\"Samsung\",SHARP=\"Sharp\",SONY=\"Sony\",XIAOMI=\"Xiaomi\",ZEBRA=\"Zebra\",FACEBOOK=\"Facebook\",CHROMIUM_OS=\"Chromium OS\",MAC_OS=\"Mac OS\",SUFFIX_BROWSER=\" Browser\";var extend=function(regexes,extensions){var mergedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){mergedRegexes[i]=extensions[i].concat(regexes[i])}else{mergedRegexes[i]=regexes[i]}}return mergedRegexes},enumerize=function(arr){var enums={};for(var i=0;i<arr.length;i++){enums[arr[i].toUpperCase()]=arr[i]}return enums},has=function(str1,str2){return typeof str1===STR_TYPE?lowerize(str2).indexOf(lowerize(str1))!==-1:false},lowerize=function(str){return str.toLowerCase()},majorize=function(version){return typeof version===STR_TYPE?version.replace(/[^\\d\\.]/g,EMPTY).split(\".\")[0]:undefined},trim=function(str,len){if(typeof str===STR_TYPE){str=str.replace(/^\\s\\s*/,EMPTY);return typeof len===UNDEF_TYPE?str:str.substring(0,UA_MAX_LENGTH)}};var rgxMapper=function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){if(!regex[j]){break}matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length===2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length===3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length===4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},strMapper=function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(has(map[i],str)){return i===UNKNOWN?undefined:i}}return map.hasOwnProperty(\"*\")?map[\"*\"]:str};var oldSafariMap={\"1.0\":\"/8\",1.2:\"/1\",1.3:\"/3\",\"2.0\":\"/412\",\"2.0.2\":\"/416\",\"2.0.3\":\"/417\",\"2.0.4\":\"/419\",\"?\":\"/\"},windowsVersionMap={ME:\"4.90\",\"NT 3.11\":\"NT3.51\",\"NT 4.0\":\"NT4.0\",2e3:\"NT 5.0\",XP:[\"NT 5.1\",\"NT 5.2\"],Vista:\"NT 6.0\",7:\"NT 6.1\",8:\"NT 6.2\",8.1:\"NT 6.3\",10:[\"NT 6.4\",\"NT 10.0\"],RT:\"ARM\"};var regexes={browser:[[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Chrome\"]],[/edg(?:e|ios|a)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Edge\"]],[/(opera mini)\\/([-\\w\\.]+)/i,/(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,/(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i],[NAME,VERSION],[/opios[\\/ ]+([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Mini\"]],[/\\bop(?:rg)?x\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" GX\"]],[/\\bopr\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA]],[/\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"Baidu\"]],[/\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i],[VERSION,[NAME,\"Maxthon\"]],[/(kindle)\\/([\\w\\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i,/(?:ms|\\()(ie) ([\\w\\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\\/([-\\w\\.]+)/i,/(heytap|ovi|115)browser\\/([\\d\\.]+)/i,/(weibo)__([\\d\\.]+)/i],[NAME,VERSION],[/quark(?:pc)?\\/([-\\w\\.]+)/i],[VERSION,[NAME,\"Quark\"]],[/\\bddg\\/([\\w\\.]+)/i],[VERSION,[NAME,\"DuckDuckGo\"]],[/(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"UC\"+BROWSER]],[/microm.+\\bqbcore\\/([\\w\\.]+)/i,/\\bqbcore\\/([\\w\\.]+).+microm/i,/micromessenger\\/([\\w\\.]+)/i],[VERSION,[NAME,\"WeChat\"]],[/konqueror\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Konqueror\"]],[/trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i],[VERSION,[NAME,\"IE\"]],[/ya(?:search)?browser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Yandex\"]],[/slbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Smart Lenovo \"+BROWSER]],[/(avast|avg)\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1 Secure \"+BROWSER],VERSION],[/\\bfocus\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" Focus\"]],[/\\bopt\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Touch\"]],[/coc_coc\\w+\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Coc Coc\"]],[/dolfin\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Dolphin\"]],[/coast\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Coast\"]],[/miuibrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"MIUI\"+SUFFIX_BROWSER]],[/fxios\\/([\\w\\.-]+)/i],[VERSION,[NAME,FIREFOX]],[/\\bqihoobrowser\\/?([\\w\\.]*)/i],[VERSION,[NAME,\"360\"]],[/\\b(qq)\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1Browser\"],VERSION],[/(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1\"+SUFFIX_BROWSER],VERSION],[/samsungbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,SAMSUNG+\" Internet\"]],[/metasr[\\/ ]?([\\d\\.]+)/i],[VERSION,[NAME,\"Sogou Explorer\"]],[/(sogou)mo\\w+\\/([\\d\\.]+)/i],[[NAME,\"Sogou Mobile\"],VERSION],[/(electron)\\/([\\w\\.]+) safari/i,/(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i],[NAME,VERSION],[/(lbbrowser|rekonq)/i,/\\[(linkedin)app\\]/i],[NAME],[/ome\\/([\\w\\.]+) \\w* ?(iron) saf/i,/ome\\/([\\w\\.]+).+qihu (360)[es]e/i],[VERSION,NAME],[/((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i],[[NAME,FACEBOOK],VERSION],[/(Klarna)\\/([\\w\\.]+)/i,/(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,/(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,/(daum)apps[\\/ ]([\\w\\.]+)/i,/safari (line)\\/([\\w\\.]+)/i,/\\b(line)\\/([\\w\\.]+)\\/iab/i,/(alipay)client\\/([\\w\\.]+)/i,/(twitter)(?:and| f.+e\\/([\\w\\.]+))/i,/(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i],[NAME,VERSION],[/\\bgsa\\/([\\w\\.]+) .*safari\\//i],[VERSION,[NAME,\"GSA\"]],[/musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i],[VERSION,[NAME,\"TikTok\"]],[/headlesschrome(?:\\/([\\w\\.]+)| )/i],[VERSION,[NAME,CHROME+\" Headless\"]],[/ wv\\).+(chrome)\\/([\\w\\.]+)/i],[[NAME,CHROME+\" WebView\"],VERSION],[/droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i],[VERSION,[NAME,\"Android \"+BROWSER]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i],[NAME,VERSION],[/version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i],[VERSION,[NAME,\"Mobile Safari\"]],[/version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i],[NAME,[VERSION,strMapper,oldSafariMap]],[/(webkit|khtml)\\/([\\w\\.]+)/i],[NAME,VERSION],[/(navigator|netscape\\d?)\\/([-\\w\\.]+)/i],[[NAME,\"Netscape\"],VERSION],[/(wolvic|librewolf)\\/([\\w\\.]+)/i],[NAME,VERSION],[/mobile vr; rv:([\\w\\.]+)\\).+firefox/i],[VERSION,[NAME,FIREFOX+\" Reality\"]],[/ekiohf.+(flow)\\/([\\w\\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,/(firefox)\\/([\\w\\.]+)/i,/(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,/\\b(links) \\(([\\w\\.]+)/i],[NAME,[VERSION,/_/g,\".\"]],[/(cobalt)\\/([\\w\\.]+)/i],[NAME,[VERSION,/master.|lts./,\"\"]]],cpu:[[/\\b((amd|x|x86[-_]?|wow|win)64)\\b/i],[[ARCHITECTURE,\"amd64\"]],[/(ia32(?=;))/i,/\\b((i[346]|x)86)(pc)?\\b/i],[[ARCHITECTURE,\"ia32\"]],[/\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i],[[ARCHITECTURE,\"arm64\"]],[/\\b(arm(v[67])?ht?n?[fl]p?)\\b/i],[[ARCHITECTURE,\"armhf\"]],[/( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i],[[ARCHITECTURE,\"arm\"]],[/((ppc|powerpc)(64)?)( mac|;|\\))/i],[[ARCHITECTURE,/ower/,EMPTY,lowerize]],[/ sun4\\w[;\\)]/i],[[ARCHITECTURE,\"sparc\"]],[/\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i],[[ARCHITECTURE,lowerize]]],device:[[/\\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],[MODEL,[VENDOR,SAMSUNG],[TYPE,TABLET]],[/\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr])[-\\w]+)/i,/sec-(sgh\\w+)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,MOBILE]],[/(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i],[MODEL,[VENDOR,APPLE],[TYPE,MOBILE]],[/\\((ipad);[-\\w\\),; ]+apple/i,/applecoremedia\\/[\\w\\.]+ \\((ipad)/i,/\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i],[MODEL,[VENDOR,APPLE],[TYPE,TABLET]],[/(macintosh);/i],[MODEL,[VENDOR,APPLE]],[/\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i],[MODEL,[VENDOR,SHARP],[TYPE,MOBILE]],[/\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i],[MODEL,[VENDOR,HONOR],[TYPE,TABLET]],[/honor([-\\w ]+)[;\\)]/i],[MODEL,[VENDOR,HONOR],[TYPE,MOBILE]],[/\\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\\w\\. ]*(?= bui|\\)))\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,TABLET]],[/(?:huawei)([-\\w ]+)[;\\)]/i,/\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,MOBILE]],[/oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,/\\b((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,TABLET]],[/\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,/\\b; (\\w+) build\\/hm\\1/i,/\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,/\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,/oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,/\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\\))/i,/ ([\\w ]+) miui\\/v?\\d/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,MOBILE]],[/; (\\w+) bui.+ oppo/i,/\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i],[MODEL,[VENDOR,OPPO],[TYPE,MOBILE]],[/\\b(opd2(\\d{3}a?))(?: bui|\\))/i],[MODEL,[VENDOR,strMapper,{OnePlus:[\"304\",\"403\",\"203\"],\"*\":OPPO}],[TYPE,TABLET]],[/vivo (\\w+)(?: bui|\\))/i,/\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i],[MODEL,[VENDOR,\"Vivo\"],[TYPE,MOBILE]],[/\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i],[MODEL,[VENDOR,\"Realme\"],[TYPE,MOBILE]],[/\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,/\\bmot(?:orola)?[- ](\\w*)/i,/((?:moto(?! 360)[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,MOBILE]],[/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],[MODEL,[VENDOR,MOTOROLA],[TYPE,TABLET]],[/((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i],[MODEL,[VENDOR,LG],[TYPE,TABLET]],[/(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,/\\blg[-e;\\/ ]+((?!browser|netcast|android tv|watch)\\w+)/i,/\\blg-?([\\d\\w]+) bui/i],[MODEL,[VENDOR,LG],[TYPE,MOBILE]],[/(ideatab[-\\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\\d{3,4}(?:f[cu]|xu|[av])|yt\\d?-[jx]?\\d+[lfmx])( bui|;|\\)|\\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i],[MODEL,[VENDOR,LENOVO],[TYPE,TABLET]],[/(nokia) (t[12][01])/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,/nokia[-_ ]?(([-\\w\\. ]*))/i],[[MODEL,/_/g,\" \"],[TYPE,MOBILE],[VENDOR,\"Nokia\"]],[/(pixel (c|tablet))\\b/i],[MODEL,[VENDOR,GOOGLE],[TYPE,TABLET]],[/droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i],[MODEL,[VENDOR,GOOGLE],[TYPE,MOBILE]],[/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],[MODEL,[VENDOR,SONY],[TYPE,MOBILE]],[/sony tablet [ps]/i,/\\b(?:sony)?sgp\\w+(?: bui|\\))/i],[[MODEL,\"Xperia Tablet\"],[VENDOR,SONY],[TYPE,TABLET]],[/ (kb2005|in20[12]5|be20[12][59])\\b/i,/(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i],[MODEL,[VENDOR,ONEPLUS],[TYPE,MOBILE]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i,/(kf[a-z]+)( bui|\\)).+silk\\//i],[MODEL,[VENDOR,AMAZON],[TYPE,TABLET]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i],[[MODEL,/(.+)/g,\"Fire Phone $1\"],[VENDOR,AMAZON],[TYPE,MOBILE]],[/(playbook);[-\\w\\),; ]+(rim)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/\\b((?:bb[a-f]|st[hv])100-\\d)/i,/\\(bb10; (\\w+)/i],[MODEL,[VENDOR,BLACKBERRY],[TYPE,MOBILE]],[/(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i],[MODEL,[VENDOR,ASUS],[TYPE,TABLET]],[/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],[MODEL,[VENDOR,ASUS],[TYPE,MOBILE]],[/(nexus 9)/i],[MODEL,[VENDOR,\"HTC\"],[TYPE,TABLET]],[/(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,/(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i],[VENDOR,[MODEL,/_/g,\" \"],[TYPE,MOBILE]],[/droid [\\w\\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\\w*(\\)| bui)/i],[MODEL,[VENDOR,\"TCL\"],[TYPE,TABLET]],[/(itel) ((\\w+))/i],[[VENDOR,lowerize],MODEL,[TYPE,strMapper,{tablet:[\"p10001l\",\"w7001\"],\"*\":\"mobile\"}]],[/droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i],[MODEL,[VENDOR,\"Acer\"],[TYPE,TABLET]],[/droid.+; (m[1-5] note) bui/i,/\\bmz-([-\\w]{2,})/i],[MODEL,[VENDOR,\"Meizu\"],[TYPE,MOBILE]],[/; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i],[MODEL,[VENDOR,\"Ulefone\"],[TYPE,MOBILE]],[/; (energy ?\\w+)(?: bui|\\))/i,/; energizer ([\\w ]+)(?: bui|\\))/i],[MODEL,[VENDOR,\"Energizer\"],[TYPE,MOBILE]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i],[MODEL,[VENDOR,\"Cat\"],[TYPE,MOBILE]],[/((?:new )?andromax[\\w- ]+)(?: bui|\\))/i],[MODEL,[VENDOR,\"Smartfren\"],[TYPE,MOBILE]],[/droid.+; (a(?:015|06[35]|142p?))/i],[MODEL,[VENDOR,\"Nothing\"],[TYPE,MOBILE]],[/; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,/archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i],[MODEL,[VENDOR,\"Archos\"],[TYPE,TABLET]],[/archos ([\\w ]+)( b|\\))/i,/; (ac[3-6]\\d\\w{2,8})( b|\\))/i],[MODEL,[VENDOR,\"Archos\"],[TYPE,MOBILE]],[/(imo) (tab \\w+)/i,/(infinix) (x1101b?)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,/; (hmd|imo) ([\\w ]+?)(?: bui|\\))/i,/(hp) ([\\w ]+\\w)/i,/(microsoft); (lumia[\\w ]+)/i,/(lenovo)[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i,/(oppo) ?([\\w ]+) bui/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kobo)\\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\\/([\\w\\.]+)/i,/(nook)[\\w ]+build\\/(\\w+)/i,/(dell) (strea[kpr\\d ]*[\\dko])/i,/(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,/(trinity)[- ]*(t\\d{3}) bui/i,/(gigaset)[- ]+(q\\w{1,9}) bui/i,/(vodafone) ([\\w ]+)(?:\\)| bui)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(surface duo)/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,TABLET]],[/droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i],[MODEL,[VENDOR,\"Fairphone\"],[TYPE,MOBILE]],[/(u304aa)/i],[MODEL,[VENDOR,\"AT&T\"],[TYPE,MOBILE]],[/\\bsie-(\\w*)/i],[MODEL,[VENDOR,\"Siemens\"],[TYPE,MOBILE]],[/\\b(rct\\w+) b/i],[MODEL,[VENDOR,\"RCA\"],[TYPE,TABLET]],[/\\b(venue[\\d ]{2,7}) b/i],[MODEL,[VENDOR,\"Dell\"],[TYPE,TABLET]],[/\\b(q(?:mv|ta)\\w+) b/i],[MODEL,[VENDOR,\"Verizon\"],[TYPE,TABLET]],[/\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i],[MODEL,[VENDOR,\"Barnes & Noble\"],[TYPE,TABLET]],[/\\b(tm\\d{3}\\w+) b/i],[MODEL,[VENDOR,\"NuVision\"],[TYPE,TABLET]],[/\\b(k88) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,TABLET]],[/\\b(nx\\d{3}j) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,MOBILE]],[/\\b(gen\\d{3}) b.+49h/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,MOBILE]],[/\\b(zur\\d{3}) b/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,TABLET]],[/\\b((zeki)?tb.*\\b) b/i],[MODEL,[VENDOR,\"Zeki\"],[TYPE,TABLET]],[/\\b([yr]\\d{2}) b/i,/\\b(dragon[- ]+touch |dt)(\\w{5}) b/i],[[VENDOR,\"Dragon Touch\"],MODEL,[TYPE,TABLET]],[/\\b(ns-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"Insignia\"],[TYPE,TABLET]],[/\\b((nxa|next)-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"NextBook\"],[TYPE,TABLET]],[/\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[VENDOR,\"Voice\"],MODEL,[TYPE,MOBILE]],[/\\b(lvtel\\-)?(v1[12]) b/i],[[VENDOR,\"LvTel\"],MODEL,[TYPE,MOBILE]],[/\\b(ph-1) /i],[MODEL,[VENDOR,\"Essential\"],[TYPE,MOBILE]],[/\\b(v(100md|700na|7011|917g).*\\b) b/i],[MODEL,[VENDOR,\"Envizen\"],[TYPE,TABLET]],[/\\b(trio[-\\w\\. ]+) b/i],[MODEL,[VENDOR,\"MachSpeed\"],[TYPE,TABLET]],[/\\btu_(1491) b/i],[MODEL,[VENDOR,\"Rotor\"],[TYPE,TABLET]],[/((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i],[MODEL,[VENDOR,NVIDIA],[TYPE,TABLET]],[/(sprint) (\\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kin\\.[onetw]{3})/i],[[MODEL,/\\./g,\" \"],[VENDOR,MICROSOFT],[TYPE,MOBILE]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,TABLET]],[/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,MOBILE]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV]],[/hbbtv.+maple;(\\d+)/i],[[MODEL,/^/,\"SmartTV\"],[VENDOR,SAMSUNG],[TYPE,SMARTTV]],[/(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i],[[VENDOR,LG],[TYPE,SMARTTV]],[/(apple) ?tv/i],[VENDOR,[MODEL,APPLE+\" TV\"],[TYPE,SMARTTV]],[/crkey/i],[[MODEL,CHROME+\"cast\"],[VENDOR,GOOGLE],[TYPE,SMARTTV]],[/droid.+aft(\\w+)( bui|\\))/i],[MODEL,[VENDOR,AMAZON],[TYPE,SMARTTV]],[/(shield \\w+ tv)/i],[MODEL,[VENDOR,NVIDIA],[TYPE,SMARTTV]],[/\\(dtv[\\);].+(aquos)/i,/(aquos-tv[\\w ]+)\\)/i],[MODEL,[VENDOR,SHARP],[TYPE,SMARTTV]],[/(bravia[\\w ]+)( bui|\\))/i],[MODEL,[VENDOR,SONY],[TYPE,SMARTTV]],[/(mi(tv|box)-?\\w+) bui/i],[MODEL,[VENDOR,XIAOMI],[TYPE,SMARTTV]],[/Hbbtv.*(technisat) (.*);/i],[VENDOR,MODEL,[TYPE,SMARTTV]],[/\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,/hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i],[[VENDOR,trim],[MODEL,trim],[TYPE,SMARTTV]],[/droid.+; ([\\w- ]+) (?:android tv|smart[- ]?tv)/i],[MODEL,[TYPE,SMARTTV]],[/\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i],[[TYPE,SMARTTV]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/droid.+; (shield)( bui|\\))/i],[MODEL,[VENDOR,NVIDIA],[TYPE,CONSOLE]],[/(playstation \\w+)/i],[MODEL,[VENDOR,SONY],[TYPE,CONSOLE]],[/\\b(xbox(?: one)?(?!; xbox))[\\); ]/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,CONSOLE]],[/\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,WEARABLE]],[/((pebble))app/i,/(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[MODEL,[VENDOR,OPPO],[TYPE,WEARABLE]],[/(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i],[MODEL,[VENDOR,APPLE],[TYPE,WEARABLE]],[/(opwwe\\d{3})/i],[MODEL,[VENDOR,ONEPLUS],[TYPE,WEARABLE]],[/(moto 360)/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,WEARABLE]],[/(smartwatch 3)/i],[MODEL,[VENDOR,SONY],[TYPE,WEARABLE]],[/(g watch r)/i],[MODEL,[VENDOR,LG],[TYPE,WEARABLE]],[/droid.+; (wt63?0{2,3})\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,WEARABLE]],[/droid.+; (glass) \\d/i],[MODEL,[VENDOR,GOOGLE],[TYPE,WEARABLE]],[/(pico) (4|neo3(?: link|pro)?)/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/; (quest( \\d| pro)?)/i],[MODEL,[VENDOR,FACEBOOK],[TYPE,WEARABLE]],[/(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i],[VENDOR,[TYPE,EMBEDDED]],[/(aeobc)\\b/i],[MODEL,[VENDOR,AMAZON],[TYPE,EMBEDDED]],[/(homepod).+mac os/i],[MODEL,[VENDOR,APPLE],[TYPE,EMBEDDED]],[/windows iot/i],[[TYPE,EMBEDDED]],[/droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i],[MODEL,[TYPE,MOBILE]],[/droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i],[MODEL,[TYPE,TABLET]],[/\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i],[[TYPE,TABLET]],[/(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i],[[TYPE,MOBILE]],[/droid .+?; ([\\w\\. -]+)( bui|\\))/i],[MODEL,[VENDOR,\"Generic\"]]],engine:[[/windows.+ edge\\/([\\w\\.]+)/i],[VERSION,[NAME,EDGE+\"HTML\"]],[/(arkweb)\\/([\\w\\.]+)/i],[NAME,VERSION],[/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i],[VERSION,[NAME,\"Blink\"]],[/(presto)\\/([\\w\\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i,/ekioh(flow)\\/([\\w\\.]+)/i,/(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,/(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,/\\b(libweb)/i],[NAME,VERSION],[/ladybird\\//i],[[NAME,\"LibWeb\"]],[/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i],[VERSION,NAME]],os:[[/microsoft (windows) (vista|xp)/i],[NAME,VERSION],[/(windows (?:phone(?: os)?|mobile|iot))[\\/ ]?([\\d\\.\\w ]*)/i],[NAME,[VERSION,strMapper,windowsVersionMap]],[/windows nt 6\\.2; (arm)/i,/windows[\\/ ]([ntce\\d\\. ]+\\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],[[VERSION,strMapper,windowsVersionMap],[NAME,\"Windows\"]],[/[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i,/(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,/cfnetwork\\/.+darwin/i],[[VERSION,/_/g,\".\"],[NAME,\"iOS\"]],[/(mac os x) ?([\\w\\. ]*)/i,/(macintosh|mac_powerpc\\b)(?!.+haiku)/i],[[NAME,MAC_OS],[VERSION,/_/g,\".\"]],[/droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i],[VERSION,NAME],[/(ubuntu) ([\\w\\.]+) like android/i],[[NAME,/(.+)/,\"$1 Touch\"],VERSION],[/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\\w*[-\\/; ]?([\\d\\.]*)/i],[NAME,VERSION],[/\\(bb(10);/i],[VERSION,[NAME,BLACKBERRY]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i],[VERSION,[NAME,\"Symbian\"]],[/mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" OS\"]],[/web0s;.+rt(tv)/i,/\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"webOS\"]],[/watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i],[VERSION,[NAME,\"watchOS\"]],[/crkey\\/([\\d\\.]+)/i],[VERSION,[NAME,CHROME+\"cast\"]],[/(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i],[[NAME,CHROMIUM_OS],VERSION],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\\/(\\d+\\.[\\w\\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\\);]+)/i,/\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,/(mint)[\\/\\(\\) ]?(\\w*)/i,/(mageia|vectorlinux)[; ]/i,/([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,/(hurd|linux)(?: arm\\w*| x86\\w*| ?)([\\w\\.]*)/i,/(gnu) ?([\\w\\.]*)/i,/\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i,/(haiku) (\\w+)/i],[NAME,VERSION],[/(sunos) ?([\\w\\.\\d]*)/i],[[NAME,\"Solaris\"],VERSION],[/((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,/(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,/\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\\w\\.]*)/i],[NAME,VERSION]]};var UAParser=function(ua,extensions){if(typeof ua===OBJ_TYPE){extensions=ua;ua=undefined}if(!(this instanceof UAParser)){return new UAParser(ua,extensions).getResult()}var _navigator=typeof window!==UNDEF_TYPE&&window.navigator?window.navigator:undefined;var _ua=ua||(_navigator&&_navigator.userAgent?_navigator.userAgent:EMPTY);var _uach=_navigator&&_navigator.userAgentData?_navigator.userAgentData:undefined;var _rgxmap=extensions?extend(regexes,extensions):regexes;var _isSelfNav=_navigator&&_navigator.userAgent==_ua;this.getBrowser=function(){var _browser={};_browser[NAME]=undefined;_browser[VERSION]=undefined;rgxMapper.call(_browser,_ua,_rgxmap.browser);_browser[MAJOR]=majorize(_browser[VERSION]);if(_isSelfNav&&_navigator&&_navigator.brave&&typeof _navigator.brave.isBrave==FUNC_TYPE){_browser[NAME]=\"Brave\"}return _browser};this.getCPU=function(){var _cpu={};_cpu[ARCHITECTURE]=undefined;rgxMapper.call(_cpu,_ua,_rgxmap.cpu);return _cpu};this.getDevice=function(){var _device={};_device[VENDOR]=undefined;_device[MODEL]=undefined;_device[TYPE]=undefined;rgxMapper.call(_device,_ua,_rgxmap.device);if(_isSelfNav&&!_device[TYPE]&&_uach&&_uach.mobile){_device[TYPE]=MOBILE}if(_isSelfNav&&_device[MODEL]==\"Macintosh\"&&_navigator&&typeof _navigator.standalone!==UNDEF_TYPE&&_navigator.maxTouchPoints&&_navigator.maxTouchPoints>2){_device[MODEL]=\"iPad\";_device[TYPE]=TABLET}return _device};this.getEngine=function(){var _engine={};_engine[NAME]=undefined;_engine[VERSION]=undefined;rgxMapper.call(_engine,_ua,_rgxmap.engine);return _engine};this.getOS=function(){var _os={};_os[NAME]=undefined;_os[VERSION]=undefined;rgxMapper.call(_os,_ua,_rgxmap.os);if(_isSelfNav&&!_os[NAME]&&_uach&&_uach.platform&&_uach.platform!=\"Unknown\"){_os[NAME]=_uach.platform.replace(/chrome os/i,CHROMIUM_OS).replace(/macos/i,MAC_OS)}return _os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return _ua};this.setUA=function(ua){_ua=typeof ua===STR_TYPE&&ua.length>UA_MAX_LENGTH?trim(ua,UA_MAX_LENGTH):ua;return this};this.setUA(_ua);return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER=enumerize([NAME,VERSION,MAJOR]);UAParser.CPU=enumerize([ARCHITECTURE]);UAParser.DEVICE=enumerize([MODEL,VENDOR,TYPE,CONSOLE,MOBILE,SMARTTV,TABLET,WEARABLE,EMBEDDED]);UAParser.ENGINE=UAParser.OS=enumerize([NAME,VERSION]);if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else if(typeof window!==UNDEF_TYPE){window.UAParser=UAParser}}var $=typeof window!==UNDEF_TYPE&&(window.jQuery||window.Zepto);if($&&!$.ua){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(ua){parser.setUA(ua);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window===\"object\"?window:this);","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nvar UAParser = require('ua-parser-js/dist/ua-parser.min');\n\nvar ClientUAInstance = new UAParser();\nvar browser = ClientUAInstance.getBrowser();\nvar cpu = ClientUAInstance.getCPU();\nvar device = ClientUAInstance.getDevice();\nvar engine = ClientUAInstance.getEngine();\nvar os = ClientUAInstance.getOS();\nvar ua = ClientUAInstance.getUA();\nvar setUa = function setUa(userAgentString) {\n  return ClientUAInstance.setUA(userAgentString);\n};\nvar parseUserAgent = function parseUserAgent(userAgent) {\n  if (!userAgent) {\n    console.error('No userAgent string was provided');\n    return;\n  }\n\n  var UserAgentInstance = new UAParser(userAgent);\n  return {\n    UA: UserAgentInstance,\n    browser: UserAgentInstance.getBrowser(),\n    cpu: UserAgentInstance.getCPU(),\n    device: UserAgentInstance.getDevice(),\n    engine: UserAgentInstance.getEngine(),\n    os: UserAgentInstance.getOS(),\n    ua: UserAgentInstance.getUA(),\n    setUserAgent: function setUserAgent(userAgentString) {\n      return UserAgentInstance.setUA(userAgentString);\n    }\n  };\n};\n\nvar UAHelper = /*#__PURE__*/Object.freeze({\n  ClientUAInstance: ClientUAInstance,\n  browser: browser,\n  cpu: cpu,\n  device: device,\n  engine: engine,\n  os: os,\n  ua: ua,\n  setUa: setUa,\n  parseUserAgent: parseUserAgent\n});\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\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\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar DeviceTypes = {\n  Mobile: 'mobile',\n  Tablet: 'tablet',\n  SmartTv: 'smarttv',\n  Console: 'console',\n  Wearable: 'wearable',\n  Embedded: 'embedded',\n  Browser: undefined\n};\nvar BrowserTypes = {\n  Chrome: 'Chrome',\n  Firefox: 'Firefox',\n  Opera: 'Opera',\n  Yandex: 'Yandex',\n  Safari: 'Safari',\n  InternetExplorer: 'Internet Explorer',\n  Edge: 'Edge',\n  Chromium: 'Chromium',\n  Ie: 'IE',\n  MobileSafari: 'Mobile Safari',\n  EdgeChromium: 'Edge Chromium',\n  MIUI: 'MIUI Browser',\n  SamsungBrowser: 'Samsung Browser'\n};\nvar OsTypes = {\n  IOS: 'iOS',\n  Android: 'Android',\n  WindowsPhone: 'Windows Phone',\n  Windows: 'Windows',\n  MAC_OS: 'Mac OS'\n};\nvar InitialDeviceTypes = {\n  isMobile: false,\n  isTablet: false,\n  isBrowser: false,\n  isSmartTV: false,\n  isConsole: false,\n  isWearable: false\n};\n\nvar checkDeviceType = function checkDeviceType(type) {\n  switch (type) {\n    case DeviceTypes.Mobile:\n      return {\n        isMobile: true\n      };\n\n    case DeviceTypes.Tablet:\n      return {\n        isTablet: true\n      };\n\n    case DeviceTypes.SmartTv:\n      return {\n        isSmartTV: true\n      };\n\n    case DeviceTypes.Console:\n      return {\n        isConsole: true\n      };\n\n    case DeviceTypes.Wearable:\n      return {\n        isWearable: true\n      };\n\n    case DeviceTypes.Browser:\n      return {\n        isBrowser: true\n      };\n\n    case DeviceTypes.Embedded:\n      return {\n        isEmbedded: true\n      };\n\n    default:\n      return InitialDeviceTypes;\n  }\n};\nvar setUserAgent = function setUserAgent(userAgent) {\n  return setUa(userAgent);\n};\nvar setDefaults = function setDefaults(p) {\n  var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n  return p ? p : d;\n};\nvar getNavigatorInstance = function getNavigatorInstance() {\n  if (typeof window !== 'undefined') {\n    if (window.navigator || navigator) {\n      return window.navigator || navigator;\n    }\n  }\n\n  return false;\n};\nvar isIOS13Check = function isIOS13Check(type) {\n  var nav = getNavigatorInstance();\n  return nav && nav.platform && (nav.platform.indexOf(type) !== -1 || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1 && !window.MSStream);\n};\n\nvar browserPayload = function browserPayload(isBrowser, browser, engine, os, ua) {\n  return {\n    isBrowser: isBrowser,\n    browserMajorVersion: setDefaults(browser.major),\n    browserFullVersion: setDefaults(browser.version),\n    browserName: setDefaults(browser.name),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar mobilePayload = function mobilePayload(type, device, os, ua) {\n  return _objectSpread2({}, type, {\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    os: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    ua: setDefaults(ua)\n  });\n};\nvar smartTvPayload = function smartTvPayload(isSmartTV, engine, os, ua) {\n  return {\n    isSmartTV: isSmartTV,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar consolePayload = function consolePayload(isConsole, engine, os, ua) {\n  return {\n    isConsole: isConsole,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar wearablePayload = function wearablePayload(isWearable, engine, os, ua) {\n  return {\n    isWearable: isWearable,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar embeddedPayload = function embeddedPayload(isEmbedded, device, engine, os, ua) {\n  return {\n    isEmbedded: isEmbedded,\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\n\nfunction deviceDetect(userAgent) {\n  var _ref = userAgent ? parseUserAgent(userAgent) : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      engine = _ref.engine,\n      os = _ref.os,\n      ua = _ref.ua;\n\n  var type = checkDeviceType(device.type);\n  var isBrowser = type.isBrowser,\n      isMobile = type.isMobile,\n      isTablet = type.isTablet,\n      isSmartTV = type.isSmartTV,\n      isConsole = type.isConsole,\n      isWearable = type.isWearable,\n      isEmbedded = type.isEmbedded;\n\n  if (isBrowser) {\n    return browserPayload(isBrowser, browser, engine, os, ua);\n  }\n\n  if (isSmartTV) {\n    return smartTvPayload(isSmartTV, engine, os, ua);\n  }\n\n  if (isConsole) {\n    return consolePayload(isConsole, engine, os, ua);\n  }\n\n  if (isMobile) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isTablet) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isWearable) {\n    return wearablePayload(isWearable, engine, os, ua);\n  }\n\n  if (isEmbedded) {\n    return embeddedPayload(isEmbedded, device, engine, os, ua);\n  }\n}\n\nvar isMobileType = function isMobileType(_ref) {\n  var type = _ref.type;\n  return type === DeviceTypes.Mobile;\n};\nvar isTabletType = function isTabletType(_ref2) {\n  var type = _ref2.type;\n  return type === DeviceTypes.Tablet;\n};\nvar isMobileAndTabletType = function isMobileAndTabletType(_ref3) {\n  var type = _ref3.type;\n  return type === DeviceTypes.Mobile || type === DeviceTypes.Tablet;\n};\nvar isSmartTVType = function isSmartTVType(_ref4) {\n  var type = _ref4.type;\n  return type === DeviceTypes.SmartTv;\n};\nvar isBrowserType = function isBrowserType(_ref5) {\n  var type = _ref5.type;\n  return type === DeviceTypes.Browser;\n};\nvar isWearableType = function isWearableType(_ref6) {\n  var type = _ref6.type;\n  return type === DeviceTypes.Wearable;\n};\nvar isConsoleType = function isConsoleType(_ref7) {\n  var type = _ref7.type;\n  return type === DeviceTypes.Console;\n};\nvar isEmbeddedType = function isEmbeddedType(_ref8) {\n  var type = _ref8.type;\n  return type === DeviceTypes.Embedded;\n};\nvar getMobileVendor = function getMobileVendor(_ref9) {\n  var vendor = _ref9.vendor;\n  return setDefaults(vendor);\n};\nvar getMobileModel = function getMobileModel(_ref10) {\n  var model = _ref10.model;\n  return setDefaults(model);\n};\nvar getDeviceType = function getDeviceType(_ref11) {\n  var type = _ref11.type;\n  return setDefaults(type, 'browser');\n}; // os types\n\nvar isAndroidType = function isAndroidType(_ref12) {\n  var name = _ref12.name;\n  return name === OsTypes.Android;\n};\nvar isWindowsType = function isWindowsType(_ref13) {\n  var name = _ref13.name;\n  return name === OsTypes.Windows;\n};\nvar isMacOsType = function isMacOsType(_ref14) {\n  var name = _ref14.name;\n  return name === OsTypes.MAC_OS;\n};\nvar isWinPhoneType = function isWinPhoneType(_ref15) {\n  var name = _ref15.name;\n  return name === OsTypes.WindowsPhone;\n};\nvar isIOSType = function isIOSType(_ref16) {\n  var name = _ref16.name;\n  return name === OsTypes.IOS;\n};\nvar getOsVersion = function getOsVersion(_ref17) {\n  var version = _ref17.version;\n  return setDefaults(version);\n};\nvar getOsName = function getOsName(_ref18) {\n  var name = _ref18.name;\n  return setDefaults(name);\n}; // browser types\n\nvar isChromeType = function isChromeType(_ref19) {\n  var name = _ref19.name;\n  return name === BrowserTypes.Chrome;\n};\nvar isFirefoxType = function isFirefoxType(_ref20) {\n  var name = _ref20.name;\n  return name === BrowserTypes.Firefox;\n};\nvar isChromiumType = function isChromiumType(_ref21) {\n  var name = _ref21.name;\n  return name === BrowserTypes.Chromium;\n};\nvar isEdgeType = function isEdgeType(_ref22) {\n  var name = _ref22.name;\n  return name === BrowserTypes.Edge;\n};\nvar isYandexType = function isYandexType(_ref23) {\n  var name = _ref23.name;\n  return name === BrowserTypes.Yandex;\n};\nvar isSafariType = function isSafariType(_ref24) {\n  var name = _ref24.name;\n  return name === BrowserTypes.Safari || name === BrowserTypes.MobileSafari;\n};\nvar isMobileSafariType = function isMobileSafariType(_ref25) {\n  var name = _ref25.name;\n  return name === BrowserTypes.MobileSafari;\n};\nvar isOperaType = function isOperaType(_ref26) {\n  var name = _ref26.name;\n  return name === BrowserTypes.Opera;\n};\nvar isIEType = function isIEType(_ref27) {\n  var name = _ref27.name;\n  return name === BrowserTypes.InternetExplorer || name === BrowserTypes.Ie;\n};\nvar isMIUIType = function isMIUIType(_ref28) {\n  var name = _ref28.name;\n  return name === BrowserTypes.MIUI;\n};\nvar isSamsungBrowserType = function isSamsungBrowserType(_ref29) {\n  var name = _ref29.name;\n  return name === BrowserTypes.SamsungBrowser;\n};\nvar getBrowserFullVersion = function getBrowserFullVersion(_ref30) {\n  var version = _ref30.version;\n  return setDefaults(version);\n};\nvar getBrowserVersion = function getBrowserVersion(_ref31) {\n  var major = _ref31.major;\n  return setDefaults(major);\n};\nvar getBrowserName = function getBrowserName(_ref32) {\n  var name = _ref32.name;\n  return setDefaults(name);\n}; // engine types\n\nvar getEngineName = function getEngineName(_ref33) {\n  var name = _ref33.name;\n  return setDefaults(name);\n};\nvar getEngineVersion = function getEngineVersion(_ref34) {\n  var version = _ref34.version;\n  return setDefaults(version);\n};\nvar isElectronType = function isElectronType() {\n  var nav = getNavigatorInstance();\n  var ua = nav && nav.userAgent && nav.userAgent.toLowerCase();\n  return typeof ua === 'string' ? /electron/.test(ua) : false;\n};\nvar isEdgeChromiumType = function isEdgeChromiumType(ua) {\n  return typeof ua === 'string' && ua.indexOf('Edg/') !== -1;\n};\nvar getIOS13 = function getIOS13() {\n  var nav = getNavigatorInstance();\n  return nav && (/iPad|iPhone|iPod/.test(nav.platform) || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1) && !window.MSStream;\n};\nvar getIPad13 = function getIPad13() {\n  return isIOS13Check('iPad');\n};\nvar getIphone13 = function getIphone13() {\n  return isIOS13Check('iPhone');\n};\nvar getIPod13 = function getIPod13() {\n  return isIOS13Check('iPod');\n};\nvar getUseragent = function getUseragent(userAg) {\n  return setDefaults(userAg);\n};\n\nfunction buildSelectorsObject(options) {\n  var _ref = options ? options : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      os = _ref.os,\n      engine = _ref.engine,\n      ua = _ref.ua;\n\n  return {\n    isSmartTV: isSmartTVType(device),\n    isConsole: isConsoleType(device),\n    isWearable: isWearableType(device),\n    isEmbedded: isEmbeddedType(device),\n    isMobileSafari: isMobileSafariType(browser) || getIPad13(),\n    isChromium: isChromiumType(browser),\n    isMobile: isMobileAndTabletType(device) || getIPad13(),\n    isMobileOnly: isMobileType(device),\n    isTablet: isTabletType(device) || getIPad13(),\n    isBrowser: isBrowserType(device),\n    isDesktop: isBrowserType(device),\n    isAndroid: isAndroidType(os),\n    isWinPhone: isWinPhoneType(os),\n    isIOS: isIOSType(os) || getIPad13(),\n    isChrome: isChromeType(browser),\n    isFirefox: isFirefoxType(browser),\n    isSafari: isSafariType(browser),\n    isOpera: isOperaType(browser),\n    isIE: isIEType(browser),\n    osVersion: getOsVersion(os),\n    osName: getOsName(os),\n    fullBrowserVersion: getBrowserFullVersion(browser),\n    browserVersion: getBrowserVersion(browser),\n    browserName: getBrowserName(browser),\n    mobileVendor: getMobileVendor(device),\n    mobileModel: getMobileModel(device),\n    engineName: getEngineName(engine),\n    engineVersion: getEngineVersion(engine),\n    getUA: getUseragent(ua),\n    isEdge: isEdgeType(browser) || isEdgeChromiumType(ua),\n    isYandex: isYandexType(browser),\n    deviceType: getDeviceType(device),\n    isIOS13: getIOS13(),\n    isIPad13: getIPad13(),\n    isIPhone13: getIphone13(),\n    isIPod13: getIPod13(),\n    isElectron: isElectronType(),\n    isEdgeChromium: isEdgeChromiumType(ua),\n    isLegacyEdge: isEdgeType(browser) && !isEdgeChromiumType(ua),\n    isWindows: isWindowsType(os),\n    isMacOs: isMacOsType(os),\n    isMIUI: isMIUIType(browser),\n    isSamsungBrowser: isSamsungBrowserType(browser)\n  };\n}\n\nvar isSmartTV = isSmartTVType(device);\nvar isConsole = isConsoleType(device);\nvar isWearable = isWearableType(device);\nvar isEmbedded = isEmbeddedType(device);\nvar isMobileSafari = isMobileSafariType(browser) || getIPad13();\nvar isChromium = isChromiumType(browser);\nvar isMobile = isMobileAndTabletType(device) || getIPad13();\nvar isMobileOnly = isMobileType(device);\nvar isTablet = isTabletType(device) || getIPad13();\nvar isBrowser = isBrowserType(device);\nvar isDesktop = isBrowserType(device);\nvar isAndroid = isAndroidType(os);\nvar isWinPhone = isWinPhoneType(os);\nvar isIOS = isIOSType(os) || getIPad13();\nvar isChrome = isChromeType(browser);\nvar isFirefox = isFirefoxType(browser);\nvar isSafari = isSafariType(browser);\nvar isOpera = isOperaType(browser);\nvar isIE = isIEType(browser);\nvar osVersion = getOsVersion(os);\nvar osName = getOsName(os);\nvar fullBrowserVersion = getBrowserFullVersion(browser);\nvar browserVersion = getBrowserVersion(browser);\nvar browserName = getBrowserName(browser);\nvar mobileVendor = getMobileVendor(device);\nvar mobileModel = getMobileModel(device);\nvar engineName = getEngineName(engine);\nvar engineVersion = getEngineVersion(engine);\nvar getUA = getUseragent(ua);\nvar isEdge = isEdgeType(browser) || isEdgeChromiumType(ua);\nvar isYandex = isYandexType(browser);\nvar deviceType = getDeviceType(device);\nvar isIOS13 = getIOS13();\nvar isIPad13 = getIPad13();\nvar isIPhone13 = getIphone13();\nvar isIPod13 = getIPod13();\nvar isElectron = isElectronType();\nvar isEdgeChromium = isEdgeChromiumType(ua);\nvar isLegacyEdge = isEdgeType(browser) && !isEdgeChromiumType(ua);\nvar isWindows = isWindowsType(os);\nvar isMacOs = isMacOsType(os);\nvar isMIUI = isMIUIType(browser);\nvar isSamsungBrowser = isSamsungBrowserType(browser);\nvar getSelectorsByUserAgent = function getSelectorsByUserAgent(userAgent) {\n  if (!userAgent || typeof userAgent !== 'string') {\n    console.error('No valid user agent string was provided');\n    return;\n  }\n\n  var _UAHelper$parseUserAg = parseUserAgent(userAgent),\n      device = _UAHelper$parseUserAg.device,\n      browser = _UAHelper$parseUserAg.browser,\n      os = _UAHelper$parseUserAg.os,\n      engine = _UAHelper$parseUserAg.engine,\n      ua = _UAHelper$parseUserAg.ua;\n\n  return buildSelectorsObject({\n    device: device,\n    browser: browser,\n    os: os,\n    engine: engine,\n    ua: ua\n  });\n};\n\nvar AndroidView = function AndroidView(_ref) {\n  var renderWithFragment = _ref.renderWithFragment,\n      children = _ref.children,\n      props = _objectWithoutProperties(_ref, [\"renderWithFragment\", \"children\"]);\n\n  return isAndroid ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar BrowserView = function BrowserView(_ref2) {\n  var renderWithFragment = _ref2.renderWithFragment,\n      children = _ref2.children,\n      props = _objectWithoutProperties(_ref2, [\"renderWithFragment\", \"children\"]);\n\n  return isBrowser ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IEView = function IEView(_ref3) {\n  var renderWithFragment = _ref3.renderWithFragment,\n      children = _ref3.children,\n      props = _objectWithoutProperties(_ref3, [\"renderWithFragment\", \"children\"]);\n\n  return isIE ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IOSView = function IOSView(_ref4) {\n  var renderWithFragment = _ref4.renderWithFragment,\n      children = _ref4.children,\n      props = _objectWithoutProperties(_ref4, [\"renderWithFragment\", \"children\"]);\n\n  return isIOS ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileView = function MobileView(_ref5) {\n  var renderWithFragment = _ref5.renderWithFragment,\n      children = _ref5.children,\n      props = _objectWithoutProperties(_ref5, [\"renderWithFragment\", \"children\"]);\n\n  return isMobile ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar TabletView = function TabletView(_ref6) {\n  var renderWithFragment = _ref6.renderWithFragment,\n      children = _ref6.children,\n      props = _objectWithoutProperties(_ref6, [\"renderWithFragment\", \"children\"]);\n\n  return isTablet ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WinPhoneView = function WinPhoneView(_ref7) {\n  var renderWithFragment = _ref7.renderWithFragment,\n      children = _ref7.children,\n      props = _objectWithoutProperties(_ref7, [\"renderWithFragment\", \"children\"]);\n\n  return isWinPhone ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileOnlyView = function MobileOnlyView(_ref8) {\n  var renderWithFragment = _ref8.renderWithFragment,\n      children = _ref8.children,\n      viewClassName = _ref8.viewClassName,\n      style = _ref8.style,\n      props = _objectWithoutProperties(_ref8, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\"]);\n\n  return isMobileOnly ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar SmartTVView = function SmartTVView(_ref9) {\n  var renderWithFragment = _ref9.renderWithFragment,\n      children = _ref9.children,\n      props = _objectWithoutProperties(_ref9, [\"renderWithFragment\", \"children\"]);\n\n  return isSmartTV ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar ConsoleView = function ConsoleView(_ref10) {\n  var renderWithFragment = _ref10.renderWithFragment,\n      children = _ref10.children,\n      props = _objectWithoutProperties(_ref10, [\"renderWithFragment\", \"children\"]);\n\n  return isConsole ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WearableView = function WearableView(_ref11) {\n  var renderWithFragment = _ref11.renderWithFragment,\n      children = _ref11.children,\n      props = _objectWithoutProperties(_ref11, [\"renderWithFragment\", \"children\"]);\n\n  return isWearable ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar CustomView = function CustomView(_ref12) {\n  var renderWithFragment = _ref12.renderWithFragment,\n      children = _ref12.children,\n      viewClassName = _ref12.viewClassName,\n      style = _ref12.style,\n      condition = _ref12.condition,\n      props = _objectWithoutProperties(_ref12, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\", \"condition\"]);\n\n  return condition ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\n\nfunction withOrientationChange(WrappedComponent) {\n  return /*#__PURE__*/function (_React$Component) {\n    _inherits(_class, _React$Component);\n\n    function _class(props) {\n      var _this;\n\n      _classCallCheck(this, _class);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(_class).call(this, props));\n      _this.isEventListenerAdded = false;\n      _this.handleOrientationChange = _this.handleOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onOrientationChange = _this.onOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onPageLoad = _this.onPageLoad.bind(_assertThisInitialized(_this));\n      _this.state = {\n        isLandscape: false,\n        isPortrait: false\n      };\n      return _this;\n    }\n\n    _createClass(_class, [{\n      key: \"handleOrientationChange\",\n      value: function handleOrientationChange() {\n        if (!this.isEventListenerAdded) {\n          this.isEventListenerAdded = true;\n        }\n\n        var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n        this.setState({\n          isPortrait: orientation === 0,\n          isLandscape: orientation === 90\n        });\n      }\n    }, {\n      key: \"onOrientationChange\",\n      value: function onOrientationChange() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"onPageLoad\",\n      value: function onPageLoad() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n          if (!this.isEventListenerAdded) {\n            this.handleOrientationChange();\n            window.addEventListener(\"load\", this.onPageLoad, false);\n          } else {\n            window.removeEventListener(\"load\", this.onPageLoad, false);\n          }\n\n          window.addEventListener(\"resize\", this.onOrientationChange, false);\n        }\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        window.removeEventListener(\"resize\", this.onOrientationChange, false);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        return React__default.createElement(WrappedComponent, _extends({}, this.props, {\n          isLandscape: this.state.isLandscape,\n          isPortrait: this.state.isPortrait\n        }));\n      }\n    }]);\n\n    return _class;\n  }(React__default.Component);\n}\n\nfunction useMobileOrientation() {\n  var _useState = React.useState(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    return {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n  }),\n      _useState2 = _slicedToArray(_useState, 2),\n      state = _useState2[0],\n      setState = _useState2[1];\n\n  var handleOrientationChange = React.useCallback(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    var next = {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n    state.orientation !== next.orientation && setState(next);\n  }, [state.orientation]);\n  React.useEffect(function () {\n    if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n      handleOrientationChange();\n      window.addEventListener(\"load\", handleOrientationChange, false);\n      window.addEventListener(\"resize\", handleOrientationChange, false);\n    }\n\n    return function () {\n      window.removeEventListener(\"resize\", handleOrientationChange, false);\n      window.removeEventListener(\"load\", handleOrientationChange, false);\n    };\n  }, [handleOrientationChange]);\n  return state;\n}\n\nfunction useDeviceData(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  return parseUserAgent(hookUserAgent);\n}\n\nfunction useDeviceSelectors(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  var deviceData = useDeviceData(hookUserAgent);\n  var selectors = buildSelectorsObject(deviceData);\n  return [selectors, deviceData];\n}\n\nexports.AndroidView = AndroidView;\nexports.BrowserTypes = BrowserTypes;\nexports.BrowserView = BrowserView;\nexports.ConsoleView = ConsoleView;\nexports.CustomView = CustomView;\nexports.IEView = IEView;\nexports.IOSView = IOSView;\nexports.MobileOnlyView = MobileOnlyView;\nexports.MobileView = MobileView;\nexports.OsTypes = OsTypes;\nexports.SmartTVView = SmartTVView;\nexports.TabletView = TabletView;\nexports.WearableView = WearableView;\nexports.WinPhoneView = WinPhoneView;\nexports.browserName = browserName;\nexports.browserVersion = browserVersion;\nexports.deviceDetect = deviceDetect;\nexports.deviceType = deviceType;\nexports.engineName = engineName;\nexports.engineVersion = engineVersion;\nexports.fullBrowserVersion = fullBrowserVersion;\nexports.getSelectorsByUserAgent = getSelectorsByUserAgent;\nexports.getUA = getUA;\nexports.isAndroid = isAndroid;\nexports.isBrowser = isBrowser;\nexports.isChrome = isChrome;\nexports.isChromium = isChromium;\nexports.isConsole = isConsole;\nexports.isDesktop = isDesktop;\nexports.isEdge = isEdge;\nexports.isEdgeChromium = isEdgeChromium;\nexports.isElectron = isElectron;\nexports.isEmbedded = isEmbedded;\nexports.isFirefox = isFirefox;\nexports.isIE = isIE;\nexports.isIOS = isIOS;\nexports.isIOS13 = isIOS13;\nexports.isIPad13 = isIPad13;\nexports.isIPhone13 = isIPhone13;\nexports.isIPod13 = isIPod13;\nexports.isLegacyEdge = isLegacyEdge;\nexports.isMIUI = isMIUI;\nexports.isMacOs = isMacOs;\nexports.isMobile = isMobile;\nexports.isMobileOnly = isMobileOnly;\nexports.isMobileSafari = isMobileSafari;\nexports.isOpera = isOpera;\nexports.isSafari = isSafari;\nexports.isSamsungBrowser = isSamsungBrowser;\nexports.isSmartTV = isSmartTV;\nexports.isTablet = isTablet;\nexports.isWearable = isWearable;\nexports.isWinPhone = isWinPhone;\nexports.isWindows = isWindows;\nexports.isYandex = isYandex;\nexports.mobileModel = mobileModel;\nexports.mobileVendor = mobileVendor;\nexports.osName = osName;\nexports.osVersion = osVersion;\nexports.parseUserAgent = parseUserAgent;\nexports.setUserAgent = setUserAgent;\nexports.useDeviceData = useDeviceData;\nexports.useDeviceSelectors = useDeviceSelectors;\nexports.useMobileOrientation = useMobileOrientation;\nexports.withOrientationChange = withOrientationChange;\n","\"use client\";\n\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nexport interface BaseTextProps {\n  /** The element name to use for the text */\n  element?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | \"div\" | \"label\";\n  /** The content to display inside the heading */\n  children?: React.ReactNode;\n  /** A unique identifier for the text, used for reference in anchor links  */\n  id?: string;\n  /** Indicates hierarchy to control text color */\n  primary?: boolean;\n  secondary?: boolean;\n  tertiary?: boolean;\n  quaternary?: boolean;\n  /** Inherits a parent element that sets the text color (link a link) */\n  inherit?: boolean;\n  /** Allow limited overrides to font weight */\n  weight?: \"font-normal\" | \"font-medium\" | \"font-semibold\" | \"font-bold\";\n  /** Allow limited overrides to font size */\n  size?: string;\n  /** Additiona classnames to override the base styles if needed */\n  className?: string;\n  /** Allow text to be selected */\n  selectable?: boolean;\n  /** Anything else */\n  [key: string]: any;\n}\n\nexport const UIText = forwardRef<HTMLElement, BaseTextProps>(function UIText(\n  {\n    id = undefined,\n    element: Element = \"p\",\n    className = \"\",\n    weight = \"font-normal\",\n    size = \"text-sm\",\n    primary = false,\n    secondary = false,\n    tertiary = false,\n    quaternary = false,\n    inherit = false,\n    selectable = false,\n    ...rest\n  },\n  ref,\n) {\n  const classes = cn(\n    weight,\n    size,\n    {\n      \"text-inherit\": inherit,\n      \"text-primary\": primary && !inherit,\n      \"text-secondary\": secondary && !inherit,\n      \"text-tertiary\": tertiary && !inherit,\n      \"text-quaternary\": quaternary && !inherit,\n      \"select-text\": selectable,\n    },\n    className,\n  );\n\n  return <Element ref={ref as any} id={id} className={classes} {...rest} />;\n});\n\nexport function LargeTitle({\n  element = \"h1\",\n  weight = \"font-bold\",\n  size = \"text-2xl md:text-4xl\",\n  ...rest\n}: BaseTextProps) {\n  return <UIText element={element} weight={weight} size={size} {...rest} />;\n}\n\nexport function Title1({\n  element = \"h2\",\n  weight = \"font-medium\",\n  size = \"text-xl md:text-2xl\",\n  ...rest\n}: BaseTextProps) {\n  return <UIText element={element} weight={weight} size={size} {...rest} />;\n}\n\nexport function Title2({\n  element = \"h2\",\n  weight = \"font-medium\",\n  size = \"text-lg md:text-xl\",\n  ...rest\n}: BaseTextProps) {\n  return <UIText element={element} weight={weight} size={size} {...rest} />;\n}\n\nexport function Title3({\n  element = \"h2\",\n  weight = \"font-medium\",\n  size = \"text-md md:text-lg\",\n  ...rest\n}: BaseTextProps) {\n  return <UIText element={element} weight={weight} size={size} {...rest} />;\n}\n\nexport function Headline({ weight = \"font-medium\", size = \"text-base\", ...rest }: BaseTextProps) {\n  return <UIText weight={weight} size={size} {...rest} />;\n}\n\nexport function Body({ secondary = true, size = \"text-base\", ...rest }: BaseTextProps) {\n  return <UIText secondary={secondary} size={size} {...rest} />;\n}\n\nexport function Caption({\n  secondary = true,\n  size = \"text-xs\",\n  weight = \"font-medium\",\n  ...rest\n}: BaseTextProps) {\n  return <UIText secondary={secondary} size={size} weight={weight} {...rest} />;\n}\n","import { useMemo } from \"react\";\nimport { isMacOs, isMobile } from \"react-device-detect\";\nimport { cn } from \"../../shared/lib/utils\";\nimport { UIText } from \"../text\";\n\nexport function getShortcutKeySymbol(key: string) {\n  switch (key) {\n    case \"mod\":\n    case \"meta\":\n      if (isMacOs) {\n        return { text: \"⌘\", emoji: true };\n      }\n      return { text: \"Ctrl\" };\n    case \"alt\":\n      if (isMacOs) {\n        return { text: \"⌥\", emoji: true };\n      }\n      return { text: \"Alt\" };\n    case \"shift\":\n      return { text: \"⇧\", emoji: true };\n    case \"comma\":\n      return { text: \",\" };\n    case \"return\":\n    case \"enter\":\n      return { text: \"Enter\" };\n    case \"backspace\":\n      return { text: \"⌫\", emoji: true };\n    default:\n      return { text: key.trim().toUpperCase() };\n  }\n}\n\nexport function KeyboardShortcut({ shortcut }: { shortcut: string[] | string }) {\n  const components = useMemo(() => {\n    let parts: string[];\n\n    if (typeof shortcut === \"string\") {\n      if (shortcut !== \"+\") {\n        parts = shortcut.split(\"+\");\n      } else {\n        parts = [\"+\"];\n      }\n    } else {\n      parts = shortcut;\n    }\n\n    return parts.map((key) => {\n      const { text, emoji } = getShortcutKeySymbol(key);\n\n      return (\n        <UIText\n          secondary\n          key={key}\n          size=\"text-xs\"\n          weight=\"font-semibold\"\n          className={cn({\n            \"font-[emoji]\": emoji,\n            \"font-mono\": !emoji,\n          })}\n        >\n          {text}\n        </UIText>\n      );\n    });\n  }, [shortcut]);\n\n  if (isMobile) return null;\n\n  return (\n    <div className=\"flex items-baseline justify-center gap-1 rounded bg-black/5 px-1.5 py-0.5 align-middle text-[10px] dark:bg-white/10 dark:shadow-[inset_0_0.5px_0_rgba(255,255,255,0.12)]\">\n      {components}\n    </div>\n  );\n}\n","import * as Tip from \"@radix-ui/react-tooltip\";\nimport { IconLoader } from \"@tabler/icons-react\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { cn } from \"../../shared/lib/utils\";\nimport { Link as LinkBase, type LinkProps } from \"../link\";\n\nconst Link = LinkBase as React.FC<any>;\nimport { KeyboardShortcut } from \"./keyboard-shortcut\";\n\nexport { KeyboardShortcut };\n\ninterface Props {\n  label?: string | React.ReactNode;\n  shortcut?: string;\n  children: React.ReactNode;\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  align?: \"start\" | \"center\" | \"end\";\n  asChild?: boolean;\n  disableHoverableContent?: boolean;\n  delayDuration?: number;\n  hideWhenDetached?: boolean;\n  hideOnKeyboardFocus?: boolean;\n  sideOffset?: number;\n  alignOffset?: number;\n}\n\nexport function Tooltip(props: Props) {\n  const {\n    label,\n    children,\n    side = \"top\",\n    align = \"center\",\n    asChild = true,\n    shortcut,\n    disableHoverableContent = false,\n    delayDuration = 400,\n    hideWhenDetached = true,\n    hideOnKeyboardFocus = true,\n    sideOffset = 5,\n    alignOffset = 5,\n  } = props;\n  const [open, setOpen] = useState(false);\n  const [animateOpen, setAnimateOpen] = useState(false);\n  const [portalContainer, setPortalContainer] = useState<Element | DocumentFragment | null>(null);\n\n  const handleTriggerRef = React.useCallback((node: HTMLButtonElement | null) => {\n    if (!node) return;\n\n    const rootNode = node.getRootNode();\n    const nextContainer =\n      rootNode.nodeType === 9 ? (rootNode as Document).body : (rootNode as DocumentFragment);\n    setPortalContainer((current) => (current === nextContainer ? current : nextContainer));\n  }, []);\n\n  useEffect(() => {\n    if (open) {\n      setAnimateOpen(false);\n      const id = requestAnimationFrame(() => setAnimateOpen(true));\n      return () => cancelAnimationFrame(id);\n    } else {\n      setAnimateOpen(false);\n    }\n  }, [open]);\n\n  return (\n    <Tip.Provider>\n      <Tip.Root\n        disableHoverableContent={disableHoverableContent}\n        delayDuration={delayDuration}\n        open={open}\n        onOpenChange={setOpen}\n      >\n        <Tip.Trigger\n          ref={handleTriggerRef}\n          asChild={asChild}\n          onFocus={(e) => {\n            if (hideOnKeyboardFocus) {\n              e.preventDefault();\n            }\n          }}\n        >\n          {children}\n        </Tip.Trigger>\n        <Tip.Portal container={portalContainer}>\n          {(label || shortcut) && (\n            <Tip.Content\n              side={side}\n              align={align}\n              style={{\n                color: \"white\",\n                backgroundColor: \"#1e1e1e\",\n                pointerEvents: \"none\",\n                display: \"flex\",\n                maxWidth: \"384px\",\n                flexDirection: \"row\",\n                gap: \"0.75rem\",\n                wordBreak: \"break-word\",\n                borderRadius: \"0.375rem\",\n                padding: \"0.25rem 0.75rem\",\n                textAlign: \"center\",\n                fontSize: \"13px\",\n                fontWeight: \"normal\",\n                boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.3)\",\n                zIndex: 2147483647,\n                opacity: animateOpen ? 1 : 0,\n                transform: animateOpen\n                  ? \"translateY(0px) scale(1)\"\n                  : side === \"top\"\n                    ? \"translateY(-4px) scale(0.96)\"\n                    : side === \"bottom\"\n                      ? \"translateY(4px) scale(0.96)\"\n                      : side === \"left\"\n                        ? \"translateX(-4px) scale(0.96)\"\n                        : \"translateX(4px) scale(0.96)\",\n                transition:\n                  \"transform 160ms cubic-bezier(0.2, 0.7, 0.4, 1), opacity 160ms ease-out\",\n                willChange: \"transform, opacity\",\n              }}\n              className={cn(\"\", {\n                \"px-2\": !shortcut,\n                \"pl-2.5 pr-1\": !!shortcut && !!label,\n                \"px-1\": !!shortcut && !label,\n              })}\n              collisionPadding={8}\n              sideOffset={sideOffset}\n              alignOffset={alignOffset}\n              hideWhenDetached={hideWhenDetached}\n            >\n              {label}\n              {shortcut && <KeyboardShortcut shortcut={shortcut} />}\n              <Tip.Arrow\n                width={10}\n                height={6}\n                style={{\n                  fill: \"#1e1e1e\",\n                  pointerEvents: \"none\",\n                }}\n              />\n            </Tip.Content>\n          )}\n        </Tip.Portal>\n      </Tip.Root>\n    </Tip.Provider>\n  );\n}\n\nexport const ANIMATIONS = {\n  whileTap: { scale: 0.9 },\n  initial: { scale: 1 },\n  animate: { scale: 1 },\n  transition: {\n    type: \"spring\",\n    stiffness: 600,\n    damping: 30,\n  },\n};\n\nexport const buttonVariants = cva(\n  [\n    \"relative font-sans font-medium shrink-0 group inline-flex items-center justify-center select-none transform-gpu initial:border-none disabled:opacity-50\",\n    \"focus:!outline-none focus:!ring-0 active:!outline-none active:!ring-0\",\n    \"after:pointer-events-none after:absolute after:-inset-[3px] after:rounded-lg after:border after:border-blue-500 after:opacity-0 after:ring-2 after:ring-blue-500/20 after:transition-opacity focus-visible:after:opacity-100 active:after:opacity-0\",\n    \"before:pointer-events-none before:bg-gradient-to-b before:transition-opacity before:from-white/[0.12] before:absolute before:inset-0 before:z-[1] before:rounded before:opacity-0\",\n  ],\n  {\n    variants: {\n      variant: {\n        base: [\n          \"bg-black/[0.06] hover:bg-black/[0.08] dark:bg-white/[0.08] dark:hover:bg-white/10\",\n          \"text-gray-900 dark:text-gray-50\",\n          \"shadow-button-base\",\n          \"hover:before:opacity-100 dark:hover:before:opacity-50\",\n        ],\n        primary: [\n          \"bg-gray-800 dark:bg-gray-100\",\n          \"text-gray-50 dark:text-gray-900\",\n          \"dark:shadow-button-primary\",\n          \"hover:before:opacity-50\",\n        ],\n        outline: [\n          \"border border-neutral-200 dark:border-neutral-800 hover:bg-black/[0.06] dark:hover:bg-white/[0.08] shadow-sm\",\n        ],\n        flat: [\n          \"bg-black/[0.06] hover:bg-black/[0.08] dark:bg-white/[0.08] dark:hover:bg-white/10\",\n          \"text-neutral-900 dark:text-neutral-200\",\n        ],\n        plain: [\n          \"hover:bg-black/[0.06] dark:hover:bg-white/[0.08]\",\n          \"data-[state=open]:bg-gray-150 dark:data-[state=open]:bg-gray-750\",\n          \"disabled:hover:bg-transparent dark:disabled:hover:bg-transparent\",\n        ],\n        destructive: [\"bg-red-500\", \"text-gray-50\", \"hover:before:opacity-100\"],\n        important: [\n          \"bg-blue-500 dark:bg-blue-600\",\n          \"text-white dark:text-gray-50\",\n          \"dark:shadow-[0px_0px_4px_rgba(30,_58,_138,_0.6),_0px_0px_0px_0.5px_rgb(0_0_0_/_0.94),_inset_0px_0.5px_0px_rgba(255,_255,_255,_0.12),_inset_0px_0px_1px_0px_rgba(255,_255,_255,_0.4),_inset_0px_-4px_8px_-4px_rgba(30,_58,_138,_0.4)]\",\n          \"hover:before:opacity-100\",\n        ],\n        brand: [\n          \"bg-gradient-to-tl to-brand-primary from-brand-secondary saturate-[105%]\",\n          \"text-white\",\n          \"hover:before:opacity-100\",\n          \"shadow-[inset_0px_0.5px_0px_rgb(255_255_255_/_0.32)]\",\n        ],\n        onboarding: [\n          \"bg-green-600\",\n          \"text-gray-50\",\n          \"shadow-[0px_0px_4px_rgba(20,_83,_45,_0.1),_0px_0px_0px_0.5px_rgba(20,_83,_45,_0.6),_inset_0px_0.5px_0px_rgba(255,_255,_255,_0.08),_inset_0px_0px_1px_1px_rgba(255,_255,_255,_0.12),_inset_0px_-1px_1px_rgba(20,_83,_45,_0.24),_inset_0px_-4px_8px_-4px_rgba(20,_83,_45,_0.08)]\",\n          \"dark:shadow-[0px_0px_4px_rgba(20,_83,_45,_0.4),_0px_0px_0px_0.5px_rgba(20,_83,_45,_0.94),_inset_0px_0.5px_0px_rgba(255,_255,_255,_0.24),_inset_0px_0px_1px_0px_rgba(255,_255,_255,_0.4),_inset_0px_-4px_8px_-4px_rgba(20,_83,_45,_0.4)]\",\n          \"hover:before:opacity-100\",\n        ],\n        text: [\"!h-auto !p-0 text-blue-600 dark:text-blue-500\"],\n        link: [\"!h-auto p-0 text-blue-600 dark:text-blue-500\"],\n        none: \"\",\n      },\n      size: {\n        // 13.01px font size so that chrome doesn't render it 1px vertically off center\n        sm: [\"h-6.5 text-[13.01px] rounded\"],\n        base: [\"h-7.5 text-[14.01px] rounded-md\"],\n        large: [\"px-10 h-10 py-3 text-[15.01px] rounded-lg\"],\n      },\n      fullWidth: {\n        true: \"w-full flex-1\",\n      },\n      loading: {\n        true: \"opacity-50 cursor-wait\",\n      },\n      rightSlot: {\n        true: \"flex items-center justify-center\",\n      },\n      round: {\n        true: \"rounded-full after:rounded-full before:rounded-full\",\n      },\n    },\n    defaultVariants: {\n      variant: \"base\",\n    },\n  },\n);\n\nexport interface ButtonProps {\n  id?: string;\n  align?: \"center\" | \"left\";\n  children?: React.ReactNode;\n  // @ts-ignore\n  variant?: NonNullable<VariantProps<typeof buttonVariants>[\"variant\"]>;\n  accessibilityLabel?: string;\n  loading?: boolean;\n  disabled?: boolean;\n  leftSlot?: React.ReactNode;\n  rightSlot?: React.ReactNode;\n  onFocus?: (event: React.FocusEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onBlur?: (event: React.FocusEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onMouseEnter?: (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onMouseLeave?: (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onMouseDown?: (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onKeyDownCapture?: (event: React.KeyboardEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  href?: LinkProps[\"href\"];\n  className?: string;\n  fullWidth?: boolean;\n  iconOnly?: React.ReactNode;\n  type?: \"button\" | \"submit\" | \"reset\";\n  onClick?: (event: any) => void;\n  onPointerDown?: (event: React.PointerEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  onPointerUp?: (event: React.PointerEvent<HTMLButtonElement & HTMLAnchorElement>) => void;\n  tooltip?: string;\n  tooltipShortcut?: string;\n  autoFocus?: boolean;\n  externalLink?: boolean;\n  allowOpener?: boolean;\n  download?: string;\n  role?: string;\n  round?: boolean;\n  size?: NonNullable<VariantProps<typeof buttonVariants>[\"size\"]> | \"base\";\n  \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined;\n  contentEditable?: boolean | \"true\" | \"false\" | \"inherit\" | \"plaintext-only\" | undefined;\n  title?: string;\n  isSelect?: boolean;\n}\n\nexport const Button = forwardRef<\n  HTMLButtonElement & HTMLAnchorElement,\n  ButtonProps & React.ComponentPropsWithoutRef<\"button\">\n>(\n  (\n    {\n      id,\n      align = \"center\",\n      accessibilityLabel,\n      loading,\n      children,\n      disabled,\n      href,\n      iconOnly,\n      variant,\n      className,\n      fullWidth,\n      onFocus,\n      leftSlot,\n      rightSlot,\n      onBlur,\n      onClick,\n      onKeyDownCapture,\n      tooltip,\n      tooltipShortcut,\n      autoFocus,\n      externalLink,\n      allowOpener,\n      type = \"button\",\n      download,\n      role,\n      round,\n      size = \"base\",\n      \"aria-pressed\": ariaPressed,\n      title,\n      isSelect,\n      ...props\n    },\n    ref,\n  ) => {\n    if (iconOnly && !accessibilityLabel) {\n      throw new Error(\"You must provide an accessibilityLabel to a button with iconOnly\");\n    }\n\n    if (href) {\n      return (\n        <Tooltip disableHoverableContent label={tooltip} shortcut={tooltipShortcut}>\n          <Link\n            id={id}\n            href={href}\n            className={cn(\n              \"relative outline-none transition\",\n              buttonVariants({ variant, fullWidth, loading, size, round }),\n              { \"!pl-2\": leftSlot && size === \"sm\" },\n              { \"!pl-3\": leftSlot && size === \"base\" },\n              { \"!pl-4\": leftSlot && size === \"large\" },\n              { \"!pr-1\": rightSlot && size === \"sm\" },\n              { \"!pr-2\": rightSlot && size === \"base\" },\n              { \"!pr-4\": rightSlot && size === \"large\" },\n              { \"w-6.5 p-0\": iconOnly && size === \"sm\" },\n              { \"w-7.5 p-0\": iconOnly && size === \"base\" },\n              { \"w-10 p-0\": iconOnly && size === \"large\" },\n              { \"px-2\": !iconOnly && size === \"sm\" },\n              { \"px-2.5\": !iconOnly && size === \"base\" },\n              { \"px-4.5\": !iconOnly && size === \"large\" },\n              { \"pointer-events-none opacity-50\": disabled || loading },\n              className,\n            )}\n            ref={ref}\n            onFocus={onFocus}\n            onBlur={onBlur}\n            title={tooltip ? undefined : (title ?? accessibilityLabel)}\n            aria-label={accessibilityLabel}\n            onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n              if (onClick) onClick(e);\n            }}\n            onKeyDownCapture={onKeyDownCapture}\n            target={externalLink ? \"_blank\" : undefined}\n            rel={externalLink ? (allowOpener ? \"opener\" : \"noopener noreferrer\") : undefined}\n            role={role}\n            draggable={false}\n            {...props}\n          >\n            {iconOnly && iconOnly}\n            <span\n              className={cn(\"relative z-[2] flex items-center\", {\n                \"gap-2\": size === \"large\",\n                \"gap-1.5\": size === \"base\",\n                \"gap-1\": size === \"sm\",\n              })}\n            >\n              {leftSlot && <span className=\"inline-flex flex-none justify-center\">{leftSlot}</span>}\n              <span>{children}</span>\n              {rightSlot && (\n                <span className=\"inline-flex flex-none justify-center\">{rightSlot}</span>\n              )}\n            </span>\n          </Link>\n        </Tooltip>\n      );\n    }\n\n    return (\n      <Tooltip disableHoverableContent label={tooltip} shortcut={tooltipShortcut}>\n        {/* @ts-ignore */}\n        <button\n          id={id}\n          className={cn(\n            \"outline-none\",\n            buttonVariants({ variant, fullWidth, loading, size, round }),\n            { \"!pl-2\": leftSlot && size === \"sm\" },\n            { \"!pl-3\": leftSlot && size === \"base\" },\n            { \"!pl-4\": leftSlot && size === \"large\" },\n            { \"!pr-1\": rightSlot && size === \"sm\" },\n            { \"!pr-2\": rightSlot && size === \"base\" },\n            { \"!pr-4\": rightSlot && size === \"large\" },\n            { \"w-6.5 p-0\": iconOnly && size === \"sm\" },\n            { \"w-7.5 p-0\": iconOnly && size === \"base\" },\n            { \"w-10 p-0\": iconOnly && size === \"large\" },\n            { \"px-2\": !iconOnly && size === \"sm\" },\n            { \"px-2.5\": !iconOnly && size === \"base\" },\n            { \"px-4.5\": !iconOnly && size === \"large\" },\n            className,\n          )}\n          ref={ref}\n          type={type}\n          onFocus={onFocus}\n          onBlur={onBlur}\n          title={tooltip ? undefined : (title ?? accessibilityLabel)}\n          aria-label={accessibilityLabel}\n          onClick={onClick}\n          disabled={disabled}\n          aria-pressed={ariaPressed}\n          data-autofocus={autoFocus}\n          onKeyDownCapture={onKeyDownCapture}\n          {...props}\n        >\n          {iconOnly && iconOnly}\n          <span\n            className={cn(\"relative z-[2] flex items-center overflow-hidden\", {\n              grow: isSelect || align === \"left\",\n              \"gap-2\": size === \"large\",\n              \"gap-1.5\": size === \"base\",\n              \"gap-1\": size === \"sm\",\n            })}\n          >\n            {leftSlot && <span className=\"inline-flex flex-none justify-center\">{leftSlot}</span>}\n            {loading && (\n              <span className=\"inline-flex flex-none justify-center\">\n                <IconLoader className=\"size-4 shrink-0 animate-spin\" aria-hidden=\"true\" />\n              </span>\n            )}\n            <span\n              className={cn(\"truncate leading-normal\", {\n                \"flex-1 grow text-left\": isSelect || align === \"left\",\n              })}\n            >\n              {children}\n            </span>\n            {rightSlot && <span className=\"inline-flex flex-none justify-center\">{rightSlot}</span>}\n          </span>\n        </button>\n      </Tooltip>\n    );\n  },\n);\n\nButton.displayName = \"Button\";\n","// ABOUTME: Badge component for displaying status indicators and labels\n// ABOUTME: Converted from styled-jsx to Tailwind CSS with support for different variants and sizes\n\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst badgeVariants = cva(\n  \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n  {\n    variants: {\n      variant: {\n        default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n        secondary:\n          \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        destructive:\n          \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n        outline: \"text-foreground\",\n        success: \"border-transparent bg-green-500 text-white hover:bg-green-600\",\n        warning: \"border-transparent bg-yellow-500 text-white hover:bg-yellow-600\",\n      },\n      size: {\n        mini: \"text-xs px-2 py-0.5\",\n        small: \"text-xs px-2.5 py-0.5\",\n        medium: \"text-sm px-2.5 py-0.5\",\n        large: \"text-base px-3 py-1\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"medium\",\n    },\n  },\n);\n\nexport interface BadgeProps\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, size, ...props }: BadgeProps) {\n  return <div className={cn(badgeVariants({ variant, size }), className)} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","// ABOUTME: Card components for displaying content in a contained, elevated surface\n// ABOUTME: Converted from styled-jsx to Tailwind CSS with compound component pattern\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst cardVariants = cva(\n  \"rounded-lg border bg-card text-card-foreground shadow-sm transition-all\",\n  {\n    variants: {\n      variant: {\n        default: \"border-border\",\n        outline: \"border-2\",\n        ghost: \"border-transparent shadow-none bg-transparent\",\n      },\n      hoverable: {\n        true: \"hover:shadow-md cursor-pointer\",\n        false: \"\",\n      },\n      shadow: {\n        none: \"shadow-none\",\n        sm: \"shadow-sm\",\n        md: \"shadow-md\",\n        lg: \"shadow-lg\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      hoverable: false,\n      shadow: \"sm\",\n    },\n  },\n);\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof cardVariants>\n>(({ className, variant, hoverable, shadow, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(cardVariants({ variant, hoverable, shadow }), className)}\n    {...props}\n  />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-5\", className)} {...props} />\n  ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n  ({ className, ...props }, ref) => (\n    <h3\n      ref={ref}\n      className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)}\n      {...props}\n    />\n  ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <p ref={ref} className={cn(\"text-muted-foreground text-sm\", className)} {...props} />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"p-5 pt-0\", className)} {...props} />\n  ),\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"flex items-center p-5 pt-0\", className)} {...props} />\n  ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","// ABOUTME: Spinner component for loading states and async operations\n// ABOUTME: Converted from styled-jsx to Tailwind CSS with CSS animation classes\n\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst spinnerVariants = cva(\n  \"inline-block animate-spin rounded-full border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\",\n  {\n    variants: {\n      size: {\n        mini: \"h-3 w-3 border-2\",\n        small: \"h-4 w-4 border-2\",\n        medium: \"h-5 w-5 border-2\",\n        large: \"h-8 w-8 border-4\",\n      },\n      variant: {\n        default: \"text-current\",\n        primary: \"text-primary\",\n        secondary: \"text-secondary\",\n        muted: \"text-muted-foreground\",\n      },\n    },\n    defaultVariants: {\n      size: \"medium\",\n      variant: \"default\",\n    },\n  },\n);\n\nexport interface SpinnerProps\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, variant, ...props }: SpinnerProps) {\n  return (\n    <div\n      className={cn(spinnerVariants({ size, variant }), className)}\n      role=\"status\"\n      aria-label=\"Loading\"\n      {...props}\n    >\n      <span className=\"sr-only\">Loading...</span>\n    </div>\n  );\n}\n\nexport { Spinner, spinnerVariants };\n","// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n  return Math.min(max, Math.max(min, value));\n}\nexport {\n  clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n  );\n  const CollectionProvider = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef(null);\n    const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n    return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...itemData });\n        return () => void context.itemMap.delete(ref);\n      });\n      return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useCollection(scope) {\n    const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n    const getItems = React.useCallback(() => {\n      const collectionNode = context.collectionRef.current;\n      if (!collectionNode) return [];\n      const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n      const items = Array.from(context.itemMap.values());\n      const orderedItems = items.sort(\n        (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n      );\n      return orderedItems;\n    }, [context.collectionRef, context.itemMap]);\n    return getItems;\n  }\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope\n  ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n  #keys;\n  constructor(entries) {\n    super(entries);\n    this.#keys = [...super.keys()];\n    __instanciated.set(this, true);\n  }\n  set(key, value) {\n    if (__instanciated.get(this)) {\n      if (this.has(key)) {\n        this.#keys[this.#keys.indexOf(key)] = key;\n      } else {\n        this.#keys.push(key);\n      }\n    }\n    super.set(key, value);\n    return this;\n  }\n  insert(index, key, value) {\n    const has = this.has(key);\n    const length = this.#keys.length;\n    const relativeIndex = toSafeInteger(index);\n    let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n    const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n    if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n      this.set(key, value);\n      return this;\n    }\n    const size = this.size + (has ? 0 : 1);\n    if (relativeIndex < 0) {\n      actualIndex++;\n    }\n    const keys = [...this.#keys];\n    let nextValue;\n    let shouldSkip = false;\n    for (let i = actualIndex; i < size; i++) {\n      if (actualIndex === i) {\n        let nextKey = keys[i];\n        if (keys[i] === key) {\n          nextKey = keys[i + 1];\n        }\n        if (has) {\n          this.delete(key);\n        }\n        nextValue = this.get(nextKey);\n        this.set(key, value);\n      } else {\n        if (!shouldSkip && keys[i - 1] === key) {\n          shouldSkip = true;\n        }\n        const currentKey = keys[shouldSkip ? i : i - 1];\n        const currentValue = nextValue;\n        nextValue = this.get(currentKey);\n        this.delete(currentKey);\n        this.set(currentKey, currentValue);\n      }\n    }\n    return this;\n  }\n  with(index, key, value) {\n    const copy = new _OrderedDict(this);\n    copy.insert(index, key, value);\n    return copy;\n  }\n  before(key) {\n    const index = this.#keys.indexOf(key) - 1;\n    if (index < 0) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position before the given key.\n   */\n  setBefore(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index, newKey, value);\n  }\n  after(key) {\n    let index = this.#keys.indexOf(key);\n    index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n    if (index === -1) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position after the given key.\n   */\n  setAfter(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index + 1, newKey, value);\n  }\n  first() {\n    return this.entryAt(0);\n  }\n  last() {\n    return this.entryAt(-1);\n  }\n  clear() {\n    this.#keys = [];\n    return super.clear();\n  }\n  delete(key) {\n    const deleted = super.delete(key);\n    if (deleted) {\n      this.#keys.splice(this.#keys.indexOf(key), 1);\n    }\n    return deleted;\n  }\n  deleteAt(index) {\n    const key = this.keyAt(index);\n    if (key !== void 0) {\n      return this.delete(key);\n    }\n    return false;\n  }\n  at(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return this.get(key);\n    }\n  }\n  entryAt(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return [key, this.get(key)];\n    }\n  }\n  indexOf(key) {\n    return this.#keys.indexOf(key);\n  }\n  keyAt(index) {\n    return at(this.#keys, index);\n  }\n  from(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.at(dest);\n  }\n  keyFrom(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.keyAt(dest);\n  }\n  find(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return entry;\n      }\n      index++;\n    }\n    return void 0;\n  }\n  findIndex(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return index;\n      }\n      index++;\n    }\n    return -1;\n  }\n  filter(predicate, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        entries.push(entry);\n      }\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  map(callbackfn, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  reduce(...args) {\n    const [callbackfn, initialValue] = args;\n    let index = 0;\n    let accumulator = initialValue ?? this.at(0);\n    for (const entry of this) {\n      if (index === 0 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n      index++;\n    }\n    return accumulator;\n  }\n  reduceRight(...args) {\n    const [callbackfn, initialValue] = args;\n    let accumulator = initialValue ?? this.at(-1);\n    for (let index = this.size - 1; index >= 0; index--) {\n      const entry = this.at(index);\n      if (index === this.size - 1 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n    }\n    return accumulator;\n  }\n  toSorted(compareFn) {\n    const entries = [...this.entries()].sort(compareFn);\n    return new _OrderedDict(entries);\n  }\n  toReversed() {\n    const reversed = new _OrderedDict();\n    for (let index = this.size - 1; index >= 0; index--) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      reversed.set(key, element);\n    }\n    return reversed;\n  }\n  toSpliced(...args) {\n    const entries = [...this.entries()];\n    entries.splice(...args);\n    return new _OrderedDict(entries);\n  }\n  slice(start, end) {\n    const result = new _OrderedDict();\n    let stop = this.size - 1;\n    if (start === void 0) {\n      return result;\n    }\n    if (start < 0) {\n      start = start + this.size;\n    }\n    if (end !== void 0 && end > 0) {\n      stop = end - 1;\n    }\n    for (let index = start; index <= stop; index++) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      result.set(key, element);\n    }\n    return result;\n  }\n  every(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return false;\n      }\n      index++;\n    }\n    return true;\n  }\n  some(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return true;\n      }\n      index++;\n    }\n    return false;\n  }\n};\nfunction at(array, index) {\n  if (\"at\" in Array.prototype) {\n    return Array.prototype.at.call(array, index);\n  }\n  const actualIndex = toSafeIndex(array, index);\n  return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n  const length = array.length;\n  const relativeIndex = toSafeInteger(index);\n  const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n  return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n  return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n  const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    {\n      collectionElement: null,\n      collectionRef: { current: null },\n      collectionRefObject: { current: null },\n      itemMap: new OrderedDict(),\n      setItemMap: () => void 0\n    }\n  );\n  const CollectionProvider = ({ state, ...props }) => {\n    return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const CollectionInit = (props) => {\n    const state = useInitCollection();\n    return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n  };\n  CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n  const CollectionProviderImpl = (props) => {\n    const { scope, children, state } = props;\n    const ref = React2.useRef(null);\n    const [collectionElement, setCollectionElement] = React2.useState(\n      null\n    );\n    const composeRefs = useComposedRefs2(ref, setCollectionElement);\n    const [itemMap, setItemMap] = state;\n    React2.useEffect(() => {\n      if (!collectionElement) return;\n      const observer = getChildListObserver(() => {\n      });\n      observer.observe(collectionElement, {\n        childList: true,\n        subtree: true\n      });\n      return () => {\n        observer.disconnect();\n      };\n    }, [collectionElement]);\n    return /* @__PURE__ */ jsx2(\n      CollectionContextProvider,\n      {\n        scope,\n        itemMap,\n        setItemMap,\n        collectionRef: composeRefs,\n        collectionRefObject: ref,\n        collectionElement,\n        children\n      }\n    );\n  };\n  CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React2.useRef(null);\n      const [element, setElement] = React2.useState(null);\n      const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      const { setItemMap } = context;\n      const itemDataRef = React2.useRef(itemData);\n      if (!shallowEqual(itemDataRef.current, itemData)) {\n        itemDataRef.current = itemData;\n      }\n      const memoizedItemData = itemDataRef.current;\n      React2.useEffect(() => {\n        const itemData2 = memoizedItemData;\n        setItemMap((map) => {\n          if (!element) {\n            return map;\n          }\n          if (!map.has(element)) {\n            map.set(element, { ...itemData2, element });\n            return map.toSorted(sortByDocumentPosition);\n          }\n          return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n        });\n        return () => {\n          setItemMap((map) => {\n            if (!element || !map.has(element)) {\n              return map;\n            }\n            map.delete(element);\n            return new OrderedDict(map);\n          });\n        };\n      }, [element, memoizedItemData, setItemMap]);\n      return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useInitCollection() {\n    return React2.useState(new OrderedDict());\n  }\n  function useCollection(scope) {\n    const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n    return itemMap;\n  }\n  const functions = {\n    createCollectionScope,\n    useCollection,\n    useInitCollection\n  };\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    functions\n  ];\n}\nfunction shallowEqual(a, b) {\n  if (a === b) return true;\n  if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n  if (a == null || b == null) return false;\n  const keysA = Object.keys(a);\n  const keysB = Object.keys(b);\n  if (keysA.length !== keysB.length) return false;\n  for (const key of keysA) {\n    if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n    if (a[key] !== b[key]) return false;\n  }\n  return true;\n}\nfunction isElementPreceding(a, b) {\n  return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n  return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n  const observer = new MutationObserver((mutationsList) => {\n    for (const mutation of mutationsList) {\n      if (mutation.type === \"childList\") {\n        callback();\n        return;\n      }\n    }\n  });\n  return observer;\n}\nexport {\n  createCollection,\n  createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n  const { dir, children } = props;\n  return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n  DirectionProvider,\n  Provider,\n  useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n  useFocusGuards();\n  return props.children;\n}\nfunction useFocusGuards() {\n  React.useEffect(() => {\n    const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n    document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n    document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n    count++;\n    return () => {\n      if (count === 1) {\n        document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n      }\n      count--;\n    };\n  }, []);\n}\nfunction createFocusGuard() {\n  const element = document.createElement(\"span\");\n  element.setAttribute(\"data-radix-focus-guard\", \"\");\n  element.tabIndex = 0;\n  element.style.outline = \"none\";\n  element.style.opacity = \"0\";\n  element.style.position = \"fixed\";\n  element.style.pointerEvents = \"none\";\n  return element;\n}\nexport {\n  FocusGuards,\n  FocusGuards as Root,\n  useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n  const {\n    loop = false,\n    trapped = false,\n    onMountAutoFocus: onMountAutoFocusProp,\n    onUnmountAutoFocus: onUnmountAutoFocusProp,\n    ...scopeProps\n  } = props;\n  const [container, setContainer] = React.useState(null);\n  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n  const lastFocusedElementRef = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n  const focusScope = React.useRef({\n    paused: false,\n    pause() {\n      this.paused = true;\n    },\n    resume() {\n      this.paused = false;\n    }\n  }).current;\n  React.useEffect(() => {\n    if (trapped) {\n      let handleFocusIn2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const target = event.target;\n        if (container.contains(target)) {\n          lastFocusedElementRef.current = target;\n        } else {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleFocusOut2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const relatedTarget = event.relatedTarget;\n        if (relatedTarget === null) return;\n        if (!container.contains(relatedTarget)) {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleMutations2 = function(mutations) {\n        const focusedElement = document.activeElement;\n        if (focusedElement !== document.body) return;\n        for (const mutation of mutations) {\n          if (mutation.removedNodes.length > 0) focus(container);\n        }\n      };\n      var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n      document.addEventListener(\"focusin\", handleFocusIn2);\n      document.addEventListener(\"focusout\", handleFocusOut2);\n      const mutationObserver = new MutationObserver(handleMutations2);\n      if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n      return () => {\n        document.removeEventListener(\"focusin\", handleFocusIn2);\n        document.removeEventListener(\"focusout\", handleFocusOut2);\n        mutationObserver.disconnect();\n      };\n    }\n  }, [trapped, container, focusScope.paused]);\n  React.useEffect(() => {\n    if (container) {\n      focusScopesStack.add(focusScope);\n      const previouslyFocusedElement = document.activeElement;\n      const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n      if (!hasFocusedCandidate) {\n        const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n        container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        container.dispatchEvent(mountEvent);\n        if (!mountEvent.defaultPrevented) {\n          focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n          if (document.activeElement === previouslyFocusedElement) {\n            focus(container);\n          }\n        }\n      }\n      return () => {\n        container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        setTimeout(() => {\n          const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n          container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          container.dispatchEvent(unmountEvent);\n          if (!unmountEvent.defaultPrevented) {\n            focus(previouslyFocusedElement ?? document.body, { select: true });\n          }\n          container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          focusScopesStack.remove(focusScope);\n        }, 0);\n      };\n    }\n  }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n  const handleKeyDown = React.useCallback(\n    (event) => {\n      if (!loop && !trapped) return;\n      if (focusScope.paused) return;\n      const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n      const focusedElement = document.activeElement;\n      if (isTabKey && focusedElement) {\n        const container2 = event.currentTarget;\n        const [first, last] = getTabbableEdges(container2);\n        const hasTabbableElementsInside = first && last;\n        if (!hasTabbableElementsInside) {\n          if (focusedElement === container2) event.preventDefault();\n        } else {\n          if (!event.shiftKey && focusedElement === last) {\n            event.preventDefault();\n            if (loop) focus(first, { select: true });\n          } else if (event.shiftKey && focusedElement === first) {\n            event.preventDefault();\n            if (loop) focus(last, { select: true });\n          }\n        }\n      }\n    },\n    [loop, trapped, focusScope.paused]\n  );\n  return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n  const previouslyFocusedElement = document.activeElement;\n  for (const candidate of candidates) {\n    focus(candidate, { select });\n    if (document.activeElement !== previouslyFocusedElement) return;\n  }\n}\nfunction getTabbableEdges(container) {\n  const candidates = getTabbableCandidates(container);\n  const first = findVisible(candidates, container);\n  const last = findVisible(candidates.reverse(), container);\n  return [first, last];\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction findVisible(elements, container) {\n  for (const element of elements) {\n    if (!isHidden(element, { upTo: container })) return element;\n  }\n}\nfunction isHidden(node, { upTo }) {\n  if (getComputedStyle(node).visibility === \"hidden\") return true;\n  while (node) {\n    if (upTo !== void 0 && node === upTo) return false;\n    if (getComputedStyle(node).display === \"none\") return true;\n    node = node.parentElement;\n  }\n  return false;\n}\nfunction isSelectableInput(element) {\n  return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n  if (element && element.focus) {\n    const previouslyFocusedElement = document.activeElement;\n    element.focus({ preventScroll: true });\n    if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n      element.select();\n  }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n  let stack = [];\n  return {\n    add(focusScope) {\n      const activeFocusScope = stack[0];\n      if (focusScope !== activeFocusScope) {\n        activeFocusScope?.pause();\n      }\n      stack = arrayRemove(stack, focusScope);\n      stack.unshift(focusScope);\n    },\n    remove(focusScope) {\n      stack = arrayRemove(stack, focusScope);\n      stack[0]?.resume();\n    }\n  };\n}\nfunction arrayRemove(array, item) {\n  const updatedArray = [...array];\n  const index = updatedArray.indexOf(item);\n  if (index !== -1) {\n    updatedArray.splice(index, 1);\n  }\n  return updatedArray;\n}\nfunction removeLinks(items) {\n  return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n  FocusScope,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n  const ref = React.useRef({ value, previous: value });\n  return React.useMemo(() => {\n    if (ref.current.value !== value) {\n      ref.current.previous = ref.current.value;\n      ref.current.value = value;\n    }\n    return ref.current.previous;\n  }, [value]);\n}\nexport {\n  usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n    // and script elements, as they have no impact on accessibility.\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\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","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","export { assignRef } from './assignRef';\n// callback ref\nexport { useCallbackRef } from './useRef';\nexport { createCallbackRef } from './createRef';\n// merge ref\nexport { mergeRefs } from './mergeRef';\nexport { useMergeRefs } from './useMergeRef';\n// transform ref\nexport { useTransformRef } from './useTransformRef';\nexport { transformRef } from './transformRef';\n// refToCallback\nexport { refToCallback, useRefToCallback } from './refToCallback';\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n    var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n    if (!sideCar) {\n        throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n    }\n    var Target = sideCar.read();\n    if (!Target) {\n        throw new Error('Sidecar medium not found');\n    }\n    return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n    medium.useMedium(exported);\n    return SideCar;\n}\n","export { sidecar } from './hoc';\nexport { useSidecar } from './hook';\nexport { setConfig } from './config';\nexport { createMedium, createSidecarMedium } from './medium';\nexport { renderCar } from './renderProp';\nexport { exportSidecar } from './exports';\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n    return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n    var ref = React.useRef(null);\n    var _a = React.useState({\n        onScrollCapture: nothing,\n        onWheelCapture: nothing,\n        onTouchMoveCapture: nothing,\n    }), callbacks = _a[0], setCallbacks = _a[1];\n    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n    var SideCar = sideCar;\n    var containerRef = useMergeRefs([ref, parentRef]);\n    var containerProps = __assign(__assign({}, rest), callbacks);\n    return (React.createElement(React.Fragment, null,\n        enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n        forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n    enabled: true,\n    removeScrollBar: true,\n    inert: false,\n};\nRemoveScroll.classNames = {\n    fullWidth: fullWidthClassName,\n    zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n    currentNonce = nonce;\n};\nexport var getNonce = function () {\n    if (currentNonce) {\n        return currentNonce;\n    }\n    if (typeof __webpack_nonce__ !== 'undefined') {\n        return __webpack_nonce__;\n    }\n    return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n    if (!document)\n        return null;\n    var tag = document.createElement('style');\n    tag.type = 'text/css';\n    var nonce = getNonce();\n    if (nonce) {\n        tag.setAttribute('nonce', nonce);\n    }\n    return tag;\n}\nfunction injectStyles(tag, css) {\n    // @ts-ignore\n    if (tag.styleSheet) {\n        // @ts-ignore\n        tag.styleSheet.cssText = css;\n    }\n    else {\n        tag.appendChild(document.createTextNode(css));\n    }\n}\nfunction insertStyleTag(tag) {\n    var head = document.head || document.getElementsByTagName('head')[0];\n    head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n    var counter = 0;\n    var stylesheet = null;\n    return {\n        add: function (style) {\n            if (counter == 0) {\n                if ((stylesheet = makeStyleTag())) {\n                    injectStyles(stylesheet, style);\n                    insertStyleTag(stylesheet);\n                }\n            }\n            counter++;\n        },\n        remove: function () {\n            counter--;\n            if (!counter && stylesheet) {\n                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n                stylesheet = null;\n            }\n        },\n    };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n    var sheet = stylesheetSingleton();\n    return function (styles, isDynamic) {\n        React.useEffect(function () {\n            sheet.add(styles);\n            return function () {\n                sheet.remove();\n            };\n        }, [styles && isDynamic]);\n    };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n    var useStyle = styleHookSingleton();\n    var Sheet = function (_a) {\n        var styles = _a.styles, dynamic = _a.dynamic;\n        useStyle(styles, dynamic);\n        return null;\n    };\n    return Sheet;\n};\n","export { styleSingleton } from './component';\nexport { stylesheetSingleton } from './singleton';\nexport { styleHookSingleton } from './hook';\n","export var zeroGap = {\n    left: 0,\n    top: 0,\n    right: 0,\n    gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n    var cs = window.getComputedStyle(document.body);\n    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n    return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    if (typeof window === 'undefined') {\n        return zeroGap;\n    }\n    var offsets = getOffset(gapMode);\n    var documentWidth = document.documentElement.clientWidth;\n    var windowWidth = window.innerWidth;\n    return {\n        left: offsets[0],\n        top: offsets[1],\n        right: offsets[2],\n        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n    };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    return \"\\n  .\".concat(noScrollbarsClassName, \" {\\n   overflow: hidden \").concat(important, \";\\n   padding-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  body[\").concat(lockAttribute, \"] {\\n    overflow: hidden \").concat(important, \";\\n    overscroll-behavior: contain;\\n    \").concat([\n        allowRelative && \"position: relative \".concat(important, \";\"),\n        gapMode === 'margin' &&\n            \"\\n    padding-left: \".concat(left, \"px;\\n    padding-top: \").concat(top, \"px;\\n    padding-right: \").concat(right, \"px;\\n    margin-left:0;\\n    margin-top:0;\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n    \"),\n        gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n    ]\n        .filter(Boolean)\n        .join(''), \"\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" {\\n    right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" {\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n    right: 0 \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n    margin-right: 0 \").concat(important, \";\\n  }\\n  \\n  body[\").concat(lockAttribute, \"] {\\n    \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n  }\\n\");\n};\nvar getCurrentUseCounter = function () {\n    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n    return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n    React.useEffect(function () {\n        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n        return function () {\n            var newCounter = getCurrentUseCounter() - 1;\n            if (newCounter <= 0) {\n                document.body.removeAttribute(lockAttribute);\n            }\n            else {\n                document.body.setAttribute(lockAttribute, newCounter.toString());\n            }\n        };\n    }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n    useLockAttribute();\n    /*\n     gap will be measured on every component mount\n     however it will be used only by the \"first\" invocation\n     due to singleton nature of <Style\n     */\n    var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n    return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","import { RemoveScrollBar } from './component';\nimport { zeroRightClassName, fullWidthClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nexport { RemoveScrollBar, zeroRightClassName, fullWidthClassName, noScrollbarsClassName, removedBarSizeVariable, getGapWidth, };\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passiveSupported = true;\n                return true;\n            },\n        });\n        // @ts-ignore\n        window.addEventListener('test', options, options);\n        // @ts-ignore\n        window.removeEventListener('test', options, options);\n    }\n    catch (err) {\n        passiveSupported = false;\n    }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n    // textarea will always _contain_ scroll inside self. It only can be hidden\n    return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n    if (!(node instanceof Element)) {\n        return false;\n    }\n    var styles = window.getComputedStyle(node);\n    return (\n    // not-not-scrollable\n    styles[overflow] !== 'hidden' &&\n        // contains scroll inside self\n        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n    var ownerDocument = node.ownerDocument;\n    var current = node;\n    do {\n        // Skip over shadow root\n        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n            current = current.host;\n        }\n        var isScrollable = elementCouldBeScrolled(axis, current);\n        if (isScrollable) {\n            var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n            if (scrollHeight > clientHeight) {\n                return true;\n            }\n        }\n        current = current.parentNode;\n    } while (current && current !== ownerDocument.body);\n    return false;\n};\nvar getVScrollVariables = function (_a) {\n    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n    return [\n        scrollTop,\n        scrollHeight,\n        clientHeight,\n    ];\n};\nvar getHScrollVariables = function (_a) {\n    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n    return [\n        scrollLeft,\n        scrollWidth,\n        clientWidth,\n    ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n    /**\n     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n     * and then increasingly negative as you scroll towards the end of the content.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n     */\n    return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n    var delta = directionFactor * sourceDelta;\n    // find scrollable target\n    var target = event.target;\n    var targetInLock = endTarget.contains(target);\n    var shouldCancelScroll = false;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = 0;\n    var availableScrollTop = 0;\n    do {\n        if (!target) {\n            break;\n        }\n        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n        var elementScroll = scroll_1 - capacity - directionFactor * position;\n        if (position || elementScroll) {\n            if (elementCouldBeScrolled(axis, target)) {\n                availableScroll += elementScroll;\n                availableScrollTop += position;\n            }\n        }\n        var parent_1 = target.parentNode;\n        // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n        // this is the same logic used in focus-lock\n        target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n    } while (\n    // portaled content\n    (!targetInLock && target !== document.body) ||\n        // self content\n        (targetInLock && (endTarget.contains(target) || endTarget === target)));\n    // handle epsilon around 0 (non standard zoom levels)\n    if (isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n        shouldCancelScroll = true;\n    }\n    else if (!isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n        shouldCancelScroll = true;\n    }\n    return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n    return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n  .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n  .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n    var shouldPreventQueue = React.useRef([]);\n    var touchStartRef = React.useRef([0, 0]);\n    var activeAxis = React.useRef();\n    var id = React.useState(idCounter++)[0];\n    var Style = React.useState(styleSingleton)[0];\n    var lastProps = React.useRef(props);\n    React.useEffect(function () {\n        lastProps.current = props;\n    }, [props]);\n    React.useEffect(function () {\n        if (props.inert) {\n            document.body.classList.add(\"block-interactivity-\".concat(id));\n            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n            allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n            return function () {\n                document.body.classList.remove(\"block-interactivity-\".concat(id));\n                allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n            };\n        }\n        return;\n    }, [props.inert, props.lockRef.current, props.shards]);\n    var shouldCancelEvent = React.useCallback(function (event, parent) {\n        if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n            return !lastProps.current.allowPinchZoom;\n        }\n        var touch = getTouchXY(event);\n        var touchStart = touchStartRef.current;\n        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n        var currentAxis;\n        var target = event.target;\n        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n        // allow horizontal touch move on Range inputs. They will not cause any scroll\n        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n            return false;\n        }\n        // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n        var selection = window.getSelection();\n        var anchorNode = selection && selection.anchorNode;\n        var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n        if (isTouchingSelection) {\n            return false;\n        }\n        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n        if (!canBeScrolledInMainDirection) {\n            return true;\n        }\n        if (canBeScrolledInMainDirection) {\n            currentAxis = moveDirection;\n        }\n        else {\n            currentAxis = moveDirection === 'v' ? 'h' : 'v';\n            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n            // other axis might be not scrollable\n        }\n        if (!canBeScrolledInMainDirection) {\n            return false;\n        }\n        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n            activeAxis.current = currentAxis;\n        }\n        if (!currentAxis) {\n            return true;\n        }\n        var cancelingAxis = activeAxis.current || currentAxis;\n        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n    }, []);\n    var shouldPrevent = React.useCallback(function (_event) {\n        var event = _event;\n        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n            // not the last active\n            return;\n        }\n        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n        // self event, and should be canceled\n        if (sourceEvent && sourceEvent.should) {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            return;\n        }\n        // outside or shard event\n        if (!sourceEvent) {\n            var shardNodes = (lastProps.current.shards || [])\n                .map(extractRef)\n                .filter(Boolean)\n                .filter(function (node) { return node.contains(event.target); });\n            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n            if (shouldStop) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n        }\n    }, []);\n    var shouldCancel = React.useCallback(function (name, delta, target, should) {\n        var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n        shouldPreventQueue.current.push(event);\n        setTimeout(function () {\n            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n        }, 1);\n    }, []);\n    var scrollTouchStart = React.useCallback(function (event) {\n        touchStartRef.current = getTouchXY(event);\n        activeAxis.current = undefined;\n    }, []);\n    var scrollWheel = React.useCallback(function (event) {\n        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    var scrollTouchMove = React.useCallback(function (event) {\n        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    React.useEffect(function () {\n        lockStack.push(Style);\n        props.setCallbacks({\n            onScrollCapture: scrollWheel,\n            onWheelCapture: scrollWheel,\n            onTouchMoveCapture: scrollTouchMove,\n        });\n        document.addEventListener('wheel', shouldPrevent, nonPassive);\n        document.addEventListener('touchmove', shouldPrevent, nonPassive);\n        document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n        return function () {\n            lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n            document.removeEventListener('wheel', shouldPrevent, nonPassive);\n            document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n        };\n    }, []);\n    var removeScrollBar = props.removeScrollBar, inert = props.inert;\n    return (React.createElement(React.Fragment, null,\n        inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n        removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n    var shadowParent = null;\n    while (node !== null) {\n        if (node instanceof ShadowRoot) {\n            shadowParent = node.host;\n            node = node.host;\n        }\n        node = node.parentNode;\n    }\n    return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","import RemoveScroll from './Combination';\nexport { RemoveScroll };\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n  createCollectionScope,\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n  const {\n    __scopeSelect,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    value: valueProp,\n    defaultValue,\n    onValueChange,\n    dir,\n    name,\n    autoComplete,\n    disabled,\n    required,\n    form\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  const [trigger, setTrigger] = React.useState(null);\n  const [valueNode, setValueNode] = React.useState(null);\n  const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n  const direction = useDirection(dir);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: SELECT_NAME\n  });\n  const [value, setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n    caller: SELECT_NAME\n  });\n  const triggerPointerDownPosRef = React.useRef(null);\n  const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n  const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n    SelectProvider,\n    {\n      required,\n      scope: __scopeSelect,\n      trigger,\n      onTriggerChange: setTrigger,\n      valueNode,\n      onValueNodeChange: setValueNode,\n      valueNodeHasChildren,\n      onValueNodeHasChildrenChange: setValueNodeHasChildren,\n      contentId: useId(),\n      value,\n      onValueChange: setValue,\n      open,\n      onOpenChange: setOpen,\n      dir: direction,\n      triggerPointerDownPosRef,\n      disabled,\n      children: [\n        /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n          SelectNativeOptionsProvider,\n          {\n            scope: props.__scopeSelect,\n            onNativeOptionAdd: React.useCallback((option) => {\n              setNativeOptionsSet((prev) => new Set(prev).add(option));\n            }, []),\n            onNativeOptionRemove: React.useCallback((option) => {\n              setNativeOptionsSet((prev) => {\n                const optionsSet = new Set(prev);\n                optionsSet.delete(option);\n                return optionsSet;\n              });\n            }, []),\n            children\n          }\n        ) }),\n        isFormControl ? /* @__PURE__ */ jsxs(\n          SelectBubbleInput,\n          {\n            \"aria-hidden\": true,\n            required,\n            tabIndex: -1,\n            name,\n            autoComplete,\n            value,\n            onChange: (event) => setValue(event.target.value),\n            disabled,\n            form,\n            children: [\n              value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n              Array.from(nativeOptionsSet)\n            ]\n          },\n          nativeSelectKey\n        ) : null\n      ]\n    }\n  ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, disabled = false, ...triggerProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n    const isDisabled = context.disabled || disabled;\n    const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n    const getItems = useCollection(__scopeSelect);\n    const pointerTypeRef = React.useRef(\"touch\");\n    const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.value === context.value);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem !== void 0) {\n        context.onValueChange(nextItem.value);\n      }\n    });\n    const handleOpen = (pointerEvent) => {\n      if (!isDisabled) {\n        context.onOpenChange(true);\n        resetTypeahead();\n      }\n      if (pointerEvent) {\n        context.triggerPointerDownPosRef.current = {\n          x: Math.round(pointerEvent.pageX),\n          y: Math.round(pointerEvent.pageY)\n        };\n      }\n    };\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"combobox\",\n        \"aria-controls\": context.contentId,\n        \"aria-expanded\": context.open,\n        \"aria-required\": context.required,\n        \"aria-autocomplete\": \"none\",\n        dir: context.dir,\n        \"data-state\": context.open ? \"open\" : \"closed\",\n        disabled: isDisabled,\n        \"data-disabled\": isDisabled ? \"\" : void 0,\n        \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n        ...triggerProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n          event.currentTarget.focus();\n          if (pointerTypeRef.current !== \"mouse\") {\n            handleOpen(event);\n          }\n        }),\n        onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n          pointerTypeRef.current = event.pointerType;\n          const target = event.target;\n          if (target.hasPointerCapture(event.pointerId)) {\n            target.releasePointerCapture(event.pointerId);\n          }\n          if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n            handleOpen(event);\n            event.preventDefault();\n          }\n        }),\n        onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n          const isTypingAhead = searchRef.current !== \"\";\n          const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n          if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n          if (isTypingAhead && event.key === \" \") return;\n          if (OPEN_KEYS.includes(event.key)) {\n            handleOpen();\n            event.preventDefault();\n          }\n        })\n      }\n    ) });\n  }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n    const context = useSelectContext(VALUE_NAME, __scopeSelect);\n    const { onValueNodeHasChildrenChange } = context;\n    const hasChildren = children !== void 0;\n    const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n    useLayoutEffect(() => {\n      onValueNodeHasChildrenChange(hasChildren);\n    }, [onValueNodeHasChildrenChange, hasChildren]);\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...valueProps,\n        ref: composedRefs,\n        style: { pointerEvents: \"none\" },\n        children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n      }\n    );\n  }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, children, ...iconProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n  }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n  return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n    const [fragment, setFragment] = React.useState();\n    useLayoutEffect(() => {\n      setFragment(new DocumentFragment());\n    }, []);\n    if (!context.open) {\n      const frag = fragment;\n      return frag ? ReactDOM.createPortal(\n        /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n        frag\n      ) : null;\n    }\n    return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n  }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSelect,\n      position = \"item-aligned\",\n      onCloseAutoFocus,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      //\n      // PopperContent props\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions,\n      //\n      ...contentProps\n    } = props;\n    const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n    const [content, setContent] = React.useState(null);\n    const [viewport, setViewport] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [selectedItem, setSelectedItem] = React.useState(null);\n    const [selectedItemText, setSelectedItemText] = React.useState(\n      null\n    );\n    const getItems = useCollection(__scopeSelect);\n    const [isPositioned, setIsPositioned] = React.useState(false);\n    const firstValidItemFoundRef = React.useRef(false);\n    React.useEffect(() => {\n      if (content) return hideOthers(content);\n    }, [content]);\n    useFocusGuards();\n    const focusFirst = React.useCallback(\n      (candidates) => {\n        const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n        const [lastItem] = restItems.slice(-1);\n        const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n        for (const candidate of candidates) {\n          if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n          candidate?.scrollIntoView({ block: \"nearest\" });\n          if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n          if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n          candidate?.focus();\n          if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n        }\n      },\n      [getItems, viewport]\n    );\n    const focusSelectedItem = React.useCallback(\n      () => focusFirst([selectedItem, content]),\n      [focusFirst, selectedItem, content]\n    );\n    React.useEffect(() => {\n      if (isPositioned) {\n        focusSelectedItem();\n      }\n    }, [isPositioned, focusSelectedItem]);\n    const { onOpenChange, triggerPointerDownPosRef } = context;\n    React.useEffect(() => {\n      if (content) {\n        let pointerMoveDelta = { x: 0, y: 0 };\n        const handlePointerMove = (event) => {\n          pointerMoveDelta = {\n            x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n            y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n          };\n        };\n        const handlePointerUp = (event) => {\n          if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n            event.preventDefault();\n          } else {\n            if (!content.contains(event.target)) {\n              onOpenChange(false);\n            }\n          }\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          triggerPointerDownPosRef.current = null;\n        };\n        if (triggerPointerDownPosRef.current !== null) {\n          document.addEventListener(\"pointermove\", handlePointerMove);\n          document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n        }\n        return () => {\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n        };\n      }\n    }, [content, onOpenChange, triggerPointerDownPosRef]);\n    React.useEffect(() => {\n      const close = () => onOpenChange(false);\n      window.addEventListener(\"blur\", close);\n      window.addEventListener(\"resize\", close);\n      return () => {\n        window.removeEventListener(\"blur\", close);\n        window.removeEventListener(\"resize\", close);\n      };\n    }, [onOpenChange]);\n    const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem) {\n        setTimeout(() => nextItem.ref.current.focus());\n      }\n    });\n    const itemRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItem(node);\n          if (isFirstValidItem) firstValidItemFoundRef.current = true;\n        }\n      },\n      [context.value]\n    );\n    const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n    const itemTextRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItemText(node);\n        }\n      },\n      [context.value]\n    );\n    const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n    const popperContentProps = SelectPosition === SelectPopperPosition ? {\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions\n    } : {};\n    return /* @__PURE__ */ jsx(\n      SelectContentProvider,\n      {\n        scope: __scopeSelect,\n        content,\n        viewport,\n        onViewportChange: setViewport,\n        itemRefCallback,\n        selectedItem,\n        onItemLeave: handleItemLeave,\n        itemTextRefCallback,\n        focusSelectedItem,\n        selectedItemText,\n        position,\n        isPositioned,\n        searchRef,\n        children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n          FocusScope,\n          {\n            asChild: true,\n            trapped: context.open,\n            onMountAutoFocus: (event) => {\n              event.preventDefault();\n            },\n            onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n              context.trigger?.focus({ preventScroll: true });\n              event.preventDefault();\n            }),\n            children: /* @__PURE__ */ jsx(\n              DismissableLayer,\n              {\n                asChild: true,\n                disableOutsidePointerEvents: true,\n                onEscapeKeyDown,\n                onPointerDownOutside,\n                onFocusOutside: (event) => event.preventDefault(),\n                onDismiss: () => context.onOpenChange(false),\n                children: /* @__PURE__ */ jsx(\n                  SelectPosition,\n                  {\n                    role: \"listbox\",\n                    id: context.contentId,\n                    \"data-state\": context.open ? \"open\" : \"closed\",\n                    dir: context.dir,\n                    onContextMenu: (event) => event.preventDefault(),\n                    ...contentProps,\n                    ...popperContentProps,\n                    onPlaced: () => setIsPositioned(true),\n                    ref: composedRefs,\n                    style: {\n                      // flex layout so we can place the scroll buttons properly\n                      display: \"flex\",\n                      flexDirection: \"column\",\n                      // reset the outline by default as the content MAY get focused\n                      outline: \"none\",\n                      ...contentProps.style\n                    },\n                    onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n                      const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n                      if (event.key === \"Tab\") event.preventDefault();\n                      if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n                      if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n                        const items = getItems().filter((item) => !item.disabled);\n                        let candidateNodes = items.map((item) => item.ref.current);\n                        if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n                          candidateNodes = candidateNodes.slice().reverse();\n                        }\n                        if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n                          const currentElement = event.target;\n                          const currentIndex = candidateNodes.indexOf(currentElement);\n                          candidateNodes = candidateNodes.slice(currentIndex + 1);\n                        }\n                        setTimeout(() => focusFirst(candidateNodes));\n                        event.preventDefault();\n                      }\n                    })\n                  }\n                )\n              }\n            )\n          }\n        ) })\n      }\n    );\n  }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onPlaced, ...popperProps } = props;\n  const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n  const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n  const [contentWrapper, setContentWrapper] = React.useState(null);\n  const [content, setContent] = React.useState(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n  const getItems = useCollection(__scopeSelect);\n  const shouldExpandOnScrollRef = React.useRef(false);\n  const shouldRepositionRef = React.useRef(true);\n  const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n  const position = React.useCallback(() => {\n    if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n      const triggerRect = context.trigger.getBoundingClientRect();\n      const contentRect = content.getBoundingClientRect();\n      const valueNodeRect = context.valueNode.getBoundingClientRect();\n      const itemTextRect = selectedItemText.getBoundingClientRect();\n      if (context.dir !== \"rtl\") {\n        const itemTextOffset = itemTextRect.left - contentRect.left;\n        const left = valueNodeRect.left - itemTextOffset;\n        const leftDelta = triggerRect.left - left;\n        const minContentWidth = triggerRect.width + leftDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const rightEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedLeft = clamp(left, [\n          CONTENT_MARGIN,\n          // Prevents the content from going off the starting edge of the\n          // viewport. It may still go off the ending edge, but this can be\n          // controlled by the user since they may want to manage overflow in a\n          // specific way.\n          // https://github.com/radix-ui/primitives/issues/2049\n          Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.left = clampedLeft + \"px\";\n      } else {\n        const itemTextOffset = contentRect.right - itemTextRect.right;\n        const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n        const rightDelta = window.innerWidth - triggerRect.right - right;\n        const minContentWidth = triggerRect.width + rightDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const leftEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedRight = clamp(right, [\n          CONTENT_MARGIN,\n          Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.right = clampedRight + \"px\";\n      }\n      const items = getItems();\n      const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n      const itemsHeight = viewport.scrollHeight;\n      const contentStyles = window.getComputedStyle(content);\n      const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n      const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n      const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n      const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n      const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n      const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n      const viewportStyles = window.getComputedStyle(viewport);\n      const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n      const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n      const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n      const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n      const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n      const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n      const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n      const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n      const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n      if (willAlignWithoutTopOverflow) {\n        const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n        contentWrapper.style.bottom = \"0px\";\n        const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n        const clampedTriggerMiddleToBottomEdge = Math.max(\n          triggerMiddleToBottomEdge,\n          selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n          (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n        );\n        const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n        contentWrapper.style.height = height + \"px\";\n      } else {\n        const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n        contentWrapper.style.top = \"0px\";\n        const clampedTopEdgeToTriggerMiddle = Math.max(\n          topEdgeToTriggerMiddle,\n          contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n          (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n        );\n        const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n        contentWrapper.style.height = height + \"px\";\n        viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n      }\n      contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n      contentWrapper.style.minHeight = minContentHeight + \"px\";\n      contentWrapper.style.maxHeight = availableHeight + \"px\";\n      onPlaced?.();\n      requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n    }\n  }, [\n    getItems,\n    context.trigger,\n    context.valueNode,\n    contentWrapper,\n    content,\n    viewport,\n    selectedItem,\n    selectedItemText,\n    context.dir,\n    onPlaced\n  ]);\n  useLayoutEffect(() => position(), [position]);\n  const [contentZIndex, setContentZIndex] = React.useState();\n  useLayoutEffect(() => {\n    if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n  }, [content]);\n  const handleScrollButtonChange = React.useCallback(\n    (node) => {\n      if (node && shouldRepositionRef.current === true) {\n        position();\n        focusSelectedItem?.();\n        shouldRepositionRef.current = false;\n      }\n    },\n    [position, focusSelectedItem]\n  );\n  return /* @__PURE__ */ jsx(\n    SelectViewportProvider,\n    {\n      scope: __scopeSelect,\n      contentWrapper,\n      shouldExpandOnScrollRef,\n      onScrollButtonChange: handleScrollButtonChange,\n      children: /* @__PURE__ */ jsx(\n        \"div\",\n        {\n          ref: setContentWrapper,\n          style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            position: \"fixed\",\n            zIndex: contentZIndex\n          },\n          children: /* @__PURE__ */ jsx(\n            Primitive.div,\n            {\n              ...popperProps,\n              ref: composedRefs,\n              style: {\n                // When we get the height of the content, it includes borders. If we were to set\n                // the height without having `boxSizing: 'border-box'` it would be too big.\n                boxSizing: \"border-box\",\n                // We need to ensure the content doesn't get taller than the wrapper\n                maxHeight: \"100%\",\n                ...popperProps.style\n              }\n            }\n          )\n        }\n      )\n    }\n  );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n  const {\n    __scopeSelect,\n    align = \"start\",\n    collisionPadding = CONTENT_MARGIN,\n    ...popperProps\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  return /* @__PURE__ */ jsx(\n    PopperPrimitive.Content,\n    {\n      ...popperScope,\n      ...popperProps,\n      ref: forwardedRef,\n      align,\n      collisionPadding,\n      style: {\n        // Ensure border-box for floating-ui calculations\n        boxSizing: \"border-box\",\n        ...popperProps.style,\n        // re-namespace exposed content custom properties\n        ...{\n          \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n          \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n          \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n          \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n          \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n        }\n      }\n    }\n  );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, nonce, ...viewportProps } = props;\n    const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n    const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n    const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n    const prevScrollTopRef = React.useRef(0);\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(\n        \"style\",\n        {\n          dangerouslySetInnerHTML: {\n            __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n          },\n          nonce\n        }\n      ),\n      /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-radix-select-viewport\": \"\",\n          role: \"presentation\",\n          ...viewportProps,\n          ref: composedRefs,\n          style: {\n            // we use position: 'relative' here on the `viewport` so that when we call\n            // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n            // (independent of the scrollUpButton).\n            position: \"relative\",\n            flex: 1,\n            // Viewport should only be scrollable in the vertical direction.\n            // This won't work in vertical writing modes, so we'll need to\n            // revisit this if/when that is supported\n            // https://developer.chrome.com/blog/vertical-form-controls\n            overflow: \"hidden auto\",\n            ...viewportProps.style\n          },\n          onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n            const viewport = event.currentTarget;\n            const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n            if (shouldExpandOnScrollRef?.current && contentWrapper) {\n              const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n              if (scrolledBy > 0) {\n                const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n                const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n                const cssHeight = parseFloat(contentWrapper.style.height);\n                const prevHeight = Math.max(cssMinHeight, cssHeight);\n                if (prevHeight < availableHeight) {\n                  const nextHeight = prevHeight + scrolledBy;\n                  const clampedNextHeight = Math.min(availableHeight, nextHeight);\n                  const heightDiff = nextHeight - clampedNextHeight;\n                  contentWrapper.style.height = clampedNextHeight + \"px\";\n                  if (contentWrapper.style.bottom === \"0px\") {\n                    viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n                    contentWrapper.style.justifyContent = \"flex-end\";\n                  }\n                }\n              }\n            }\n            prevScrollTopRef.current = viewport.scrollTop;\n          })\n        }\n      ) })\n    ] });\n  }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...groupProps } = props;\n    const groupId = useId();\n    return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n  }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...labelProps } = props;\n    const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n    return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n  }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSelect,\n      value,\n      disabled = false,\n      textValue: textValueProp,\n      ...itemProps\n    } = props;\n    const context = useSelectContext(ITEM_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n    const isSelected = context.value === value;\n    const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n    const [isFocused, setIsFocused] = React.useState(false);\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      (node) => contentContext.itemRefCallback?.(node, value, disabled)\n    );\n    const textId = useId();\n    const pointerTypeRef = React.useRef(\"touch\");\n    const handleSelect = () => {\n      if (!disabled) {\n        context.onValueChange(value);\n        context.onOpenChange(false);\n      }\n    };\n    if (value === \"\") {\n      throw new Error(\n        \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n      );\n    }\n    return /* @__PURE__ */ jsx(\n      SelectItemContextProvider,\n      {\n        scope: __scopeSelect,\n        value,\n        disabled,\n        textId,\n        isSelected,\n        onItemTextChange: React.useCallback((node) => {\n          setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n        }, []),\n        children: /* @__PURE__ */ jsx(\n          Collection.ItemSlot,\n          {\n            scope: __scopeSelect,\n            value,\n            disabled,\n            textValue,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                role: \"option\",\n                \"aria-labelledby\": textId,\n                \"data-highlighted\": isFocused ? \"\" : void 0,\n                \"aria-selected\": isSelected && isFocused,\n                \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n                \"aria-disabled\": disabled || void 0,\n                \"data-disabled\": disabled ? \"\" : void 0,\n                tabIndex: disabled ? void 0 : -1,\n                ...itemProps,\n                ref: composedRefs,\n                onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n                onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n                onClick: composeEventHandlers(itemProps.onClick, () => {\n                  if (pointerTypeRef.current !== \"mouse\") handleSelect();\n                }),\n                onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n                  if (pointerTypeRef.current === \"mouse\") handleSelect();\n                }),\n                onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                }),\n                onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                  if (disabled) {\n                    contentContext.onItemLeave?.();\n                  } else if (pointerTypeRef.current === \"mouse\") {\n                    event.currentTarget.focus({ preventScroll: true });\n                  }\n                }),\n                onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n                  if (event.currentTarget === document.activeElement) {\n                    contentContext.onItemLeave?.();\n                  }\n                }),\n                onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n                  const isTypingAhead = contentContext.searchRef?.current !== \"\";\n                  if (isTypingAhead && event.key === \" \") return;\n                  if (SELECTION_KEYS.includes(event.key)) handleSelect();\n                  if (event.key === \" \") event.preventDefault();\n                })\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, ...itemTextProps } = props;\n    const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n    const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n    const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n    const [itemTextNode, setItemTextNode] = React.useState(null);\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      (node) => setItemTextNode(node),\n      itemContext.onItemTextChange,\n      (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n    );\n    const textContent = itemTextNode?.textContent;\n    const nativeOption = React.useMemo(\n      () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n      [itemContext.disabled, itemContext.value, textContent]\n    );\n    const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n    useLayoutEffect(() => {\n      onNativeOptionAdd(nativeOption);\n      return () => onNativeOptionRemove(nativeOption);\n    }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n      itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n    ] });\n  }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...itemIndicatorProps } = props;\n    const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n    return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n  }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollUp, setCanScrollUp] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const canScrollUp2 = viewport.scrollTop > 0;\n        setCanScrollUp(canScrollUp2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollUp ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollDown, setCanScrollDown] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n        const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n        setCanScrollDown(canScrollDown2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollDown ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n  const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n  const autoScrollTimerRef = React.useRef(null);\n  const getItems = useCollection(__scopeSelect);\n  const clearAutoScrollTimer = React.useCallback(() => {\n    if (autoScrollTimerRef.current !== null) {\n      window.clearInterval(autoScrollTimerRef.current);\n      autoScrollTimerRef.current = null;\n    }\n  }, []);\n  React.useEffect(() => {\n    return () => clearAutoScrollTimer();\n  }, [clearAutoScrollTimer]);\n  useLayoutEffect(() => {\n    const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n    activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n  }, [getItems]);\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"aria-hidden\": true,\n      ...scrollIndicatorProps,\n      ref: forwardedRef,\n      style: { flexShrink: 0, ...scrollIndicatorProps.style },\n      onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n        contentContext.onItemLeave?.();\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n        clearAutoScrollTimer();\n      })\n    }\n  );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...separatorProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n  }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(ARROW_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n    return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n  }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n  ({ __scopeSelect, value, ...props }, forwardedRef) => {\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const prevValue = usePrevious(value);\n    React.useEffect(() => {\n      const select = ref.current;\n      if (!select) return;\n      const selectProto = window.HTMLSelectElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        selectProto,\n        \"value\"\n      );\n      const setValue = descriptor.set;\n      if (prevValue !== value && setValue) {\n        const event = new Event(\"change\", { bubbles: true });\n        setValue.call(select, value);\n        select.dispatchEvent(event);\n      }\n    }, [prevValue, value]);\n    return /* @__PURE__ */ jsx(\n      Primitive.select,\n      {\n        ...props,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n        ref: composedRefs,\n        defaultValue: value\n      }\n    );\n  }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction shouldShowPlaceholder(value) {\n  return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n  const handleSearchChange = useCallbackRef(onSearchChange);\n  const searchRef = React.useRef(\"\");\n  const timerRef = React.useRef(0);\n  const handleTypeaheadSearch = React.useCallback(\n    (key) => {\n      const search = searchRef.current + key;\n      handleSearchChange(search);\n      (function updateSearch(value) {\n        searchRef.current = value;\n        window.clearTimeout(timerRef.current);\n        if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n      })(search);\n    },\n    [handleSearchChange]\n  );\n  const resetTypeahead = React.useCallback(() => {\n    searchRef.current = \"\";\n    window.clearTimeout(timerRef.current);\n  }, []);\n  React.useEffect(() => {\n    return () => window.clearTimeout(timerRef.current);\n  }, []);\n  return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n  const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n  const normalizedSearch = isRepeated ? search[0] : search;\n  const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n  let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n  const excludeCurrentItem = normalizedSearch.length === 1;\n  if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n  const nextItem = wrappedItems.find(\n    (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n  );\n  return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n  Arrow2 as Arrow,\n  Content2 as Content,\n  Group,\n  Icon,\n  Item,\n  ItemIndicator,\n  ItemText,\n  Label,\n  Portal,\n  Root2 as Root,\n  ScrollDownButton,\n  ScrollUpButton,\n  Select,\n  SelectArrow,\n  SelectContent,\n  SelectGroup,\n  SelectIcon,\n  SelectItem,\n  SelectItemIndicator,\n  SelectItemText,\n  SelectLabel,\n  SelectPortal,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n  SelectViewport,\n  Separator,\n  Trigger,\n  Value,\n  Viewport,\n  createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"@radix-ui/react-icons\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"placeholder:text-muted-foreground flex h-8 w-full items-center justify-between whitespace-nowrap rounded-md border border-neutral-200 bg-transparent px-3 py-2 text-sm text-neutral-900 shadow-sm focus:outline-none focus:ring-1 focus:ring-neutral-300 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:focus:ring-neutral-600 [&>span]:line-clamp-1\",\n      className,\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDownIcon className=\"h-4 w-4 opacity-50\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n    {...props}\n  >\n    <ChevronUpIcon className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n    {...props}\n  >\n    <ChevronDownIcon className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n  <>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-neutral-200 bg-neutral-50 text-neutral-900 shadow-md dark:border-neutral-700 dark:bg-neutral-800 dark:text-white\",\n        position === \"popper\" &&\n          \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n        className,\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectScrollUpButton />\n      <SelectPrimitive.Viewport\n        className={cn(\n          \"p-1\",\n          position === \"popper\" &&\n            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n      <SelectScrollDownButton />\n    </SelectPrimitive.Content>\n  </>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n    {...props}\n  />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-neutral-100 focus:text-neutral-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-neutral-950 dark:focus:text-neutral-100\",\n      className,\n    )}\n    {...props}\n  >\n    <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        <CheckIcon className=\"h-4 w-4\" />\n      </SelectPrimitive.ItemIndicator>\n    </span>\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n  </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"bg-muted -mx-1 my-1 h-px\", className)}\n    {...props}\n  />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          \"ring-offset-background file:text-foreground placeholder:text-muted-foreground flex h-[32px] w-full rounded-md border border-solid border-neutral-200 bg-white px-3 py-2 font-sans text-sm text-gray-800 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-500\",\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <textarea\n        className={cn(\n          \"ring-offset-background file:text-foreground placeholder:text-muted-foreground focus-visible:ring-ring flex h-[32px] w-full rounded-md border border-solid border-neutral-200 bg-white px-3 py-2 font-sans text-sm text-gray-800 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-500\",\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n  const {\n    __scopePopover,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    modal = false\n  } = props;\n  const popperScope = usePopperScope(__scopePopover);\n  const triggerRef = React.useRef(null);\n  const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: POPOVER_NAME\n  });\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    PopoverProvider,\n    {\n      scope: __scopePopover,\n      contentId: useId(),\n      triggerRef,\n      open,\n      onOpenChange: setOpen,\n      onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n      hasCustomAnchor,\n      onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n      onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n      modal,\n      children\n    }\n  ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...anchorProps } = props;\n    const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n    React.useEffect(() => {\n      onCustomAnchorAdd();\n      return () => onCustomAnchorRemove();\n    }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n  }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...triggerProps } = props;\n    const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n    const trigger = /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-haspopup\": \"dialog\",\n        \"aria-expanded\": context.open,\n        \"aria-controls\": context.contentId,\n        \"data-state\": getState(context.open),\n        ...triggerProps,\n        ref: composedTriggerRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n    return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n  }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n  const { __scopePopover, forceMount, children, container } = props;\n  const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n  }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, contentRef);\n    const isRightClickOutsideRef = React.useRef(false);\n    React.useEffect(() => {\n      const content = contentRef.current;\n      if (content) return hideOthers(content);\n    }, []);\n    return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n      PopoverContentImpl,\n      {\n        ...props,\n        ref: composedRefs,\n        trapFocus: context.open,\n        disableOutsidePointerEvents: true,\n        onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n          event.preventDefault();\n          if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n        }),\n        onPointerDownOutside: composeEventHandlers(\n          props.onPointerDownOutside,\n          (event) => {\n            const originalEvent = event.detail.originalEvent;\n            const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n            const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n            isRightClickOutsideRef.current = isRightClick;\n          },\n          { checkForDefaultPrevented: false }\n        ),\n        onFocusOutside: composeEventHandlers(\n          props.onFocusOutside,\n          (event) => event.preventDefault(),\n          { checkForDefaultPrevented: false }\n        )\n      }\n    ) });\n  }\n);\nvar PopoverContentNonModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n    const hasInteractedOutsideRef = React.useRef(false);\n    const hasPointerDownOutsideRef = React.useRef(false);\n    return /* @__PURE__ */ jsx(\n      PopoverContentImpl,\n      {\n        ...props,\n        ref: forwardedRef,\n        trapFocus: false,\n        disableOutsidePointerEvents: false,\n        onCloseAutoFocus: (event) => {\n          props.onCloseAutoFocus?.(event);\n          if (!event.defaultPrevented) {\n            if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n            event.preventDefault();\n          }\n          hasInteractedOutsideRef.current = false;\n          hasPointerDownOutsideRef.current = false;\n        },\n        onInteractOutside: (event) => {\n          props.onInteractOutside?.(event);\n          if (!event.defaultPrevented) {\n            hasInteractedOutsideRef.current = true;\n            if (event.detail.originalEvent.type === \"pointerdown\") {\n              hasPointerDownOutsideRef.current = true;\n            }\n          }\n          const target = event.target;\n          const targetIsTrigger = context.triggerRef.current?.contains(target);\n          if (targetIsTrigger) event.preventDefault();\n          if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n            event.preventDefault();\n          }\n        }\n      }\n    );\n  }\n);\nvar PopoverContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopover,\n      trapFocus,\n      onOpenAutoFocus,\n      onCloseAutoFocus,\n      disableOutsidePointerEvents,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      ...contentProps\n    } = props;\n    const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n    const popperScope = usePopperScope(__scopePopover);\n    useFocusGuards();\n    return /* @__PURE__ */ jsx(\n      FocusScope,\n      {\n        asChild: true,\n        loop: true,\n        trapped: trapFocus,\n        onMountAutoFocus: onOpenAutoFocus,\n        onUnmountAutoFocus: onCloseAutoFocus,\n        children: /* @__PURE__ */ jsx(\n          DismissableLayer,\n          {\n            asChild: true,\n            disableOutsidePointerEvents,\n            onInteractOutside,\n            onEscapeKeyDown,\n            onPointerDownOutside,\n            onFocusOutside,\n            onDismiss: () => context.onOpenChange(false),\n            children: /* @__PURE__ */ jsx(\n              PopperPrimitive.Content,\n              {\n                \"data-state\": getState(context.open),\n                role: \"dialog\",\n                id: context.contentId,\n                ...popperScope,\n                ...contentProps,\n                ref: forwardedRef,\n                style: {\n                  ...contentProps.style,\n                  // re-namespace exposed content custom properties\n                  ...{\n                    \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                    \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n                    \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n                    \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                    \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n                  }\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...closeProps } = props;\n    const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n      }\n    );\n  }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopover, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopePopover);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n  Anchor2 as Anchor,\n  Arrow2 as Arrow,\n  Close,\n  Content2 as Content,\n  Popover,\n  PopoverAnchor,\n  PopoverArrow,\n  PopoverClose,\n  PopoverContent,\n  PopoverPortal,\n  PopoverTrigger,\n  Portal,\n  Root2 as Root,\n  Trigger,\n  createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n  <PopoverPrimitive.Content\n    ref={ref}\n    align={align}\n    sideOffset={sideOffset}\n    className={cn(\n      \"text-popover-foreground bg-neutral-100 dark:bg-neutral-900 border-neutral-200 dark:border-neutral-800 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[2147483646] w-72 rounded-md border p-4 shadow-md outline-none\",\n      className,\n    )}\n    style={{\n      zIndex: 2147483647,\n    }}\n    {...props}\n  />\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\";\n\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n  <SwitchPrimitives.Root\n    className={cn(\n      \"focus-visible:ring-ring focus-visible:ring-offset-background peer inline-flex h-4 w-8 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent p-0 shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-emerald-500 data-[state=unchecked]:bg-neutral-300 dark:data-[state=unchecked]:bg-neutral-600\",\n      className,\n    )}\n    {...props}\n    ref={ref}\n  >\n    <SwitchPrimitives.Thumb\n      className={cn(\n        \"bg-background pointer-events-none block h-3 w-3 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\",\n      )}\n    />\n  </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst Checkbox = React.forwardRef<\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n  <CheckboxPrimitive.Root\n    ref={ref}\n    className={cn(\n      \"peer h-4 w-4 shrink-0 rounded-[3px] border border-neutral-300 bg-white shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-400 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-white data-[state=checked]:text-black dark:border-neutral-600 dark:bg-neutral-950 dark:focus-visible:ring-neutral-500 dark:data-[state=checked]:bg-neutral-950 dark:data-[state=checked]:text-white\",\n      className,\n    )}\n    {...props}\n  >\n    <CheckboxPrimitive.Indicator className=\"flex h-full w-full items-center justify-center text-current\">\n      <CheckIcon className=\"h-3 w-3\" />\n    </CheckboxPrimitive.Indicator>\n  </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"../shared/lib/utils\";\n\nconst toggleVariants = cva(\n  \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline:\n          \"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-9 px-2 min-w-9\",\n        sm: \"h-8 px-1.5 min-w-8\",\n        lg: \"h-10 px-2.5 min-w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nconst Toggle = React.forwardRef<\n  React.ElementRef<typeof TogglePrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n  <TogglePrimitive.Root\n    ref={ref}\n    className={cn(toggleVariants({ variant, size, className }))}\n    {...props}\n  />\n)) as React.ForwardRefExoticComponent<\n  React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n    VariantProps<typeof toggleVariants> &\n    React.RefAttributes<React.ElementRef<typeof TogglePrimitive.Root>>\n>;\n\nToggle.displayName = TogglePrimitive.Root.displayName;\n\nexport { Toggle, toggleVariants };\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n  /^([A-Z])|[\\s-_]+(\\w)/g,\n  (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n  const camelCase = toCamelCase(string);\n  return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n  for (const prop in props) {\n    if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n      return true;\n    }\n  }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 2,\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n  ({\n    color = \"currentColor\",\n    size = 24,\n    strokeWidth = 2,\n    absoluteStrokeWidth,\n    className = \"\",\n    children,\n    iconNode,\n    ...rest\n  }, ref) => createElement(\n    \"svg\",\n    {\n      ref,\n      ...defaultAttributes,\n      width: size,\n      height: size,\n      stroke: color,\n      strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n      className: mergeClasses(\"lucide\", className),\n      ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n      ...rest\n    },\n    [\n      ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n      ...Array.isArray(children) ? children : [children]\n    ]\n  )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n  const Component = forwardRef(\n    ({ className, ...props }, ref) => createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(\n        `lucide-${toKebabCase(toPascalCase(iconName))}`,\n        `lucide-${iconName}`,\n        className\n      ),\n      ...props\n    })\n  );\n  Component.displayName = toPascalCase(iconName);\n  return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m3 16 4 4 4-4\", key: \"1co6wj\" }],\n  [\"path\", { d: \"M7 20V4\", key: \"1yoxec\" }],\n  [\"path\", { d: \"M11 4h10\", key: \"1w87gc\" }],\n  [\"path\", { d: \"M11 8h7\", key: \"djye34\" }],\n  [\"path\", { d: \"M11 12h4\", key: \"q8tih4\" }]\n];\nconst ArrowDownWideNarrow = createLucideIcon(\"arrow-down-wide-narrow\", __iconNode);\n\nexport { __iconNode, ArrowDownWideNarrow as default };\n//# sourceMappingURL=arrow-down-wide-narrow.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M12 5v14\", key: \"s699le\" }],\n  [\"path\", { d: \"m19 12-7 7-7-7\", key: \"1idqje\" }]\n];\nconst ArrowDown = createLucideIcon(\"arrow-down\", __iconNode);\n\nexport { __iconNode, ArrowDown as default };\n//# sourceMappingURL=arrow-down.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n  [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n];\nconst ArrowLeft = createLucideIcon(\"arrow-left\", __iconNode);\n\nexport { __iconNode, ArrowLeft as default };\n//# sourceMappingURL=arrow-left.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n  [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M7 7h10v10\", key: \"1tivn9\" }],\n  [\"path\", { d: \"M7 17 17 7\", key: \"1vkiza\" }]\n];\nconst ArrowUpRight = createLucideIcon(\"arrow-up-right\", __iconNode);\n\nexport { __iconNode, ArrowUpRight as default };\n//# sourceMappingURL=arrow-up-right.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n  [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\",\n      key: \"3c2336\"\n    }\n  ],\n  [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst BadgeCheck = createLucideIcon(\"badge-check\", __iconNode);\n\nexport { __iconNode, BadgeCheck as default };\n//# sourceMappingURL=badge-check.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n  [\n    \"path\",\n    {\n      d: \"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\n      key: \"ruj8y\"\n    }\n  ]\n];\nconst BookOpen = createLucideIcon(\"book-open\", __iconNode);\n\nexport { __iconNode, BookOpen as default };\n//# sourceMappingURL=book-open.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n  [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z\",\n      key: \"kmsa83\"\n    }\n  ],\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst CirclePlay = createLucideIcon(\"circle-play\", __iconNode);\n\nexport { __iconNode, CirclePlay as default };\n//# sourceMappingURL=circle-play.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]];\nconst Circle = createLucideIcon(\"circle\", __iconNode);\n\nexport { __iconNode, Circle as default };\n//# sourceMappingURL=circle.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n  [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n  [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n];\nconst Ellipsis = createLucideIcon(\"ellipsis\", __iconNode);\n\nexport { __iconNode, Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n  [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n  [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\",\n      key: \"usdka0\"\n    }\n  ]\n];\nconst FolderOpen = createLucideIcon(\"folder-open\", __iconNode);\n\nexport { __iconNode, FolderOpen as default };\n//# sourceMappingURL=folder-open.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n      key: \"sc7q7i\"\n    }\n  ]\n];\nconst Funnel = createLucideIcon(\"funnel\", __iconNode);\n\nexport { __iconNode, Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"rect\", { x: \"3\", y: \"8\", width: \"18\", height: \"4\", rx: \"1\", key: \"bkv52\" }],\n  [\"path\", { d: \"M12 8v13\", key: \"1c76mn\" }],\n  [\"path\", { d: \"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7\", key: \"6wjy6b\" }],\n  [\n    \"path\",\n    {\n      d: \"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5\",\n      key: \"1ihvrl\"\n    }\n  ]\n];\nconst Gift = createLucideIcon(\"gift\", __iconNode);\n\nexport { __iconNode, Gift as default };\n//# sourceMappingURL=gift.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"polyline\", { points: \"22 12 16 12 14 15 10 15 8 12 2 12\", key: \"o97t9d\" }],\n  [\n    \"path\",\n    {\n      d: \"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\",\n      key: \"oot6mr\"\n    }\n  ]\n];\nconst Inbox = createLucideIcon(\"inbox\", __iconNode);\n\nexport { __iconNode, Inbox as default };\n//# sourceMappingURL=inbox.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n  [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m4.93 4.93 4.24 4.24\", key: \"1ymg45\" }],\n  [\"path\", { d: \"m14.83 9.17 4.24-4.24\", key: \"1cb5xl\" }],\n  [\"path\", { d: \"m14.83 14.83 4.24 4.24\", key: \"q42g0n\" }],\n  [\"path\", { d: \"m9.17 14.83-4.24 4.24\", key: \"bqpfvv\" }],\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }]\n];\nconst LifeBuoy = createLucideIcon(\"life-buoy\", __iconNode);\n\nexport { __iconNode, LifeBuoy as default };\n//# sourceMappingURL=life-buoy.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\",\n      key: \"1gvzjb\"\n    }\n  ],\n  [\"path\", { d: \"M9 18h6\", key: \"x1upvd\" }],\n  [\"path\", { d: \"M10 22h4\", key: \"ceow96\" }]\n];\nconst Lightbulb = createLucideIcon(\"lightbulb\", __iconNode);\n\nexport { __iconNode, Lightbulb as default };\n//# sourceMappingURL=lightbulb.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n  [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n  [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n  [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n  [\"path\", { d: \"M15 9.34V5a3 3 0 0 0-5.68-1.33\", key: \"1gzdoj\" }],\n  [\"path\", { d: \"M16.95 16.95A7 7 0 0 1 5 12v-2\", key: \"cqa7eg\" }],\n  [\"path\", { d: \"M18.89 13.23A7 7 0 0 0 19 12v-2\", key: \"16hl24\" }],\n  [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }],\n  [\"path\", { d: \"M9 9v3a3 3 0 0 0 5.12 2.12\", key: \"r2i35w\" }]\n];\nconst MicOff = createLucideIcon(\"mic-off\", __iconNode);\n\nexport { __iconNode, MicOff as default };\n//# sourceMappingURL=mic-off.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n  [\"path\", { d: \"M19 10v2a7 7 0 0 1-14 0v-2\", key: \"1vc78b\" }],\n  [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"13\", rx: \"3\", key: \"s6n7sd\" }]\n];\nconst Mic = createLucideIcon(\"mic\", __iconNode);\n\nexport { __iconNode, Mic as default };\n//# sourceMappingURL=mic.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m14 10 7-7\", key: \"oa77jy\" }],\n  [\"path\", { d: \"M20 10h-6V4\", key: \"mjg0md\" }],\n  [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n  [\"path\", { d: \"M4 14h6v6\", key: \"rmj7iw\" }]\n];\nconst Minimize2 = createLucideIcon(\"minimize-2\", __iconNode);\n\nexport { __iconNode, Minimize2 as default };\n//# sourceMappingURL=minimize-2.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\",\n      key: \"1miecu\"\n    }\n  ]\n];\nconst Paperclip = createLucideIcon(\"paperclip\", __iconNode);\n\nexport { __iconNode, Paperclip as default };\n//# sourceMappingURL=paperclip.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n  [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\",\n      key: \"10ikf1\"\n    }\n  ]\n];\nconst Play = createLucideIcon(\"play\", __iconNode);\n\nexport { __iconNode, Play as default };\n//# sourceMappingURL=play.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n  [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M22 11v1a10 10 0 1 1-9-10\", key: \"ew0xw9\" }],\n  [\"path\", { d: \"M8 14s1.5 2 4 2 4-2 4-2\", key: \"1y1vjs\" }],\n  [\"line\", { x1: \"9\", x2: \"9.01\", y1: \"9\", y2: \"9\", key: \"yxxnd0\" }],\n  [\"line\", { x1: \"15\", x2: \"15.01\", y1: \"9\", y2: \"9\", key: \"1p4y9e\" }],\n  [\"path\", { d: \"M16 5h6\", key: \"1vod17\" }],\n  [\"path\", { d: \"M19 2v6\", key: \"4bpg5p\" }]\n];\nconst SmilePlus = createLucideIcon(\"smile-plus\", __iconNode);\n\nexport { __iconNode, SmilePlus as default };\n//# sourceMappingURL=smile-plus.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M8 14s1.5 2 4 2 4-2 4-2\", key: \"1y1vjs\" }],\n  [\"line\", { x1: \"9\", x2: \"9.01\", y1: \"9\", y2: \"9\", key: \"yxxnd0\" }],\n  [\"line\", { x1: \"15\", x2: \"15.01\", y1: \"9\", y2: \"9\", key: \"1p4y9e\" }]\n];\nconst Smile = createLucideIcon(\"smile\", __iconNode);\n\nexport { __iconNode, Smile as default };\n//# sourceMappingURL=smile.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\n      key: \"1s2grr\"\n    }\n  ],\n  [\"path\", { d: \"M20 2v4\", key: \"1rf3ol\" }],\n  [\"path\", { d: \"M22 4h-4\", key: \"gwowj6\" }],\n  [\"circle\", { cx: \"4\", cy: \"20\", r: \"2\", key: \"6kqj1y\" }]\n];\nconst Sparkles = createLucideIcon(\"sparkles\", __iconNode);\n\nexport { __iconNode, Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }]\n];\nconst Square = createLucideIcon(\"square\", __iconNode);\n\nexport { __iconNode, Square as default };\n//# sourceMappingURL=square.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    {\n      d: \"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\",\n      key: \"ftymec\"\n    }\n  ],\n  [\"rect\", { x: \"2\", y: \"6\", width: \"14\", height: \"12\", rx: \"2\", key: \"158x01\" }]\n];\nconst Video = createLucideIcon(\"video\", __iconNode);\n\nexport { __iconNode, Video as default };\n//# sourceMappingURL=video.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\n    \"path\",\n    { d: \"M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196\", key: \"w8jjjt\" }\n  ],\n  [\"path\", { d: \"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2\", key: \"1xawa7\" }],\n  [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst VideoOff = createLucideIcon(\"video-off\", __iconNode);\n\nexport { __iconNode, VideoOff as default };\n//# sourceMappingURL=video-off.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport * as index from './icons/index.js';\nexport { index as icons };\nexport { default as AlarmClockMinus, default as AlarmClockMinusIcon, default as AlarmMinus, default as AlarmMinusIcon, default as LucideAlarmClockMinus, default as LucideAlarmMinus } from './icons/alarm-clock-minus.js';\nexport { default as AlarmCheck, default as AlarmCheckIcon, default as AlarmClockCheck, default as AlarmClockCheckIcon, default as LucideAlarmCheck, default as LucideAlarmClockCheck } from './icons/alarm-clock-check.js';\nexport { default as AlarmClockPlus, default as AlarmClockPlusIcon, default as AlarmPlus, default as AlarmPlusIcon, default as LucideAlarmClockPlus, default as LucideAlarmPlus } from './icons/alarm-clock-plus.js';\nexport { default as ArrowDownAZ, default as ArrowDownAZIcon, default as ArrowDownAz, default as ArrowDownAzIcon, default as LucideArrowDownAZ, default as LucideArrowDownAz } from './icons/arrow-down-a-z.js';\nexport { default as ArrowDownWideNarrow, default as ArrowDownWideNarrowIcon, default as LucideArrowDownWideNarrow, default as LucideSortDesc, default as SortDesc, default as SortDescIcon } from './icons/arrow-down-wide-narrow.js';\nexport { default as ArrowDownZA, default as ArrowDownZAIcon, default as ArrowDownZa, default as ArrowDownZaIcon, default as LucideArrowDownZA, default as LucideArrowDownZa } from './icons/arrow-down-z-a.js';\nexport { default as ArrowUpAZ, default as ArrowUpAZIcon, default as ArrowUpAz, default as ArrowUpAzIcon, default as LucideArrowUpAZ, default as LucideArrowUpAz } from './icons/arrow-up-a-z.js';\nexport { default as ArrowUpNarrowWide, default as ArrowUpNarrowWideIcon, default as LucideArrowUpNarrowWide, default as LucideSortAsc, default as SortAsc, default as SortAscIcon } from './icons/arrow-up-narrow-wide.js';\nexport { default as ArrowUpZA, default as ArrowUpZAIcon, default as ArrowUpZa, default as ArrowUpZaIcon, default as LucideArrowUpZA, default as LucideArrowUpZa } from './icons/arrow-up-z-a.js';\nexport { default as Axis3D, default as Axis3DIcon, default as Axis3d, default as Axis3dIcon, default as LucideAxis3D, default as LucideAxis3d } from './icons/axis-3d.js';\nexport { default as BadgeCheck, default as BadgeCheckIcon, default as LucideBadgeCheck, default as LucideVerified, default as Verified, default as VerifiedIcon } from './icons/badge-check.js';\nexport { default as BadgeHelp, default as BadgeHelpIcon, default as BadgeQuestionMark, default as BadgeQuestionMarkIcon, default as LucideBadgeHelp, default as LucideBadgeQuestionMark } from './icons/badge-question-mark.js';\nexport { default as BetweenHorizonalEnd, default as BetweenHorizonalEndIcon, default as BetweenHorizontalEnd, default as BetweenHorizontalEndIcon, default as LucideBetweenHorizonalEnd, default as LucideBetweenHorizontalEnd } from './icons/between-horizontal-end.js';\nexport { default as BetweenHorizonalStart, default as BetweenHorizonalStartIcon, default as BetweenHorizontalStart, default as BetweenHorizontalStartIcon, default as LucideBetweenHorizonalStart, default as LucideBetweenHorizontalStart } from './icons/between-horizontal-start.js';\nexport { default as BookDashed, default as BookDashedIcon, default as BookTemplate, default as BookTemplateIcon, default as LucideBookDashed, default as LucideBookTemplate } from './icons/book-dashed.js';\nexport { default as Braces, default as BracesIcon, default as CurlyBraces, default as CurlyBracesIcon, default as LucideBraces, default as LucideCurlyBraces } from './icons/braces.js';\nexport { default as Captions, default as CaptionsIcon, default as LucideCaptions, default as LucideSubtitles, default as Subtitles, default as SubtitlesIcon } from './icons/captions.js';\nexport { default as AreaChart, default as AreaChartIcon, default as ChartArea, default as ChartAreaIcon, default as LucideAreaChart, default as LucideChartArea } from './icons/chart-area.js';\nexport { default as BarChartHorizontalBig, default as BarChartHorizontalBigIcon, default as ChartBarBig, default as ChartBarBigIcon, default as LucideBarChartHorizontalBig, default as LucideChartBarBig } from './icons/chart-bar-big.js';\nexport { default as BarChartHorizontal, default as BarChartHorizontalIcon, default as ChartBar, default as ChartBarIcon, default as LucideBarChartHorizontal, default as LucideChartBar } from './icons/chart-bar.js';\nexport { default as CandlestickChart, default as CandlestickChartIcon, default as ChartCandlestick, default as ChartCandlestickIcon, default as LucideCandlestickChart, default as LucideChartCandlestick } from './icons/chart-candlestick.js';\nexport { default as BarChart4, default as BarChart4Icon, default as ChartColumnIncreasing, default as ChartColumnIncreasingIcon, default as LucideBarChart4, default as LucideChartColumnIncreasing } from './icons/chart-column-increasing.js';\nexport { default as BarChartBig, default as BarChartBigIcon, default as ChartColumnBig, default as ChartColumnBigIcon, default as LucideBarChartBig, default as LucideChartColumnBig } from './icons/chart-column-big.js';\nexport { default as BarChart3, default as BarChart3Icon, default as ChartColumn, default as ChartColumnIcon, default as LucideBarChart3, default as LucideChartColumn } from './icons/chart-column.js';\nexport { default as ChartLine, default as ChartLineIcon, default as LineChart, default as LineChartIcon, default as LucideChartLine, default as LucideLineChart } from './icons/chart-line.js';\nexport { default as BarChart, default as BarChartIcon, default as ChartNoAxesColumnIncreasing, default as ChartNoAxesColumnIncreasingIcon, default as LucideBarChart, default as LucideChartNoAxesColumnIncreasing } from './icons/chart-no-axes-column-increasing.js';\nexport { default as BarChart2, default as BarChart2Icon, default as ChartNoAxesColumn, default as ChartNoAxesColumnIcon, default as LucideBarChart2, default as LucideChartNoAxesColumn } from './icons/chart-no-axes-column.js';\nexport { default as ChartPie, default as ChartPieIcon, default as LucideChartPie, default as LucidePieChart, default as PieChart, default as PieChartIcon } from './icons/chart-pie.js';\nexport { default as ChartNoAxesGantt, default as ChartNoAxesGanttIcon, default as GanttChart, default as GanttChartIcon, default as LucideChartNoAxesGantt, default as LucideGanttChart } from './icons/chart-no-axes-gantt.js';\nexport { default as ChartScatter, default as ChartScatterIcon, default as LucideChartScatter, default as LucideScatterChart, default as ScatterChart, default as ScatterChartIcon } from './icons/chart-scatter.js';\nexport { default as Chrome, default as ChromeIcon, default as Chromium, default as ChromiumIcon, default as LucideChrome, default as LucideChromium } from './icons/chromium.js';\nexport { default as AlertCircle, default as AlertCircleIcon, default as CircleAlert, default as CircleAlertIcon, default as LucideAlertCircle, default as LucideCircleAlert } from './icons/circle-alert.js';\nexport { default as ArrowDownCircle, default as ArrowDownCircleIcon, default as CircleArrowDown, default as CircleArrowDownIcon, default as LucideArrowDownCircle, default as LucideCircleArrowDown } from './icons/circle-arrow-down.js';\nexport { default as ArrowLeftCircle, default as ArrowLeftCircleIcon, default as CircleArrowLeft, default as CircleArrowLeftIcon, default as LucideArrowLeftCircle, default as LucideCircleArrowLeft } from './icons/circle-arrow-left.js';\nexport { default as ArrowDownLeftFromCircle, default as ArrowDownLeftFromCircleIcon, default as CircleArrowOutDownLeft, default as CircleArrowOutDownLeftIcon, default as LucideArrowDownLeftFromCircle, default as LucideCircleArrowOutDownLeft } from './icons/circle-arrow-out-down-left.js';\nexport { default as ArrowDownRightFromCircle, default as ArrowDownRightFromCircleIcon, default as CircleArrowOutDownRight, default as CircleArrowOutDownRightIcon, default as LucideArrowDownRightFromCircle, default as LucideCircleArrowOutDownRight } from './icons/circle-arrow-out-down-right.js';\nexport { default as ArrowUpLeftFromCircle, default as ArrowUpLeftFromCircleIcon, default as CircleArrowOutUpLeft, default as CircleArrowOutUpLeftIcon, default as LucideArrowUpLeftFromCircle, default as LucideCircleArrowOutUpLeft } from './icons/circle-arrow-out-up-left.js';\nexport { default as ArrowUpRightFromCircle, default as ArrowUpRightFromCircleIcon, default as CircleArrowOutUpRight, default as CircleArrowOutUpRightIcon, default as LucideArrowUpRightFromCircle, default as LucideCircleArrowOutUpRight } from './icons/circle-arrow-out-up-right.js';\nexport { default as ArrowRightCircle, default as ArrowRightCircleIcon, default as CircleArrowRight, default as CircleArrowRightIcon, default as LucideArrowRightCircle, default as LucideCircleArrowRight } from './icons/circle-arrow-right.js';\nexport { default as CheckCircle, default as CheckCircleIcon, default as CircleCheckBig, default as CircleCheckBigIcon, default as LucideCheckCircle, default as LucideCircleCheckBig } from './icons/circle-check-big.js';\nexport { default as ArrowUpCircle, default as ArrowUpCircleIcon, default as CircleArrowUp, default as CircleArrowUpIcon, default as LucideArrowUpCircle, default as LucideCircleArrowUp } from './icons/circle-arrow-up.js';\nexport { default as CheckCircle2, default as CheckCircle2Icon, default as CircleCheck, default as CircleCheckIcon, default as LucideCheckCircle2, default as LucideCircleCheck } from './icons/circle-check.js';\nexport { default as ChevronLeftCircle, default as ChevronLeftCircleIcon, default as CircleChevronLeft, default as CircleChevronLeftIcon, default as LucideChevronLeftCircle, default as LucideCircleChevronLeft } from './icons/circle-chevron-left.js';\nexport { default as ChevronRightCircle, default as ChevronRightCircleIcon, default as CircleChevronRight, default as CircleChevronRightIcon, default as LucideChevronRightCircle, default as LucideCircleChevronRight } from './icons/circle-chevron-right.js';\nexport { default as ChevronDownCircle, default as ChevronDownCircleIcon, default as CircleChevronDown, default as CircleChevronDownIcon, default as LucideChevronDownCircle, default as LucideCircleChevronDown } from './icons/circle-chevron-down.js';\nexport { default as ChevronUpCircle, default as ChevronUpCircleIcon, default as CircleChevronUp, default as CircleChevronUpIcon, default as LucideChevronUpCircle, default as LucideCircleChevronUp } from './icons/circle-chevron-up.js';\nexport { default as CircleDivide, default as CircleDivideIcon, default as DivideCircle, default as DivideCircleIcon, default as LucideCircleDivide, default as LucideDivideCircle } from './icons/circle-divide.js';\nexport { default as CircleGauge, default as CircleGaugeIcon, default as GaugeCircle, default as GaugeCircleIcon, default as LucideCircleGauge, default as LucideGaugeCircle } from './icons/circle-gauge.js';\nexport { default as CircleMinus, default as CircleMinusIcon, default as LucideCircleMinus, default as LucideMinusCircle, default as MinusCircle, default as MinusCircleIcon } from './icons/circle-minus.js';\nexport { default as CircleParkingOff, default as CircleParkingOffIcon, default as LucideCircleParkingOff, default as LucideParkingCircleOff, default as ParkingCircleOff, default as ParkingCircleOffIcon } from './icons/circle-parking-off.js';\nexport { default as CircleParking, default as CircleParkingIcon, default as LucideCircleParking, default as LucideParkingCircle, default as ParkingCircle, default as ParkingCircleIcon } from './icons/circle-parking.js';\nexport { default as CirclePause, default as CirclePauseIcon, default as LucideCirclePause, default as LucidePauseCircle, default as PauseCircle, default as PauseCircleIcon } from './icons/circle-pause.js';\nexport { default as CirclePercent, default as CirclePercentIcon, default as LucideCirclePercent, default as LucidePercentCircle, default as PercentCircle, default as PercentCircleIcon } from './icons/circle-percent.js';\nexport { default as CirclePlay, default as CirclePlayIcon, default as LucideCirclePlay, default as LucidePlayCircle, default as PlayCircle, default as PlayCircleIcon } from './icons/circle-play.js';\nexport { default as CirclePlus, default as CirclePlusIcon, default as LucideCirclePlus, default as LucidePlusCircle, default as PlusCircle, default as PlusCircleIcon } from './icons/circle-plus.js';\nexport { default as CirclePower, default as CirclePowerIcon, default as LucideCirclePower, default as LucidePowerCircle, default as PowerCircle, default as PowerCircleIcon } from './icons/circle-power.js';\nexport { default as CircleHelp, default as CircleHelpIcon, default as CircleQuestionMark, default as CircleQuestionMarkIcon, default as HelpCircle, default as HelpCircleIcon, default as LucideCircleHelp, default as LucideCircleQuestionMark, default as LucideHelpCircle } from './icons/circle-question-mark.js';\nexport { default as CircleSlash2, default as CircleSlash2Icon, default as CircleSlashed, default as CircleSlashedIcon, default as LucideCircleSlash2, default as LucideCircleSlashed } from './icons/circle-slash-2.js';\nexport { default as CircleStop, default as CircleStopIcon, default as LucideCircleStop, default as LucideStopCircle, default as StopCircle, default as StopCircleIcon } from './icons/circle-stop.js';\nexport { default as CircleUser, default as CircleUserIcon, default as LucideCircleUser, default as LucideUserCircle, default as UserCircle, default as UserCircleIcon } from './icons/circle-user.js';\nexport { default as CircleX, default as CircleXIcon, default as LucideCircleX, default as LucideXCircle, default as XCircle, default as XCircleIcon } from './icons/circle-x.js';\nexport { default as CircleUserRound, default as CircleUserRoundIcon, default as LucideCircleUserRound, default as LucideUserCircle2, default as UserCircle2, default as UserCircle2Icon } from './icons/circle-user-round.js';\nexport { default as ClipboardPenLine, default as ClipboardPenLineIcon, default as ClipboardSignature, default as ClipboardSignatureIcon, default as LucideClipboardPenLine, default as LucideClipboardSignature } from './icons/clipboard-pen-line.js';\nexport { default as ClipboardEdit, default as ClipboardEditIcon, default as ClipboardPen, default as ClipboardPenIcon, default as LucideClipboardEdit, default as LucideClipboardPen } from './icons/clipboard-pen.js';\nexport { default as CloudDownload, default as CloudDownloadIcon, default as DownloadCloud, default as DownloadCloudIcon, default as LucideCloudDownload, default as LucideDownloadCloud } from './icons/cloud-download.js';\nexport { default as CloudUpload, default as CloudUploadIcon, default as LucideCloudUpload, default as LucideUploadCloud, default as UploadCloud, default as UploadCloudIcon } from './icons/cloud-upload.js';\nexport { default as Code2, default as Code2Icon, default as CodeXml, default as CodeXmlIcon, default as LucideCode2, default as LucideCodeXml } from './icons/code-xml.js';\nexport { default as Columns, default as Columns2, default as Columns2Icon, default as ColumnsIcon, default as LucideColumns, default as LucideColumns2 } from './icons/columns-2.js';\nexport { default as Columns3Cog, default as Columns3CogIcon, default as ColumnsSettings, default as ColumnsSettingsIcon, default as LucideColumns3Cog, default as LucideColumnsSettings, default as LucideTableConfig, default as TableConfig, default as TableConfigIcon } from './icons/columns-3-cog.js';\nexport { default as Columns3, default as Columns3Icon, default as LucideColumns3, default as LucidePanelsLeftRight, default as PanelsLeftRight, default as PanelsLeftRightIcon } from './icons/columns-3.js';\nexport { default as Contact2, default as Contact2Icon, default as ContactRound, default as ContactRoundIcon, default as LucideContact2, default as LucideContactRound } from './icons/contact-round.js';\nexport { default as DiamondPercent, default as DiamondPercentIcon, default as LucideDiamondPercent, default as LucidePercentDiamond, default as PercentDiamond, default as PercentDiamondIcon } from './icons/diamond-percent.js';\nexport { default as Earth, default as EarthIcon, default as Globe2, default as Globe2Icon, default as LucideEarth, default as LucideGlobe2 } from './icons/earth.js';\nexport { default as EllipsisVertical, default as EllipsisVerticalIcon, default as LucideEllipsisVertical, default as LucideMoreVertical, default as MoreVertical, default as MoreVerticalIcon } from './icons/ellipsis-vertical.js';\nexport { default as Ellipsis, default as EllipsisIcon, default as LucideEllipsis, default as LucideMoreHorizontal, default as MoreHorizontal, default as MoreHorizontalIcon } from './icons/ellipsis.js';\nexport { default as FileAxis3D, default as FileAxis3DIcon, default as FileAxis3d, default as FileAxis3dIcon, default as LucideFileAxis3D, default as LucideFileAxis3d } from './icons/file-axis-3d.js';\nexport { default as FileBarChart, default as FileBarChartIcon, default as FileChartColumnIncreasing, default as FileChartColumnIncreasingIcon, default as LucideFileBarChart, default as LucideFileChartColumnIncreasing } from './icons/file-chart-column-increasing.js';\nexport { default as FileBarChart2, default as FileBarChart2Icon, default as FileChartColumn, default as FileChartColumnIcon, default as LucideFileBarChart2, default as LucideFileChartColumn } from './icons/file-chart-column.js';\nexport { default as FileChartLine, default as FileChartLineIcon, default as FileLineChart, default as FileLineChartIcon, default as LucideFileChartLine, default as LucideFileLineChart } from './icons/file-chart-line.js';\nexport { default as FileChartPie, default as FileChartPieIcon, default as FilePieChart, default as FilePieChartIcon, default as LucideFileChartPie, default as LucideFilePieChart } from './icons/file-chart-pie.js';\nexport { default as FileCog, default as FileCog2, default as FileCog2Icon, default as FileCogIcon, default as LucideFileCog, default as LucideFileCog2 } from './icons/file-cog.js';\nexport { default as FilePenLine, default as FilePenLineIcon, default as FileSignature, default as FileSignatureIcon, default as LucideFilePenLine, default as LucideFileSignature } from './icons/file-pen-line.js';\nexport { default as FileEdit, default as FileEditIcon, default as FilePen, default as FilePenIcon, default as LucideFileEdit, default as LucideFilePen } from './icons/file-pen.js';\nexport { default as FilePlay, default as FilePlayIcon, default as FileVideo, default as FileVideoIcon, default as LucideFilePlay, default as LucideFileVideo } from './icons/file-play.js';\nexport { default as FileQuestion, default as FileQuestionIcon, default as FileQuestionMark, default as FileQuestionMarkIcon, default as LucideFileQuestion, default as LucideFileQuestionMark } from './icons/file-question-mark.js';\nexport { default as FileVideo2, default as FileVideo2Icon, default as FileVideoCamera, default as FileVideoCameraIcon, default as LucideFileVideo2, default as LucideFileVideoCamera } from './icons/file-video-camera.js';\nexport { default as FolderCog, default as FolderCog2, default as FolderCog2Icon, default as FolderCogIcon, default as LucideFolderCog, default as LucideFolderCog2 } from './icons/folder-cog.js';\nexport { default as FolderEdit, default as FolderEditIcon, default as FolderPen, default as FolderPenIcon, default as LucideFolderEdit, default as LucideFolderPen } from './icons/folder-pen.js';\nexport { default as FilterX, default as FilterXIcon, default as FunnelX, default as FunnelXIcon, default as LucideFilterX, default as LucideFunnelX } from './icons/funnel-x.js';\nexport { default as Filter, default as FilterIcon, default as Funnel, default as FunnelIcon, default as LucideFilter, default as LucideFunnel } from './icons/funnel.js';\nexport { default as GitCommit, default as GitCommitHorizontal, default as GitCommitHorizontalIcon, default as GitCommitIcon, default as LucideGitCommit, default as LucideGitCommitHorizontal } from './icons/git-commit-horizontal.js';\nexport { default as Grid2X2Check, default as Grid2X2CheckIcon, default as Grid2x2Check, default as Grid2x2CheckIcon, default as LucideGrid2X2Check, default as LucideGrid2x2Check } from './icons/grid-2x2-check.js';\nexport { default as Grid2X2Plus, default as Grid2X2PlusIcon, default as Grid2x2Plus, default as Grid2x2PlusIcon, default as LucideGrid2X2Plus, default as LucideGrid2x2Plus } from './icons/grid-2x2-plus.js';\nexport { default as Grid2X2X, default as Grid2X2XIcon, default as Grid2x2X, default as Grid2x2XIcon, default as LucideGrid2X2X, default as LucideGrid2x2X } from './icons/grid-2x2-x.js';\nexport { default as Grid2X2, default as Grid2X2Icon, default as Grid2x2, default as Grid2x2Icon, default as LucideGrid2X2, default as LucideGrid2x2 } from './icons/grid-2x2.js';\nexport { default as Grid, default as Grid3X3, default as Grid3X3Icon, default as Grid3x3, default as Grid3x3Icon, default as GridIcon, default as LucideGrid, default as LucideGrid3X3, default as LucideGrid3x3 } from './icons/grid-3x3.js';\nexport { default as Grab, default as GrabIcon, default as HandGrab, default as HandGrabIcon, default as LucideGrab, default as LucideHandGrab } from './icons/hand-grab.js';\nexport { default as HandHelping, default as HandHelpingIcon, default as HelpingHand, default as HelpingHandIcon, default as LucideHandHelping, default as LucideHelpingHand } from './icons/hand-helping.js';\nexport { default as Home, default as HomeIcon, default as House, default as HouseIcon, default as LucideHome, default as LucideHouse } from './icons/house.js';\nexport { default as IceCream2, default as IceCream2Icon, default as IceCreamBowl, default as IceCreamBowlIcon, default as LucideIceCream2, default as LucideIceCreamBowl } from './icons/ice-cream-bowl.js';\nexport { default as IceCream, default as IceCreamCone, default as IceCreamConeIcon, default as IceCreamIcon, default as LucideIceCream, default as LucideIceCreamCone } from './icons/ice-cream-cone.js';\nexport { default as Laptop2, default as Laptop2Icon, default as LaptopMinimal, default as LaptopMinimalIcon, default as LucideLaptop2, default as LucideLaptopMinimal } from './icons/laptop-minimal.js';\nexport { default as Layers, default as Layers3, default as Layers3Icon, default as LayersIcon, default as LucideLayers, default as LucideLayers3 } from './icons/layers.js';\nexport { default as IndentDecrease, default as IndentDecreaseIcon, default as ListIndentDecrease, default as ListIndentDecreaseIcon, default as LucideIndentDecrease, default as LucideListIndentDecrease, default as LucideOutdent, default as Outdent, default as OutdentIcon } from './icons/list-indent-decrease.js';\nexport { default as Indent, default as IndentIcon, default as IndentIncrease, default as IndentIncreaseIcon, default as ListIndentIncrease, default as ListIndentIncreaseIcon, default as LucideIndent, default as LucideIndentIncrease, default as LucideListIndentIncrease } from './icons/list-indent-increase.js';\nexport { default as Loader2, default as Loader2Icon, default as LoaderCircle, default as LoaderCircleIcon, default as LucideLoader2, default as LucideLoaderCircle } from './icons/loader-circle.js';\nexport { default as LockKeyholeOpen, default as LockKeyholeOpenIcon, default as LucideLockKeyholeOpen, default as LucideUnlockKeyhole, default as UnlockKeyhole, default as UnlockKeyholeIcon } from './icons/lock-keyhole-open.js';\nexport { default as LockOpen, default as LockOpenIcon, default as LucideLockOpen, default as LucideUnlock, default as Unlock, default as UnlockIcon } from './icons/lock-open.js';\nexport { default as LucideMailQuestion, default as LucideMailQuestionMark, default as MailQuestion, default as MailQuestionIcon, default as MailQuestionMark, default as MailQuestionMarkIcon } from './icons/mail-question-mark.js';\nexport { default as LocationEdit, default as LocationEditIcon, default as LucideLocationEdit, default as LucideMapPinPen, default as MapPinPen, default as MapPinPenIcon } from './icons/map-pin-pen.js';\nexport { default as LucideMessageCircleQuestion, default as LucideMessageCircleQuestionMark, default as MessageCircleQuestion, default as MessageCircleQuestionIcon, default as MessageCircleQuestionMark, default as MessageCircleQuestionMarkIcon } from './icons/message-circle-question-mark.js';\nexport { default as LucideMic2, default as LucideMicVocal, default as Mic2, default as Mic2Icon, default as MicVocal, default as MicVocalIcon } from './icons/mic-vocal.js';\nexport { default as LucideMove3D, default as LucideMove3d, default as Move3D, default as Move3DIcon, default as Move3d, default as Move3dIcon } from './icons/move-3d.js';\nexport { default as AlertOctagon, default as AlertOctagonIcon, default as LucideAlertOctagon, default as LucideOctagonAlert, default as OctagonAlert, default as OctagonAlertIcon } from './icons/octagon-alert.js';\nexport { default as LucideOctagonPause, default as LucidePauseOctagon, default as OctagonPause, default as OctagonPauseIcon, default as PauseOctagon, default as PauseOctagonIcon } from './icons/octagon-pause.js';\nexport { default as LucideOctagonX, default as LucideXOctagon, default as OctagonX, default as OctagonXIcon, default as XOctagon, default as XOctagonIcon } from './icons/octagon-x.js';\nexport { default as LucidePaintbrush2, default as LucidePaintbrushVertical, default as Paintbrush2, default as Paintbrush2Icon, default as PaintbrushVertical, default as PaintbrushVerticalIcon } from './icons/paintbrush-vertical.js';\nexport { default as LucidePanelBottomDashed, default as LucidePanelBottomInactive, default as PanelBottomDashed, default as PanelBottomDashedIcon, default as PanelBottomInactive, default as PanelBottomInactiveIcon } from './icons/panel-bottom-dashed.js';\nexport { default as LucidePanelLeftClose, default as LucideSidebarClose, default as PanelLeftClose, default as PanelLeftCloseIcon, default as SidebarClose, default as SidebarCloseIcon } from './icons/panel-left-close.js';\nexport { default as LucidePanelLeftDashed, default as LucidePanelLeftInactive, default as PanelLeftDashed, default as PanelLeftDashedIcon, default as PanelLeftInactive, default as PanelLeftInactiveIcon } from './icons/panel-left-dashed.js';\nexport { default as LucidePanelLeftOpen, default as LucideSidebarOpen, default as PanelLeftOpen, default as PanelLeftOpenIcon, default as SidebarOpen, default as SidebarOpenIcon } from './icons/panel-left-open.js';\nexport { default as LucidePanelLeft, default as LucideSidebar, default as PanelLeft, default as PanelLeftIcon, default as Sidebar, default as SidebarIcon } from './icons/panel-left.js';\nexport { default as LucidePanelRightDashed, default as LucidePanelRightInactive, default as PanelRightDashed, default as PanelRightDashedIcon, default as PanelRightInactive, default as PanelRightInactiveIcon } from './icons/panel-right-dashed.js';\nexport { default as LucidePanelTopDashed, default as LucidePanelTopInactive, default as PanelTopDashed, default as PanelTopDashedIcon, default as PanelTopInactive, default as PanelTopInactiveIcon } from './icons/panel-top-dashed.js';\nexport { default as Layout, default as LayoutIcon, default as LucideLayout, default as LucidePanelsTopLeft, default as PanelsTopLeft, default as PanelsTopLeftIcon } from './icons/panels-top-left.js';\nexport { default as Edit3, default as Edit3Icon, default as LucideEdit3, default as LucidePenLine, default as PenLine, default as PenLineIcon } from './icons/pen-line.js';\nexport { default as Edit2, default as Edit2Icon, default as LucideEdit2, default as LucidePen, default as Pen, default as PenIcon } from './icons/pen.js';\nexport { default as LucidePlugZap, default as LucidePlugZap2, default as PlugZap, default as PlugZap2, default as PlugZap2Icon, default as PlugZapIcon } from './icons/plug-zap.js';\nexport { default as FormInput, default as FormInputIcon, default as LucideFormInput, default as LucideRectangleEllipsis, default as RectangleEllipsis, default as RectangleEllipsisIcon } from './icons/rectangle-ellipsis.js';\nexport { default as LucideRotate3D, default as LucideRotate3d, default as Rotate3D, default as Rotate3DIcon, default as Rotate3d, default as Rotate3dIcon } from './icons/rotate-3d.js';\nexport { default as LucideRows, default as LucideRows2, default as Rows, default as Rows2, default as Rows2Icon, default as RowsIcon } from './icons/rows-2.js';\nexport { default as LucidePanelsTopBottom, default as LucideRows3, default as PanelsTopBottom, default as PanelsTopBottomIcon, default as Rows3, default as Rows3Icon } from './icons/rows-3.js';\nexport { default as LucideScale3D, default as LucideScale3d, default as Scale3D, default as Scale3DIcon, default as Scale3d, default as Scale3dIcon } from './icons/scale-3d.js';\nexport { default as LucideSendHorizonal, default as LucideSendHorizontal, default as SendHorizonal, default as SendHorizonalIcon, default as SendHorizontal, default as SendHorizontalIcon } from './icons/send-horizontal.js';\nexport { default as LucideShieldQuestion, default as LucideShieldQuestionMark, default as ShieldQuestion, default as ShieldQuestionIcon, default as ShieldQuestionMark, default as ShieldQuestionMarkIcon } from './icons/shield-question-mark.js';\nexport { default as LucideShieldClose, default as LucideShieldX, default as ShieldClose, default as ShieldCloseIcon, default as ShieldX, default as ShieldXIcon } from './icons/shield-x.js';\nexport { default as LucideSliders, default as LucideSlidersVertical, default as Sliders, default as SlidersIcon, default as SlidersVertical, default as SlidersVerticalIcon } from './icons/sliders-vertical.js';\nexport { default as LucideSparkles, default as LucideStars, default as Sparkles, default as SparklesIcon, default as Stars, default as StarsIcon } from './icons/sparkles.js';\nexport { default as ActivitySquare, default as ActivitySquareIcon, default as LucideActivitySquare, default as LucideSquareActivity, default as SquareActivity, default as SquareActivityIcon } from './icons/square-activity.js';\nexport { default as ArrowDownLeftSquare, default as ArrowDownLeftSquareIcon, default as LucideArrowDownLeftSquare, default as LucideSquareArrowDownLeft, default as SquareArrowDownLeft, default as SquareArrowDownLeftIcon } from './icons/square-arrow-down-left.js';\nexport { default as ArrowDownRightSquare, default as ArrowDownRightSquareIcon, default as LucideArrowDownRightSquare, default as LucideSquareArrowDownRight, default as SquareArrowDownRight, default as SquareArrowDownRightIcon } from './icons/square-arrow-down-right.js';\nexport { default as ArrowLeftSquare, default as ArrowLeftSquareIcon, default as LucideArrowLeftSquare, default as LucideSquareArrowLeft, default as SquareArrowLeft, default as SquareArrowLeftIcon } from './icons/square-arrow-left.js';\nexport { default as ArrowDownSquare, default as ArrowDownSquareIcon, default as LucideArrowDownSquare, default as LucideSquareArrowDown, default as SquareArrowDown, default as SquareArrowDownIcon } from './icons/square-arrow-down.js';\nexport { default as ArrowDownLeftFromSquare, default as ArrowDownLeftFromSquareIcon, default as LucideArrowDownLeftFromSquare, default as LucideSquareArrowOutDownLeft, default as SquareArrowOutDownLeft, default as SquareArrowOutDownLeftIcon } from './icons/square-arrow-out-down-left.js';\nexport { default as ArrowDownRightFromSquare, default as ArrowDownRightFromSquareIcon, default as LucideArrowDownRightFromSquare, default as LucideSquareArrowOutDownRight, default as SquareArrowOutDownRight, default as SquareArrowOutDownRightIcon } from './icons/square-arrow-out-down-right.js';\nexport { default as ArrowUpLeftFromSquare, default as ArrowUpLeftFromSquareIcon, default as LucideArrowUpLeftFromSquare, default as LucideSquareArrowOutUpLeft, default as SquareArrowOutUpLeft, default as SquareArrowOutUpLeftIcon } from './icons/square-arrow-out-up-left.js';\nexport { default as ArrowUpRightFromSquare, default as ArrowUpRightFromSquareIcon, default as LucideArrowUpRightFromSquare, default as LucideSquareArrowOutUpRight, default as SquareArrowOutUpRight, default as SquareArrowOutUpRightIcon } from './icons/square-arrow-out-up-right.js';\nexport { default as ArrowRightSquare, default as ArrowRightSquareIcon, default as LucideArrowRightSquare, default as LucideSquareArrowRight, default as SquareArrowRight, default as SquareArrowRightIcon } from './icons/square-arrow-right.js';\nexport { default as ArrowUpLeftSquare, default as ArrowUpLeftSquareIcon, default as LucideArrowUpLeftSquare, default as LucideSquareArrowUpLeft, default as SquareArrowUpLeft, default as SquareArrowUpLeftIcon } from './icons/square-arrow-up-left.js';\nexport { default as ArrowUpRightSquare, default as ArrowUpRightSquareIcon, default as LucideArrowUpRightSquare, default as LucideSquareArrowUpRight, default as SquareArrowUpRight, default as SquareArrowUpRightIcon } from './icons/square-arrow-up-right.js';\nexport { default as ArrowUpSquare, default as ArrowUpSquareIcon, default as LucideArrowUpSquare, default as LucideSquareArrowUp, default as SquareArrowUp, default as SquareArrowUpIcon } from './icons/square-arrow-up.js';\nexport { default as AsteriskSquare, default as AsteriskSquareIcon, default as LucideAsteriskSquare, default as LucideSquareAsterisk, default as SquareAsterisk, default as SquareAsteriskIcon } from './icons/square-asterisk.js';\nexport { default as LucideScissorsSquareDashedBottom, default as LucideSquareBottomDashedScissors, default as ScissorsSquareDashedBottom, default as ScissorsSquareDashedBottomIcon, default as SquareBottomDashedScissors, default as SquareBottomDashedScissorsIcon } from './icons/square-bottom-dashed-scissors.js';\nexport { default as GanttChartSquare, default as GanttChartSquareIcon, default as LucideGanttChartSquare, default as LucideSquareChartGantt, default as LucideSquareGanttChart, default as SquareChartGantt, default as SquareChartGanttIcon, default as SquareGanttChart, default as SquareGanttChartIcon } from './icons/square-chart-gantt.js';\nexport { default as CheckSquare, default as CheckSquareIcon, default as LucideCheckSquare, default as LucideSquareCheckBig, default as SquareCheckBig, default as SquareCheckBigIcon } from './icons/square-check-big.js';\nexport { default as CheckSquare2, default as CheckSquare2Icon, default as LucideCheckSquare2, default as LucideSquareCheck, default as SquareCheck, default as SquareCheckIcon } from './icons/square-check.js';\nexport { default as ChevronDownSquare, default as ChevronDownSquareIcon, default as LucideChevronDownSquare, default as LucideSquareChevronDown, default as SquareChevronDown, default as SquareChevronDownIcon } from './icons/square-chevron-down.js';\nexport { default as ChevronLeftSquare, default as ChevronLeftSquareIcon, default as LucideChevronLeftSquare, default as LucideSquareChevronLeft, default as SquareChevronLeft, default as SquareChevronLeftIcon } from './icons/square-chevron-left.js';\nexport { default as ChevronUpSquare, default as ChevronUpSquareIcon, default as LucideChevronUpSquare, default as LucideSquareChevronUp, default as SquareChevronUp, default as SquareChevronUpIcon } from './icons/square-chevron-up.js';\nexport { default as ChevronRightSquare, default as ChevronRightSquareIcon, default as LucideChevronRightSquare, default as LucideSquareChevronRight, default as SquareChevronRight, default as SquareChevronRightIcon } from './icons/square-chevron-right.js';\nexport { default as CodeSquare, default as CodeSquareIcon, default as LucideCodeSquare, default as LucideSquareCode, default as SquareCode, default as SquareCodeIcon } from './icons/square-code.js';\nexport { default as KanbanSquareDashed, default as KanbanSquareDashedIcon, default as LucideKanbanSquareDashed, default as LucideSquareDashedKanban, default as SquareDashedKanban, default as SquareDashedKanbanIcon } from './icons/square-dashed-kanban.js';\nexport { default as LucideMousePointerSquareDashed, default as LucideSquareDashedMousePointer, default as MousePointerSquareDashed, default as MousePointerSquareDashedIcon, default as SquareDashedMousePointer, default as SquareDashedMousePointerIcon } from './icons/square-dashed-mouse-pointer.js';\nexport { default as BoxSelect, default as BoxSelectIcon, default as LucideBoxSelect, default as LucideSquareDashed, default as SquareDashed, default as SquareDashedIcon } from './icons/square-dashed.js';\nexport { default as DivideSquare, default as DivideSquareIcon, default as LucideDivideSquare, default as LucideSquareDivide, default as SquareDivide, default as SquareDivideIcon } from './icons/square-divide.js';\nexport { default as DotSquare, default as DotSquareIcon, default as LucideDotSquare, default as LucideSquareDot, default as SquareDot, default as SquareDotIcon } from './icons/square-dot.js';\nexport { default as EqualSquare, default as EqualSquareIcon, default as LucideEqualSquare, default as LucideSquareEqual, default as SquareEqual, default as SquareEqualIcon } from './icons/square-equal.js';\nexport { default as FunctionSquare, default as FunctionSquareIcon, default as LucideFunctionSquare, default as LucideSquareFunction, default as SquareFunction, default as SquareFunctionIcon } from './icons/square-function.js';\nexport { default as KanbanSquare, default as KanbanSquareIcon, default as LucideKanbanSquare, default as LucideSquareKanban, default as SquareKanban, default as SquareKanbanIcon } from './icons/square-kanban.js';\nexport { default as LibrarySquare, default as LibrarySquareIcon, default as LucideLibrarySquare, default as LucideSquareLibrary, default as SquareLibrary, default as SquareLibraryIcon } from './icons/square-library.js';\nexport { default as LucideMSquare, default as LucideSquareM, default as MSquare, default as MSquareIcon, default as SquareM, default as SquareMIcon } from './icons/square-m.js';\nexport { default as LucideMenuSquare, default as LucideSquareMenu, default as MenuSquare, default as MenuSquareIcon, default as SquareMenu, default as SquareMenuIcon } from './icons/square-menu.js';\nexport { default as LucideMinusSquare, default as LucideSquareMinus, default as MinusSquare, default as MinusSquareIcon, default as SquareMinus, default as SquareMinusIcon } from './icons/square-minus.js';\nexport { default as Inspect, default as InspectIcon, default as LucideInspect, default as LucideSquareMousePointer, default as SquareMousePointer, default as SquareMousePointerIcon } from './icons/square-mouse-pointer.js';\nexport { default as LucideParkingSquareOff, default as LucideSquareParkingOff, default as ParkingSquareOff, default as ParkingSquareOffIcon, default as SquareParkingOff, default as SquareParkingOffIcon } from './icons/square-parking-off.js';\nexport { default as LucideParkingSquare, default as LucideSquareParking, default as ParkingSquare, default as ParkingSquareIcon, default as SquareParking, default as SquareParkingIcon } from './icons/square-parking.js';\nexport { default as Edit, default as EditIcon, default as LucideEdit, default as LucidePenBox, default as LucidePenSquare, default as LucideSquarePen, default as PenBox, default as PenBoxIcon, default as PenSquare, default as PenSquareIcon, default as SquarePen, default as SquarePenIcon } from './icons/square-pen.js';\nexport { default as LucidePercentSquare, default as LucideSquarePercent, default as PercentSquare, default as PercentSquareIcon, default as SquarePercent, default as SquarePercentIcon } from './icons/square-percent.js';\nexport { default as LucidePiSquare, default as LucideSquarePi, default as PiSquare, default as PiSquareIcon, default as SquarePi, default as SquarePiIcon } from './icons/square-pi.js';\nexport { default as LucidePilcrowSquare, default as LucideSquarePilcrow, default as PilcrowSquare, default as PilcrowSquareIcon, default as SquarePilcrow, default as SquarePilcrowIcon } from './icons/square-pilcrow.js';\nexport { default as LucidePlaySquare, default as LucideSquarePlay, default as PlaySquare, default as PlaySquareIcon, default as SquarePlay, default as SquarePlayIcon } from './icons/square-play.js';\nexport { default as LucidePlusSquare, default as LucideSquarePlus, default as PlusSquare, default as PlusSquareIcon, default as SquarePlus, default as SquarePlusIcon } from './icons/square-plus.js';\nexport { default as LucidePowerSquare, default as LucideSquarePower, default as PowerSquare, default as PowerSquareIcon, default as SquarePower, default as SquarePowerIcon } from './icons/square-power.js';\nexport { default as LucideScissorsSquare, default as LucideSquareScissors, default as ScissorsSquare, default as ScissorsSquareIcon, default as SquareScissors, default as SquareScissorsIcon } from './icons/square-scissors.js';\nexport { default as LucideSigmaSquare, default as LucideSquareSigma, default as SigmaSquare, default as SigmaSquareIcon, default as SquareSigma, default as SquareSigmaIcon } from './icons/square-sigma.js';\nexport { default as LucideSlashSquare, default as LucideSquareSlash, default as SlashSquare, default as SlashSquareIcon, default as SquareSlash, default as SquareSlashIcon } from './icons/square-slash.js';\nexport { default as LucideSplitSquareHorizontal, default as LucideSquareSplitHorizontal, default as SplitSquareHorizontal, default as SplitSquareHorizontalIcon, default as SquareSplitHorizontal, default as SquareSplitHorizontalIcon } from './icons/square-split-horizontal.js';\nexport { default as LucideSplitSquareVertical, default as LucideSquareSplitVertical, default as SplitSquareVertical, default as SplitSquareVerticalIcon, default as SquareSplitVertical, default as SquareSplitVerticalIcon } from './icons/square-split-vertical.js';\nexport { default as LucideSquareTerminal, default as LucideTerminalSquare, default as SquareTerminal, default as SquareTerminalIcon, default as TerminalSquare, default as TerminalSquareIcon } from './icons/square-terminal.js';\nexport { default as LucideSquareUserRound, default as LucideUserSquare2, default as SquareUserRound, default as SquareUserRoundIcon, default as UserSquare2, default as UserSquare2Icon } from './icons/square-user-round.js';\nexport { default as LucideSquareUser, default as LucideUserSquare, default as SquareUser, default as SquareUserIcon, default as UserSquare, default as UserSquareIcon } from './icons/square-user.js';\nexport { default as LucideSquareX, default as LucideXSquare, default as SquareX, default as SquareXIcon, default as XSquare, default as XSquareIcon } from './icons/square-x.js';\nexport { default as LucideTestTube2, default as LucideTestTubeDiagonal, default as TestTube2, default as TestTube2Icon, default as TestTubeDiagonal, default as TestTubeDiagonalIcon } from './icons/test-tube-diagonal.js';\nexport { default as AlignCenter, default as AlignCenterIcon, default as LucideAlignCenter, default as LucideTextAlignCenter, default as TextAlignCenter, default as TextAlignCenterIcon } from './icons/text-align-center.js';\nexport { default as AlignRight, default as AlignRightIcon, default as LucideAlignRight, default as LucideTextAlignEnd, default as TextAlignEnd, default as TextAlignEndIcon } from './icons/text-align-end.js';\nexport { default as AlignJustify, default as AlignJustifyIcon, default as LucideAlignJustify, default as LucideTextAlignJustify, default as TextAlignJustify, default as TextAlignJustifyIcon } from './icons/text-align-justify.js';\nexport { default as AlignLeft, default as AlignLeftIcon, default as LucideAlignLeft, default as LucideText, default as LucideTextAlignStart, default as Text, default as TextAlignStart, default as TextAlignStartIcon, default as TextIcon } from './icons/text-align-start.js';\nexport { default as LetterText, default as LetterTextIcon, default as LucideLetterText, default as LucideTextInitial, default as TextInitial, default as TextInitialIcon } from './icons/text-initial.js';\nexport { default as LucideTextSelect, default as LucideTextSelection, default as TextSelect, default as TextSelectIcon, default as TextSelection, default as TextSelectionIcon } from './icons/text-select.js';\nexport { default as LucideTextWrap, default as LucideWrapText, default as TextWrap, default as TextWrapIcon, default as WrapText, default as WrapTextIcon } from './icons/text-wrap.js';\nexport { default as LucideTrain, default as LucideTramFront, default as Train, default as TrainIcon, default as TramFront, default as TramFrontIcon } from './icons/tram-front.js';\nexport { default as LucidePalmtree, default as LucideTreePalm, default as Palmtree, default as PalmtreeIcon, default as TreePalm, default as TreePalmIcon } from './icons/tree-palm.js';\nexport { default as AlertTriangle, default as AlertTriangleIcon, default as LucideAlertTriangle, default as LucideTriangleAlert, default as TriangleAlert, default as TriangleAlertIcon } from './icons/triangle-alert.js';\nexport { default as LucideTv2, default as LucideTvMinimal, default as Tv2, default as Tv2Icon, default as TvMinimal, default as TvMinimalIcon } from './icons/tv-minimal.js';\nexport { default as LucideSchool2, default as LucideUniversity, default as School2, default as School2Icon, default as University, default as UniversityIcon } from './icons/university.js';\nexport { default as LucideUserCheck2, default as LucideUserRoundCheck, default as UserCheck2, default as UserCheck2Icon, default as UserRoundCheck, default as UserRoundCheckIcon } from './icons/user-round-check.js';\nexport { default as LucideUserCog2, default as LucideUserRoundCog, default as UserCog2, default as UserCog2Icon, default as UserRoundCog, default as UserRoundCogIcon } from './icons/user-round-cog.js';\nexport { default as LucideUserMinus2, default as LucideUserRoundMinus, default as UserMinus2, default as UserMinus2Icon, default as UserRoundMinus, default as UserRoundMinusIcon } from './icons/user-round-minus.js';\nexport { default as LucideUserPlus2, default as LucideUserRoundPlus, default as UserPlus2, default as UserPlus2Icon, default as UserRoundPlus, default as UserRoundPlusIcon } from './icons/user-round-plus.js';\nexport { default as LucideUserRoundX, default as LucideUserX2, default as UserRoundX, default as UserRoundXIcon, default as UserX2, default as UserX2Icon } from './icons/user-round-x.js';\nexport { default as LucideUser2, default as LucideUserRound, default as User2, default as User2Icon, default as UserRound, default as UserRoundIcon } from './icons/user-round.js';\nexport { default as LucideUsers2, default as LucideUsersRound, default as Users2, default as Users2Icon, default as UsersRound, default as UsersRoundIcon } from './icons/users-round.js';\nexport { default as ForkKnifeCrossed, default as ForkKnifeCrossedIcon, default as LucideForkKnifeCrossed, default as LucideUtensilsCrossed, default as UtensilsCrossed, default as UtensilsCrossedIcon } from './icons/utensils-crossed.js';\nexport { default as ForkKnife, default as ForkKnifeIcon, default as LucideForkKnife, default as LucideUtensils, default as Utensils, default as UtensilsIcon } from './icons/utensils.js';\nexport { default as LucideWallet2, default as LucideWalletMinimal, default as Wallet2, default as Wallet2Icon, default as WalletMinimal, default as WalletMinimalIcon } from './icons/wallet-minimal.js';\nexport { default as LucideWand2, default as LucideWandSparkles, default as Wand2, default as Wand2Icon, default as WandSparkles, default as WandSparklesIcon } from './icons/wand-sparkles.js';\nexport { default as AArrowDown, default as AArrowDownIcon, default as LucideAArrowDown } from './icons/a-arrow-down.js';\nexport { default as AArrowUp, default as AArrowUpIcon, default as LucideAArrowUp } from './icons/a-arrow-up.js';\nexport { default as ALargeSmall, default as ALargeSmallIcon, default as LucideALargeSmall } from './icons/a-large-small.js';\nexport { default as Accessibility, default as AccessibilityIcon, default as LucideAccessibility } from './icons/accessibility.js';\nexport { default as Activity, default as ActivityIcon, default as LucideActivity } from './icons/activity.js';\nexport { default as AirVent, default as AirVentIcon, default as LucideAirVent } from './icons/air-vent.js';\nexport { default as Airplay, default as AirplayIcon, default as LucideAirplay } from './icons/airplay.js';\nexport { default as AlarmClockOff, default as AlarmClockOffIcon, default as LucideAlarmClockOff } from './icons/alarm-clock-off.js';\nexport { default as AlarmClock, default as AlarmClockIcon, default as LucideAlarmClock } from './icons/alarm-clock.js';\nexport { default as Album, default as AlbumIcon, default as LucideAlbum } from './icons/album.js';\nexport { default as AlarmSmoke, default as AlarmSmokeIcon, default as LucideAlarmSmoke } from './icons/alarm-smoke.js';\nexport { default as AlignCenterHorizontal, default as AlignCenterHorizontalIcon, default as LucideAlignCenterHorizontal } from './icons/align-center-horizontal.js';\nexport { default as AlignCenterVertical, default as AlignCenterVerticalIcon, default as LucideAlignCenterVertical } from './icons/align-center-vertical.js';\nexport { default as AlignEndHorizontal, default as AlignEndHorizontalIcon, default as LucideAlignEndHorizontal } from './icons/align-end-horizontal.js';\nexport { default as AlignEndVertical, default as AlignEndVerticalIcon, default as LucideAlignEndVertical } from './icons/align-end-vertical.js';\nexport { default as AlignHorizontalDistributeCenter, default as AlignHorizontalDistributeCenterIcon, default as LucideAlignHorizontalDistributeCenter } from './icons/align-horizontal-distribute-center.js';\nexport { default as AlignHorizontalDistributeEnd, default as AlignHorizontalDistributeEndIcon, default as LucideAlignHorizontalDistributeEnd } from './icons/align-horizontal-distribute-end.js';\nexport { default as AlignHorizontalDistributeStart, default as AlignHorizontalDistributeStartIcon, default as LucideAlignHorizontalDistributeStart } from './icons/align-horizontal-distribute-start.js';\nexport { default as AlignHorizontalJustifyCenter, default as AlignHorizontalJustifyCenterIcon, default as LucideAlignHorizontalJustifyCenter } from './icons/align-horizontal-justify-center.js';\nexport { default as AlignHorizontalJustifyEnd, default as AlignHorizontalJustifyEndIcon, default as LucideAlignHorizontalJustifyEnd } from './icons/align-horizontal-justify-end.js';\nexport { default as AlignHorizontalJustifyStart, default as AlignHorizontalJustifyStartIcon, default as LucideAlignHorizontalJustifyStart } from './icons/align-horizontal-justify-start.js';\nexport { default as AlignHorizontalSpaceAround, default as AlignHorizontalSpaceAroundIcon, default as LucideAlignHorizontalSpaceAround } from './icons/align-horizontal-space-around.js';\nexport { default as AlignHorizontalSpaceBetween, default as AlignHorizontalSpaceBetweenIcon, default as LucideAlignHorizontalSpaceBetween } from './icons/align-horizontal-space-between.js';\nexport { default as AlignStartHorizontal, default as AlignStartHorizontalIcon, default as LucideAlignStartHorizontal } from './icons/align-start-horizontal.js';\nexport { default as AlignStartVertical, default as AlignStartVerticalIcon, default as LucideAlignStartVertical } from './icons/align-start-vertical.js';\nexport { default as AlignVerticalDistributeCenter, default as AlignVerticalDistributeCenterIcon, default as LucideAlignVerticalDistributeCenter } from './icons/align-vertical-distribute-center.js';\nexport { default as AlignVerticalDistributeEnd, default as AlignVerticalDistributeEndIcon, default as LucideAlignVerticalDistributeEnd } from './icons/align-vertical-distribute-end.js';\nexport { default as AlignVerticalDistributeStart, default as AlignVerticalDistributeStartIcon, default as LucideAlignVerticalDistributeStart } from './icons/align-vertical-distribute-start.js';\nexport { default as AlignVerticalJustifyCenter, default as AlignVerticalJustifyCenterIcon, default as LucideAlignVerticalJustifyCenter } from './icons/align-vertical-justify-center.js';\nexport { default as AlignVerticalJustifyEnd, default as AlignVerticalJustifyEndIcon, default as LucideAlignVerticalJustifyEnd } from './icons/align-vertical-justify-end.js';\nexport { default as AlignVerticalJustifyStart, default as AlignVerticalJustifyStartIcon, default as LucideAlignVerticalJustifyStart } from './icons/align-vertical-justify-start.js';\nexport { default as AlignVerticalSpaceAround, default as AlignVerticalSpaceAroundIcon, default as LucideAlignVerticalSpaceAround } from './icons/align-vertical-space-around.js';\nexport { default as AlignVerticalSpaceBetween, default as AlignVerticalSpaceBetweenIcon, default as LucideAlignVerticalSpaceBetween } from './icons/align-vertical-space-between.js';\nexport { default as Ambulance, default as AmbulanceIcon, default as LucideAmbulance } from './icons/ambulance.js';\nexport { default as Ampersand, default as AmpersandIcon, default as LucideAmpersand } from './icons/ampersand.js';\nexport { default as Ampersands, default as AmpersandsIcon, default as LucideAmpersands } from './icons/ampersands.js';\nexport { default as Amphora, default as AmphoraIcon, default as LucideAmphora } from './icons/amphora.js';\nexport { default as Anchor, default as AnchorIcon, default as LucideAnchor } from './icons/anchor.js';\nexport { default as Angry, default as AngryIcon, default as LucideAngry } from './icons/angry.js';\nexport { default as Annoyed, default as AnnoyedIcon, default as LucideAnnoyed } from './icons/annoyed.js';\nexport { default as Antenna, default as AntennaIcon, default as LucideAntenna } from './icons/antenna.js';\nexport { default as Anvil, default as AnvilIcon, default as LucideAnvil } from './icons/anvil.js';\nexport { default as AppWindowMac, default as AppWindowMacIcon, default as LucideAppWindowMac } from './icons/app-window-mac.js';\nexport { default as Aperture, default as ApertureIcon, default as LucideAperture } from './icons/aperture.js';\nexport { default as AppWindow, default as AppWindowIcon, default as LucideAppWindow } from './icons/app-window.js';\nexport { default as Apple, default as AppleIcon, default as LucideApple } from './icons/apple.js';\nexport { default as ArchiveRestore, default as ArchiveRestoreIcon, default as LucideArchiveRestore } from './icons/archive-restore.js';\nexport { default as ArchiveX, default as ArchiveXIcon, default as LucideArchiveX } from './icons/archive-x.js';\nexport { default as Archive, default as ArchiveIcon, default as LucideArchive } from './icons/archive.js';\nexport { default as Armchair, default as ArmchairIcon, default as LucideArmchair } from './icons/armchair.js';\nexport { default as ArrowBigDownDash, default as ArrowBigDownDashIcon, default as LucideArrowBigDownDash } from './icons/arrow-big-down-dash.js';\nexport { default as ArrowBigDown, default as ArrowBigDownIcon, default as LucideArrowBigDown } from './icons/arrow-big-down.js';\nexport { default as ArrowBigLeftDash, default as ArrowBigLeftDashIcon, default as LucideArrowBigLeftDash } from './icons/arrow-big-left-dash.js';\nexport { default as ArrowBigLeft, default as ArrowBigLeftIcon, default as LucideArrowBigLeft } from './icons/arrow-big-left.js';\nexport { default as ArrowBigRightDash, default as ArrowBigRightDashIcon, default as LucideArrowBigRightDash } from './icons/arrow-big-right-dash.js';\nexport { default as ArrowBigUpDash, default as ArrowBigUpDashIcon, default as LucideArrowBigUpDash } from './icons/arrow-big-up-dash.js';\nexport { default as ArrowBigRight, default as ArrowBigRightIcon, default as LucideArrowBigRight } from './icons/arrow-big-right.js';\nexport { default as ArrowBigUp, default as ArrowBigUpIcon, default as LucideArrowBigUp } from './icons/arrow-big-up.js';\nexport { default as ArrowDownFromLine, default as ArrowDownFromLineIcon, default as LucideArrowDownFromLine } from './icons/arrow-down-from-line.js';\nexport { default as ArrowDownLeft, default as ArrowDownLeftIcon, default as LucideArrowDownLeft } from './icons/arrow-down-left.js';\nexport { default as ArrowDownNarrowWide, default as ArrowDownNarrowWideIcon, default as LucideArrowDownNarrowWide } from './icons/arrow-down-narrow-wide.js';\nexport { default as ArrowDownRight, default as ArrowDownRightIcon, default as LucideArrowDownRight } from './icons/arrow-down-right.js';\nexport { default as ArrowDownToDot, default as ArrowDownToDotIcon, default as LucideArrowDownToDot } from './icons/arrow-down-to-dot.js';\nexport { default as ArrowDownToLine, default as ArrowDownToLineIcon, default as LucideArrowDownToLine } from './icons/arrow-down-to-line.js';\nexport { default as ArrowDownUp, default as ArrowDownUpIcon, default as LucideArrowDownUp } from './icons/arrow-down-up.js';\nexport { default as ArrowDown, default as ArrowDownIcon, default as LucideArrowDown } from './icons/arrow-down.js';\nexport { default as ArrowLeftFromLine, default as ArrowLeftFromLineIcon, default as LucideArrowLeftFromLine } from './icons/arrow-left-from-line.js';\nexport { default as ArrowLeftRight, default as ArrowLeftRightIcon, default as LucideArrowLeftRight } from './icons/arrow-left-right.js';\nexport { default as ArrowLeftToLine, default as ArrowLeftToLineIcon, default as LucideArrowLeftToLine } from './icons/arrow-left-to-line.js';\nexport { default as ArrowLeft, default as ArrowLeftIcon, default as LucideArrowLeft } from './icons/arrow-left.js';\nexport { default as ArrowRightFromLine, default as ArrowRightFromLineIcon, default as LucideArrowRightFromLine } from './icons/arrow-right-from-line.js';\nexport { default as ArrowRightLeft, default as ArrowRightLeftIcon, default as LucideArrowRightLeft } from './icons/arrow-right-left.js';\nexport { default as ArrowRightToLine, default as ArrowRightToLineIcon, default as LucideArrowRightToLine } from './icons/arrow-right-to-line.js';\nexport { default as ArrowRight, default as ArrowRightIcon, default as LucideArrowRight } from './icons/arrow-right.js';\nexport { default as ArrowUpDown, default as ArrowUpDownIcon, default as LucideArrowUpDown } from './icons/arrow-up-down.js';\nexport { default as ArrowUpFromDot, default as ArrowUpFromDotIcon, default as LucideArrowUpFromDot } from './icons/arrow-up-from-dot.js';\nexport { default as ArrowUpFromLine, default as ArrowUpFromLineIcon, default as LucideArrowUpFromLine } from './icons/arrow-up-from-line.js';\nexport { default as ArrowUpLeft, default as ArrowUpLeftIcon, default as LucideArrowUpLeft } from './icons/arrow-up-left.js';\nexport { default as ArrowUpRight, default as ArrowUpRightIcon, default as LucideArrowUpRight } from './icons/arrow-up-right.js';\nexport { default as ArrowUpToLine, default as ArrowUpToLineIcon, default as LucideArrowUpToLine } from './icons/arrow-up-to-line.js';\nexport { default as ArrowUpWideNarrow, default as ArrowUpWideNarrowIcon, default as LucideArrowUpWideNarrow } from './icons/arrow-up-wide-narrow.js';\nexport { default as ArrowUp, default as ArrowUpIcon, default as LucideArrowUp } from './icons/arrow-up.js';\nexport { default as ArrowsUpFromLine, default as ArrowsUpFromLineIcon, default as LucideArrowsUpFromLine } from './icons/arrows-up-from-line.js';\nexport { default as Asterisk, default as AsteriskIcon, default as LucideAsterisk } from './icons/asterisk.js';\nexport { default as AtSign, default as AtSignIcon, default as LucideAtSign } from './icons/at-sign.js';\nexport { default as Atom, default as AtomIcon, default as LucideAtom } from './icons/atom.js';\nexport { default as AudioLines, default as AudioLinesIcon, default as LucideAudioLines } from './icons/audio-lines.js';\nexport { default as Award, default as AwardIcon, default as LucideAward } from './icons/award.js';\nexport { default as AudioWaveform, default as AudioWaveformIcon, default as LucideAudioWaveform } from './icons/audio-waveform.js';\nexport { default as Axe, default as AxeIcon, default as LucideAxe } from './icons/axe.js';\nexport { default as Baby, default as BabyIcon, default as LucideBaby } from './icons/baby.js';\nexport { default as Backpack, default as BackpackIcon, default as LucideBackpack } from './icons/backpack.js';\nexport { default as BadgeAlert, default as BadgeAlertIcon, default as LucideBadgeAlert } from './icons/badge-alert.js';\nexport { default as BadgeCent, default as BadgeCentIcon, default as LucideBadgeCent } from './icons/badge-cent.js';\nexport { default as BadgeDollarSign, default as BadgeDollarSignIcon, default as LucideBadgeDollarSign } from './icons/badge-dollar-sign.js';\nexport { default as BadgeEuro, default as BadgeEuroIcon, default as LucideBadgeEuro } from './icons/badge-euro.js';\nexport { default as BadgeIndianRupee, default as BadgeIndianRupeeIcon, default as LucideBadgeIndianRupee } from './icons/badge-indian-rupee.js';\nexport { default as BadgeInfo, default as BadgeInfoIcon, default as LucideBadgeInfo } from './icons/badge-info.js';\nexport { default as BadgeJapaneseYen, default as BadgeJapaneseYenIcon, default as LucideBadgeJapaneseYen } from './icons/badge-japanese-yen.js';\nexport { default as BadgeMinus, default as BadgeMinusIcon, default as LucideBadgeMinus } from './icons/badge-minus.js';\nexport { default as BadgePlus, default as BadgePlusIcon, default as LucideBadgePlus } from './icons/badge-plus.js';\nexport { default as BadgePoundSterling, default as BadgePoundSterlingIcon, default as LucideBadgePoundSterling } from './icons/badge-pound-sterling.js';\nexport { default as BadgePercent, default as BadgePercentIcon, default as LucideBadgePercent } from './icons/badge-percent.js';\nexport { default as BadgeRussianRuble, default as BadgeRussianRubleIcon, default as LucideBadgeRussianRuble } from './icons/badge-russian-ruble.js';\nexport { default as BadgeSwissFranc, default as BadgeSwissFrancIcon, default as LucideBadgeSwissFranc } from './icons/badge-swiss-franc.js';\nexport { default as BadgeTurkishLira, default as BadgeTurkishLiraIcon, default as LucideBadgeTurkishLira } from './icons/badge-turkish-lira.js';\nexport { default as BadgeX, default as BadgeXIcon, default as LucideBadgeX } from './icons/badge-x.js';\nexport { default as Badge, default as BadgeIcon, default as LucideBadge } from './icons/badge.js';\nexport { default as BaggageClaim, default as BaggageClaimIcon, default as LucideBaggageClaim } from './icons/baggage-claim.js';\nexport { default as Ban, default as BanIcon, default as LucideBan } from './icons/ban.js';\nexport { default as Banana, default as BananaIcon, default as LucideBanana } from './icons/banana.js';\nexport { default as Bandage, default as BandageIcon, default as LucideBandage } from './icons/bandage.js';\nexport { default as BanknoteArrowDown, default as BanknoteArrowDownIcon, default as LucideBanknoteArrowDown } from './icons/banknote-arrow-down.js';\nexport { default as BanknoteX, default as BanknoteXIcon, default as LucideBanknoteX } from './icons/banknote-x.js';\nexport { default as BanknoteArrowUp, default as BanknoteArrowUpIcon, default as LucideBanknoteArrowUp } from './icons/banknote-arrow-up.js';\nexport { default as Banknote, default as BanknoteIcon, default as LucideBanknote } from './icons/banknote.js';\nexport { default as Barcode, default as BarcodeIcon, default as LucideBarcode } from './icons/barcode.js';\nexport { default as Baseline, default as BaselineIcon, default as LucideBaseline } from './icons/baseline.js';\nexport { default as Barrel, default as BarrelIcon, default as LucideBarrel } from './icons/barrel.js';\nexport { default as Bath, default as BathIcon, default as LucideBath } from './icons/bath.js';\nexport { default as BatteryCharging, default as BatteryChargingIcon, default as LucideBatteryCharging } from './icons/battery-charging.js';\nexport { default as BatteryFull, default as BatteryFullIcon, default as LucideBatteryFull } from './icons/battery-full.js';\nexport { default as BatteryLow, default as BatteryLowIcon, default as LucideBatteryLow } from './icons/battery-low.js';\nexport { default as BatteryMedium, default as BatteryMediumIcon, default as LucideBatteryMedium } from './icons/battery-medium.js';\nexport { default as BatteryPlus, default as BatteryPlusIcon, default as LucideBatteryPlus } from './icons/battery-plus.js';\nexport { default as BatteryWarning, default as BatteryWarningIcon, default as LucideBatteryWarning } from './icons/battery-warning.js';\nexport { default as Battery, default as BatteryIcon, default as LucideBattery } from './icons/battery.js';\nexport { default as Beaker, default as BeakerIcon, default as LucideBeaker } from './icons/beaker.js';\nexport { default as BeanOff, default as BeanOffIcon, default as LucideBeanOff } from './icons/bean-off.js';\nexport { default as Bean, default as BeanIcon, default as LucideBean } from './icons/bean.js';\nexport { default as BedDouble, default as BedDoubleIcon, default as LucideBedDouble } from './icons/bed-double.js';\nexport { default as BedSingle, default as BedSingleIcon, default as LucideBedSingle } from './icons/bed-single.js';\nexport { default as Bed, default as BedIcon, default as LucideBed } from './icons/bed.js';\nexport { default as Beef, default as BeefIcon, default as LucideBeef } from './icons/beef.js';\nexport { default as BeerOff, default as BeerOffIcon, default as LucideBeerOff } from './icons/beer-off.js';\nexport { default as BellDot, default as BellDotIcon, default as LucideBellDot } from './icons/bell-dot.js';\nexport { default as Beer, default as BeerIcon, default as LucideBeer } from './icons/beer.js';\nexport { default as BellElectric, default as BellElectricIcon, default as LucideBellElectric } from './icons/bell-electric.js';\nexport { default as BellMinus, default as BellMinusIcon, default as LucideBellMinus } from './icons/bell-minus.js';\nexport { default as BellOff, default as BellOffIcon, default as LucideBellOff } from './icons/bell-off.js';\nexport { default as BellPlus, default as BellPlusIcon, default as LucideBellPlus } from './icons/bell-plus.js';\nexport { default as BellRing, default as BellRingIcon, default as LucideBellRing } from './icons/bell-ring.js';\nexport { default as Bell, default as BellIcon, default as LucideBell } from './icons/bell.js';\nexport { default as BetweenVerticalEnd, default as BetweenVerticalEndIcon, default as LucideBetweenVerticalEnd } from './icons/between-vertical-end.js';\nexport { default as BetweenVerticalStart, default as BetweenVerticalStartIcon, default as LucideBetweenVerticalStart } from './icons/between-vertical-start.js';\nexport { default as BicepsFlexed, default as BicepsFlexedIcon, default as LucideBicepsFlexed } from './icons/biceps-flexed.js';\nexport { default as Bike, default as BikeIcon, default as LucideBike } from './icons/bike.js';\nexport { default as Binary, default as BinaryIcon, default as LucideBinary } from './icons/binary.js';\nexport { default as Binoculars, default as BinocularsIcon, default as LucideBinoculars } from './icons/binoculars.js';\nexport { default as Biohazard, default as BiohazardIcon, default as LucideBiohazard } from './icons/biohazard.js';\nexport { default as Bird, default as BirdIcon, default as LucideBird } from './icons/bird.js';\nexport { default as Bitcoin, default as BitcoinIcon, default as LucideBitcoin } from './icons/bitcoin.js';\nexport { default as Blend, default as BlendIcon, default as LucideBlend } from './icons/blend.js';\nexport { default as Blinds, default as BlindsIcon, default as LucideBlinds } from './icons/blinds.js';\nexport { default as Blocks, default as BlocksIcon, default as LucideBlocks } from './icons/blocks.js';\nexport { default as BluetoothConnected, default as BluetoothConnectedIcon, default as LucideBluetoothConnected } from './icons/bluetooth-connected.js';\nexport { default as BluetoothOff, default as BluetoothOffIcon, default as LucideBluetoothOff } from './icons/bluetooth-off.js';\nexport { default as Bluetooth, default as BluetoothIcon, default as LucideBluetooth } from './icons/bluetooth.js';\nexport { default as BluetoothSearching, default as BluetoothSearchingIcon, default as LucideBluetoothSearching } from './icons/bluetooth-searching.js';\nexport { default as Bold, default as BoldIcon, default as LucideBold } from './icons/bold.js';\nexport { default as Bolt, default as BoltIcon, default as LucideBolt } from './icons/bolt.js';\nexport { default as Bomb, default as BombIcon, default as LucideBomb } from './icons/bomb.js';\nexport { default as Bone, default as BoneIcon, default as LucideBone } from './icons/bone.js';\nexport { default as BookA, default as BookAIcon, default as LucideBookA } from './icons/book-a.js';\nexport { default as BookAlert, default as BookAlertIcon, default as LucideBookAlert } from './icons/book-alert.js';\nexport { default as BookAudio, default as BookAudioIcon, default as LucideBookAudio } from './icons/book-audio.js';\nexport { default as BookCheck, default as BookCheckIcon, default as LucideBookCheck } from './icons/book-check.js';\nexport { default as BookCopy, default as BookCopyIcon, default as LucideBookCopy } from './icons/book-copy.js';\nexport { default as BookDown, default as BookDownIcon, default as LucideBookDown } from './icons/book-down.js';\nexport { default as BookHeadphones, default as BookHeadphonesIcon, default as LucideBookHeadphones } from './icons/book-headphones.js';\nexport { default as BookHeart, default as BookHeartIcon, default as LucideBookHeart } from './icons/book-heart.js';\nexport { default as BookImage, default as BookImageIcon, default as LucideBookImage } from './icons/book-image.js';\nexport { default as BookKey, default as BookKeyIcon, default as LucideBookKey } from './icons/book-key.js';\nexport { default as BookLock, default as BookLockIcon, default as LucideBookLock } from './icons/book-lock.js';\nexport { default as BookMarked, default as BookMarkedIcon, default as LucideBookMarked } from './icons/book-marked.js';\nexport { default as BookMinus, default as BookMinusIcon, default as LucideBookMinus } from './icons/book-minus.js';\nexport { default as BookOpenCheck, default as BookOpenCheckIcon, default as LucideBookOpenCheck } from './icons/book-open-check.js';\nexport { default as BookOpenText, default as BookOpenTextIcon, default as LucideBookOpenText } from './icons/book-open-text.js';\nexport { default as BookOpen, default as BookOpenIcon, default as LucideBookOpen } from './icons/book-open.js';\nexport { default as BookPlus, default as BookPlusIcon, default as LucideBookPlus } from './icons/book-plus.js';\nexport { default as BookType, default as BookTypeIcon, default as LucideBookType } from './icons/book-type.js';\nexport { default as BookText, default as BookTextIcon, default as LucideBookText } from './icons/book-text.js';\nexport { default as BookUp2, default as BookUp2Icon, default as LucideBookUp2 } from './icons/book-up-2.js';\nexport { default as BookUp, default as BookUpIcon, default as LucideBookUp } from './icons/book-up.js';\nexport { default as BookUser, default as BookUserIcon, default as LucideBookUser } from './icons/book-user.js';\nexport { default as BookX, default as BookXIcon, default as LucideBookX } from './icons/book-x.js';\nexport { default as Book, default as BookIcon, default as LucideBook } from './icons/book.js';\nexport { default as BookmarkCheck, default as BookmarkCheckIcon, default as LucideBookmarkCheck } from './icons/bookmark-check.js';\nexport { default as BookmarkPlus, default as BookmarkPlusIcon, default as LucideBookmarkPlus } from './icons/bookmark-plus.js';\nexport { default as BookmarkMinus, default as BookmarkMinusIcon, default as LucideBookmarkMinus } from './icons/bookmark-minus.js';\nexport { default as BookmarkX, default as BookmarkXIcon, default as LucideBookmarkX } from './icons/bookmark-x.js';\nexport { default as Bookmark, default as BookmarkIcon, default as LucideBookmark } from './icons/bookmark.js';\nexport { default as BoomBox, default as BoomBoxIcon, default as LucideBoomBox } from './icons/boom-box.js';\nexport { default as BotMessageSquare, default as BotMessageSquareIcon, default as LucideBotMessageSquare } from './icons/bot-message-square.js';\nexport { default as BotOff, default as BotOffIcon, default as LucideBotOff } from './icons/bot-off.js';\nexport { default as Bot, default as BotIcon, default as LucideBot } from './icons/bot.js';\nexport { default as BottleWine, default as BottleWineIcon, default as LucideBottleWine } from './icons/bottle-wine.js';\nexport { default as BowArrow, default as BowArrowIcon, default as LucideBowArrow } from './icons/bow-arrow.js';\nexport { default as Box, default as BoxIcon, default as LucideBox } from './icons/box.js';\nexport { default as Boxes, default as BoxesIcon, default as LucideBoxes } from './icons/boxes.js';\nexport { default as Brackets, default as BracketsIcon, default as LucideBrackets } from './icons/brackets.js';\nexport { default as BrainCircuit, default as BrainCircuitIcon, default as LucideBrainCircuit } from './icons/brain-circuit.js';\nexport { default as BrainCog, default as BrainCogIcon, default as LucideBrainCog } from './icons/brain-cog.js';\nexport { default as Brain, default as BrainIcon, default as LucideBrain } from './icons/brain.js';\nexport { default as BrickWallFire, default as BrickWallFireIcon, default as LucideBrickWallFire } from './icons/brick-wall-fire.js';\nexport { default as BrickWallShield, default as BrickWallShieldIcon, default as LucideBrickWallShield } from './icons/brick-wall-shield.js';\nexport { default as BrickWall, default as BrickWallIcon, default as LucideBrickWall } from './icons/brick-wall.js';\nexport { default as BriefcaseBusiness, default as BriefcaseBusinessIcon, default as LucideBriefcaseBusiness } from './icons/briefcase-business.js';\nexport { default as BriefcaseConveyorBelt, default as BriefcaseConveyorBeltIcon, default as LucideBriefcaseConveyorBelt } from './icons/briefcase-conveyor-belt.js';\nexport { default as BriefcaseMedical, default as BriefcaseMedicalIcon, default as LucideBriefcaseMedical } from './icons/briefcase-medical.js';\nexport { default as Briefcase, default as BriefcaseIcon, default as LucideBriefcase } from './icons/briefcase.js';\nexport { default as BringToFront, default as BringToFrontIcon, default as LucideBringToFront } from './icons/bring-to-front.js';\nexport { default as BrushCleaning, default as BrushCleaningIcon, default as LucideBrushCleaning } from './icons/brush-cleaning.js';\nexport { default as Brush, default as BrushIcon, default as LucideBrush } from './icons/brush.js';\nexport { default as Bubbles, default as BubblesIcon, default as LucideBubbles } from './icons/bubbles.js';\nexport { default as BugPlay, default as BugPlayIcon, default as LucideBugPlay } from './icons/bug-play.js';\nexport { default as BugOff, default as BugOffIcon, default as LucideBugOff } from './icons/bug-off.js';\nexport { default as Bug, default as BugIcon, default as LucideBug } from './icons/bug.js';\nexport { default as Building2, default as Building2Icon, default as LucideBuilding2 } from './icons/building-2.js';\nexport { default as Building, default as BuildingIcon, default as LucideBuilding } from './icons/building.js';\nexport { default as BusFront, default as BusFrontIcon, default as LucideBusFront } from './icons/bus-front.js';\nexport { default as Bus, default as BusIcon, default as LucideBus } from './icons/bus.js';\nexport { default as CableCar, default as CableCarIcon, default as LucideCableCar } from './icons/cable-car.js';\nexport { default as Cable, default as CableIcon, default as LucideCable } from './icons/cable.js';\nexport { default as CakeSlice, default as CakeSliceIcon, default as LucideCakeSlice } from './icons/cake-slice.js';\nexport { default as Cake, default as CakeIcon, default as LucideCake } from './icons/cake.js';\nexport { default as Calculator, default as CalculatorIcon, default as LucideCalculator } from './icons/calculator.js';\nexport { default as Calendar1, default as Calendar1Icon, default as LucideCalendar1 } from './icons/calendar-1.js';\nexport { default as CalendarArrowDown, default as CalendarArrowDownIcon, default as LucideCalendarArrowDown } from './icons/calendar-arrow-down.js';\nexport { default as CalendarArrowUp, default as CalendarArrowUpIcon, default as LucideCalendarArrowUp } from './icons/calendar-arrow-up.js';\nexport { default as CalendarCheck2, default as CalendarCheck2Icon, default as LucideCalendarCheck2 } from './icons/calendar-check-2.js';\nexport { default as CalendarClock, default as CalendarClockIcon, default as LucideCalendarClock } from './icons/calendar-clock.js';\nexport { default as CalendarCheck, default as CalendarCheckIcon, default as LucideCalendarCheck } from './icons/calendar-check.js';\nexport { default as CalendarCog, default as CalendarCogIcon, default as LucideCalendarCog } from './icons/calendar-cog.js';\nexport { default as CalendarDays, default as CalendarDaysIcon, default as LucideCalendarDays } from './icons/calendar-days.js';\nexport { default as CalendarFold, default as CalendarFoldIcon, default as LucideCalendarFold } from './icons/calendar-fold.js';\nexport { default as CalendarHeart, default as CalendarHeartIcon, default as LucideCalendarHeart } from './icons/calendar-heart.js';\nexport { default as CalendarMinus, default as CalendarMinusIcon, default as LucideCalendarMinus } from './icons/calendar-minus.js';\nexport { default as CalendarMinus2, default as CalendarMinus2Icon, default as LucideCalendarMinus2 } from './icons/calendar-minus-2.js';\nexport { default as CalendarOff, default as CalendarOffIcon, default as LucideCalendarOff } from './icons/calendar-off.js';\nexport { default as CalendarPlus2, default as CalendarPlus2Icon, default as LucideCalendarPlus2 } from './icons/calendar-plus-2.js';\nexport { default as CalendarPlus, default as CalendarPlusIcon, default as LucideCalendarPlus } from './icons/calendar-plus.js';\nexport { default as CalendarRange, default as CalendarRangeIcon, default as LucideCalendarRange } from './icons/calendar-range.js';\nexport { default as CalendarSearch, default as CalendarSearchIcon, default as LucideCalendarSearch } from './icons/calendar-search.js';\nexport { default as CalendarSync, default as CalendarSyncIcon, default as LucideCalendarSync } from './icons/calendar-sync.js';\nexport { default as CalendarX2, default as CalendarX2Icon, default as LucideCalendarX2 } from './icons/calendar-x-2.js';\nexport { default as CalendarX, default as CalendarXIcon, default as LucideCalendarX } from './icons/calendar-x.js';\nexport { default as Calendar, default as CalendarIcon, default as LucideCalendar } from './icons/calendar.js';\nexport { default as Camera, default as CameraIcon, default as LucideCamera } from './icons/camera.js';\nexport { default as CameraOff, default as CameraOffIcon, default as LucideCameraOff } from './icons/camera-off.js';\nexport { default as CandyCane, default as CandyCaneIcon, default as LucideCandyCane } from './icons/candy-cane.js';\nexport { default as CandyOff, default as CandyOffIcon, default as LucideCandyOff } from './icons/candy-off.js';\nexport { default as Candy, default as CandyIcon, default as LucideCandy } from './icons/candy.js';\nexport { default as Cannabis, default as CannabisIcon, default as LucideCannabis } from './icons/cannabis.js';\nexport { default as CaptionsOff, default as CaptionsOffIcon, default as LucideCaptionsOff } from './icons/captions-off.js';\nexport { default as CarFront, default as CarFrontIcon, default as LucideCarFront } from './icons/car-front.js';\nexport { default as CarTaxiFront, default as CarTaxiFrontIcon, default as LucideCarTaxiFront } from './icons/car-taxi-front.js';\nexport { default as Car, default as CarIcon, default as LucideCar } from './icons/car.js';\nexport { default as Caravan, default as CaravanIcon, default as LucideCaravan } from './icons/caravan.js';\nexport { default as CardSim, default as CardSimIcon, default as LucideCardSim } from './icons/card-sim.js';\nexport { default as Carrot, default as CarrotIcon, default as LucideCarrot } from './icons/carrot.js';\nexport { default as CaseLower, default as CaseLowerIcon, default as LucideCaseLower } from './icons/case-lower.js';\nexport { default as CaseSensitive, default as CaseSensitiveIcon, default as LucideCaseSensitive } from './icons/case-sensitive.js';\nexport { default as CaseUpper, default as CaseUpperIcon, default as LucideCaseUpper } from './icons/case-upper.js';\nexport { default as Cast, default as CastIcon, default as LucideCast } from './icons/cast.js';\nexport { default as CassetteTape, default as CassetteTapeIcon, default as LucideCassetteTape } from './icons/cassette-tape.js';\nexport { default as Castle, default as CastleIcon, default as LucideCastle } from './icons/castle.js';\nexport { default as Cat, default as CatIcon, default as LucideCat } from './icons/cat.js';\nexport { default as Cctv, default as CctvIcon, default as LucideCctv } from './icons/cctv.js';\nexport { default as ChartBarDecreasing, default as ChartBarDecreasingIcon, default as LucideChartBarDecreasing } from './icons/chart-bar-decreasing.js';\nexport { default as ChartBarIncreasing, default as ChartBarIncreasingIcon, default as LucideChartBarIncreasing } from './icons/chart-bar-increasing.js';\nexport { default as ChartBarStacked, default as ChartBarStackedIcon, default as LucideChartBarStacked } from './icons/chart-bar-stacked.js';\nexport { default as ChartColumnDecreasing, default as ChartColumnDecreasingIcon, default as LucideChartColumnDecreasing } from './icons/chart-column-decreasing.js';\nexport { default as ChartColumnStacked, default as ChartColumnStackedIcon, default as LucideChartColumnStacked } from './icons/chart-column-stacked.js';\nexport { default as ChartGantt, default as ChartGanttIcon, default as LucideChartGantt } from './icons/chart-gantt.js';\nexport { default as ChartNetwork, default as ChartNetworkIcon, default as LucideChartNetwork } from './icons/chart-network.js';\nexport { default as ChartNoAxesColumnDecreasing, default as ChartNoAxesColumnDecreasingIcon, default as LucideChartNoAxesColumnDecreasing } from './icons/chart-no-axes-column-decreasing.js';\nexport { default as ChartNoAxesCombined, default as ChartNoAxesCombinedIcon, default as LucideChartNoAxesCombined } from './icons/chart-no-axes-combined.js';\nexport { default as ChartSpline, default as ChartSplineIcon, default as LucideChartSpline } from './icons/chart-spline.js';\nexport { default as CheckCheck, default as CheckCheckIcon, default as LucideCheckCheck } from './icons/check-check.js';\nexport { default as CheckLine, default as CheckLineIcon, default as LucideCheckLine } from './icons/check-line.js';\nexport { default as ChefHat, default as ChefHatIcon, default as LucideChefHat } from './icons/chef-hat.js';\nexport { default as Check, default as CheckIcon, default as LucideCheck } from './icons/check.js';\nexport { default as Cherry, default as CherryIcon, default as LucideCherry } from './icons/cherry.js';\nexport { default as ChevronDown, default as ChevronDownIcon, default as LucideChevronDown } from './icons/chevron-down.js';\nexport { default as ChevronFirst, default as ChevronFirstIcon, default as LucideChevronFirst } from './icons/chevron-first.js';\nexport { default as ChevronLast, default as ChevronLastIcon, default as LucideChevronLast } from './icons/chevron-last.js';\nexport { default as ChevronLeft, default as ChevronLeftIcon, default as LucideChevronLeft } from './icons/chevron-left.js';\nexport { default as ChevronRight, default as ChevronRightIcon, default as LucideChevronRight } from './icons/chevron-right.js';\nexport { default as ChevronUp, default as ChevronUpIcon, default as LucideChevronUp } from './icons/chevron-up.js';\nexport { default as ChevronsDownUp, default as ChevronsDownUpIcon, default as LucideChevronsDownUp } from './icons/chevrons-down-up.js';\nexport { default as ChevronsDown, default as ChevronsDownIcon, default as LucideChevronsDown } from './icons/chevrons-down.js';\nexport { default as ChevronsLeftRightEllipsis, default as ChevronsLeftRightEllipsisIcon, default as LucideChevronsLeftRightEllipsis } from './icons/chevrons-left-right-ellipsis.js';\nexport { default as ChevronsLeftRight, default as ChevronsLeftRightIcon, default as LucideChevronsLeftRight } from './icons/chevrons-left-right.js';\nexport { default as ChevronsLeft, default as ChevronsLeftIcon, default as LucideChevronsLeft } from './icons/chevrons-left.js';\nexport { default as ChevronsRightLeft, default as ChevronsRightLeftIcon, default as LucideChevronsRightLeft } from './icons/chevrons-right-left.js';\nexport { default as ChevronsRight, default as ChevronsRightIcon, default as LucideChevronsRight } from './icons/chevrons-right.js';\nexport { default as ChevronsUpDown, default as ChevronsUpDownIcon, default as LucideChevronsUpDown } from './icons/chevrons-up-down.js';\nexport { default as ChevronsUp, default as ChevronsUpIcon, default as LucideChevronsUp } from './icons/chevrons-up.js';\nexport { default as Church, default as ChurchIcon, default as LucideChurch } from './icons/church.js';\nexport { default as CigaretteOff, default as CigaretteOffIcon, default as LucideCigaretteOff } from './icons/cigarette-off.js';\nexport { default as Cigarette, default as CigaretteIcon, default as LucideCigarette } from './icons/cigarette.js';\nexport { default as CircleDashed, default as CircleDashedIcon, default as LucideCircleDashed } from './icons/circle-dashed.js';\nexport { default as CircleDollarSign, default as CircleDollarSignIcon, default as LucideCircleDollarSign } from './icons/circle-dollar-sign.js';\nexport { default as CircleDotDashed, default as CircleDotDashedIcon, default as LucideCircleDotDashed } from './icons/circle-dot-dashed.js';\nexport { default as CircleDot, default as CircleDotIcon, default as LucideCircleDot } from './icons/circle-dot.js';\nexport { default as CircleEllipsis, default as CircleEllipsisIcon, default as LucideCircleEllipsis } from './icons/circle-ellipsis.js';\nexport { default as CircleEqual, default as CircleEqualIcon, default as LucideCircleEqual } from './icons/circle-equal.js';\nexport { default as CircleFadingArrowUp, default as CircleFadingArrowUpIcon, default as LucideCircleFadingArrowUp } from './icons/circle-fading-arrow-up.js';\nexport { default as CircleFadingPlus, default as CircleFadingPlusIcon, default as LucideCircleFadingPlus } from './icons/circle-fading-plus.js';\nexport { default as CircleOff, default as CircleOffIcon, default as LucideCircleOff } from './icons/circle-off.js';\nexport { default as CirclePoundSterling, default as CirclePoundSterlingIcon, default as LucideCirclePoundSterling } from './icons/circle-pound-sterling.js';\nexport { default as CircleSlash, default as CircleSlashIcon, default as LucideCircleSlash } from './icons/circle-slash.js';\nexport { default as CircleSmall, default as CircleSmallIcon, default as LucideCircleSmall } from './icons/circle-small.js';\nexport { default as CircleStar, default as CircleStarIcon, default as LucideCircleStar } from './icons/circle-star.js';\nexport { default as Circle, default as CircleIcon, default as LucideCircle } from './icons/circle.js';\nexport { default as CircuitBoard, default as CircuitBoardIcon, default as LucideCircuitBoard } from './icons/circuit-board.js';\nexport { default as Citrus, default as CitrusIcon, default as LucideCitrus } from './icons/citrus.js';\nexport { default as Clapperboard, default as ClapperboardIcon, default as LucideClapperboard } from './icons/clapperboard.js';\nexport { default as ClipboardCheck, default as ClipboardCheckIcon, default as LucideClipboardCheck } from './icons/clipboard-check.js';\nexport { default as ClipboardCopy, default as ClipboardCopyIcon, default as LucideClipboardCopy } from './icons/clipboard-copy.js';\nexport { default as ClipboardClock, default as ClipboardClockIcon, default as LucideClipboardClock } from './icons/clipboard-clock.js';\nexport { default as ClipboardList, default as ClipboardListIcon, default as LucideClipboardList } from './icons/clipboard-list.js';\nexport { default as ClipboardMinus, default as ClipboardMinusIcon, default as LucideClipboardMinus } from './icons/clipboard-minus.js';\nexport { default as ClipboardPaste, default as ClipboardPasteIcon, default as LucideClipboardPaste } from './icons/clipboard-paste.js';\nexport { default as ClipboardPlus, default as ClipboardPlusIcon, default as LucideClipboardPlus } from './icons/clipboard-plus.js';\nexport { default as ClipboardType, default as ClipboardTypeIcon, default as LucideClipboardType } from './icons/clipboard-type.js';\nexport { default as ClipboardX, default as ClipboardXIcon, default as LucideClipboardX } from './icons/clipboard-x.js';\nexport { default as Clipboard, default as ClipboardIcon, default as LucideClipboard } from './icons/clipboard.js';\nexport { default as Clock1, default as Clock1Icon, default as LucideClock1 } from './icons/clock-1.js';\nexport { default as Clock10, default as Clock10Icon, default as LucideClock10 } from './icons/clock-10.js';\nexport { default as Clock11, default as Clock11Icon, default as LucideClock11 } from './icons/clock-11.js';\nexport { default as Clock12, default as Clock12Icon, default as LucideClock12 } from './icons/clock-12.js';\nexport { default as Clock2, default as Clock2Icon, default as LucideClock2 } from './icons/clock-2.js';\nexport { default as Clock3, default as Clock3Icon, default as LucideClock3 } from './icons/clock-3.js';\nexport { default as Clock5, default as Clock5Icon, default as LucideClock5 } from './icons/clock-5.js';\nexport { default as Clock4, default as Clock4Icon, default as LucideClock4 } from './icons/clock-4.js';\nexport { default as Clock6, default as Clock6Icon, default as LucideClock6 } from './icons/clock-6.js';\nexport { default as Clock7, default as Clock7Icon, default as LucideClock7 } from './icons/clock-7.js';\nexport { default as Clock8, default as Clock8Icon, default as LucideClock8 } from './icons/clock-8.js';\nexport { default as Clock9, default as Clock9Icon, default as LucideClock9 } from './icons/clock-9.js';\nexport { default as ClockArrowDown, default as ClockArrowDownIcon, default as LucideClockArrowDown } from './icons/clock-arrow-down.js';\nexport { default as ClockAlert, default as ClockAlertIcon, default as LucideClockAlert } from './icons/clock-alert.js';\nexport { default as ClockArrowUp, default as ClockArrowUpIcon, default as LucideClockArrowUp } from './icons/clock-arrow-up.js';\nexport { default as ClockFading, default as ClockFadingIcon, default as LucideClockFading } from './icons/clock-fading.js';\nexport { default as ClockPlus, default as ClockPlusIcon, default as LucideClockPlus } from './icons/clock-plus.js';\nexport { default as Clock, default as ClockIcon, default as LucideClock } from './icons/clock.js';\nexport { default as ClosedCaption, default as ClosedCaptionIcon, default as LucideClosedCaption } from './icons/closed-caption.js';\nexport { default as CloudAlert, default as CloudAlertIcon, default as LucideCloudAlert } from './icons/cloud-alert.js';\nexport { default as CloudCheck, default as CloudCheckIcon, default as LucideCloudCheck } from './icons/cloud-check.js';\nexport { default as CloudCog, default as CloudCogIcon, default as LucideCloudCog } from './icons/cloud-cog.js';\nexport { default as CloudDrizzle, default as CloudDrizzleIcon, default as LucideCloudDrizzle } from './icons/cloud-drizzle.js';\nexport { default as CloudFog, default as CloudFogIcon, default as LucideCloudFog } from './icons/cloud-fog.js';\nexport { default as CloudHail, default as CloudHailIcon, default as LucideCloudHail } from './icons/cloud-hail.js';\nexport { default as CloudLightning, default as CloudLightningIcon, default as LucideCloudLightning } from './icons/cloud-lightning.js';\nexport { default as CloudMoonRain, default as CloudMoonRainIcon, default as LucideCloudMoonRain } from './icons/cloud-moon-rain.js';\nexport { default as CloudOff, default as CloudOffIcon, default as LucideCloudOff } from './icons/cloud-off.js';\nexport { default as CloudMoon, default as CloudMoonIcon, default as LucideCloudMoon } from './icons/cloud-moon.js';\nexport { default as CloudRainWind, default as CloudRainWindIcon, default as LucideCloudRainWind } from './icons/cloud-rain-wind.js';\nexport { default as CloudRain, default as CloudRainIcon, default as LucideCloudRain } from './icons/cloud-rain.js';\nexport { default as CloudSnow, default as CloudSnowIcon, default as LucideCloudSnow } from './icons/cloud-snow.js';\nexport { default as CloudSunRain, default as CloudSunRainIcon, default as LucideCloudSunRain } from './icons/cloud-sun-rain.js';\nexport { default as CloudSun, default as CloudSunIcon, default as LucideCloudSun } from './icons/cloud-sun.js';\nexport { default as Cloud, default as CloudIcon, default as LucideCloud } from './icons/cloud.js';\nexport { default as Cloudy, default as CloudyIcon, default as LucideCloudy } from './icons/cloudy.js';\nexport { default as Clover, default as CloverIcon, default as LucideClover } from './icons/clover.js';\nexport { default as Club, default as ClubIcon, default as LucideClub } from './icons/club.js';\nexport { default as Code, default as CodeIcon, default as LucideCode } from './icons/code.js';\nexport { default as Codepen, default as CodepenIcon, default as LucideCodepen } from './icons/codepen.js';\nexport { default as Codesandbox, default as CodesandboxIcon, default as LucideCodesandbox } from './icons/codesandbox.js';\nexport { default as Coffee, default as CoffeeIcon, default as LucideCoffee } from './icons/coffee.js';\nexport { default as Cog, default as CogIcon, default as LucideCog } from './icons/cog.js';\nexport { default as Coins, default as CoinsIcon, default as LucideCoins } from './icons/coins.js';\nexport { default as Columns4, default as Columns4Icon, default as LucideColumns4 } from './icons/columns-4.js';\nexport { default as Combine, default as CombineIcon, default as LucideCombine } from './icons/combine.js';\nexport { default as Command, default as CommandIcon, default as LucideCommand } from './icons/command.js';\nexport { default as Compass, default as CompassIcon, default as LucideCompass } from './icons/compass.js';\nexport { default as Component, default as ComponentIcon, default as LucideComponent } from './icons/component.js';\nexport { default as Computer, default as ComputerIcon, default as LucideComputer } from './icons/computer.js';\nexport { default as ConciergeBell, default as ConciergeBellIcon, default as LucideConciergeBell } from './icons/concierge-bell.js';\nexport { default as Construction, default as ConstructionIcon, default as LucideConstruction } from './icons/construction.js';\nexport { default as Cone, default as ConeIcon, default as LucideCone } from './icons/cone.js';\nexport { default as Contact, default as ContactIcon, default as LucideContact } from './icons/contact.js';\nexport { default as Container, default as ContainerIcon, default as LucideContainer } from './icons/container.js';\nexport { default as Contrast, default as ContrastIcon, default as LucideContrast } from './icons/contrast.js';\nexport { default as Cookie, default as CookieIcon, default as LucideCookie } from './icons/cookie.js';\nexport { default as CopyCheck, default as CopyCheckIcon, default as LucideCopyCheck } from './icons/copy-check.js';\nexport { default as CookingPot, default as CookingPotIcon, default as LucideCookingPot } from './icons/cooking-pot.js';\nexport { default as CopyMinus, default as CopyMinusIcon, default as LucideCopyMinus } from './icons/copy-minus.js';\nexport { default as CopyPlus, default as CopyPlusIcon, default as LucideCopyPlus } from './icons/copy-plus.js';\nexport { default as CopySlash, default as CopySlashIcon, default as LucideCopySlash } from './icons/copy-slash.js';\nexport { default as CopyX, default as CopyXIcon, default as LucideCopyX } from './icons/copy-x.js';\nexport { default as Copy, default as CopyIcon, default as LucideCopy } from './icons/copy.js';\nexport { default as Copyleft, default as CopyleftIcon, default as LucideCopyleft } from './icons/copyleft.js';\nexport { default as Copyright, default as CopyrightIcon, default as LucideCopyright } from './icons/copyright.js';\nexport { default as CornerDownLeft, default as CornerDownLeftIcon, default as LucideCornerDownLeft } from './icons/corner-down-left.js';\nexport { default as CornerDownRight, default as CornerDownRightIcon, default as LucideCornerDownRight } from './icons/corner-down-right.js';\nexport { default as CornerLeftDown, default as CornerLeftDownIcon, default as LucideCornerLeftDown } from './icons/corner-left-down.js';\nexport { default as CornerLeftUp, default as CornerLeftUpIcon, default as LucideCornerLeftUp } from './icons/corner-left-up.js';\nexport { default as CornerRightDown, default as CornerRightDownIcon, default as LucideCornerRightDown } from './icons/corner-right-down.js';\nexport { default as CornerRightUp, default as CornerRightUpIcon, default as LucideCornerRightUp } from './icons/corner-right-up.js';\nexport { default as CornerUpLeft, default as CornerUpLeftIcon, default as LucideCornerUpLeft } from './icons/corner-up-left.js';\nexport { default as CornerUpRight, default as CornerUpRightIcon, default as LucideCornerUpRight } from './icons/corner-up-right.js';\nexport { default as Cpu, default as CpuIcon, default as LucideCpu } from './icons/cpu.js';\nexport { default as CreativeCommons, default as CreativeCommonsIcon, default as LucideCreativeCommons } from './icons/creative-commons.js';\nexport { default as CreditCard, default as CreditCardIcon, default as LucideCreditCard } from './icons/credit-card.js';\nexport { default as Croissant, default as CroissantIcon, default as LucideCroissant } from './icons/croissant.js';\nexport { default as Crop, default as CropIcon, default as LucideCrop } from './icons/crop.js';\nexport { default as Cross, default as CrossIcon, default as LucideCross } from './icons/cross.js';\nexport { default as Crosshair, default as CrosshairIcon, default as LucideCrosshair } from './icons/crosshair.js';\nexport { default as Crown, default as CrownIcon, default as LucideCrown } from './icons/crown.js';\nexport { default as Cuboid, default as CuboidIcon, default as LucideCuboid } from './icons/cuboid.js';\nexport { default as CupSoda, default as CupSodaIcon, default as LucideCupSoda } from './icons/cup-soda.js';\nexport { default as Currency, default as CurrencyIcon, default as LucideCurrency } from './icons/currency.js';\nexport { default as Cylinder, default as CylinderIcon, default as LucideCylinder } from './icons/cylinder.js';\nexport { default as Dam, default as DamIcon, default as LucideDam } from './icons/dam.js';\nexport { default as DatabaseBackup, default as DatabaseBackupIcon, default as LucideDatabaseBackup } from './icons/database-backup.js';\nexport { default as DatabaseZap, default as DatabaseZapIcon, default as LucideDatabaseZap } from './icons/database-zap.js';\nexport { default as DecimalsArrowLeft, default as DecimalsArrowLeftIcon, default as LucideDecimalsArrowLeft } from './icons/decimals-arrow-left.js';\nexport { default as Database, default as DatabaseIcon, default as LucideDatabase } from './icons/database.js';\nexport { default as DecimalsArrowRight, default as DecimalsArrowRightIcon, default as LucideDecimalsArrowRight } from './icons/decimals-arrow-right.js';\nexport { default as Delete, default as DeleteIcon, default as LucideDelete } from './icons/delete.js';\nexport { default as Dessert, default as DessertIcon, default as LucideDessert } from './icons/dessert.js';\nexport { default as Diameter, default as DiameterIcon, default as LucideDiameter } from './icons/diameter.js';\nexport { default as DiamondMinus, default as DiamondMinusIcon, default as LucideDiamondMinus } from './icons/diamond-minus.js';\nexport { default as DiamondPlus, default as DiamondPlusIcon, default as LucideDiamondPlus } from './icons/diamond-plus.js';\nexport { default as Diamond, default as DiamondIcon, default as LucideDiamond } from './icons/diamond.js';\nexport { default as Dice1, default as Dice1Icon, default as LucideDice1 } from './icons/dice-1.js';\nexport { default as Dice2, default as Dice2Icon, default as LucideDice2 } from './icons/dice-2.js';\nexport { default as Dice3, default as Dice3Icon, default as LucideDice3 } from './icons/dice-3.js';\nexport { default as Dice4, default as Dice4Icon, default as LucideDice4 } from './icons/dice-4.js';\nexport { default as Dice5, default as Dice5Icon, default as LucideDice5 } from './icons/dice-5.js';\nexport { default as Dice6, default as Dice6Icon, default as LucideDice6 } from './icons/dice-6.js';\nexport { default as Dices, default as DicesIcon, default as LucideDices } from './icons/dices.js';\nexport { default as Diff, default as DiffIcon, default as LucideDiff } from './icons/diff.js';\nexport { default as Disc2, default as Disc2Icon, default as LucideDisc2 } from './icons/disc-2.js';\nexport { default as Disc3, default as Disc3Icon, default as LucideDisc3 } from './icons/disc-3.js';\nexport { default as DiscAlbum, default as DiscAlbumIcon, default as LucideDiscAlbum } from './icons/disc-album.js';\nexport { default as Disc, default as DiscIcon, default as LucideDisc } from './icons/disc.js';\nexport { default as Divide, default as DivideIcon, default as LucideDivide } from './icons/divide.js';\nexport { default as DnaOff, default as DnaOffIcon, default as LucideDnaOff } from './icons/dna-off.js';\nexport { default as Dna, default as DnaIcon, default as LucideDna } from './icons/dna.js';\nexport { default as Dock, default as DockIcon, default as LucideDock } from './icons/dock.js';\nexport { default as Dog, default as DogIcon, default as LucideDog } from './icons/dog.js';\nexport { default as DollarSign, default as DollarSignIcon, default as LucideDollarSign } from './icons/dollar-sign.js';\nexport { default as Donut, default as DonutIcon, default as LucideDonut } from './icons/donut.js';\nexport { default as DoorClosedLocked, default as DoorClosedLockedIcon, default as LucideDoorClosedLocked } from './icons/door-closed-locked.js';\nexport { default as DoorClosed, default as DoorClosedIcon, default as LucideDoorClosed } from './icons/door-closed.js';\nexport { default as DoorOpen, default as DoorOpenIcon, default as LucideDoorOpen } from './icons/door-open.js';\nexport { default as Dot, default as DotIcon, default as LucideDot } from './icons/dot.js';\nexport { default as Download, default as DownloadIcon, default as LucideDownload } from './icons/download.js';\nexport { default as DraftingCompass, default as DraftingCompassIcon, default as LucideDraftingCompass } from './icons/drafting-compass.js';\nexport { default as Drama, default as DramaIcon, default as LucideDrama } from './icons/drama.js';\nexport { default as Dribbble, default as DribbbleIcon, default as LucideDribbble } from './icons/dribbble.js';\nexport { default as Drill, default as DrillIcon, default as LucideDrill } from './icons/drill.js';\nexport { default as Drone, default as DroneIcon, default as LucideDrone } from './icons/drone.js';\nexport { default as DropletOff, default as DropletOffIcon, default as LucideDropletOff } from './icons/droplet-off.js';\nexport { default as Droplet, default as DropletIcon, default as LucideDroplet } from './icons/droplet.js';\nexport { default as Droplets, default as DropletsIcon, default as LucideDroplets } from './icons/droplets.js';\nexport { default as Drum, default as DrumIcon, default as LucideDrum } from './icons/drum.js';\nexport { default as Drumstick, default as DrumstickIcon, default as LucideDrumstick } from './icons/drumstick.js';\nexport { default as Dumbbell, default as DumbbellIcon, default as LucideDumbbell } from './icons/dumbbell.js';\nexport { default as EarOff, default as EarOffIcon, default as LucideEarOff } from './icons/ear-off.js';\nexport { default as Ear, default as EarIcon, default as LucideEar } from './icons/ear.js';\nexport { default as EarthLock, default as EarthLockIcon, default as LucideEarthLock } from './icons/earth-lock.js';\nexport { default as Eclipse, default as EclipseIcon, default as LucideEclipse } from './icons/eclipse.js';\nexport { default as EggFried, default as EggFriedIcon, default as LucideEggFried } from './icons/egg-fried.js';\nexport { default as EggOff, default as EggOffIcon, default as LucideEggOff } from './icons/egg-off.js';\nexport { default as Egg, default as EggIcon, default as LucideEgg } from './icons/egg.js';\nexport { default as EqualApproximately, default as EqualApproximatelyIcon, default as LucideEqualApproximately } from './icons/equal-approximately.js';\nexport { default as EqualNot, default as EqualNotIcon, default as LucideEqualNot } from './icons/equal-not.js';\nexport { default as Equal, default as EqualIcon, default as LucideEqual } from './icons/equal.js';\nexport { default as Eraser, default as EraserIcon, default as LucideEraser } from './icons/eraser.js';\nexport { default as Euro, default as EuroIcon, default as LucideEuro } from './icons/euro.js';\nexport { default as EthernetPort, default as EthernetPortIcon, default as LucideEthernetPort } from './icons/ethernet-port.js';\nexport { default as EvCharger, default as EvChargerIcon, default as LucideEvCharger } from './icons/ev-charger.js';\nexport { default as Expand, default as ExpandIcon, default as LucideExpand } from './icons/expand.js';\nexport { default as ExternalLink, default as ExternalLinkIcon, default as LucideExternalLink } from './icons/external-link.js';\nexport { default as EyeOff, default as EyeOffIcon, default as LucideEyeOff } from './icons/eye-off.js';\nexport { default as EyeClosed, default as EyeClosedIcon, default as LucideEyeClosed } from './icons/eye-closed.js';\nexport { default as Eye, default as EyeIcon, default as LucideEye } from './icons/eye.js';\nexport { default as Facebook, default as FacebookIcon, default as LucideFacebook } from './icons/facebook.js';\nexport { default as Factory, default as FactoryIcon, default as LucideFactory } from './icons/factory.js';\nexport { default as Fan, default as FanIcon, default as LucideFan } from './icons/fan.js';\nexport { default as FastForward, default as FastForwardIcon, default as LucideFastForward } from './icons/fast-forward.js';\nexport { default as Feather, default as FeatherIcon, default as LucideFeather } from './icons/feather.js';\nexport { default as Fence, default as FenceIcon, default as LucideFence } from './icons/fence.js';\nexport { default as FerrisWheel, default as FerrisWheelIcon, default as LucideFerrisWheel } from './icons/ferris-wheel.js';\nexport { default as Figma, default as FigmaIcon, default as LucideFigma } from './icons/figma.js';\nexport { default as FileArchive, default as FileArchiveIcon, default as LucideFileArchive } from './icons/file-archive.js';\nexport { default as FileAudio2, default as FileAudio2Icon, default as LucideFileAudio2 } from './icons/file-audio-2.js';\nexport { default as FileAudio, default as FileAudioIcon, default as LucideFileAudio } from './icons/file-audio.js';\nexport { default as FileBadge2, default as FileBadge2Icon, default as LucideFileBadge2 } from './icons/file-badge-2.js';\nexport { default as FileBox, default as FileBoxIcon, default as LucideFileBox } from './icons/file-box.js';\nexport { default as FileBadge, default as FileBadgeIcon, default as LucideFileBadge } from './icons/file-badge.js';\nexport { default as FileCheck2, default as FileCheck2Icon, default as LucideFileCheck2 } from './icons/file-check-2.js';\nexport { default as FileCheck, default as FileCheckIcon, default as LucideFileCheck } from './icons/file-check.js';\nexport { default as FileCode2, default as FileCode2Icon, default as LucideFileCode2 } from './icons/file-code-2.js';\nexport { default as FileClock, default as FileClockIcon, default as LucideFileClock } from './icons/file-clock.js';\nexport { default as FileCode, default as FileCodeIcon, default as LucideFileCode } from './icons/file-code.js';\nexport { default as FileDiff, default as FileDiffIcon, default as LucideFileDiff } from './icons/file-diff.js';\nexport { default as FileDigit, default as FileDigitIcon, default as LucideFileDigit } from './icons/file-digit.js';\nexport { default as FileDown, default as FileDownIcon, default as LucideFileDown } from './icons/file-down.js';\nexport { default as FileHeart, default as FileHeartIcon, default as LucideFileHeart } from './icons/file-heart.js';\nexport { default as FileImage, default as FileImageIcon, default as LucideFileImage } from './icons/file-image.js';\nexport { default as FileInput, default as FileInputIcon, default as LucideFileInput } from './icons/file-input.js';\nexport { default as FileJson2, default as FileJson2Icon, default as LucideFileJson2 } from './icons/file-json-2.js';\nexport { default as FileJson, default as FileJsonIcon, default as LucideFileJson } from './icons/file-json.js';\nexport { default as FileKey2, default as FileKey2Icon, default as LucideFileKey2 } from './icons/file-key-2.js';\nexport { default as FileKey, default as FileKeyIcon, default as LucideFileKey } from './icons/file-key.js';\nexport { default as FileLock2, default as FileLock2Icon, default as LucideFileLock2 } from './icons/file-lock-2.js';\nexport { default as FileLock, default as FileLockIcon, default as LucideFileLock } from './icons/file-lock.js';\nexport { default as FileMinus2, default as FileMinus2Icon, default as LucideFileMinus2 } from './icons/file-minus-2.js';\nexport { default as FileMinus, default as FileMinusIcon, default as LucideFileMinus } from './icons/file-minus.js';\nexport { default as FileMusic, default as FileMusicIcon, default as LucideFileMusic } from './icons/file-music.js';\nexport { default as FileOutput, default as FileOutputIcon, default as LucideFileOutput } from './icons/file-output.js';\nexport { default as FilePlus2, default as FilePlus2Icon, default as LucideFilePlus2 } from './icons/file-plus-2.js';\nexport { default as FilePlus, default as FilePlusIcon, default as LucideFilePlus } from './icons/file-plus.js';\nexport { default as FileScan, default as FileScanIcon, default as LucideFileScan } from './icons/file-scan.js';\nexport { default as FileSearch2, default as FileSearch2Icon, default as LucideFileSearch2 } from './icons/file-search-2.js';\nexport { default as FileSearch, default as FileSearchIcon, default as LucideFileSearch } from './icons/file-search.js';\nexport { default as FileSliders, default as FileSlidersIcon, default as LucideFileSliders } from './icons/file-sliders.js';\nexport { default as FileSpreadsheet, default as FileSpreadsheetIcon, default as LucideFileSpreadsheet } from './icons/file-spreadsheet.js';\nexport { default as FileStack, default as FileStackIcon, default as LucideFileStack } from './icons/file-stack.js';\nexport { default as FileSymlink, default as FileSymlinkIcon, default as LucideFileSymlink } from './icons/file-symlink.js';\nexport { default as FileTerminal, default as FileTerminalIcon, default as LucideFileTerminal } from './icons/file-terminal.js';\nexport { default as FileText, default as FileTextIcon, default as LucideFileText } from './icons/file-text.js';\nexport { default as FileType2, default as FileType2Icon, default as LucideFileType2 } from './icons/file-type-2.js';\nexport { default as FileType, default as FileTypeIcon, default as LucideFileType } from './icons/file-type.js';\nexport { default as FileUp, default as FileUpIcon, default as LucideFileUp } from './icons/file-up.js';\nexport { default as FileUser, default as FileUserIcon, default as LucideFileUser } from './icons/file-user.js';\nexport { default as FileVolume2, default as FileVolume2Icon, default as LucideFileVolume2 } from './icons/file-volume-2.js';\nexport { default as FileVolume, default as FileVolumeIcon, default as LucideFileVolume } from './icons/file-volume.js';\nexport { default as FileWarning, default as FileWarningIcon, default as LucideFileWarning } from './icons/file-warning.js';\nexport { default as FileX2, default as FileX2Icon, default as LucideFileX2 } from './icons/file-x-2.js';\nexport { default as FileX, default as FileXIcon, default as LucideFileX } from './icons/file-x.js';\nexport { default as File, default as FileIcon, default as LucideFile } from './icons/file.js';\nexport { default as Film, default as FilmIcon, default as LucideFilm } from './icons/film.js';\nexport { default as Files, default as FilesIcon, default as LucideFiles } from './icons/files.js';\nexport { default as Fingerprint, default as FingerprintIcon, default as LucideFingerprint } from './icons/fingerprint.js';\nexport { default as FireExtinguisher, default as FireExtinguisherIcon, default as LucideFireExtinguisher } from './icons/fire-extinguisher.js';\nexport { default as FishOff, default as FishOffIcon, default as LucideFishOff } from './icons/fish-off.js';\nexport { default as FishSymbol, default as FishSymbolIcon, default as LucideFishSymbol } from './icons/fish-symbol.js';\nexport { default as Fish, default as FishIcon, default as LucideFish } from './icons/fish.js';\nexport { default as FlagOff, default as FlagOffIcon, default as LucideFlagOff } from './icons/flag-off.js';\nexport { default as FlagTriangleLeft, default as FlagTriangleLeftIcon, default as LucideFlagTriangleLeft } from './icons/flag-triangle-left.js';\nexport { default as FlagTriangleRight, default as FlagTriangleRightIcon, default as LucideFlagTriangleRight } from './icons/flag-triangle-right.js';\nexport { default as Flag, default as FlagIcon, default as LucideFlag } from './icons/flag.js';\nexport { default as FlameKindling, default as FlameKindlingIcon, default as LucideFlameKindling } from './icons/flame-kindling.js';\nexport { default as Flame, default as FlameIcon, default as LucideFlame } from './icons/flame.js';\nexport { default as FlashlightOff, default as FlashlightOffIcon, default as LucideFlashlightOff } from './icons/flashlight-off.js';\nexport { default as Flashlight, default as FlashlightIcon, default as LucideFlashlight } from './icons/flashlight.js';\nexport { default as FlaskConicalOff, default as FlaskConicalOffIcon, default as LucideFlaskConicalOff } from './icons/flask-conical-off.js';\nexport { default as FlaskConical, default as FlaskConicalIcon, default as LucideFlaskConical } from './icons/flask-conical.js';\nexport { default as FlaskRound, default as FlaskRoundIcon, default as LucideFlaskRound } from './icons/flask-round.js';\nexport { default as FlipHorizontal2, default as FlipHorizontal2Icon, default as LucideFlipHorizontal2 } from './icons/flip-horizontal-2.js';\nexport { default as FlipHorizontal, default as FlipHorizontalIcon, default as LucideFlipHorizontal } from './icons/flip-horizontal.js';\nexport { default as FlipVertical2, default as FlipVertical2Icon, default as LucideFlipVertical2 } from './icons/flip-vertical-2.js';\nexport { default as FlipVertical, default as FlipVerticalIcon, default as LucideFlipVertical } from './icons/flip-vertical.js';\nexport { default as Flower2, default as Flower2Icon, default as LucideFlower2 } from './icons/flower-2.js';\nexport { default as Flower, default as FlowerIcon, default as LucideFlower } from './icons/flower.js';\nexport { default as Focus, default as FocusIcon, default as LucideFocus } from './icons/focus.js';\nexport { default as FoldHorizontal, default as FoldHorizontalIcon, default as LucideFoldHorizontal } from './icons/fold-horizontal.js';\nexport { default as FoldVertical, default as FoldVerticalIcon, default as LucideFoldVertical } from './icons/fold-vertical.js';\nexport { default as FolderArchive, default as FolderArchiveIcon, default as LucideFolderArchive } from './icons/folder-archive.js';\nexport { default as FolderCheck, default as FolderCheckIcon, default as LucideFolderCheck } from './icons/folder-check.js';\nexport { default as FolderClock, default as FolderClockIcon, default as LucideFolderClock } from './icons/folder-clock.js';\nexport { default as FolderCode, default as FolderCodeIcon, default as LucideFolderCode } from './icons/folder-code.js';\nexport { default as FolderDot, default as FolderDotIcon, default as LucideFolderDot } from './icons/folder-dot.js';\nexport { default as FolderClosed, default as FolderClosedIcon, default as LucideFolderClosed } from './icons/folder-closed.js';\nexport { default as FolderDown, default as FolderDownIcon, default as LucideFolderDown } from './icons/folder-down.js';\nexport { default as FolderGit2, default as FolderGit2Icon, default as LucideFolderGit2 } from './icons/folder-git-2.js';\nexport { default as FolderGit, default as FolderGitIcon, default as LucideFolderGit } from './icons/folder-git.js';\nexport { default as FolderHeart, default as FolderHeartIcon, default as LucideFolderHeart } from './icons/folder-heart.js';\nexport { default as FolderInput, default as FolderInputIcon, default as LucideFolderInput } from './icons/folder-input.js';\nexport { default as FolderKanban, default as FolderKanbanIcon, default as LucideFolderKanban } from './icons/folder-kanban.js';\nexport { default as FolderKey, default as FolderKeyIcon, default as LucideFolderKey } from './icons/folder-key.js';\nexport { default as FolderLock, default as FolderLockIcon, default as LucideFolderLock } from './icons/folder-lock.js';\nexport { default as FolderMinus, default as FolderMinusIcon, default as LucideFolderMinus } from './icons/folder-minus.js';\nexport { default as FolderOpenDot, default as FolderOpenDotIcon, default as LucideFolderOpenDot } from './icons/folder-open-dot.js';\nexport { default as FolderOpen, default as FolderOpenIcon, default as LucideFolderOpen } from './icons/folder-open.js';\nexport { default as FolderOutput, default as FolderOutputIcon, default as LucideFolderOutput } from './icons/folder-output.js';\nexport { default as FolderPlus, default as FolderPlusIcon, default as LucideFolderPlus } from './icons/folder-plus.js';\nexport { default as FolderRoot, default as FolderRootIcon, default as LucideFolderRoot } from './icons/folder-root.js';\nexport { default as FolderSearch2, default as FolderSearch2Icon, default as LucideFolderSearch2 } from './icons/folder-search-2.js';\nexport { default as FolderSearch, default as FolderSearchIcon, default as LucideFolderSearch } from './icons/folder-search.js';\nexport { default as FolderSymlink, default as FolderSymlinkIcon, default as LucideFolderSymlink } from './icons/folder-symlink.js';\nexport { default as FolderSync, default as FolderSyncIcon, default as LucideFolderSync } from './icons/folder-sync.js';\nexport { default as FolderTree, default as FolderTreeIcon, default as LucideFolderTree } from './icons/folder-tree.js';\nexport { default as FolderUp, default as FolderUpIcon, default as LucideFolderUp } from './icons/folder-up.js';\nexport { default as FolderX, default as FolderXIcon, default as LucideFolderX } from './icons/folder-x.js';\nexport { default as Folder, default as FolderIcon, default as LucideFolder } from './icons/folder.js';\nexport { default as Folders, default as FoldersIcon, default as LucideFolders } from './icons/folders.js';\nexport { default as Footprints, default as FootprintsIcon, default as LucideFootprints } from './icons/footprints.js';\nexport { default as Forklift, default as ForkliftIcon, default as LucideForklift } from './icons/forklift.js';\nexport { default as Forward, default as ForwardIcon, default as LucideForward } from './icons/forward.js';\nexport { default as Frame, default as FrameIcon, default as LucideFrame } from './icons/frame.js';\nexport { default as Framer, default as FramerIcon, default as LucideFramer } from './icons/framer.js';\nexport { default as Frown, default as FrownIcon, default as LucideFrown } from './icons/frown.js';\nexport { default as Fuel, default as FuelIcon, default as LucideFuel } from './icons/fuel.js';\nexport { default as Fullscreen, default as FullscreenIcon, default as LucideFullscreen } from './icons/fullscreen.js';\nexport { default as FunnelPlus, default as FunnelPlusIcon, default as LucideFunnelPlus } from './icons/funnel-plus.js';\nexport { default as GalleryHorizontalEnd, default as GalleryHorizontalEndIcon, default as LucideGalleryHorizontalEnd } from './icons/gallery-horizontal-end.js';\nexport { default as GalleryHorizontal, default as GalleryHorizontalIcon, default as LucideGalleryHorizontal } from './icons/gallery-horizontal.js';\nexport { default as GalleryThumbnails, default as GalleryThumbnailsIcon, default as LucideGalleryThumbnails } from './icons/gallery-thumbnails.js';\nexport { default as GalleryVerticalEnd, default as GalleryVerticalEndIcon, default as LucideGalleryVerticalEnd } from './icons/gallery-vertical-end.js';\nexport { default as GalleryVertical, default as GalleryVerticalIcon, default as LucideGalleryVertical } from './icons/gallery-vertical.js';\nexport { default as Gamepad2, default as Gamepad2Icon, default as LucideGamepad2 } from './icons/gamepad-2.js';\nexport { default as Gamepad, default as GamepadIcon, default as LucideGamepad } from './icons/gamepad.js';\nexport { default as Gauge, default as GaugeIcon, default as LucideGauge } from './icons/gauge.js';\nexport { default as Gavel, default as GavelIcon, default as LucideGavel } from './icons/gavel.js';\nexport { default as Gem, default as GemIcon, default as LucideGem } from './icons/gem.js';\nexport { default as GeorgianLari, default as GeorgianLariIcon, default as LucideGeorgianLari } from './icons/georgian-lari.js';\nexport { default as Ghost, default as GhostIcon, default as LucideGhost } from './icons/ghost.js';\nexport { default as Gift, default as GiftIcon, default as LucideGift } from './icons/gift.js';\nexport { default as GitBranchPlus, default as GitBranchPlusIcon, default as LucideGitBranchPlus } from './icons/git-branch-plus.js';\nexport { default as GitBranch, default as GitBranchIcon, default as LucideGitBranch } from './icons/git-branch.js';\nexport { default as GitCommitVertical, default as GitCommitVerticalIcon, default as LucideGitCommitVertical } from './icons/git-commit-vertical.js';\nexport { default as GitCompareArrows, default as GitCompareArrowsIcon, default as LucideGitCompareArrows } from './icons/git-compare-arrows.js';\nexport { default as GitCompare, default as GitCompareIcon, default as LucideGitCompare } from './icons/git-compare.js';\nexport { default as GitFork, default as GitForkIcon, default as LucideGitFork } from './icons/git-fork.js';\nexport { default as GitGraph, default as GitGraphIcon, default as LucideGitGraph } from './icons/git-graph.js';\nexport { default as GitMerge, default as GitMergeIcon, default as LucideGitMerge } from './icons/git-merge.js';\nexport { default as GitPullRequestArrow, default as GitPullRequestArrowIcon, default as LucideGitPullRequestArrow } from './icons/git-pull-request-arrow.js';\nexport { default as GitPullRequestClosed, default as GitPullRequestClosedIcon, default as LucideGitPullRequestClosed } from './icons/git-pull-request-closed.js';\nexport { default as GitPullRequestCreateArrow, default as GitPullRequestCreateArrowIcon, default as LucideGitPullRequestCreateArrow } from './icons/git-pull-request-create-arrow.js';\nexport { default as GitPullRequestCreate, default as GitPullRequestCreateIcon, default as LucideGitPullRequestCreate } from './icons/git-pull-request-create.js';\nexport { default as GitPullRequestDraft, default as GitPullRequestDraftIcon, default as LucideGitPullRequestDraft } from './icons/git-pull-request-draft.js';\nexport { default as GitPullRequest, default as GitPullRequestIcon, default as LucideGitPullRequest } from './icons/git-pull-request.js';\nexport { default as Github, default as GithubIcon, default as LucideGithub } from './icons/github.js';\nexport { default as GlassWater, default as GlassWaterIcon, default as LucideGlassWater } from './icons/glass-water.js';\nexport { default as Gitlab, default as GitlabIcon, default as LucideGitlab } from './icons/gitlab.js';\nexport { default as Glasses, default as GlassesIcon, default as LucideGlasses } from './icons/glasses.js';\nexport { default as GlobeLock, default as GlobeLockIcon, default as LucideGlobeLock } from './icons/globe-lock.js';\nexport { default as Globe, default as GlobeIcon, default as LucideGlobe } from './icons/globe.js';\nexport { default as Goal, default as GoalIcon, default as LucideGoal } from './icons/goal.js';\nexport { default as Gpu, default as GpuIcon, default as LucideGpu } from './icons/gpu.js';\nexport { default as GraduationCap, default as GraduationCapIcon, default as LucideGraduationCap } from './icons/graduation-cap.js';\nexport { default as Grape, default as GrapeIcon, default as LucideGrape } from './icons/grape.js';\nexport { default as Grid3x2, default as Grid3x2Icon, default as LucideGrid3x2 } from './icons/grid-3x2.js';\nexport { default as GripHorizontal, default as GripHorizontalIcon, default as LucideGripHorizontal } from './icons/grip-horizontal.js';\nexport { default as GripVertical, default as GripVerticalIcon, default as LucideGripVertical } from './icons/grip-vertical.js';\nexport { default as Grip, default as GripIcon, default as LucideGrip } from './icons/grip.js';\nexport { default as Guitar, default as GuitarIcon, default as LucideGuitar } from './icons/guitar.js';\nexport { default as Group, default as GroupIcon, default as LucideGroup } from './icons/group.js';\nexport { default as Ham, default as HamIcon, default as LucideHam } from './icons/ham.js';\nexport { default as Hamburger, default as HamburgerIcon, default as LucideHamburger } from './icons/hamburger.js';\nexport { default as HandCoins, default as HandCoinsIcon, default as LucideHandCoins } from './icons/hand-coins.js';\nexport { default as Hammer, default as HammerIcon, default as LucideHammer } from './icons/hammer.js';\nexport { default as HandFist, default as HandFistIcon, default as LucideHandFist } from './icons/hand-fist.js';\nexport { default as HandHeart, default as HandHeartIcon, default as LucideHandHeart } from './icons/hand-heart.js';\nexport { default as HandMetal, default as HandMetalIcon, default as LucideHandMetal } from './icons/hand-metal.js';\nexport { default as HandPlatter, default as HandPlatterIcon, default as LucideHandPlatter } from './icons/hand-platter.js';\nexport { default as Hand, default as HandIcon, default as LucideHand } from './icons/hand.js';\nexport { default as Handbag, default as HandbagIcon, default as LucideHandbag } from './icons/handbag.js';\nexport { default as Handshake, default as HandshakeIcon, default as LucideHandshake } from './icons/handshake.js';\nexport { default as HardDriveDownload, default as HardDriveDownloadIcon, default as LucideHardDriveDownload } from './icons/hard-drive-download.js';\nexport { default as HardDriveUpload, default as HardDriveUploadIcon, default as LucideHardDriveUpload } from './icons/hard-drive-upload.js';\nexport { default as HardDrive, default as HardDriveIcon, default as LucideHardDrive } from './icons/hard-drive.js';\nexport { default as HardHat, default as HardHatIcon, default as LucideHardHat } from './icons/hard-hat.js';\nexport { default as Hash, default as HashIcon, default as LucideHash } from './icons/hash.js';\nexport { default as HatGlasses, default as HatGlassesIcon, default as LucideHatGlasses } from './icons/hat-glasses.js';\nexport { default as Haze, default as HazeIcon, default as LucideHaze } from './icons/haze.js';\nexport { default as Heading1, default as Heading1Icon, default as LucideHeading1 } from './icons/heading-1.js';\nexport { default as HdmiPort, default as HdmiPortIcon, default as LucideHdmiPort } from './icons/hdmi-port.js';\nexport { default as Heading2, default as Heading2Icon, default as LucideHeading2 } from './icons/heading-2.js';\nexport { default as Heading3, default as Heading3Icon, default as LucideHeading3 } from './icons/heading-3.js';\nexport { default as Heading5, default as Heading5Icon, default as LucideHeading5 } from './icons/heading-5.js';\nexport { default as Heading4, default as Heading4Icon, default as LucideHeading4 } from './icons/heading-4.js';\nexport { default as Heading6, default as Heading6Icon, default as LucideHeading6 } from './icons/heading-6.js';\nexport { default as Heading, default as HeadingIcon, default as LucideHeading } from './icons/heading.js';\nexport { default as HeadphoneOff, default as HeadphoneOffIcon, default as LucideHeadphoneOff } from './icons/headphone-off.js';\nexport { default as Headphones, default as HeadphonesIcon, default as LucideHeadphones } from './icons/headphones.js';\nexport { default as Headset, default as HeadsetIcon, default as LucideHeadset } from './icons/headset.js';\nexport { default as HeartCrack, default as HeartCrackIcon, default as LucideHeartCrack } from './icons/heart-crack.js';\nexport { default as HeartHandshake, default as HeartHandshakeIcon, default as LucideHeartHandshake } from './icons/heart-handshake.js';\nexport { default as HeartMinus, default as HeartMinusIcon, default as LucideHeartMinus } from './icons/heart-minus.js';\nexport { default as HeartOff, default as HeartOffIcon, default as LucideHeartOff } from './icons/heart-off.js';\nexport { default as HeartPlus, default as HeartPlusIcon, default as LucideHeartPlus } from './icons/heart-plus.js';\nexport { default as HeartPulse, default as HeartPulseIcon, default as LucideHeartPulse } from './icons/heart-pulse.js';\nexport { default as Heart, default as HeartIcon, default as LucideHeart } from './icons/heart.js';\nexport { default as Heater, default as HeaterIcon, default as LucideHeater } from './icons/heater.js';\nexport { default as Hexagon, default as HexagonIcon, default as LucideHexagon } from './icons/hexagon.js';\nexport { default as Highlighter, default as HighlighterIcon, default as LucideHighlighter } from './icons/highlighter.js';\nexport { default as History, default as HistoryIcon, default as LucideHistory } from './icons/history.js';\nexport { default as HopOff, default as HopOffIcon, default as LucideHopOff } from './icons/hop-off.js';\nexport { default as Hop, default as HopIcon, default as LucideHop } from './icons/hop.js';\nexport { default as Hotel, default as HotelIcon, default as LucideHotel } from './icons/hotel.js';\nexport { default as Hospital, default as HospitalIcon, default as LucideHospital } from './icons/hospital.js';\nexport { default as Hourglass, default as HourglassIcon, default as LucideHourglass } from './icons/hourglass.js';\nexport { default as HouseHeart, default as HouseHeartIcon, default as LucideHouseHeart } from './icons/house-heart.js';\nexport { default as HousePlug, default as HousePlugIcon, default as LucideHousePlug } from './icons/house-plug.js';\nexport { default as HousePlus, default as HousePlusIcon, default as LucideHousePlus } from './icons/house-plus.js';\nexport { default as HouseWifi, default as HouseWifiIcon, default as LucideHouseWifi } from './icons/house-wifi.js';\nexport { default as IdCardLanyard, default as IdCardLanyardIcon, default as LucideIdCardLanyard } from './icons/id-card-lanyard.js';\nexport { default as IdCard, default as IdCardIcon, default as LucideIdCard } from './icons/id-card.js';\nexport { default as ImageDown, default as ImageDownIcon, default as LucideImageDown } from './icons/image-down.js';\nexport { default as ImageMinus, default as ImageMinusIcon, default as LucideImageMinus } from './icons/image-minus.js';\nexport { default as ImageOff, default as ImageOffIcon, default as LucideImageOff } from './icons/image-off.js';\nexport { default as ImagePlay, default as ImagePlayIcon, default as LucideImagePlay } from './icons/image-play.js';\nexport { default as ImagePlus, default as ImagePlusIcon, default as LucideImagePlus } from './icons/image-plus.js';\nexport { default as ImageUpscale, default as ImageUpscaleIcon, default as LucideImageUpscale } from './icons/image-upscale.js';\nexport { default as ImageUp, default as ImageUpIcon, default as LucideImageUp } from './icons/image-up.js';\nexport { default as Image, default as ImageIcon, default as LucideImage } from './icons/image.js';\nexport { default as Images, default as ImagesIcon, default as LucideImages } from './icons/images.js';\nexport { default as Import, default as ImportIcon, default as LucideImport } from './icons/import.js';\nexport { default as Inbox, default as InboxIcon, default as LucideInbox } from './icons/inbox.js';\nexport { default as IndianRupee, default as IndianRupeeIcon, default as LucideIndianRupee } from './icons/indian-rupee.js';\nexport { default as Infinity, default as InfinityIcon, default as LucideInfinity } from './icons/infinity.js';\nexport { default as Info, default as InfoIcon, default as LucideInfo } from './icons/info.js';\nexport { default as InspectionPanel, default as InspectionPanelIcon, default as LucideInspectionPanel } from './icons/inspection-panel.js';\nexport { default as Instagram, default as InstagramIcon, default as LucideInstagram } from './icons/instagram.js';\nexport { default as Italic, default as ItalicIcon, default as LucideItalic } from './icons/italic.js';\nexport { default as IterationCcw, default as IterationCcwIcon, default as LucideIterationCcw } from './icons/iteration-ccw.js';\nexport { default as IterationCw, default as IterationCwIcon, default as LucideIterationCw } from './icons/iteration-cw.js';\nexport { default as JapaneseYen, default as JapaneseYenIcon, default as LucideJapaneseYen } from './icons/japanese-yen.js';\nexport { default as Joystick, default as JoystickIcon, default as LucideJoystick } from './icons/joystick.js';\nexport { default as Kanban, default as KanbanIcon, default as LucideKanban } from './icons/kanban.js';\nexport { default as Kayak, default as KayakIcon, default as LucideKayak } from './icons/kayak.js';\nexport { default as KeySquare, default as KeySquareIcon, default as LucideKeySquare } from './icons/key-square.js';\nexport { default as KeyRound, default as KeyRoundIcon, default as LucideKeyRound } from './icons/key-round.js';\nexport { default as Key, default as KeyIcon, default as LucideKey } from './icons/key.js';\nexport { default as KeyboardMusic, default as KeyboardMusicIcon, default as LucideKeyboardMusic } from './icons/keyboard-music.js';\nexport { default as KeyboardOff, default as KeyboardOffIcon, default as LucideKeyboardOff } from './icons/keyboard-off.js';\nexport { default as Keyboard, default as KeyboardIcon, default as LucideKeyboard } from './icons/keyboard.js';\nexport { default as LampCeiling, default as LampCeilingIcon, default as LucideLampCeiling } from './icons/lamp-ceiling.js';\nexport { default as LampDesk, default as LampDeskIcon, default as LucideLampDesk } from './icons/lamp-desk.js';\nexport { default as LampWallDown, default as LampWallDownIcon, default as LucideLampWallDown } from './icons/lamp-wall-down.js';\nexport { default as LampFloor, default as LampFloorIcon, default as LucideLampFloor } from './icons/lamp-floor.js';\nexport { default as LampWallUp, default as LampWallUpIcon, default as LucideLampWallUp } from './icons/lamp-wall-up.js';\nexport { default as Lamp, default as LampIcon, default as LucideLamp } from './icons/lamp.js';\nexport { default as LandPlot, default as LandPlotIcon, default as LucideLandPlot } from './icons/land-plot.js';\nexport { default as Landmark, default as LandmarkIcon, default as LucideLandmark } from './icons/landmark.js';\nexport { default as LaptopMinimalCheck, default as LaptopMinimalCheckIcon, default as LucideLaptopMinimalCheck } from './icons/laptop-minimal-check.js';\nexport { default as Languages, default as LanguagesIcon, default as LucideLanguages } from './icons/languages.js';\nexport { default as Laptop, default as LaptopIcon, default as LucideLaptop } from './icons/laptop.js';\nexport { default as LassoSelect, default as LassoSelectIcon, default as LucideLassoSelect } from './icons/lasso-select.js';\nexport { default as Lasso, default as LassoIcon, default as LucideLasso } from './icons/lasso.js';\nexport { default as Laugh, default as LaughIcon, default as LucideLaugh } from './icons/laugh.js';\nexport { default as Layers2, default as Layers2Icon, default as LucideLayers2 } from './icons/layers-2.js';\nexport { default as LayoutDashboard, default as LayoutDashboardIcon, default as LucideLayoutDashboard } from './icons/layout-dashboard.js';\nexport { default as LayoutGrid, default as LayoutGridIcon, default as LucideLayoutGrid } from './icons/layout-grid.js';\nexport { default as LayoutPanelLeft, default as LayoutPanelLeftIcon, default as LucideLayoutPanelLeft } from './icons/layout-panel-left.js';\nexport { default as LayoutList, default as LayoutListIcon, default as LucideLayoutList } from './icons/layout-list.js';\nexport { default as LayoutPanelTop, default as LayoutPanelTopIcon, default as LucideLayoutPanelTop } from './icons/layout-panel-top.js';\nexport { default as LayoutTemplate, default as LayoutTemplateIcon, default as LucideLayoutTemplate } from './icons/layout-template.js';\nexport { default as Leaf, default as LeafIcon, default as LucideLeaf } from './icons/leaf.js';\nexport { default as Lectern, default as LecternIcon, default as LucideLectern } from './icons/lectern.js';\nexport { default as LibraryBig, default as LibraryBigIcon, default as LucideLibraryBig } from './icons/library-big.js';\nexport { default as LeafyGreen, default as LeafyGreenIcon, default as LucideLeafyGreen } from './icons/leafy-green.js';\nexport { default as Library, default as LibraryIcon, default as LucideLibrary } from './icons/library.js';\nexport { default as LifeBuoy, default as LifeBuoyIcon, default as LucideLifeBuoy } from './icons/life-buoy.js';\nexport { default as Ligature, default as LigatureIcon, default as LucideLigature } from './icons/ligature.js';\nexport { default as LightbulbOff, default as LightbulbOffIcon, default as LucideLightbulbOff } from './icons/lightbulb-off.js';\nexport { default as Lightbulb, default as LightbulbIcon, default as LucideLightbulb } from './icons/lightbulb.js';\nexport { default as LineSquiggle, default as LineSquiggleIcon, default as LucideLineSquiggle } from './icons/line-squiggle.js';\nexport { default as Link2Off, default as Link2OffIcon, default as LucideLink2Off } from './icons/link-2-off.js';\nexport { default as Link2, default as Link2Icon, default as LucideLink2 } from './icons/link-2.js';\nexport { default as Linkedin, default as LinkedinIcon, default as LucideLinkedin } from './icons/linkedin.js';\nexport { default as ListCheck, default as ListCheckIcon, default as LucideListCheck } from './icons/list-check.js';\nexport { default as Link, default as LinkIcon, default as LucideLink } from './icons/link.js';\nexport { default as ListChecks, default as ListChecksIcon, default as LucideListChecks } from './icons/list-checks.js';\nexport { default as ListChevronsDownUp, default as ListChevronsDownUpIcon, default as LucideListChevronsDownUp } from './icons/list-chevrons-down-up.js';\nexport { default as ListChevronsUpDown, default as ListChevronsUpDownIcon, default as LucideListChevronsUpDown } from './icons/list-chevrons-up-down.js';\nexport { default as ListCollapse, default as ListCollapseIcon, default as LucideListCollapse } from './icons/list-collapse.js';\nexport { default as ListEnd, default as ListEndIcon, default as LucideListEnd } from './icons/list-end.js';\nexport { default as ListFilterPlus, default as ListFilterPlusIcon, default as LucideListFilterPlus } from './icons/list-filter-plus.js';\nexport { default as ListFilter, default as ListFilterIcon, default as LucideListFilter } from './icons/list-filter.js';\nexport { default as ListMinus, default as ListMinusIcon, default as LucideListMinus } from './icons/list-minus.js';\nexport { default as ListMusic, default as ListMusicIcon, default as LucideListMusic } from './icons/list-music.js';\nexport { default as ListOrdered, default as ListOrderedIcon, default as LucideListOrdered } from './icons/list-ordered.js';\nexport { default as ListPlus, default as ListPlusIcon, default as LucideListPlus } from './icons/list-plus.js';\nexport { default as ListRestart, default as ListRestartIcon, default as LucideListRestart } from './icons/list-restart.js';\nexport { default as ListStart, default as ListStartIcon, default as LucideListStart } from './icons/list-start.js';\nexport { default as ListTodo, default as ListTodoIcon, default as LucideListTodo } from './icons/list-todo.js';\nexport { default as ListTree, default as ListTreeIcon, default as LucideListTree } from './icons/list-tree.js';\nexport { default as ListVideo, default as ListVideoIcon, default as LucideListVideo } from './icons/list-video.js';\nexport { default as ListX, default as ListXIcon, default as LucideListX } from './icons/list-x.js';\nexport { default as List, default as ListIcon, default as LucideList } from './icons/list.js';\nexport { default as LoaderPinwheel, default as LoaderPinwheelIcon, default as LucideLoaderPinwheel } from './icons/loader-pinwheel.js';\nexport { default as Loader, default as LoaderIcon, default as LucideLoader } from './icons/loader.js';\nexport { default as LocateFixed, default as LocateFixedIcon, default as LucideLocateFixed } from './icons/locate-fixed.js';\nexport { default as LocateOff, default as LocateOffIcon, default as LucideLocateOff } from './icons/locate-off.js';\nexport { default as Locate, default as LocateIcon, default as LucideLocate } from './icons/locate.js';\nexport { default as LockKeyhole, default as LockKeyholeIcon, default as LucideLockKeyhole } from './icons/lock-keyhole.js';\nexport { default as Lock, default as LockIcon, default as LucideLock } from './icons/lock.js';\nexport { default as LogIn, default as LogInIcon, default as LucideLogIn } from './icons/log-in.js';\nexport { default as LogOut, default as LogOutIcon, default as LucideLogOut } from './icons/log-out.js';\nexport { default as Logs, default as LogsIcon, default as LucideLogs } from './icons/logs.js';\nexport { default as Lollipop, default as LollipopIcon, default as LucideLollipop } from './icons/lollipop.js';\nexport { default as LucideLuggage, default as Luggage, default as LuggageIcon } from './icons/luggage.js';\nexport { default as LucideMagnet, default as Magnet, default as MagnetIcon } from './icons/magnet.js';\nexport { default as LucideMailCheck, default as MailCheck, default as MailCheckIcon } from './icons/mail-check.js';\nexport { default as LucideMailOpen, default as MailOpen, default as MailOpenIcon } from './icons/mail-open.js';\nexport { default as LucideMailMinus, default as MailMinus, default as MailMinusIcon } from './icons/mail-minus.js';\nexport { default as LucideMailPlus, default as MailPlus, default as MailPlusIcon } from './icons/mail-plus.js';\nexport { default as LucideMailSearch, default as MailSearch, default as MailSearchIcon } from './icons/mail-search.js';\nexport { default as LucideMailWarning, default as MailWarning, default as MailWarningIcon } from './icons/mail-warning.js';\nexport { default as LucideMailX, default as MailX, default as MailXIcon } from './icons/mail-x.js';\nexport { default as LucideMail, default as Mail, default as MailIcon } from './icons/mail.js';\nexport { default as LucideMailbox, default as Mailbox, default as MailboxIcon } from './icons/mailbox.js';\nexport { default as LucideMails, default as Mails, default as MailsIcon } from './icons/mails.js';\nexport { default as LucideMapMinus, default as MapMinus, default as MapMinusIcon } from './icons/map-minus.js';\nexport { default as LucideMapPinCheck, default as MapPinCheck, default as MapPinCheckIcon } from './icons/map-pin-check.js';\nexport { default as LucideMapPinCheckInside, default as MapPinCheckInside, default as MapPinCheckInsideIcon } from './icons/map-pin-check-inside.js';\nexport { default as LucideMapPinHouse, default as MapPinHouse, default as MapPinHouseIcon } from './icons/map-pin-house.js';\nexport { default as LucideMapPinMinusInside, default as MapPinMinusInside, default as MapPinMinusInsideIcon } from './icons/map-pin-minus-inside.js';\nexport { default as LucideMapPinMinus, default as MapPinMinus, default as MapPinMinusIcon } from './icons/map-pin-minus.js';\nexport { default as LucideMapPinOff, default as MapPinOff, default as MapPinOffIcon } from './icons/map-pin-off.js';\nexport { default as LucideMapPinPlusInside, default as MapPinPlusInside, default as MapPinPlusInsideIcon } from './icons/map-pin-plus-inside.js';\nexport { default as LucideMapPinPlus, default as MapPinPlus, default as MapPinPlusIcon } from './icons/map-pin-plus.js';\nexport { default as LucideMapPinXInside, default as MapPinXInside, default as MapPinXInsideIcon } from './icons/map-pin-x-inside.js';\nexport { default as LucideMapPin, default as MapPin, default as MapPinIcon } from './icons/map-pin.js';\nexport { default as LucideMapPinX, default as MapPinX, default as MapPinXIcon } from './icons/map-pin-x.js';\nexport { default as LucideMapPinned, default as MapPinned, default as MapPinnedIcon } from './icons/map-pinned.js';\nexport { default as LucideMapPlus, default as MapPlus, default as MapPlusIcon } from './icons/map-plus.js';\nexport { default as LucideMap, default as Map, default as MapIcon } from './icons/map.js';\nexport { default as LucideMarsStroke, default as MarsStroke, default as MarsStrokeIcon } from './icons/mars-stroke.js';\nexport { default as LucideMars, default as Mars, default as MarsIcon } from './icons/mars.js';\nexport { default as LucideMaximize2, default as Maximize2, default as Maximize2Icon } from './icons/maximize-2.js';\nexport { default as LucideMartini, default as Martini, default as MartiniIcon } from './icons/martini.js';\nexport { default as LucideMaximize, default as Maximize, default as MaximizeIcon } from './icons/maximize.js';\nexport { default as LucideMedal, default as Medal, default as MedalIcon } from './icons/medal.js';\nexport { default as LucideMegaphoneOff, default as MegaphoneOff, default as MegaphoneOffIcon } from './icons/megaphone-off.js';\nexport { default as LucideMegaphone, default as Megaphone, default as MegaphoneIcon } from './icons/megaphone.js';\nexport { default as LucideMeh, default as Meh, default as MehIcon } from './icons/meh.js';\nexport { default as LucideMemoryStick, default as MemoryStick, default as MemoryStickIcon } from './icons/memory-stick.js';\nexport { default as LucideMenu, default as Menu, default as MenuIcon } from './icons/menu.js';\nexport { default as LucideMessageCircleCode, default as MessageCircleCode, default as MessageCircleCodeIcon } from './icons/message-circle-code.js';\nexport { default as LucideMerge, default as Merge, default as MergeIcon } from './icons/merge.js';\nexport { default as LucideMessageCircleHeart, default as MessageCircleHeart, default as MessageCircleHeartIcon } from './icons/message-circle-heart.js';\nexport { default as LucideMessageCircleDashed, default as MessageCircleDashed, default as MessageCircleDashedIcon } from './icons/message-circle-dashed.js';\nexport { default as LucideMessageCircleMore, default as MessageCircleMore, default as MessageCircleMoreIcon } from './icons/message-circle-more.js';\nexport { default as LucideMessageCircleOff, default as MessageCircleOff, default as MessageCircleOffIcon } from './icons/message-circle-off.js';\nexport { default as LucideMessageCirclePlus, default as MessageCirclePlus, default as MessageCirclePlusIcon } from './icons/message-circle-plus.js';\nexport { default as LucideMessageCircleReply, default as MessageCircleReply, default as MessageCircleReplyIcon } from './icons/message-circle-reply.js';\nexport { default as LucideMessageCircleWarning, default as MessageCircleWarning, default as MessageCircleWarningIcon } from './icons/message-circle-warning.js';\nexport { default as LucideMessageCircleX, default as MessageCircleX, default as MessageCircleXIcon } from './icons/message-circle-x.js';\nexport { default as LucideMessageCircle, default as MessageCircle, default as MessageCircleIcon } from './icons/message-circle.js';\nexport { default as LucideMessageSquareCode, default as MessageSquareCode, default as MessageSquareCodeIcon } from './icons/message-square-code.js';\nexport { default as LucideMessageSquareDashed, default as MessageSquareDashed, default as MessageSquareDashedIcon } from './icons/message-square-dashed.js';\nexport { default as LucideMessageSquareDot, default as MessageSquareDot, default as MessageSquareDotIcon } from './icons/message-square-dot.js';\nexport { default as LucideMessageSquareDiff, default as MessageSquareDiff, default as MessageSquareDiffIcon } from './icons/message-square-diff.js';\nexport { default as LucideMessageSquareHeart, default as MessageSquareHeart, default as MessageSquareHeartIcon } from './icons/message-square-heart.js';\nexport { default as LucideMessageSquareLock, default as MessageSquareLock, default as MessageSquareLockIcon } from './icons/message-square-lock.js';\nexport { default as LucideMessageSquareMore, default as MessageSquareMore, default as MessageSquareMoreIcon } from './icons/message-square-more.js';\nexport { default as LucideMessageSquareOff, default as MessageSquareOff, default as MessageSquareOffIcon } from './icons/message-square-off.js';\nexport { default as LucideMessageSquarePlus, default as MessageSquarePlus, default as MessageSquarePlusIcon } from './icons/message-square-plus.js';\nexport { default as LucideMessageSquareReply, default as MessageSquareReply, default as MessageSquareReplyIcon } from './icons/message-square-reply.js';\nexport { default as LucideMessageSquareQuote, default as MessageSquareQuote, default as MessageSquareQuoteIcon } from './icons/message-square-quote.js';\nexport { default as LucideMessageSquareText, default as MessageSquareText, default as MessageSquareTextIcon } from './icons/message-square-text.js';\nexport { default as LucideMessageSquareShare, default as MessageSquareShare, default as MessageSquareShareIcon } from './icons/message-square-share.js';\nexport { default as LucideMessageSquareWarning, default as MessageSquareWarning, default as MessageSquareWarningIcon } from './icons/message-square-warning.js';\nexport { default as LucideMessageSquareX, default as MessageSquareX, default as MessageSquareXIcon } from './icons/message-square-x.js';\nexport { default as LucideMessageSquare, default as MessageSquare, default as MessageSquareIcon } from './icons/message-square.js';\nexport { default as LucideMessagesSquare, default as MessagesSquare, default as MessagesSquareIcon } from './icons/messages-square.js';\nexport { default as LucideMicOff, default as MicOff, default as MicOffIcon } from './icons/mic-off.js';\nexport { default as LucideMic, default as Mic, default as MicIcon } from './icons/mic.js';\nexport { default as LucideMicrochip, default as Microchip, default as MicrochipIcon } from './icons/microchip.js';\nexport { default as LucideMicroscope, default as Microscope, default as MicroscopeIcon } from './icons/microscope.js';\nexport { default as LucideMicrowave, default as Microwave, default as MicrowaveIcon } from './icons/microwave.js';\nexport { default as LucideMilestone, default as Milestone, default as MilestoneIcon } from './icons/milestone.js';\nexport { default as LucideMilkOff, default as MilkOff, default as MilkOffIcon } from './icons/milk-off.js';\nexport { default as LucideMilk, default as Milk, default as MilkIcon } from './icons/milk.js';\nexport { default as LucideMinimize2, default as Minimize2, default as Minimize2Icon } from './icons/minimize-2.js';\nexport { default as LucideMinimize, default as Minimize, default as MinimizeIcon } from './icons/minimize.js';\nexport { default as LucideMinus, default as Minus, default as MinusIcon } from './icons/minus.js';\nexport { default as LucideMonitorCheck, default as MonitorCheck, default as MonitorCheckIcon } from './icons/monitor-check.js';\nexport { default as LucideMonitorCog, default as MonitorCog, default as MonitorCogIcon } from './icons/monitor-cog.js';\nexport { default as LucideMonitorDown, default as MonitorDown, default as MonitorDownIcon } from './icons/monitor-down.js';\nexport { default as LucideMonitorDot, default as MonitorDot, default as MonitorDotIcon } from './icons/monitor-dot.js';\nexport { default as LucideMonitorOff, default as MonitorOff, default as MonitorOffIcon } from './icons/monitor-off.js';\nexport { default as LucideMonitorPlay, default as MonitorPlay, default as MonitorPlayIcon } from './icons/monitor-play.js';\nexport { default as LucideMonitorPause, default as MonitorPause, default as MonitorPauseIcon } from './icons/monitor-pause.js';\nexport { default as LucideMonitorSmartphone, default as MonitorSmartphone, default as MonitorSmartphoneIcon } from './icons/monitor-smartphone.js';\nexport { default as LucideMonitorStop, default as MonitorStop, default as MonitorStopIcon } from './icons/monitor-stop.js';\nexport { default as LucideMonitorSpeaker, default as MonitorSpeaker, default as MonitorSpeakerIcon } from './icons/monitor-speaker.js';\nexport { default as LucideMonitorUp, default as MonitorUp, default as MonitorUpIcon } from './icons/monitor-up.js';\nexport { default as LucideMonitorX, default as MonitorX, default as MonitorXIcon } from './icons/monitor-x.js';\nexport { default as LucideMonitor, default as Monitor, default as MonitorIcon } from './icons/monitor.js';\nexport { default as LucideMoonStar, default as MoonStar, default as MoonStarIcon } from './icons/moon-star.js';\nexport { default as LucideMoon, default as Moon, default as MoonIcon } from './icons/moon.js';\nexport { default as LucideMountainSnow, default as MountainSnow, default as MountainSnowIcon } from './icons/mountain-snow.js';\nexport { default as LucideMountain, default as Mountain, default as MountainIcon } from './icons/mountain.js';\nexport { default as LucideMouseOff, default as MouseOff, default as MouseOffIcon } from './icons/mouse-off.js';\nexport { default as LucideMousePointer2, default as MousePointer2, default as MousePointer2Icon } from './icons/mouse-pointer-2.js';\nexport { default as LucideMousePointerBan, default as MousePointerBan, default as MousePointerBanIcon } from './icons/mouse-pointer-ban.js';\nexport { default as LucideMousePointerClick, default as MousePointerClick, default as MousePointerClickIcon } from './icons/mouse-pointer-click.js';\nexport { default as LucideMousePointer, default as MousePointer, default as MousePointerIcon } from './icons/mouse-pointer.js';\nexport { default as LucideMouse, default as Mouse, default as MouseIcon } from './icons/mouse.js';\nexport { default as LucideMoveDiagonal, default as MoveDiagonal, default as MoveDiagonalIcon } from './icons/move-diagonal.js';\nexport { default as LucideMoveDiagonal2, default as MoveDiagonal2, default as MoveDiagonal2Icon } from './icons/move-diagonal-2.js';\nexport { default as LucideMoveDownLeft, default as MoveDownLeft, default as MoveDownLeftIcon } from './icons/move-down-left.js';\nexport { default as LucideMoveDownRight, default as MoveDownRight, default as MoveDownRightIcon } from './icons/move-down-right.js';\nexport { default as LucideMoveDown, default as MoveDown, default as MoveDownIcon } from './icons/move-down.js';\nexport { default as LucideMoveHorizontal, default as MoveHorizontal, default as MoveHorizontalIcon } from './icons/move-horizontal.js';\nexport { default as LucideMoveLeft, default as MoveLeft, default as MoveLeftIcon } from './icons/move-left.js';\nexport { default as LucideMoveRight, default as MoveRight, default as MoveRightIcon } from './icons/move-right.js';\nexport { default as LucideMoveUpLeft, default as MoveUpLeft, default as MoveUpLeftIcon } from './icons/move-up-left.js';\nexport { default as LucideMoveUpRight, default as MoveUpRight, default as MoveUpRightIcon } from './icons/move-up-right.js';\nexport { default as LucideMoveUp, default as MoveUp, default as MoveUpIcon } from './icons/move-up.js';\nexport { default as LucideMoveVertical, default as MoveVertical, default as MoveVerticalIcon } from './icons/move-vertical.js';\nexport { default as LucideMove, default as Move, default as MoveIcon } from './icons/move.js';\nexport { default as LucideMusic2, default as Music2, default as Music2Icon } from './icons/music-2.js';\nexport { default as LucideMusic3, default as Music3, default as Music3Icon } from './icons/music-3.js';\nexport { default as LucideMusic4, default as Music4, default as Music4Icon } from './icons/music-4.js';\nexport { default as LucideMusic, default as Music, default as MusicIcon } from './icons/music.js';\nexport { default as LucideNavigation2Off, default as Navigation2Off, default as Navigation2OffIcon } from './icons/navigation-2-off.js';\nexport { default as LucideNavigation2, default as Navigation2, default as Navigation2Icon } from './icons/navigation-2.js';\nexport { default as LucideNavigationOff, default as NavigationOff, default as NavigationOffIcon } from './icons/navigation-off.js';\nexport { default as LucideNavigation, default as Navigation, default as NavigationIcon } from './icons/navigation.js';\nexport { default as LucideNetwork, default as Network, default as NetworkIcon } from './icons/network.js';\nexport { default as LucideNewspaper, default as Newspaper, default as NewspaperIcon } from './icons/newspaper.js';\nexport { default as LucideNfc, default as Nfc, default as NfcIcon } from './icons/nfc.js';\nexport { default as LucideNonBinary, default as NonBinary, default as NonBinaryIcon } from './icons/non-binary.js';\nexport { default as LucideNotebookPen, default as NotebookPen, default as NotebookPenIcon } from './icons/notebook-pen.js';\nexport { default as LucideNotebookText, default as NotebookText, default as NotebookTextIcon } from './icons/notebook-text.js';\nexport { default as LucideNotebookTabs, default as NotebookTabs, default as NotebookTabsIcon } from './icons/notebook-tabs.js';\nexport { default as LucideNotebook, default as Notebook, default as NotebookIcon } from './icons/notebook.js';\nexport { default as LucideNotepadText, default as NotepadText, default as NotepadTextIcon } from './icons/notepad-text.js';\nexport { default as LucideNotepadTextDashed, default as NotepadTextDashed, default as NotepadTextDashedIcon } from './icons/notepad-text-dashed.js';\nexport { default as LucideNutOff, default as NutOff, default as NutOffIcon } from './icons/nut-off.js';\nexport { default as LucideNut, default as Nut, default as NutIcon } from './icons/nut.js';\nexport { default as LucideOctagonMinus, default as OctagonMinus, default as OctagonMinusIcon } from './icons/octagon-minus.js';\nexport { default as LucideOctagon, default as Octagon, default as OctagonIcon } from './icons/octagon.js';\nexport { default as LucideOmega, default as Omega, default as OmegaIcon } from './icons/omega.js';\nexport { default as LucideOption, default as Option, default as OptionIcon } from './icons/option.js';\nexport { default as LucideOrbit, default as Orbit, default as OrbitIcon } from './icons/orbit.js';\nexport { default as LucideOrigami, default as Origami, default as OrigamiIcon } from './icons/origami.js';\nexport { default as LucidePackageCheck, default as PackageCheck, default as PackageCheckIcon } from './icons/package-check.js';\nexport { default as LucidePackage2, default as Package2, default as Package2Icon } from './icons/package-2.js';\nexport { default as LucidePackageMinus, default as PackageMinus, default as PackageMinusIcon } from './icons/package-minus.js';\nexport { default as LucidePackageOpen, default as PackageOpen, default as PackageOpenIcon } from './icons/package-open.js';\nexport { default as LucidePackagePlus, default as PackagePlus, default as PackagePlusIcon } from './icons/package-plus.js';\nexport { default as LucidePackageSearch, default as PackageSearch, default as PackageSearchIcon } from './icons/package-search.js';\nexport { default as LucidePackageX, default as PackageX, default as PackageXIcon } from './icons/package-x.js';\nexport { default as LucidePackage, default as Package, default as PackageIcon } from './icons/package.js';\nexport { default as LucidePaintBucket, default as PaintBucket, default as PaintBucketIcon } from './icons/paint-bucket.js';\nexport { default as LucidePaintRoller, default as PaintRoller, default as PaintRollerIcon } from './icons/paint-roller.js';\nexport { default as LucidePaintbrush, default as Paintbrush, default as PaintbrushIcon } from './icons/paintbrush.js';\nexport { default as LucidePalette, default as Palette, default as PaletteIcon } from './icons/palette.js';\nexport { default as LucidePanda, default as Panda, default as PandaIcon } from './icons/panda.js';\nexport { default as LucidePanelBottomClose, default as PanelBottomClose, default as PanelBottomCloseIcon } from './icons/panel-bottom-close.js';\nexport { default as LucidePanelBottom, default as PanelBottom, default as PanelBottomIcon } from './icons/panel-bottom.js';\nexport { default as LucidePanelBottomOpen, default as PanelBottomOpen, default as PanelBottomOpenIcon } from './icons/panel-bottom-open.js';\nexport { default as LucidePanelLeftRightDashed, default as PanelLeftRightDashed, default as PanelLeftRightDashedIcon } from './icons/panel-left-right-dashed.js';\nexport { default as LucidePanelRightClose, default as PanelRightClose, default as PanelRightCloseIcon } from './icons/panel-right-close.js';\nexport { default as LucidePanelRightOpen, default as PanelRightOpen, default as PanelRightOpenIcon } from './icons/panel-right-open.js';\nexport { default as LucidePanelRight, default as PanelRight, default as PanelRightIcon } from './icons/panel-right.js';\nexport { default as LucidePanelTopBottomDashed, default as PanelTopBottomDashed, default as PanelTopBottomDashedIcon } from './icons/panel-top-bottom-dashed.js';\nexport { default as LucidePanelTopClose, default as PanelTopClose, default as PanelTopCloseIcon } from './icons/panel-top-close.js';\nexport { default as LucidePanelTopOpen, default as PanelTopOpen, default as PanelTopOpenIcon } from './icons/panel-top-open.js';\nexport { default as LucidePanelTop, default as PanelTop, default as PanelTopIcon } from './icons/panel-top.js';\nexport { default as LucidePanelsLeftBottom, default as PanelsLeftBottom, default as PanelsLeftBottomIcon } from './icons/panels-left-bottom.js';\nexport { default as LucidePanelsRightBottom, default as PanelsRightBottom, default as PanelsRightBottomIcon } from './icons/panels-right-bottom.js';\nexport { default as LucidePaperclip, default as Paperclip, default as PaperclipIcon } from './icons/paperclip.js';\nexport { default as LucideParentheses, default as Parentheses, default as ParenthesesIcon } from './icons/parentheses.js';\nexport { default as LucideParkingMeter, default as ParkingMeter, default as ParkingMeterIcon } from './icons/parking-meter.js';\nexport { default as LucidePartyPopper, default as PartyPopper, default as PartyPopperIcon } from './icons/party-popper.js';\nexport { default as LucidePause, default as Pause, default as PauseIcon } from './icons/pause.js';\nexport { default as LucidePawPrint, default as PawPrint, default as PawPrintIcon } from './icons/paw-print.js';\nexport { default as LucidePcCase, default as PcCase, default as PcCaseIcon } from './icons/pc-case.js';\nexport { default as LucidePenOff, default as PenOff, default as PenOffIcon } from './icons/pen-off.js';\nexport { default as LucidePenTool, default as PenTool, default as PenToolIcon } from './icons/pen-tool.js';\nexport { default as LucidePencilLine, default as PencilLine, default as PencilLineIcon } from './icons/pencil-line.js';\nexport { default as LucidePencilOff, default as PencilOff, default as PencilOffIcon } from './icons/pencil-off.js';\nexport { default as LucidePencilRuler, default as PencilRuler, default as PencilRulerIcon } from './icons/pencil-ruler.js';\nexport { default as LucidePencil, default as Pencil, default as PencilIcon } from './icons/pencil.js';\nexport { default as LucidePentagon, default as Pentagon, default as PentagonIcon } from './icons/pentagon.js';\nexport { default as LucidePercent, default as Percent, default as PercentIcon } from './icons/percent.js';\nexport { default as LucidePersonStanding, default as PersonStanding, default as PersonStandingIcon } from './icons/person-standing.js';\nexport { default as LucidePhilippinePeso, default as PhilippinePeso, default as PhilippinePesoIcon } from './icons/philippine-peso.js';\nexport { default as LucidePhoneCall, default as PhoneCall, default as PhoneCallIcon } from './icons/phone-call.js';\nexport { default as LucidePhoneForwarded, default as PhoneForwarded, default as PhoneForwardedIcon } from './icons/phone-forwarded.js';\nexport { default as LucidePhoneIncoming, default as PhoneIncoming, default as PhoneIncomingIcon } from './icons/phone-incoming.js';\nexport { default as LucidePhoneMissed, default as PhoneMissed, default as PhoneMissedIcon } from './icons/phone-missed.js';\nexport { default as LucidePhoneOff, default as PhoneOff, default as PhoneOffIcon } from './icons/phone-off.js';\nexport { default as LucidePhoneOutgoing, default as PhoneOutgoing, default as PhoneOutgoingIcon } from './icons/phone-outgoing.js';\nexport { default as LucidePhone, default as Phone, default as PhoneIcon } from './icons/phone.js';\nexport { default as LucidePi, default as Pi, default as PiIcon } from './icons/pi.js';\nexport { default as LucidePickaxe, default as Pickaxe, default as PickaxeIcon } from './icons/pickaxe.js';\nexport { default as LucidePiano, default as Piano, default as PianoIcon } from './icons/piano.js';\nexport { default as LucidePictureInPicture2, default as PictureInPicture2, default as PictureInPicture2Icon } from './icons/picture-in-picture-2.js';\nexport { default as LucidePictureInPicture, default as PictureInPicture, default as PictureInPictureIcon } from './icons/picture-in-picture.js';\nexport { default as LucidePilcrowLeft, default as PilcrowLeft, default as PilcrowLeftIcon } from './icons/pilcrow-left.js';\nexport { default as LucidePiggyBank, default as PiggyBank, default as PiggyBankIcon } from './icons/piggy-bank.js';\nexport { default as LucidePilcrowRight, default as PilcrowRight, default as PilcrowRightIcon } from './icons/pilcrow-right.js';\nexport { default as LucidePilcrow, default as Pilcrow, default as PilcrowIcon } from './icons/pilcrow.js';\nexport { default as LucidePillBottle, default as PillBottle, default as PillBottleIcon } from './icons/pill-bottle.js';\nexport { default as LucidePill, default as Pill, default as PillIcon } from './icons/pill.js';\nexport { default as LucidePinOff, default as PinOff, default as PinOffIcon } from './icons/pin-off.js';\nexport { default as LucidePin, default as Pin, default as PinIcon } from './icons/pin.js';\nexport { default as LucidePipette, default as Pipette, default as PipetteIcon } from './icons/pipette.js';\nexport { default as LucidePizza, default as Pizza, default as PizzaIcon } from './icons/pizza.js';\nexport { default as LucidePlaneLanding, default as PlaneLanding, default as PlaneLandingIcon } from './icons/plane-landing.js';\nexport { default as LucidePlaneTakeoff, default as PlaneTakeoff, default as PlaneTakeoffIcon } from './icons/plane-takeoff.js';\nexport { default as LucidePlane, default as Plane, default as PlaneIcon } from './icons/plane.js';\nexport { default as LucidePlay, default as Play, default as PlayIcon } from './icons/play.js';\nexport { default as LucidePlug2, default as Plug2, default as Plug2Icon } from './icons/plug-2.js';\nexport { default as LucidePlug, default as Plug, default as PlugIcon } from './icons/plug.js';\nexport { default as LucidePlus, default as Plus, default as PlusIcon } from './icons/plus.js';\nexport { default as LucidePocketKnife, default as PocketKnife, default as PocketKnifeIcon } from './icons/pocket-knife.js';\nexport { default as LucidePocket, default as Pocket, default as PocketIcon } from './icons/pocket.js';\nexport { default as LucidePodcast, default as Podcast, default as PodcastIcon } from './icons/podcast.js';\nexport { default as LucidePointerOff, default as PointerOff, default as PointerOffIcon } from './icons/pointer-off.js';\nexport { default as LucidePointer, default as Pointer, default as PointerIcon } from './icons/pointer.js';\nexport { default as LucidePopcorn, default as Popcorn, default as PopcornIcon } from './icons/popcorn.js';\nexport { default as LucidePopsicle, default as Popsicle, default as PopsicleIcon } from './icons/popsicle.js';\nexport { default as LucidePoundSterling, default as PoundSterling, default as PoundSterlingIcon } from './icons/pound-sterling.js';\nexport { default as LucidePower, default as Power, default as PowerIcon } from './icons/power.js';\nexport { default as LucidePowerOff, default as PowerOff, default as PowerOffIcon } from './icons/power-off.js';\nexport { default as LucidePresentation, default as Presentation, default as PresentationIcon } from './icons/presentation.js';\nexport { default as LucidePrinterCheck, default as PrinterCheck, default as PrinterCheckIcon } from './icons/printer-check.js';\nexport { default as LucidePrinter, default as Printer, default as PrinterIcon } from './icons/printer.js';\nexport { default as LucideProjector, default as Projector, default as ProjectorIcon } from './icons/projector.js';\nexport { default as LucideProportions, default as Proportions, default as ProportionsIcon } from './icons/proportions.js';\nexport { default as LucidePuzzle, default as Puzzle, default as PuzzleIcon } from './icons/puzzle.js';\nexport { default as LucidePyramid, default as Pyramid, default as PyramidIcon } from './icons/pyramid.js';\nexport { default as LucideQrCode, default as QrCode, default as QrCodeIcon } from './icons/qr-code.js';\nexport { default as LucideQuote, default as Quote, default as QuoteIcon } from './icons/quote.js';\nexport { default as LucideRabbit, default as Rabbit, default as RabbitIcon } from './icons/rabbit.js';\nexport { default as LucideRadar, default as Radar, default as RadarIcon } from './icons/radar.js';\nexport { default as LucideRadiation, default as Radiation, default as RadiationIcon } from './icons/radiation.js';\nexport { default as LucideRadical, default as Radical, default as RadicalIcon } from './icons/radical.js';\nexport { default as LucideRadioReceiver, default as RadioReceiver, default as RadioReceiverIcon } from './icons/radio-receiver.js';\nexport { default as LucideRadioTower, default as RadioTower, default as RadioTowerIcon } from './icons/radio-tower.js';\nexport { default as LucideRadio, default as Radio, default as RadioIcon } from './icons/radio.js';\nexport { default as LucideRadius, default as Radius, default as RadiusIcon } from './icons/radius.js';\nexport { default as LucideRailSymbol, default as RailSymbol, default as RailSymbolIcon } from './icons/rail-symbol.js';\nexport { default as LucideRainbow, default as Rainbow, default as RainbowIcon } from './icons/rainbow.js';\nexport { default as LucideRat, default as Rat, default as RatIcon } from './icons/rat.js';\nexport { default as LucideRatio, default as Ratio, default as RatioIcon } from './icons/ratio.js';\nexport { default as LucideReceiptCent, default as ReceiptCent, default as ReceiptCentIcon } from './icons/receipt-cent.js';\nexport { default as LucideReceiptIndianRupee, default as ReceiptIndianRupee, default as ReceiptIndianRupeeIcon } from './icons/receipt-indian-rupee.js';\nexport { default as LucideReceiptEuro, default as ReceiptEuro, default as ReceiptEuroIcon } from './icons/receipt-euro.js';\nexport { default as LucideReceiptJapaneseYen, default as ReceiptJapaneseYen, default as ReceiptJapaneseYenIcon } from './icons/receipt-japanese-yen.js';\nexport { default as LucideReceiptPoundSterling, default as ReceiptPoundSterling, default as ReceiptPoundSterlingIcon } from './icons/receipt-pound-sterling.js';\nexport { default as LucideReceiptRussianRuble, default as ReceiptRussianRuble, default as ReceiptRussianRubleIcon } from './icons/receipt-russian-ruble.js';\nexport { default as LucideReceiptSwissFranc, default as ReceiptSwissFranc, default as ReceiptSwissFrancIcon } from './icons/receipt-swiss-franc.js';\nexport { default as LucideReceiptText, default as ReceiptText, default as ReceiptTextIcon } from './icons/receipt-text.js';\nexport { default as LucideReceiptTurkishLira, default as ReceiptTurkishLira, default as ReceiptTurkishLiraIcon } from './icons/receipt-turkish-lira.js';\nexport { default as LucideReceipt, default as Receipt, default as ReceiptIcon } from './icons/receipt.js';\nexport { default as LucideRectangleCircle, default as RectangleCircle, default as RectangleCircleIcon } from './icons/rectangle-circle.js';\nexport { default as LucideRectangleGoggles, default as RectangleGoggles, default as RectangleGogglesIcon } from './icons/rectangle-goggles.js';\nexport { default as LucideRectangleHorizontal, default as RectangleHorizontal, default as RectangleHorizontalIcon } from './icons/rectangle-horizontal.js';\nexport { default as LucideRectangleVertical, default as RectangleVertical, default as RectangleVerticalIcon } from './icons/rectangle-vertical.js';\nexport { default as LucideRecycle, default as Recycle, default as RecycleIcon } from './icons/recycle.js';\nexport { default as LucideRedo2, default as Redo2, default as Redo2Icon } from './icons/redo-2.js';\nexport { default as LucideRedoDot, default as RedoDot, default as RedoDotIcon } from './icons/redo-dot.js';\nexport { default as LucideRefreshCcwDot, default as RefreshCcwDot, default as RefreshCcwDotIcon } from './icons/refresh-ccw-dot.js';\nexport { default as LucideRedo, default as Redo, default as RedoIcon } from './icons/redo.js';\nexport { default as LucideRefreshCcw, default as RefreshCcw, default as RefreshCcwIcon } from './icons/refresh-ccw.js';\nexport { default as LucideRefreshCwOff, default as RefreshCwOff, default as RefreshCwOffIcon } from './icons/refresh-cw-off.js';\nexport { default as LucideRefreshCw, default as RefreshCw, default as RefreshCwIcon } from './icons/refresh-cw.js';\nexport { default as LucideRefrigerator, default as Refrigerator, default as RefrigeratorIcon } from './icons/refrigerator.js';\nexport { default as LucideRegex, default as Regex, default as RegexIcon } from './icons/regex.js';\nexport { default as LucideRemoveFormatting, default as RemoveFormatting, default as RemoveFormattingIcon } from './icons/remove-formatting.js';\nexport { default as LucideRepeat1, default as Repeat1, default as Repeat1Icon } from './icons/repeat-1.js';\nexport { default as LucideRepeat2, default as Repeat2, default as Repeat2Icon } from './icons/repeat-2.js';\nexport { default as LucideRepeat, default as Repeat, default as RepeatIcon } from './icons/repeat.js';\nexport { default as LucideReplaceAll, default as ReplaceAll, default as ReplaceAllIcon } from './icons/replace-all.js';\nexport { default as LucideReplace, default as Replace, default as ReplaceIcon } from './icons/replace.js';\nexport { default as LucideReplyAll, default as ReplyAll, default as ReplyAllIcon } from './icons/reply-all.js';\nexport { default as LucideReply, default as Reply, default as ReplyIcon } from './icons/reply.js';\nexport { default as LucideRewind, default as Rewind, default as RewindIcon } from './icons/rewind.js';\nexport { default as LucideRibbon, default as Ribbon, default as RibbonIcon } from './icons/ribbon.js';\nexport { default as LucideRocket, default as Rocket, default as RocketIcon } from './icons/rocket.js';\nexport { default as LucideRockingChair, default as RockingChair, default as RockingChairIcon } from './icons/rocking-chair.js';\nexport { default as LucideRose, default as Rose, default as RoseIcon } from './icons/rose.js';\nexport { default as LucideRollerCoaster, default as RollerCoaster, default as RollerCoasterIcon } from './icons/roller-coaster.js';\nexport { default as LucideRotateCcwKey, default as RotateCcwKey, default as RotateCcwKeyIcon } from './icons/rotate-ccw-key.js';\nexport { default as LucideRotateCcwSquare, default as RotateCcwSquare, default as RotateCcwSquareIcon } from './icons/rotate-ccw-square.js';\nexport { default as LucideRotateCcw, default as RotateCcw, default as RotateCcwIcon } from './icons/rotate-ccw.js';\nexport { default as LucideRotateCwSquare, default as RotateCwSquare, default as RotateCwSquareIcon } from './icons/rotate-cw-square.js';\nexport { default as LucideRotateCw, default as RotateCw, default as RotateCwIcon } from './icons/rotate-cw.js';\nexport { default as LucideRouteOff, default as RouteOff, default as RouteOffIcon } from './icons/route-off.js';\nexport { default as LucideRoute, default as Route, default as RouteIcon } from './icons/route.js';\nexport { default as LucideRouter, default as Router, default as RouterIcon } from './icons/router.js';\nexport { default as LucideRows4, default as Rows4, default as Rows4Icon } from './icons/rows-4.js';\nexport { default as LucideRss, default as Rss, default as RssIcon } from './icons/rss.js';\nexport { default as LucideRulerDimensionLine, default as RulerDimensionLine, default as RulerDimensionLineIcon } from './icons/ruler-dimension-line.js';\nexport { default as LucideRuler, default as Ruler, default as RulerIcon } from './icons/ruler.js';\nexport { default as LucideRussianRuble, default as RussianRuble, default as RussianRubleIcon } from './icons/russian-ruble.js';\nexport { default as LucideSailboat, default as Sailboat, default as SailboatIcon } from './icons/sailboat.js';\nexport { default as LucideSalad, default as Salad, default as SaladIcon } from './icons/salad.js';\nexport { default as LucideSandwich, default as Sandwich, default as SandwichIcon } from './icons/sandwich.js';\nexport { default as LucideSatelliteDish, default as SatelliteDish, default as SatelliteDishIcon } from './icons/satellite-dish.js';\nexport { default as LucideSatellite, default as Satellite, default as SatelliteIcon } from './icons/satellite.js';\nexport { default as LucideSaudiRiyal, default as SaudiRiyal, default as SaudiRiyalIcon } from './icons/saudi-riyal.js';\nexport { default as LucideSaveAll, default as SaveAll, default as SaveAllIcon } from './icons/save-all.js';\nexport { default as LucideSaveOff, default as SaveOff, default as SaveOffIcon } from './icons/save-off.js';\nexport { default as LucideSave, default as Save, default as SaveIcon } from './icons/save.js';\nexport { default as LucideScale, default as Scale, default as ScaleIcon } from './icons/scale.js';\nexport { default as LucideScaling, default as Scaling, default as ScalingIcon } from './icons/scaling.js';\nexport { default as LucideScanBarcode, default as ScanBarcode, default as ScanBarcodeIcon } from './icons/scan-barcode.js';\nexport { default as LucideScanEye, default as ScanEye, default as ScanEyeIcon } from './icons/scan-eye.js';\nexport { default as LucideScanFace, default as ScanFace, default as ScanFaceIcon } from './icons/scan-face.js';\nexport { default as LucideScanHeart, default as ScanHeart, default as ScanHeartIcon } from './icons/scan-heart.js';\nexport { default as LucideScanLine, default as ScanLine, default as ScanLineIcon } from './icons/scan-line.js';\nexport { default as LucideScanQrCode, default as ScanQrCode, default as ScanQrCodeIcon } from './icons/scan-qr-code.js';\nexport { default as LucideScanSearch, default as ScanSearch, default as ScanSearchIcon } from './icons/scan-search.js';\nexport { default as LucideScanText, default as ScanText, default as ScanTextIcon } from './icons/scan-text.js';\nexport { default as LucideScan, default as Scan, default as ScanIcon } from './icons/scan.js';\nexport { default as LucideSchool, default as School, default as SchoolIcon } from './icons/school.js';\nexport { default as LucideScissorsLineDashed, default as ScissorsLineDashed, default as ScissorsLineDashedIcon } from './icons/scissors-line-dashed.js';\nexport { default as LucideScissors, default as Scissors, default as ScissorsIcon } from './icons/scissors.js';\nexport { default as LucideScreenShare, default as ScreenShare, default as ScreenShareIcon } from './icons/screen-share.js';\nexport { default as LucideScreenShareOff, default as ScreenShareOff, default as ScreenShareOffIcon } from './icons/screen-share-off.js';\nexport { default as LucideScrollText, default as ScrollText, default as ScrollTextIcon } from './icons/scroll-text.js';\nexport { default as LucideScroll, default as Scroll, default as ScrollIcon } from './icons/scroll.js';\nexport { default as LucideSearchCheck, default as SearchCheck, default as SearchCheckIcon } from './icons/search-check.js';\nexport { default as LucideSearchX, default as SearchX, default as SearchXIcon } from './icons/search-x.js';\nexport { default as LucideSearchCode, default as SearchCode, default as SearchCodeIcon } from './icons/search-code.js';\nexport { default as LucideSearchSlash, default as SearchSlash, default as SearchSlashIcon } from './icons/search-slash.js';\nexport { default as LucideSearch, default as Search, default as SearchIcon } from './icons/search.js';\nexport { default as LucideSection, default as Section, default as SectionIcon } from './icons/section.js';\nexport { default as LucideSend, default as Send, default as SendIcon } from './icons/send.js';\nexport { default as LucideSendToBack, default as SendToBack, default as SendToBackIcon } from './icons/send-to-back.js';\nexport { default as LucideSeparatorHorizontal, default as SeparatorHorizontal, default as SeparatorHorizontalIcon } from './icons/separator-horizontal.js';\nexport { default as LucideSeparatorVertical, default as SeparatorVertical, default as SeparatorVerticalIcon } from './icons/separator-vertical.js';\nexport { default as LucideServerCog, default as ServerCog, default as ServerCogIcon } from './icons/server-cog.js';\nexport { default as LucideServerCrash, default as ServerCrash, default as ServerCrashIcon } from './icons/server-crash.js';\nexport { default as LucideServerOff, default as ServerOff, default as ServerOffIcon } from './icons/server-off.js';\nexport { default as LucideServer, default as Server, default as ServerIcon } from './icons/server.js';\nexport { default as LucideSettings, default as Settings, default as SettingsIcon } from './icons/settings.js';\nexport { default as LucideSettings2, default as Settings2, default as Settings2Icon } from './icons/settings-2.js';\nexport { default as LucideShapes, default as Shapes, default as ShapesIcon } from './icons/shapes.js';\nexport { default as LucideShare2, default as Share2, default as Share2Icon } from './icons/share-2.js';\nexport { default as LucideShare, default as Share, default as ShareIcon } from './icons/share.js';\nexport { default as LucideSheet, default as Sheet, default as SheetIcon } from './icons/sheet.js';\nexport { default as LucideShell, default as Shell, default as ShellIcon } from './icons/shell.js';\nexport { default as LucideShieldAlert, default as ShieldAlert, default as ShieldAlertIcon } from './icons/shield-alert.js';\nexport { default as LucideShieldBan, default as ShieldBan, default as ShieldBanIcon } from './icons/shield-ban.js';\nexport { default as LucideShieldCheck, default as ShieldCheck, default as ShieldCheckIcon } from './icons/shield-check.js';\nexport { default as LucideShieldEllipsis, default as ShieldEllipsis, default as ShieldEllipsisIcon } from './icons/shield-ellipsis.js';\nexport { default as LucideShieldHalf, default as ShieldHalf, default as ShieldHalfIcon } from './icons/shield-half.js';\nexport { default as LucideShieldMinus, default as ShieldMinus, default as ShieldMinusIcon } from './icons/shield-minus.js';\nexport { default as LucideShieldOff, default as ShieldOff, default as ShieldOffIcon } from './icons/shield-off.js';\nexport { default as LucideShieldPlus, default as ShieldPlus, default as ShieldPlusIcon } from './icons/shield-plus.js';\nexport { default as LucideShieldUser, default as ShieldUser, default as ShieldUserIcon } from './icons/shield-user.js';\nexport { default as LucideShield, default as Shield, default as ShieldIcon } from './icons/shield.js';\nexport { default as LucideShipWheel, default as ShipWheel, default as ShipWheelIcon } from './icons/ship-wheel.js';\nexport { default as LucideShip, default as Ship, default as ShipIcon } from './icons/ship.js';\nexport { default as LucideShirt, default as Shirt, default as ShirtIcon } from './icons/shirt.js';\nexport { default as LucideShoppingBag, default as ShoppingBag, default as ShoppingBagIcon } from './icons/shopping-bag.js';\nexport { default as LucideShoppingBasket, default as ShoppingBasket, default as ShoppingBasketIcon } from './icons/shopping-basket.js';\nexport { default as LucideShoppingCart, default as ShoppingCart, default as ShoppingCartIcon } from './icons/shopping-cart.js';\nexport { default as LucideShovel, default as Shovel, default as ShovelIcon } from './icons/shovel.js';\nexport { default as LucideShowerHead, default as ShowerHead, default as ShowerHeadIcon } from './icons/shower-head.js';\nexport { default as LucideShredder, default as Shredder, default as ShredderIcon } from './icons/shredder.js';\nexport { default as LucideShrimp, default as Shrimp, default as ShrimpIcon } from './icons/shrimp.js';\nexport { default as LucideShrink, default as Shrink, default as ShrinkIcon } from './icons/shrink.js';\nexport { default as LucideShrub, default as Shrub, default as ShrubIcon } from './icons/shrub.js';\nexport { default as LucideShuffle, default as Shuffle, default as ShuffleIcon } from './icons/shuffle.js';\nexport { default as LucideSigma, default as Sigma, default as SigmaIcon } from './icons/sigma.js';\nexport { default as LucideSignalHigh, default as SignalHigh, default as SignalHighIcon } from './icons/signal-high.js';\nexport { default as LucideSignalLow, default as SignalLow, default as SignalLowIcon } from './icons/signal-low.js';\nexport { default as LucideSignalMedium, default as SignalMedium, default as SignalMediumIcon } from './icons/signal-medium.js';\nexport { default as LucideSignalZero, default as SignalZero, default as SignalZeroIcon } from './icons/signal-zero.js';\nexport { default as LucideSignal, default as Signal, default as SignalIcon } from './icons/signal.js';\nexport { default as LucideSignature, default as Signature, default as SignatureIcon } from './icons/signature.js';\nexport { default as LucideSignpostBig, default as SignpostBig, default as SignpostBigIcon } from './icons/signpost-big.js';\nexport { default as LucideSignpost, default as Signpost, default as SignpostIcon } from './icons/signpost.js';\nexport { default as LucideSiren, default as Siren, default as SirenIcon } from './icons/siren.js';\nexport { default as LucideSkipBack, default as SkipBack, default as SkipBackIcon } from './icons/skip-back.js';\nexport { default as LucideSkipForward, default as SkipForward, default as SkipForwardIcon } from './icons/skip-forward.js';\nexport { default as LucideSkull, default as Skull, default as SkullIcon } from './icons/skull.js';\nexport { default as LucideSlack, default as Slack, default as SlackIcon } from './icons/slack.js';\nexport { default as LucideSlash, default as Slash, default as SlashIcon } from './icons/slash.js';\nexport { default as LucideSlice, default as Slice, default as SliceIcon } from './icons/slice.js';\nexport { default as LucideSlidersHorizontal, default as SlidersHorizontal, default as SlidersHorizontalIcon } from './icons/sliders-horizontal.js';\nexport { default as LucideSmartphoneCharging, default as SmartphoneCharging, default as SmartphoneChargingIcon } from './icons/smartphone-charging.js';\nexport { default as LucideSmartphoneNfc, default as SmartphoneNfc, default as SmartphoneNfcIcon } from './icons/smartphone-nfc.js';\nexport { default as LucideSmartphone, default as Smartphone, default as SmartphoneIcon } from './icons/smartphone.js';\nexport { default as LucideSmilePlus, default as SmilePlus, default as SmilePlusIcon } from './icons/smile-plus.js';\nexport { default as LucideSmile, default as Smile, default as SmileIcon } from './icons/smile.js';\nexport { default as LucideSnail, default as Snail, default as SnailIcon } from './icons/snail.js';\nexport { default as LucideSnowflake, default as Snowflake, default as SnowflakeIcon } from './icons/snowflake.js';\nexport { default as LucideSoapDispenserDroplet, default as SoapDispenserDroplet, default as SoapDispenserDropletIcon } from './icons/soap-dispenser-droplet.js';\nexport { default as LucideSofa, default as Sofa, default as SofaIcon } from './icons/sofa.js';\nexport { default as LucideSoup, default as Soup, default as SoupIcon } from './icons/soup.js';\nexport { default as LucideSpade, default as Spade, default as SpadeIcon } from './icons/spade.js';\nexport { default as LucideSpace, default as Space, default as SpaceIcon } from './icons/space.js';\nexport { default as LucideSparkle, default as Sparkle, default as SparkleIcon } from './icons/sparkle.js';\nexport { default as LucideSpeaker, default as Speaker, default as SpeakerIcon } from './icons/speaker.js';\nexport { default as LucideSpeech, default as Speech, default as SpeechIcon } from './icons/speech.js';\nexport { default as LucideSpellCheck2, default as SpellCheck2, default as SpellCheck2Icon } from './icons/spell-check-2.js';\nexport { default as LucideSpellCheck, default as SpellCheck, default as SpellCheckIcon } from './icons/spell-check.js';\nexport { default as LucideSpline, default as Spline, default as SplineIcon } from './icons/spline.js';\nexport { default as LucideSplinePointer, default as SplinePointer, default as SplinePointerIcon } from './icons/spline-pointer.js';\nexport { default as LucideSplit, default as Split, default as SplitIcon } from './icons/split.js';\nexport { default as LucideSpotlight, default as Spotlight, default as SpotlightIcon } from './icons/spotlight.js';\nexport { default as LucideSpool, default as Spool, default as SpoolIcon } from './icons/spool.js';\nexport { default as LucideSprayCan, default as SprayCan, default as SprayCanIcon } from './icons/spray-can.js';\nexport { default as LucideSprout, default as Sprout, default as SproutIcon } from './icons/sprout.js';\nexport { default as LucideSquareDashedBottomCode, default as SquareDashedBottomCode, default as SquareDashedBottomCodeIcon } from './icons/square-dashed-bottom-code.js';\nexport { default as LucideSquareDashedBottom, default as SquareDashedBottom, default as SquareDashedBottomIcon } from './icons/square-dashed-bottom.js';\nexport { default as LucideSquareDashedTopSolid, default as SquareDashedTopSolid, default as SquareDashedTopSolidIcon } from './icons/square-dashed-top-solid.js';\nexport { default as LucideSquarePause, default as SquarePause, default as SquarePauseIcon } from './icons/square-pause.js';\nexport { default as LucideSquareRadical, default as SquareRadical, default as SquareRadicalIcon } from './icons/square-radical.js';\nexport { default as LucideSquareRoundCorner, default as SquareRoundCorner, default as SquareRoundCornerIcon } from './icons/square-round-corner.js';\nexport { default as LucideSquareSquare, default as SquareSquare, default as SquareSquareIcon } from './icons/square-square.js';\nexport { default as LucideSquareStack, default as SquareStack, default as SquareStackIcon } from './icons/square-stack.js';\nexport { default as LucideSquareStar, default as SquareStar, default as SquareStarIcon } from './icons/square-star.js';\nexport { default as LucideSquareStop, default as SquareStop, default as SquareStopIcon } from './icons/square-stop.js';\nexport { default as LucideSquare, default as Square, default as SquareIcon } from './icons/square.js';\nexport { default as LucideSquaresExclude, default as SquaresExclude, default as SquaresExcludeIcon } from './icons/squares-exclude.js';\nexport { default as LucideSquaresIntersect, default as SquaresIntersect, default as SquaresIntersectIcon } from './icons/squares-intersect.js';\nexport { default as LucideSquaresSubtract, default as SquaresSubtract, default as SquaresSubtractIcon } from './icons/squares-subtract.js';\nexport { default as LucideSquaresUnite, default as SquaresUnite, default as SquaresUniteIcon } from './icons/squares-unite.js';\nexport { default as LucideSquircleDashed, default as SquircleDashed, default as SquircleDashedIcon } from './icons/squircle-dashed.js';\nexport { default as LucideSquircle, default as Squircle, default as SquircleIcon } from './icons/squircle.js';\nexport { default as LucideSquirrel, default as Squirrel, default as SquirrelIcon } from './icons/squirrel.js';\nexport { default as LucideStamp, default as Stamp, default as StampIcon } from './icons/stamp.js';\nexport { default as LucideStarHalf, default as StarHalf, default as StarHalfIcon } from './icons/star-half.js';\nexport { default as LucideStar, default as Star, default as StarIcon } from './icons/star.js';\nexport { default as LucideStarOff, default as StarOff, default as StarOffIcon } from './icons/star-off.js';\nexport { default as LucideStepBack, default as StepBack, default as StepBackIcon } from './icons/step-back.js';\nexport { default as LucideStepForward, default as StepForward, default as StepForwardIcon } from './icons/step-forward.js';\nexport { default as LucideStethoscope, default as Stethoscope, default as StethoscopeIcon } from './icons/stethoscope.js';\nexport { default as LucideSticker, default as Sticker, default as StickerIcon } from './icons/sticker.js';\nexport { default as LucideStickyNote, default as StickyNote, default as StickyNoteIcon } from './icons/sticky-note.js';\nexport { default as LucideStore, default as Store, default as StoreIcon } from './icons/store.js';\nexport { default as LucideStretchHorizontal, default as StretchHorizontal, default as StretchHorizontalIcon } from './icons/stretch-horizontal.js';\nexport { default as LucideStretchVertical, default as StretchVertical, default as StretchVerticalIcon } from './icons/stretch-vertical.js';\nexport { default as LucideStrikethrough, default as Strikethrough, default as StrikethroughIcon } from './icons/strikethrough.js';\nexport { default as LucideSubscript, default as Subscript, default as SubscriptIcon } from './icons/subscript.js';\nexport { default as LucideSunDim, default as SunDim, default as SunDimIcon } from './icons/sun-dim.js';\nexport { default as LucideSunMedium, default as SunMedium, default as SunMediumIcon } from './icons/sun-medium.js';\nexport { default as LucideSunMoon, default as SunMoon, default as SunMoonIcon } from './icons/sun-moon.js';\nexport { default as LucideSunSnow, default as SunSnow, default as SunSnowIcon } from './icons/sun-snow.js';\nexport { default as LucideSun, default as Sun, default as SunIcon } from './icons/sun.js';\nexport { default as LucideSunrise, default as Sunrise, default as SunriseIcon } from './icons/sunrise.js';\nexport { default as LucideSunset, default as Sunset, default as SunsetIcon } from './icons/sunset.js';\nexport { default as LucideSuperscript, default as Superscript, default as SuperscriptIcon } from './icons/superscript.js';\nexport { default as LucideSwatchBook, default as SwatchBook, default as SwatchBookIcon } from './icons/swatch-book.js';\nexport { default as LucideSwissFranc, default as SwissFranc, default as SwissFrancIcon } from './icons/swiss-franc.js';\nexport { default as LucideSwitchCamera, default as SwitchCamera, default as SwitchCameraIcon } from './icons/switch-camera.js';\nexport { default as LucideSword, default as Sword, default as SwordIcon } from './icons/sword.js';\nexport { default as LucideSwords, default as Swords, default as SwordsIcon } from './icons/swords.js';\nexport { default as LucideSyringe, default as Syringe, default as SyringeIcon } from './icons/syringe.js';\nexport { default as LucideTable2, default as Table2, default as Table2Icon } from './icons/table-2.js';\nexport { default as LucideTableCellsMerge, default as TableCellsMerge, default as TableCellsMergeIcon } from './icons/table-cells-merge.js';\nexport { default as LucideTableCellsSplit, default as TableCellsSplit, default as TableCellsSplitIcon } from './icons/table-cells-split.js';\nexport { default as LucideTableColumnsSplit, default as TableColumnsSplit, default as TableColumnsSplitIcon } from './icons/table-columns-split.js';\nexport { default as LucideTableProperties, default as TableProperties, default as TablePropertiesIcon } from './icons/table-properties.js';\nexport { default as LucideTableOfContents, default as TableOfContents, default as TableOfContentsIcon } from './icons/table-of-contents.js';\nexport { default as LucideTableRowsSplit, default as TableRowsSplit, default as TableRowsSplitIcon } from './icons/table-rows-split.js';\nexport { default as LucideTable, default as Table, default as TableIcon } from './icons/table.js';\nexport { default as LucideTabletSmartphone, default as TabletSmartphone, default as TabletSmartphoneIcon } from './icons/tablet-smartphone.js';\nexport { default as LucideTablet, default as Tablet, default as TabletIcon } from './icons/tablet.js';\nexport { default as LucideTablets, default as Tablets, default as TabletsIcon } from './icons/tablets.js';\nexport { default as LucideTags, default as Tags, default as TagsIcon } from './icons/tags.js';\nexport { default as LucideTag, default as Tag, default as TagIcon } from './icons/tag.js';\nexport { default as LucideTally1, default as Tally1, default as Tally1Icon } from './icons/tally-1.js';\nexport { default as LucideTally2, default as Tally2, default as Tally2Icon } from './icons/tally-2.js';\nexport { default as LucideTally3, default as Tally3, default as Tally3Icon } from './icons/tally-3.js';\nexport { default as LucideTally4, default as Tally4, default as Tally4Icon } from './icons/tally-4.js';\nexport { default as LucideTangent, default as Tangent, default as TangentIcon } from './icons/tangent.js';\nexport { default as LucideTally5, default as Tally5, default as Tally5Icon } from './icons/tally-5.js';\nexport { default as LucideTarget, default as Target, default as TargetIcon } from './icons/target.js';\nexport { default as LucideTelescope, default as Telescope, default as TelescopeIcon } from './icons/telescope.js';\nexport { default as LucideTentTree, default as TentTree, default as TentTreeIcon } from './icons/tent-tree.js';\nexport { default as LucideTent, default as Tent, default as TentIcon } from './icons/tent.js';\nexport { default as LucideTerminal, default as Terminal, default as TerminalIcon } from './icons/terminal.js';\nexport { default as LucideTestTube, default as TestTube, default as TestTubeIcon } from './icons/test-tube.js';\nexport { default as LucideTestTubes, default as TestTubes, default as TestTubesIcon } from './icons/test-tubes.js';\nexport { default as LucideTextCursorInput, default as TextCursorInput, default as TextCursorInputIcon } from './icons/text-cursor-input.js';\nexport { default as LucideTextCursor, default as TextCursor, default as TextCursorIcon } from './icons/text-cursor.js';\nexport { default as LucideTextQuote, default as TextQuote, default as TextQuoteIcon } from './icons/text-quote.js';\nexport { default as LucideTextSearch, default as TextSearch, default as TextSearchIcon } from './icons/text-search.js';\nexport { default as LucideTheater, default as Theater, default as TheaterIcon } from './icons/theater.js';\nexport { default as LucideThermometerSnowflake, default as ThermometerSnowflake, default as ThermometerSnowflakeIcon } from './icons/thermometer-snowflake.js';\nexport { default as LucideThermometerSun, default as ThermometerSun, default as ThermometerSunIcon } from './icons/thermometer-sun.js';\nexport { default as LucideThermometer, default as Thermometer, default as ThermometerIcon } from './icons/thermometer.js';\nexport { default as LucideThumbsDown, default as ThumbsDown, default as ThumbsDownIcon } from './icons/thumbs-down.js';\nexport { default as LucideThumbsUp, default as ThumbsUp, default as ThumbsUpIcon } from './icons/thumbs-up.js';\nexport { default as LucideTicketCheck, default as TicketCheck, default as TicketCheckIcon } from './icons/ticket-check.js';\nexport { default as LucideTicketMinus, default as TicketMinus, default as TicketMinusIcon } from './icons/ticket-minus.js';\nexport { default as LucideTicketPercent, default as TicketPercent, default as TicketPercentIcon } from './icons/ticket-percent.js';\nexport { default as LucideTicketSlash, default as TicketSlash, default as TicketSlashIcon } from './icons/ticket-slash.js';\nexport { default as LucideTicketPlus, default as TicketPlus, default as TicketPlusIcon } from './icons/ticket-plus.js';\nexport { default as LucideTicketX, default as TicketX, default as TicketXIcon } from './icons/ticket-x.js';\nexport { default as LucideTicket, default as Ticket, default as TicketIcon } from './icons/ticket.js';\nexport { default as LucideTicketsPlane, default as TicketsPlane, default as TicketsPlaneIcon } from './icons/tickets-plane.js';\nexport { default as LucideTickets, default as Tickets, default as TicketsIcon } from './icons/tickets.js';\nexport { default as LucideTimerOff, default as TimerOff, default as TimerOffIcon } from './icons/timer-off.js';\nexport { default as LucideTimerReset, default as TimerReset, default as TimerResetIcon } from './icons/timer-reset.js';\nexport { default as LucideTimer, default as Timer, default as TimerIcon } from './icons/timer.js';\nexport { default as LucideToggleLeft, default as ToggleLeft, default as ToggleLeftIcon } from './icons/toggle-left.js';\nexport { default as LucideToggleRight, default as ToggleRight, default as ToggleRightIcon } from './icons/toggle-right.js';\nexport { default as LucideToilet, default as Toilet, default as ToiletIcon } from './icons/toilet.js';\nexport { default as LucideTornado, default as Tornado, default as TornadoIcon } from './icons/tornado.js';\nexport { default as LucideToolCase, default as ToolCase, default as ToolCaseIcon } from './icons/tool-case.js';\nexport { default as LucideTorus, default as Torus, default as TorusIcon } from './icons/torus.js';\nexport { default as LucideTouchpadOff, default as TouchpadOff, default as TouchpadOffIcon } from './icons/touchpad-off.js';\nexport { default as LucideTouchpad, default as Touchpad, default as TouchpadIcon } from './icons/touchpad.js';\nexport { default as LucideTowerControl, default as TowerControl, default as TowerControlIcon } from './icons/tower-control.js';\nexport { default as LucideToyBrick, default as ToyBrick, default as ToyBrickIcon } from './icons/toy-brick.js';\nexport { default as LucideTractor, default as Tractor, default as TractorIcon } from './icons/tractor.js';\nexport { default as LucideTrafficCone, default as TrafficCone, default as TrafficConeIcon } from './icons/traffic-cone.js';\nexport { default as LucideTrainFrontTunnel, default as TrainFrontTunnel, default as TrainFrontTunnelIcon } from './icons/train-front-tunnel.js';\nexport { default as LucideTrainFront, default as TrainFront, default as TrainFrontIcon } from './icons/train-front.js';\nexport { default as LucideTrainTrack, default as TrainTrack, default as TrainTrackIcon } from './icons/train-track.js';\nexport { default as LucideTransgender, default as Transgender, default as TransgenderIcon } from './icons/transgender.js';\nexport { default as LucideTrash2, default as Trash2, default as Trash2Icon } from './icons/trash-2.js';\nexport { default as LucideTrash, default as Trash, default as TrashIcon } from './icons/trash.js';\nexport { default as LucideTreeDeciduous, default as TreeDeciduous, default as TreeDeciduousIcon } from './icons/tree-deciduous.js';\nexport { default as LucideTreePine, default as TreePine, default as TreePineIcon } from './icons/tree-pine.js';\nexport { default as LucideTrees, default as Trees, default as TreesIcon } from './icons/trees.js';\nexport { default as LucideTrello, default as Trello, default as TrelloIcon } from './icons/trello.js';\nexport { default as LucideTrendingDown, default as TrendingDown, default as TrendingDownIcon } from './icons/trending-down.js';\nexport { default as LucideTrendingUpDown, default as TrendingUpDown, default as TrendingUpDownIcon } from './icons/trending-up-down.js';\nexport { default as LucideTrendingUp, default as TrendingUp, default as TrendingUpIcon } from './icons/trending-up.js';\nexport { default as LucideTriangleDashed, default as TriangleDashed, default as TriangleDashedIcon } from './icons/triangle-dashed.js';\nexport { default as LucideTriangleRight, default as TriangleRight, default as TriangleRightIcon } from './icons/triangle-right.js';\nexport { default as LucideTriangle, default as Triangle, default as TriangleIcon } from './icons/triangle.js';\nexport { default as LucideTrophy, default as Trophy, default as TrophyIcon } from './icons/trophy.js';\nexport { default as LucideTruckElectric, default as TruckElectric, default as TruckElectricIcon } from './icons/truck-electric.js';\nexport { default as LucideTruck, default as Truck, default as TruckIcon } from './icons/truck.js';\nexport { default as LucideTurntable, default as Turntable, default as TurntableIcon } from './icons/turntable.js';\nexport { default as LucideTurkishLira, default as TurkishLira, default as TurkishLiraIcon } from './icons/turkish-lira.js';\nexport { default as LucideTurtle, default as Turtle, default as TurtleIcon } from './icons/turtle.js';\nexport { default as LucideTvMinimalPlay, default as TvMinimalPlay, default as TvMinimalPlayIcon } from './icons/tv-minimal-play.js';\nexport { default as LucideTwitch, default as Twitch, default as TwitchIcon } from './icons/twitch.js';\nexport { default as LucideTv, default as Tv, default as TvIcon } from './icons/tv.js';\nexport { default as LucideTwitter, default as Twitter, default as TwitterIcon } from './icons/twitter.js';\nexport { default as LucideTypeOutline, default as TypeOutline, default as TypeOutlineIcon } from './icons/type-outline.js';\nexport { default as LucideType, default as Type, default as TypeIcon } from './icons/type.js';\nexport { default as LucideUmbrellaOff, default as UmbrellaOff, default as UmbrellaOffIcon } from './icons/umbrella-off.js';\nexport { default as LucideUmbrella, default as Umbrella, default as UmbrellaIcon } from './icons/umbrella.js';\nexport { default as LucideUnderline, default as Underline, default as UnderlineIcon } from './icons/underline.js';\nexport { default as LucideUndo2, default as Undo2, default as Undo2Icon } from './icons/undo-2.js';\nexport { default as LucideUndoDot, default as UndoDot, default as UndoDotIcon } from './icons/undo-dot.js';\nexport { default as LucideUndo, default as Undo, default as UndoIcon } from './icons/undo.js';\nexport { default as LucideUnfoldHorizontal, default as UnfoldHorizontal, default as UnfoldHorizontalIcon } from './icons/unfold-horizontal.js';\nexport { default as LucideUnfoldVertical, default as UnfoldVertical, default as UnfoldVerticalIcon } from './icons/unfold-vertical.js';\nexport { default as LucideUngroup, default as Ungroup, default as UngroupIcon } from './icons/ungroup.js';\nexport { default as LucideUnlink, default as Unlink, default as UnlinkIcon } from './icons/unlink.js';\nexport { default as LucideUnlink2, default as Unlink2, default as Unlink2Icon } from './icons/unlink-2.js';\nexport { default as LucideUnplug, default as Unplug, default as UnplugIcon } from './icons/unplug.js';\nexport { default as LucideUpload, default as Upload, default as UploadIcon } from './icons/upload.js';\nexport { default as LucideUsb, default as Usb, default as UsbIcon } from './icons/usb.js';\nexport { default as LucideUserCheck, default as UserCheck, default as UserCheckIcon } from './icons/user-check.js';\nexport { default as LucideUserCog, default as UserCog, default as UserCogIcon } from './icons/user-cog.js';\nexport { default as LucideUserLock, default as UserLock, default as UserLockIcon } from './icons/user-lock.js';\nexport { default as LucideUserPen, default as UserPen, default as UserPenIcon } from './icons/user-pen.js';\nexport { default as LucideUserMinus, default as UserMinus, default as UserMinusIcon } from './icons/user-minus.js';\nexport { default as LucideUserPlus, default as UserPlus, default as UserPlusIcon } from './icons/user-plus.js';\nexport { default as LucideUserRoundPen, default as UserRoundPen, default as UserRoundPenIcon } from './icons/user-round-pen.js';\nexport { default as LucideUserRoundSearch, default as UserRoundSearch, default as UserRoundSearchIcon } from './icons/user-round-search.js';\nexport { default as LucideUserSearch, default as UserSearch, default as UserSearchIcon } from './icons/user-search.js';\nexport { default as LucideUserStar, default as UserStar, default as UserStarIcon } from './icons/user-star.js';\nexport { default as LucideUserX, default as UserX, default as UserXIcon } from './icons/user-x.js';\nexport { default as LucideUser, default as User, default as UserIcon } from './icons/user.js';\nexport { default as LucideUsers, default as Users, default as UsersIcon } from './icons/users.js';\nexport { default as LucideUtilityPole, default as UtilityPole, default as UtilityPoleIcon } from './icons/utility-pole.js';\nexport { default as LucideVariable, default as Variable, default as VariableIcon } from './icons/variable.js';\nexport { default as LucideVault, default as Vault, default as VaultIcon } from './icons/vault.js';\nexport { default as LucideVectorSquare, default as VectorSquare, default as VectorSquareIcon } from './icons/vector-square.js';\nexport { default as LucideVegan, default as Vegan, default as VeganIcon } from './icons/vegan.js';\nexport { default as LucideVenetianMask, default as VenetianMask, default as VenetianMaskIcon } from './icons/venetian-mask.js';\nexport { default as LucideVenusAndMars, default as VenusAndMars, default as VenusAndMarsIcon } from './icons/venus-and-mars.js';\nexport { default as LucideVenus, default as Venus, default as VenusIcon } from './icons/venus.js';\nexport { default as LucideVibrateOff, default as VibrateOff, default as VibrateOffIcon } from './icons/vibrate-off.js';\nexport { default as LucideVibrate, default as Vibrate, default as VibrateIcon } from './icons/vibrate.js';\nexport { default as LucideVideoOff, default as VideoOff, default as VideoOffIcon } from './icons/video-off.js';\nexport { default as LucideVideo, default as Video, default as VideoIcon } from './icons/video.js';\nexport { default as LucideVideotape, default as Videotape, default as VideotapeIcon } from './icons/videotape.js';\nexport { default as LucideView, default as View, default as ViewIcon } from './icons/view.js';\nexport { default as LucideVoicemail, default as Voicemail, default as VoicemailIcon } from './icons/voicemail.js';\nexport { default as LucideVolleyball, default as Volleyball, default as VolleyballIcon } from './icons/volleyball.js';\nexport { default as LucideVolume1, default as Volume1, default as Volume1Icon } from './icons/volume-1.js';\nexport { default as LucideVolume2, default as Volume2, default as Volume2Icon } from './icons/volume-2.js';\nexport { default as LucideVolumeOff, default as VolumeOff, default as VolumeOffIcon } from './icons/volume-off.js';\nexport { default as LucideVolumeX, default as VolumeX, default as VolumeXIcon } from './icons/volume-x.js';\nexport { default as LucideVolume, default as Volume, default as VolumeIcon } from './icons/volume.js';\nexport { default as LucideVote, default as Vote, default as VoteIcon } from './icons/vote.js';\nexport { default as LucideWalletCards, default as WalletCards, default as WalletCardsIcon } from './icons/wallet-cards.js';\nexport { default as LucideWallet, default as Wallet, default as WalletIcon } from './icons/wallet.js';\nexport { default as LucideWallpaper, default as Wallpaper, default as WallpaperIcon } from './icons/wallpaper.js';\nexport { default as LucideWand, default as Wand, default as WandIcon } from './icons/wand.js';\nexport { default as LucideWarehouse, default as Warehouse, default as WarehouseIcon } from './icons/warehouse.js';\nexport { default as LucideWashingMachine, default as WashingMachine, default as WashingMachineIcon } from './icons/washing-machine.js';\nexport { default as LucideWatch, default as Watch, default as WatchIcon } from './icons/watch.js';\nexport { default as LucideWavesLadder, default as WavesLadder, default as WavesLadderIcon } from './icons/waves-ladder.js';\nexport { default as LucideWaves, default as Waves, default as WavesIcon } from './icons/waves.js';\nexport { default as LucideWebcam, default as Webcam, default as WebcamIcon } from './icons/webcam.js';\nexport { default as LucideWaypoints, default as Waypoints, default as WaypointsIcon } from './icons/waypoints.js';\nexport { default as LucideWebhook, default as Webhook, default as WebhookIcon } from './icons/webhook.js';\nexport { default as LucideWebhookOff, default as WebhookOff, default as WebhookOffIcon } from './icons/webhook-off.js';\nexport { default as LucideWeight, default as Weight, default as WeightIcon } from './icons/weight.js';\nexport { default as LucideWheatOff, default as WheatOff, default as WheatOffIcon } from './icons/wheat-off.js';\nexport { default as LucideWheat, default as Wheat, default as WheatIcon } from './icons/wheat.js';\nexport { default as LucideWifiCog, default as WifiCog, default as WifiCogIcon } from './icons/wifi-cog.js';\nexport { default as LucideWholeWord, default as WholeWord, default as WholeWordIcon } from './icons/whole-word.js';\nexport { default as LucideWifiHigh, default as WifiHigh, default as WifiHighIcon } from './icons/wifi-high.js';\nexport { default as LucideWifiLow, default as WifiLow, default as WifiLowIcon } from './icons/wifi-low.js';\nexport { default as LucideWifiOff, default as WifiOff, default as WifiOffIcon } from './icons/wifi-off.js';\nexport { default as LucideWifiPen, default as WifiPen, default as WifiPenIcon } from './icons/wifi-pen.js';\nexport { default as LucideWifiSync, default as WifiSync, default as WifiSyncIcon } from './icons/wifi-sync.js';\nexport { default as LucideWifiZero, default as WifiZero, default as WifiZeroIcon } from './icons/wifi-zero.js';\nexport { default as LucideWifi, default as Wifi, default as WifiIcon } from './icons/wifi.js';\nexport { default as LucideWindArrowDown, default as WindArrowDown, default as WindArrowDownIcon } from './icons/wind-arrow-down.js';\nexport { default as LucideWind, default as Wind, default as WindIcon } from './icons/wind.js';\nexport { default as LucideWineOff, default as WineOff, default as WineOffIcon } from './icons/wine-off.js';\nexport { default as LucideWine, default as Wine, default as WineIcon } from './icons/wine.js';\nexport { default as LucideWorkflow, default as Workflow, default as WorkflowIcon } from './icons/workflow.js';\nexport { default as LucideWorm, default as Worm, default as WormIcon } from './icons/worm.js';\nexport { default as LucideWrench, default as Wrench, default as WrenchIcon } from './icons/wrench.js';\nexport { default as LucideX, default as X, default as XIcon } from './icons/x.js';\nexport { default as LucideYoutube, default as Youtube, default as YoutubeIcon } from './icons/youtube.js';\nexport { default as LucideZapOff, default as ZapOff, default as ZapOffIcon } from './icons/zap-off.js';\nexport { default as LucideZap, default as Zap, default as ZapIcon } from './icons/zap.js';\nexport { default as LucideZoomIn, default as ZoomIn, default as ZoomInIcon } from './icons/zoom-in.js';\nexport { default as LucideZoomOut, default as ZoomOut, default as ZoomOutIcon } from './icons/zoom-out.js';\nexport { default as ArrowDown10, default as ArrowDown10Icon, default as LucideArrowDown10 } from './icons/arrow-down-1-0.js';\nexport { default as ArrowDown01, default as ArrowDown01Icon, default as LucideArrowDown01 } from './icons/arrow-down-0-1.js';\nexport { default as ArrowUp01, default as ArrowUp01Icon, default as LucideArrowUp01 } from './icons/arrow-up-0-1.js';\nexport { default as ArrowUp10, default as ArrowUp10Icon, default as LucideArrowUp10 } from './icons/arrow-up-1-0.js';\nexport { default as createLucideIcon } from './createLucideIcon.js';\nexport { default as Icon } from './Icon.js';\n//# sourceMappingURL=lucide-react.js.map\n","import { cn } from \"../shared/lib/utils\";\nimport { Label } from \"./label\";\nimport { Switch } from \"./switch\";\n\ninterface AdvancedOptionToggleProps {\n  isChecked: boolean;\n  onToggle: (checked: boolean) => void;\n  htmlId: string;\n  title: string;\n  description?: string;\n  children?: React.ReactNode;\n  childBorder?: boolean;\n  customContainerClass?: string;\n  disabled?: boolean;\n}\n\nexport const AdvancedOptionToggle = ({\n  isChecked,\n  onToggle,\n  htmlId,\n  title,\n  description,\n  children,\n  customContainerClass,\n  disabled = false,\n}: AdvancedOptionToggleProps) => {\n  return (\n    <div className={cn(\"w-full\", customContainerClass)}>\n      <div className=\"flex items-center justify-between space-x-1\">\n        <Label htmlFor={htmlId} className=\"cursor-pointer rounded-l-lg\">\n          <div className=\"mr-2\">\n            <h3 className=\"text-sm font-medium text-neutral-700 dark:text-neutral-200\">{title}</h3>\n            <p className=\"text-xs font-normal text-neutral-500 dark:text-neutral-400 mt-1\">\n              {description}\n            </p>\n          </div>\n        </Label>\n        <Switch id={htmlId} checked={isChecked} onCheckedChange={onToggle} disabled={disabled} />\n      </div>\n      {children && isChecked && (\n        <div className={\"mt-4 flex w-full items-center space-x-1 rounded-lg\"}>{children}</div>\n      )}\n    </div>\n  );\n};\n","import { Check, ChevronDown } from \"lucide-react\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nexport type ColorDotOptionId = string | number | null | undefined;\n\nexport interface ColorDotOption {\n  id: ColorDotOptionId;\n  name: string;\n  color?: string;\n}\n\nexport interface ColorDotDropdownProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onSelect\"\n> {\n  options: ColorDotOption[];\n  activeId: ColorDotOptionId;\n  onSelect: (id: ColorDotOptionId) => void;\n  label?: string;\n  compact?: boolean;\n  buttonClassName?: string;\n  labelClassName?: string;\n  menuClassName?: string;\n  chevronClassName?: string;\n}\n\nexport const ColorDotDropdown = forwardRef<HTMLDivElement, ColorDotDropdownProps>(\n  (\n    {\n      options,\n      compact,\n      activeId,\n      onSelect,\n      label,\n      className,\n      buttonClassName,\n      labelClassName,\n      menuClassName,\n      chevronClassName,\n      ...divProps\n    },\n    ref,\n  ) => {\n    const [open, setOpen] = useState(false);\n    const rootRef = useRef<HTMLDivElement | null>(null);\n\n    useEffect(() => {\n      const handleClick = (e: MouseEvent) => {\n        if (!rootRef.current) return;\n        if (rootRef.current.contains(e.target as Node)) return;\n        setOpen(false);\n      };\n\n      if (open) {\n        // Use a small delay to allow click events on menu items to process first\n        const timeoutId = setTimeout(() => {\n          document.addEventListener(\"click\", handleClick);\n        }, 0);\n\n        return () => {\n          clearTimeout(timeoutId);\n          document.removeEventListener(\"click\", handleClick);\n        };\n      }\n    }, [open]);\n\n    const active = options.find((o) => o.id === activeId) || options[0];\n    const activeLabel = label ?? active?.name ?? \"\";\n    const activeColor = active?.color || \"#3912e4\";\n\n    const buttonStyle = compact\n      ? \"text-lg font-medium leading-4 text-gray-900 dark:text-white\"\n      : \"text-[1.2rem] font-semibold\";\n\n    return (\n      <div\n        className={cn(\"relative inline-block\", className)}\n        ref={(node) => {\n          rootRef.current = node;\n          if (typeof ref === \"function\") ref(node);\n          else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n        }}\n        {...divProps}\n      >\n        <button\n          type=\"button\"\n          className={cn(\n            \"inline-flex cursor-pointer h-auto items-center gap-2 border-0 bg-transparent px-0 py-0 capitalize text-black dark:text-white\",\n            buttonStyle,\n            buttonClassName,\n          )}\n          onClick={() => setOpen((o) => !o)}\n        >\n          <span\n            className=\"mr-1 inline-flex h-2.5 w-2.5 items-center justify-center rounded-full\"\n            style={{ backgroundColor: activeColor }}\n          />\n          <span className={labelClassName}>{activeLabel}</span>\n          <ChevronDown\n            size={18}\n            className={cn(\n              open ? \"rotate-180\" : \"rotate-0\",\n              \"text-neutral-500 transition-transform dark:text-neutral-400\",\n              chevronClassName,\n            )}\n          />\n        </button>\n        {open && (\n          <div\n            className={cn(\n              \"card-border card-radius absolute left-0 z-[60] mt-2 w-60 bg-white p-2 dark:bg-neutral-950\",\n              menuClassName,\n            )}\n          >\n            <div className=\"flex flex-col gap-1\">\n              {options.map((opt) => {\n                const isActive = opt.id === activeId;\n                return (\n                  <button\n                    key={`${String(opt.id ?? \"all\")}`}\n                    type=\"button\"\n                    className={cn(\n                      isActive\n                        ? \"bg-neutral-200 text-neutral-900 dark:bg-neutral-800 dark:text-neutral-100\"\n                        : \"bg-transparent text-neutral-800 hover:bg-neutral-200 dark:text-neutral-100 dark:hover:bg-neutral-800\",\n                      \"inline-flex items-center gap-2 rounded-lg px-3 py-2 text-left text-sm capitalize\",\n                    )}\n                    onClick={() => {\n                      onSelect(opt.id);\n                      setOpen(false);\n                    }}\n                  >\n                    <span\n                      className=\"mr-1 inline-flex h-2.5 w-2.5 items-center justify-center rounded-full\"\n                      style={{ backgroundColor: opt.color || \"#3912e4\" }}\n                    />\n                    <span className=\"flex-1 text-left\">{opt.name}</span>\n                    {isActive && <Check size={16} className=\"opacity-90\" />}\n                  </button>\n                );\n              })}\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  },\n);\n\nColorDotDropdown.displayName = \"ColorDotDropdown\";\n\nexport default ColorDotDropdown;\n","import { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useMemo } from \"react\";\nimport { HexColorPicker } from \"react-colorful\";\nimport { Input } from \"./input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nconst ColorPickerWithInput = ({\n  value,\n  onChange,\n  placeholder,\n}: {\n  value: string;\n  onChange: (value: string) => void;\n  placeholder: string;\n}) => {\n  const [open, setOpen] = useState(false);\n\n  const parsedValue = useMemo(() => {\n    return value || \"#222\";\n  }, [value]);\n\n  return (\n    <div className=\"relative flex h-8 w-full\">\n      <Popover onOpenChange={setOpen} open={open}>\n        <PopoverTrigger asChild>\n          <div\n            className=\"absolute left-[6px] top-[4px] h-6 w-6 cursor-pointer rounded-sm border border-neutral-500\"\n            onClick={() => setOpen(true)}\n            style={{\n              backgroundColor: parsedValue,\n            }}\n          />\n        </PopoverTrigger>\n        <PopoverContent align=\"start\" className=\"left-0 w-[170px] sm:p-[10px]\">\n          <HexColorPicker style={{ width: \"150px\" }} color={parsedValue} onChange={onChange} />\n          <Input\n            className=\"mt-2\"\n            maxLength={7}\n            onChange={(e) => {\n              onChange(e?.currentTarget?.value);\n            }}\n            placeholder={placeholder}\n            value={parsedValue}\n          />\n        </PopoverContent>\n      </Popover>\n      <Input\n        className=\"h-8 w-full border border-neutral-100 bg-neutral-50 sm:pl-8 !pr-8 dark:border-neutral-800 dark:bg-neutral-900\"\n        placeholder={placeholder}\n        value={value}\n        onChange={(e) => {\n          onChange(e.target.value);\n        }}\n      />\n      <ChevronDown\n        className=\"absolute right-2 top-1/2 h-4 w-4 -translate-y-1/2 cursor-pointer text-gray-400 hover:text-gray-600\"\n        onClick={() => setOpen(true)}\n      />\n    </div>\n  );\n};\n\nexport { ColorPickerWithInput };\n","\"use client\";\n\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"../shared/lib/utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n  size: \"default\",\n  variant: \"default\",\n});\n\nconst ToggleGroup = React.forwardRef<\n  React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n    VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n  <ToggleGroupPrimitive.Root\n    ref={ref}\n    className={cn(\"flex items-center justify-center gap-1\", className)}\n    {...props}\n  >\n    <ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>\n  </ToggleGroupPrimitive.Root>\n)) as React.ForwardRefExoticComponent<\n  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n    VariantProps<typeof toggleVariants> &\n    React.RefAttributes<React.ElementRef<typeof ToggleGroupPrimitive.Root>>\n>;\n\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;\n\nconst ToggleGroupItem = React.forwardRef<\n  React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &\n    VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n  const context = React.useContext(ToggleGroupContext);\n\n  return (\n    <ToggleGroupPrimitive.Item\n      ref={ref}\n      className={cn(\n        toggleVariants({\n          variant: context.variant || variant,\n          size: context.size || size,\n        }),\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </ToggleGroupPrimitive.Item>\n  );\n}) as React.ForwardRefExoticComponent<\n  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &\n    VariantProps<typeof toggleVariants> &\n    React.RefAttributes<React.ElementRef<typeof ToggleGroupPrimitive.Item>>\n>;\n\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;\n\nexport { ToggleGroup, ToggleGroupItem };\n","\"use client\";\n\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDownIcon } from \"@radix-ui/react-icons\";\nimport * as React from \"react\";\nimport { cn } from \"../shared/lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"border-b border-neutral-200 text-neutral-700 dark:border-neutral-700 dark:text-neutral-300\",\n      className,\n    )}\n    {...props}\n  />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"flex\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex flex-1 items-center justify-between py-1 text-left font-semibold transition-all hover:opacity-80 [&[data-state=open]>svg]:rotate-180\",\n        \"bg-transparent text-neutral-700 dark:text-neutral-300\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronDownIcon\n        width={16}\n        height={16}\n        strokeWidth={2}\n        className=\"shrink-0 opacity-60 transition-transform duration-200\"\n        aria-hidden=\"true\"\n      />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n    {...props}\n  >\n    <div className={cn(\"flex flex-col gap-y-4 pb-4 pt-4\", className)}>{children}</div>\n  </AccordionPrimitive.Content>\n));\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n","import * as TabsPrimitives from \"@radix-ui/react-tabs\";\nimport React from \"react\";\nimport { cn, focusRing } from \"../shared/lib/utils\";\n\nconst Tabs = (\n  props: Omit<React.ComponentPropsWithoutRef<typeof TabsPrimitives.Root>, \"orientation\">,\n) => {\n  return <TabsPrimitives.Root {...props} />;\n};\n\nTabs.displayName = \"Tabs\";\n\ntype TabsListVariant = \"line\" | \"solid\";\n\nconst TabsListVariantContext = React.createContext<TabsListVariant>(\"line\");\n\ninterface TabsListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitives.List> {\n  variant?: TabsListVariant;\n}\n\nconst variantStyles: Record<TabsListVariant, string> = {\n  line: cn(\n    // base\n    \"flex items-center justify-start border-b gap-x-4\",\n    // border color\n    \"border-gray-200 dark:border-neutral-800\",\n  ),\n  solid: cn(\n    // base\n    \"inline-flex items-center justify-center rounded-md p-1\",\n    // border color\n    // \"border-gray-200 dark:border-neutral-800\",\n    // background color\n    \"bg-gray-100 dark:bg-neutral-900\",\n  ),\n};\n\nconst TabsList = React.forwardRef<React.ElementRef<typeof TabsPrimitives.List>, TabsListProps>(\n  ({ className, variant = \"line\", children, ...props }, forwardedRef) => (\n    <TabsPrimitives.List\n      ref={forwardedRef}\n      className={cn(variantStyles[variant], className)}\n      {...props}\n    >\n      <TabsListVariantContext.Provider value={variant}>{children}</TabsListVariantContext.Provider>\n    </TabsPrimitives.List>\n  ),\n);\n\nTabsList.displayName = \"TabsList\";\n\nfunction getVariantStyles(tabVariant: TabsListVariant) {\n  switch (tabVariant) {\n    case \"line\":\n      return cn(\n        // base\n        \"-mb-px items-center justify-center whitespace-nowrap border-b-2 border-transparent px-0.5 pb-2 text-sm font-semibold transition-all\",\n        // text color\n        \"text-gray-500 dark:text-gray-400\",\n        // hover\n        \"hover:text-gray-700 hover:dark:text-neutral-300\",\n        // border hover\n        \"hover:border-gray-300 hover:dark:border-gray-400\",\n        // selected\n        \"data-[state=active]:border-foreground data-[state=active]:text-foreground\",\n        \"data-[state=active]:dark:border-gray-200 data-[state=active]:dark:text-foreground \",\n        \"[&>span]:data-[state=active]:dark:bg-neutral-800 [&>span]:data-[state=active]:dark:text-neutral-300\",\n        // disabled\n        \"disabled:pointer-events-none\",\n        \"disabled:text-gray-300 disabled:dark:text-gray-700\",\n      );\n    case \"solid\":\n      return cn(\n        // base\n        \"inline-flex items-center justify-center whitespace-nowrap rounded px-3 py-1 transition-all text-sm font-medium\",\n        // text color\n        \"text-gray-500 dark:text-gray-400\",\n        // hover\n        \"hover:text-gray-700 hover:dark:text-gray-200\",\n        // selected\n        \" data-[state=active]:bg-white data-[state=active]:text-gray-900 data-[state=active]:shadow\",\n        \"data-[state=active]:dark:bg-background data-[state=active]:dark:text-gray-50\",\n        // disabled\n        \"disabled:pointer-events-none disabled:text-gray-400 disabled:dark:text-gray-300 disabled:opacity-50\",\n      );\n  }\n}\n\nconst TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitives.Trigger>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitives.Trigger> & {\n    contentClassName?: string;\n  }\n>(({ className, children, contentClassName, ...props }, forwardedRef) => {\n  const variant = React.useContext(TabsListVariantContext);\n  return (\n    <TabsPrimitives.Trigger\n      ref={forwardedRef}\n      className={cn(\n        getVariantStyles(variant),\n        \"outline-none focus-visible:outline-none\",\n        className,\n      )}\n      {...props}\n    >\n      <span\n        className={cn(\n          \"rounded-lg px-2 py-1 hover:bg-gray-50 hover:dark:bg-neutral-800\",\n          contentClassName,\n        )}\n      >\n        {children}\n      </span>\n    </TabsPrimitives.Trigger>\n  );\n});\n\nTabsTrigger.displayName = \"TabsTrigger\";\n\nconst TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitives.Content>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitives.Content>\n>(({ className, ...props }, forwardedRef) => (\n  <TabsPrimitives.Content\n    ref={forwardedRef}\n    className={cn(\"outline-none\", focusRing, className)}\n    {...props}\n  />\n));\n\nTabsContent.displayName = \"TabsContent\";\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n","import { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { forwardRef, useId, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../shared/lib/utils\";\nimport { Tooltip } from \"./button\";\n\ntype LabelProps = JSX.IntrinsicElements[\"label\"] & {\n  className?: string;\n  tooltip?: string;\n};\n\nexport function Label(props: LabelProps) {\n  const { className, tooltip, ...restProps } = props;\n\n  if (tooltip) {\n    return (\n      <Tooltip disableHoverableContent label={tooltip}>\n        <label\n          className={cn(\n            \"text-[0.78rem] font-semibold leading-none text-gray-500 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-neutral-300\",\n            className,\n          )}\n          {...restProps}\n        >\n          {props.children}\n        </label>\n      </Tooltip>\n    );\n  }\n\n  return (\n    <label\n      className={cn(\n        \"text-[0.78rem] font-semibold leading-none text-gray-500 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-neutral-300\",\n        className,\n      )}\n      {...restProps}\n    >\n      {props.children}\n    </label>\n  );\n}\n\nexport type InputFieldProps = {\n  label?: ReactNode;\n  LockedIcon?: React.ReactNode;\n  hint?: ReactNode;\n  hintErrors?: string[];\n  addOnLeading?: ReactNode;\n  addOnSuffix?: ReactNode;\n  inputIsFullWidth?: boolean;\n  addOnFilled?: boolean;\n  addOnClassname?: string;\n  error?: string;\n  labelSrOnly?: boolean;\n  containerClassName?: string;\n  showAsteriskIndicator?: boolean;\n  t?: (key: string) => string;\n  dataTestid?: string;\n  onClickAddon?: () => void;\n} & React.ComponentProps<typeof Input> & {\n    labelProps?: React.ComponentProps<typeof Label>;\n    labelClassName?: string;\n  };\n\ntype InputProps = JSX.IntrinsicElements[\"input\"] & { isFullWidth?: boolean };\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n  { isFullWidth = true, ...props },\n  ref,\n) {\n  return (\n    <input\n      {...props}\n      ref={ref}\n      className={cn(\n        \"disabled:hover:border-input disabled:bg-muted focus:ring-brand-default focus:border-subtle block h-8 rounded-md border border-neutral-200 bg-white px-3 py-2 text-sm leading-4 text-gray-800 shadow-sm transition placeholder:text-neutral-400 hover:border-neutral-300 focus:outline-none focus:ring-2 disabled:cursor-not-allowed dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-600 dark:focus:border-neutral-600\",\n        isFullWidth && \"w-full\",\n        props.className,\n      )}\n    />\n  );\n});\n\ntype AddonProps = {\n  children: React.ReactNode;\n  isFilled?: boolean;\n  className?: string;\n  error?: boolean;\n  onClickAddon?: () => void;\n};\n\nconst Addon = ({ isFilled, children, className, error, onClickAddon }: AddonProps) => (\n  <div\n    onClick={onClickAddon}\n    className={cn(\n      \"addon-wrapper flex h-8 items-center border border-neutral-200 px-3 transition dark:border-neutral-700 [&:has(+_input:hover)]:border-neutral-300 [&:has(+_input:hover)]:border-r-neutral-300 [input:hover_+_&]:border-neutral-300 [input:hover_+_&]:border-l-neutral-300\",\n      isFilled && \"bg-neutral-100 dark:bg-neutral-700\",\n      onClickAddon && \"cursor-pointer disabled:hover:cursor-not-allowed\",\n      className,\n    )}\n    onKeyDown={(e) => {\n      if (e.key === \"Enter\") {\n        onClickAddon?.();\n      }\n    }}\n  >\n    <div\n      className={cn(\n        \"flex min-h-7 flex-col justify-center text-sm leading-7\",\n        error ? \"text-error\" : \"text-gray-800 dark:text-neutral-100\",\n      )}\n    >\n      <span\n        className=\"flex max-w-2xl overflow-y-auto whitespace-nowrap\"\n        style={{\n          WebkitOverflowScrolling: \"touch\",\n          scrollbarWidth: \"none\",\n          overflow: \"-ms-scroll-chaining\",\n          msOverflowStyle: \"-ms-autohiding-scrollbar\",\n        }}\n      >\n        {children}\n      </span>\n    </div>\n  </div>\n);\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n  function InputField(props, ref) {\n    const id = useId();\n\n    const name = props.name || \"\";\n    const {\n      label: _label = name,\n      labelProps: _labelProps,\n      labelClassName: _labelClassName,\n      disabled,\n      LockedIcon: _LockedIcon,\n      placeholder = \"\",\n      className,\n      addOnLeading,\n      addOnSuffix,\n      addOnFilled = true,\n      addOnClassname,\n      inputIsFullWidth,\n      hint,\n      type,\n      hintErrors: _hintErrors,\n      labelSrOnly: _labelSrOnly,\n      containerClassName,\n      readOnly,\n      showAsteriskIndicator: _showAsteriskIndicator,\n      onClickAddon,\n      dataTestid: _dataTestid,\n      ...passThrough\n    } = props;\n\n    const [inputValue, setInputValue] = useState<string>(\"\");\n\n    return (\n      <div className={cn(\"space-y-1\", containerClassName)}>\n        {addOnLeading || addOnSuffix ? (\n          <div\n            dir=\"ltr\"\n            className=\"focus-within:ring-brand-default group relative flex items-center rounded-md transition focus-within:outline-none focus-within:ring-2\"\n          >\n            {addOnLeading && (\n              <Addon\n                isFilled={addOnFilled}\n                className={cn(\"ltr:rounded-l-md rtl:rounded-r-md\", addOnClassname)}\n              >\n                {addOnLeading}\n              </Addon>\n            )}\n            <Input\n              id={id}\n              type={type}\n              placeholder={placeholder}\n              isFullWidth={inputIsFullWidth}\n              className={cn(\n                className,\n                \"disabled:bg-muted disabled:hover:border-subtle disabled:cursor-not-allowed\",\n                addOnLeading && \"rounded-l-none border-l-0\",\n                addOnSuffix && \"rounded-r-none border-r-0\",\n                type === \"search\" && \"pr-8\",\n                \"!my-0 !ring-0\",\n              )}\n              {...passThrough}\n              {...(type === \"search\" && {\n                onChange: (e) => {\n                  setInputValue(e.target.value);\n                  props.onChange?.(e);\n                },\n                value: inputValue,\n              })}\n              disabled={readOnly || disabled}\n              ref={ref}\n            />\n            {addOnSuffix && (\n              <Addon\n                onClickAddon={onClickAddon}\n                isFilled={addOnFilled}\n                className={cn(\"ltr:rounded-r-md rtl:rounded-l-md\", addOnClassname)}\n              >\n                {addOnSuffix}\n              </Addon>\n            )}\n            {type === \"search\" && inputValue?.toString().length > 0 && (\n              <X\n                className=\"text-subtle absolute top-2.5 h-4 w-4 cursor-pointer ltr:right-2 rtl:left-2\"\n                onClick={(e) => {\n                  setInputValue(\"\");\n                  props.onChange?.(e as unknown as React.ChangeEvent<HTMLInputElement>);\n                }}\n              />\n            )}\n          </div>\n        ) : (\n          <Input\n            id={id}\n            type={type}\n            placeholder={placeholder}\n            className={cn(\n              className,\n              \"disabled:bg-muted disabled:hover:border-subtle disabled:cursor-not-allowed\",\n            )}\n            {...passThrough}\n            readOnly={readOnly}\n            ref={ref}\n            isFullWidth={inputIsFullWidth}\n            disabled={readOnly || disabled}\n          />\n        )}\n        {hint && <div className=\"text-default mt-2 flex items-center text-sm\">{hint}</div>}\n      </div>\n    );\n  },\n);\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n  function TextField(props, ref) {\n    return <InputField ref={ref} {...props} />;\n  },\n);\n","import {\n  IconCircle,\n  IconCircleCheck,\n  IconCircleDashed,\n  IconCircleDashedX,\n  IconClock,\n  IconLoader,\n} from \"@tabler/icons-react\";\nimport React from \"react\";\nimport { Tooltip } from \"./button\";\n\ntype Props = {\n  status?: string;\n  labels?: string[] | null;\n  showLabel?: boolean;\n};\n\nconst toTitleCase = (text: string) =>\n  text\n    .replace(/[-_]/g, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim()\n    .replace(/\\w\\S*/g, (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase());\n\nconst getStatusMeta = (status?: string) => {\n  const normalized = (status || \"planned\").toLowerCase().replace(/\\s+/g, \"-\");\n  if (normalized === \"in-progress\" || normalized === \"in_progress\")\n    return { Icon: IconClock, label: \"In Progress\", color: \"text-yellow-500\" };\n  if (normalized === \"in-review\" || normalized === \"in_review\")\n    return { Icon: IconCircleDashed, label: \"In Review\", color: \"text-indigo-500\" };\n  if (normalized === \"completed\" || normalized === \"done\")\n    return { Icon: IconCircleCheck, label: \"Completed\", color: \"text-green-500\" };\n  if (normalized === \"closed\" || normalized === \"canceled\" || normalized === \"cancelled\")\n    return { Icon: IconCircleDashedX, label: \"Closed\", color: \"text-neutral-500\" };\n  if (normalized === \"planned\" || normalized === \"todo\" || normalized === \"backlog\")\n    return { Icon: IconLoader, label: \"Planned\", color: \"text-neutral-400\" };\n  return { Icon: IconCircle, label: toTitleCase(normalized), color: \"text-neutral-400\" };\n};\n\nconst FeedbackStatusBadge: React.FC<Props> = ({ status, labels, showLabel }) => {\n  const { Icon, label, color } = getStatusMeta(status);\n\n  if (showLabel) {\n    return (\n      <div className=\"inline-flex h-7 shrink-0 items-center gap-1.5 rounded-full px-2.5 text-[12.5px] font-medium shadow-[inset_0_0_0_1px_var(--uo-color-border-subtle)] text-uo-text-primary\">\n        <Icon className={`h-3.5 w-3.5 ${color}`} />\n        {label}\n      </div>\n    );\n  }\n\n  const labelList = Array.isArray(labels) ? labels : [];\n  const tooltipText = [label, ...labelList.map((l) => toTitleCase(String(l)))]\n    .filter(Boolean)\n    .join(\" • \");\n\n  return (\n    <div className=\"flex h-7 w-7 items-center justify-center rounded-full action gap-1.5 py-1.5 font-medium shadow-[inset_0_0_0_1px_var(--uo-muted)] cursor-pointer hover:text-primary\">\n      <Tooltip label={tooltipText}>\n        <Icon className={`w-4 h-4 ${color}`} />\n      </Tooltip>\n    </div>\n  );\n};\n\nexport default FeedbackStatusBadge;\n","export const UserorbitBranding = () => {\n  return (\n    <div className=\"uo-branding flex justify-between bg-neutral-50 py-1\">\n      <div className=\"flex items-center gap-2 px-4 text-xs font-medium leading-8 text-[var(--text-color)] opacity-50\">\n        <svg\n          width=\"80\"\n          height=\"80\"\n          viewBox=\"0 0 80 80\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          className=\"h-5 w-5 grayscale\"\n        >\n          <title>logo</title>\n          <path\n            d=\"M6.66675 46.6667C6.66675 37.3323 6.66675 32.6654 8.48331 29.1002C10.0812 25.9641 12.6309 23.4144 15.7669 21.8166C19.3321 20 23.9992 20 33.3334 20H46.6667C56.0011 20 60.6681 20 64.2334 21.8166C67.3694 23.4144 69.9191 25.9641 71.5167 29.1002C73.3334 32.6654 73.3334 37.3323 73.3334 46.6667C73.3334 56.001 73.3334 60.668 71.5167 64.2333C69.9191 67.3693 67.3694 69.919 64.2334 71.5167C60.6681 73.3333 56.0011 73.3333 46.6667 73.3333H33.3334C23.9992 73.3333 19.3321 73.3333 15.7669 71.5167C12.6309 69.919 10.0812 67.3693 8.48331 64.2333C6.66675 60.668 6.66675 56.001 6.66675 46.6667Z\"\n            fill=\"#3912E4\"\n            stroke=\"#3912E4\"\n            strokeWidth=\"5\"\n          />\n          <g opacity=\"0.5\">\n            <path\n              fillRule=\"evenodd\"\n              clipRule=\"evenodd\"\n              d=\"M71.5794 16.6454C70.5014 17.0367 69.3381 17.25 68.125 17.25C62.5711 17.25 58.0619 12.7785 58.0006 7.23924C53.5014 6.66663 47.692 6.66663 40.0001 6.66663C24.2866 6.66663 16.4298 6.66663 11.5483 11.5482C6.66675 16.4297 6.66675 24.2865 6.66675 40H73.3334C73.3334 28.8289 73.3334 21.6287 71.5794 16.6454Z\"\n              fill=\"#3912E4\"\n            />\n            <path\n              d=\"M71.5794 16.6454L73.9376 15.8154L73.0995 13.4343L70.7265 14.2954L71.5794 16.6454ZM58.0006 7.23924L60.5005 7.2116L60.4764 5.03416L58.3163 4.75924L58.0006 7.23924ZM11.5483 11.5482L13.3161 13.316L13.3161 13.316L11.5483 11.5482ZM6.66675 40H4.16675V42.5H6.66675V40ZM73.3334 40V42.5H75.8334V40H73.3334ZM68.125 19.75C69.6332 19.75 71.0848 19.4845 72.4323 18.9955L70.7265 14.2954C69.918 14.5888 69.0431 14.75 68.125 14.75V19.75ZM55.5008 7.26688C55.5771 14.1744 61.1996 19.75 68.125 19.75V14.75C63.9426 14.75 60.5466 11.3825 60.5005 7.2116L55.5008 7.26688ZM40.0001 9.16663C47.7581 9.16663 53.3802 9.17137 57.685 9.71924L58.3163 4.75924C53.6226 4.16189 47.6259 4.16663 40.0001 4.16663V9.16663ZM13.3161 13.316C15.2149 11.4171 17.784 10.3275 22.0453 9.75453C26.3786 9.17194 32.0727 9.16663 40.0001 9.16663V4.16663C32.214 4.16663 26.123 4.16132 21.3791 4.79911C16.5633 5.44658 12.7632 6.79772 9.78054 9.78043L13.3161 13.316ZM9.16675 40C9.16675 32.0725 9.17206 26.3785 9.75465 22.0452C10.3276 17.7839 11.4172 15.2148 13.3161 13.316L9.78055 9.78042C6.79784 12.7631 5.4467 16.5632 4.79924 21.379C4.16144 26.1228 4.16675 32.2139 4.16675 40H9.16675ZM73.3334 37.5H6.66675V42.5H73.3334V37.5ZM69.2212 17.4755C69.9818 19.6365 70.4036 22.4066 70.6183 26.1456C70.8325 29.8775 70.8334 34.3894 70.8334 40H75.8334C75.8334 34.4395 75.8343 29.7657 75.6101 25.859C75.3862 21.9593 74.931 18.6377 73.9376 15.8154L69.2212 17.4755Z\"\n              fill=\"#3912E4\"\n            />\n          </g>\n          <path\n            d=\"M68.625 11.25C71.1794 11.25 73.25 9.17931 73.25 6.625C73.25 4.07069 71.1794 2 68.625 2C66.0706 2 64 4.07069 64 6.625C64 9.17931 66.0706 11.25 68.625 11.25Z\"\n            fill=\"#3912E4\"\n          />\n          <path\n            d=\"M51.33 58.354C49.97 59.374 48.6327 59.884 47.318 59.884C46.0033 59.884 44.9607 59.544 44.19 58.864C43.4193 58.184 43.034 57.164 43.034 55.804C43.034 55.4187 43.0453 55.124 43.068 54.92L42.728 54.818C40.484 58.1727 37.4693 59.85 33.684 59.85C30.0347 59.85 28.21 57.9233 28.21 54.07C28.21 52.778 28.3913 51.0667 28.754 48.936C29.1167 46.7827 29.4227 44.9693 29.672 43.496C29.944 42 30.1253 40.98 30.216 40.436L28.414 36.798C29.842 35.982 31.0773 35.37 32.12 34.962C33.1853 34.554 34.2507 34.35 35.316 34.35C36.3813 34.35 37.0953 34.6333 37.458 35.2C37.8433 35.744 38.036 36.4013 38.036 37.172C38.036 37.9427 37.6507 40.4133 36.88 44.584C36.132 48.7547 35.758 51.1913 35.758 51.894C35.758 53.6847 36.37 54.58 37.594 54.58C38.5007 54.58 39.532 54.002 40.688 52.846C41.844 51.69 42.7847 50.1033 43.51 48.086C43.034 46.7033 42.796 45.2753 42.796 43.802C42.796 41.1727 43.442 38.94 44.734 37.104C46.0487 35.268 47.896 34.35 50.276 34.35C51.5907 34.35 52.6447 34.5653 53.438 34.996C53.234 36.22 52.8373 38.4413 52.248 41.66C50.956 48.4827 50.31 52.404 50.31 53.424C50.31 55.6227 50.65 57.266 51.33 58.354Z\"\n            fill=\"white\"\n          />\n        </svg>\n        Made with Userorbit\n      </div>\n    </div>\n  );\n};\n","// ABOUTME: Single source of truth for element-targeting primitives shared by the tour builder\n// ABOUTME: (selector generation) and the guide runtime (selector resolution and healing).\n\nimport type { ElementSelectorFingerprint } from \"@userorbit/types\";\n\nexport const durableAttributeNames = [\n  \"data-testid\",\n  \"data-test\",\n  \"data-cy\",\n  \"data-qa\",\n  \"data-tour\",\n  \"data-userorbit\",\n  \"data-pw\",\n  \"data-test-id\",\n  \"data-automation-id\",\n  \"data-automation\",\n  \"data-ui\",\n  \"name\",\n  \"href\",\n];\n\nexport const localizedAttributeNames = [\"aria-label\", \"title\", \"placeholder\", \"alt\"];\n\nexport const fingerprintAttributeNames = [\n  ...durableAttributeNames,\n  ...localizedAttributeNames,\n  \"role\",\n  \"type\",\n  \"value\",\n];\n\nconst unstableClassPatterns = [\n  /^css-[a-z0-9]+$/i,\n  /^sc-[a-z0-9]+$/i,\n  /^jss[0-9]+$/i,\n  /^makeStyles-/i,\n  /^_[a-z0-9_-]+$/i,\n  /^[a-z0-9_-]*__[a-z0-9_-]*___[a-z0-9_-]+$/i,\n];\n\nconst unstableIdPatterns = [\n  /^radix-:/i,\n  /^headlessui-/i,\n  /^react-aria[-:]/i,\n  /^react-aria\\d/i,\n  /^downshift-/i,\n  /^mui-[0-9]+$/i,\n  /^:[a-z0-9]+:$/i,\n];\n\nconst genericUtilityClassNames = new Set([\n  \"absolute\",\n  \"block\",\n  \"contents\",\n  \"fixed\",\n  \"flex\",\n  \"grid\",\n  \"hidden\",\n  \"inline\",\n  \"inline-block\",\n  \"inline-flex\",\n  \"flex-row\",\n  \"flex-row-reverse\",\n  \"flex-col\",\n  \"flex-col-reverse\",\n  \"relative\",\n  \"sr-only\",\n  \"static\",\n  \"sticky\",\n  \"truncate\",\n  \"overflow-auto\",\n  \"overflow-hidden\",\n  \"overflow-scroll\",\n  \"overflow-x-auto\",\n  \"overflow-x-hidden\",\n  \"overflow-y-auto\",\n  \"overflow-y-hidden\",\n  \"select-none\",\n  \"cursor-default\",\n  \"cursor-pointer\",\n  \"outline-none\",\n  \"border\",\n  \"rounded\",\n  \"shadow\",\n  \"ring\",\n  \"uppercase\",\n  \"lowercase\",\n  \"capitalize\",\n  \"antialiased\",\n  \"appearance-auto\",\n  \"appearance-none\",\n  \"whitespace-normal\",\n  \"whitespace-nowrap\",\n  \"whitespace-pre\",\n  \"whitespace-pre-line\",\n  \"whitespace-pre-wrap\",\n  \"whitespace-break-spaces\",\n]);\n\nconst genericUtilityClassPatterns = [\n  /^(-)?(p|px|py|pt|pr|pb|pl|m|mx|my|mt|mr|mb|ml)-/,\n  /^(-)?(w|h|min-w|min-h|max-w|max-h|size)-/,\n  /^(text|font|leading|tracking|bg|border|rounded|shadow|ring|outline|opacity|z|decoration|underline|whitespace|caret|accent)-/,\n  /^(-)?(top|right|bottom|left|inset|translate|scale|rotate|origin)-/,\n  /^(items|justify|content|self|place|gap|space|order|col|row|basis|grow|shrink|flex)-/,\n  /^transition($|-)/,\n  /^(duration|delay|ease|animate)-/,\n  /^(hover|focus|focus-visible|active|disabled|dark|sm|md|lg|xl|2xl|data-|aria-)[[:]/,\n  /^(group|peer)(\\/|$)/,\n  /^\\[.*\\]$/,\n];\n\nconst digitRunPattern = /\\d{3,}/;\n\nlet selectorExclusionPatterns: RegExp[] = [];\n\nexport function setSelectorExclusions(patterns: string[]) {\n  selectorExclusionPatterns = patterns\n    .map((pattern) => {\n      try {\n        return new RegExp(pattern, \"i\");\n      } catch {\n        return null;\n      }\n    })\n    .filter((pattern): pattern is RegExp => pattern !== null);\n}\n\nfunction isExcludedToken(value: string) {\n  return selectorExclusionPatterns.some((pattern) => pattern.test(value));\n}\n\nexport function isStableToken(value: string) {\n  const normalized = value.trim();\n  if (isExcludedToken(normalized)) return false;\n  if (normalized.length < 2 || normalized.length > 100) return false;\n  if (/^(true|false|null|undefined)$/i.test(normalized)) return false;\n  if (/[{}[\\]()`;]/.test(normalized)) return false;\n  if (/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i.test(normalized)) {\n    return false;\n  }\n  if (/^[a-f0-9]{8,}$/i.test(normalized)) return false;\n  return true;\n}\n\nexport function isStableClassName(value: string) {\n  if (!isStableToken(value)) return false;\n  if (value.includes(\":\") || value.includes(\"[\") || value.includes(\"]\")) return false;\n  if (genericUtilityClassNames.has(value)) return false;\n  if (genericUtilityClassPatterns.some((pattern) => pattern.test(value))) return false;\n  if (unstableClassPatterns.some((pattern) => pattern.test(value))) return false;\n  return /^[a-z][a-z0-9_-]{2,}$/i.test(value);\n}\n\nexport function isFrameworkGeneratedId(value: string) {\n  return unstableIdPatterns.some((pattern) => pattern.test(value));\n}\n\nexport function isStableId(value: string) {\n  if (isFrameworkGeneratedId(value)) return false;\n  if (digitRunPattern.test(value)) return false;\n  if (isGuidLikeToken(value)) return false;\n  return isStableToken(value) && /^[A-Za-z][\\w:.-]*$/.test(value);\n}\n\nfunction isGuidLikeToken(value: string) {\n  if (value.length < 6) return false;\n  let transitions = 0;\n  for (let index = 1; index < value.length; index += 1) {\n    if (characterClass(value[index]) !== characterClass(value[index - 1])) transitions += 1;\n  }\n  return transitions >= value.length / 4;\n}\n\nfunction characterClass(char: string) {\n  if (/[a-z]/.test(char)) return \"lower\";\n  if (/[A-Z]/.test(char)) return \"upper\";\n  if (/[0-9]/.test(char)) return \"digit\";\n  return \"other\";\n}\n\nexport function isDurableAttribute(name: string, value: string) {\n  if (!durableAttributeNames.includes(name)) return false;\n  if (!isStableToken(value)) return false;\n  if (name === \"href\") return value.startsWith(\"/\") || value.startsWith(\"#\");\n  return name.startsWith(\"data-\") || name === \"name\";\n}\n\nexport function isUsableAttribute(name: string, value: string) {\n  if (![...durableAttributeNames, ...localizedAttributeNames].includes(name)) return false;\n  if (!isStableToken(value)) return false;\n  if (name === \"href\") return value.startsWith(\"/\") || value.startsWith(\"#\");\n  if (localizedAttributeNames.includes(name)) return value.trim().length <= 80;\n  return [\"data-\", \"aria-\", \"name\", \"title\", \"placeholder\"].some((prefix) =>\n    name.startsWith(prefix),\n  );\n}\n\nexport function isLikelyDynamicText(value: string) {\n  const text = value.trim();\n  if (!text) return false;\n  if (digitRunPattern.test(text)) return true;\n  if (/[#№]\\s*\\d/.test(text)) return true;\n  if (/\\S+@\\S+\\.\\S+/.test(text)) return true;\n  if (/\\d{1,2}[/.-]\\d{1,2}[/.-]\\d{2,4}/.test(text)) return true;\n  if (/[$€£₹]\\s?\\d/.test(text)) return true;\n  if (/\\b\\d{1,2}:\\d{2}\\b/.test(text)) return true;\n  const digits = (text.match(/\\d/g) || []).length;\n  return digits > 0 && digits * 2 >= text.replace(/\\s/g, \"\").length;\n}\n\nexport function escapeIdentifier(value: string) {\n  if (typeof CSS !== \"undefined\" && CSS.escape) return CSS.escape(value);\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"\\\\$&\");\n}\n\nexport function escapeAttributeValue(value: string) {\n  return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\a \");\n}\n\nexport function getAncestors(element: HTMLElement) {\n  const ancestors: HTMLElement[] = [];\n  let current = element.parentElement;\n\n  while (current && current !== element.ownerDocument.body) {\n    ancestors.push(current);\n    current = current.parentElement;\n  }\n\n  return ancestors;\n}\n\nexport function createElementFingerprint(element: HTMLElement): ElementSelectorFingerprint {\n  return {\n    tagName: element.tagName.toLowerCase(),\n    role: getElementRole(element),\n    label: getElementLabel(element),\n    text: getElementText(element),\n    attributes: getFingerprintAttributes(element),\n    classNames: Array.from(element.classList).filter(isStableClassName).slice(0, 6),\n    ancestorHints: getAncestors(element).slice(0, 4).map(getAncestorHint),\n    tableContext: getTableContext(element),\n    siblingIndex: getSiblingIndex(element),\n  };\n}\n\nfunction getAncestorHint(element: HTMLElement) {\n  return {\n    tagName: element.tagName.toLowerCase(),\n    role: getElementRole(element),\n    label: getElementLabel(element),\n    text: getElementText(element),\n    attributes: getFingerprintAttributes(element),\n  };\n}\n\nfunction getFingerprintAttributes(element: HTMLElement) {\n  const attributes: Record<string, string> = {};\n  for (const name of fingerprintAttributeNames) {\n    const value = element.getAttribute(name);\n    if (value && isStableToken(value)) attributes[name] = value.trim().slice(0, 120);\n  }\n  return attributes;\n}\n\nexport function getElementRole(element: HTMLElement) {\n  const explicitRole = element.getAttribute(\"role\");\n  if (explicitRole && isStableToken(explicitRole)) return explicitRole;\n\n  const tag = element.tagName.toLowerCase();\n  if (tag === \"a\") return \"link\";\n  if (tag === \"button\") return \"button\";\n  if (tag === \"input\" || tag === \"textarea\" || tag === \"select\") return \"field\";\n  return null;\n}\n\nexport function getElementLabel(element: HTMLElement) {\n  return normalizeFingerprintText(\n    element.getAttribute(\"aria-label\") ||\n      getAriaLabelledByText(element) ||\n      element.getAttribute(\"title\") ||\n      element.getAttribute(\"placeholder\") ||\n      \"\",\n  );\n}\n\nfunction getAriaLabelledByText(element: HTMLElement) {\n  const ids = element.getAttribute(\"aria-labelledby\")?.split(/\\s+/).filter(Boolean) || [];\n  return ids.map((id) => element.ownerDocument.getElementById(id)?.textContent || \"\").join(\" \");\n}\n\nexport function getElementText(element: HTMLElement) {\n  const clone = element.cloneNode(true) as HTMLElement;\n  clone.querySelectorAll(\"[aria-hidden='true'], [hidden], svg, script, style\").forEach((node) => {\n    node.remove();\n  });\n  return normalizeFingerprintText(clone.textContent || \"\");\n}\n\nfunction normalizeFingerprintText(value?: string | null) {\n  const normalized = String(value || \"\")\n    .replace(/\\s+/g, \" \")\n    .trim();\n  return normalized ? normalized.slice(0, 160) : null;\n}\n\nfunction getTableContext(element: HTMLElement) {\n  const cell = element.closest(\"td,th\");\n  if (!isHTMLElement(cell, element.ownerDocument)) return undefined;\n\n  const row = cell.closest(\"tr\");\n  if (!isHTMLElement(row, element.ownerDocument)) return undefined;\n\n  const cells = Array.from(row.children).filter((child): child is HTMLElement =>\n    isHTMLElement(child, element.ownerDocument),\n  );\n  const cellIndex = cells.indexOf(cell);\n  const table = row.closest(\"table\");\n  const columnHeader =\n    cell.tagName.toLowerCase() === \"th\"\n      ? cell\n      : table?.querySelectorAll(\"thead th\")[cellIndex] ||\n        row.querySelectorAll(\"th\")[cellIndex] ||\n        null;\n\n  return {\n    columnText: isHTMLElement(columnHeader, element.ownerDocument)\n      ? normalizeFingerprintText(columnHeader.textContent)\n      : null,\n    cellText: normalizeFingerprintText(cell.textContent),\n    rowText: normalizeFingerprintText(row.textContent),\n    cellIndex: cellIndex >= 0 ? cellIndex : null,\n  };\n}\n\nfunction getSiblingIndex(element: HTMLElement) {\n  if (!element.parentElement) return null;\n  const siblings = Array.from(element.parentElement.children).filter(\n    (child) => child.tagName.toLowerCase() === element.tagName.toLowerCase(),\n  );\n  const index = siblings.indexOf(element);\n  return index >= 0 ? index : null;\n}\n\nconst TEXT_MISMATCH_PENALTY = 20;\n\nexport type FingerprintScoringOptions = {\n  ignoreText?: boolean;\n};\n\nexport function getBestFingerprintMatch(\n  candidates: HTMLElement[],\n  fingerprint: ElementSelectorFingerprint,\n  options: FingerprintScoringOptions = {},\n) {\n  let bestMatch: { element: HTMLElement; score: number } | null = null;\n\n  for (const element of candidates) {\n    const score = scoreElementFingerprint(element, fingerprint, options);\n    if (!bestMatch || score > bestMatch.score) bestMatch = { element, score };\n  }\n\n  return bestMatch;\n}\n\nexport function scoreElementFingerprint(\n  element: HTMLElement,\n  fingerprint: ElementSelectorFingerprint,\n  options: FingerprintScoringOptions = {},\n) {\n  const current = createElementFingerprint(element);\n  let score = 0;\n\n  if (current.tagName === fingerprint.tagName) score += 8;\n  if (current.role && current.role === fingerprint.role) score += 20;\n  if (current.siblingIndex !== null && current.siblingIndex === fingerprint.siblingIndex)\n    score += 4;\n\n  for (const [name, value] of Object.entries(fingerprint.attributes)) {\n    if (current.attributes[name] !== value) continue;\n    score += durableAttributeNames.includes(name) ? 32 : 10;\n  }\n\n  const sharedClasses = fingerprint.classNames.filter((className) =>\n    current.classNames.includes(className),\n  );\n  score += Math.min(sharedClasses.length * 6, 18);\n\n  if (!options.ignoreText) {\n    score += scoreTextMatch(current.label, fingerprint.label, 16);\n    score += scoreTextMatch(current.text, fingerprint.text, 16);\n    score -= scoreTextMismatchPenalty(current.label, fingerprint.label);\n    score -= scoreTextMismatchPenalty(current.text, fingerprint.text);\n  }\n\n  if (fingerprint.tableContext && current.tableContext) {\n    score += scoreTextMatch(\n      current.tableContext.columnText,\n      fingerprint.tableContext.columnText,\n      16,\n    );\n    score += scoreTextMatch(current.tableContext.cellText, fingerprint.tableContext.cellText, 10);\n  }\n\n  for (const expectedAncestor of fingerprint.ancestorHints) {\n    const matchedAncestor = current.ancestorHints.find((ancestor) => {\n      if (expectedAncestor.role && ancestor.role === expectedAncestor.role) return true;\n      if (!options.ignoreText && scoreTextMatch(ancestor.label, expectedAncestor.label, 8) > 0)\n        return true;\n      if (!options.ignoreText && scoreTextMatch(ancestor.text, expectedAncestor.text, 8) > 0)\n        return true;\n      return Object.entries(expectedAncestor.attributes).some(\n        ([name, value]) => ancestor.attributes[name] === value,\n      );\n    });\n    if (matchedAncestor) score += 8;\n  }\n\n  return score;\n}\n\nfunction scoreTextMatch(current: string | null, expected: string | null, exactScore: number) {\n  if (!current || !expected) return 0;\n  const normalizedCurrent = current.toLowerCase();\n  const normalizedExpected = expected.toLowerCase();\n  if (normalizedCurrent === normalizedExpected) return exactScore;\n  if (\n    normalizedCurrent.length > 3 &&\n    normalizedExpected.length > 3 &&\n    (normalizedCurrent.includes(normalizedExpected) ||\n      normalizedExpected.includes(normalizedCurrent))\n  ) {\n    return Math.round(exactScore * 0.6);\n  }\n  return 0;\n}\n\nfunction scoreTextMismatchPenalty(current: string | null, expected: string | null) {\n  if (!current || !expected) return 0;\n  return scoreTextMatch(current, expected, TEXT_MISMATCH_PENALTY) > 0 ? 0 : TEXT_MISMATCH_PENALTY;\n}\n\nexport function isHTMLElement(value: unknown, ownerDoc: Document): value is HTMLElement {\n  const HTMLElementConstructor = ownerDoc.defaultView?.HTMLElement;\n  if (HTMLElementConstructor) return value instanceof HTMLElementConstructor;\n  return typeof HTMLElement !== \"undefined\" && value instanceof HTMLElement;\n}\n","// ABOUTME: Resolves tour step targets on the live page: selector-bank matching, element\n// ABOUTME: targeting (text/nth/strictness), fingerprint scoring fallback, and iframe selectors.\n\nimport type { ElementSelectorFingerprint, StepElementTargeting } from \"@userorbit/types\";\nimport {\n  durableAttributeNames,\n  escapeAttributeValue,\n  escapeIdentifier,\n  getBestFingerprintMatch,\n  getElementLabel,\n  getElementText,\n  isHTMLElement,\n  isLikelyDynamicText,\n  localizedAttributeNames,\n  type FingerprintScoringOptions,\n} from \"./element-fingerprint\";\n\nexport function normalizeCssSelector(selector: string): string {\n  const trimmed = selector.trim();\n  if (trimmed.length < 2) return trimmed;\n\n  const first = trimmed[0];\n  const last = trimmed[trimmed.length - 1];\n  if ((first === `\"` || first === `'`) && first === last) {\n    return trimmed.slice(1, -1).trim();\n  }\n\n  return trimmed;\n}\n\nconst iframeSelectorSeparator = \" >> \";\n\nfunction parseIframeSelector(selector: string) {\n  const normalizedSelector = normalizeCssSelector(selector);\n  const separatorIndex = findTopLevelIframeSelectorSeparator(normalizedSelector);\n  if (separatorIndex === -1) return null;\n\n  const iframeSelector = normalizedSelector.slice(0, separatorIndex).trim();\n  const targetSelector = normalizedSelector\n    .slice(separatorIndex + iframeSelectorSeparator.length)\n    .trim();\n\n  if (!iframeSelector || !targetSelector) return null;\n  return { iframeSelector, targetSelector };\n}\n\nfunction findTopLevelIframeSelectorSeparator(selector: string) {\n  let bracketDepth = 0;\n  let parenDepth = 0;\n  let quote: string | null = null;\n  let isEscaped = false;\n\n  for (let index = 0; index < selector.length; index += 1) {\n    const char = selector[index];\n\n    if (isEscaped) {\n      isEscaped = false;\n      continue;\n    }\n\n    if (char === \"\\\\\") {\n      isEscaped = true;\n      continue;\n    }\n\n    if (quote) {\n      if (char === quote) quote = null;\n      continue;\n    }\n\n    if (char === `\"` || char === \"'\") {\n      quote = char;\n      continue;\n    }\n\n    if (char === \"[\") {\n      bracketDepth += 1;\n      continue;\n    }\n\n    if (char === \"]\") {\n      bracketDepth = Math.max(0, bracketDepth - 1);\n      continue;\n    }\n\n    if (char === \"(\") {\n      parenDepth += 1;\n      continue;\n    }\n\n    if (char === \")\") {\n      parenDepth = Math.max(0, parenDepth - 1);\n      continue;\n    }\n\n    if (\n      bracketDepth === 0 &&\n      parenDepth === 0 &&\n      selector.startsWith(iframeSelectorSeparator, index)\n    ) {\n      return index;\n    }\n  }\n\n  return -1;\n}\n\nfunction getAccessibleIframeDocument(iframe: HTMLIFrameElement) {\n  try {\n    return iframe.contentDocument || iframe.contentWindow?.document || null;\n  } catch {\n    return null;\n  }\n}\n\nexport function createIframeSelector(iframeSelector: string, targetSelector: string) {\n  return `${normalizeCssSelector(iframeSelector)}${iframeSelectorSeparator}${normalizeCssSelector(\n    targetSelector,\n  )}`;\n}\n\nexport function getAccessibleIframeDocuments(ownerDoc: Document) {\n  const documents: Document[] = [];\n  const visited = new Set<Document>();\n\n  const collect = (currentDoc: Document) => {\n    if (visited.has(currentDoc)) return;\n    visited.add(currentDoc);\n\n    currentDoc.querySelectorAll(\"iframe\").forEach((element) => {\n      if (!isHTMLIFrameElement(element, currentDoc)) return;\n\n      const iframeDoc = getAccessibleIframeDocument(element);\n      if (!iframeDoc?.body) return;\n\n      documents.push(iframeDoc);\n      collect(iframeDoc);\n    });\n  };\n\n  collect(ownerDoc);\n\n  return documents;\n}\n\nexport function getElementFrameElements(element: Element, rootDoc: Document = document) {\n  const frames: Element[] = [];\n  let currentDocument = element.ownerDocument;\n\n  while (currentDocument !== rootDoc || getFrameElementForDocument(rootDoc, currentDocument)) {\n    const frameElement = getFrameElementForDocument(rootDoc, currentDocument);\n    if (!frameElement) break;\n\n    frames.push(frameElement);\n\n    if (frameElement.ownerDocument === rootDoc) break;\n    currentDocument = frameElement.ownerDocument;\n  }\n\n  return frames;\n}\n\nexport function getElementViewportRect(element: Element, rootDoc: Document = document): DOMRect {\n  const rect = element.getBoundingClientRect();\n  let left = rect.left;\n  let top = rect.top;\n\n  getElementFrameElements(element, rootDoc).forEach((frameElement) => {\n    const frameRect = frameElement.getBoundingClientRect();\n    left += frameRect.left;\n    top += frameRect.top;\n  });\n\n  return createRect(left, top, rect.width, rect.height, rootDoc.defaultView ?? window);\n}\n\nexport function scrollElementIntoView(\n  element: Element,\n  rootDoc: Document = document,\n  options: ScrollIntoViewOptions = {},\n) {\n  element.scrollIntoView?.(options);\n\n  getElementFrameElements(element, rootDoc).forEach((frameElement) =>\n    frameElement.scrollIntoView?.(options),\n  );\n}\n\nexport function querySelectorSafely(ownerDoc: Document, selector: string) {\n  const normalizedSelector = normalizeCssSelector(selector);\n  const iframeSelector = parseIframeSelector(normalizedSelector);\n\n  if (iframeSelector) {\n    const iframe = queryIframe(ownerDoc, iframeSelector.iframeSelector);\n    const iframeDoc = iframe ? getAccessibleIframeDocument(iframe) : null;\n    if (!iframeDoc) return null;\n\n    try {\n      return iframeDoc.querySelector(iframeSelector.targetSelector);\n    } catch (e) {\n      console.error(`Guide: Invalid selector \"${normalizedSelector}\"`, e);\n      return null;\n    }\n  }\n\n  try {\n    return ownerDoc.querySelector(normalizedSelector);\n  } catch (e) {\n    console.error(`Guide: Invalid selector \"${normalizedSelector}\"`, e);\n    return null;\n  }\n}\n\nexport function isValidSelector(ownerDoc: Document, selector: string) {\n  const normalizedSelector = normalizeCssSelector(selector);\n  const iframeSelector = parseIframeSelector(normalizedSelector);\n\n  if (iframeSelector) {\n    return (\n      isValidSelectorSyntax(ownerDoc, iframeSelector.iframeSelector, normalizedSelector) &&\n      isValidSelectorSyntax(\n        queryIframe(ownerDoc, iframeSelector.iframeSelector)\n          ? getAccessibleIframeDocument(queryIframe(ownerDoc, iframeSelector.iframeSelector)!)\n          : ownerDoc,\n        iframeSelector.targetSelector,\n        normalizedSelector,\n      )\n    );\n  }\n\n  return isValidSelectorSyntax(ownerDoc, normalizedSelector, normalizedSelector);\n}\n\nfunction isValidSelectorSyntax(ownerDoc: Document | null, selector: string, original: string) {\n  if (!ownerDoc) return false;\n  try {\n    ownerDoc.querySelector(selector);\n    return true;\n  } catch (e) {\n    console.error(`Guide: Invalid selector \"${original}\"`, e);\n    return false;\n  }\n}\n\nexport function matchesSelectorTarget(\n  target: EventTarget | null,\n  selector: string,\n  rootDoc?: Document,\n): boolean {\n  if (!isElementNode(target)) return false;\n\n  const normalizedSelector = normalizeCssSelector(selector);\n  const iframeSelector = parseIframeSelector(normalizedSelector);\n  if (iframeSelector) {\n    const iframe = queryIframe(rootDoc ?? target.ownerDocument, iframeSelector.iframeSelector);\n    const iframeDoc = iframe ? getAccessibleIframeDocument(iframe) : null;\n    if (!iframeDoc || target.ownerDocument !== iframeDoc) return false;\n\n    return matchesDirectSelectorTarget(target, iframeSelector.targetSelector, normalizedSelector);\n  }\n\n  return matchesDirectSelectorTarget(target, normalizedSelector, normalizedSelector);\n}\n\nfunction matchesDirectSelectorTarget(target: Element, selector: string, original: string) {\n  try {\n    return target.matches(selector) || target.closest(selector) !== null;\n  } catch (e) {\n    console.error(`Guide: Invalid selector \"${original}\"`, e);\n    return false;\n  }\n}\n\nconst FINGERPRINT_MATCH_SCORE = 35;\n\nexport type TargetResolutionOptions = {\n  elementTargeting?: StepElementTargeting | null;\n  ignoreAncestorAriaHidden?: boolean;\n  includeHidden?: boolean;\n  excludeElement?: (element: HTMLElement) => boolean;\n  manualSelector?: string | null;\n};\n\nexport type TargetResolutionVia = \"selector\" | \"manual\" | \"pooled\" | \"fingerprint\";\n\nexport type TargetResolution = {\n  element: HTMLElement;\n  matchedSelector: string | null;\n  via: TargetResolutionVia;\n};\n\nexport function resolveElementFromFingerprint(\n  ownerDoc: Document,\n  fingerprint?: ElementSelectorFingerprint | null,\n  options: TargetResolutionOptions = {},\n) {\n  if (!fingerprint) return null;\n\n  const candidates = applyElementTargetTextFilter(\n    collectFingerprintCandidates(ownerDoc, fingerprint, options),\n    options.elementTargeting,\n  );\n  const bestMatch = getBestFingerprintMatch(candidates, fingerprint, {\n    ignoreText: shouldIgnoreTargetText(options.elementTargeting),\n  });\n  return bestMatch && bestMatch.score >= getFingerprintMatchScore(options.elementTargeting)\n    ? bestMatch.element\n    : null;\n}\n\nexport function resolveElementFromSelectorBank(\n  ownerDoc: Document,\n  selectors: string[],\n  fingerprint?: ElementSelectorFingerprint | null,\n  options: TargetResolutionOptions = {},\n) {\n  return resolveTargetFromSelectorBank(ownerDoc, selectors, fingerprint, options)?.element || null;\n}\n\nexport function resolveTargetFromSelectorBank(\n  ownerDoc: Document,\n  selectors: string[],\n  fingerprint?: ElementSelectorFingerprint | null,\n  options: TargetResolutionOptions = {},\n): TargetResolution | null {\n  const elementTargeting = options.elementTargeting;\n  const hasElementTargeting = hasActiveElementTargeting(elementTargeting);\n  const hasStaticTextTarget = hasStaticElementTargetText(elementTargeting);\n  const fingerprintScore = getFingerprintMatchScore(elementTargeting);\n  const scoringOptions = { ignoreText: shouldIgnoreTargetText(elementTargeting) };\n  const manualSelector = options.manualSelector\n    ? normalizeCssSelector(options.manualSelector)\n    : null;\n  const matches: HTMLElement[] = [];\n  for (const selector of selectors) {\n    try {\n      const isManual = manualSelector !== null && normalizeCssSelector(selector) === manualSelector;\n      const selectorMatches = getElementTargetMatches(ownerDoc, [selector], elementTargeting, {\n        ignoreAncestorAriaHidden: options.ignoreAncestorAriaHidden,\n        includeHidden: options.includeHidden,\n        excludeElement: options.excludeElement,\n      });\n      getRawSelectorMatches(ownerDoc, selector).forEach((element) => {\n        const elementOwnerDoc = element.ownerDocument;\n        if (!isHTMLElement(element, elementOwnerDoc)) return;\n        if (!isResolvableGuideTarget(element, elementOwnerDoc, options)) return;\n        if (!matches.includes(element)) matches.push(element);\n      });\n\n      if (isManual && selectorMatches.length > 0) {\n        const match = resolveManualSelectorMatch(\n          selectorMatches,\n          fingerprint,\n          elementTargeting,\n          scoringOptions,\n        );\n        if (match) return { element: match, matchedSelector: selector, via: \"manual\" };\n      }\n      if (selectorMatches.length === 1) {\n        if (hasStaticTextTarget) {\n          return { element: selectorMatches[0], matchedSelector: selector, via: \"selector\" };\n        }\n        if (!fingerprint || isDurableSelector(selector)) {\n          return { element: selectorMatches[0], matchedSelector: selector, via: \"selector\" };\n        }\n\n        const match = getBestFingerprintMatch(selectorMatches, fingerprint, scoringOptions);\n        if (match && match.score >= fingerprintScore) {\n          return { element: match.element, matchedSelector: selector, via: \"selector\" };\n        }\n      }\n      if (hasElementTargeting && selectorMatches.length > 0) {\n        const match = selectElementTargetMatch(\n          selectorMatches,\n          fingerprint,\n          elementTargeting,\n          fingerprintScore,\n          scoringOptions,\n        );\n        if (match) return { element: match, matchedSelector: selector, via: \"selector\" };\n      }\n      if (!fingerprint && selectorMatches.length > 0) {\n        return { element: selectorMatches[0], matchedSelector: selector, via: \"selector\" };\n      }\n    } catch (e) {\n      console.error(`Guide: Invalid selector \"${selector}\"`, e);\n    }\n  }\n\n  const filteredMatches = applyElementTargetTextFilter(matches, elementTargeting);\n  if (!fingerprint) {\n    return filteredMatches[0]\n      ? { element: filteredMatches[0], matchedSelector: null, via: \"pooled\" }\n      : null;\n  }\n\n  const bestSelectorMatch = getBestFingerprintMatch(filteredMatches, fingerprint, scoringOptions);\n  if (bestSelectorMatch && bestSelectorMatch.score >= fingerprintScore) {\n    return { element: bestSelectorMatch.element, matchedSelector: null, via: \"pooled\" };\n  }\n\n  const fingerprintMatch = resolveElementFromFingerprint(ownerDoc, fingerprint, options);\n  return fingerprintMatch\n    ? { element: fingerprintMatch, matchedSelector: null, via: \"fingerprint\" }\n    : null;\n}\n\nfunction resolveManualSelectorMatch(\n  matches: HTMLElement[],\n  fingerprint: ElementSelectorFingerprint | null | undefined,\n  elementTargeting: StepElementTargeting | null | undefined,\n  scoringOptions: FingerprintScoringOptions,\n) {\n  if (matches.length === 1) return matches[0];\n\n  const strategy = elementTargeting?.multipleMatches?.strategy || \"best\";\n  if (strategy !== \"best\") {\n    return selectElementTargetMatch(matches, fingerprint, elementTargeting, 0, scoringOptions);\n  }\n  if (!fingerprint) return matches[0];\n\n  const bestMatch = getBestFingerprintMatch(matches, fingerprint, scoringOptions);\n  return bestMatch?.element || matches[0];\n}\n\nexport function getElementTargetMatches(\n  ownerDoc: Document,\n  selectors: string[],\n  elementTargeting?: StepElementTargeting | null,\n  options: Pick<\n    TargetResolutionOptions,\n    \"ignoreAncestorAriaHidden\" | \"includeHidden\" | \"excludeElement\"\n  > = {},\n) {\n  const matches: HTMLElement[] = [];\n  for (const selector of selectors) {\n    try {\n      getRawSelectorMatches(ownerDoc, selector).forEach((element) => {\n        const elementOwnerDoc = element.ownerDocument;\n        if (!isHTMLElement(element, elementOwnerDoc)) return;\n        if (!isResolvableGuideTarget(element, elementOwnerDoc, options)) return;\n        if (!matches.includes(element)) matches.push(element);\n      });\n    } catch (e) {\n      console.error(`Guide: Invalid selector \"${selector}\"`, e);\n    }\n  }\n\n  return applyElementTargetTextFilter(matches, elementTargeting);\n}\n\nfunction getRawSelectorMatches(ownerDoc: Document, selector: string) {\n  const normalizedSelector = normalizeCssSelector(selector);\n  const iframeSelector = parseIframeSelector(normalizedSelector);\n\n  if (!iframeSelector) {\n    return Array.from(ownerDoc.querySelectorAll(normalizedSelector));\n  }\n\n  const iframe = queryIframe(ownerDoc, iframeSelector.iframeSelector);\n  const iframeDoc = iframe ? getAccessibleIframeDocument(iframe) : null;\n  if (!iframeDoc) return [];\n\n  return Array.from(iframeDoc.querySelectorAll(iframeSelector.targetSelector));\n}\n\nfunction queryIframe(ownerDoc: Document, selector: string) {\n  try {\n    const iframe = ownerDoc.querySelector(selector);\n    return isHTMLIFrameElement(iframe, ownerDoc) ? iframe : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction getFrameElementForDocument(rootDoc: Document, targetDoc: Document) {\n  if (targetDoc === rootDoc) return null;\n\n  try {\n    const frameElement = targetDoc.defaultView?.frameElement;\n    if (frameElement) return frameElement;\n  } catch {\n    return findIframeForDocument(rootDoc, targetDoc);\n  }\n\n  return findIframeForDocument(rootDoc, targetDoc);\n}\n\nfunction findIframeForDocument(rootDoc: Document, targetDoc: Document) {\n  const queue = [rootDoc];\n  const visited = new Set<Document>();\n\n  while (queue.length > 0) {\n    const ownerDoc = queue.shift();\n    if (!ownerDoc || visited.has(ownerDoc)) continue;\n    visited.add(ownerDoc);\n\n    for (const element of Array.from(ownerDoc.querySelectorAll(\"iframe\"))) {\n      if (!isHTMLIFrameElement(element, ownerDoc)) continue;\n\n      const iframeDoc = getAccessibleIframeDocument(element);\n      if (iframeDoc === targetDoc) return element;\n      if (iframeDoc) queue.push(iframeDoc);\n    }\n  }\n\n  return null;\n}\n\nfunction hasActiveElementTargeting(elementTargeting?: StepElementTargeting | null) {\n  if (!elementTargeting) return false;\n  const strategy = elementTargeting.multipleMatches?.strategy;\n  return Boolean(\n    getStaticTargetText(elementTargeting) ||\n    (strategy && strategy !== \"best\") ||\n    (elementTargeting.strictness && elementTargeting.strictness !== \"legacy\"),\n  );\n}\n\nfunction hasStaticElementTargetText(elementTargeting?: StepElementTargeting | null) {\n  return getStaticTargetText(elementTargeting) !== null;\n}\n\nfunction getStaticTargetText(elementTargeting?: StepElementTargeting | null) {\n  const text = elementTargeting?.text;\n  const value = text?.value?.trim();\n  if (!value || text?.dynamic) return null;\n  if (text?.dynamic === undefined && isLikelyDynamicText(value)) return null;\n  return value;\n}\n\nfunction getFingerprintMatchScore(elementTargeting?: StepElementTargeting | null) {\n  switch (elementTargeting?.strictness) {\n    case \"loose\":\n      return 20;\n    case \"strict\":\n      return 55;\n    case \"balanced\":\n      return FINGERPRINT_MATCH_SCORE;\n    case \"legacy\":\n    default:\n      return FINGERPRINT_MATCH_SCORE;\n  }\n}\n\nfunction shouldIgnoreTargetText(elementTargeting?: StepElementTargeting | null) {\n  return Boolean(elementTargeting?.text?.dynamic || elementTargeting?.text?.value?.trim());\n}\n\nfunction selectElementTargetMatch(\n  matches: HTMLElement[],\n  fingerprint: ElementSelectorFingerprint | null | undefined,\n  elementTargeting: StepElementTargeting | null | undefined,\n  fingerprintScore: number,\n  scoringOptions: FingerprintScoringOptions,\n) {\n  const strategy = elementTargeting?.multipleMatches?.strategy || \"best\";\n\n  if (strategy === \"first\") return matches[0] || null;\n  if (strategy === \"last\") return matches[matches.length - 1] || null;\n  if (strategy === \"nth\") {\n    const index = Math.max(1, Number(elementTargeting?.multipleMatches?.index) || 1) - 1;\n    return matches[index] || null;\n  }\n\n  if (!fingerprint) return matches[0] || null;\n\n  const bestMatch = getBestFingerprintMatch(matches, fingerprint, scoringOptions);\n  return bestMatch && bestMatch.score >= fingerprintScore ? bestMatch.element : null;\n}\n\nfunction applyElementTargetTextFilter(\n  matches: HTMLElement[],\n  elementTargeting?: StepElementTargeting | null,\n) {\n  const text = elementTargeting?.text;\n  const expectedText = getStaticTargetText(elementTargeting);\n  if (!expectedText || !text) return matches;\n\n  return matches.filter((element) => elementMatchesTargetText(element, expectedText, text));\n}\n\nfunction elementMatchesTargetText(\n  element: HTMLElement,\n  expectedText: string,\n  options: NonNullable<StepElementTargeting[\"text\"]>,\n) {\n  const textCandidates = [getElementLabel(element), getElementText(element)]\n    .filter(Boolean)\n    .map((value) => String(value));\n  const combinedText = textCandidates.join(\" \");\n  const candidates = Array.from(new Set([...textCandidates, combinedText].filter(Boolean)));\n  const expected = options.caseSensitive ? expectedText : expectedText.toLowerCase();\n\n  return candidates.some((candidate) => {\n    const actual = options.caseSensitive ? candidate : candidate.toLowerCase();\n\n    switch (options.match || \"exact\") {\n      case \"contains\":\n        return actual.includes(expected);\n      case \"startsWith\":\n        return actual.startsWith(expected);\n      case \"exact\":\n      default:\n        return actual === expected;\n    }\n  });\n}\n\nfunction collectFingerprintCandidates(\n  ownerDoc: Document,\n  fingerprint: ElementSelectorFingerprint,\n  options: Pick<\n    TargetResolutionOptions,\n    \"ignoreAncestorAriaHidden\" | \"includeHidden\" | \"excludeElement\"\n  > = {},\n) {\n  const selectors = new Set<string>();\n  selectors.add(fingerprint.tagName || \"*\");\n\n  if (fingerprint.role) selectors.add(`[role=\"${escapeAttributeValue(fingerprint.role)}\"]`);\n  for (const [name, value] of Object.entries(fingerprint.attributes)) {\n    if (!isUsableFingerprintLookupAttribute(name)) continue;\n    selectors.add(`[${escapeIdentifier(name)}=\"${escapeAttributeValue(value)}\"]`);\n  }\n  for (const className of fingerprint.classNames.slice(0, 3)) {\n    selectors.add(`.${escapeIdentifier(className)}`);\n  }\n\n  const candidates: HTMLElement[] = [];\n  for (const selector of selectors) {\n    try {\n      ownerDoc.querySelectorAll(selector).forEach((element) => {\n        if (\n          isHTMLElement(element, ownerDoc) &&\n          isResolvableGuideTarget(element, ownerDoc, options) &&\n          !candidates.includes(element)\n        )\n          candidates.push(element);\n      });\n    } catch {\n      continue;\n    }\n  }\n\n  return candidates.slice(0, 500);\n}\n\nfunction isUsableFingerprintLookupAttribute(name: string) {\n  return durableAttributeNames.includes(name) || name === \"role\" || name === \"type\";\n}\n\nfunction isDurableSelector(selector: string) {\n  const normalized = normalizeCssSelector(selector);\n  if (/#[a-zA-Z0-9_-]+/.test(normalized)) return true;\n\n  return [...durableAttributeNames, ...localizedAttributeNames].some((name) =>\n    new RegExp(`\\\\[\\\\s*${escapeRegExp(name)}\\\\s*(?:[*^$|~]?=|\\\\])`).test(normalized),\n  );\n}\n\nfunction escapeRegExp(value: string) {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction isElementNode(value: unknown): value is Element {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    \"nodeType\" in value &&\n    (value as Node).nodeType === 1 &&\n    \"ownerDocument\" in value\n  );\n}\n\nfunction isHTMLIFrameElement(value: unknown, ownerDoc: Document): value is HTMLIFrameElement {\n  const HTMLIFrameElementConstructor = ownerDoc.defaultView?.HTMLIFrameElement;\n  if (HTMLIFrameElementConstructor) return value instanceof HTMLIFrameElementConstructor;\n  return typeof HTMLIFrameElement !== \"undefined\" && value instanceof HTMLIFrameElement;\n}\n\nfunction createRect(\n  x: number,\n  y: number,\n  width: number,\n  height: number,\n  win: Window = window,\n): DOMRect {\n  const DOMRectConstructor =\n    (win as Window & { DOMRect?: typeof DOMRect }).DOMRect ?? globalThis.DOMRect;\n\n  if (typeof DOMRectConstructor === \"function\") {\n    return new DOMRectConstructor(x, y, width, height);\n  }\n\n  return {\n    x,\n    y,\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    toJSON: () => ({}),\n  } as DOMRect;\n}\n\nfunction isResolvableGuideTarget(\n  element: HTMLElement,\n  ownerDoc: Document,\n  options: Pick<\n    TargetResolutionOptions,\n    \"ignoreAncestorAriaHidden\" | \"includeHidden\" | \"excludeElement\"\n  > = {},\n) {\n  if (options.excludeElement?.(element)) return false;\n  if (options.includeHidden) return element.isConnected;\n  if (element.closest(\"[hidden]\")) return false;\n  if (element.getAttribute(\"aria-hidden\") === \"true\") return false;\n  if (!options.ignoreAncestorAriaHidden && element.parentElement?.closest(\"[aria-hidden='true']\")) {\n    return false;\n  }\n\n  const win = ownerDoc.defaultView;\n  if (win) {\n    const style = win.getComputedStyle(element);\n    if (\n      style.display === \"none\" ||\n      style.visibility === \"hidden\" ||\n      style.visibility === \"collapse\"\n    )\n      return false;\n  }\n\n  if (hasBrowserLayout(ownerDoc)) {\n    const rect = element.getBoundingClientRect();\n    if (rect.width <= 0 && rect.height <= 0 && element.getClientRects().length === 0) return false;\n  }\n\n  return true;\n}\n\nfunction hasBrowserLayout(ownerDoc: Document) {\n  return !/jsdom/i.test(ownerDoc.defaultView?.navigator.userAgent || \"\");\n}\n","import type { ElementSelectorFingerprint } from \"@userorbit/types\";\nimport { getAccessibleIframeDocuments, resolveElementFromSelectorBank } from \"./selectors\";\n\nexport type ObservedDocumentEvent = {\n  name: string;\n  listener: EventListener;\n  capture?: boolean;\n};\n\nexport type ObservedWindowEvent = {\n  name: string;\n  listener: EventListener;\n};\n\nexport type AccessibleDomObserverOptions = {\n  ownerDocument: Document;\n  onMutation?: (records: readonly MutationRecord[]) => void;\n  onDocument?: (document: Document) => void | (() => void);\n  documentEvents?: readonly ObservedDocumentEvent[];\n  windowEvents?: readonly ObservedWindowEvent[];\n};\n\nexport function resolveObservedElement(\n  ownerDocument: Document,\n  selectors: readonly string[],\n  fingerprint?: ElementSelectorFingerprint | null,\n  options: {\n    includeHidden?: boolean;\n    excludeElement?: (element: HTMLElement) => boolean;\n  } = {},\n) {\n  const direct = resolveElementFromSelectorBank(\n    ownerDocument,\n    [...selectors],\n    fingerprint,\n    options,\n  );\n  if (direct || !fingerprint) return direct;\n\n  for (const iframeDocument of getAccessibleIframeDocuments(ownerDocument)) {\n    const match = resolveElementFromSelectorBank(iframeDocument, [], fingerprint, options);\n    if (match) return match;\n  }\n\n  return null;\n}\n\nexport function observeAccessibleDom({\n  ownerDocument,\n  onMutation,\n  onDocument,\n  documentEvents = [],\n  windowEvents = [],\n}: AccessibleDomObserverOptions) {\n  const fallbackWindow = ownerDocument.defaultView ?? window;\n  const documentCleanups = new Map<Document, () => void>();\n  let disposed = false;\n\n  const mutationMayChangeDocumentTopology = (records: readonly MutationRecord[]) =>\n    records.length === 0 ||\n    records.some(\n      (record) =>\n        record.type === \"childList\" &&\n        [...record.addedNodes, ...record.removedNodes].some(\n          (node) =>\n            node.nodeType === Node.ELEMENT_NODE &&\n            ((node as Element).tagName.toLowerCase() === \"iframe\" ||\n              (node as Element).querySelector(\"iframe\")),\n        ),\n    );\n\n  const observeDocument = (currentDocument: Document) => {\n    if (disposed || !currentDocument.body || documentCleanups.has(currentDocument)) return;\n\n    const currentWindow = currentDocument.defaultView ?? fallbackWindow;\n    const MutationObserverConstructor =\n      currentWindow.MutationObserver ?? globalThis.MutationObserver;\n    const observer = MutationObserverConstructor\n      ? new MutationObserverConstructor((records) => {\n          if (disposed) return;\n          if (mutationMayChangeDocumentTopology(records)) observeAccessibleDocuments();\n          onMutation?.(records);\n        })\n      : null;\n    observer?.observe(currentDocument.body, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      characterData: true,\n    });\n\n    documentEvents.forEach(({ name, listener, capture = false }) =>\n      currentDocument.addEventListener(name, listener, capture),\n    );\n    windowEvents.forEach(({ name, listener }) => currentWindow.addEventListener(name, listener));\n    const cleanupDocument = onDocument?.(currentDocument);\n    const handleFrameLoad = (event: Event) => {\n      if ((event.target as Element | null)?.tagName?.toLowerCase() !== \"iframe\") return;\n      observeAccessibleDocuments();\n      onMutation?.([]);\n    };\n    currentDocument.addEventListener(\"load\", handleFrameLoad, true);\n\n    documentCleanups.set(currentDocument, () => {\n      observer?.disconnect();\n      currentDocument.removeEventListener(\"load\", handleFrameLoad, true);\n      documentEvents.forEach(({ name, listener, capture = false }) =>\n        currentDocument.removeEventListener(name, listener, capture),\n      );\n      windowEvents.forEach(({ name, listener }) =>\n        currentWindow.removeEventListener(name, listener),\n      );\n      if (typeof cleanupDocument === \"function\") cleanupDocument();\n    });\n  };\n\n  const observeAccessibleDocuments = () => {\n    const reachableDocuments = new Set([\n      ownerDocument,\n      ...getAccessibleIframeDocuments(ownerDocument),\n    ]);\n    reachableDocuments.forEach(observeDocument);\n\n    for (const [currentDocument, cleanup] of documentCleanups) {\n      if (reachableDocuments.has(currentDocument)) continue;\n      cleanup();\n      documentCleanups.delete(currentDocument);\n    }\n  };\n\n  observeAccessibleDocuments();\n\n  return () => {\n    if (disposed) return;\n    disposed = true;\n    documentCleanups.forEach((cleanup) => cleanup());\n    documentCleanups.clear();\n  };\n}\n","// ABOUTME: Hook that observes DOM conditions on a step and fires a callback when all/any are met.\n// ABOUTME: Supports inputFilled, elementPresent, elementClicked, elementFocusOut, urlMatches, and customEvent.\n\nimport { useEffect, useRef } from \"react\";\nimport type { StepCondition, StepWaitFor } from \"@userorbit/types\";\nimport { observeAccessibleDom } from \"./dom-observer\";\nimport {\n  getElementTargetMatches,\n  matchesSelectorTarget,\n  normalizeCssSelector,\n  resolveElementFromSelectorBank,\n} from \"./selectors\";\n\nconst STATE_CONDITION_POLL_INTERVAL_MS = 250;\n\nfunction isElementNode(value: EventTarget | null): value is Element {\n  return (\n    (typeof Element !== \"undefined\" && value instanceof Element) ||\n    (typeof value === \"object\" &&\n      value !== null &&\n      \"nodeType\" in value &&\n      (value as Node).nodeType === 1)\n  );\n}\n\nfunction isHTMLElementNode(value: Element | null): value is HTMLElement {\n  if (!value) return false;\n  const ownerWindow = value.ownerDocument.defaultView;\n  return ownerWindow ? value instanceof ownerWindow.HTMLElement : value instanceof HTMLElement;\n}\n\nfunction isInputElement(value: Element): value is HTMLInputElement {\n  return value.tagName.toLowerCase() === \"input\";\n}\n\nfunction isTextAreaElement(value: Element): value is HTMLTextAreaElement {\n  return value.tagName.toLowerCase() === \"textarea\";\n}\n\nfunction isSelectElement(value: Element): value is HTMLSelectElement {\n  return value.tagName.toLowerCase() === \"select\";\n}\n\nfunction resolveInteractiveHost(element: Element): Element {\n  if (isInputElement(element) || isTextAreaElement(element) || isSelectElement(element)) {\n    return element;\n  }\n\n  let current: HTMLElement | null = isHTMLElementNode(element) ? element : null;\n  while (current) {\n    if (current.isContentEditable) return current;\n    current = current.parentElement;\n  }\n\n  return element;\n}\n\nfunction hasMeaningfulRichTextContent(element: HTMLElement): boolean {\n  const text = (element.innerText || element.textContent || \"\").replace(/\\u200B/g, \"\").trim();\n  if (text.length > 0) return true;\n\n  return element.querySelector(\"img, video, iframe, embed, object, audio, canvas\") !== null;\n}\n\nfunction isElementFilled(element: Element): boolean {\n  const host = resolveInteractiveHost(element);\n\n  if (isInputElement(host)) {\n    if (host.type === \"checkbox\" || host.type === \"radio\") return host.checked;\n    return host.value.trim().length > 0;\n  }\n\n  if (isTextAreaElement(host) || isSelectElement(host)) {\n    return host.value.trim().length > 0;\n  }\n\n  if (isHTMLElementNode(host) && host.isContentEditable) {\n    return hasMeaningfulRichTextContent(host);\n  }\n\n  const text = isHTMLElementNode(host) ? host.innerText || host.textContent || \"\" : \"\";\n  return text.trim().length > 0;\n}\n\nfunction matchesSelectorWithinInteractiveHost(\n  target: EventTarget | null,\n  selector: string,\n  rootDoc: Document,\n): boolean {\n  if (!isElementNode(target)) return false;\n\n  if (matchesSelectorTarget(target, selector, rootDoc)) return true;\n\n  const host = resolveInteractiveHost(target);\n  if (!isHTMLElementNode(host)) return false;\n\n  const normalizedSelector = normalizeCssSelector(selector);\n  try {\n    return getElementTargetMatches(rootDoc, [normalizedSelector]).some(\n      (match) => match === host || host.contains(match) || match.contains(host),\n    );\n  } catch (e) {\n    console.error(`Guide: Invalid selector \"${normalizedSelector}\"`, e);\n    return false;\n  }\n}\n\ntype SelectorCondition = Extract<\n  StepCondition,\n  { type: \"inputFilled\" | \"elementPresent\" | \"elementClicked\" | \"elementFocusOut\" }\n>;\n\nfunction getConditionSelectors(condition: SelectorCondition): string[] {\n  return Array.from(\n    new Set(\n      [condition.selector, ...(condition.selectorFallbacks || [])]\n        .filter(Boolean)\n        .map((selector) => normalizeCssSelector(selector)),\n    ),\n  );\n}\n\nfunction resolveConditionElement(condition: SelectorCondition, doc: Document) {\n  return resolveElementFromSelectorBank(\n    doc,\n    getConditionSelectors(condition),\n    condition.selectorFingerprint,\n  );\n}\n\nfunction eventPathContains(event: Event, element: Element) {\n  const eventPath =\n    typeof event.composedPath === \"function\" ? event.composedPath() : ([] as EventTarget[]);\n  if (eventPath.includes(element)) return true;\n\n  const target = event.target;\n  return isElementNode(target) && (element === target || element.contains(target));\n}\n\nfunction matchesConditionTarget(event: Event, condition: SelectorCondition, doc: Document) {\n  const selectors = getConditionSelectors(condition);\n  if (selectors.some((selector) => matchesSelectorTarget(event.target, selector, doc))) return true;\n\n  const element = resolveElementFromSelectorBank(doc, selectors, condition.selectorFingerprint);\n  return element ? eventPathContains(event, element) : false;\n}\n\nexport function checkStepCondition(condition: StepCondition, doc: Document): boolean {\n  switch (condition.type) {\n    case \"inputFilled\": {\n      if (!condition.selector) return false;\n      const el = resolveConditionElement(condition, doc);\n      if (!el) return false;\n      return isElementFilled(el);\n    }\n    case \"elementPresent\": {\n      if (!condition.selector) return false;\n      return resolveConditionElement(condition, doc) !== null;\n    }\n    case \"urlMatches\": {\n      const url = doc.defaultView?.location.href ?? \"\";\n      try {\n        return new RegExp(condition.pattern).test(url);\n      } catch {\n        return url.includes(condition.pattern);\n      }\n    }\n    case \"elementClicked\":\n    case \"elementFocusOut\":\n    case \"customEvent\":\n      return false;\n    default:\n      return false;\n  }\n}\n\nfunction evaluateConditions(\n  waitFor: StepWaitFor,\n  doc: Document,\n  clickedSelectors: Set<string>,\n  focusedOutSelectors: Set<string>,\n  firedEvents: Set<string>,\n): boolean {\n  const results = waitFor.conditions.map((c) => {\n    if (c.type === \"elementClicked\") {\n      return c.selector ? clickedSelectors.has(normalizeCssSelector(c.selector)) : false;\n    }\n    if (c.type === \"elementFocusOut\") {\n      return c.selector ? focusedOutSelectors.has(normalizeCssSelector(c.selector)) : false;\n    }\n    if (c.type === \"customEvent\") return firedEvents.has(c.eventName);\n    return checkStepCondition(c, doc);\n  });\n  return waitFor.logic === \"and\" ? results.every(Boolean) : results.some(Boolean);\n}\n\nfunction isPersistentStateCondition(condition: StepCondition): boolean {\n  return (\n    condition.type === \"inputFilled\" ||\n    condition.type === \"elementPresent\" ||\n    condition.type === \"urlMatches\"\n  );\n}\n\nexport function evaluateStepConditions(\n  conditions: StepCondition[],\n  logic: \"and\" | \"or\",\n  doc: Document,\n): boolean {\n  if (conditions.length === 0) return false;\n  const results = conditions.map((condition) => checkStepCondition(condition, doc));\n  return logic === \"and\" ? results.every(Boolean) : results.some(Boolean);\n}\n\nexport function useStepCondition(\n  waitFor: StepWaitFor | undefined,\n  onConditionMet: () => void,\n  doc?: Document,\n  enabled = true,\n) {\n  const clickedSelectors = useRef(new Set<string>());\n  const focusedOutSelectors = useRef(new Set<string>());\n  const firedEvents = useRef(new Set<string>());\n  const hasFired = useRef(false);\n\n  useEffect(() => {\n    clickedSelectors.current.clear();\n    focusedOutSelectors.current.clear();\n    firedEvents.current.clear();\n    hasFired.current = false;\n  }, [waitFor]);\n\n  useEffect(() => {\n    if (!waitFor || !enabled || waitFor.conditions.length === 0) return;\n\n    const ownerDoc = doc ?? document;\n    const ownerWindow = ownerDoc.defaultView ?? window;\n\n    const tryEvaluate = () => {\n      if (hasFired.current) return;\n      if (\n        evaluateConditions(\n          waitFor,\n          ownerDoc,\n          clickedSelectors.current,\n          focusedOutSelectors.current,\n          firedEvents.current,\n        )\n      ) {\n        hasFired.current = true;\n        onConditionMet();\n      }\n    };\n\n    const inputHandler = () => tryEvaluate();\n\n    const clickHandler = (e: Event) => {\n      const clickConditions = waitFor.conditions.filter(\n        (c): c is Extract<StepCondition, { type: \"elementClicked\" }> => c.type === \"elementClicked\",\n      );\n      for (const cond of clickConditions) {\n        if (cond.selector && matchesConditionTarget(e, cond, ownerDoc)) {\n          clickedSelectors.current.add(normalizeCssSelector(cond.selector));\n        }\n      }\n      tryEvaluate();\n    };\n\n    const blurHandler = (e: Event) => {\n      const focusOutConditions = waitFor.conditions.filter(\n        (c): c is Extract<StepCondition, { type: \"elementFocusOut\" }> =>\n          c.type === \"elementFocusOut\",\n      );\n      for (const cond of focusOutConditions) {\n        if (\n          cond.selector &&\n          (matchesSelectorWithinInteractiveHost(e.target, cond.selector, ownerDoc) ||\n            matchesConditionTarget(e, cond, ownerDoc))\n        ) {\n          focusedOutSelectors.current.add(normalizeCssSelector(cond.selector));\n        }\n      }\n      tryEvaluate();\n    };\n\n    const customEventHandler = (e: Event) => {\n      firedEvents.current.add(e.type);\n      tryEvaluate();\n    };\n\n    const customEventNames = waitFor.conditions\n      .filter((c): c is Extract<StepCondition, { type: \"customEvent\" }> => c.type === \"customEvent\")\n      .map((c) => c.eventName);\n    const disposeObservation = observeAccessibleDom({\n      ownerDocument: ownerDoc,\n      onMutation: tryEvaluate,\n      documentEvents: [\n        { name: \"input\", listener: inputHandler, capture: true },\n        { name: \"change\", listener: inputHandler, capture: true },\n        { name: \"click\", listener: clickHandler, capture: true },\n        { name: \"blur\", listener: blurHandler, capture: true },\n      ],\n      windowEvents: customEventNames.map((name) => ({\n        name,\n        listener: customEventHandler,\n      })),\n    });\n\n    let stateConditionInterval: number | undefined;\n    if (waitFor.conditions.some(isPersistentStateCondition)) {\n      stateConditionInterval = ownerWindow.setInterval(\n        tryEvaluate,\n        STATE_CONDITION_POLL_INTERVAL_MS,\n      );\n    }\n\n    tryEvaluate();\n\n    return () => {\n      disposeObservation();\n      if (stateConditionInterval !== undefined) {\n        ownerWindow.clearInterval(stateConditionInterval);\n      }\n    };\n  }, [waitFor, onConditionMet, doc, enabled]);\n}\n","import {\n  GuideAPI,\n  GuideConfig,\n  GuideState,\n  ButtonWidgetTarget,\n  CloseButtonBehavior,\n  PopoverConfig,\n  StepAnimationDirection,\n  StepConfigurationType,\n  StepInterface,\n  TourInterface,\n  ElementSelectorFingerprint,\n} from \"@userorbit/types\";\nimport {\n  ArrowLeft,\n  ArrowRight,\n  ChevronLeft,\n  ChevronRight,\n  CircleHelp,\n  Info,\n  Lightbulb,\n  Pause,\n  Play,\n  Sparkles,\n  X,\n} from \"lucide-react\";\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { useResolvedThemeMode } from \"../../shared/hooks/use-resolved-theme-mode\";\nimport { resolveEngagementTheme } from \"../../shared/lib/theme\";\nimport { cn } from \"../../shared/lib/utils\";\nimport { UserorbitBranding } from \"../userorbit-footer\";\nimport {\n  getAccessibleIframeDocuments,\n  getElementFrameElements,\n  getElementViewportRect,\n  isValidSelector,\n  normalizeCssSelector,\n  querySelectorSafely,\n  resolveElementFromSelectorBank,\n  resolveTargetFromSelectorBank,\n  scrollElementIntoView,\n  type TargetResolution,\n  type TargetResolutionVia,\n} from \"./selectors\";\nimport { evaluateStepConditions, useStepCondition } from \"./use-step-condition\";\n\nconst ICONS = {\n  ArrowRight: <ArrowRight className=\"size-4\" />,\n  ChevronRight: <ChevronRight className=\"size-4\" />,\n  ArrowLeft: <ArrowLeft className=\"size-4\" />,\n  ChevronLeft: <ChevronLeft className=\"size-4\" />,\n  info: (\n    <svg\n      className=\"h-[12px] w-[12px]\"\n      stroke=\"currentColor\"\n      fill=\"currentColor\"\n      strokeWidth=\"0\"\n      viewBox=\"0 0 16 16\"\n      height=\"200px\"\n      width=\"200px\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path d=\"m9.708 6.075-3.024.379-.108.502.595.108c.387.093.464.232.38.619l-.975 4.577c-.255 1.183.14 1.74 1.067 1.74.72 0 1.554-.332 1.933-.789l.116-.549c-.263.232-.65.325-.905.325-.363 0-.494-.255-.402-.704zm.091-2.755a1.32 1.32 0 1 1-2.64 0 1.32 1.32 0 0 1 2.64 0\"></path>\n    </svg>\n  ),\n  sparkles: <Sparkles className=\"h-[12px] w-[12px]\" />,\n  lightbulb: <Lightbulb className=\"h-[12px] w-[12px]\" />,\n  question: <CircleHelp className=\"h-[12px] w-[12px]\" />,\n};\n\nconst GUIDE_LAYER_Z_INDEX = 2147483647;\n\n// Beacon Component\ninterface BeaconProps {\n  elementRect: DOMRect | null;\n  show: boolean;\n  type?: \"badge\" | \"hotspot\" | \"label\";\n  position?:\n    | \"left\"\n    | \"right\"\n    | \"top\"\n    | \"bottom\"\n    | \"center\"\n    | \"top-left\"\n    | \"top-right\"\n    | \"bottom-left\"\n    | \"bottom-right\"\n    | \"center-left\"\n    | \"center-right\"\n    | \"center-top\"\n    | \"center-bottom\";\n  icon?: string;\n  label?: string;\n  hotspotInset?: number;\n  badgeInset?: number;\n  labelInset?: number;\n  onClick?: () => void;\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n  className?: string;\n  defaultStyles?: React.CSSProperties;\n}\n\nconst Beacon = React.forwardRef<HTMLDivElement, BeaconProps>(function Beacon(\n  {\n    elementRect,\n    show,\n    type = \"hotspot\",\n    position = \"top-right\",\n    icon = \"info\",\n    label,\n    hotspotInset = 0,\n    badgeInset = 0,\n    labelInset = 0,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    defaultStyles,\n    className = \"\",\n  },\n  ref,\n) {\n  if (!show || !elementRect) return null;\n\n  const getInsetForType = (): number => {\n    switch (type) {\n      case \"hotspot\":\n        return hotspotInset;\n      case \"badge\":\n        return badgeInset;\n      case \"label\":\n        return labelInset;\n      default:\n        return 8;\n    }\n  };\n\n  const getPositionStyles = (): React.CSSProperties => {\n    const inset = getInsetForType();\n    const baseStyle: React.CSSProperties = {\n      ...defaultStyles,\n      position: \"fixed\",\n      zIndex: GUIDE_LAYER_Z_INDEX,\n    };\n\n    switch (position) {\n      case \"top\":\n        return {\n          ...baseStyle,\n          top: elementRect.top - inset,\n          left: elementRect.left + elementRect.width / 2,\n          transform: \"translate(-50%, -100%)\",\n        };\n      case \"bottom\":\n        return {\n          ...baseStyle,\n          top: elementRect.bottom + inset,\n          left: elementRect.left + elementRect.width / 2,\n          transform: \"translate(-50%, 0)\",\n        };\n      case \"left\":\n        return {\n          ...baseStyle,\n          top: elementRect.top + elementRect.height / 2,\n          left: elementRect.left - inset,\n          transform: \"translate(-100%, -50%)\",\n        };\n      case \"right\":\n        return {\n          ...baseStyle,\n          top: elementRect.top + elementRect.height / 2,\n          left: elementRect.right + inset,\n          transform: \"translate(0, -50%)\",\n        };\n      case \"center\":\n        return {\n          ...baseStyle,\n          top: elementRect.top + elementRect.height / 2,\n          left: elementRect.left + elementRect.width / 2,\n          transform: \"translate(-50%, -50%)\",\n        };\n      case \"top-left\":\n        return {\n          ...baseStyle,\n          top: elementRect.top - inset,\n          left: elementRect.left - inset,\n          transform: \"translate(-100%, -100%)\",\n        };\n      case \"top-right\":\n        return {\n          ...baseStyle,\n          top: elementRect.top - inset,\n          left: elementRect.right + inset,\n          transform: \"translate(0, -100%)\",\n        };\n      case \"bottom-left\":\n        return {\n          ...baseStyle,\n          top: elementRect.bottom + inset,\n          left: elementRect.left - inset,\n          transform: \"translate(-100%, 0)\",\n        };\n      case \"bottom-right\":\n        return {\n          ...baseStyle,\n          top: elementRect.bottom + inset,\n          left: elementRect.right + inset,\n          transform: \"translate(0, 0)\",\n        };\n      case \"center-left\":\n        return {\n          ...baseStyle,\n          top: elementRect.top + elementRect.height / 2,\n          left: elementRect.left - inset,\n          transform: \"translate(-100%, -50%)\",\n        };\n      case \"center-right\":\n        return {\n          ...baseStyle,\n          top: elementRect.top + elementRect.height / 2,\n          transform: \"translate(0, -50%)\",\n          left: elementRect.right + inset,\n        };\n      case \"center-top\":\n        return {\n          ...baseStyle,\n          top: elementRect.top - inset,\n          left: elementRect.left + elementRect.width / 2,\n          transform: \"translate(-50%, -100%)\",\n        };\n      case \"center-bottom\":\n        return {\n          ...baseStyle,\n          top: elementRect.bottom + inset,\n          left: elementRect.left + elementRect.width / 2,\n          transform: \"translate(-50%, 0)\",\n        };\n      default:\n        return {\n          ...baseStyle,\n          top: elementRect.top - inset,\n          left: elementRect.right + inset,\n          transform: \"translate(0, -100%)\",\n        };\n    }\n  };\n\n  const getBeaconContent = () => {\n    switch (type) {\n      case \"badge\":\n        return (\n          <div className=\"guide-beacon-badge flex h-[var(--badge-size)] w-[var(--badge-size)] items-center justify-center rounded-[var(--badge-radius)] bg-[var(--badge-bg)] text-[var(--badge-text)] shadow-lg [&>svg]:h-[calc(var(--badge-size)*0.67)] [&>svg]:w-[calc(var(--badge-size)*0.67)]\">\n            {ICONS[icon as keyof typeof ICONS] || <Info className=\"h-[14px] w-[14px]\" />}\n          </div>\n        );\n      case \"hotspot\":\n        return (\n          <div className=\"guide-beacon-hotspot relative\">\n            <div className=\"animate-beaconPing absolute -left-[6px] -top-[6px] h-[24px] w-[24px] animate-ping rounded-full bg-[var(--beacon-bg)] opacity-75\" />\n            <div className=\"relative h-[12px] w-[12px] rounded-full bg-[var(--beacon-bg)] p-1\" />\n          </div>\n        );\n      case \"label\":\n        return (\n          <div className=\"guide-beacon-label rounded-[var(--badge-radius)] bg-[var(--badge-bg)] p-[0_5px] text-xs text-[var(--badge-text)] shadow-lg\">\n            {label || \"New\"}\n          </div>\n        );\n      default:\n        return null;\n    }\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\"guide-beacon\", className)}\n      style={getPositionStyles()}\n      {...GUIDE_SURFACE_EVENT_HANDLERS}\n      onClick={(event) => {\n        stopGuideSurfacePropagation(event);\n        onClick?.();\n      }}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n    >\n      {getBeaconContent()}\n    </div>\n  );\n});\n\n// // Step definition\n// export interface GuideStep {\n//   id: string | number;\n//   // element?: string | Element | (() => Element); // Keep flexibility\n//   pivotSelector?: string;\n//   order?: number;\n//   description?: React.ReactNode | string;\n//   progression?: \"elementClick\" | \"elementHover\" | \"elementFocus\" | \"progressButton\";\n//   onHighlightStarted?: GuideHook<[Element | undefined, GuideStep, GuideAPI]>;\n//   onHighlighted?: GuideHook<[Element | undefined, GuideStep, GuideAPI]>;\n//   onDeselected?: GuideHook<[Element | undefined, GuideStep, GuideAPI]>;\n//   popover?: PopoverConfig;\n//   disableActiveInteraction?: boolean; // Keep this option\n//   proceedOnHighlightedElementClick?: boolean;\n//   configuration?: StepConfigurationType;\n// }\n\n// Props for the main <Guide /> component\nexport interface GuideProps extends GuideConfig {\n  steps: StepInterface[]; // Make steps mandatory here\n  progressSteps?: StepInterface[];\n  isActive?: boolean;\n  isEditing?: boolean;\n  ignoreWaitForCondition?: boolean;\n  ignoreAutoProceed?: boolean;\n  editor?: React.ReactNode;\n  tour?: TourInterface;\n  startIndex?: number;\n  onDismiss?: (stepId?: string) => void;\n  onSnooze?: (stepId?: string) => void;\n  onStop?: (stepId?: string) => void; // Callback when guide stops\n  onNext?: (stepId?: string) => void; // Callback when guide stops\n  rootElement?: HTMLElement;\n  onGenerateVoiceOver?: (step: StepInterface) => Promise<string | undefined>;\n  ignoreAncestorAriaHiddenTargets?: boolean;\n  onTargetResolution?: (report: StepTargetResolutionReport) => void;\n}\n\nexport type StepTargetResolutionReport = {\n  stepId: StepInterface[\"id\"];\n  status: \"resolved\" | \"failed\" | \"lost\" | \"recovered\" | \"skipped\" | \"interrupted\";\n  phase?: \"initial\" | \"detached\";\n  via?: TargetResolutionVia;\n  matchedSelector?: string | null;\n  willRetry?: boolean;\n};\n\nconst DEFAULT_TARGET_WAIT_TIMEOUT_MS = 3000;\nconst MISSING_TARGET_RECOVERY_WINDOW_MS = 7000;\nconst TARGET_POLL_INTERVAL_MS = 50;\nconst TARGETED_STEP_ENTRY_DELAY_MS = 200;\nconst POINTERDOWN_ADVANCE_FALLBACK_MS = 150;\ntype TargetMissingPhase = \"initial\" | \"detached\";\n\ntype FindElementOptions = {\n  signal?: AbortSignal;\n  timeoutMs?: number;\n  onTimeout?: (selectors: string[]) => void;\n  onResolution?: (resolution: TargetResolution) => void;\n  fingerprint?: ElementSelectorFingerprint | null;\n  elementTargeting?: StepInterface[\"configuration\"][\"elementTargeting\"] | null;\n  ignoreAncestorAriaHidden?: boolean;\n  manualSelector?: string | null;\n};\n\nfunction queryDirectSelector(ownerDoc: Document, selector: string) {\n  return querySelectorSafely(ownerDoc, selector);\n}\n\nexport async function findElement(\n  selector: string | string[] | Element | (() => Element) | undefined,\n  ownerDoc: Document = document,\n  options: FindElementOptions = {},\n): Promise<Element | null> {\n  if (!selector && !options.fingerprint) return null;\n\n  const timeoutMs = options.timeoutMs ?? DEFAULT_TARGET_WAIT_TIMEOUT_MS;\n\n  const resolveTarget = (selectors: string[]) => {\n    if (!shouldUseTargetResolver(options) && selectors.length > 0) {\n      return (\n        selectors.map((candidate) => queryDirectSelector(ownerDoc, candidate)).find(Boolean) ?? null\n      );\n    }\n\n    const resolution = resolveTargetFromSelectorBank(ownerDoc, selectors, options.fingerprint, {\n      elementTargeting: options.elementTargeting,\n      ignoreAncestorAriaHidden: options.ignoreAncestorAriaHidden,\n      manualSelector: options.manualSelector,\n    });\n    if (resolution) options.onResolution?.(resolution);\n    return resolution?.element ?? null;\n  };\n\n  const waitForSelectors = (selectors: string[]) => {\n    const startTime = Date.now();\n    let didNotifyTimeout = false;\n\n    return new Promise<Element | null>((resolve) => {\n      const checkElement = () => {\n        if (options.signal?.aborted) {\n          resolve(null);\n          return;\n        }\n\n        const element = resolveTarget(selectors);\n        if (element) {\n          resolve(element);\n          return;\n        }\n\n        if (!didNotifyTimeout && Date.now() - startTime >= timeoutMs) {\n          didNotifyTimeout = true;\n          options.onTimeout?.(selectors.length > 0 ? selectors : [\"saved element fingerprint\"]);\n          resolve(null);\n          return;\n        }\n\n        setTimeout(checkElement, TARGET_POLL_INTERVAL_MS);\n      };\n\n      checkElement();\n    });\n  };\n\n  if (Array.isArray(selector)) {\n    const selectors = selector\n      .filter(Boolean)\n      .map((candidate) => normalizeCssSelector(candidate))\n      .filter((candidate) => isValidSelector(ownerDoc, candidate));\n    if (selectors.length === 0 && !options.fingerprint) return null;\n\n    const element = resolveTarget(selectors);\n    if (element) return element;\n\n    return waitForSelectors(selectors);\n  }\n\n  if (!selector && options.fingerprint) {\n    return waitForSelectors([]);\n  }\n\n  const ownerElement =\n    ownerDoc.defaultView?.Element ?? (typeof Element === \"undefined\" ? undefined : Element);\n\n  // If selector is already an Element, return it immediately\n  if (ownerElement && selector instanceof ownerElement) return selector;\n\n  // If selector is a function, try to execute it immediately\n  if (typeof selector === \"function\") {\n    try {\n      const element = selector();\n      return ownerElement && element instanceof ownerElement ? element : null;\n    } catch (e) {\n      console.error(`Guide: Function selector threw an error`, e);\n      return null;\n    }\n  }\n\n  // For string selectors, implement retry mechanism\n  if (typeof selector === \"string\") {\n    const normalizedSelector = normalizeCssSelector(selector);\n    if (!isValidSelector(ownerDoc, normalizedSelector)) {\n      return options.fingerprint ? waitForSelectors([]) : null;\n    }\n\n    // First try immediately\n    const element = resolveTarget([normalizedSelector]);\n    if (element) return element;\n\n    // If not found immediately, keep polling. Valid selectors may resolve after\n    // the host app finishes rendering or after navigation changes the DOM.\n    return waitForSelectors([normalizedSelector]);\n  }\n\n  return null;\n}\n\nfunction shouldUseTargetResolver(options: FindElementOptions) {\n  const elementTargeting = options.elementTargeting;\n  const text = elementTargeting?.text;\n  const strategy = elementTargeting?.multipleMatches?.strategy;\n  return Boolean(\n    options.fingerprint ||\n    (text?.value && !text.dynamic) ||\n    (strategy && strategy !== \"best\") ||\n    (elementTargeting?.strictness && elementTargeting.strictness !== \"legacy\"),\n  );\n}\n\nfunction getStepTargetSelectors(step?: StepInterface | null) {\n  if (!step) return [];\n\n  const generatedSelectors = [\n    step.pivotSelector,\n    ...(Array.isArray(step.configuration?.pivotSelectorFallbacks)\n      ? step.configuration.pivotSelectorFallbacks\n      : []),\n  ].filter(Boolean) as string[];\n  const manualSelector = step.configuration?.customPivotSelector;\n  const selectors =\n    step.configuration?.elementTargeting?.precedence === \"manual\"\n      ? [manualSelector, ...generatedSelectors].filter(Boolean)\n      : [step.pivotSelector, manualSelector, ...generatedSelectors.slice(1)].filter(Boolean);\n\n  return Array.from(new Set(selectors.map((selector) => normalizeCssSelector(selector))));\n}\n\nfunction getStepManualSelector(step?: StepInterface | null) {\n  const manualSelector = step?.configuration?.customPivotSelector?.trim();\n  return manualSelector ? normalizeCssSelector(manualSelector) : null;\n}\n\nfunction getStepTargetFingerprint(step?: StepInterface | null) {\n  return step?.configuration?.pivotSelectorFingerprint ?? null;\n}\n\nfunction getStepElementTargeting(step?: StepInterface | null) {\n  return step?.configuration?.elementTargeting ?? null;\n}\n\nexport function eventHitsTargetElement(event: Event, targetElement: Element): boolean {\n  const eventPath =\n    typeof event.composedPath === \"function\" ? event.composedPath() : ([] as EventTarget[]);\n  if (eventPath.includes(targetElement)) {\n    return true;\n  }\n\n  const eventTarget = event.target;\n  return isElementNode(eventTarget) && targetElement.contains(eventTarget);\n}\n\nfunction isElementNode(value: EventTarget | null): value is Element {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    \"nodeType\" in value &&\n    (value as Node).nodeType === 1 &&\n    \"ownerDocument\" in value\n  );\n}\n\nfunction isElementInDocumentTree(element: Element, rootDoc: Document) {\n  if (!element.isConnected) return false;\n  if (rootDoc.contains(element)) return true;\n\n  let currentWindow = element.ownerDocument.defaultView;\n  while (currentWindow?.frameElement) {\n    const frameElement = currentWindow.frameElement;\n    if (frameElement.ownerDocument === rootDoc) {\n      return rootDoc.contains(frameElement);\n    }\n    currentWindow = frameElement.ownerDocument.defaultView;\n  }\n\n  return false;\n}\n\nfunction isHTMLElementForOwnerDocument(element: Element): element is HTMLElement {\n  const HTMLElementConstructor = element.ownerDocument.defaultView?.HTMLElement;\n  return HTMLElementConstructor\n    ? element instanceof HTMLElementConstructor\n    : element instanceof HTMLElement;\n}\n\nfunction getNavigationElement(element: Element): HTMLAnchorElement | null {\n  const anchor = element.closest?.(\"a[href]\");\n  if (!anchor) return null;\n\n  const HTMLAnchorElementConstructor = anchor.ownerDocument.defaultView?.HTMLAnchorElement;\n  if (HTMLAnchorElementConstructor) {\n    return anchor instanceof HTMLAnchorElementConstructor ? anchor : null;\n  }\n\n  return anchor instanceof HTMLAnchorElement ? anchor : null;\n}\n\nfunction isElementInsideRootElement(element: Element, rootElement?: HTMLElement) {\n  if (!rootElement || element.ownerDocument !== rootElement.ownerDocument) return false;\n  return element === rootElement || rootElement.contains(element);\n}\n\nfunction eventHitsGuidePopover(event: Event): boolean {\n  const eventPath =\n    typeof event.composedPath === \"function\" ? event.composedPath() : ([] as EventTarget[]);\n  if (\n    eventPath.some((target) => isElementNode(target) && target.classList.contains(\"guide-popover\"))\n  ) {\n    return true;\n  }\n\n  const eventTarget = event.target;\n  return isElementNode(eventTarget) && !!eventTarget.closest(\".guide-popover\");\n}\n\nfunction stopGuideSurfacePropagation(event: React.SyntheticEvent) {\n  event.stopPropagation();\n}\n\nconst GUIDE_SURFACE_EVENT_HANDLERS = {\n  onPointerDown: stopGuideSurfacePropagation,\n  onPointerUp: stopGuideSurfacePropagation,\n  onMouseDown: stopGuideSurfacePropagation,\n  onMouseUp: stopGuideSurfacePropagation,\n  onTouchStart: stopGuideSurfacePropagation,\n  onTouchEnd: stopGuideSurfacePropagation,\n  onDoubleClick: stopGuideSurfacePropagation,\n  onContextMenu: stopGuideSurfacePropagation,\n  onClick: stopGuideSurfacePropagation,\n};\n\ntype SuppressedActivationClick = {\n  target: EventTarget | null;\n  timeStamp: number;\n};\n\nfunction isSuppressedActivationClick(\n  event: Event,\n  suppressedClick: SuppressedActivationClick | null,\n) {\n  if (event.type !== \"click\" || !suppressedClick) {\n    return false;\n  }\n\n  const elapsedMs = event.timeStamp - suppressedClick.timeStamp;\n  if (elapsedMs < 0 || elapsedMs > 1000) {\n    return false;\n  }\n\n  if (!suppressedClick.target) {\n    return true;\n  }\n\n  const eventPath =\n    typeof event.composedPath === \"function\" ? event.composedPath() : ([] as EventTarget[]);\n  if (eventPath.includes(suppressedClick.target)) {\n    return true;\n  }\n\n  return event.target === suppressedClick.target;\n}\n\nfunction getElementOwnerDocuments(element: Element, rootDoc: Document) {\n  const documents = new Set<Document>([element.ownerDocument, rootDoc]);\n  getElementFrameElements(element, rootDoc).forEach((frameElement) => {\n    documents.add(frameElement.ownerDocument);\n  });\n  return Array.from(documents);\n}\n\nfunction getElementOwnerWindows(element: Element, rootDoc: Document) {\n  return getElementOwnerDocuments(element, rootDoc).flatMap((ownerDoc) => {\n    const ownerWindow = ownerDoc.defaultView;\n    return ownerWindow ? [ownerWindow] : [];\n  });\n}\n\nfunction getResizeObserverElements(element: Element, rootDoc: Document) {\n  return [element, ...getElementFrameElements(element, rootDoc)];\n}\n\nfunction getScrollUpdateTargets(element: Element, rootDoc: Document): EventTarget[] {\n  const targets = new Set<EventTarget>();\n  const scrollablePattern = /(auto|scroll|overlay)/;\n\n  const addDocumentTargets = (ownerDoc: Document) => {\n    const win = ownerDoc.defaultView;\n    if (win) targets.add(win);\n    targets.add(ownerDoc);\n    if (ownerDoc.scrollingElement) targets.add(ownerDoc.scrollingElement);\n  };\n\n  const addScrollableAncestors = (startElement: Element) => {\n    const ownerDoc = startElement.ownerDocument;\n    const win = ownerDoc.defaultView ?? window;\n    let current: Element | null = startElement.parentElement;\n\n    while (current) {\n      const style = win.getComputedStyle(current);\n      if (scrollablePattern.test(`${style.overflow}${style.overflowX}${style.overflowY}`)) {\n        targets.add(current);\n      }\n\n      if (current === ownerDoc.body || current === ownerDoc.documentElement) {\n        break;\n      }\n\n      current = current.parentElement;\n    }\n  };\n\n  addDocumentTargets(element.ownerDocument);\n  addScrollableAncestors(element);\n\n  getElementFrameElements(element, rootDoc).forEach((frameElement) => {\n    targets.add(frameElement);\n    addDocumentTargets(frameElement.ownerDocument);\n    addScrollableAncestors(frameElement);\n  });\n\n  addDocumentTargets(rootDoc);\n\n  return Array.from(targets);\n}\n\nfunction hasRoundedRectChanged(previous: DOMRect | null, next: DOMRect): boolean {\n  return (\n    !previous ||\n    Math.round(previous.top) !== Math.round(next.top) ||\n    Math.round(previous.left) !== Math.round(next.left) ||\n    Math.round(previous.width) !== Math.round(next.width) ||\n    Math.round(previous.height) !== Math.round(next.height)\n  );\n}\n\nfunction getStepHasTarget(step?: StepInterface | null) {\n  return getStepTargetSelectors(step).length > 0 || !!getStepTargetFingerprint(step);\n}\n\nfunction canShowPopoverArrowForStepType(type?: StepConfigurationType[\"type\"] | \"tooltip\") {\n  return type === \"pointer\" || type === \"tooltip\";\n}\n\nfunction createGuideRect(\n  x: number,\n  y: number,\n  width: number,\n  height: number,\n  win: Window = window,\n): DOMRect {\n  const DOMRectConstructor =\n    (win as Window & { DOMRect?: typeof DOMRect }).DOMRect ?? globalThis.DOMRect;\n\n  if (typeof DOMRectConstructor === \"function\") {\n    return new DOMRectConstructor(x, y, width, height);\n  }\n\n  return {\n    x,\n    y,\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    toJSON: () => ({}),\n  } as DOMRect;\n}\n\nconst MOVING_TARGET_WATCH_MAX_MS = 1500;\nconst MOVING_TARGET_STABLE_FRAMES = 4;\n\nfunction parseCssTimeValue(value: string): number {\n  const trimmed = value.trim();\n  if (!trimmed) return 0;\n  const amount = Number.parseFloat(trimmed);\n  if (!Number.isFinite(amount)) return 0;\n  return trimmed.endsWith(\"ms\") ? amount : amount * 1000;\n}\n\nfunction parseCssTimeList(value: string): number[] {\n  return value.split(\",\").map(parseCssTimeValue);\n}\n\nfunction getMaxCssMotionTimeMs(element: Element, win: Window): number {\n  const style = win.getComputedStyle(element);\n  const transitionDurations = parseCssTimeList(style.transitionDuration);\n  const transitionDelays = parseCssTimeList(style.transitionDelay);\n  const animationDurations = parseCssTimeList(style.animationDuration);\n  const animationDelays = parseCssTimeList(style.animationDelay);\n  const maxTime = Math.max(\n    ...transitionDurations.map((duration, index) => duration + (transitionDelays[index] ?? 0)),\n    ...animationDurations.map((duration, index) => duration + (animationDelays[index] ?? 0)),\n    0,\n  );\n\n  return Math.min(Math.max(maxTime, 250), MOVING_TARGET_WATCH_MAX_MS);\n}\n\nfunction eventMayMoveTarget(event: Event, targetElement: Element): boolean {\n  if (!isElementNode(event.target)) return false;\n  return event.target === targetElement || event.target.contains(targetElement);\n}\n\n// --- SVG Path Helper ---\n// Function to generate the SVG path string for the overlay cutout\nfunction generateStageSvgPathString(\n  stage: DOMRect | null,\n  padding = 0,\n  radius = 0,\n  win: Window = window,\n): string {\n  const windowX = win.innerWidth;\n  const windowY = win.innerHeight;\n\n  // If no element, just draw the full overlay covering the viewport\n  if (!stage) {\n    return `M0,0 H${windowX} V${windowY} H0 Z`; // Ensure Z is uppercase for close path\n  }\n\n  const stagePadding = padding;\n  const stageRadius = radius;\n\n  const stageWidth = stage.width + stagePadding * 2;\n  const stageHeight = stage.height + stagePadding * 2;\n\n  // Prevent glitches when stage is too small for radius\n  const limitedRadius = Math.min(stageRadius, stageWidth / 2, stageHeight / 2);\n\n  // No value below 0 allowed + round down\n  const normalizedRadius = Math.floor(Math.max(limitedRadius, 0));\n\n  // Use viewport coordinates from elementRect\n  const boxX = stage.x - stagePadding;\n  const boxY = stage.y - stagePadding;\n  const boxWidth = stageWidth;\n  const boxHeight = stageHeight;\n\n  // Check for invalid dimensions\n  if (boxWidth <= 0 || boxHeight <= 0) {\n    console.warn(\n      \"Guide: Element dimensions result in zero or negative size after padding. Drawing full overlay.\",\n    );\n    return `M0,0 H${windowX} V${windowY} H0 Z`; // Ensure Z is uppercase\n  }\n\n  // Adjusted coordinates for the arc commands relative to the box top-left\n  const highlightBoxX = boxX + normalizedRadius;\n  const highlightBoxY = boxY;\n  const highlightBoxWidth = boxWidth - normalizedRadius * 2;\n  const highlightBoxHeight = boxHeight - normalizedRadius * 2;\n\n  // Check for invalid dimensions for arcs\n  if (highlightBoxWidth < 0 || highlightBoxHeight < 0) {\n    console.warn(\n      \"Guide: Element dimensions too small for radius after padding. Drawing rectangular cutout.\",\n    );\n    // Fallback to rectangular cutout if arcs are not possible\n    // Ensure Z is uppercase\n    return `M0,0 H${windowX} V${windowY} H0 Z M${boxX},${boxY} V${boxY + boxHeight} H${\n      boxX + boxWidth\n    } V${boxY} H${boxX} Z`;\n  }\n\n  // Path for the outer box covering the viewport (clockwise)\n  // Ensure Z is uppercase\n  const viewportPath = `M${windowX},0 L0,0 L0,${windowY} L${windowX},${windowY} L${windowX},0 Z`;\n\n  // Path for the inner cutout (clockwise definition, fill-rule handles the hole)\n  // Using a multi-line template literal for readability and ensuring valid commands/syntax\n  const cutoutPath =\n    `M ${highlightBoxX},${highlightBoxY} ` + // Move to top edge start (after radius)\n    `h ${highlightBoxWidth} ` + // Horizontal line (top edge)\n    `a ${normalizedRadius},${normalizedRadius} 0 0 1 ${normalizedRadius},${normalizedRadius} ` + // Top-right arc\n    `v ${highlightBoxHeight} ` + // Vertical line (right edge)\n    `a ${normalizedRadius},${normalizedRadius} 0 0 1 -${normalizedRadius},${normalizedRadius} ` + // Bottom-right arc\n    `h -${highlightBoxWidth} ` + // Horizontal line (bottom edge)\n    `a ${normalizedRadius},${normalizedRadius} 0 0 1 -${normalizedRadius},-${normalizedRadius} ` + // Bottom-left arc\n    `v -${highlightBoxHeight} ` + // Vertical line (left edge)\n    `a ${normalizedRadius},${normalizedRadius} 0 0 1 ${normalizedRadius},-${normalizedRadius} ` + // Top-left arc\n    `z`; // Close path (lowercase z is standard and correct here)\n\n  // Combine both paths, ensuring a space between them\n  return `${viewportPath} ${cutoutPath}`;\n}\n\n// --- UI Components ---\n\n// Overlay Component (SVG Implementation)\ninterface OverlayProps {\n  elementRect: DOMRect | null;\n  onClick?: () => void;\n  className?: string;\n  background?: string;\n  show: boolean;\n  color?: string;\n  opacity?: number;\n  stagePadding?: number;\n  stageRadius?: number;\n  animate?: boolean; // For potential transitions on the path\n  isExitAnimating?: boolean;\n  animationSpeed?: number;\n  rootElement?: HTMLElement;\n  borderColor?: string;\n  borderWidth?: number;\n}\n\nfunction Overlay({\n  elementRect,\n  onClick,\n  className = \"\",\n  show,\n  background,\n  color = \"rgb(117, 117, 117)\", // Default color\n  opacity = 0.28, // Default opacity\n  stagePadding = 0,\n  stageRadius = 0,\n  animate = true, // Use animation by default\n  isExitAnimating = false,\n  animationSpeed = 300,\n  borderColor = \"rgba(0,0,0,0)\",\n  borderWidth = 1,\n  rootElement,\n}: OverlayProps) {\n  const win = rootElement?.ownerDocument?.defaultView ?? window;\n  const previousElementRectRef = useRef<DOMRect | null>(elementRect);\n\n  // Use state to manage the path 'd' attribute for potential animation\n  const [pathD, setPathD] = useState(() =>\n    generateStageSvgPathString(elementRect, stagePadding, stageRadius, win),\n  );\n\n  // Update pathD when elementRect, padding, or radius changes\n  useEffect(() => {\n    const previousRect = previousElementRectRef.current;\n    previousElementRectRef.current = elementRect;\n\n    if (!animate || !previousRect || !elementRect) {\n      const newPathD = generateStageSvgPathString(elementRect, stagePadding, stageRadius, win);\n      setPathD((prevPathD) => (prevPathD === newPathD ? prevPathD : newPathD));\n      return;\n    }\n\n    const durationMs = animationSpeed;\n    const startTime = win.performance.now();\n    let frameId = 0;\n\n    const interpolateRect = (progress: number) => {\n      const easedProgress = 1 - Math.pow(1 - progress, 3);\n      return createGuideRect(\n        previousRect.x + (elementRect.x - previousRect.x) * easedProgress,\n        previousRect.y + (elementRect.y - previousRect.y) * easedProgress,\n        previousRect.width + (elementRect.width - previousRect.width) * easedProgress,\n        previousRect.height + (elementRect.height - previousRect.height) * easedProgress,\n        win,\n      );\n    };\n\n    const updatePath = () => {\n      const elapsed = win.performance.now() - startTime;\n      const progress = Math.min(1, elapsed / durationMs);\n      const interpolatedRect = interpolateRect(progress);\n\n      setPathD(generateStageSvgPathString(interpolatedRect, stagePadding, stageRadius, win));\n\n      if (progress < 1) {\n        frameId = win.requestAnimationFrame(updatePath);\n      }\n    };\n\n    frameId = win.requestAnimationFrame(updatePath);\n\n    return () => win.cancelAnimationFrame(frameId);\n  }, [elementRect, stagePadding, stageRadius, animate, animationSpeed, win]);\n\n  if (!show && !isExitAnimating) return null;\n\n  const svgStyle: React.CSSProperties = {\n    position: \"fixed\", // Use fixed position to cover viewport\n    top: 0,\n    left: 0,\n    width: \"100%\",\n    height: \"100%\",\n    zIndex: GUIDE_LAYER_Z_INDEX,\n    pointerEvents: \"none\", // Allow clicks to pass through SVG container\n    opacity: show ? 1 : 0,\n    transition: animate ? `opacity ${animationSpeed}ms ease` : \"none\",\n    ...(background ? { background } : {}),\n  };\n\n  const pathStyle: React.CSSProperties = {\n    fill: color,\n    opacity: opacity,\n    fillRule: \"evenodd\", // Key for cutout effect\n    pointerEvents: onClick ? \"auto\" : \"none\",\n    // Keep transition for opacity, remove it for 'd'\n    transition: animate ? `opacity ${animationSpeed}ms ease` : \"none\",\n    stroke: borderColor,\n    strokeWidth: borderWidth,\n  };\n\n  // Recalculate viewBox on render to match current window size\n  const windowX = win.innerWidth;\n  const windowY = win.innerHeight;\n\n  return (\n    <svg\n      className={\"guide-overlay \" + className}\n      style={svgStyle}\n      viewBox={\"0 0 \" + windowX + \" \" + windowY}\n      {...GUIDE_SURFACE_EVENT_HANDLERS}\n      // Attributes similar to overlay.ts\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlSpace=\"preserve\"\n      version=\"1.1\"\n      preserveAspectRatio=\"xMinYMin slice\"\n    >\n      <path\n        d={pathD}\n        style={pathStyle}\n        // Remove onClick handler from path as pointerEvents is now 'none'\n        onClick={(e) => {\n          // Ensure the click is directly on the path (overlay) and not propagated from children/cutout area\n          if (e.target === e.currentTarget && onClick) {\n            onClick();\n          }\n        }}\n      />\n    </svg>\n  );\n}\n\nconst ARROW_SIZE = 8; // Size of the arrow in pixels\nconst ARROW_OFFSET = 16; // Offset from the edge\nconst TOTAL_GAP = ARROW_SIZE * 2; // Keep the arrow tip flush with the target boundary.\n\n// Add arrow position calculation helper\nfunction calculateArrowPosition(\n  popoverRect: DOMRect,\n  elementRect: DOMRect | null,\n  popoverStyle: React.CSSProperties,\n  side: BasePopoverSide = \"bottom\",\n  arrowSize: number = ARROW_SIZE,\n): React.CSSProperties {\n  if (!elementRect) {\n    return { display: \"none\" };\n  }\n\n  const resolvedArrowSize = Number.isFinite(arrowSize) && arrowSize > 0 ? arrowSize : ARROW_SIZE;\n  const baseStyle: React.CSSProperties = {\n    position: \"absolute\",\n    width: 0,\n    height: 0,\n    borderWidth: `${resolvedArrowSize}px`,\n    borderStyle: \"solid\",\n    borderTopColor: \"transparent\",\n    borderRightColor: \"transparent\",\n    borderBottomColor: \"transparent\",\n    borderLeftColor: \"transparent\",\n  };\n\n  switch (side) {\n    case \"top\":\n      return {\n        ...baseStyle,\n        bottom: -resolvedArrowSize * 2,\n        borderTopColor: \"var(--background-color)\", // Match your popover background\n        left: calculateHorizontalArrowPosition(\n          popoverRect,\n          elementRect,\n          popoverStyle,\n          resolvedArrowSize,\n        ),\n      };\n    case \"bottom\":\n      return {\n        ...baseStyle,\n        top: -resolvedArrowSize * 2,\n        borderBottomColor: \"var(--background-color)\",\n        left: calculateHorizontalArrowPosition(\n          popoverRect,\n          elementRect,\n          popoverStyle,\n          resolvedArrowSize,\n        ),\n      };\n    case \"left\":\n      return {\n        ...baseStyle,\n        right: -resolvedArrowSize * 2,\n        borderLeftColor: \"var(--background-color)\",\n        top: calculateVerticalArrowPosition(\n          popoverRect,\n          elementRect,\n          popoverStyle,\n          resolvedArrowSize,\n        ),\n      };\n    case \"right\":\n      return {\n        ...baseStyle,\n        left: -resolvedArrowSize * 2,\n        borderRightColor: \"var(--background-color)\",\n        top: calculateVerticalArrowPosition(\n          popoverRect,\n          elementRect,\n          popoverStyle,\n          resolvedArrowSize,\n        ),\n      };\n    default:\n      return { display: \"none\" };\n  }\n}\n\nfunction getRenderedPopoverCoordinate(\n  coordinate: React.CSSProperties[\"left\"] | React.CSSProperties[\"top\"],\n  fallback: number,\n): number {\n  const parsedCoordinate =\n    typeof coordinate === \"number\"\n      ? coordinate\n      : typeof coordinate === \"string\"\n        ? Number.parseFloat(coordinate)\n        : Number.NaN;\n\n  return Number.isFinite(parsedCoordinate) ? parsedCoordinate : fallback;\n}\n\nfunction clampArrowPosition(position: number, popoverSize: number, arrowSize: number): string {\n  const minPosition = Math.min(ARROW_OFFSET, Math.max(0, (popoverSize - arrowSize * 2) / 2));\n  const maxPosition = Math.max(minPosition, popoverSize - ARROW_OFFSET - arrowSize * 2);\n\n  return `${Math.min(Math.max(position, minPosition), maxPosition)}px`;\n}\n\nfunction calculateHorizontalArrowPosition(\n  popoverRect: DOMRect,\n  elementRect: DOMRect,\n  popoverStyle: React.CSSProperties,\n  arrowSize: number = ARROW_SIZE,\n): string {\n  const popoverLeft = getRenderedPopoverCoordinate(popoverStyle.left, popoverRect.left);\n  const targetCenter = elementRect.left + elementRect.width / 2;\n\n  return clampArrowPosition(targetCenter - popoverLeft - arrowSize, popoverRect.width, arrowSize);\n}\n\nfunction calculateVerticalArrowPosition(\n  popoverRect: DOMRect,\n  elementRect: DOMRect,\n  popoverStyle: React.CSSProperties,\n  arrowSize: number = ARROW_SIZE,\n): string {\n  const popoverTop = getRenderedPopoverCoordinate(popoverStyle.top, popoverRect.top);\n  const targetCenter = elementRect.top + elementRect.height / 2;\n\n  return clampArrowPosition(targetCenter - popoverTop - arrowSize, popoverRect.height, arrowSize);\n}\n\ntype CloseActionSource = \"dismissControl\" | \"authoredAction\";\n\ninterface PopoverProps {\n  config: PopoverConfig;\n  tour?: TourInterface;\n  step?: StepInterface;\n  isEditing?: boolean;\n  isWaitingForCondition?: boolean;\n  ignoreAutoProceed?: boolean;\n  editor?: React.ReactNode;\n  onDismiss?: (stepId?: string) => void;\n  onSnooze?: (stepId?: string) => void;\n  elementRect: DOMRect | null;\n  show: boolean;\n  isFirstStep: boolean;\n  isLastStep: boolean;\n  currentStepIndex: number;\n  totalSteps: number;\n  progressStepIndex?: number;\n  progressTotalSteps?: number;\n  nextBtnText?: string;\n  prevBtnText?: string;\n  doneBtnText?: string;\n  closeBtnText?: string;\n  progressText?: string;\n  onNext: (stepId?: string) => void;\n  onPrev: (stepId?: string) => void;\n  onClose: (stepId?: string, behavior?: CloseButtonBehavior, source?: CloseActionSource) => void;\n  onOpenWidget?: (target: ButtonWidgetTarget) => void;\n  onTrackEvent?: (eventName: string) => void;\n  className?: string;\n  animate: boolean;\n  hideButtonsForProceed?: boolean;\n  referenceElement?: Element | null;\n  rootElement?: HTMLElement;\n  isTransitioning?: boolean;\n  isExitAnimating?: boolean;\n  mergedTheme?: StepConfigurationType[\"theme\"];\n  animationDirection: StepAnimationDirection;\n  animationSpeed: number;\n  stagePadding?: number;\n  voiceOverControl?: React.ReactNode;\n}\n\nconst VIEWPORT_PADDING = 10;\nconst FRAMELESS_VIDEO_ONLY_RE =\n  /^\\s*(?:<p>\\s*)?<video\\b(?=[^>]*\\bdata-frameless=(?:\"true\"|'true'|true))[\\s\\S]*<\\/video>\\s*(?:<\\/p>)?\\s*$/i;\ntype ConfiguredPopoverSide = NonNullable<PopoverConfig[\"side\"]>;\ntype BasePopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype PopoverPlacement = {\n  side: BasePopoverSide;\n  align?: PopoverConfig[\"align\"];\n};\n\ntype ButtonJavascriptContext = {\n  code?: string;\n  win: Window;\n  step?: StepInterface;\n  button?: StepConfigurationType[\"primaryButton\"];\n  event: React.MouseEvent<HTMLButtonElement>;\n};\n\nfunction isVideoOnlyFramelessHtml(value?: string | null) {\n  return FRAMELESS_VIDEO_ONLY_RE.test(String(value || \"\"));\n}\n\nasync function runButtonJavascript({ code, win, step, button, event }: ButtonJavascriptContext) {\n  const source = code?.trim();\n  if (!source) return true;\n\n  try {\n    const runner = (win as Window & { Function: FunctionConstructor }).Function(\n      \"window\",\n      \"document\",\n      \"step\",\n      \"button\",\n      \"event\",\n      `\"use strict\";\nreturn (async () => {\n${source}\n})();`,\n    ) as (\n      window: Window,\n      document: Document,\n      step?: StepInterface,\n      button?: StepConfigurationType[\"primaryButton\"],\n      event?: React.MouseEvent<HTMLButtonElement>,\n    ) => Promise<unknown>;\n\n    return (await runner(win, win.document, step, button, event)) !== false;\n  } catch (error) {\n    console.error(\"Guide: Button JavaScript failed\", error);\n    return false;\n  }\n}\n\nfunction getStageRect(elementRect: DOMRect, stagePadding: number): DOMRect {\n  return createGuideRect(\n    elementRect.x - stagePadding,\n    elementRect.y - stagePadding,\n    elementRect.width + stagePadding * 2,\n    elementRect.height + stagePadding * 2,\n  );\n}\n\nfunction getPopoverPlacement(side: ConfiguredPopoverSide): PopoverPlacement {\n  switch (side) {\n    case \"top-left\":\n      return { side: \"top\", align: \"start\" };\n    case \"top-right\":\n      return { side: \"top\", align: \"end\" };\n    case \"bottom-left\":\n      return { side: \"bottom\", align: \"start\" };\n    case \"bottom-right\":\n      return { side: \"bottom\", align: \"end\" };\n    case \"top\":\n    case \"bottom\":\n    case \"left\":\n    case \"right\":\n      return { side, align: \"center\" };\n    default:\n      return { side };\n  }\n}\n\nfunction getPopoverSidePriority(side: BasePopoverSide): BasePopoverSide[] {\n  switch (side) {\n    case \"top\":\n      return [\"top\", \"bottom\", \"right\", \"left\"];\n    case \"left\":\n      return [\"left\", \"right\", \"bottom\", \"top\"];\n    case \"right\":\n      return [\"right\", \"left\", \"bottom\", \"top\"];\n    case \"bottom\":\n    default:\n      return [\"bottom\", \"top\", \"right\", \"left\"];\n  }\n}\n\nfunction getPopoverAvailableSpace(\n  elementRect: DOMRect,\n  winWidth: number,\n  winHeight: number,\n): Record<BasePopoverSide, number> {\n  return {\n    top: elementRect.top - VIEWPORT_PADDING,\n    bottom: winHeight - elementRect.bottom - VIEWPORT_PADDING,\n    left: elementRect.left - VIEWPORT_PADDING,\n    right: winWidth - elementRect.right - VIEWPORT_PADDING,\n  };\n}\n\nfunction getPopoverRequiredSpace(side: BasePopoverSide, popoverRect: DOMRect): number {\n  return (side === \"left\" || side === \"right\" ? popoverRect.width : popoverRect.height) + TOTAL_GAP;\n}\n\nfunction resolvePopoverSide(\n  preferredSide: BasePopoverSide,\n  elementRect: DOMRect,\n  popoverRect: DOMRect,\n  winWidth: number,\n  winHeight: number,\n): BasePopoverSide {\n  const availableSpace = getPopoverAvailableSpace(elementRect, winWidth, winHeight);\n  const prioritizedSides = getPopoverSidePriority(preferredSide);\n\n  let bestSide = preferredSide;\n  let smallestOverflow = Number.POSITIVE_INFINITY;\n\n  for (const side of prioritizedSides) {\n    const overflow = Math.max(0, getPopoverRequiredSpace(side, popoverRect) - availableSpace[side]);\n    if (overflow === 0) {\n      return side;\n    }\n    if (overflow < smallestOverflow) {\n      smallestOverflow = overflow;\n      bestSide = side;\n    }\n  }\n\n  return bestSide;\n}\n\nfunction getFixedPopoverPlacement(\n  position?: StepConfigurationType[\"position\"],\n): React.CSSProperties {\n  switch (position) {\n    case \"bottom-right\":\n      return {\n        top: \"auto\",\n        bottom: \"30px\",\n        right: \"30px\",\n      };\n    case \"top-left\":\n      return {\n        top: \"30px\",\n        left: \"30px\",\n      };\n    case \"top-right\":\n      return {\n        top: \"30px\",\n        right: \"30px\",\n      };\n    case \"bottom-left\":\n      return {\n        top: \"auto\",\n        bottom: \"30px\",\n        left: \"30px\",\n      };\n    case \"top\":\n    case \"top-center\":\n      return {\n        top: \"30px\",\n        left: \"50%\",\n      };\n    case \"bottom-center\":\n      return {\n        top: \"auto\",\n        bottom: \"30px\",\n        left: \"50%\",\n      };\n    default:\n      return {\n        top: \"50%\",\n        left: \"50%\",\n      };\n  }\n}\n\nfunction getFixedPopoverBaseTranslateValues(position?: StepConfigurationType[\"position\"]) {\n  switch (position) {\n    case \"bottom-right\":\n      return { x: \"20px\", y: \"20px\" };\n    case \"top-left\":\n      return { x: \"-20px\", y: \"-20px\" };\n    case \"top-right\":\n      return { x: \"20px\", y: \"-20px\" };\n    case \"bottom-left\":\n      return { x: \"-20px\", y: \"20px\" };\n    case \"top\":\n    case \"top-center\":\n      return { x: \"-50%\", y: \"-20px\" };\n    case \"bottom-center\":\n      return { x: \"-50%\", y: \"20px\" };\n    default:\n      return { x: \"-50%\", y: \"-50%\" };\n  }\n}\n\nconst SLIDE_OFFSET_PX = 12;\nconst FIXED_DIALOG_SLIDE_OFFSET_PX = 16;\nconst FIXED_DIALOG_CENTER_SLIDE_OFFSET_PX = 8;\n\ntype TourDisplayType = NonNullable<TourInterface[\"configuration\"]>[\"type\"];\ntype FixedPopoverMotion = {\n  x: string;\n  y: string;\n  scale: number;\n};\n\nfunction resolveAnimationDirection(\n  direction: StepAnimationDirection,\n  popoverSide?: string,\n): Exclude<StepAnimationDirection, \"auto\"> {\n  if (direction !== \"auto\") return direction;\n  switch (popoverSide) {\n    case \"top\":\n      return \"bottom\";\n    case \"left\":\n      return \"right\";\n    case \"right\":\n      return \"left\";\n    default:\n      return \"top\";\n  }\n}\n\nfunction getSlideOffset(resolved: Exclude<StepAnimationDirection, \"auto\">): string {\n  switch (resolved) {\n    case \"top\":\n      return `translateY(-${SLIDE_OFFSET_PX}px)`;\n    case \"bottom\":\n      return `translateY(${SLIDE_OFFSET_PX}px)`;\n    case \"left\":\n      return `translateX(-${SLIDE_OFFSET_PX}px)`;\n    case \"right\":\n      return `translateX(${SLIDE_OFFSET_PX}px)`;\n  }\n}\n\nfunction getDirectionMotionOffset(\n  direction: Exclude<StepAnimationDirection, \"auto\">,\n  slideDistance: string,\n): Omit<FixedPopoverMotion, \"scale\"> {\n  switch (direction) {\n    case \"top\":\n      return { x: \"0px\", y: `-${slideDistance}` };\n    case \"bottom\":\n      return { x: \"0px\", y: slideDistance };\n    case \"left\":\n      return { x: `-${slideDistance}`, y: \"0px\" };\n    case \"right\":\n      return { x: slideDistance, y: \"0px\" };\n  }\n}\n\nfunction getAutoDialogMotionOffset(\n  position?: StepConfigurationType[\"position\"],\n): Omit<FixedPopoverMotion, \"scale\"> {\n  const offset = `${FIXED_DIALOG_SLIDE_OFFSET_PX}px`;\n  switch (position) {\n    case \"top-left\":\n      return { x: `-${offset}`, y: `-${offset}` };\n    case \"top\":\n    case \"top-center\":\n      return { x: \"0px\", y: `-${offset}` };\n    case \"top-right\":\n      return { x: offset, y: `-${offset}` };\n    case \"bottom-left\":\n      return { x: `-${offset}`, y: offset };\n    case \"bottom\":\n    case \"bottom-center\":\n      return { x: \"0px\", y: offset };\n    case \"bottom-right\":\n      return { x: offset, y: offset };\n    default:\n      return { x: \"0px\", y: `${FIXED_DIALOG_CENTER_SLIDE_OFFSET_PX}px` };\n  }\n}\n\nfunction getAutoSlideoutMotionOffset(\n  position?: StepConfigurationType[\"position\"],\n): Omit<FixedPopoverMotion, \"scale\"> {\n  switch (position) {\n    case \"top-left\":\n    case \"bottom-left\":\n      return { x: \"-100%\", y: \"0px\" };\n    case \"top-right\":\n    case \"bottom-right\":\n      return { x: \"100%\", y: \"0px\" };\n    case \"top\":\n    case \"top-center\":\n      return { x: \"0px\", y: \"-100%\" };\n    case \"bottom\":\n    case \"bottom-center\":\n      return { x: \"0px\", y: \"100%\" };\n    default:\n      return getAutoDialogMotionOffset(position);\n  }\n}\n\nfunction getFixedPopoverMotion(\n  position: StepConfigurationType[\"position\"] | undefined,\n  direction: StepAnimationDirection,\n  tourType?: TourDisplayType,\n): FixedPopoverMotion {\n  const isSlideout = tourType === \"slideout\";\n  const offset =\n    direction === \"auto\"\n      ? isSlideout\n        ? getAutoSlideoutMotionOffset(position)\n        : getAutoDialogMotionOffset(position)\n      : getDirectionMotionOffset(\n          direction,\n          isSlideout ? \"100%\" : `${FIXED_DIALOG_SLIDE_OFFSET_PX}px`,\n        );\n\n  return {\n    ...offset,\n    scale: isSlideout ? 1 : 0.98,\n  };\n}\n\nfunction getFixedPopoverTransform(\n  position: StepConfigurationType[\"position\"] | undefined,\n  motion?: FixedPopoverMotion,\n) {\n  const base = getFixedPopoverBaseTranslateValues(position);\n  const motionTransform = motion\n    ? ` translate(${motion.x}, ${motion.y}) scale(${motion.scale})`\n    : \" scale(1)\";\n  return `translate(${base.x}, ${base.y})${motionTransform}`;\n}\n\nfunction getFixedPopoverTransformOrigin(position?: StepConfigurationType[\"position\"]) {\n  switch (position) {\n    case \"top-left\":\n      return \"top left\";\n    case \"top\":\n    case \"top-center\":\n      return \"top center\";\n    case \"top-right\":\n      return \"top right\";\n    case \"bottom-left\":\n      return \"bottom left\";\n    case \"bottom\":\n    case \"bottom-center\":\n      return \"bottom center\";\n    case \"bottom-right\":\n      return \"bottom right\";\n    default:\n      return \"center\";\n  }\n}\n\nfunction Popover({\n  config,\n  elementRect,\n  referenceElement,\n  show,\n  isFirstStep,\n  currentStepIndex,\n  totalSteps,\n  progressStepIndex = currentStepIndex,\n  progressTotalSteps = totalSteps,\n  progressText = \"Step {{current}} of {{total}}\",\n  onDismiss: _onDismiss,\n  onSnooze,\n  isEditing,\n  isWaitingForCondition,\n  ignoreAutoProceed,\n  editor,\n  step,\n  onNext,\n  onPrev,\n  onClose,\n  onOpenWidget,\n  onTrackEvent,\n  className = \"\",\n  animate,\n  isTransitioning = false,\n  mergedTheme,\n  tour,\n  animationDirection,\n  animationSpeed,\n  rootElement,\n  stagePadding = 0,\n  isExitAnimating = false,\n  voiceOverControl,\n}: PopoverProps) {\n  const win = rootElement?.ownerDocument?.defaultView ?? window;\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const hasShownPopoverRef = useRef(false);\n  const [popoverRect, setPopoverRect] = useState<DOMRect | null>(null);\n  const [isEntryVisible, setIsEntryVisible] = useState(false);\n  const isBanner = step?.configuration?.type === \"banner\";\n  const isFramelessVideoOnly = isVideoOnlyFramelessHtml(step?.description);\n  const [autoProceedProgress, setAutoProceedProgress] = useState(0);\n  const { position } = step?.configuration || {};\n  const preferredPlacement = useMemo(\n    () => getPopoverPlacement(config.side || \"bottom\"),\n    [config.side],\n  );\n  const preferredSide = preferredPlacement.side;\n  const winWidth = win.innerWidth;\n  const winHeight = win.innerHeight;\n  const configuredWidth = mergedTheme?.width || 430;\n  const popoverWidth = Math.min(configuredWidth, Math.max(0, winWidth - VIEWPORT_PADDING * 2));\n\n  useLayoutEffect(() => {\n    // Measure before paint so the popover never flashes at a fallback position.\n    if (popoverRef.current && show) {\n      setPopoverRect(popoverRef.current.getBoundingClientRect());\n      return;\n    }\n\n    if (!show && !isExitAnimating) {\n      setPopoverRect(null);\n    }\n  }, [show, isExitAnimating, elementRect, popoverWidth, step?.id]);\n\n  useLayoutEffect(() => {\n    if (!show) {\n      setIsEntryVisible(false);\n      if (!isExitAnimating) {\n        hasShownPopoverRef.current = false;\n      }\n      return;\n    }\n\n    if (hasShownPopoverRef.current) {\n      setIsEntryVisible(true);\n      return;\n    }\n\n    setIsEntryVisible(false);\n    const frameId = win.requestAnimationFrame(() => {\n      hasShownPopoverRef.current = true;\n      setIsEntryVisible(true);\n    });\n\n    return () => win.cancelAnimationFrame(frameId);\n  }, [\n    show,\n    isExitAnimating,\n    step?.id,\n    currentStepIndex,\n    step?.configuration?.animationDirection,\n    win,\n  ]);\n\n  useEffect(() => {\n    if (!show || !popoverRef.current) return;\n\n    const videos = popoverRef.current.querySelectorAll<HTMLVideoElement>(\n      'video[data-autoplay=\"true\"], video[autoplay]',\n    );\n    videos.forEach((video) => {\n      video.muted = true;\n      video.playsInline = true;\n      void video.play().catch(() => {});\n    });\n  }, [show, step?.id]);\n\n  const defaultStyles = {\n    padding: 0,\n    ...(mergedTheme?.fontFamily ? { \"--guide-font-family\": mergedTheme.fontFamily } : {}),\n    \"--background-color\": mergedTheme?.backgroundColor || \"#FFF\",\n    \"--background\": mergedTheme?.backgroundColor || \"#FFF\",\n    \"--text-primary\": mergedTheme?.textColor || \"#111\",\n    \"--text-color\": mergedTheme?.textColor || \"#111\",\n    \"--text-secondary\": mergedTheme?.secondaryTextColor || \"#333\",\n    \"--text-tertiary\": mergedTheme?.tertiaryTextColor || \"#737373\",\n    \"--color-primary\": mergedTheme?.brandColor || \"#3912e2\",\n    \"--next-button-bg-color\": mergedTheme?.nextButtonColor || \"#3912e2\",\n    \"--next-button-text-color\": mergedTheme?.nextButtonTextColor || \"#FFF\",\n    \"--next-button-hover-color\": mergedTheme?.nextButtonHoverColor || \"#281386\",\n    \"--next-button-radius\": `${mergedTheme?.nextButtonRadius || 8}px`,\n    \"--next-button-border-color\": mergedTheme?.nextButtonBorderColor || \"#3912e2\",\n    \"--prev-button-bg-color\": mergedTheme?.prevButtonColor || \"#EEE\",\n    \"--prev-button-text-color\": mergedTheme?.prevButtonTextColor || \"#111\",\n    \"--prev-button-hover-color\": mergedTheme?.prevButtonHoverColor || \"#F5F5F5\",\n    \"--prev-button-radius\": `${mergedTheme?.prevButtonRadius || 8}px`,\n    \"--prev-button-border-color\": mergedTheme?.prevButtonBorderColor || \"#e8e8e8\",\n    \"--close-button-bg-color\": mergedTheme?.closeButtonColor || \"#EEE\",\n    \"--close-button-text-color\": mergedTheme?.closeButtonTextColor || \"#111\",\n    \"--close-button-hover-color\": mergedTheme?.closeButtonHoverColor || \"#F5F5F5\",\n    \"--close-button-radius\": `${mergedTheme?.closeButtonRadius || 8}px`,\n    \"--close-button-shadow\": mergedTheme?.closeButtonShadow || \"\",\n    \"--prev-button-shadow\": mergedTheme?.prevButtonShadow || \"\",\n    \"--next-button-shadow\": mergedTheme?.nextButtonShadow || \"\",\n    \"--close-button-border-color\": mergedTheme?.closeButtonBorderColor || \"#e8e8e8\",\n    \"--overlay-color\": mergedTheme?.overlayColor || \"#FFF\",\n    \"--overlay-opacity\": (() => {\n      const opacity = Number(mergedTheme?.overlayColorOpacity) / 100;\n      return isNaN(opacity) ? \"100\" : String(opacity);\n    })(),\n    \"--border-radius\": `${mergedTheme?.borderRadius || 8}px`,\n    \"--border-color\": mergedTheme?.borderColor || \"#e8e8e8\",\n    \"--border-width\": `${mergedTheme?.borderWidth || 1}px`,\n    \"--guide-heading-1-size\": `${mergedTheme?.heading1FontSize || 24}px`,\n    \"--guide-heading-2-size\": `${mergedTheme?.heading2FontSize || 18}px`,\n    \"--guide-paragraph-size\": `${mergedTheme?.paragraphFontSize || 13}px`,\n    \"--pagination-primary\": mergedTheme?.paginationPrimaryColor || \"#222\",\n    \"--pagination-secondary\": mergedTheme?.paginationSecondaryColor || \"#CCC\",\n    \"--box-shadow\":\n      mergedTheme?.boxShadow ||\n      \"0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1)\",\n    boxShadow: \"var(--box-shadow)\",\n    background: \"var(--background-color)\",\n    borderRadius: \"var(--border-radius)\",\n    border: \"var(--border-width) solid var(--border-color)\",\n  };\n\n  const stageRect = useMemo(() => {\n    if (!elementRect) {\n      return null;\n    }\n\n    return getStageRect(elementRect, stagePadding);\n  }, [elementRect, stagePadding]);\n  const effectiveSide = useMemo(() => {\n    if (!stageRect || !popoverRect) {\n      return preferredSide;\n    }\n\n    return resolvePopoverSide(preferredSide, stageRect, popoverRect, winWidth, winHeight);\n  }, [stageRect, popoverRect, preferredSide, winWidth, winHeight]);\n\n  const popoverStyle = useMemo((): React.CSSProperties => {\n    const isLeaving = isExitAnimating && !show;\n    const isPopoverVisible = show && isEntryVisible && !isTransitioning;\n    const canUseEntrySlide = !stageRect && !hasShownPopoverRef.current;\n    const isEntering = canUseEntrySlide && !isPopoverVisible && !isTransitioning;\n    const durationMs = `${animationSpeed}ms`;\n    const usesTransformMotion = isBanner || !stageRect;\n    const transitionProperty = usesTransformMotion ? \"opacity, transform\" : \"opacity\";\n\n    const baseStyle: React.CSSProperties = {\n      display: \"block\",\n      position: \"fixed\",\n      boxSizing: \"border-box\",\n      zIndex: GUIDE_LAYER_Z_INDEX,\n      visibility: show || isExitAnimating ? \"visible\" : \"hidden\",\n      opacity: isPopoverVisible ? 1 : 0,\n      width: `${popoverWidth}px`,\n      maxWidth: `calc(100vw - ${VIEWPORT_PADDING * 2}px)`,\n      ...defaultStyles,\n      willChange: transitionProperty,\n      pointerEvents: isPopoverVisible && !isLeaving ? \"auto\" : \"none\",\n    };\n\n    if (animate) {\n      baseStyle.transitionProperty = transitionProperty;\n      baseStyle.transitionDuration = durationMs;\n      baseStyle.transitionTimingFunction = \"ease\";\n      if (isPopoverVisible && usesTransformMotion) {\n        baseStyle.transitionDelay = \"0.1s\";\n      }\n    }\n\n    if (isBanner) {\n      const position = step?.configuration?.position || \"top\";\n      const isBottom = (position as string) === \"bottom\";\n      const isFloating = step?.configuration?.isFloating;\n      const slideOffset = getSlideOffset(\n        resolveAnimationDirection(animationDirection, effectiveSide),\n      );\n\n      return {\n        ...baseStyle,\n        position: \"fixed\",\n        top: isBottom ? \"auto\" : 0,\n        bottom: isBottom ? 0 : \"auto\",\n        left: isFloating ? \"10%\" : \"0\",\n        right: isFloating ? \"10%\" : \"0\",\n        width: isFloating ? \"80%\" : \"100%\",\n        minWidth: isFloating ? \"80%\" : \"100%\",\n        transform: isEntering || isLeaving ? `translate(0, 0) ${slideOffset}` : \"translate(0, 0)\",\n        zIndex: GUIDE_LAYER_Z_INDEX,\n      };\n    }\n\n    if (!stageRect) {\n      const fixedMotion =\n        isEntering || isLeaving\n          ? getFixedPopoverMotion(position, animationDirection, tour?.configuration?.type)\n          : undefined;\n      const fixedTransitionProperty = \"opacity, transform\";\n      return {\n        ...baseStyle,\n        position: \"fixed\",\n        ...getFixedPopoverPlacement(position),\n        transitionProperty: fixedTransitionProperty,\n        willChange: fixedTransitionProperty,\n        opacity: isPopoverVisible ? 1 : 0,\n        transform: getFixedPopoverTransform(position, fixedMotion),\n        transformOrigin: getFixedPopoverTransformOrigin(position),\n      };\n    }\n\n    if (!popoverRect) {\n      return {\n        ...baseStyle,\n        top: 0,\n        left: 0,\n        visibility: \"hidden\",\n        opacity: 0,\n        transform: \"none\",\n        transitionProperty: \"none\",\n        transitionDuration: \"0ms\",\n        transitionDelay: undefined,\n      };\n    }\n\n    const align = preferredPlacement.align || config.align || \"start\";\n    let top = 0;\n    let left = 0;\n\n    switch (effectiveSide) {\n      case \"top\":\n        top = stageRect.top - popoverRect.height - TOTAL_GAP;\n        break;\n      case \"bottom\":\n        top = stageRect.bottom + TOTAL_GAP;\n        break;\n      case \"left\":\n        left = stageRect.left - popoverRect.width - TOTAL_GAP;\n        break;\n      case \"right\":\n        left = stageRect.right + TOTAL_GAP;\n        break;\n    }\n\n    if (effectiveSide === \"top\" || effectiveSide === \"bottom\") {\n      switch (align) {\n        case \"start\":\n          left = stageRect.left;\n          break;\n        case \"center\":\n          left = stageRect.left + stageRect.width / 2 - popoverRect.width / 2;\n          break;\n        case \"end\":\n          left = stageRect.right - popoverRect.width;\n          break;\n      }\n    } else if (effectiveSide === \"left\" || effectiveSide === \"right\") {\n      switch (align) {\n        case \"start\":\n          top = stageRect.top;\n          break;\n        case \"center\":\n          top = stageRect.top + stageRect.height / 2 - popoverRect.height / 2;\n          break;\n        case \"end\":\n          top = stageRect.bottom - popoverRect.height;\n          break;\n      }\n    }\n\n    if (left < VIEWPORT_PADDING) {\n      left = VIEWPORT_PADDING;\n    } else if (left + popoverRect.width > winWidth - VIEWPORT_PADDING) {\n      left = winWidth - popoverRect.width - VIEWPORT_PADDING;\n    }\n\n    if (top < VIEWPORT_PADDING) {\n      top = VIEWPORT_PADDING;\n    } else if (top + popoverRect.height > winHeight - VIEWPORT_PADDING) {\n      top = winHeight - popoverRect.height - VIEWPORT_PADDING;\n    }\n\n    return {\n      ...baseStyle,\n      position: \"fixed\",\n      top: `${top}px`,\n      left: `${left}px`,\n      transform: \"none\",\n    };\n  }, [\n    stageRect,\n    popoverRect,\n    defaultStyles,\n    show,\n    isEntryVisible,\n    animate,\n    config.align,\n    effectiveSide,\n    preferredPlacement.align,\n    isBanner,\n    isTransitioning,\n    position,\n    animationDirection,\n    animationSpeed,\n    isExitAnimating,\n    popoverWidth,\n    tour?.configuration?.type,\n    winWidth,\n    winHeight,\n  ]);\n\n  // Tour-level setting takes precedence: if tour disables it, don't show\n  // If tour allows it (true or undefined), then check step-level setting\n  const tourAllowsStepCount = tour?.configuration?.showStepCount !== false;\n  const stepAllowsStepCount = step?.configuration?.showStepCount !== false;\n  const showProgress = tourAllowsStepCount && stepAllowsStepCount && progressTotalSteps > 1;\n  const progressType =\n    step?.configuration?.progressType || tour?.configuration?.progressType || \"text\";\n  const showProceedBar =\n    !!step?.configuration?.showProceedBar && !!step?.configuration?.autoProceed;\n  const showProgressArea = showProgress || showProceedBar;\n  const showLeadingFooterArea = showProgressArea || !!voiceOverControl;\n\n  const actualProgressText = (step?.configuration?.progressText || progressText)\n    .replace(\"{{current}}\", `${progressStepIndex + 1}`)\n    .replace(\"{{total}}\", `${progressTotalSteps}`);\n\n  const contentPadding = {\n    top: mergedTheme?.padding?.top || \"10\",\n    right: mergedTheme?.padding?.right || \"10\",\n    bottom: mergedTheme?.padding?.bottom || \"5\",\n    left: mergedTheme?.padding?.left || \"10\",\n  };\n  const actionPadding = {\n    top: mergedTheme?.actionPadding?.top || \"8\",\n    right: mergedTheme?.actionPadding?.right || \"10\",\n    bottom: mergedTheme?.actionPadding?.bottom || \"8\",\n    left: mergedTheme?.actionPadding?.left || \"10\",\n  };\n  const padding = {\n    padding: mergedTheme?.padding\n      ? `${contentPadding.top}px ${contentPadding.right}px ${contentPadding.bottom}px ${contentPadding.left}px`\n      : \"10px 10px 5px 10px\",\n    actionPadding: mergedTheme?.actionPadding\n      ? `${actionPadding.top}px ${actionPadding.right}px ${actionPadding.bottom}px ${actionPadding.left}px`\n      : \"8px 10px 8px 10px\",\n    labelPadding: `${contentPadding.top}px ${contentPadding.right}px 0 ${contentPadding.left}px`,\n  };\n  const actionSectionStyle = {\n    padding: padding.actionPadding,\n    ...(mergedTheme?.actionBorderTop === true\n      ? {\n          borderTop: \"1px solid\",\n          borderTopColor: mergedTheme?.actionBorderTopColor || \"#f1f1f2\",\n        }\n      : {}),\n  };\n\n  const buttonPosition = {\n    left: \"flex-start\",\n    right: \"flex-end\",\n    center: \"center\",\n  };\n\n  const content = (\n    <div\n      className={cn(\n        \"prose prose-sm [&_h1]:text-[length:var(--guide-heading-1-size)] [&_h2]:text-[length:var(--guide-heading-2-size)] [&_p]:text-[length:var(--guide-paragraph-size)]\",\n        !isBanner && !isFramelessVideoOnly && \"mb-2\",\n      )}\n      style={{ color: \"var(--text-color)\", padding: isBanner ? \"10px\" : \"0\" }}\n    >\n      <div dangerouslySetInnerHTML={{ __html: step?.description }} />\n      {step?.configuration?.bannerImage && (\n        <img\n          src={step.configuration.bannerImage}\n          alt=\"\"\n          className=\"max-h-[180px] w-full rounded-md border border-subtle object-cover object-top\"\n          style={{ marginTop: \"8px\" }}\n        />\n      )}\n    </div>\n  );\n\n  const { primaryButton, previousButton, closeButton } = step?.configuration || {};\n\n  const isLastStep = currentStepIndex === totalSteps - 1;\n  const stepProgression = step?.progression || \"progressButton\";\n  const showPrimaryAction = stepProgression === \"progressButton\";\n  const showPreviousAction = !!previousButton?.show && !isFirstStep;\n  const showCloseAction = !!closeButton?.show;\n  const snoozeConfig = tour?.configuration?.snooze;\n  const showSnoozeAction = !!snoozeConfig?.enabled;\n  const snoozeLabel = snoozeConfig?.label || \"Remind me later\";\n  const showActionBar =\n    showPrimaryAction || showPreviousAction || showCloseAction || showSnoozeAction;\n  const hideFooterForElementClick =\n    !!referenceElement &&\n    stepProgression === \"elementClick\" &&\n    !showLeadingFooterArea &&\n    !showActionBar;\n\n  const openWidgetTarget = (target?: ButtonWidgetTarget) => {\n    if (target?.id) {\n      onOpenWidget?.(target);\n    }\n  };\n\n  const handlePrimaryAction = async (event: React.MouseEvent<HTMLButtonElement>) => {\n    const shouldContinue = await runButtonJavascript({\n      code: primaryButton?.javascript,\n      win,\n      step,\n      button: primaryButton,\n      event,\n    });\n    if (!shouldContinue) return;\n\n    if (primaryButton?.trackEvent) {\n      onTrackEvent?.(primaryButton.trackEvent);\n    }\n    if (!primaryButton?.action || primaryButton?.action === \"next\") {\n      onNext(step?.id);\n    }\n    if (primaryButton?.action === \"complete\") {\n      onClose(step?.id, \"closeTour\", \"authoredAction\");\n    }\n    if (primaryButton?.linkUrl) {\n      if (primaryButton.linkTarget === \"_blank\") {\n        win.open(primaryButton.linkUrl, \"_blank\");\n      } else {\n        win.location.href = primaryButton.linkUrl;\n      }\n    }\n    openWidgetTarget(primaryButton?.openWidget);\n  };\n\n  const handleCloseAction = () => {\n    if (closeButton?.trackEvent) {\n      onTrackEvent?.(closeButton.trackEvent);\n    }\n    if (closeButton?.behavior === \"closeStep\") {\n      onNext(step?.id);\n    } else {\n      onClose(step?.id, closeButton?.behavior || \"closeTour\", \"authoredAction\");\n    }\n    openWidgetTarget(closeButton?.openWidget);\n  };\n\n  const progressButtonText =\n    step?.configuration?.progressButtonText && step.configuration.progressButtonText !== \"Next\"\n      ? step.configuration.progressButtonText\n      : \"\";\n  const primaryButtonText = primaryButton?.text || progressButtonText;\n\n  const primaryAction = (\n    <button\n      className={cn(\n        \"step-next flex h-8 cursor-pointer items-center justify-center gap-x-2 rounded-[var(--next-button-radius)] border border-solid border-[var(--next-button-border-color)] bg-[var(--next-button-bg-color)] text-sm text-[var(--next-button-text-color)] transition-all duration-300 hover:bg-[var(--next-button-hover-color)]\",\n        primaryButton?.icon && primaryButtonText.length === 0 && \"px-1.5\",\n        primaryButton?.icon && primaryButtonText.length > 0 && \"px-3\",\n        !primaryButton?.icon && \"px-3\",\n        isBanner && \"max-w-[200px] overflow-hidden text-ellipsis whitespace-nowrap\",\n        step?.configuration?.fullSizeCTA && \"h-9\",\n      )}\n      style={{\n        boxShadow: \"var(--next-button-shadow)\",\n      }}\n      type=\"button\"\n      onClick={handlePrimaryAction}\n    >\n      {primaryButtonText\n        ? primaryButtonText\n        : primaryButton?.icon\n          ? \"\"\n          : isLastStep\n            ? \"Done\"\n            : \"Next\"}\n      {primaryButton?.icon && (\n        <span className=\"flex\">{ICONS[primaryButton?.icon as keyof typeof ICONS]}</span>\n      )}\n    </button>\n  );\n\n  const closePopoverButton = (\n    <div\n      className={cn(\n        \"guide-popover-close absolute right-2 top-2 mb-2 flex items-start justify-between\",\n        isBanner && \"right-1 top-2\",\n      )}\n    >\n      <button\n        className=\"guide-popover-close\"\n        type=\"button\"\n        onClick={() => {\n          onClose(step?.id);\n        }}\n      >\n        <X className=\"h-[18px] w-[18px] shrink-0\" />\n      </button>\n    </div>\n  );\n\n  const arrowStyle = useMemo(() => {\n    if (!popoverRect || !elementRect) {\n      return { display: \"none\" };\n    }\n    return calculateArrowPosition(\n      popoverRect,\n      stageRect,\n      popoverStyle,\n      effectiveSide,\n      step?.configuration?.theme?.arrowImageSize,\n    );\n  }, [\n    popoverRect,\n    stageRect,\n    popoverStyle,\n    effectiveSide,\n    step?.configuration?.theme?.arrowImageSize,\n  ]);\n\n  const { arrowImage, arrowImageSize } = step?.configuration?.theme || {};\n  const isTargetedPopoverStep =\n    !!elementRect && canShowPopoverArrowForStepType(step?.configuration?.type);\n  const hideArrow =\n    step?.configuration?.theme?.hideArrow === true || mergedTheme?.hideArrow === true;\n  const showArrow = isTargetedPopoverStep && !hideArrow;\n\n  // Determine rotation based on side\n  function getArrowRotation(side?: string) {\n    switch (side) {\n      case \"top\":\n        return \"rotate(180deg)\";\n      case \"left\":\n        return \"rotate(0deg)\";\n      case \"right\":\n        return \"rotate(-180deg)\";\n      case \"bottom\":\n        return \"rotate(-120deg)\";\n      default:\n        return \"none\";\n    }\n  }\n\n  // Add effect for auto-proceed progress bar\n  useEffect(() => {\n    if (\n      !show ||\n      !step?.configuration?.autoProceed ||\n      ignoreAutoProceed ||\n      isEditing ||\n      isExitAnimating ||\n      isTransitioning ||\n      isWaitingForCondition\n    ) {\n      setAutoProceedProgress(0);\n      return;\n    }\n\n    const duration = Number(step.configuration.autoProceed) * 1000;\n    const startTime = performance.now();\n    let animationFrame = 0;\n\n    const updateProgress = () => {\n      const now = performance.now();\n      const elapsed = now - startTime;\n      const progress = Math.min(100, (elapsed / duration) * 100);\n\n      setAutoProceedProgress(progress);\n\n      if (progress < 100) {\n        animationFrame = requestAnimationFrame(updateProgress);\n      }\n    };\n\n    animationFrame = requestAnimationFrame(updateProgress);\n    return () => cancelAnimationFrame(animationFrame);\n  }, [\n    show,\n    step?.configuration?.autoProceed,\n    ignoreAutoProceed,\n    isEditing,\n    isExitAnimating,\n    isTransitioning,\n    isWaitingForCondition,\n  ]);\n\n  // Only show footer/buttons when not transitioning\n  const showFooter = !isTransitioning;\n\n  return (\n    <div\n      ref={popoverRef}\n      className={`guide-popover ${className}`}\n      style={popoverStyle}\n      {...GUIDE_SURFACE_EVENT_HANDLERS}\n    >\n      {mergedTheme?.customCss && <style>{mergedTheme.customCss}</style>}\n      {showArrow && (\n        <>\n          {arrowImage ? (\n            <img\n              src={arrowImage}\n              alt=\"arrow\"\n              style={{\n                ...arrowStyle,\n                borderWidth: 0,\n                borderStyle: \"none\",\n                width: (arrowImageSize || ARROW_SIZE) * 2,\n                height: (arrowImageSize || ARROW_SIZE) * 2,\n                transform: getArrowRotation(effectiveSide),\n                pointerEvents: \"none\",\n                position: \"absolute\",\n                zIndex: 2,\n              }}\n              className={`guide-popover-arrow-image ${effectiveSide}`}\n            />\n          ) : (\n            <div\n              className={`guide-popover-arrow guide-popover-arrow-side-${effectiveSide}`}\n              style={arrowStyle}\n            />\n          )}\n        </>\n      )}\n\n      <div className=\"guide-popover-header\">\n        {step?.isClosable && step.configuration?.type !== \"banner\" && closePopoverButton}\n      </div>\n\n      {step?.configuration?.label && (\n        <div\n          className=\"guide-popover-label flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide\"\n          style={{ color: \"var(--color-primary)\", padding: padding.labelPadding }}\n        >\n          <span\n            className=\"inline-block h-2 w-2 rounded-full\"\n            style={{ backgroundColor: \"var(--color-primary)\" }}\n          />\n          {step.configuration.label}\n        </div>\n      )}\n\n      {step?.configuration?.type === \"banner\" ? (\n        <div\n          className={cn(\n            \"flex items-center px-4 py-2 pr-12\",\n            !step?.configuration?.contentJustify && \"justify-between\",\n            step?.configuration?.contentJustify === \"left\" && \"justify-start\",\n            step?.configuration?.contentJustify === \"right\" && \"justify-end\",\n            step?.configuration?.contentJustify === \"justify-between\" && \"justify-between\",\n            step?.configuration?.contentJustify === \"justify-around\" && \"justify-around\",\n            step?.configuration?.contentJustify === \"justify-evenly\" && \"justify-evenly\",\n          )}\n        >\n          {isEditing ? editor : step?.description && content}\n          <div className=\"actions\">\n            {primaryAction}\n            {closePopoverButton}\n          </div>\n        </div>\n      ) : (\n        <div\n          className=\"guide-popover-content editor\"\n          style={{\n            padding: isFramelessVideoOnly ? 0 : padding.padding,\n            maxHeight: isFramelessVideoOnly ? \"none\" : 250,\n            overflowY: \"auto\",\n            overscrollBehavior: \"contain\",\n          }}\n        >\n          <div className=\"guide-popover-content-inner\">\n            {isEditing ? editor : step?.description && content}\n          </div>\n          {step?.configuration?.showCustomHintText && (\n            <div\n              className=\"guide-custom-hint text-sm text-[var(--text-secondary)]\"\n              dangerouslySetInnerHTML={{ __html: step?.configuration?.customHintText || \"\" }}\n            />\n          )}\n        </div>\n      )}\n\n      {step?.configuration?.type !== \"banner\" && showFooter && (\n        <div className=\"guide-popover-footer w-full min-w-0 max-w-full\">\n          {hideFooterForElementClick ? null : (\n            <div\n              style={actionSectionStyle}\n              className=\"flex w-full min-w-0 max-w-full items-center justify-between\"\n            >\n              {showLeadingFooterArea && (\n                <div className=\"flex min-w-0 shrink-0 items-center gap-2\">\n                  {voiceOverControl}\n                  {showProgressArea && (\n                    <div className=\"min-w-0 shrink-0\">\n                      {showProgress && progressType === \"bar\" ? (\n                        <div className=\"flex items-center gap-[3px]\">\n                          {Array.from({ length: progressTotalSteps }).map((_, index) => (\n                            <span\n                              key={index}\n                              className={cn(\n                                \"block h-[4.5px] overflow-hidden rounded-lg transition-transform duration-300\",\n                                progressStepIndex === index &&\n                                  \"guide-popover-pagination-step-active w-[30px]\",\n                                progressStepIndex === index &&\n                                  !(showProceedBar && progressStepIndex === index)\n                                  ? \"bg-[var(--pagination-primary)]\"\n                                  : \"bg-[var(--pagination-secondary)]\",\n                                progressStepIndex !== index &&\n                                  \"guide-popover-pagination-step w-[7px]\",\n                              )}\n                            >\n                              {showProceedBar && progressStepIndex === index ? (\n                                <div\n                                  style={{\n                                    height: \"100%\",\n                                    width: `${autoProceedProgress}%`,\n                                    backgroundColor: \"var(--pagination-primary)\",\n                                    transition: \"none\",\n                                    willChange: \"width\",\n                                  }}\n                                />\n                              ) : null}\n                            </span>\n                          ))}\n                        </div>\n                      ) : !showProgress && showProceedBar ? (\n                        <div className=\"h-[4.5px] w-[72px] overflow-hidden rounded-lg bg-[var(--pagination-secondary)]\">\n                          <div\n                            style={{\n                              height: \"100%\",\n                              width: `${autoProceedProgress}%`,\n                              backgroundColor: \"var(--pagination-primary)\",\n                              transition: \"none\",\n                              willChange: \"width\",\n                            }}\n                          />\n                        </div>\n                      ) : (\n                        <div className=\"steps-count text-[0.8rem] text-[var(--text-tertiary)]\">\n                          {actualProgressText}\n                        </div>\n                      )}\n                    </div>\n                  )}\n                </div>\n              )}\n              {showActionBar && (\n                <div\n                  className={cn(\n                    \"step-action flex min-w-0 flex-grow gap-x-3\",\n                    !step?.configuration?.fullSizeCTA &&\n                      step?.configuration?.progressButtonPosition !== \"left\"\n                      ? \"pl-2\"\n                      : \"gap-y-2\",\n                  )}\n                  style={{\n                    flexDirection: step?.configuration?.fullSizeCTA ? \"column-reverse\" : \"row\",\n                    justifyContent: step?.configuration?.progressButtonPosition\n                      ? buttonPosition[step.configuration.progressButtonPosition]\n                      : \"flex-end\",\n                  }}\n                >\n                  {/* {showClose && (\n                  <button\n                    className=\"h-8 rounded-[var(--prev-button-radius)] bg-[var(--prev-button-bg-color)] px-4 text-sm text-[var(--prev-button-text-color)] hover:bg-[var(--prev-button-hover-color)] dark:bg-[var(--prev-button-bg-color)] dark:text-[var(--prev-button-text-color)]\"\n                    onClick={onClose}>\n                    {actualCloseText}\n                  </button>\n                )} */}\n                  {/* {showPrev && (\n                  <button\n                    className=\"h-8 rounded-[var(--prev-button-radius)] bg-[var(--prev-button-bg-color)] px-4 text-sm text-[var(--prev-button-text-color)] hover:bg-[var(--prev-button-hover-color)] dark:bg-[var(--prev-button-bg-color)] dark:text-[var(--prev-button-text-color)]\"\n                    onClick={onPrev}>\n                    {actualPrevText}\n                  </button>\n                )}\n{(step?.progression || \"progressButton\") === \"progressButton\" && (\n                  <button\n                    className=\"h-8 rounded-[var(--next-button-radius)] bg-[var(--next-button-bg-color)] px-4 text-sm text-[var(--next-button-text-color)] hover:bg-[var(--next-button-hover-color)] dark:bg-[var(--next-button-bg-color)] dark:text-[var(--next-button-text-color)]\"\n                    type=\"button\"\n                    onClick={onNext}>\n                    {step?.configuration?.progressButtonText}\n                  </button>\n                )} */}\n                  {showSnoozeAction && (\n                    <button\n                      type=\"button\"\n                      className={cn(\n                        \"step-snooze h-8 cursor-pointer whitespace-nowrap border-none bg-transparent px-1 text-sm text-[var(--text-tertiary)] transition-colors duration-300 hover:text-[var(--text-color)]\",\n                        step?.configuration?.fullSizeCTA && \"h-9\",\n                      )}\n                      onClick={() => onSnooze?.(step?.id)}\n                    >\n                      {snoozeLabel}\n                    </button>\n                  )}\n                  {showCloseAction && (\n                    <button\n                      type=\"button\"\n                      className={cn(\n                        \"step-close h-8 cursor-pointer rounded-[var(--close-button-radius)] border border-solid border-[var(--close-button-border-color)] bg-[var(--close-button-bg-color)] px-4 text-sm text-[var(--close-button-text-color)] shadow-[var(--close-button-shadow)] transition-all duration-300 hover:bg-[var(--close-button-hover-color)]\",\n                        step?.configuration?.fullSizeCTA && \"h-9\",\n                      )}\n                      style={{\n                        boxShadow: \"var(--close-button-shadow)\",\n                      }}\n                      onClick={handleCloseAction}\n                    >\n                      {closeButton?.text ? closeButton?.text : \"Close\"}\n                    </button>\n                  )}\n                  {showPreviousAction && (\n                    <button\n                      type=\"button\"\n                      className={cn(\n                        \"step-previous flex h-8 cursor-pointer items-center justify-center rounded-[var(--prev-button-radius)] border border-solid border-[var(--prev-button-border-color)] bg-[var(--prev-button-bg-color)] text-sm text-[var(--prev-button-text-color)] shadow-[var(--prev-button-shadow)] transition-all duration-300 hover:bg-[var(--prev-button-hover-color)]\",\n                        previousButton?.icon && \"px-1.5\",\n                        !previousButton?.icon && \"px-3\",\n                        step?.configuration?.fullSizeCTA && \"h-9\",\n                      )}\n                      style={{\n                        boxShadow: \"var(--prev-button-shadow)\",\n                      }}\n                      onClick={() => onPrev(step?.id)}\n                    >\n                      {previousButton?.text\n                        ? previousButton?.text\n                        : previousButton?.icon\n                          ? \"\"\n                          : \"Previous\"}\n                      {previousButton?.icon && (\n                        <span className=\"flex\">\n                          {ICONS[previousButton?.icon as keyof typeof ICONS]}\n                        </span>\n                      )}\n                    </button>\n                  )}\n                  {showPrimaryAction && primaryAction}\n                </div>\n              )}\n            </div>\n          )}\n        </div>\n      )}\n      <>{step?.configuration?.showUserorbitBranding && <UserorbitBranding />}</>\n    </div>\n  );\n}\n\n// --- Main Guide Component ---\n\n// Default configuration (can be overridden by props)\nconst defaultConfig: Partial<GuideConfig> = {\n  animate: true,\n  allowClose: true,\n  overlayClickBehavior: \"closeTour\",\n  keyboardControl: true,\n  showProgress: true,\n  showButtons: [\"next\", \"previous\", \"close\"],\n  doneBtnText: \"Done\",\n  closeBtnText: \"Close\",\n  nextBtnText: \"Next\",\n  prevBtnText: \"Previous\",\n  progressText: \"Step {{current}} of {{total}}\",\n  stagePadding: 5, // Default padding\n  stageRadius: 3, // Default radius\n};\n\nexport function shouldWaitForCondition(\n  step?: StepInterface,\n  isEditing?: boolean,\n  ignoreWaitForCondition?: boolean,\n) {\n  return (\n    !isEditing &&\n    !ignoreWaitForCondition &&\n    (step?.configuration?.waitFor?.conditions.length ?? 0) > 0\n  );\n}\n\nexport function shouldDelayStep(\n  step: StepInterface | undefined,\n  isEditing: boolean | undefined,\n  isWaitingForCondition: boolean,\n) {\n  return (\n    !isEditing &&\n    !isWaitingForCondition &&\n    typeof step?.configuration?.delay === \"number\" &&\n    step.configuration.delay > 0\n  );\n}\n\nfunction stripStepHtml(value: unknown, ownerDocument: Document) {\n  if (typeof value !== \"string\") return \"\";\n\n  const element = ownerDocument.createElement(\"div\");\n  element.innerHTML = value;\n  return (element.textContent || element.innerText || \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction resolveSpeechSynthesisVoice(synth: SpeechSynthesis, language?: string, voiceId?: string) {\n  if (voiceId === \"__browser-default\") return undefined;\n\n  const voices = synth.getVoices();\n  if (voiceId) {\n    const byId = voices.find((voice) => voice.name === voiceId || voice.voiceURI === voiceId);\n    if (byId) return byId;\n  }\n\n  if (language) {\n    const normalizedLanguage = language.toLowerCase();\n    return voices.find((voice) => voice.lang.toLowerCase().startsWith(normalizedLanguage));\n  }\n\n  return undefined;\n}\n\ntype GuideVoiceOverPlaybackOwner = {\n  token: symbol;\n  stop: () => void;\n};\n\nconst guideVoiceOverPlaybackOwners = new WeakMap<Window, GuideVoiceOverPlaybackOwner>();\n\nfunction useGuideVoiceOver({\n  activeIndex,\n  step,\n  isEditing,\n  isReady,\n  ownerDocument,\n  ownerWindow,\n  onGenerateVoiceOver,\n}: {\n  activeIndex: number | null;\n  step?: StepInterface;\n  isEditing?: boolean;\n  isReady: boolean;\n  ownerDocument: Document;\n  ownerWindow: Window;\n  onGenerateVoiceOver?: (step: StepInterface) => Promise<string | undefined>;\n}) {\n  const audioRef = useRef<HTMLAudioElement | null>(null);\n  const currentUtteranceRef = useRef<SpeechSynthesisUtterance | null>(null);\n  const autoPlayedKeyRef = useRef<string | null>(null);\n  const playbackOwnerTokenRef = useRef<symbol>(Symbol(\"guide-voice-over\"));\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [isBlocked, setIsBlocked] = useState(false);\n  const [isGenerating, setIsGenerating] = useState(false);\n\n  const stepVoiceOver = step?.configuration?.voiceOver;\n  const mode = stepVoiceOver?.source || \"synthetic\";\n  const enabled = activeIndex !== null && !!step && stepVoiceOver?.enabled === true;\n  const audioUrl = stepVoiceOver?.audioUrl;\n  const syntheticText = stepVoiceOver?.text || stripStepHtml(step?.description, ownerDocument);\n  const language = stepVoiceOver?.language || \"en\";\n  const speed = stepVoiceOver?.speed || 1;\n  const pitch = stepVoiceOver?.pitch || 1;\n  const voiceId = stepVoiceOver?.voiceId;\n  const autoPlay = stepVoiceOver?.autoPlay;\n  const shouldPlayAudioUrl = !!audioUrl;\n  const usesProviderVoice = mode === \"synthetic\" && !!(stepVoiceOver?.provider || voiceId);\n  const canUseBrowserSpeech = mode === \"synthetic\" && !usesProviderVoice;\n  const canPlay =\n    enabled && (shouldPlayAudioUrl || (canUseBrowserSpeech && syntheticText.length > 0));\n  const canGenerate = enabled && mode === \"synthetic\" && usesProviderVoice && !!onGenerateVoiceOver;\n  const canRenderControl = canPlay || canGenerate;\n  const autoPlayKey =\n    activeIndex === null\n      ? null\n      : [\n          activeIndex,\n          step?.id || \"\",\n          mode,\n          shouldPlayAudioUrl ? audioUrl || \"\" : syntheticText,\n        ].join(\":\");\n\n  const releasePlaybackOwner = useCallback(() => {\n    const currentOwner = guideVoiceOverPlaybackOwners.get(ownerWindow);\n    if (currentOwner?.token === playbackOwnerTokenRef.current) {\n      guideVoiceOverPlaybackOwners.delete(ownerWindow);\n    }\n  }, [ownerWindow]);\n\n  const stopLocalPlayback = useCallback(\n    ({ releaseOwner = true }: { releaseOwner?: boolean } = {}) => {\n      if (audioRef.current) {\n        audioRef.current.pause();\n        audioRef.current.currentTime = 0;\n      }\n      if (currentUtteranceRef.current) {\n        ownerWindow.speechSynthesis?.cancel();\n        currentUtteranceRef.current = null;\n      }\n      setIsPlaying(false);\n      if (releaseOwner) {\n        releasePlaybackOwner();\n      }\n    },\n    [ownerWindow, releasePlaybackOwner],\n  );\n\n  const claimPlaybackOwner = useCallback(() => {\n    const currentOwner = guideVoiceOverPlaybackOwners.get(ownerWindow);\n    if (currentOwner && currentOwner.token !== playbackOwnerTokenRef.current) {\n      currentOwner.stop();\n    }\n\n    guideVoiceOverPlaybackOwners.set(ownerWindow, {\n      token: playbackOwnerTokenRef.current,\n      stop: () => stopLocalPlayback({ releaseOwner: false }),\n    });\n  }, [ownerWindow, stopLocalPlayback]);\n\n  const stop = useCallback(() => {\n    stopLocalPlayback();\n  }, [stopLocalPlayback]);\n\n  const pause = useCallback(() => {\n    if (audioRef.current) {\n      audioRef.current.pause();\n    }\n    const synth = ownerWindow.speechSynthesis;\n    if (currentUtteranceRef.current && synth?.speaking && !synth.paused) {\n      synth.pause();\n    }\n    setIsPlaying(false);\n  }, [ownerWindow]);\n\n  const play = useCallback(async () => {\n    if ((!canPlay && !canGenerate) || !step) return;\n\n    setIsBlocked(false);\n    claimPlaybackOwner();\n\n    if (!canPlay && canGenerate) {\n      setIsGenerating(true);\n      try {\n        const generatedAudioUrl = await onGenerateVoiceOver?.(step);\n        if (!generatedAudioUrl) {\n          setIsBlocked(true);\n          return;\n        }\n\n        const audio = ownerDocument.createElement(\"audio\");\n        audio.src = generatedAudioUrl;\n        audio.loop = false;\n        audio.playbackRate = speed;\n        audio.onended = () => {\n          audio.currentTime = 0;\n          setIsPlaying(false);\n          releasePlaybackOwner();\n        };\n        audio.onerror = () => {\n          setIsPlaying(false);\n          setIsBlocked(true);\n          releasePlaybackOwner();\n        };\n        if (audioRef.current && audioRef.current.src !== generatedAudioUrl) {\n          audioRef.current.pause();\n          audioRef.current.currentTime = 0;\n        }\n        audioRef.current = audio;\n        await audio.play();\n        setIsPlaying(true);\n      } catch {\n        setIsPlaying(false);\n        setIsBlocked(true);\n      } finally {\n        setIsGenerating(false);\n      }\n      return;\n    }\n\n    if (shouldPlayAudioUrl) {\n      if (!audioUrl) return;\n\n      if (!audioRef.current || audioRef.current.src !== audioUrl) {\n        const audio = ownerDocument.createElement(\"audio\");\n        audio.src = audioUrl;\n        audio.loop = false;\n        audio.onended = () => {\n          audio.currentTime = 0;\n          setIsPlaying(false);\n          releasePlaybackOwner();\n        };\n        audio.onerror = () => {\n          setIsPlaying(false);\n          setIsBlocked(true);\n          releasePlaybackOwner();\n        };\n        if (audioRef.current) {\n          audioRef.current.pause();\n          audioRef.current.currentTime = 0;\n        }\n        audioRef.current = audio;\n      }\n\n      const audio = audioRef.current;\n      try {\n        if (audio.ended) {\n          audio.currentTime = 0;\n        }\n        audio.playbackRate = speed;\n        await audio.play();\n        setIsPlaying(true);\n      } catch {\n        setIsPlaying(false);\n        setIsBlocked(true);\n      }\n      return;\n    }\n\n    const synth = ownerWindow.speechSynthesis;\n    if (!synth || !syntheticText || !canUseBrowserSpeech) return;\n\n    if (synth.paused && currentUtteranceRef.current) {\n      synth.resume();\n      setIsPlaying(true);\n      return;\n    }\n\n    synth.cancel();\n    const SpeechSynthesisUtteranceConstructor =\n      (ownerWindow as any).SpeechSynthesisUtterance || SpeechSynthesisUtterance;\n    const utterance = new SpeechSynthesisUtteranceConstructor(syntheticText);\n    utterance.lang = language;\n    utterance.rate = speed;\n    utterance.pitch = pitch;\n    utterance.voice = resolveSpeechSynthesisVoice(synth, language, voiceId) || null;\n    utterance.onend = () => {\n      if (currentUtteranceRef.current !== utterance) return;\n      currentUtteranceRef.current = null;\n      setIsPlaying(false);\n      releasePlaybackOwner();\n    };\n    utterance.onerror = () => {\n      if (currentUtteranceRef.current !== utterance) return;\n      currentUtteranceRef.current = null;\n      setIsPlaying(false);\n      setIsBlocked(true);\n      releasePlaybackOwner();\n    };\n\n    currentUtteranceRef.current = utterance;\n    setIsPlaying(true);\n    synth.speak(utterance);\n  }, [\n    canGenerate,\n    canPlay,\n    canUseBrowserSpeech,\n    claimPlaybackOwner,\n    audioUrl,\n    mode,\n    onGenerateVoiceOver,\n    ownerDocument,\n    ownerWindow,\n    step,\n    syntheticText,\n    language,\n    speed,\n    pitch,\n    releasePlaybackOwner,\n    shouldPlayAudioUrl,\n    voiceId,\n  ]);\n\n  useEffect(() => {\n    stop();\n    autoPlayedKeyRef.current = null;\n    setIsBlocked(false);\n  }, [activeIndex, step?.id, stop]);\n\n  useEffect(() => {\n    if (enabled && canRenderControl && !isEditing && isReady) return;\n\n    stop();\n    setIsBlocked(false);\n    if (!enabled || activeIndex === null) {\n      autoPlayedKeyRef.current = null;\n    }\n  }, [activeIndex, canRenderControl, enabled, isEditing, isReady, stop]);\n\n  useEffect(() => {\n    if (\n      !enabled ||\n      !canPlay ||\n      isEditing ||\n      !isReady ||\n      autoPlay === false ||\n      !autoPlayKey ||\n      autoPlayedKeyRef.current === autoPlayKey\n    ) {\n      return;\n    }\n\n    const timeout = ownerWindow.setTimeout(() => {\n      autoPlayedKeyRef.current = autoPlayKey;\n      void play();\n    }, 100);\n\n    return () => ownerWindow.clearTimeout(timeout);\n  }, [autoPlay, autoPlayKey, canPlay, enabled, isEditing, isReady, ownerWindow, play]);\n\n  useEffect(() => stop, [stop]);\n\n  if (!enabled || !canRenderControl || isEditing) {\n    return null;\n  }\n\n  return (\n    <button\n      type=\"button\"\n      className={cn(\n        \"guide-voice-over-control flex h-8 w-8 shrink-0 items-center justify-center rounded-[var(--prev-button-radius)] border border-solid border-[var(--prev-button-border-color)] bg-[var(--prev-button-bg-color)] text-[var(--prev-button-text-color)] transition-all duration-200 hover:bg-[var(--prev-button-hover-color)]\",\n        isBlocked && \"text-[var(--color-primary)]\",\n      )}\n      aria-label={isPlaying ? \"Pause voice-over\" : \"Play voice-over\"}\n      disabled={isGenerating}\n      title={\n        isBlocked\n          ? \"Unable to play voice-over. Generate this step again.\"\n          : canPlay\n            ? \"Voice-over\"\n            : \"Generate and play voice-over\"\n      }\n      onClick={() => {\n        if (isPlaying) {\n          pause();\n        } else {\n          void play();\n        }\n      }}\n    >\n      {isPlaying ? <Pause className=\"h-4 w-4\" /> : <Play className=\"h-4 w-4\" />}\n    </button>\n  );\n}\n\nexport function getResolvingTargetState(\n  prev: GuideState,\n  hasTarget: boolean,\n  activeIndex?: number | null,\n): GuideState {\n  if (!hasTarget) {\n    return prev.isWaitingForElement || prev.targetResolutionTimedOut\n      ? { ...prev, isWaitingForElement: false, targetResolutionTimedOut: false }\n      : prev;\n  }\n\n  if (activeIndex !== undefined && prev.activeIndex === activeIndex && prev.elementRect !== null) {\n    return {\n      ...prev,\n      targetElement: null,\n      isTransitioning: false,\n      isWaitingForElement: true,\n      targetResolutionTimedOut: false,\n    };\n  }\n\n  if (\n    prev.targetElement === null &&\n    prev.elementRect === null &&\n    prev.isWaitingForElement &&\n    !prev.isTransitioning\n  ) {\n    return prev;\n  }\n\n  return {\n    ...prev,\n    targetElement: null,\n    elementRect: null,\n    isTransitioning: false,\n    isWaitingForElement: true,\n    targetResolutionTimedOut: false,\n  };\n}\n\nexport function Guide(props: GuideProps) {\n  const {\n    steps,\n    isActive = false,\n    editor,\n    isEditing,\n    ignoreWaitForCondition,\n    ignoreAutoProceed,\n    startIndex = 0,\n    tour,\n    onStop,\n    onDismiss,\n    onSnooze,\n    themeMode,\n    rootElement,\n    ignoreAncestorAriaHiddenTargets,\n    onTargetResolution,\n    ...restConfig\n  } = props;\n  const hasScrolledRef = useRef<boolean>(false);\n  const exitTimeoutRef = useRef<number | null>(null);\n  const popoverTransitionTimeoutRef = useRef<number | null>(null);\n  const highlightedStepRef = useRef<{\n    activeIndex: number;\n    stepId?: string;\n    targetElement: Element | null;\n  } | null>(null);\n  const [delayActive, setDelayActive] = useState(false);\n  const [showStep, setShowStep] = useState(false);\n  const [isExiting, setIsExiting] = useState(false);\n  const [targetResolutionVersion, setTargetResolutionVersion] = useState(0);\n  const beaconRef = useRef<HTMLDivElement | null>(null);\n  const [beaconElementRect, setBeaconElementRect] = useState<DOMRect | null>(null);\n  const suppressedActivationClickRef = useRef<SuppressedActivationClick | null>(null);\n  const isMountedRef = useRef(true);\n\n  const config = useMemo(\n    (): GuideConfig => ({\n      ...defaultConfig,\n      ...restConfig,\n      steps,\n    }),\n    [restConfig, steps],\n  );\n\n  const [state, setState] = useState<GuideState>({\n    activeIndex: null,\n    targetElement: null,\n    elementRect: null,\n    isTransitioning: false,\n    isPopoverTransitioning: false,\n    isWaitingForElement: true,\n    targetResolutionTimedOut: false,\n    isWaitingForCondition: false,\n  });\n\n  const {\n    activeIndex,\n    targetElement,\n    elementRect,\n    isTransitioning,\n    isPopoverTransitioning,\n    isWaitingForElement,\n    targetResolutionTimedOut,\n    isWaitingForCondition,\n  } = state;\n  const isResolvingTarget = isWaitingForElement;\n  const currentStep: StepInterface | undefined =\n    activeIndex !== null && steps?.[activeIndex] ? steps[activeIndex] : undefined;\n  const shouldDisableKeyboardStepNavigation =\n    currentStep?.configuration?.type === \"pointer\" && currentStep.progression === \"elementClick\";\n  const allowClose =\n    currentStep?.isClosable !== undefined ? currentStep.isClosable : config.allowClose !== false;\n  const defaultOverlayClickBehavior =\n    currentStep?.configuration?.type === \"pointer\" && currentStep.progression === \"elementClick\"\n      ? \"none\"\n      : \"closeTour\";\n  const configuredOverlayClickBehavior =\n    currentStep?.configuration?.overlayClickBehavior ??\n    config.overlayClickBehavior ??\n    defaultOverlayClickBehavior;\n  const overlayClickBehavior =\n    isEditing || configuredOverlayClickBehavior === \"none\"\n      ? \"none\"\n      : configuredOverlayClickBehavior === \"close\"\n        ? \"closeTour\"\n        : configuredOverlayClickBehavior;\n  const rootOwnerDocument = rootElement?.ownerDocument ?? document;\n  const rootOwnerWindow = rootOwnerDocument?.defaultView ?? window;\n  const resolvedThemeMode = useResolvedThemeMode(themeMode || \"light\", rootOwnerWindow);\n  const animationSpeed = tour?.configuration?.animation?.speed || 300;\n  const animationEnabled = tour?.configuration?.animation?.enabled !== false;\n  const tourAnimationDirection = tour?.configuration?.animation?.direction || \"auto\";\n  const transitionDuration = config.animate && animationEnabled ? animationSpeed : 0;\n\n  // Ref to store the requestAnimationFrame ID for debouncing scroll/resize updates\n  const rafId = useRef<number | null>(null);\n  const movingTargetRafId = useRef<number | null>(null);\n  const movingTargetWatchRef = useRef({ sawMovement: false, stableFrames: 0, stopAfter: 0 });\n  const lastTargetRectRef = useRef<DOMRect | null>(null);\n  const recoveryInProgressRef = useRef(false);\n  const preCommittedStepIdRef = useRef<string | null>(null);\n  const targetResolutionPhaseRef = useRef<TargetMissingPhase>(\"initial\");\n  const targetLossHandledRef = useRef<Element | null>(null);\n  const pendingTargetAdvanceRef = useRef(false);\n\n  const guideAPI = useMemo(\n    (): GuideAPI => ({ config, state: { activeIndex } }),\n    [config, activeIndex],\n  );\n  const handleTargetDetached = useCallback(\n    (element: Element) => {\n      if (\n        targetLossHandledRef.current === element ||\n        pendingTargetAdvanceRef.current ||\n        activeIndex === null\n      ) {\n        return false;\n      }\n\n      const step = steps[activeIndex];\n      if (step && getStepHasTarget(step)) {\n        const replacement = resolveElementFromSelectorBank(\n          rootOwnerDocument,\n          getStepTargetSelectors(step),\n          getStepTargetFingerprint(step),\n          {\n            elementTargeting: getStepElementTargeting(step),\n            ignoreAncestorAriaHidden: ignoreAncestorAriaHiddenTargets,\n            manualSelector: getStepManualSelector(step),\n          },\n        );\n        if (replacement && replacement !== element) {\n          const rect = getElementViewportRect(replacement, rootOwnerDocument);\n          lastTargetRectRef.current = rect;\n          setState((prev) =>\n            prev.targetElement === element\n              ? { ...prev, targetElement: replacement, elementRect: rect }\n              : prev,\n          );\n          return true;\n        }\n      }\n\n      targetLossHandledRef.current = element;\n      targetResolutionPhaseRef.current = \"detached\";\n      lastTargetRectRef.current = null;\n      onTargetResolution?.({\n        stepId: currentStep?.id,\n        status: \"lost\",\n        phase: \"detached\",\n      });\n      setState((prev) =>\n        prev.targetElement === element\n          ? {\n              ...prev,\n              targetElement: null,\n              elementRect: null,\n              isTransitioning: false,\n              isPopoverTransitioning: false,\n              isWaitingForElement: true,\n              targetResolutionTimedOut: false,\n            }\n          : prev,\n      );\n      setTargetResolutionVersion((version) => version + 1);\n      return true;\n    },\n    [\n      activeIndex,\n      currentStep?.id,\n      ignoreAncestorAriaHiddenTargets,\n      onTargetResolution,\n      rootOwnerDocument,\n      steps,\n    ],\n  );\n  const syncTargetRect = useCallback(\n    (element: Element, options: { completeTransition?: boolean } = {}) => {\n      if (!isElementInDocumentTree(element, rootOwnerDocument)) {\n        return handleTargetDetached(element);\n      }\n\n      const rect = getElementViewportRect(element, rootOwnerDocument);\n      const hasChangedSinceLastSync = hasRoundedRectChanged(lastTargetRectRef.current, rect);\n\n      if (!hasChangedSinceLastSync && !options.completeTransition) {\n        return false;\n      }\n\n      if (hasChangedSinceLastSync) {\n        lastTargetRectRef.current = rect;\n      }\n\n      setState((prev) => {\n        const hasChanged = hasRoundedRectChanged(prev.elementRect, rect);\n\n        if (options.completeTransition) {\n          if (!prev.isTransitioning && !hasChanged) {\n            return prev;\n          }\n\n          return {\n            ...prev,\n            elementRect: hasChanged ? rect : prev.elementRect,\n            isTransitioning: false,\n          };\n        }\n\n        if (hasChanged) {\n          return { ...prev, elementRect: rect };\n        }\n\n        return prev;\n      });\n\n      return hasChangedSinceLastSync;\n    },\n    [handleTargetDetached, rootOwnerDocument],\n  );\n\n  // Determine if click on element should proceed\n  const shouldProceedOnClick = useMemo(\n    () =>\n      !isExiting &&\n      !isPopoverTransitioning &&\n      (currentStep?.progression === \"elementClick\" || false),\n    [currentStep, isExiting, isPopoverTransitioning],\n  );\n\n  // Determine if interaction with the element should be disabled\n  const shouldDisableInteraction = useMemo(\n    () =>\n      // Step-specific disableInteraction overrides global setting for this check\n      isEditing ??\n      currentStep?.disableActiveInteraction ??\n      config.disableActiveInteraction ??\n      false,\n    [currentStep, config.disableActiveInteraction, isEditing],\n  );\n\n  // --- Core Logic Callbacks ---\n  const stopTour = useCallback(\n    (triggerCallback = true) => {\n      if (isExiting || exitTimeoutRef.current !== null) return;\n\n      const activeElement = state.targetElement;\n      const activeStep = currentStep;\n      if (config.onDestroyStarted && activeStep)\n        config.onDestroyStarted(activeElement ?? undefined, activeStep, guideAPI);\n\n      const finishStopTour = () => {\n        if (exitTimeoutRef.current !== null) {\n          rootOwnerWindow.clearTimeout(exitTimeoutRef.current);\n          exitTimeoutRef.current = null;\n        }\n        if (popoverTransitionTimeoutRef.current !== null) {\n          rootOwnerWindow.clearTimeout(popoverTransitionTimeoutRef.current);\n          popoverTransitionTimeoutRef.current = null;\n        }\n\n        setIsExiting(false);\n        targetResolutionPhaseRef.current = \"initial\";\n        targetLossHandledRef.current = null;\n        pendingTargetAdvanceRef.current = false;\n        setState((prev) => ({\n          ...prev,\n          activeIndex: null,\n          targetElement: null,\n          elementRect: null,\n          isTransitioning: false,\n          isPopoverTransitioning: false,\n          isWaitingForElement: false,\n          targetResolutionTimedOut: false,\n          isWaitingForCondition: false,\n        }));\n        if (config.onDeselected && activeStep)\n          config.onDeselected(activeElement ?? undefined, activeStep, guideAPI);\n        if (config.onDestroyed && activeStep)\n          config.onDestroyed(activeElement ?? undefined, activeStep, guideAPI);\n        if (triggerCallback && onStop) onStop();\n      };\n\n      if (activeStep && transitionDuration > 0) {\n        setIsExiting(true);\n        exitTimeoutRef.current = rootOwnerWindow.setTimeout(finishStopTour, transitionDuration);\n        return;\n      }\n\n      finishStopTour();\n    },\n    [\n      config,\n      currentStep,\n      guideAPI,\n      isExiting,\n      onStop,\n      rootOwnerWindow,\n      state.targetElement,\n      transitionDuration,\n    ],\n  );\n\n  const startTour = useCallback(() => {\n    const initialIndex = Math.max(0, Math.min(startIndex, steps.length - 1));\n    const initialStep = steps[initialIndex];\n    const hasInitialTarget = getStepHasTarget(initialStep);\n    const shouldWaitForInitialCondition = shouldWaitForCondition(\n      initialStep,\n      isEditing,\n      ignoreWaitForCondition,\n    );\n\n    if (exitTimeoutRef.current !== null) {\n      rootOwnerWindow.clearTimeout(exitTimeoutRef.current);\n      exitTimeoutRef.current = null;\n    }\n\n    setIsExiting(false);\n    targetResolutionPhaseRef.current = \"initial\";\n    targetLossHandledRef.current = null;\n    pendingTargetAdvanceRef.current = false;\n\n    setState((prev) => ({\n      ...prev,\n      activeIndex: initialIndex,\n      targetElement: null,\n      elementRect: null,\n      isTransitioning: hasInitialTarget && !shouldWaitForInitialCondition,\n      isPopoverTransitioning: false,\n      isWaitingForElement: hasInitialTarget && !shouldWaitForInitialCondition,\n      targetResolutionTimedOut: false,\n      isWaitingForCondition: shouldWaitForInitialCondition,\n    }));\n  }, [ignoreWaitForCondition, isEditing, rootOwnerWindow, startIndex, steps]);\n\n  const moveToStep = useCallback(\n    (index: number, options: { allowWhileResolving?: boolean } = {}) => {\n      if (\n        (!options.allowWhileResolving && (isResolvingTarget || isTransitioning)) ||\n        isExiting ||\n        index < 0 ||\n        index >= steps.length\n      )\n        return;\n      const previousElement = state.targetElement;\n      const previousStep = currentStep;\n      const nextStep = steps[index];\n      const nextStepHasTarget = getStepHasTarget(nextStep);\n      const shouldWaitForNextCondition = shouldWaitForCondition(\n        nextStep,\n        isEditing,\n        ignoreWaitForCondition,\n      );\n      const shouldDelayPopoverEntry =\n        transitionDuration > 0 &&\n        getStepHasTarget(previousStep) &&\n        nextStepHasTarget &&\n        nextStep?.progression !== \"elementClick\";\n\n      targetResolutionPhaseRef.current = \"initial\";\n      targetLossHandledRef.current = null;\n      pendingTargetAdvanceRef.current = false;\n      setState((prev) => ({\n        ...prev,\n        activeIndex: index,\n        targetElement: null,\n        elementRect: null,\n        isTransitioning: nextStepHasTarget && !shouldWaitForNextCondition,\n        isPopoverTransitioning: shouldDelayPopoverEntry,\n        isWaitingForElement: nextStepHasTarget && !shouldWaitForNextCondition,\n        targetResolutionTimedOut: false,\n        isWaitingForCondition: shouldWaitForNextCondition,\n      }));\n\n      if (config.onDeselected && previousStep)\n        config.onDeselected(previousElement ?? undefined, previousStep, guideAPI);\n    },\n    [\n      isTransitioning,\n      isResolvingTarget,\n      isExiting,\n      steps,\n      config.onDeselected,\n      state.targetElement,\n      currentStep,\n      guideAPI,\n      isEditing,\n      ignoreWaitForCondition,\n      transitionDuration,\n    ],\n  );\n\n  const findRecoveryStepIndex = useCallback(() => {\n    if (activeIndex === null || isEditing || !isWaitingForCondition) return null;\n\n    for (let index = activeIndex + 1; index < steps.length; index += 1) {\n      const recovery = steps[index]?.configuration?.recovery;\n      if (!recovery?.allowResumeHere) continue;\n\n      const conditions =\n        recovery.conditions && recovery.conditions.length > 0\n          ? recovery.conditions\n          : steps[index]?.configuration?.waitFor?.conditions;\n      if (!conditions || conditions.length === 0) continue;\n\n      const logic = recovery.logic ?? steps[index]?.configuration?.waitFor?.logic ?? \"and\";\n      if (evaluateStepConditions(conditions, logic, rootOwnerDocument)) {\n        return index;\n      }\n    }\n\n    return null;\n  }, [activeIndex, isEditing, isWaitingForCondition, rootOwnerDocument, steps]);\n\n  const recoverToStep = useCallback(\n    (index: number) => {\n      if (activeIndex === null || index <= activeIndex || index >= steps.length) return;\n      if (recoveryInProgressRef.current) return;\n      recoveryInProgressRef.current = true;\n      props.onNext?.(steps[index - 1]?.id);\n      moveToStep(index);\n    },\n    [activeIndex, moveToStep, props.onNext, steps],\n  );\n\n  const completeStep = (stepId?: string) => {\n    if (stepId && preCommittedStepIdRef.current === stepId) {\n      preCommittedStepIdRef.current = null;\n      return;\n    }\n\n    preCommittedStepIdRef.current = null;\n    props.onNext?.(stepId);\n  };\n\n  const handleNext = () => {\n    if (\n      activeIndex === null ||\n      isResolvingTarget ||\n      isTransitioning ||\n      isPopoverTransitioning ||\n      isExiting\n    )\n      return;\n    // Check step-specific hook first, then global hook\n    const hookHandled = currentStep?.popover?.onNextClick || config.onNextClick;\n    if (hookHandled && currentStep) {\n      // Ensure currentStep exists for hook call\n      hookHandled(targetElement ?? undefined, currentStep, guideAPI);\n      return; // Stop further processing if hook handled it\n    }\n\n    // Default behavior: move to next step or stop\n    if (activeIndex < steps.length - 1) {\n      const nextActiveIndex = activeIndex + 1;\n      moveToStep(nextActiveIndex);\n      // restConfig.trackTourProgress?.(true, currentStep?.id);\n      completeStep(currentStep?.id);\n    } else {\n      // restConfig.trackTourProgress?.(false, currentStep?.id);\n      stopTour();\n      completeStep(currentStep?.id);\n    }\n\n    const nextButtonHref = currentStep?.configuration?.nextButtonHref;\n    const nextButtonIsExternal = currentStep?.configuration?.nextButtonIsExternal;\n\n    if (nextButtonHref) {\n      if (nextButtonIsExternal) {\n        rootOwnerWindow.open(nextButtonHref, \"_blank\");\n      } else {\n        rootOwnerWindow.location.href = nextButtonHref;\n      }\n    }\n  };\n\n  const handlePrevious = () => {\n    if (\n      activeIndex === null ||\n      isResolvingTarget ||\n      isTransitioning ||\n      isPopoverTransitioning ||\n      isExiting\n    )\n      return;\n    // Check step-specific hook first, then global hook\n    const hookHandled = currentStep?.popover?.onPrevClick || config.onPrevClick;\n    if (hookHandled && currentStep) {\n      // Ensure currentStep exists for hook call\n      hookHandled(targetElement ?? undefined, currentStep, guideAPI);\n      return; // Stop further processing if hook handled it\n    }\n\n    // Default behavior: move to prev step\n    if (activeIndex > 0) {\n      const prevActiveIndex = activeIndex - 1;\n      moveToStep(prevActiveIndex);\n      // restConfig.trackTourProgress?.(true, currentStep?.id);\n      props.onNext?.(steps[prevActiveIndex].id);\n    }\n  };\n\n  const handleMissingTargetTimeout = useCallback(\n    (step: StepInterface, stepIndex: number, phase: TargetMissingPhase) => {\n      if (activeIndex !== stepIndex || isExiting) return;\n\n      if (stepIndex < steps.length - 1) {\n        onTargetResolution?.({ stepId: step.id, status: \"skipped\", phase });\n        moveToStep(stepIndex + 1, { allowWhileResolving: true });\n        return;\n      }\n\n      onTargetResolution?.({ stepId: step.id, status: \"interrupted\", phase });\n      stopTour();\n    },\n    [activeIndex, isExiting, moveToStep, onTargetResolution, steps.length, stopTour],\n  );\n\n  const handleClose = useCallback(\n    (\n      _stepId?: string,\n      behavior?: CloseButtonBehavior,\n      source: CloseActionSource = \"dismissControl\",\n    ) => {\n      if (isExiting) return;\n\n      if (!isEditing) {\n        if ((source === \"dismissControl\" && !allowClose) || activeIndex === null) return;\n        const closeBehavior = behavior ?? \"closeTour\";\n        if (closeBehavior === \"closeStep\") {\n          handleNext();\n          return;\n        }\n\n        const hookHandled = currentStep?.popover?.onCloseClick || config.onCloseClick;\n        if (hookHandled) {\n          hookHandled(targetElement ?? undefined, currentStep!, guideAPI);\n          return;\n        }\n\n        onDismiss?.(currentStep?.id);\n        stopTour();\n      }\n    },\n    [\n      allowClose,\n      activeIndex,\n      currentStep,\n      config.onCloseClick,\n      handleNext,\n      targetElement,\n      stopTour,\n      guideAPI,\n      isExiting,\n    ],\n  );\n\n  const handleSnooze = useCallback(\n    (stepId?: string) => {\n      if (isExiting) return;\n\n      if (!isEditing) {\n        onSnooze?.(stepId ?? currentStep?.id);\n        stopTour();\n      }\n    },\n    [currentStep, isEditing, isExiting, onSnooze, stopTour],\n  );\n\n  const handleOverlayClick = useCallback(() => {\n    if (activeIndex === null || isPopoverTransitioning || isExiting) return;\n    if (overlayClickBehavior === \"none\" || config.proceedOnHighlightedElementClick === true) {\n      return;\n    }\n    if (overlayClickBehavior === \"nextStep\" || overlayClickBehavior === \"closeStep\") handleNext();\n    else if (overlayClickBehavior === \"closeTour\" && allowClose)\n      handleClose(undefined, \"closeTour\");\n  }, [\n    activeIndex,\n    overlayClickBehavior,\n    config.proceedOnHighlightedElementClick,\n    allowClose,\n    handleNext,\n    handleClose,\n    isPopoverTransitioning,\n    isExiting,\n  ]);\n\n  // --- Effects ---\n  useEffect(() => {\n    // Activation/Deactivation\n    if (isActive && activeIndex === null && steps.length > 0) startTour();\n    else if (!isActive && activeIndex !== null) stopTour(false);\n  }, [isActive, activeIndex, startTour, stopTour, steps.length]);\n\n  useEffect(() => {\n    return () => {\n      isMountedRef.current = false;\n      if (exitTimeoutRef.current !== null) {\n        rootOwnerWindow.clearTimeout(exitTimeoutRef.current);\n        exitTimeoutRef.current = null;\n      }\n      if (popoverTransitionTimeoutRef.current !== null) {\n        rootOwnerWindow.clearTimeout(popoverTransitionTimeoutRef.current);\n        popoverTransitionTimeoutRef.current = null;\n      }\n    };\n  }, [rootOwnerWindow]);\n\n  const currentPivotSelector = activeIndex !== null ? steps[activeIndex]?.pivotSelector : undefined;\n  const currentCustomPivotSelector =\n    activeIndex !== null ? steps[activeIndex]?.configuration?.customPivotSelector : undefined;\n  const currentPivotSelectorFallbacks =\n    activeIndex !== null\n      ? JSON.stringify(steps[activeIndex]?.configuration?.pivotSelectorFallbacks || [])\n      : undefined;\n  const currentPivotSelectorFingerprint =\n    activeIndex !== null\n      ? JSON.stringify(steps[activeIndex]?.configuration?.pivotSelectorFingerprint || null)\n      : undefined;\n  const currentElementTargeting =\n    activeIndex !== null\n      ? JSON.stringify(steps[activeIndex]?.configuration?.elementTargeting || null)\n      : undefined;\n\n  useEffect(() => {\n    // Find the target only when the active target changes. While a new target is\n    // resolving, keep the current preview visible instead of blinking off.\n    if (activeIndex === null) return;\n    const step = steps[activeIndex];\n    if (!step) {\n      stopTour();\n      return;\n    }\n    if (isWaitingForCondition) return;\n\n    let cancelled = false;\n    let missingTargetSkipTimeout: number | null = null;\n    const abortController = new AbortController();\n\n    const findAndSetElement = async () => {\n      const selector = getStepTargetSelectors(step);\n      const fingerprint = getStepTargetFingerprint(step);\n      const elementTargeting = getStepElementTargeting(step);\n      const hasTarget = getStepHasTarget(step);\n      const resolutionPhase = targetResolutionPhaseRef.current;\n      const isRecoveringTimedOutTarget = targetResolutionTimedOut;\n      const stepLogLabel = `step ${String(step.id)} (${step.configuration?.type || \"dialog\"})`;\n\n      setState((prev) =>\n        prev.activeIndex === activeIndex\n          ? getResolvingTargetState(prev, hasTarget, activeIndex)\n          : prev,\n      );\n\n      let resolution: TargetResolution | null = null;\n      const element = await findElement(selector, rootOwnerDocument, {\n        signal: abortController.signal,\n        fingerprint,\n        elementTargeting,\n        ignoreAncestorAriaHidden: ignoreAncestorAriaHiddenTargets,\n        manualSelector: getStepManualSelector(step),\n        onResolution: (targetResolution) => {\n          resolution = targetResolution;\n        },\n        onTimeout: (selectors) => {\n          console.warn(\n            `Guide: ${stepLogLabel} did not mount to a target element within the wait timeout: \"${selectors.join(\", \")}\"`,\n          );\n        },\n      });\n      if (cancelled) return;\n\n      if (hasTarget && element) {\n        onTargetResolution?.({\n          stepId: step.id,\n          status: \"resolved\",\n          phase: resolutionPhase,\n          via: resolution?.via,\n          matchedSelector: resolution?.matchedSelector,\n        });\n      }\n\n      if (hasTarget && !element) {\n        onTargetResolution?.({\n          stepId: step.id,\n          status: \"failed\",\n          phase: resolutionPhase,\n          willRetry: true,\n        });\n        console.warn(\n          `Guide: ${stepLogLabel} could not mount to any target element for: \"${selector.length > 0 ? selector.join(\", \") : \"saved element fingerprint\"}\"`,\n        );\n        setState((prev) =>\n          prev.activeIndex === activeIndex\n            ? {\n                ...prev,\n                targetElement: null,\n                elementRect: null,\n                isTransitioning: false,\n                isPopoverTransitioning: false,\n                isWaitingForElement: true,\n                targetResolutionTimedOut: true,\n              }\n            : prev,\n        );\n        missingTargetSkipTimeout = rootOwnerWindow.setTimeout(() => {\n          missingTargetSkipTimeout = null;\n          handleMissingTargetTimeout(step, activeIndex, resolutionPhase);\n        }, MISSING_TARGET_RECOVERY_WINDOW_MS);\n        return;\n      }\n\n      if (!element) {\n        setState((prev) => ({\n          ...prev,\n          targetElement: null,\n          elementRect: null,\n          isTransitioning: false,\n          isPopoverTransitioning: false,\n          isWaitingForElement: false,\n          targetResolutionTimedOut: false,\n        }));\n\n        const hook = step.onHighlightStarted || config.onHighlightStarted;\n        if (hook) hook(undefined, step, guideAPI);\n        return;\n      }\n\n      const elementRect = getElementViewportRect(element, rootOwnerDocument);\n      targetLossHandledRef.current = null;\n      targetResolutionPhaseRef.current = \"initial\";\n      setState((prev) => ({\n        ...prev,\n        targetElement: element,\n        elementRect,\n        isTransitioning: false,\n        isWaitingForElement: false,\n        targetResolutionTimedOut: false,\n      }));\n\n      if (hasTarget && (resolutionPhase === \"detached\" || isRecoveringTimedOutTarget)) {\n        onTargetResolution?.({\n          stepId: step.id,\n          status: \"recovered\",\n          phase: resolutionPhase,\n          via: resolution?.via,\n          matchedSelector: resolution?.matchedSelector,\n        });\n      }\n\n      const hook = step.onHighlightStarted || config.onHighlightStarted;\n      if (hook) hook(element ?? undefined, step, guideAPI);\n    };\n\n    void findAndSetElement();\n    return () => {\n      cancelled = true;\n      abortController.abort();\n      if (missingTargetSkipTimeout !== null) {\n        rootOwnerWindow.clearTimeout(missingTargetSkipTimeout);\n        missingTargetSkipTimeout = null;\n      }\n    };\n  }, [\n    activeIndex,\n    currentPivotSelector,\n    currentCustomPivotSelector,\n    currentElementTargeting,\n    currentPivotSelectorFallbacks,\n    currentPivotSelectorFingerprint,\n    isWaitingForCondition,\n    rootOwnerDocument,\n    ignoreAncestorAriaHiddenTargets,\n    steps.length,\n    targetResolutionVersion,\n  ]);\n\n  useEffect(() => {\n    if (activeIndex === null || isExiting || isWaitingForCondition || !targetResolutionTimedOut) {\n      return;\n    }\n\n    const step = steps[activeIndex];\n    if (!getStepHasTarget(step)) return;\n\n    const retryIfTargetMounted = () => {\n      if (\n        resolveElementFromSelectorBank(\n          rootOwnerDocument,\n          getStepTargetSelectors(step),\n          getStepTargetFingerprint(step),\n          {\n            elementTargeting: getStepElementTargeting(step),\n            ignoreAncestorAriaHidden: ignoreAncestorAriaHiddenTargets,\n            manualSelector: getStepManualSelector(step),\n          },\n        )\n      ) {\n        setTargetResolutionVersion((version) => version + 1);\n      }\n    };\n\n    retryIfTargetMounted();\n\n    const observers: MutationObserver[] = [];\n    const observedDocuments = new Set<Document>();\n\n    const observeDocument = (ownerDocument: Document) => {\n      if (!ownerDocument.body || observedDocuments.has(ownerDocument)) return;\n      observedDocuments.add(ownerDocument);\n\n      const MutationObserverConstructor =\n        ownerDocument.defaultView?.MutationObserver ?? rootOwnerWindow.MutationObserver;\n      if (typeof MutationObserverConstructor !== \"function\") return;\n\n      const observer = new MutationObserverConstructor(() => {\n        observeAccessibleDocuments();\n        retryIfTargetMounted();\n      });\n      observer.observe(ownerDocument.body, {\n        childList: true,\n        subtree: true,\n        attributes: true,\n      });\n      observers.push(observer);\n    };\n\n    const observeAccessibleDocuments = () => {\n      [rootOwnerDocument, ...getAccessibleIframeDocuments(rootOwnerDocument)].forEach(\n        observeDocument,\n      );\n    };\n\n    observeAccessibleDocuments();\n\n    return () => observers.forEach((observer) => observer.disconnect());\n  }, [\n    activeIndex,\n    isExiting,\n    isWaitingForCondition,\n    rootOwnerDocument,\n    rootOwnerWindow,\n    steps,\n    targetResolutionTimedOut,\n    ignoreAncestorAriaHiddenTargets,\n  ]);\n\n  useEffect(() => {\n    if (!isPopoverTransitioning) return;\n\n    if (activeIndex === null || isExiting || targetResolutionTimedOut) {\n      setState((prev) =>\n        prev.isPopoverTransitioning ? { ...prev, isPopoverTransitioning: false } : prev,\n      );\n      return;\n    }\n\n    if (isWaitingForElement || isTransitioning || isWaitingForCondition) {\n      return;\n    }\n\n    popoverTransitionTimeoutRef.current = rootOwnerWindow.setTimeout(() => {\n      popoverTransitionTimeoutRef.current = null;\n      setState((prev) =>\n        prev.activeIndex === activeIndex ? { ...prev, isPopoverTransitioning: false } : prev,\n      );\n    }, TARGETED_STEP_ENTRY_DELAY_MS);\n\n    return () => {\n      if (popoverTransitionTimeoutRef.current !== null) {\n        rootOwnerWindow.clearTimeout(popoverTransitionTimeoutRef.current);\n        popoverTransitionTimeoutRef.current = null;\n      }\n    };\n  }, [\n    activeIndex,\n    isExiting,\n    isPopoverTransitioning,\n    isTransitioning,\n    isWaitingForCondition,\n    isWaitingForElement,\n    rootOwnerWindow,\n    targetResolutionTimedOut,\n  ]);\n\n  useEffect(() => {\n    // Calculate rect & trigger highlighted\n    if (activeIndex === null) return;\n\n    const step = steps[activeIndex]; // Needed for element check and hook\n    if (!step) return;\n\n    // Handle cases where targetElement is not available\n    if (!targetElement) {\n      if (!getStepHasTarget(step)) {\n        // Element-less step\n        setState((prev) => {\n          if (prev.elementRect !== null || prev.isTransitioning) {\n            // Only update if rect exists or transitioning, to clear them\n            return { ...prev, elementRect: null, isTransitioning: false };\n          }\n          return prev; // No change needed\n        });\n        const hasAlreadyHighlighted =\n          highlightedStepRef.current?.activeIndex === activeIndex &&\n          highlightedStepRef.current.stepId === step.id &&\n          highlightedStepRef.current.targetElement === null;\n        if (!hasAlreadyHighlighted) {\n          highlightedStepRef.current = {\n            activeIndex,\n            stepId: step.id,\n            targetElement: null,\n          };\n          const hook = step?.onHighlighted || config.onHighlighted;\n          if (hook && step) hook(undefined, step, guideAPI);\n        }\n      } else {\n        // Expected element but not found - clear rect if it exists\n        if (isWaitingForElement) {\n          return;\n        }\n\n        setState((prev) => {\n          if (prev.elementRect !== null) {\n            return { ...prev, elementRect: null };\n          }\n          return prev; // No change needed\n        });\n      }\n      return; // Exit early if no targetElement\n    }\n\n    // --- targetElement exists ---\n    syncTargetRect(targetElement, { completeTransition: true });\n\n    // Scroll into view only once when the element is first highlighted.\n    if (!hasScrolledRef.current && !isElementInsideRootElement(targetElement, rootElement)) {\n      scrollElementIntoView(targetElement, rootOwnerDocument, {\n        behavior: config.animate ? \"smooth\" : \"auto\",\n        block: \"center\",\n        inline: \"center\",\n      });\n      hasScrolledRef.current = true;\n    }\n\n    const hasAlreadyHighlighted =\n      highlightedStepRef.current?.activeIndex === activeIndex &&\n      highlightedStepRef.current.stepId === step.id &&\n      highlightedStepRef.current.targetElement === targetElement;\n    if (!hasAlreadyHighlighted) {\n      highlightedStepRef.current = {\n        activeIndex,\n        stepId: step.id,\n        targetElement,\n      };\n      const hook = step?.onHighlighted || config.onHighlighted;\n      if (hook && step) hook(targetElement, step, guideAPI);\n    }\n  }, [\n    activeIndex,\n    targetElement,\n    isWaitingForElement,\n    config.onHighlighted,\n    config.animate,\n    guideAPI,\n    rootElement,\n    rootOwnerDocument,\n    syncTargetRect,\n  ]);\n\n  // Reset scroll flag when activeIndex changes\n  useEffect(() => {\n    hasScrolledRef.current = false;\n  }, [activeIndex]);\n\n  useEffect(() => {\n    lastTargetRectRef.current = null;\n  }, [targetElement]);\n\n  useEffect(() => {\n    if (activeIndex === null || !targetElement) return;\n\n    const checkTargetConnection = () => {\n      if (!isElementInDocumentTree(targetElement, rootOwnerDocument)) {\n        handleTargetDetached(targetElement);\n      }\n    };\n    const observers: MutationObserver[] = [];\n\n    getElementOwnerDocuments(targetElement, rootOwnerDocument).forEach((ownerDocument) => {\n      const MutationObserverConstructor =\n        ownerDocument.defaultView?.MutationObserver ?? rootOwnerWindow.MutationObserver;\n      const observedRoot = ownerDocument.documentElement;\n      if (typeof MutationObserverConstructor !== \"function\" || !observedRoot) return;\n\n      const observer = new MutationObserverConstructor(checkTargetConnection);\n      observer.observe(observedRoot, { childList: true, subtree: true });\n      observers.push(observer);\n    });\n\n    return () => observers.forEach((observer) => observer.disconnect());\n  }, [activeIndex, handleTargetDetached, rootOwnerDocument, rootOwnerWindow, targetElement]);\n\n  useEffect(() => {\n    // Keep overlay and popover geometry synced with the highlighted element.\n    if (activeIndex === null || !targetElement) return;\n\n    const updateRect = () => {\n      if (rafId.current) {\n        rootOwnerWindow.cancelAnimationFrame(rafId.current);\n      }\n\n      rafId.current = rootOwnerWindow.requestAnimationFrame(() => {\n        if (!targetElement) return;\n        syncTargetRect(targetElement);\n      });\n    };\n\n    const stopMovingTargetWatch = () => {\n      if (movingTargetRafId.current) {\n        rootOwnerWindow.cancelAnimationFrame(movingTargetRafId.current);\n        movingTargetRafId.current = null;\n      }\n    };\n\n    const watchMovingTarget = () => {\n      const didMove = syncTargetRect(targetElement);\n      const watch = movingTargetWatchRef.current;\n      watch.sawMovement = watch.sawMovement || didMove;\n      watch.stableFrames = didMove ? 0 : watch.stableFrames + 1;\n\n      if (\n        rootOwnerWindow.performance.now() >= watch.stopAfter ||\n        (watch.sawMovement && watch.stableFrames >= MOVING_TARGET_STABLE_FRAMES)\n      ) {\n        stopMovingTargetWatch();\n        return;\n      }\n\n      movingTargetRafId.current = rootOwnerWindow.requestAnimationFrame(watchMovingTarget);\n    };\n\n    const startMovingTargetWatch = (durationMs = 350) => {\n      const now = rootOwnerWindow.performance.now();\n      movingTargetWatchRef.current = {\n        sawMovement: false,\n        stableFrames: 0,\n        stopAfter: now + Math.min(durationMs, MOVING_TARGET_WATCH_MAX_MS),\n      };\n\n      if (movingTargetRafId.current === null) {\n        movingTargetRafId.current = rootOwnerWindow.requestAnimationFrame(watchMovingTarget);\n      }\n    };\n\n    const handleMotionStart = (event: Event) => {\n      if (!eventMayMoveTarget(event, targetElement)) return;\n      const motionTarget = isElementNode(event.target) ? event.target : null;\n      const duration = motionTarget\n        ? getMaxCssMotionTimeMs(\n            motionTarget,\n            motionTarget.ownerDocument.defaultView ?? rootOwnerWindow,\n          )\n        : MOVING_TARGET_WATCH_MAX_MS;\n      startMovingTargetWatch(duration);\n    };\n\n    const scrollUpdateTargets = getScrollUpdateTargets(targetElement, rootOwnerDocument);\n    const resizeUpdateWindows = getElementOwnerWindows(targetElement, rootOwnerDocument);\n    const motionDocuments = getElementOwnerDocuments(targetElement, rootOwnerDocument);\n    const scrollListenerOptions = { capture: true, passive: true };\n    scrollUpdateTargets.forEach((target) => {\n      target.addEventListener(\"scroll\", updateRect, scrollListenerOptions);\n    });\n    resizeUpdateWindows.forEach((ownerWindow) =>\n      ownerWindow.addEventListener(\"resize\", updateRect),\n    );\n    motionDocuments.forEach((ownerDocument) => {\n      ownerDocument.addEventListener(\"transitionrun\", handleMotionStart, true);\n      ownerDocument.addEventListener(\"transitionstart\", handleMotionStart, true);\n      ownerDocument.addEventListener(\"animationstart\", handleMotionStart, true);\n    });\n    const resizeObservers: ResizeObserver[] = [];\n    getResizeObserverElements(targetElement, rootOwnerDocument).forEach((observedElement) => {\n      const ResizeObserverConstructor =\n        observedElement.ownerDocument.defaultView?.ResizeObserver ?? rootOwnerWindow.ResizeObserver;\n      if (typeof ResizeObserverConstructor !== \"function\") return;\n\n      const observer = new ResizeObserverConstructor(updateRect);\n      observer.observe(observedElement);\n      resizeObservers.push(observer);\n    });\n\n    // Initial call to set position correctly if already scrolled\n    updateRect();\n    startMovingTargetWatch(Math.max(350, transitionDuration + 100));\n\n    return () => {\n      scrollUpdateTargets.forEach((target) => {\n        target.removeEventListener(\"scroll\", updateRect, scrollListenerOptions);\n      });\n      resizeUpdateWindows.forEach((ownerWindow) =>\n        ownerWindow.removeEventListener(\"resize\", updateRect),\n      );\n      motionDocuments.forEach((ownerDocument) => {\n        ownerDocument.removeEventListener(\"transitionrun\", handleMotionStart, true);\n        ownerDocument.removeEventListener(\"transitionstart\", handleMotionStart, true);\n        ownerDocument.removeEventListener(\"animationstart\", handleMotionStart, true);\n      });\n      resizeObservers.forEach((observer) => observer.disconnect());\n      if (rafId.current) {\n        rootOwnerWindow.cancelAnimationFrame(rafId.current);\n      }\n      stopMovingTargetWatch();\n    };\n    // Re-run effect if the targetElement changes (new step)\n  }, [\n    activeIndex,\n    rootOwnerDocument,\n    rootOwnerWindow,\n    syncTargetRect,\n    targetElement,\n    transitionDuration,\n  ]);\n\n  useEffect(() => {\n    // Keyboard controls\n    if (activeIndex === null || !config.keyboardControl) return;\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (isEditing) return;\n      if (isResolvingTarget || isTransitioning || isPopoverTransitioning) return;\n      if (e.key === \"ArrowRight\") {\n        e.preventDefault();\n        if (shouldDisableKeyboardStepNavigation) return;\n\n        handleNext();\n      } else if (e.key === \"ArrowLeft\") {\n        e.preventDefault();\n        if (shouldDisableKeyboardStepNavigation) return;\n\n        handlePrevious();\n      } else if (e.key === \"Escape\") {\n        e.preventDefault();\n        handleClose();\n      }\n    };\n\n    rootOwnerDocument.addEventListener(\"keyup\", handleKeyDown, true);\n    return () => rootOwnerDocument.removeEventListener(\"keyup\", handleKeyDown, true);\n  }, [\n    activeIndex,\n    config.keyboardControl,\n    isTransitioning,\n    isPopoverTransitioning,\n    isResolvingTarget,\n    handleNext,\n    handlePrevious,\n    handleClose,\n    rootOwnerDocument,\n    shouldDisableKeyboardStepNavigation,\n  ]);\n\n  useEffect(() => {\n    // Body classes\n    const bodyClass = config.animate ? \"guide-fade\" : \"guide-simple\";\n    if (activeIndex !== null) {\n      rootOwnerDocument.body.classList.add(bodyClass);\n    } else {\n      rootOwnerDocument.body.classList.remove(\"guide-fade\", \"guide-simple\");\n    }\n    return () => rootOwnerDocument.body.classList.remove(\"guide-fade\", \"guide-simple\");\n  }, [activeIndex, config.animate, rootOwnerDocument]);\n\n  // EFFECT: Add click listener to highlighted element if proceedOnClick is enabled\n  useEffect(() => {\n    if (\n      activeIndex === null ||\n      !targetElement ||\n      !shouldProceedOnClick ||\n      shouldDisableInteraction\n    ) {\n      return; // Do nothing if tour not active, no element, option disabled, or interaction forbidden\n    }\n\n    const targetOwnerWindow = targetElement.ownerDocument.defaultView;\n    const eventWindows = Array.from(\n      new Set([rootOwnerWindow, targetOwnerWindow].filter(Boolean)),\n    ) as Window[];\n    const previousCursor = isHTMLElementForOwnerDocument(targetElement)\n      ? targetElement.style.cursor\n      : undefined;\n    const navigationElement = getNavigationElement(targetElement);\n\n    let hasAdvanced = false;\n    let pointerdownFallbackTimeout: number | null = null;\n\n    const clearPointerdownFallback = () => {\n      if (pointerdownFallbackTimeout === null) return;\n      rootOwnerWindow.clearTimeout(pointerdownFallbackTimeout);\n      pointerdownFallbackTimeout = null;\n    };\n\n    const advanceFromEvent = () => {\n      clearPointerdownFallback();\n      if (hasAdvanced) {\n        return;\n      }\n\n      hasAdvanced = true;\n      pendingTargetAdvanceRef.current = true;\n      rootOwnerWindow.setTimeout(() => {\n        if (isMountedRef.current) {\n          handleNext();\n        }\n      }, 0);\n    };\n\n    const tryAdvanceFromEvent = (event: Event) => {\n      if (isSuppressedActivationClick(event, suppressedActivationClickRef.current)) {\n        if (navigationElement) {\n          return;\n        }\n        suppressedActivationClickRef.current = null;\n        advanceFromEvent();\n        return;\n      }\n\n      if (hasAdvanced) {\n        return;\n      }\n\n      if (eventHitsGuidePopover(event)) {\n        clearPointerdownFallback();\n        suppressedActivationClickRef.current = null;\n        return;\n      }\n\n      if (!eventHitsTargetElement(event, targetElement)) {\n        return;\n      }\n\n      if (event instanceof MouseEvent && event.button !== 0) {\n        return;\n      }\n\n      if (event.type === \"click\" && navigationElement) {\n        return;\n      }\n\n      if (event.type === \"pointerdown\") {\n        suppressedActivationClickRef.current = {\n          target: event.target,\n          timeStamp: event.timeStamp,\n        };\n        clearPointerdownFallback();\n        pointerdownFallbackTimeout = rootOwnerWindow.setTimeout(\n          advanceFromEvent,\n          POINTERDOWN_ADVANCE_FALLBACK_MS,\n        );\n        return;\n      }\n\n      clearPointerdownFallback();\n      suppressedActivationClickRef.current = null;\n      advanceFromEvent();\n    };\n\n    const tryAdvanceFromNavigationClick = (event: MouseEvent) => {\n      if (hasAdvanced) {\n        return;\n      }\n\n      if (event.button !== 0) {\n        return;\n      }\n\n      if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n        return;\n      }\n\n      if (!eventHitsTargetElement(event, targetElement)) {\n        return;\n      }\n\n      clearPointerdownFallback();\n      suppressedActivationClickRef.current = null;\n      if (currentStep?.id) {\n        preCommittedStepIdRef.current = currentStep.id;\n        props.onNext?.(currentStep.id);\n      }\n      advanceFromEvent();\n    };\n\n    for (const eventWindow of eventWindows) {\n      eventWindow.addEventListener(\"pointerdown\", tryAdvanceFromEvent, true);\n      eventWindow.addEventListener(\"click\", tryAdvanceFromEvent, true);\n    }\n    navigationElement?.addEventListener(\"click\", tryAdvanceFromNavigationClick);\n    if (isHTMLElementForOwnerDocument(targetElement)) {\n      targetElement.style.cursor = \"pointer\";\n    }\n\n    return () => {\n      clearPointerdownFallback();\n      for (const eventWindow of eventWindows) {\n        eventWindow.removeEventListener(\"pointerdown\", tryAdvanceFromEvent, true);\n        eventWindow.removeEventListener(\"click\", tryAdvanceFromEvent, true);\n      }\n      navigationElement?.removeEventListener(\"click\", tryAdvanceFromNavigationClick);\n      if (isHTMLElementForOwnerDocument(targetElement)) {\n        targetElement.style.cursor = previousCursor ?? \"\";\n      }\n    };\n  }, [\n    activeIndex,\n    targetElement,\n    shouldProceedOnClick,\n    shouldDisableInteraction,\n    handleNext,\n    currentStep?.id,\n    props.onNext,\n    rootOwnerWindow,\n  ]);\n\n  useEffect(() => {\n    recoveryInProgressRef.current = false;\n  }, [activeIndex]);\n\n  useEffect(() => {\n    // Handle step delay\n    if (activeIndex === null) {\n      setDelayActive(false);\n      return;\n    }\n\n    if (shouldDelayStep(currentStep, isEditing, isWaitingForCondition)) {\n      setDelayActive(true);\n      const timeout = setTimeout(\n        () => {\n          setDelayActive(false);\n        },\n        Number(currentStep?.configuration?.delay) * 1000,\n      );\n      return () => clearTimeout(timeout);\n    } else {\n      setDelayActive(false);\n    }\n  }, [activeIndex, currentStep, isEditing, isWaitingForCondition]);\n\n  // Add effect for autoProceed\n  useEffect(() => {\n    if (\n      activeIndex === null ||\n      !currentStep?.configuration?.autoProceed ||\n      ignoreAutoProceed ||\n      isEditing ||\n      isExiting ||\n      isTransitioning ||\n      isPopoverTransitioning ||\n      isWaitingForElement ||\n      isWaitingForCondition\n    ) {\n      return;\n    }\n\n    const autoProceedTimeout = setTimeout(\n      () => {\n        handleNext();\n      },\n      Number(currentStep.configuration.autoProceed) * 1000,\n    );\n\n    return () => clearTimeout(autoProceedTimeout);\n  }, [\n    activeIndex,\n    currentStep?.configuration?.autoProceed,\n    ignoreAutoProceed,\n    isEditing,\n    isExiting,\n    isTransitioning,\n    isPopoverTransitioning,\n    isWaitingForElement,\n    isWaitingForCondition,\n    handleNext,\n  ]);\n\n  const handleConditionMet = useCallback(() => {\n    setDelayActive(shouldDelayStep(currentStep, isEditing, false));\n    setState((prev) => {\n      if (!prev.isWaitingForCondition) return prev;\n\n      const hasTarget = getStepHasTarget(currentStep);\n      return {\n        ...prev,\n        isWaitingForCondition: false,\n        isTransitioning: hasTarget,\n        isWaitingForElement: hasTarget,\n        targetResolutionTimedOut: false,\n      };\n    });\n  }, [currentStep, isEditing]);\n\n  useStepCondition(\n    currentStep?.configuration?.waitFor,\n    handleConditionMet,\n    rootOwnerDocument,\n    activeIndex !== null && !isEditing && !isExiting && !isTransitioning && isWaitingForCondition,\n  );\n\n  useEffect(() => {\n    if (activeIndex === null || isEditing || isExiting || isTransitioning || !isWaitingForCondition)\n      return;\n\n    const tryRecover = () => {\n      const recoveryIndex = findRecoveryStepIndex();\n      if (recoveryIndex !== null) {\n        recoverToStep(recoveryIndex);\n      }\n    };\n\n    tryRecover();\n\n    const observer = rootOwnerWindow.MutationObserver\n      ? new rootOwnerWindow.MutationObserver(tryRecover)\n      : null;\n    observer?.observe(rootOwnerDocument.body, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n    });\n\n    const interval = rootOwnerWindow.setInterval(tryRecover, 500);\n\n    return () => {\n      observer?.disconnect();\n      rootOwnerWindow.clearInterval(interval);\n    };\n  }, [\n    activeIndex,\n    findRecoveryStepIndex,\n    isEditing,\n    isExiting,\n    isTransitioning,\n    isWaitingForCondition,\n    recoverToStep,\n    rootOwnerDocument,\n    rootOwnerWindow,\n  ]);\n\n  // Add beacon handlers\n  const handleBeaconClick = useCallback(() => {\n    if (currentStep?.configuration?.beacon?.showWithStep) {\n      startTour();\n    }\n    setShowStep(true);\n  }, [currentStep?.configuration?.beacon?.showWithStep, startTour]);\n\n  const handleBeaconMouseEnter = useCallback(() => {\n    setShowStep(true);\n  }, [currentStep?.configuration?.beacon?.showWithStep]);\n\n  const handleBeaconMouseLeave = () => {};\n\n  const step = currentStep || steps[activeIndex || 0];\n  const progressSteps = props.progressSteps?.length ? props.progressSteps : steps;\n  const progressStepIndex =\n    step?.id != null\n      ? progressSteps.findIndex((progressStep) => String(progressStep.id) === String(step.id))\n      : -1;\n  const currentProgressStepIndex = progressStepIndex >= 0 ? progressStepIndex : (activeIndex ?? 0);\n\n  const mergedTheme = resolveEngagementTheme({\n    theme: tour?.configuration?.theme,\n    overrideTheme:\n      step?.configuration?.theme?.overrideTheme === true ? step.configuration.theme : undefined,\n    mode: resolvedThemeMode,\n    ownerWindow: rootOwnerWindow,\n  }) as StepConfigurationType[\"theme\"];\n\n  // --- Rendering ---\n  const currentPopoverConfig = step?.configuration?.popover || {};\n  const isBanner = step?.configuration?.type === \"banner\";\n  const isCurrentTargetReady =\n    !getStepHasTarget(currentStep) ||\n    (!isWaitingForElement && !!targetElement && !!elementRect && !targetResolutionTimedOut);\n  const showUI =\n    isEditing ||\n    (activeIndex !== null &&\n      !!currentStep &&\n      !isExiting &&\n      isCurrentTargetReady &&\n      !delayActive &&\n      !isWaitingForCondition);\n  const showOverlay =\n    isEditing ||\n    (activeIndex !== null &&\n      !!currentStep &&\n      !delayActive &&\n      !isWaitingForCondition &&\n      isCurrentTargetReady);\n  const shouldShowBeacon = step?.configuration?.beacon?.show;\n  const measureBeaconRect = useCallback(() => {\n    const beaconElement = beaconRef.current;\n    if (!shouldShowBeacon || !beaconElement) {\n      setBeaconElementRect((prev) => (prev === null ? prev : null));\n      return;\n    }\n\n    const rect = beaconElement.getBoundingClientRect();\n    setBeaconElementRect((prev) => (hasRoundedRectChanged(prev, rect) ? rect : prev));\n  }, [shouldShowBeacon]);\n\n  useLayoutEffect(() => {\n    measureBeaconRect();\n    if (!shouldShowBeacon) return;\n\n    const frameId = rootOwnerWindow.requestAnimationFrame(measureBeaconRect);\n    return () => rootOwnerWindow.cancelAnimationFrame(frameId);\n  }, [\n    measureBeaconRect,\n    rootOwnerWindow,\n    shouldShowBeacon,\n    elementRect,\n    step?.configuration?.beacon?.type,\n    step?.configuration?.beacon?.position,\n    step?.configuration?.beacon?.icon,\n    step?.configuration?.beacon?.label,\n    step?.configuration?.beacon?.hotspotInset,\n    step?.configuration?.beacon?.badgeInset,\n    step?.configuration?.beacon?.labelInset,\n  ]);\n\n  const guideSurfaceElementRect = shouldShowBeacon\n    ? (beaconElementRect ?? elementRect)\n    : elementRect;\n  const isGuideSurfaceActive = isEditing || activeIndex !== null || isExiting;\n  const shouldShowStep =\n    isGuideSurfaceActive &&\n    (isEditing || !!currentStep) &&\n    (isEditing || step?.configuration?.beacon?.showWithStep || showStep || !shouldShowBeacon);\n  const showPopover = showUI && !isPopoverTransitioning;\n  const shouldRenderPopover = shouldShowStep && (showPopover || isExiting);\n  const voiceOverControl = useGuideVoiceOver({\n    activeIndex,\n    step: currentStep,\n    isEditing,\n    isReady: shouldRenderPopover && showPopover,\n    ownerDocument: rootOwnerDocument,\n    ownerWindow: rootOwnerWindow,\n    onGenerateVoiceOver: props.onGenerateVoiceOver,\n  });\n\n  return (\n    <>\n      {!isBanner && shouldShowStep && (\n        <Overlay\n          show={showOverlay && !isExiting}\n          elementRect={guideSurfaceElementRect}\n          onClick={handleOverlayClick}\n          className={config.overlayClass}\n          color={mergedTheme?.overlayColor}\n          opacity={(() => {\n            const rawValue = mergedTheme?.overlayColorOpacity;\n            const opacity = rawValue != null ? Number(rawValue) / 100 : NaN;\n            return isNaN(opacity) ? 0.28 : opacity;\n          })()}\n          stagePadding={config.stagePadding}\n          stageRadius={config.stageRadius}\n          background={mergedTheme?.overrideOverlayBackground}\n          animate={!!config.animate && animationEnabled}\n          isExitAnimating={isExiting}\n          animationSpeed={animationSpeed}\n          rootElement={rootElement}\n        />\n      )}\n      {shouldRenderPopover && (\n        <Popover\n          key={currentStep?.id ?? activeIndex ?? \"guide-popover\"}\n          show={showPopover}\n          elementRect={guideSurfaceElementRect}\n          config={currentPopoverConfig}\n          className={config.popoverClass}\n          isFirstStep={activeIndex === 0}\n          isLastStep={activeIndex !== null && activeIndex === steps.length - 1}\n          currentStepIndex={activeIndex ?? 0}\n          progressStepIndex={currentProgressStepIndex}\n          progressTotalSteps={progressSteps.length}\n          isEditing={isEditing}\n          isWaitingForCondition={isWaitingForCondition}\n          ignoreAutoProceed={ignoreAutoProceed}\n          editor={editor}\n          step={currentStep}\n          totalSteps={steps.length}\n          onNext={handleNext}\n          tour={tour}\n          onDismiss={onDismiss}\n          onSnooze={handleSnooze}\n          referenceElement={targetElement}\n          onPrev={handlePrevious}\n          onClose={handleClose}\n          onOpenWidget={config.onOpenWidget}\n          onTrackEvent={config.onTrackEvent}\n          nextBtnText={config.nextBtnText}\n          prevBtnText={config.prevBtnText}\n          doneBtnText={config.doneBtnText}\n          closeBtnText={config.closeBtnText}\n          progressText={config.progressText}\n          animate={!!config.animate && animationEnabled}\n          hideButtonsForProceed={shouldProceedOnClick && !shouldDisableInteraction}\n          rootElement={rootElement}\n          isTransitioning={isPopoverTransitioning}\n          isExitAnimating={isExiting}\n          mergedTheme={mergedTheme}\n          animationDirection={\n            currentStep?.configuration?.animationDirection || tourAnimationDirection\n          }\n          animationSpeed={animationSpeed}\n          stagePadding={config.stagePadding}\n          voiceOverControl={voiceOverControl}\n        />\n      )}\n      {shouldShowBeacon && currentStep?.configuration?.beacon && (\n        <Beacon\n          ref={beaconRef}\n          elementRect={elementRect}\n          show={true}\n          type={currentStep.configuration.beacon.type}\n          position={currentStep.configuration.beacon.position}\n          icon={currentStep.configuration.beacon.icon}\n          label={currentStep.configuration.beacon.label}\n          hotspotInset={currentStep.configuration.beacon.hotspotInset}\n          badgeInset={currentStep.configuration.beacon.badgeInset}\n          labelInset={currentStep.configuration.beacon.labelInset}\n          onClick={handleBeaconClick}\n          onMouseEnter={handleBeaconMouseEnter}\n          onMouseLeave={handleBeaconMouseLeave}\n          defaultStyles={\n            {\n              \"--badge-bg\": mergedTheme?.badgeBg || \"#777\",\n              \"--badge-text\": mergedTheme?.badgeText || \"#FFF\",\n              \"--badge-size\": `${mergedTheme?.badgeSize || 16}px`,\n              \"--badge-radius\": `${mergedTheme?.badgeRadius || 6}px`,\n              \"--beacon-bg\": mergedTheme?.beaconBg || \"#3912e2\",\n            } as React.CSSProperties\n          }\n        />\n      )}\n    </>\n  );\n}\n","import {\n  ButtonWidgetTarget,\n  StepConfigurationType,\n  StepInterface,\n  TourInterface,\n} from \"@userorbit/types\";\nimport React, { useCallback } from \"react\";\nimport { Button } from \"../../ui/button\";\nimport { Guide, type StepTargetResolutionReport } from \"../guide\";\n\ntype StepPreviewProps = {\n  filteredSteps: StepInterface[];\n  progressSteps?: StepInterface[];\n  step?: StepInterface;\n  closePreview?: () => void;\n  outlineStyles?: React.CSSProperties;\n  tour: TourInterface;\n  setOutlineReference?: (ele: HTMLElement) => void;\n  trackTourProgress?: (\n    suspendTour: boolean,\n    stepId?: string | number,\n    options?: { snooze?: boolean },\n  ) => void;\n  onOpenWidget?: (target: ButtonWidgetTarget) => void;\n  onTrackEvent?: (eventName: string) => void;\n  isEditorPreview?: boolean;\n  isEditing?: boolean;\n  editor?: React.ReactNode;\n  rootElement?: HTMLElement;\n  themeMode?: \"light\" | \"dark\" | \"system\";\n  onTargetResolution?: (report: StepTargetResolutionReport) => void;\n};\n\nexport function createPreviewSteps(\n  steps: StepInterface[],\n  isEditorPreview?: boolean,\n): StepInterface[] {\n  if (!isEditorPreview) {\n    return steps;\n  }\n\n  return steps.map((step) => ({\n    ...step,\n    configuration: {\n      ...step.configuration,\n      autoProceed: false,\n    },\n  }));\n}\n\nconst StepPreview = ({\n  filteredSteps,\n  progressSteps,\n  closePreview,\n  trackTourProgress,\n  onOpenWidget,\n  onTrackEvent,\n  tour,\n  isEditorPreview,\n  isEditing,\n  step,\n  editor,\n  rootElement,\n  themeMode,\n  onTargetResolution,\n}: StepPreviewProps) => {\n  const handleNext = (currentStepId?: string) => {\n    trackTourProgress?.(false, currentStepId);\n  };\n\n  const suspendTour = (currentStepId?: string) => {\n    closePreview?.();\n    trackTourProgress?.(true, currentStepId);\n  };\n\n  const snoozeTour = (currentStepId?: string) => {\n    closePreview?.();\n    trackTourProgress?.(false, currentStepId, { snooze: true });\n  };\n\n  const handleGuideStop = useCallback(() => {\n    if (isEditorPreview) {\n      return;\n    }\n\n    closePreview?.();\n  }, [closePreview, isEditorPreview]);\n\n  const active = filteredSteps?.[0] || step;\n  const isBeacon =\n    active?.configuration?.type === \"pointer\" && active?.progression !== \"elementClick\";\n  const hasKeyboardControl = isEditing || !isBeacon;\n  const previewSteps = createPreviewSteps(\n    filteredSteps?.length ? filteredSteps : step ? [step] : [],\n    isEditorPreview,\n  );\n\n  return (\n    <>\n      <Guide\n        overlayClickBehavior={isEditing ? \"none\" : \"close\"}\n        keyboardControl={hasKeyboardControl}\n        editor={editor}\n        tour={tour}\n        isEditing={isEditing}\n        onNext={handleNext}\n        onDismiss={suspendTour}\n        onSnooze={snoozeTour}\n        steps={previewSteps}\n        progressSteps={progressSteps}\n        isActive={true}\n        onStop={handleGuideStop}\n        rootElement={rootElement}\n        ignoreAncestorAriaHiddenTargets={isEditing || isEditorPreview}\n        onOpenWidget={onOpenWidget}\n        onTrackEvent={onTrackEvent}\n        themeMode={themeMode}\n        onTargetResolution={isEditing || isEditorPreview ? undefined : onTargetResolution}\n      />\n\n      {isEditorPreview && (\n        <div\n          style={{\n            position: \"fixed\",\n            right: \"10px\",\n            top: \"10px\",\n            zIndex: 2147483647,\n            pointerEvents: \"auto\",\n          }}\n        >\n          <Button\n            variant=\"flat\"\n            className=\"bg-neutral-50 text-gray-800 shadow-xl dark:text-neutral-100 sm:dark:bg-neutral-700 sm:dark:hover:bg-neutral-800 sm:dark:hover:text-neutral-100\"\n            onClick={closePreview}\n            rightSlot={\n              <div className=\"pointer-events-none flex aspect-square h-5 select-none items-center justify-center gap-1 rounded border border-solid border-neutral-200 bg-neutral-200 px-1 font-sans text-[0.7rem] font-medium text-neutral-700 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 [&_svg:not([class*='size-'])]:size-3\">\n                Esc\n              </div>\n            }\n          >\n            Exit preview\n          </Button>\n        </div>\n      )}\n    </>\n  );\n};\n\nexport default StepPreview;\n\nexport const defaultStepConfiguration: StepConfigurationType = {\n  progressButtonText: \"Next\",\n  progressButtonPosition: \"right\",\n  contentJustify: \"justify-between\",\n  isClosable: false,\n  customPivotSelector: \"\",\n  showStepCount: true,\n  animationDirection: \"auto\",\n  type: \"dialog\",\n};\n","import { motion } from \"framer-motion\";\nimport type { CSSProperties } from \"react\";\nimport React, { useEffect } from \"react\";\n\nconst PreviewOutline = ({\n  referenceElement,\n  stepProgression,\n  overlayColor,\n}: {\n  referenceElement: HTMLElement;\n  stepProgression: \"elementClick\" | \"progressButton\" | undefined;\n  overlayColor?: string;\n}) => {\n  const [outlineStyles, setOutlineStyles] = React.useState<CSSProperties | null>(null);\n  const [isFixedContainer, setIsFixedContainer] = React.useState(false);\n  const outlineStyleHandler = (isFixed: boolean) => {\n    if (referenceElement) {\n      const { top, width, height, left } = referenceElement.getBoundingClientRect();\n      const outlineStyles: CSSProperties = {\n        top: top + (isFixed ? 0 : window.parent.scrollY),\n        width: width,\n        height: height,\n        left: left + (isFixed ? 0 : window.parent.scrollX),\n        position: isFixed ? \"fixed\" : \"absolute\",\n      };\n      setOutlineStyles(outlineStyles);\n    }\n  };\n\n  useEffect(() => {\n    if (referenceElement && referenceElement != document.body) {\n      let x = referenceElement;\n      let position = null;\n      while (x && x != document.body) {\n        position = window.getComputedStyle(x).position;\n        if (position === \"sticky\" || position === \"fixed\") break;\n        x = x.offsetParent as HTMLElement;\n      }\n      if (position === \"sticky\" || position === \"fixed\") {\n        setIsFixedContainer(true);\n        outlineStyleHandler(true);\n      } else {\n        outlineStyleHandler(false);\n        setIsFixedContainer(false);\n      }\n      setTimeout(() => {\n        referenceElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      }, 0);\n    }\n  }, [referenceElement]);\n  useEffect(() => {\n    const resizeHandler = () => {\n      outlineStyleHandler(isFixedContainer);\n    };\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => window.removeEventListener(\"resize\", resizeHandler);\n  }, [isFixedContainer, referenceElement]);\n\n  return (\n    <>\n      {referenceElement != document.body && (\n        <>\n          <motion.div\n            className={\n              \"pointer-events-none absolute z-[2147483645] rounded-md outline-[rgb(166,166,195),solid,2px]\"\n            }\n            style={{\n              ...outlineStyles,\n              boxShadow: `0px 0px 300vw 300vh ${overlayColor || \"rgba(0,0,0,0.5)\"}`,\n            }}\n            initial={{ opacity: 0.8 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0.5 }}\n            transition={{ duration: 0.3 }}\n          />\n          {outlineStyles && stepProgression === \"elementClick\" ? (\n            <div\n              id=\"block-events\"\n              style={{\n                position: \"fixed\",\n                zIndex: 2147483645,\n                left: 0,\n                right: 0,\n                top: 0,\n              }}\n            >\n              <div\n                id=\"block-top\"\n                style={{\n                  position: isFixedContainer ? \"fixed\" : \"absolute\",\n                  width: \"100vw\",\n                  top: isFixedContainer ? 0 : Number(window.scrollY) * -1,\n                  left: 0,\n                  height: outlineStyles.top,\n                }}\n              />\n              <div\n                id=\"block-right\"\n                style={{\n                  position: isFixedContainer ? \"fixed\" : \"absolute\",\n                  left: `${\n                    Number(outlineStyles.width) +\n                    Number(outlineStyles.left) -\n                    (isFixedContainer ? 0 : window.scrollX)\n                  }px`,\n                  top: 0,\n                  width: \"100vw\",\n                  height: \"100vh\",\n                }}\n              />\n              <div\n                id=\"block-bottom\"\n                style={{\n                  position: isFixedContainer ? \"fixed\" : \"absolute\",\n                  width: \"100vw\",\n                  height: \"100vh\",\n                  left: 0,\n                  top: `${\n                    Number(outlineStyles.top) +\n                    Number(outlineStyles.height) -\n                    (isFixedContainer ? 0 : window.scrollY)\n                  }px`,\n                }}\n              />\n              <div\n                id=\"block-left\"\n                style={{\n                  position: isFixedContainer ? \"fixed\" : \"absolute\",\n                  width: outlineStyles.left,\n                  top: 0,\n                  left: 0,\n                  height: \"100vh\",\n                }}\n              />\n            </div>\n          ) : (\n            <div\n              id=\"block-events\"\n              style={{\n                position: \"fixed\",\n                width: \"100vw\",\n                height: \"100vh\",\n                top: \"0\",\n                zIndex: 2147483645,\n              }}\n              onClick={(e) => e.stopPropagation()}\n            ></div>\n          )}\n        </>\n      )}\n    </>\n  );\n};\n\nexport default PreviewOutline;\n","export * from \"./step-preview\";\nexport * from \"./preview-outline\";\n","import type { DialogPosition, DialogPropsInterface } from \"@userorbit/types\";\nimport { motion } from \"framer-motion\";\nimport React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { cn, hexToRGB } from \"../../shared/lib/utils\";\nimport FocusTrap from \"./focus-trap\";\n\nexport const dialogOverlayStyles: React.CSSProperties = {\n  background: \"#00000078\",\n  position: \"fixed\",\n  top: \"0\",\n  right: \"0\",\n  bottom: \"0\",\n  left: \"0\",\n  width: \"100%\",\n  height: \"100%\",\n  zIndex: 2147483645,\n};\n\nconst DialogContent = (props: {\n  children: JSX.Element;\n  className?: string;\n  position?: DialogPosition;\n  width?: string;\n  customStyles?: CSSProperties;\n  autoFocus?: boolean;\n}) => {\n  const getStyles = () => {\n    switch (props.position) {\n      case \"center\":\n        return {\n          top: \"50%\",\n          left: \"50%\",\n          transform: \"translate(-50%, -50%)\",\n        };\n      case \"bottom-right\":\n        return {\n          bottom: \"20px\",\n          right: \"20px\",\n        };\n      case \"bottom-left\":\n        return {\n          bottom: \"20px\",\n          left: \"20px\",\n        };\n      case \"default\":\n        return {\n          top: \"20%\",\n          left: \"50%\",\n          animation: \"motion-animation .3s ease-in-out\",\n        };\n      default:\n        return {\n          top: \"20%\",\n          left: \"50%\",\n          animation: \"motion-animation .3s ease-in-out\",\n        };\n    }\n  };\n\n  const getAnimationProps = () => {\n    switch (props.position) {\n      case \"center\":\n        return {\n          initial: { opacity: 0, scale: 0.8 },\n          animate: { opacity: 1, scale: 1 },\n          exit: { opacity: 0, scale: 0.8 },\n        };\n      case \"bottom-right\":\n        return {\n          initial: { opacity: 0, x: 50 },\n          animate: { opacity: 1, x: 0 },\n          exit: { opacity: 0, x: 50 },\n        };\n      case \"bottom-left\":\n        return {\n          initial: { opacity: 0, x: -50 },\n          animate: { opacity: 1, x: 0 },\n          exit: { opacity: 0, x: -50 },\n        };\n      default:\n        return {\n          initial: { opacity: 0, y: 16, x: \"-50%\" },\n          animate: { opacity: 1, y: 0, x: \"-50%\" },\n          exit: { opacity: 0, y: 16, x: \"-50%\" },\n        };\n    }\n  };\n\n  return (\n    <motion.div\n      className={cn(\"relative z-[2147483647] overflow-hidden outline-none\", props.className)}\n      style={{\n        width: props.width ? props.width : \"auto\",\n        minWidth: \"360px\",\n        maxWidth: `calc(min(${(props.width !== \"auto\" && props.width) || \"500px\"},80vw))`,\n        height: \"fit-content\",\n        backgroundColor: \"transparent\",\n        position: \"fixed\",\n        // transition: 'transform .4s,opacity .4s,height .4s,box-shadow .2s',\n        boxShadow:\n          \"var(--box-shadow, 0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1))\",\n        border: \"var(--border-width, 1px) solid var(--border-color, #e8e8e8)\",\n        ...props.customStyles,\n        ...getStyles(),\n      }}\n      onClick={(event) => {\n        event.stopPropagation();\n      }}\n      {...getAnimationProps()}\n      transition={{ duration: 0.3, ease: \"easeOut\" }}\n    >\n      <div>{props.children}</div>\n    </motion.div>\n  );\n};\nconst DialogOverlay = (props: DialogPropsInterface) => {\n  return (\n    <FocusTrap autoFocus={props.autoFocus}>\n      <motion.div\n        aria-label={props.title}\n        role=\"dialog\"\n        id=\"uojs\"\n        style={{\n          ...dialogOverlayStyles,\n          backgroundColor: hexToRGB(\n            props.customOverlayStyles?.hex || \"#000\",\n            props.customOverlayStyles?.opacity != null ? props.customOverlayStyles.opacity : 78,\n          ),\n          animation: \"opacity-animation .3s ease-in-out\",\n          ...props.customOverlayStyles,\n        }}\n        onClick={(event) => {\n          event.stopPropagation();\n          if (props.isClosable) {\n            // props.onDismiss?.();\n          }\n        }}\n        onKeyDown={(event) => {\n          if (event.key === \"Escape\" && props.isClosable) {\n            event.stopPropagation();\n            // props.onDismiss?.();\n          }\n        }}\n        initial={{ opacity: 0.8 }}\n        animate={{ opacity: 1 }}\n        exit={{ opacity: 0.5 }}\n        transition={{ duration: 0.3 }}\n      >\n        {props.children}\n      </motion.div>\n    </FocusTrap>\n  );\n};\n\nconst Dialog = (props: DialogPropsInterface) => {\n  return (\n    <DialogOverlay {...props}>\n      <DialogContent\n        className={props.className}\n        width={props.width}\n        position={props.position}\n        customStyles={props.customStyles}\n      >\n        {props.children}\n      </DialogContent>\n    </DialogOverlay>\n  );\n};\n\nexport default Dialog;\n\nexport { DialogContent, Dialog, DialogOverlay, FocusTrap };\n","const PoweredByUserorbit = () => {\n  return (\n    <div className=\"flex w-full justify-center py-4\">\n      <div className=\"card-bg card-radius card-border w-fit px-3 py-0.5 text-xs\">\n        Powered by{\" \"}\n        <a\n          href=\"https://userorbit.com?utm=ref_public_changelog\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Userorbit\n        </a>\n      </div>\n    </div>\n  );\n};\n\nexport { PoweredByUserorbit };\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { IconPhoto, IconX } from \"@tabler/icons-react\";\nimport * as React from \"react\";\nimport { useEffect, useMemo } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { allowsAnonymousFeedback } from \"@userorbit/utils/feedback\";\nimport { z } from \"zod\";\nimport {\n  Button,\n  Input,\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n  Textarea,\n} from \"../../index\";\n\ntype BoardOption = {\n  id: string;\n  name: string;\n  configuration?: { color?: string };\n  meta?: { icon?: string };\n};\n\nconst feedbackFormSchema = z.object({\n  title: z.string().min(4).max(200),\n  text: z.string().optional().nullable(),\n  boardId: z.string(),\n  attachments: z\n    .array(z.object({ url: z.string(), name: z.string(), type: z.string() }))\n    .optional(),\n  name: z.string().optional().nullable(),\n  email: z.string().email().optional().nullable(),\n  status: z.string().optional(),\n  board: z.string().optional(),\n  tags: z.string().optional(),\n});\n\nexport type FeedbackFormType = z.infer<typeof feedbackFormSchema>;\n\nexport type UIFeedbackFormProps = {\n  boards: BoardOption[];\n  isEditMode?: boolean;\n  isPending?: boolean;\n  onClose: () => void;\n  onSubmit: (data: FeedbackFormType) => void;\n  onUploadAttachment?: (file: File) => Promise<{ url: string; name: string; type: string }>;\n  t: (key: string) => string;\n  team?: any;\n  subscriber?: any;\n  boardId: string;\n  editFeedback?: any;\n};\n\nexport const FeedbackForm: React.FC<UIFeedbackFormProps> = ({\n  boards,\n  isEditMode = false,\n  isPending = false,\n  onClose,\n  onSubmit,\n  onUploadAttachment,\n  t,\n  team,\n  subscriber,\n  boardId,\n  editFeedback,\n}) => {\n  const defaultStatus = useMemo(() => {\n    if (!(isEditMode && editFeedback)) return undefined;\n    const s = String(editFeedback.status || \"\").toLowerCase();\n    if (s === \"in-progress\" || s === \"in_progress\") return \"in_progress\";\n    if (s === \"in-review\" || s === \"in_review\") return \"in_review\";\n    if (s === \"completed\" || s === \"done\") return \"completed\";\n    if (s === \"closed\" || s === \"canceled\" || s === \"cancelled\") return \"closed\";\n    if (s === \"planned\" || s === \"todo\" || s === \"backlog\" || s === \"\") return \"planned\";\n    return s;\n  }, [isEditMode, editFeedback]);\n\n  const form = useForm<FeedbackFormType>({\n    resolver: zodResolver(feedbackFormSchema),\n    reValidateMode: \"onChange\",\n    defaultValues: {\n      title: isEditMode && editFeedback ? editFeedback.title : \"\",\n      text: isEditMode && editFeedback ? editFeedback.text : \"\",\n      boardId: isEditMode && editFeedback ? editFeedback.boardId : boardId,\n      status: defaultStatus,\n    },\n  });\n\n  const { register, handleSubmit, setValue, watch, formState } = form;\n  const { errors, isValid } = formState;\n  const currentBoardId = watch(\"boardId\");\n  const titleRef = React.useRef<HTMLInputElement | null>(null);\n  const detailsRef = React.useRef<HTMLTextAreaElement | null>(null);\n  const fileInputRef = React.useRef<HTMLInputElement | null>(null);\n  const titleField = register(\"title\");\n  const detailsField = register(\"text\");\n  const [attachmentPreview, setAttachmentPreview] = React.useState<string | null>(null);\n  const [attachmentName, setAttachmentName] = React.useState<string | null>(null);\n  const [isUploadingAttachment, setIsUploadingAttachment] = React.useState(false);\n  const [attachmentError, setAttachmentError] = React.useState<string | null>(null);\n\n  const submitForm = handleSubmit((data) => {\n    onSubmit(data);\n  });\n\n  useEffect(() => {\n    titleRef.current?.focus();\n  }, []);\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n        event.preventDefault();\n        if (isValid && !isPending && !isUploadingAttachment) {\n          void submitForm();\n        }\n      }\n    };\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleKeyDown);\n  }, [submitForm, isValid, isPending, isUploadingAttachment]);\n\n  useEffect(() => {\n    return () => {\n      if (attachmentPreview) URL.revokeObjectURL(attachmentPreview);\n    };\n  }, [attachmentPreview]);\n\n  const clearAttachment = React.useCallback(() => {\n    setValue(\"attachments\", undefined);\n    setAttachmentName(null);\n    setAttachmentError(null);\n    setAttachmentPreview((current) => {\n      if (current) URL.revokeObjectURL(current);\n      return null;\n    });\n  }, [setValue]);\n\n  const handleAttachmentChange = React.useCallback(\n    async (event: React.ChangeEvent<HTMLInputElement>) => {\n      const file = event.target.files?.[0];\n      if (!file) return;\n\n      if (!file.type.startsWith(\"image/\")) {\n        setAttachmentError(\"Only image files are supported.\");\n        return;\n      }\n\n      if (!onUploadAttachment) {\n        setAttachmentError(\"Attachments are not available.\");\n        return;\n      }\n\n      setAttachmentError(null);\n      setIsUploadingAttachment(true);\n      setAttachmentName(file.name);\n      setAttachmentPreview((current) => {\n        if (current) URL.revokeObjectURL(current);\n        return URL.createObjectURL(file);\n      });\n\n      try {\n        const uploaded = await onUploadAttachment(file);\n        setValue(\"attachments\", [uploaded], { shouldDirty: true, shouldValidate: true });\n      } catch {\n        clearAttachment();\n        setAttachmentError(\"Failed to upload image.\");\n      } finally {\n        setIsUploadingAttachment(false);\n        if (fileInputRef.current) fileInputRef.current.value = \"\";\n      }\n    },\n    [clearAttachment, onUploadAttachment, setValue],\n  );\n\n  return (\n    <div className=\"pointer-events-auto mx-auto flex max-h-[90vh] w-full max-w-[min(32rem,94vw)] flex-col overflow-hidden rounded-lg bg-[#FCFCFC] shadow-lg ring-1 ring-gray-900/20 dark:bg-gray-900 dark:shadow-black dark:ring-white/10\">\n      <div>\n        <form onSubmit={submitForm}>\n          <div className=\"flex flex-nowrap items-center justify-between gap-2 px-4 pb-2 pt-4\">\n            <h2 className=\"m-0 min-w-0 truncate text-base font-semibold text-gray-900 dark:text-gray-50\">\n              {isEditMode ? \"Edit feedback\" : \"Submit feedback\"}\n            </h2>\n          </div>\n\n          <div className=\"min-h-0 flex-1 overflow-y-auto px-0 py-1.5\">\n            <div className=\"flex w-full flex-col gap-y-4 px-4 py-4\">\n              {boards.length > 1 && (\n                <div className=\"space-y-1\">\n                  <label\n                    htmlFor=\"boardId\"\n                    className=\"block text-sm font-semibold text-neutral-500 dark:text-neutral-400\"\n                  >\n                    Board\n                  </label>\n                  <Select\n                    value={currentBoardId}\n                    onValueChange={(v: string) => setValue(\"boardId\" as never, v as never)}\n                  >\n                    <SelectTrigger\n                      id=\"boardId\"\n                      className=\"h-10 w-full justify-between rounded-md border-neutral-200 bg-transparent px-3 text-md font-normal text-neutral-900 shadow-sm focus:ring-1 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100\"\n                    >\n                      <SelectValue placeholder=\"Select board...\" />\n                    </SelectTrigger>\n                    <SelectContent>\n                      {boards.map((b) => (\n                        <SelectItem key={b.id} value={b.id}>\n                          {b.name}\n                        </SelectItem>\n                      ))}\n                    </SelectContent>\n                  </Select>\n                </div>\n              )}\n\n              <div className=\"space-y-1\">\n                <label\n                  htmlFor=\"title\"\n                  className=\"block text-sm font-semibold text-neutral-500 dark:text-neutral-400\"\n                >\n                  Title\n                </label>\n                <Input\n                  id=\"title\"\n                  type=\"text\"\n                  placeholder=\"Submission title\"\n                  required\n                  className=\"h-10 rounded-md border-neutral-200 bg-transparent px-3 text-md text-neutral-900 shadow-sm placeholder:text-neutral-500 focus:ring-1 sm:px-3 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-400\"\n                  {...titleField}\n                  ref={(node) => {\n                    titleField.ref(node);\n                    titleRef.current = node;\n                  }}\n                  onKeyDown={(event) => {\n                    if (event.key === \"Enter\" && !(event.metaKey || event.ctrlKey)) {\n                      event.preventDefault();\n                      detailsRef.current?.focus();\n                    }\n                  }}\n                />\n                {errors.title && (\n                  <p className=\"mt-1 text-xs text-red-500\">{t(\"feedback.titleMinLength\")}</p>\n                )}\n              </div>\n\n              <div className=\"space-y-1\">\n                <label\n                  htmlFor=\"text\"\n                  className=\"block text-sm font-semibold text-neutral-500 dark:text-neutral-400\"\n                >\n                  Details\n                </label>\n                <Textarea\n                  id=\"text\"\n                  placeholder=\"Submission details\"\n                  className=\"min-h-[15rem] max-h-[19rem] resize-y rounded-md border-neutral-200 bg-transparent px-3 py-2 text-md text-neutral-900 shadow-sm placeholder:text-neutral-500 focus:ring-1 sm:px-3 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-400\"\n                  {...detailsField}\n                  ref={(node) => {\n                    detailsField.ref(node);\n                    detailsRef.current = node;\n                  }}\n                />\n              </div>\n\n              {(attachmentPreview || attachmentError) && (\n                <div className=\"pt-1\">\n                  {attachmentPreview && (\n                    <div className=\"relative inline-flex max-w-full items-center gap-2 rounded-md border border-neutral-200 bg-neutral-50 p-2 dark:border-neutral-700 dark:bg-neutral-800\">\n                      <img\n                        src={attachmentPreview}\n                        alt=\"\"\n                        className=\"size-12 rounded object-cover\"\n                      />\n                      <span className=\"max-w-52 truncate text-sm text-neutral-600 dark:text-neutral-300\">\n                        {isUploadingAttachment ? \"Uploading...\" : attachmentName}\n                      </span>\n                      <button\n                        type=\"button\"\n                        onClick={clearAttachment}\n                        className=\"inline-flex size-6 items-center justify-center rounded-full text-neutral-500 hover:bg-neutral-200 hover:text-neutral-900 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-100\"\n                        aria-label=\"Remove attachment\"\n                      >\n                        <IconX className=\"size-4\" />\n                      </button>\n                    </div>\n                  )}\n                  {attachmentError && (\n                    <p className=\"mt-1 text-xs text-red-500\">{attachmentError}</p>\n                  )}\n                </div>\n              )}\n\n              {allowsAnonymousFeedback(team) && !subscriber && (\n                <div className=\"flex gap-x-3 border-t border-neutral-200 pt-3 dark:border-neutral-700\">\n                  <div className=\"w-1/2\">\n                    <label className=\"mb-1 block text-xs font-medium text-neutral-700 dark:text-neutral-300\">\n                      {t(\"feedback.name\")}\n                    </label>\n                    <Input\n                      className=\"px-1.5 py-1 text-sm\"\n                      id=\"name\"\n                      type=\"text\"\n                      placeholder={t(\"feedback.johnDoe\")}\n                      {...register(\"name\")}\n                    />\n                  </div>\n                  <div className=\"w-1/2\">\n                    <label className=\"mb-1 block text-xs font-medium text-neutral-700 dark:text-neutral-300\">\n                      {t(\"feedback.email\")}\n                    </label>\n                    <Input\n                      id=\"email\"\n                      type=\"email\"\n                      placeholder={t(\"feedback.emailExample\")}\n                      className=\"px-1.5 py-1 text-sm\"\n                      {...register(\"email\")}\n                    />\n                  </div>\n                </div>\n              )}\n            </div>\n          </div>\n\n          <div className=\"flex items-center justify-between rounded-b-lg border-t border-neutral-200 bg-neutral-100 px-4 py-3 dark:border-neutral-800 dark:bg-neutral-800\">\n            <div className=\"flex items-center gap-x-2\">\n              {onUploadAttachment && !isEditMode && (\n                <>\n                  <input\n                    ref={fileInputRef}\n                    type=\"file\"\n                    accept=\"image/*\"\n                    onChange={handleAttachmentChange}\n                    className=\"hidden\"\n                  />\n                  <Button\n                    variant=\"plain\"\n                    iconOnly={<IconPhoto className=\"h-5 w-5\" />}\n                    accessibilityLabel={t(\"feedback.attachFile\")}\n                    tooltip={t(\"feedback.attachFile\")}\n                    onClick={() => fileInputRef.current?.click()}\n                    loading={isUploadingAttachment}\n                    disabled={isUploadingAttachment || isPending}\n                  />\n                </>\n              )}\n            </div>\n\n            <div className=\"flex items-center gap-3\">\n              <Button\n                variant=\"plain\"\n                onClick={onClose}\n                className=\"text-neutral-500 hover:text-neutral-600 dark:text-neutral-400 dark:hover:text-neutral-300\"\n              >\n                {t(\"common.cancel\")}\n              </Button>\n              <Button\n                type=\"submit\"\n                variant=\"primary\"\n                loading={isPending}\n                disabled={!isValid || isUploadingAttachment}\n              >\n                {isEditMode ? t(\"common.update\") : \"Create Submission\"}\n              </Button>\n            </div>\n          </div>\n        </form>\n      </div>\n    </div>\n  );\n};\n\nexport default FeedbackForm;\n","import { IconSearch, IconX } from \"@tabler/icons-react\";\nimport { motion } from \"framer-motion\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../shared/lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\n\ninterface ExpandableSearchProps {\n  onSearch?: (query: string) => void;\n  placeholder?: string;\n  className?: string;\n  searchValue?: string;\n  onSearchChange?: (value: string) => void;\n  onInputChange?: (value: string) => void;\n  onExpandedChange?: (isExpanded: boolean) => void;\n  inputClassName?: string;\n  triggerClassName?: string;\n  showShortcut?: boolean;\n  disableExpandAnimation?: boolean;\n}\n\nexport const ExpandableSearch: React.FC<ExpandableSearchProps> = ({\n  onSearch,\n  placeholder = \"Search...\",\n  className = \"\",\n  searchValue = \"\",\n  onSearchChange,\n  onInputChange,\n  onExpandedChange,\n  inputClassName,\n  triggerClassName,\n  showShortcut = false,\n  disableExpandAnimation = false,\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [value, setValue] = useState(searchValue);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  useEffect(() => {\n    setValue(searchValue);\n  }, [searchValue]);\n\n  useEffect(() => {\n    if (isExpanded && inputRef.current) {\n      inputRef.current.focus();\n    }\n  }, [isExpanded]);\n\n  const handleExpand = () => {\n    setIsExpanded(true);\n    onExpandedChange?.(true);\n    const focusInput = () => {\n      if (inputRef.current) {\n        inputRef.current.focus();\n      }\n    };\n\n    if (disableExpandAnimation) {\n      requestAnimationFrame(focusInput);\n      return;\n    }\n\n    setTimeout(focusInput, 500);\n  };\n\n  const handleCollapse = () => {\n    if (!value.trim()) {\n      setIsExpanded(false);\n      onExpandedChange?.(false);\n    }\n  };\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = e.target.value;\n    setValue(newValue);\n    onInputChange?.(newValue);\n  };\n\n  const handleClear = () => {\n    setValue(\"\");\n    onInputChange?.(\"\");\n    onSearchChange?.(\"\");\n    onSearch?.(\"\");\n    handleCollapse();\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === \"Escape\") {\n      if (value.trim()) {\n        setValue(\"\");\n        onInputChange?.(\"\");\n        onSearchChange?.(\"\");\n        onSearch?.(\"\");\n      } else {\n        setIsExpanded(false);\n        onExpandedChange?.(false);\n      }\n    } else if (e.key === \"Enter\") {\n      onSearchChange?.(value);\n      onSearch?.(value);\n    }\n  };\n\n  if (triggerClassName) {\n    return (\n      <div className={`relative flex justify-end ${className}`}>\n        <div className={triggerClassName}>\n          <svg viewBox=\"0 0 14 14\" fill=\"none\" className=\"size-[14px] shrink-0\">\n            <path\n              d=\"M9.333 5.667a3.667 3.667 0 1 1-7.333 0 3.667 3.667 0 0 1 7.333 0ZM8.517 8.517 12 12\"\n              stroke=\"currentColor\"\n              strokeWidth=\"1.25\"\n              strokeLinecap=\"round\"\n            />\n          </svg>\n          <input\n            ref={inputRef}\n            type=\"search\"\n            value={value}\n            onChange={handleInputChange}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            aria-label={placeholder}\n            className={cn(\n              \"min-w-0 flex-1 bg-transparent text-start font-medium text-inherit placeholder:text-inherit focus:outline-none\",\n              inputClassName,\n            )}\n          />\n          {value ? (\n            <button\n              type=\"button\"\n              onClick={handleClear}\n              aria-label=\"Clear search\"\n              className=\"shrink-0 rounded text-current opacity-70 transition-opacity hover:opacity-100\"\n            >\n              <IconX size={14} />\n            </button>\n          ) : showShortcut ? (\n            <kbd className=\"rounded border border-neutral-200/80 px-1 py-px text-[10px] text-neutral-300 dark:border-neutral-700/80 dark:text-neutral-600\">\n              /\n            </kbd>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={`relative flex justify-end ${className}`}>\n      {!isExpanded ? (\n        <motion.div\n          key=\"button\"\n          initial={{ opacity: 0, scale: 0.8 }}\n          animate={{ opacity: 1, scale: 1 }}\n          exit={{ opacity: 0, scale: 0.8 }}\n          transition={{ duration: 0.2 }}\n        >\n          <Button\n            variant=\"base\"\n            className=\"sm:bg-background flex h-8 w-8 items-center justify-center rounded-md border border-neutral-200 text-sm hover:bg-neutral-50 dark:border-neutral-700 dark:hover:bg-neutral-800\"\n            accessibilityLabel=\"search\"\n            size=\"sm\"\n            iconOnly={<IconSearch size={15} />}\n            onClick={handleExpand}\n          />\n        </motion.div>\n      ) : (\n        <motion.div\n          key=\"input\"\n          initial={disableExpandAnimation ? false : { opacity: 0, scale: 0.8, width: 0 }}\n          animate={disableExpandAnimation ? false : { opacity: 1, scale: 1, width: \"100%\" }}\n          exit={disableExpandAnimation ? undefined : { opacity: 0, scale: 0.8, width: 0 }}\n          transition={disableExpandAnimation ? undefined : { duration: 0.2 }}\n          className=\"flex origin-right items-center justify-end\"\n        >\n          <div className=\"relative flex w-full items-center\">\n            <Input\n              ref={inputRef}\n              type=\"search\"\n              value={value}\n              onChange={handleInputChange}\n              onKeyDown={handleKeyDown}\n              placeholder={placeholder}\n              className={cn(\n                \"h-7.5 w-64 pr-7 outline-none focus-within:ring-0 focus:ring-0\",\n                inputClassName,\n              )}\n              // inputClassName=\"h-7.5 pr-7 focus:ring-0\"\n            />\n            <Button\n              variant=\"base\"\n              size=\"sm\"\n              iconOnly={<IconX size={14} />}\n              onClick={!value ? handleCollapse : handleClear}\n              accessibilityLabel=\"Clear search\"\n              className={`right-[5px] top-1/2 -translate-y-1/2 rounded p-1 hover:bg-neutral-100 sm:absolute dark:hover:bg-neutral-800 ${!value ? \"opacity-70\" : \"\"}`}\n            />\n          </div>\n        </motion.div>\n      )}\n    </div>\n  );\n};\n\nexport default ExpandableSearch;\n","import { Inbox, Loader2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nexport interface FeedbackBoardProps<T> {\n  items: T[];\n  renderItem: (item: T, isLast: boolean) => React.ReactNode;\n  isLoading: boolean;\n  isError?: boolean;\n  emptyText: string;\n  emptyDescription?: string;\n  emptyIcon?: React.ReactNode;\n  loadingText: string;\n  errorText: string;\n  isFetchingNextPage?: boolean;\n  hasNextPage?: boolean;\n  loadMoreRef?: (node: HTMLDivElement | null) => void;\n  loadingMoreText?: string;\n  scrollToLoadMoreText?: string;\n}\n\nexport function FeedbackBoard<T>(props: FeedbackBoardProps<T>) {\n  const {\n    items,\n    renderItem,\n    isLoading,\n    isError,\n    emptyText,\n    emptyDescription,\n    emptyIcon,\n    loadingText,\n    errorText,\n    isFetchingNextPage,\n    hasNextPage,\n    loadMoreRef,\n    loadingMoreText,\n    scrollToLoadMoreText,\n  } = props;\n\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col items-center justify-center pb-20 pt-20 text-center text-sm font-medium text-neutral-500 dark:text-neutral-400\">\n        <div className=\"mx-auto mb-2 h-10 w-10\">\n          <Loader2 className=\"h-9 w-9 animate-spin\" />\n        </div>\n        <p>{loadingText}</p>\n      </div>\n    );\n  }\n\n  if (isError) {\n    return (\n      <div className=\"flex flex-col items-center justify-center pb-20 pt-20 text-center text-sm font-medium text-red-500 dark:text-red-400\">\n        <div className=\"mx-auto mb-2 h-10 w-10\">\n          <Inbox className=\"h-9 w-9\" />\n        </div>\n        <p>{errorText}</p>\n      </div>\n    );\n  }\n\n  if (!items || items.length === 0) {\n    return (\n      <div className=\"flex h-full min-h-full w-full flex-1 items-center justify-center px-5 py-10 text-center\">\n        <div className=\"max-w-[280px]\">\n          <div className=\"mx-auto mb-4 flex h-10 w-10 items-center justify-center text-neutral-400 dark:text-neutral-500\">\n            {emptyIcon || <Inbox className=\"h-10 w-10\" />}\n          </div>\n          <div className=\"text-[14px] font-medium text-neutral-500 dark:text-neutral-400\">\n            {emptyText}\n          </div>\n          {emptyDescription ? (\n            <div className=\"mt-1 text-[12px] text-neutral-400 dark:text-neutral-500\">\n              {emptyDescription}\n            </div>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"h1-[calc(100vh-205px)] flex flex-col overflow-auto\">\n      {items.map((item, idx) => (\n        <div key={idx}>\n          <span className=\"flex h-full grow flex-col gap-y-2 overflow-auto\">\n            {renderItem(item, idx === items.length - 1)}\n          </span>\n        </div>\n      ))}\n\n      {typeof isFetchingNextPage !== \"undefined\" && typeof hasNextPage !== \"undefined\" ? (\n        isFetchingNextPage ? (\n          <div ref={loadMoreRef as any} className=\"flex justify-center py-4\">\n            <div className=\"flex items-center gap-2 text-sm text-neutral-500 dark:text-neutral-400\">\n              <Loader2 className=\"h-4 w-4 animate-spin\" />\n              <span>{loadingMoreText}</span>\n            </div>\n          </div>\n        ) : hasNextPage ? (\n          <div ref={loadMoreRef as any} className=\"flex justify-center py-4\">\n            <div className=\"text-sm text-neutral-400 dark:text-neutral-500\">\n              {scrollToLoadMoreText}\n            </div>\n          </div>\n        ) : null\n      ) : null}\n    </div>\n  );\n}\n\nexport default FeedbackBoard;\n","import { IconArrowRight, IconChevronRight } from \"@tabler/icons-react\";\nimport * as React from \"react\";\nimport { cn } from \"../../shared/lib/utils\";\n\nexport interface ArticleLinkProps {\n  children: React.ReactNode;\n  href?: string;\n  onClick?: () => void;\n  className?: string;\n  iconContainerClassName?: string;\n  textClassName?: string;\n  as?: React.ElementType;\n  component?: React.ElementType;\n}\n\nexport const ArticleLink = React.forwardRef<\n  HTMLAnchorElement | HTMLButtonElement,\n  ArticleLinkProps\n>((props, ref) => {\n  const {\n    children,\n    href,\n    onClick,\n    className,\n    iconContainerClassName,\n    textClassName,\n    as,\n    component,\n    ...rest\n  } = props;\n\n  const baseClasses =\n    \"flex items-center justify-between cursor-pointer px-3 py-3 rounded-md bg-transparent hover:bg-gray-50 dark:hover:bg-neutral-800 transition-colors group\";\n  const textBaseClasses =\n    \"text-sm text-gray-800 dark:text-gray-200 group-hover:text-gray-900 dark:group-hover:text-gray-100\";\n  const iconContainerBaseClasses = \"relative size-4\";\n\n  const Component = component || as;\n\n  if (Component) {\n    return (\n      <Component\n        ref={ref}\n        href={href}\n        onClick={onClick}\n        className={cn(baseClasses, className)}\n        {...rest}\n      >\n        <span className={cn(textBaseClasses, textClassName)}>{children}</span>\n        <div className={cn(iconContainerBaseClasses, iconContainerClassName)}>\n          <IconArrowRight className=\"absolute size-4 text-gray-400 opacity-0 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-100\" />\n          <IconChevronRight className=\"absolute size-4 text-gray-400 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-0\" />\n        </div>\n      </Component>\n    );\n  }\n\n  if (href && !onClick) {\n    return (\n      <a\n        ref={ref as React.Ref<HTMLAnchorElement>}\n        href={href}\n        className={cn(baseClasses, className)}\n        {...(rest as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n      >\n        <span className={cn(textBaseClasses, textClassName)}>{children}</span>\n        <div className={cn(iconContainerBaseClasses, iconContainerClassName)}>\n          <IconArrowRight className=\"absolute size-4 text-gray-400 opacity-0 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-100\" />\n          <IconChevronRight className=\"absolute size-4 text-gray-400 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-0\" />\n        </div>\n      </a>\n    );\n  }\n\n  if (onClick) {\n    return (\n      <button\n        ref={ref as React.Ref<HTMLButtonElement>}\n        onClick={onClick}\n        className={cn(baseClasses, \"w-full text-left\", className)}\n        {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n      >\n        <span className={cn(textBaseClasses, textClassName)}>{children}</span>\n        <div className={cn(iconContainerBaseClasses, iconContainerClassName)}>\n          <IconArrowRight className=\"absolute size-4 text-gray-400 opacity-0 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-100\" />\n          <IconChevronRight className=\"absolute size-4 text-gray-400 transition-all group-hover:translate-x-1 group-hover:text-neutral-600 group-hover:opacity-0\" />\n        </div>\n      </button>\n    );\n  }\n\n  return null;\n});\n\nArticleLink.displayName = \"ArticleLink\";\n","// ABOUTME: Duotone icons for Userorbit's product areas, shared by the help center and portal.\n// ABOUTME: Feedback (lightbulb), updates (bullhorn) and articles (open book), drawn on an 18px grid.\nimport * as React from \"react\";\n\nexport interface ProductIconProps extends React.SVGProps<SVGSVGElement> {\n  strokeWidth?: number;\n  size?: string;\n}\n\nexport function IconLightbulb3OutlineDuo18({\n  strokeWidth = 1.5,\n  size = \"18px\",\n  ...props\n}: ProductIconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        opacity=\"0.3\"\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M7.97299 4.358C11.045 3.714 13.75 6.041 13.75 9C13.75 10.867 12.6695 12.475 11.1028 13.25H6.89719C5.11109 12.367 3.95699 10.399 4.31499 8.202C4.62299 6.315 6.10099 4.75 7.97299 4.358Z\"\n        fill=\"currentColor\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M9 0.75V1.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M14.834 3.16599L14.127 3.87299\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M17.25 9H16.25\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M3.16602 3.16599L3.87302 3.87299\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M0.75 9H1.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M13.75 8.99999C13.75 6.04069 11.0445 3.71348 7.97199 4.35818C6.09979 4.75108 4.62099 6.31669 4.31449 8.20489C3.93509 10.5427 5.26679 12.6193 7.24999 13.407V15.25C7.24999 16.0784 7.92159 16.75 8.74999 16.75H9.24999C10.0784 16.75 10.75 16.0784 10.75 15.25V13.407C12.505 12.71 13.75 11.004 13.75 8.99999Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M6.89697 13.25H11.103\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n}\n\nexport function IconBullhornOutlineDuo18({\n  strokeWidth = 1.5,\n  size = \"18px\",\n  ...props\n}: ProductIconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M10 10.75C12.313 10.75 13.7417 13.25 13.7417 13.25V1.75C13.7417 1.75 12.312 4.25 10 4.25H5.75V10.75H10Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M8.805 10.75L9.787 15.397C9.901 15.937 9.556 16.468 9.015 16.582L8.037 16.789C7.497 16.903 6.966 16.558 6.852 16.017L5.75 10.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M13.75 13.25C13.75 13.25 11.813 10.75 9.5 10.75H5C3.205 10.75 1.75 9.295 1.75 7.5C1.75 5.705 3.205 4.25 5 4.25H9.5C11.812 4.25 13.75 1.75 13.75 1.75V13.25Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M5.75 4.25V10.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M16.3843 6C16.9018 6.2995 17.25 6.8591 17.25 7.5C17.25 8.1409 16.9018 8.7005 16.3843 9\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n}\n\nexport function IconBookOpenOutlineDuo18({\n  strokeWidth = 1.5,\n  size = \"18px\",\n  ...props\n}: ProductIconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        d=\"M8.99999 15.051C9.16999 15.051 9.33899 15.006 9.49399 14.917C10.137 14.546 11.226 14.07 12.635 14.072C13.534 14.073 14.302 14.269 14.905 14.507C15.553 14.762 16.249 14.267 16.249 13.57V4.48701C16.249 4.13301 16.068 3.80701 15.763 3.62701C15.126 3.25101 14.037 2.76401 12.623 2.76401C10.733 2.76401 9.42499 3.63601 8.99899 3.94601\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n      />\n      <path\n        d=\"M8.99999 15.051C9.16999 15.051 9.33899 15.006 9.49399 14.917C10.137 14.546 11.226 14.07 12.635 14.072C13.534 14.073 14.302 14.269 14.905 14.507C15.553 14.762 16.249 14.267 16.249 13.57V4.48701C16.249 4.13301 16.068 3.80701 15.763 3.62701C15.126 3.25101 14.037 2.76401 12.623 2.76401C10.733 2.76401 9.42499 3.63601 8.99899 3.94601\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n      <path\n        d=\"M9.00001 15.051C8.83001 15.051 8.66101 15.006 8.50601 14.917C7.86301 14.546 6.77401 14.07 5.36501 14.072C4.46601 14.073 3.69801 14.269 3.09501 14.507C2.44701 14.762 1.75101 14.27 1.75101 13.574C1.75101 10.981 1.75101 6.10201 1.75101 4.48401C1.75101 4.13001 1.93201 3.80801 2.23701 3.62801C2.87401 3.25201 3.96301 2.76501 5.37701 2.76501C7.26701 2.76501 8.57501 3.63701 9.00101 3.94701V15.051H9.00001Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      />\n    </svg>\n  );\n}\n","// ABOUTME: The curated Tabler icon set workspaces pick from for boards, collections and roadmaps.\n// ABOUTME: Icons are stored by display name, so findTablerIcon resolves a stored name back to its component.\nimport {\n  IconAlertCircle,\n  IconAnchor,\n  IconArrowDown,\n  IconArrowLeft,\n  IconArrowNarrowDown,\n  IconArrowNarrowLeft,\n  IconArrowNarrowRight,\n  IconArrowNarrowUp,\n  IconArrowRight,\n  IconArrowUp,\n  IconBarcode,\n  IconBarcodeOff,\n  IconBattery,\n  IconBell,\n  IconBook,\n  IconBrain,\n  IconBriefcase,\n  IconBrush,\n  IconBug,\n  IconCalendar,\n  IconCamera,\n  IconChartArea,\n  IconChartBar,\n  IconChartLine,\n  IconChartPie,\n  IconCheck,\n  IconChevronDown,\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronUp,\n  IconClipboard,\n  IconCloud,\n  IconCode,\n  IconCompass,\n  IconCpu,\n  IconCreditCard,\n  IconCup,\n  IconCurrencyDollar,\n  IconDatabase,\n  IconDots,\n  IconDotsVertical,\n  IconDownload,\n  IconDroplet,\n  IconEdit,\n  IconEye,\n  IconFile,\n  IconFlame,\n  IconFlask,\n  IconFlower,\n  IconFolder,\n  IconFolderOpen,\n  IconGift,\n  IconGlobe,\n  IconGrid3x3,\n  IconGripHorizontal,\n  IconHeadphones,\n  IconHeart,\n  IconHome,\n  IconKey,\n  IconList,\n  IconLocation,\n  IconLock,\n  IconLockOpen2,\n  IconMail,\n  IconMap,\n  IconMapPin,\n  IconMenu,\n  IconMessage,\n  IconMicrophone,\n  IconMicrophoneOff,\n  IconMinus,\n  IconMoon,\n  IconMusic,\n  IconMusicOff,\n  IconNote,\n  IconPalette,\n  IconPaw,\n  IconPencil,\n  IconPhone,\n  IconPhoto,\n  IconPlane,\n  IconPlant,\n  IconPlayerPause,\n  IconPlayerPlay,\n  IconPlayerSkipBack,\n  IconPlayerSkipForward,\n  IconPlus,\n  IconRepeat,\n  IconRocket,\n  IconScale,\n  IconSearch,\n  IconSettings,\n  IconShield,\n  IconShoppingCart,\n  IconSpeakerphone,\n  IconStar,\n  IconStethoscope,\n  IconSun,\n  IconTag,\n  IconTerminal,\n  IconThumbDown,\n  IconThumbUp,\n  IconTool,\n  IconTrash,\n  IconUpload,\n  IconUser,\n  IconUsers,\n  IconVolume,\n  IconVolumeOff,\n  IconWifi,\n  IconWorld,\n  IconX,\n} from \"@tabler/icons-react\";\nimport type { Icon } from \"@tabler/icons-react\";\n\nexport const tablerIcons = [\n  IconFolder,\n  IconCurrencyDollar,\n  IconBook,\n  IconPencil,\n  IconCode,\n  IconTerminal,\n  IconMusic,\n  IconCup,\n  IconBrush,\n  IconPalette,\n  IconStethoscope,\n  IconFlower,\n  IconBriefcase,\n  IconChartBar,\n  IconNote,\n  IconScale,\n  IconGlobe,\n  IconPlane,\n  IconWorld,\n  IconTool,\n  IconPaw,\n  IconFlask,\n  IconBrain,\n  IconHeart,\n  IconPlant,\n  IconHome,\n  IconUser,\n  IconUsers,\n  IconMail,\n  IconMessage,\n  IconCalendar,\n  IconCamera,\n  IconPhoto,\n  IconStar,\n  IconCheck,\n  IconX,\n  IconSearch,\n  IconEye,\n  IconLock,\n  IconLockOpen2,\n  IconSettings,\n  IconBell,\n  IconAlertCircle,\n  IconPlus,\n  IconMinus,\n  IconArrowUp,\n  IconArrowDown,\n  IconArrowLeft,\n  IconArrowRight,\n  IconUpload,\n  IconDownload,\n  IconTrash,\n  IconEdit,\n  IconMap,\n  IconMapPin,\n  IconLocation,\n  IconPhone,\n  IconWifi,\n  IconBattery,\n  IconCloud,\n  IconSun,\n  IconMoon,\n  IconFlame,\n  IconDroplet,\n  IconGift,\n  IconShoppingCart,\n  IconCreditCard,\n  IconKey,\n  IconRocket,\n  IconThumbUp,\n  IconThumbDown,\n  IconChartPie,\n  IconChartLine,\n  IconChartArea,\n  IconDatabase,\n  IconCpu,\n  IconBug,\n  IconShield,\n  IconCompass,\n  IconAnchor,\n  IconBook,\n  IconClipboard,\n  IconFile,\n  IconFolderOpen,\n  IconTag,\n  IconBarcode,\n  IconBarcodeOff,\n  IconMusicOff,\n  IconMicrophone,\n  IconMicrophoneOff,\n  IconSpeakerphone,\n  IconVolume,\n  IconVolumeOff,\n  IconHeadphones,\n  IconPlayerPlay,\n  IconPlayerPause,\n  IconPlayerSkipBack,\n  IconPlayerSkipForward,\n  IconRepeat,\n  IconList,\n  IconGrid3x3,\n  IconMenu,\n  IconDots,\n  IconDotsVertical,\n  IconGripHorizontal,\n  IconChevronUp,\n  IconChevronDown,\n  IconChevronLeft,\n  IconChevronRight,\n  IconArrowNarrowUp,\n  IconArrowNarrowDown,\n  IconArrowNarrowLeft,\n  IconArrowNarrowRight,\n];\n\nexport function getTablerIconName(icon: Icon) {\n  return icon.name || icon.displayName || String(icon);\n}\n\nexport function findTablerIcon(name?: string | null) {\n  if (!name) {\n    return undefined;\n  }\n  return tablerIcons.find((icon) => getTablerIconName(icon) === name);\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype RecognitionState = \"idle\" | \"listening\" | \"stopped\" | \"error\";\n\ninterface UseSpeechRecognitionReturn {\n  transcript: string;\n  isListening: boolean;\n  state: RecognitionState;\n  error: string | null;\n  isSupported: boolean;\n  start: () => void;\n  stop: () => void;\n  reset: () => void;\n}\n\ndeclare global {\n  interface Window {\n    SpeechRecognition: any;\n    webkitSpeechRecognition: any;\n  }\n}\n\nexport const useSpeechRecognition = (): UseSpeechRecognitionReturn => {\n  const [transcript, setTranscript] = useState(\"\");\n  const [isListening, setIsListening] = useState(false);\n  const [state, setState] = useState<RecognitionState>(\"idle\");\n  const [error, setError] = useState<string | null>(null);\n  const [isSupported, setIsSupported] = useState(false);\n\n  const recognitionRef = useRef<any | null>(null);\n  const stateRef = useRef<RecognitionState>(\"idle\");\n  const interimTranscriptRef = useRef(\"\");\n\n  useEffect(() => {\n    stateRef.current = state;\n  }, [state]);\n\n  useEffect(() => {\n    const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n    if (!SpeechRecognition) {\n      setIsSupported(false);\n      return;\n    }\n\n    setIsSupported(true);\n    const recognition = new SpeechRecognition();\n    recognition.continuous = true;\n    recognition.interimResults = true;\n    recognition.lang = \"en-US\";\n\n    recognition.onstart = () => {\n      setIsListening(true);\n      setState(\"listening\");\n      setError(null);\n      interimTranscriptRef.current = \"\";\n    };\n\n    recognition.onresult = (event: any) => {\n      let finalTranscript = \"\";\n      let interimTranscript = \"\";\n\n      for (let i = event.resultIndex; i < event.results.length; i++) {\n        const transcript = event.results[i][0].transcript;\n        if (event.results[i].isFinal) {\n          finalTranscript += transcript + \" \";\n        } else {\n          interimTranscript += transcript;\n        }\n      }\n\n      if (finalTranscript) {\n        setTranscript((prev) => {\n          const newTranscript = prev + finalTranscript;\n          interimTranscriptRef.current = \"\";\n          return newTranscript.trim();\n        });\n      } else if (interimTranscript) {\n        interimTranscriptRef.current = interimTranscript;\n      }\n    };\n\n    recognition.onerror = (event: any) => {\n      setIsListening(false);\n      setState(\"error\");\n\n      let errorMessage = \"Speech recognition error occurred\";\n      switch (event.error) {\n        case \"no-speech\":\n          errorMessage = \"No speech detected. Please try again.\";\n          break;\n        case \"audio-capture\":\n          errorMessage = \"No microphone found. Please check your microphone.\";\n          break;\n        case \"not-allowed\":\n          errorMessage = \"Microphone permission denied. Please allow microphone access.\";\n          break;\n        case \"network\":\n          errorMessage = \"Network error occurred. Please check your connection.\";\n          break;\n        case \"aborted\":\n          setState(\"stopped\");\n          return;\n        default:\n          errorMessage = `Speech recognition error: ${event.error}`;\n      }\n\n      setError(errorMessage);\n    };\n\n    recognition.onend = () => {\n      setIsListening(false);\n      if (stateRef.current === \"listening\") {\n        if (interimTranscriptRef.current) {\n          setTranscript((prev) => {\n            const final = prev + \" \" + interimTranscriptRef.current;\n            interimTranscriptRef.current = \"\";\n            return final.trim();\n          });\n        }\n        setState(\"stopped\");\n      }\n    };\n\n    recognitionRef.current = recognition;\n\n    return () => {\n      if (recognitionRef.current) {\n        try {\n          recognitionRef.current.stop();\n        } catch {}\n        recognitionRef.current = null;\n      }\n    };\n  }, []);\n\n  const start = useCallback(() => {\n    if (!isSupported || !recognitionRef.current) {\n      setError(\"Speech recognition is not supported in this browser\");\n      setState(\"error\");\n      return;\n    }\n\n    try {\n      setTranscript(\"\");\n      setError(null);\n      recognitionRef.current.start();\n    } catch (err) {\n      const errorMessage =\n        err instanceof Error ? err.message : \"Failed to start speech recognition\";\n      setError(errorMessage);\n      setState(\"error\");\n    }\n  }, [isSupported]);\n\n  const stop = useCallback(() => {\n    if (recognitionRef.current && isListening) {\n      try {\n        recognitionRef.current.stop();\n        setState(\"stopped\");\n      } catch (err) {\n        setError(\"Failed to stop speech recognition\");\n        setState(\"error\");\n      }\n    }\n  }, [isListening]);\n\n  const reset = useCallback(() => {\n    if (recognitionRef.current) {\n      try {\n        recognitionRef.current.stop();\n      } catch {}\n    }\n    setTranscript(\"\");\n    setError(null);\n    setState(\"idle\");\n    setIsListening(false);\n  }, []);\n\n  return {\n    transcript,\n    isListening,\n    state,\n    error,\n    isSupported,\n    start,\n    stop,\n    reset,\n  };\n};\n","\"use client\";\n\nimport { useMemo, useRef, useEffect, useState } from \"react\";\n\ninterface ShimmeringTextProps {\n  text: string;\n  duration?: number;\n  delay?: number;\n  repeat?: boolean;\n  repeatDelay?: number;\n  className?: string;\n  startOnView?: boolean;\n  once?: boolean;\n  inViewMargin?: string;\n  spread?: number;\n  color?: string;\n  shimmerColor?: string;\n}\n\nexport function ShimmeringText({\n  text,\n  duration = 2,\n  delay = 0,\n  repeat = true,\n  repeatDelay = 0.5,\n  className = \"\",\n  startOnView = true,\n  once = false,\n  inViewMargin,\n  spread = 2,\n  color,\n  shimmerColor,\n}: ShimmeringTextProps) {\n  const ref = useRef<HTMLSpanElement>(null);\n  const [isInView, setIsInView] = useState(!startOnView);\n  const hasAnimatedRef = useRef(false);\n\n  useEffect(() => {\n    if (!startOnView || !ref.current) {\n      setIsInView(true);\n      return;\n    }\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        if (entry.isIntersecting) {\n          setIsInView(true);\n          if (once) {\n            hasAnimatedRef.current = true;\n          }\n        } else if (!once) {\n          setIsInView(false);\n        }\n      },\n      {\n        rootMargin: inViewMargin || \"0px\",\n      },\n    );\n\n    observer.observe(ref.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [startOnView, once, inViewMargin]);\n\n  const spreadValue = useMemo(() => {\n    return text.length * spread;\n  }, [text.length, spread]);\n\n  const baseColor = color || \"rgb(107, 114, 128)\";\n  const shimmerColorValue = shimmerColor || \"rgb(17, 24, 39)\";\n\n  const shimmerBg = `linear-gradient(90deg, transparent calc(50% - ${spreadValue}px), ${shimmerColorValue}, transparent calc(50% + ${spreadValue}px))`;\n  const baseBg = `linear-gradient(${baseColor}, ${baseColor})`;\n\n  const shouldAnimate = startOnView ? isInView && (!once || !hasAnimatedRef.current) : true;\n\n  return (\n    <>\n      <span\n        ref={ref}\n        className={`relative inline-block bg-[length:250%_100%,auto] [background-repeat:no-repeat,padding-box] ${className}`}\n        style={\n          {\n            color: baseColor,\n            backgroundImage: `${shimmerBg}, ${baseBg}`,\n            backgroundPosition: shouldAnimate ? \"100% center\" : \"0% center\",\n            WebkitBackgroundClip: \"text\",\n            backgroundClip: \"text\",\n            WebkitTextFillColor: \"transparent\",\n            animation: shouldAnimate\n              ? `shimmer ${duration}s ${delay}s ${repeat ? \"infinite\" : \"\"} ${repeat && repeatDelay ? `, pause ${repeatDelay}s` : \"\"}`\n              : \"none\",\n            animationTimingFunction: \"linear\",\n          } as React.CSSProperties\n        }\n      >\n        {text}\n      </span>\n      <style>{`\n        @keyframes shimmer {\n          0% {\n            background-position: -100% center, 0% center;\n          }\n          100% {\n            background-position: 200% center, 0% center;\n          }\n        }\n        @keyframes pause {\n          0%,\n          100% {\n            background-position: 200% center, 0% center;\n          }\n        }\n      `}</style>\n    </>\n  );\n}\n","import { Mic, Square } from \"lucide-react\";\nimport React, { useEffect } from \"react\";\nimport { Button } from \"../../ui/button\";\nimport { useSpeechRecognition } from \"../../shared/hooks/use-speech-recognition\";\nimport { ShimmeringText } from \"../../ui/shimmering-text\";\n\ninterface VoiceRecorderProps {\n  onRecordingComplete?: (transcription: string) => void;\n  label?: string;\n}\n\nexport const VoiceRecorder: React.FC<VoiceRecorderProps> = ({\n  onRecordingComplete,\n  label = \"Record your feedback\",\n}) => {\n  const {\n    transcript,\n    isListening,\n    state,\n    error: recognitionError,\n    isSupported,\n    start: startRecognition,\n    stop: stopRecognition,\n  } = useSpeechRecognition();\n\n  const hasCalledCompleteRef = React.useRef(false);\n\n  useEffect(() => {\n    if (state === \"stopped\" && transcript && !hasCalledCompleteRef.current) {\n      const finalTranscript = transcript.trim();\n      if (finalTranscript) {\n        hasCalledCompleteRef.current = true;\n        if (onRecordingComplete) {\n          onRecordingComplete(finalTranscript);\n        }\n      } else {\n        hasCalledCompleteRef.current = true;\n      }\n    }\n    if (state === \"idle\" || state === \"listening\") {\n      hasCalledCompleteRef.current = false;\n    }\n  }, [state, transcript, onRecordingComplete]);\n\n  const handleStart = () => {\n    hasCalledCompleteRef.current = false;\n    startRecognition();\n  };\n\n  const handleStop = () => {\n    stopRecognition();\n  };\n\n  if (!isSupported) {\n    return (\n      <div className=\"text-xs text-red-500 dark:text-red-400\">\n        Voice transcription is not supported in your browser. Please use Chrome, Edge, or Safari.\n      </div>\n    );\n  }\n\n  if (recognitionError && state === \"error\") {\n    return (\n      <div className=\"flex flex-col gap-2\">\n        <div className=\"text-xs text-red-500 dark:text-red-400\">{recognitionError}</div>\n        <Button variant=\"plain\" onClick={handleStart} className=\"text-xs\">\n          Try Again\n        </Button>\n      </div>\n    );\n  }\n\n  if (state === \"idle\") {\n    return (\n      <Button\n        variant=\"plain\"\n        onClick={handleStart}\n        iconOnly={<Mic className=\"h-5 w-5\" />}\n        accessibilityLabel={label}\n        className=\"cursor-pointer bg-transparent text-neutral-500 transition-colors hover:bg-neutral-500 hover:text-white dark:text-neutral-700 dark:hover:bg-neutral-400 dark:hover:text-black\"\n      />\n    );\n  }\n\n  if (isListening || state === \"listening\") {\n    return (\n      <div className=\"flex flex-col gap-2\">\n        <div className=\"flex items-center gap-2\">\n          <div className=\"flex items-center gap-2 rounded-md bg-red-100 px-2 py-1 dark:bg-red-900/20\">\n            <div className=\"h-2 w-2 animate-pulse rounded-full bg-red-500\" />\n            <ShimmeringText\n              text=\"Listening...\"\n              duration={1.5}\n              repeat={true}\n              startOnView={false}\n              className=\"text-xs font-medium text-red-700 dark:text-red-300\"\n              color=\"rgb(185, 28, 28)\"\n              shimmerColor=\"rgb(239, 68, 68)\"\n            />\n          </div>\n          <Button\n            variant=\"plain\"\n            onClick={handleStop}\n            iconOnly={<Square className=\"h-3.5 w-3.5\" fill=\"currentColor\" />}\n            accessibilityLabel=\"Stop transcription\"\n            className=\"text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 h-7\"\n          />\n        </div>\n        {transcript && (\n          <div className=\"rounded-md border border-neutral-200 bg-neutral-50 p-2 text-xs dark:border-neutral-700 dark:bg-neutral-800\">\n            {transcript}\n            <span className=\"text-neutral-400\">...</span>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  if (state === \"stopped\") {\n    if (transcript && !hasCalledCompleteRef.current) {\n      return (\n        <div className=\"flex items-center gap-2\">\n          <div className=\"text-xs text-neutral-500 dark:text-neutral-400\">Processing...</div>\n        </div>\n      );\n    }\n    return (\n      <Button\n        variant=\"plain\"\n        onClick={handleStart}\n        iconOnly={<Mic className=\"h-5 w-5\" />}\n        accessibilityLabel=\"Record again\"\n        className=\"cursor-pointer bg-transparent text-neutral-500 transition-colors hover:bg-neutral-500 hover:text-white dark:text-neutral-700 dark:hover:bg-neutral-400 dark:hover:text-black\"\n        tooltip=\"Record again\"\n      />\n    );\n  }\n\n  return null;\n};\n","export { default as StepSettingsMenu } from \"./step-settings-menu\";\nexport { default } from \"./step-settings-menu\";\nexport { ExpandableTabs } from \"./expandable-tabs\";\nexport { default as BehaviorSettings } from \"./behavior-settings\";\nexport type { WidgetTargetOption } from \"./behavior-settings\";\nexport { default as StylingSettings } from \"./styling-settings\";\nexport { default as AdvancedSettings } from \"./advanced-settings\";\nexport {\n  StepVoiceOverSettingsPanel,\n  normalizeStepVoiceOver,\n  type GeneratedVoiceOverAudio,\n  type ProviderVoiceProfile,\n  type VoiceOverSettingsAdapters,\n} from \"./voice-over-settings\";\n","export * from \"./ui/button\";\nexport * from \"./ui/badge\";\nexport * from \"./ui/card\";\nexport * from \"./ui/spinner\";\nexport * from \"./ui/select\";\nexport * from \"./ui/input\";\nexport * from \"./ui/textarea\";\nexport * from \"./ui/popover\";\nexport * from \"./ui/switch\";\nexport * from \"./ui/checkbox\";\nexport * from \"./ui/toggle\";\nexport * from \"./ui/advanced-option-toggle\";\nexport * from \"./ui/color-dot-dropdown\";\nexport * from \"./ui/color-picker-with-input\";\nexport * from \"./ui/toggle-group\";\nexport * from \"./ui/accordion\";\nexport * from \"./ui/tabs\";\nexport * from \"./ui/select\";\nexport * from \"./ui/text-field\";\nexport { default as Avatar } from \"./ui/avatar\";\nexport { default as FeedbackStatusBadge } from \"./ui/feedback-status-badge\";\nexport { default as SortDropdown } from \"./ui/sort-dropdown\";\nexport * from \"./components/step-preview\";\nexport * from \"./components/tour-dialog\";\nexport * from \"./components/powered-by-userorbit\";\nexport * from \"./components/feedback-form\";\nexport * from \"./components/expandable-search\";\nexport * from \"./components/feedback-board\";\nexport * from \"./components/article-link\";\nexport * from \"./components/product-icons\";\nexport * from \"./components/tabler-icons\";\nexport * from \"./components/voice-recorder\";\nexport * from \"./components/step-settings-menu\";\nexport * from \"./components/guide/dom-observer\";\nexport { default as AlertDialog } from \"./components/alert-dialog\";\nexport { default as StepRTE } from \"./components/step-rte\";\nexport * from \"./ui/shimmering-text\";\nexport * from \"./shared/hooks/use-speech-recognition\";\n\n// Export dialog components with alias to avoid conflicts\nexport {\n  Dialog as Modal,\n  DialogContent as ModalContent,\n  DialogHeader as ModalHeader,\n  DialogFooter as ModalFooter,\n  DialogTitle as ModalTitle,\n  DialogDescription as ModalDescription,\n  DialogTrigger as ModalTrigger,\n  DialogClose as ModalClose,\n} from \"./ui/dialog\";\n","\"use client\";\n\nimport { AnimatePresence, type HTMLMotionProps, type Transition, motion } from \"framer-motion\";\nimport React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ntype MotionHighlightMode = \"children\" | \"parent\";\n\ntype Bounds = {\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n};\n\ntype MotionHighlightContextType<T extends string> = {\n  mode: MotionHighlightMode;\n  activeValue: T | null;\n  setActiveValue: (value: T | null) => void;\n  setBounds: (bounds: DOMRect) => void;\n  clearBounds: () => void;\n  id: string;\n  hover: boolean;\n  className?: string;\n  activeClassName?: string;\n  setActiveClassName: (className: string) => void;\n  transition?: Transition;\n  disabled?: boolean;\n  enabled?: boolean;\n  exitDelay?: number;\n  forceUpdateBounds?: boolean;\n};\n\nconst MotionHighlightContext = React.createContext<MotionHighlightContextType<any> | undefined>(\n  undefined,\n);\n\nfunction useMotionHighlight<T extends string>(): MotionHighlightContextType<T> {\n  const context = React.useContext(MotionHighlightContext);\n  if (!context) {\n    throw new Error(\"useMotionHighlight must be used within a MotionHighlightProvider\");\n  }\n  return context as unknown as MotionHighlightContextType<T>;\n}\n\ntype BaseMotionHighlightProps<T extends string> = {\n  mode?: MotionHighlightMode;\n  value?: T | null;\n  defaultValue?: T | null;\n  onValueChange?: (value: T | null) => void;\n  className?: string;\n  transition?: Transition;\n  hover?: boolean;\n  disabled?: boolean;\n  enabled?: boolean;\n  exitDelay?: number;\n};\n\ntype ParentModeMotionHighlightProps = {\n  boundsOffset?: Partial<Bounds>;\n  containerClassName?: string;\n  forceUpdateBounds?: boolean;\n};\n\ntype ControlledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n  ParentModeMotionHighlightProps & {\n    mode: \"parent\";\n    controlledItems: true;\n    children: React.ReactNode;\n  };\n\ntype ControlledChildrenModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> & {\n  mode?: \"children\" | undefined;\n  controlledItems: true;\n  children: React.ReactNode;\n};\n\ntype UncontrolledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n  ParentModeMotionHighlightProps & {\n    mode: \"parent\";\n    controlledItems?: false;\n    itemsClassName?: string;\n    children: React.ReactElement | React.ReactElement[];\n  };\n\ntype UncontrolledChildrenModeMotionHighlightProps<T extends string> =\n  BaseMotionHighlightProps<T> & {\n    mode?: \"children\";\n    controlledItems?: false;\n    itemsClassName?: string;\n    children: React.ReactElement | React.ReactElement[];\n  };\n\ntype MotionHighlightProps<T extends string> = React.ComponentProps<\"div\"> &\n  (\n    | ControlledParentModeMotionHighlightProps<T>\n    | ControlledChildrenModeMotionHighlightProps<T>\n    | UncontrolledParentModeMotionHighlightProps<T>\n    | UncontrolledChildrenModeMotionHighlightProps<T>\n  );\n\nconst MotionHighlight = React.forwardRef(\n  <T extends string>(props: MotionHighlightProps<T>, ref: React.Ref<HTMLDivElement>) => {\n    const {\n      children,\n      value,\n      defaultValue,\n      onValueChange,\n      className,\n      transition = { type: \"spring\", stiffness: 350, damping: 35 },\n      hover = false,\n      enabled = true,\n      controlledItems,\n      disabled = false,\n      exitDelay = 0.2,\n      mode = \"children\",\n    } = props;\n\n    const localRef = React.useRef<HTMLDivElement>(null);\n    React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement);\n\n    const [activeValue, setActiveValueState] = React.useState<T | null>(\n      value ?? defaultValue ?? null,\n    );\n    const [boundsState, setBoundsState] = React.useState<Bounds | null>(null);\n    const [activeClassNameState, setActiveClassNameState] = React.useState<string>(\"\");\n\n    const safeSetActiveValue = React.useCallback(\n      (id: T | null) => {\n        setActiveValueState((prev) => (prev === id ? prev : id));\n        if (id !== activeValue) onValueChange?.(id as T);\n      },\n      [activeValue, onValueChange],\n    );\n\n    const safeSetBounds = React.useCallback(\n      (bounds: DOMRect) => {\n        if (!localRef.current) return;\n        const boundsOffset = (props as ParentModeMotionHighlightProps)?.boundsOffset ?? {\n          top: 0,\n          left: 0,\n          width: 0,\n          height: 0,\n        };\n        const containerRect = localRef.current.getBoundingClientRect();\n        const newBounds: Bounds = {\n          top: bounds.top - containerRect.top + (boundsOffset.top ?? 0),\n          left: bounds.left - containerRect.left + (boundsOffset.left ?? 0),\n          width: bounds.width + (boundsOffset.width ?? 0),\n          height: bounds.height + (boundsOffset.height ?? 0),\n        };\n        setBoundsState((prev) => {\n          if (\n            prev &&\n            prev.top === newBounds.top &&\n            prev.left === newBounds.left &&\n            prev.width === newBounds.width &&\n            prev.height === newBounds.height\n          ) {\n            return prev;\n          }\n          return newBounds;\n        });\n      },\n      [props],\n    );\n\n    const clearBounds = React.useCallback(() => {\n      setBoundsState((prev) => (prev === null ? prev : null));\n    }, []);\n\n    React.useEffect(() => {\n      if (value !== undefined) setActiveValueState(value);\n      else if (defaultValue !== undefined) setActiveValueState(defaultValue);\n    }, [value, defaultValue]);\n\n    const id = React.useId();\n\n    React.useEffect(() => {\n      if (mode !== \"parent\") return;\n      const container = localRef.current;\n      if (!container) return;\n      const onScroll = () => {\n        if (!activeValue) return;\n        const activeEl = container.querySelector<HTMLElement>(\n          `[data-value=\"${activeValue}\"][data-highlight=\"true\"]`,\n        );\n        if (activeEl) safeSetBounds(activeEl.getBoundingClientRect());\n      };\n      container.addEventListener(\"scroll\", onScroll, { passive: true });\n      return () => container.removeEventListener(\"scroll\", onScroll);\n    }, [mode, activeValue, safeSetBounds]);\n\n    const render = React.useCallback(\n      (childrenToRender: React.ReactNode) => {\n        if (mode === \"parent\") {\n          return (\n            <div\n              ref={localRef}\n              data-slot=\"motion-highlight-container\"\n              className={cn(\n                \"relative\",\n                (props as ParentModeMotionHighlightProps)?.containerClassName,\n              )}\n            >\n              {/* <AnimatePresence initial={false}>\n              {boundsState && (\n                <motion.div\n                  data-slot=\"motion-highlight\"\n                  animate={{\n                    top: boundsState.top,\n                    left: boundsState.left,\n                    width: boundsState.width,\n                    height: boundsState.height,\n                    opacity: 1,\n                  }}\n                  initial={{\n                    top: boundsState.top,\n                    left: boundsState.left,\n                    width: boundsState.width,\n                    height: boundsState.height,\n                    opacity: 0,\n                  }}\n                  exit={{\n                    opacity: 0,\n                    transition: {\n                      ...transition,\n                      delay: (transition?.delay ?? 0) + (exitDelay ?? 0),\n                    },\n                  }}\n                  transition={transition}\n                  className={cn(\n                    'absolute bg-gray-700 dark:bg-neutral-700 z-[10] rounded-lg',\n                    className,\n                    activeClassNameState,\n                  )}\n                />\n              )}\n            </> */}\n              {childrenToRender}\n            </div>\n          );\n        }\n        return childrenToRender;\n      },\n      [mode, props, boundsState, transition, exitDelay, className, activeClassNameState],\n    );\n\n    return (\n      <MotionHighlightContext.Provider\n        value={{\n          mode,\n          activeValue: activeValue,\n          setActiveValue: safeSetActiveValue,\n          id,\n          hover,\n          className,\n          transition,\n          disabled,\n          enabled,\n          exitDelay,\n          setBounds: safeSetBounds,\n          clearBounds,\n          activeClassName: activeClassNameState,\n          setActiveClassName: setActiveClassNameState,\n          forceUpdateBounds: (props as ParentModeMotionHighlightProps)?.forceUpdateBounds,\n        }}\n      >\n        {enabled\n          ? controlledItems\n            ? render(children)\n            : render(\n                React.Children.map(children, (child) => {\n                  if (!React.isValidElement(child)) return child;\n                  const childDataValue = (child.props as any)[\"data-value\"];\n                  return (\n                    <MotionHighlightItem\n                      key={childDataValue || child.key}\n                      value={childDataValue}\n                      className={\n                        (\n                          props as\n                            | UncontrolledChildrenModeMotionHighlightProps<T>\n                            | UncontrolledParentModeMotionHighlightProps<T>\n                        )?.itemsClassName\n                      }\n                    >\n                      {child}\n                    </MotionHighlightItem>\n                  );\n                }),\n              )\n          : children}\n      </MotionHighlightContext.Provider>\n    );\n  },\n) as <T extends string>(\n  props: MotionHighlightProps<T> & { ref?: React.Ref<HTMLDivElement> },\n) => React.ReactElement;\n(MotionHighlight as any).displayName = \"MotionHighlight\";\n\nfunction getNonOverridingDataAttributes(\n  element: React.ReactElement,\n  dataAttributes: Record<string, unknown>,\n): Record<string, unknown> {\n  return Object.keys(dataAttributes).reduce<Record<string, unknown>>((acc, key) => {\n    if ((element.props as Record<string, unknown>)[key] === undefined) {\n      acc[key] = dataAttributes[key];\n    }\n    return acc;\n  }, {});\n}\n\ntype ExtendedChildProps = React.ComponentProps<\"div\"> & {\n  id?: string;\n  ref?: React.Ref<HTMLElement>;\n  \"data-active\"?: string;\n  \"data-value\"?: string;\n  \"data-disabled\"?: boolean;\n  \"data-highlight\"?: boolean;\n  \"data-slot\"?: string;\n};\n\ntype MotionHighlightItemProps = React.ComponentProps<\"div\"> & {\n  children: React.ReactElement;\n  id?: string;\n  value?: string;\n  className?: string;\n  transition?: Transition;\n  activeClassName?: string;\n  disabled?: boolean;\n  exitDelay?: number;\n  asChild?: boolean;\n  forceUpdateBounds?: boolean;\n};\n\nconst MotionHighlightItem = React.forwardRef<HTMLDivElement, MotionHighlightItemProps>(\n  (\n    {\n      children,\n      id,\n      value,\n      className,\n      transition,\n      disabled = false,\n      activeClassName,\n      exitDelay,\n      asChild = false,\n      forceUpdateBounds,\n      ...props\n    },\n    ref,\n  ) => {\n    const itemId = React.useId();\n    const {\n      activeValue,\n      setActiveValue,\n      mode,\n      setBounds,\n      clearBounds,\n      hover,\n      enabled,\n      className: contextClassName,\n      transition: contextTransition,\n      id: contextId,\n      disabled: contextDisabled,\n      exitDelay: contextExitDelay,\n      forceUpdateBounds: contextForceUpdateBounds,\n      setActiveClassName,\n    } = useMotionHighlight();\n\n    const element = children as React.ReactElement<ExtendedChildProps>;\n    const childValue = id ?? value ?? element.props?.[\"data-value\"] ?? element.props?.id ?? itemId;\n    const isActive = activeValue === childValue;\n    const isDisabled = disabled === undefined ? contextDisabled : disabled;\n    const itemTransition = transition ?? contextTransition;\n\n    const localRef = React.useRef<HTMLDivElement>(null);\n    React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement);\n\n    React.useEffect(() => {\n      if (mode !== \"parent\") return;\n      let rafId: number;\n      let previousBounds: Bounds | null = null;\n      const shouldUpdateBounds =\n        forceUpdateBounds === true || (contextForceUpdateBounds && forceUpdateBounds !== false);\n\n      const updateBounds = () => {\n        if (!localRef.current) return;\n        const bounds = localRef.current.getBoundingClientRect();\n        if (shouldUpdateBounds) {\n          if (\n            previousBounds &&\n            previousBounds.top === bounds.top &&\n            previousBounds.left === bounds.left &&\n            previousBounds.width === bounds.width &&\n            previousBounds.height === bounds.height\n          ) {\n            rafId = requestAnimationFrame(updateBounds);\n            return;\n          }\n          previousBounds = bounds;\n          rafId = requestAnimationFrame(updateBounds);\n        }\n        setBounds(bounds);\n      };\n\n      if (isActive) {\n        updateBounds();\n        setActiveClassName(activeClassName ?? \"\");\n      } else if (!activeValue) clearBounds();\n\n      if (shouldUpdateBounds) return () => cancelAnimationFrame(rafId);\n    }, [\n      mode,\n      isActive,\n      activeValue,\n      setBounds,\n      clearBounds,\n      activeClassName,\n      setActiveClassName,\n      forceUpdateBounds,\n      contextForceUpdateBounds,\n    ]);\n\n    if (!React.isValidElement(children)) return children;\n\n    const dataAttributes = {\n      \"data-active\": isActive ? \"true\" : \"false\",\n      \"aria-selected\": isActive,\n      \"data-disabled\": isDisabled,\n      \"data-value\": childValue,\n      \"data-highlight\": true,\n    };\n\n    const commonHandlers = hover\n      ? {\n          onMouseEnter: (e: React.MouseEvent<HTMLDivElement>) => {\n            setActiveValue(childValue);\n            element.props.onMouseEnter?.(e);\n          },\n          onMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => {\n            setActiveValue(null);\n            element.props.onMouseLeave?.(e);\n          },\n        }\n      : {\n          onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n            setActiveValue(childValue);\n            element.props.onClick?.(e);\n          },\n        };\n\n    if (asChild) {\n      if (mode === \"children\") {\n        return React.cloneElement(\n          element,\n          {\n            key: childValue,\n            ref: localRef,\n            className: cn(\"relative\", element.props.className),\n            ...getNonOverridingDataAttributes(element, {\n              ...dataAttributes,\n              \"data-slot\": \"motion-highlight-item-container\",\n            }),\n            ...commonHandlers,\n            ...props,\n          } as ExtendedChildProps,\n          <React.Fragment>\n            <AnimatePresence initial={false}>\n              {isActive && !isDisabled && (\n                <motion.div\n                  layoutId={`transition-background-${contextId}`}\n                  data-slot=\"motion-highlight\"\n                  className={cn(\n                    \"absolute inset-0 z-0 rounded-lg bg-gray-700 dark:bg-neutral-700\",\n                    contextClassName,\n                    activeClassName,\n                  )}\n                  transition={itemTransition}\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{\n                    opacity: 0,\n                    transition: {\n                      ...itemTransition,\n                      delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0),\n                    },\n                  }}\n                  {...dataAttributes}\n                />\n              )}\n            </AnimatePresence>\n            <div\n              data-slot=\"motion-highlight-item-content-wrapper\"\n              className={cn(\"relative z-[20]\", className)}\n              {...dataAttributes}\n            >\n              {element.props.children}\n            </div>\n          </React.Fragment>,\n        );\n      }\n      return React.cloneElement(element, {\n        ref: localRef,\n        ...getNonOverridingDataAttributes(element, {\n          ...dataAttributes,\n          \"data-slot\": \"motion-highlight-item\",\n        }),\n        ...commonHandlers,\n      } as ExtendedChildProps);\n    }\n\n    return enabled ? (\n      <div\n        key={childValue}\n        ref={localRef}\n        data-slot=\"motion-highlight-item-container\"\n        className={cn(mode === \"children\" && \"relative\", className)}\n        {...dataAttributes}\n        {...props}\n        {...commonHandlers}\n      >\n        {mode === \"children\" && (\n          <AnimatePresence initial={false}>\n            {isActive && !isDisabled && (\n              <motion.div\n                layoutId={`transition-background-${contextId}`}\n                data-slot=\"motion-highlight\"\n                className={cn(\n                  \"absolute inset-0 z-0 rounded-lg bg-gray-700 dark:bg-neutral-700\",\n                  contextClassName,\n                  activeClassName,\n                )}\n                transition={itemTransition}\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{\n                  opacity: 0,\n                  transition: {\n                    ...itemTransition,\n                    delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0),\n                  },\n                }}\n                {...dataAttributes}\n              />\n            )}\n          </AnimatePresence>\n        )}\n        {React.cloneElement(element, {\n          className: cn(\"relative z-[20]\", element.props.className),\n          ...getNonOverridingDataAttributes(element, {\n            ...dataAttributes,\n            \"data-slot\": \"motion-highlight-item\",\n          }),\n        } as ExtendedChildProps)}\n      </div>\n    ) : (\n      children\n    );\n  },\n);\n(MotionHighlightItem as any).displayName = \"MotionHighlightItem\";\n\n// Tabs implementation\ntype TabsContextType<T extends string> = {\n  activeValue: T;\n  handleValueChange: (value: T) => void;\n  registerTrigger: (value: T, node: HTMLElement | null) => void;\n};\n\nconst TabsContext = React.createContext<TabsContextType<any> | undefined>(undefined);\n\nexport function useTabs<T extends string = string>(): TabsContextType<T> {\n  const context = React.useContext(TabsContext);\n  if (!context) {\n    throw new Error(\"useTabs must be used within a TabsProvider\");\n  }\n  return context;\n}\n\ntype BaseTabsProps = React.ComponentProps<\"div\"> & {\n  children: React.ReactNode;\n};\n\ntype UnControlledTabsProps<T extends string = string> = BaseTabsProps & {\n  defaultValue?: T;\n  value?: never;\n  onValueChange?: never;\n};\n\ntype ControlledTabsProps<T extends string = string> = BaseTabsProps & {\n  value: T;\n  onValueChange?: (value: T) => void;\n  defaultValue?: never;\n};\n\nexport type TabsProps<T extends string = string> =\n  | UnControlledTabsProps<T>\n  | ControlledTabsProps<T>;\n\nexport const Tabs = <T extends string = string>({\n  defaultValue,\n  value,\n  onValueChange,\n  children,\n  className,\n  ...props\n}: TabsProps<T>) => {\n  const [activeValue, setActiveValue] = React.useState<T | undefined>(defaultValue ?? undefined);\n  const triggersRef = React.useRef(new Map<string, HTMLElement>());\n  const initialSet = React.useRef(false);\n  const isControlled = value !== undefined;\n\n  React.useEffect(() => {\n    if (\n      !isControlled &&\n      activeValue === undefined &&\n      triggersRef.current.size > 0 &&\n      !initialSet.current\n    ) {\n      const firstTab = Array.from(triggersRef.current.keys())[0];\n      if (firstTab) {\n        setActiveValue(firstTab as T);\n        initialSet.current = true;\n      }\n    }\n  }, [activeValue, isControlled]);\n\n  const registerTrigger = (triggerValue: string, node: HTMLElement | null) => {\n    if (node) {\n      triggersRef.current.set(triggerValue, node);\n      if (!isControlled && activeValue === undefined && !initialSet.current) {\n        setActiveValue(triggerValue as T);\n        initialSet.current = true;\n      }\n    } else {\n      triggersRef.current.delete(triggerValue);\n    }\n  };\n\n  const handleValueChange = (val: T) => {\n    if (!isControlled) setActiveValue(val);\n    else onValueChange?.(val);\n  };\n\n  const currentActiveValue = (value ?? activeValue)!;\n\n  return (\n    <TabsContext.Provider\n      value={{\n        activeValue: currentActiveValue,\n        handleValueChange,\n        registerTrigger,\n      }}\n    >\n      <div data-slot=\"tabs\" className={cn(\"flex flex-col gap-2\", className)} {...props}>\n        {children}\n      </div>\n    </TabsContext.Provider>\n  );\n};\n\nexport type TabsListProps = React.ComponentProps<\"div\"> & {\n  children: React.ReactNode;\n  activeClassName?: string;\n  transition?: Transition;\n};\n\nexport const TabsList = ({\n  children,\n  className,\n  activeClassName,\n  transition = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 30,\n  },\n  ...props\n}: TabsListProps) => {\n  const { activeValue } = useTabs();\n\n  return (\n    <MotionHighlight\n      mode=\"parent\"\n      controlledItems\n      className={cn(\"rounded-lg bg-gray-700 shadow-sm dark:bg-neutral-700\", activeClassName)}\n      value={activeValue}\n      transition={transition}\n      containerClassName=\"flex flex-shrink-0 justify-center items-center relative z-0\"\n    >\n      <div\n        role=\"tablist\"\n        data-slot=\"tabs-list\"\n        className={cn(\n          \"flex w-full items-center justify-center rounded-lg bg-transparent p-1\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    </MotionHighlight>\n  );\n};\n\nexport type TabsTriggerProps = HTMLMotionProps<\"button\"> & {\n  value: string;\n  children: React.ReactNode;\n  icon?: React.ReactNode;\n  isCompact?: boolean;\n};\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n  ({ value, children, icon, className, isCompact = false, ...props }, ref) => {\n    const { activeValue, handleValueChange, registerTrigger } = useTabs();\n    const localRef = React.useRef<HTMLButtonElement | null>(null);\n\n    React.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\n\n    React.useEffect(() => {\n      if (localRef.current) {\n        registerTrigger(value, localRef.current);\n      }\n      return () => registerTrigger(value, null);\n    }, [value, registerTrigger]);\n\n    const isActive = activeValue === value;\n\n    return (\n      <MotionHighlightItem value={value} className=\"relative z-[10] size-full\">\n        <motion.button\n          ref={localRef}\n          data-slot=\"tabs-trigger\"\n          role=\"tab\"\n          whileTap={{ scale: 0.95 }}\n          onClick={() => handleValueChange(value)}\n          data-state={isActive ? \"active\" : \"inactive\"}\n          className={cn(\n            \"relative w-full font-sans text-md font-medium capitalize\",\n            \"bg-transparent flex flex-col items-center justify-center gap-1\",\n            \"ring-offset-background focus-visible:ring-ring cursor-pointer whitespace-nowrap rounded-xl px-2 py-1.5 transition-transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n            isCompact ? \"flex flex-col\" : \"\",\n            isActive\n              ? \"text-[var(--color-primary)] font-semibold dark:text-white\"\n              : \"text-neutral-400 dark:text-neutral-500\",\n            \"relative z-[20]\",\n            className,\n          )}\n          {...props}\n        >\n          {icon && (\n            <span\n              className={cn(\n                \"flex items-center justify-center size-5\",\n                isActive\n                  ? \"text-[var(--color-primary)] dark:text-white\"\n                  : \"text-neutral-400 dark:text-neutral-500\",\n              )}\n            >\n              {React.isValidElement(icon)\n                ? React.cloneElement(icon as React.ReactElement<any>, {\n                    className: cn(\n                      isActive\n                        ? \"text-[var(--color-primary)] dark:text-white size-5\"\n                        : \"text-neutral-400 dark:text-neutral-500 size-5\",\n                      (icon as React.ReactElement<any>).props?.className,\n                    ),\n                  })\n                : icon}\n            </span>\n          )}\n          <span className=\"text-center\">{children}</span>\n        </motion.button>\n      </MotionHighlightItem>\n    );\n  },\n);\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport type TabsContentsProps = React.ComponentProps<\"div\"> & {\n  children: React.ReactNode;\n  transition?: Transition;\n};\n\nexport const TabsContents = ({\n  children,\n  className,\n  transition = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 40,\n    bounce: 0,\n    restDelta: 0.01,\n  },\n  ...props\n}: TabsContentsProps) => {\n  const { activeValue } = useTabs();\n  const childrenArray = React.Children.toArray(children);\n  const activeIndex = childrenArray.findIndex(\n    (child): child is React.ReactElement<{ value: string }> =>\n      React.isValidElement(child) &&\n      typeof child.props === \"object\" &&\n      child.props !== null &&\n      \"value\" in child.props &&\n      (child.props as { value: string }).value === activeValue,\n  );\n\n  return (\n    <div data-slot=\"tabs-contents\" className={cn(\"overflow-hidden\", className)} {...props}>\n      <motion.div\n        className=\"-mx-2 flex\"\n        animate={{ x: activeIndex * -100 + \"%\" }}\n        transition={transition}\n      >\n        {childrenArray.map((child, index) => (\n          <div key={index} className=\"w-full shrink-0 px-2\">\n            {child}\n          </div>\n        ))}\n      </motion.div>\n    </div>\n  );\n};\n\nexport type TabsContentProps = HTMLMotionProps<\"div\"> & {\n  value: string;\n  children: React.ReactNode;\n};\n\nexport const TabsContent = ({ children, value, className, ...props }: TabsContentProps) => {\n  const { activeValue } = useTabs();\n  const isActive = activeValue === value;\n\n  return (\n    <motion.div\n      role=\"tabpanel\"\n      data-slot=\"tabs-content\"\n      className={cn(\"h-[var(--container-height)] overflow-hidden\", className)}\n      initial={{ filter: \"blur(0px)\" }}\n      animate={{ filter: isActive ? \"blur(0px)\" : \"blur(12px)\" }}\n      exit={{ filter: \"blur(0px)\" }}\n      // transition={{ type: \"spring\", stiffness: 1200, damping: 90 }}\n      {...props}\n    >\n      {children}\n    </motion.div>\n  );\n};\n\nexport type { TabsContextType };\n","// ABOUTME: Lightweight date formatting utilities replacing date-fns.\n// ABOUTME: Provides relative time and absolute date formatting using Intl APIs.\n\nconst MINUTE = 60;\nconst HOUR = 3600;\nconst DAY = 86400;\nconst MONTH = 2592000;\nconst YEAR = 31536000;\n\nexport function timeAgo(date: Date): string {\n  if (Number.isNaN(date.getTime())) return \"just now\";\n\n  const seconds = Math.round((Date.now() - date.getTime()) / 1000);\n  if (seconds < MINUTE) return \"less than a minute\";\n  if (seconds < HOUR) {\n    const m = Math.floor(seconds / MINUTE);\n    return `${m} minute${m === 1 ? \"\" : \"s\"}`;\n  }\n  if (seconds < DAY) {\n    const h = Math.floor(seconds / HOUR);\n    return `${h} hour${h === 1 ? \"\" : \"s\"}`;\n  }\n  if (seconds < MONTH) {\n    const d = Math.floor(seconds / DAY);\n    return `${d} day${d === 1 ? \"\" : \"s\"}`;\n  }\n  if (seconds < YEAR) {\n    const m = Math.floor(seconds / MONTH);\n    return `${m} month${m === 1 ? \"\" : \"s\"}`;\n  }\n  const y = Math.floor(seconds / YEAR);\n  return `${y} year${y === 1 ? \"\" : \"s\"}`;\n}\n\nexport function formatDate(date: Date, style: \"long\" | \"short\" = \"long\"): string {\n  if (style === \"short\") {\n    return date.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n  }\n  return date.toLocaleDateString(\"en-US\", {\n    month: \"long\",\n    day: \"2-digit\",\n    year: \"numeric\",\n  });\n}\n","// ABOUTME: String-level HTML helpers for escaping, decoding, and reading attributes\n// ABOUTME: from markup that is processed without a DOM parser.\n\nexport function escapeHtml(text: string): string {\n  return text\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nexport function escapeHtmlAttribute(text: string): string {\n  return escapeHtml(text).replace(/'/g, \"&#39;\");\n}\n\nexport function decodeHtml(text: string): string {\n  return text\n    .replace(/&nbsp;/g, \" \")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&#39;/g, \"'\")\n    .replace(/&amp;/g, \"&\");\n}\n\nconst attributeTokenPattern = /([^\\s\"'<>/=]+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?/g;\n\nexport function getHtmlAttribute(tag: string, attributeName: string): string | null {\n  const attributes = tag.replace(/^<[a-zA-Z][^\\s/>]*/, \"\").replace(/\\s*\\/?>?\\s*$/, \"\");\n  const wantedName = attributeName.toLowerCase();\n  attributeTokenPattern.lastIndex = 0;\n\n  let match: RegExpExecArray | null;\n  while ((match = attributeTokenPattern.exec(attributes))) {\n    if (match[1].toLowerCase() === wantedName) {\n      return match[2] ?? match[3] ?? match[4] ?? \"\";\n    }\n  }\n\n  return null;\n}\n","// ABOUTME: Safely hydrates persisted interactive-demo metadata into responsive iframe embeds\n// ABOUTME: or plain links, so editors can store iframe-free HTML across content surfaces.\n\nimport { decodeHtml, escapeHtml, escapeHtmlAttribute, getHtmlAttribute } from \"./html\";\n\nconst interactiveDemoBlockPattern =\n  /<div\\b[^>]*\\bdata-type=(?:\"interactive-demo\"|'interactive-demo')[^>]*>(?:(?!<div\\b)[\\s\\S])*?<\\/div>/gi;\nconst videoEmbedBlockPattern =\n  /<div\\b[^>]*\\bdata-type=(?:\"video-embed\"|'video-embed')[^>]*>(?:(?!<div\\b)[\\s\\S])*?<\\/div>/gi;\n\nfunction isValidVideoEmbedUrl(src: string): boolean {\n  try {\n    const url = new URL(src);\n    if (url.protocol !== \"https:\") return false;\n\n    const host = url.hostname.toLowerCase();\n    const path = url.pathname.replace(/\\/+$/, \"\");\n    if (\n      host === \"www.youtube.com\" ||\n      host === \"youtube.com\" ||\n      host === \"www.youtube-nocookie.com\"\n    ) {\n      return /^\\/embed\\/[^/]+$/.test(path);\n    }\n    if (host === \"player.vimeo.com\") return /^\\/video\\/[^/]+$/.test(path);\n    if (host === \"www.loom.com\") return /^\\/embed\\/[^/]+$/.test(path);\n    if (host === \"www.tella.tv\") return /^\\/video\\/[^/]+\\/embed$/.test(path);\n    if (host === \"iframe.videodelivery.net\") return /^\\/[^/]+$/.test(path);\n    if (/^customer-[a-z0-9-]+\\.cloudflarestream\\.com$/.test(host)) {\n      return /^\\/[^/]+\\/iframe$/.test(path);\n    }\n    return false;\n  } catch {\n    return false;\n  }\n}\n\nfunction isValidDemoEmbedUrl(demoId: string, src: string): boolean {\n  try {\n    const url = new URL(src);\n    return (\n      (url.protocol === \"https:\" || url.protocol === \"http:\") &&\n      url.pathname.replace(/\\/+$/, \"\") === `/embed/demos/${demoId}`\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction getDemoEmbedMetadata(\n  block: string,\n): { demoId: string; src: string; title: string } | null {\n  const openingTag = block.match(/^<div\\b[^>]*>/i)?.[0];\n  if (!openingTag) return null;\n\n  const demoId = getHtmlAttribute(openingTag, \"data-demo-id\")?.trim() || \"\";\n  const src = decodeHtml(getHtmlAttribute(openingTag, \"data-demo-src\")?.trim() || \"\");\n  const title = decodeHtml(\n    getHtmlAttribute(openingTag, \"data-demo-title\")?.trim() || \"Interactive demo\",\n  );\n\n  if (!demoId || !src || !isValidDemoEmbedUrl(demoId, src)) return null;\n\n  return { demoId, src, title };\n}\n\nfunction getVideoEmbedMetadata(block: string): { src: string; title: string } | null {\n  const openingTag = block.match(/^<div\\b[^>]*>/i)?.[0];\n  if (!openingTag) return null;\n\n  const src = decodeHtml(getHtmlAttribute(openingTag, \"data-video-src\")?.trim() || \"\");\n  const title = decodeHtml(\n    getHtmlAttribute(openingTag, \"data-video-title\")?.trim() || \"Embedded video\",\n  );\n  if (!src || !isValidVideoEmbedUrl(src)) return null;\n\n  return { src, title };\n}\n\nfunction renderVideoEmbeds(html: string): string {\n  return html.replace(videoEmbedBlockPattern, (block) => {\n    const video = getVideoEmbedMetadata(block);\n    if (!video) return \"\";\n\n    const safeSrc = escapeHtmlAttribute(video.src);\n    const safeTitle = escapeHtmlAttribute(video.title);\n    return [\n      '<div class=\"uo-video-embed\" data-type=\"video-embed\" style=\"position:relative;width:100%;max-width:100%;aspect-ratio:16/9;margin:1.25rem 0;overflow:hidden;border:1px solid rgb(0 0 0 / 0.1);border-radius:0.75rem;background:#000\">',\n      `<iframe src=\"${safeSrc}\" title=\"${safeTitle}\" loading=\"lazy\" sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\" allowfullscreen=\"true\" frameborder=\"0\" style=\"position:absolute;inset:0;display:block;width:100%;height:100%;border:0\"></iframe>`,\n      \"</div>\",\n    ].join(\"\");\n  });\n}\n\nexport function renderInteractiveDemoEmbeds(html: string): string {\n  if (!html) return html;\n\n  const demosRendered = html.replace(interactiveDemoBlockPattern, (block) => {\n    const demo = getDemoEmbedMetadata(block);\n    if (!demo) {\n      return '<div class=\"uo-interactive-demo\" data-type=\"interactive-demo\"></div>';\n    }\n\n    const safeDemoId = escapeHtmlAttribute(demo.demoId);\n    const safeSrc = escapeHtmlAttribute(demo.src);\n    const safeTitle = escapeHtmlAttribute(demo.title);\n\n    return [\n      `<div class=\"uo-interactive-demo\" data-type=\"interactive-demo\" data-demo-id=\"${safeDemoId}\" data-demo-src=\"${safeSrc}\" data-demo-title=\"${safeTitle}\" style=\"position:relative;width:100%;max-width:100%;aspect-ratio:16/9;margin:1.25rem 0;overflow:hidden;border:1px solid rgb(0 0 0 / 0.1);border-radius:0.75rem\">`,\n      `<iframe src=\"${safeSrc}\" title=\"${safeTitle}\" loading=\"lazy\" scrolling=\"no\" sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox\" allow=\"autoplay; fullscreen; clipboard-write\" allowfullscreen=\"true\" frameborder=\"0\" style=\"position:absolute;inset:0;display:block;width:100%;height:100%;border:0\"></iframe>`,\n      \"</div>\",\n    ].join(\"\");\n  });\n\n  return renderVideoEmbeds(demosRendered);\n}\n\nexport function replaceInteractiveDemoEmbedsWithLinks(html: string): string {\n  if (!html) return html;\n\n  const demosReplaced = html.replace(interactiveDemoBlockPattern, (block) => {\n    const demo = getDemoEmbedMetadata(block);\n    if (!demo) return \"\";\n\n    return `<p><a href=\"${escapeHtmlAttribute(demo.src)}\" target=\"_blank\" rel=\"noopener noreferrer\">Watch the interactive demo: ${escapeHtml(demo.title)} &rarr;</a></p>`;\n  });\n\n  return demosReplaced.replace(videoEmbedBlockPattern, (block) => {\n    const video = getVideoEmbedMetadata(block);\n    if (!video) return \"\";\n\n    return `<p><a href=\"${escapeHtmlAttribute(video.src)}\" target=\"_blank\" rel=\"noopener noreferrer\">Watch the video: ${escapeHtml(video.title)} &rarr;</a></p>`;\n  });\n}\n","import { ArrowRight, BookOpen, CheckCircle2, PlayCircle } from \"lucide-react\";\n\ntype FeedbackReference = {\n  id: string;\n  title?: string;\n};\n\ntype ArticleReference = {\n  id: string;\n  title?: string;\n  metaDescription?: string;\n  meta?: {\n    summary?: string;\n    description?: string;\n  };\n};\n\ntype TourReference = {\n  id: string;\n  title?: string;\n  description?: string;\n};\n\nexport default function AnnouncementReferences({\n  feedbacks,\n  articles,\n  tours,\n  onFeedbackClick,\n  onArticleClick,\n  onTourClick,\n}: {\n  feedbacks?: FeedbackReference[];\n  articles?: ArticleReference[];\n  tours?: TourReference[];\n  onFeedbackClick?: (feedback: FeedbackReference) => void;\n  onArticleClick?: (article: ArticleReference) => void;\n  onTourClick?: (tour: TourReference) => void;\n}) {\n  const linkedFeedbacks = onFeedbackClick && Array.isArray(feedbacks) ? feedbacks : [];\n  const helpArticles = onArticleClick && Array.isArray(articles) ? articles : [];\n  const productTours = onTourClick && Array.isArray(tours) ? tours : [];\n\n  if (linkedFeedbacks.length === 0 && helpArticles.length === 0 && productTours.length === 0) {\n    return null;\n  }\n\n  const hasPreviousReferences = linkedFeedbacks.length > 0 || helpArticles.length > 0;\n\n  return (\n    <section className=\"mt-7 border-t border-dashed border-neutral-200 pt-5 dark:border-neutral-800\">\n      {linkedFeedbacks.length > 0 && (\n        <div>\n          <p className=\"text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-neutral-100\">\n            Built from Feedback\n          </p>\n          <div className=\"mt-3 flex flex-col gap-2\">\n            {linkedFeedbacks.map((feedback) => (\n              <button\n                key={feedback.id}\n                type=\"button\"\n                onClick={() => onFeedbackClick(feedback)}\n                className=\"group flex w-full items-start gap-3 rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-3 text-left transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n              >\n                <CheckCircle2\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-emerald-500\"\n                  aria-hidden=\"true\"\n                />\n                <span className=\"min-w-0 flex-1\">\n                  <span className=\"block text-sm font-medium text-gray-900 dark:text-neutral-100\">\n                    {feedback.title || \"Untitled feedback\"}\n                  </span>\n                </span>\n                <ArrowRight\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-neutral-400 transition-colors group-hover:text-neutral-700 dark:group-hover:text-neutral-200\"\n                  aria-hidden=\"true\"\n                />\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {helpArticles.length > 0 && (\n        <div\n          className={\n            linkedFeedbacks.length > 0\n              ? \"mt-5 border-t border-dashed border-neutral-200 pt-5 dark:border-neutral-800\"\n              : \"\"\n          }\n        >\n          <p className=\"text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-neutral-100\">\n            Related guide\n          </p>\n          <div className=\"mt-3 flex flex-col gap-2\">\n            {helpArticles.slice(0, 1).map((article) => (\n              <button\n                key={article.id}\n                type=\"button\"\n                onClick={() => onArticleClick(article)}\n                className=\"group flex w-full items-start gap-3 rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-3 text-left transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n              >\n                <BookOpen\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-neutral-500 dark:text-neutral-400\"\n                  aria-hidden=\"true\"\n                />\n                <span className=\"min-w-0 flex-1\">\n                  <span className=\"block text-sm font-medium text-gray-900 dark:text-neutral-100\">\n                    {article.title || \"Help article\"}\n                  </span>\n                  {(article.meta?.summary ||\n                    article.metaDescription ||\n                    article.meta?.description) && (\n                    <span className=\"mt-1 line-clamp-2 block text-xs leading-5 text-neutral-500 dark:text-neutral-400\">\n                      {article.meta?.summary ||\n                        article.metaDescription ||\n                        article.meta?.description}\n                    </span>\n                  )}\n                </span>\n                <ArrowRight\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-neutral-400 transition-colors group-hover:text-neutral-700 dark:group-hover:text-neutral-200\"\n                  aria-hidden=\"true\"\n                />\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {productTours.length > 0 && (\n        <div\n          className={\n            hasPreviousReferences\n              ? \"mt-5 border-t border-dashed border-neutral-200 pt-5 dark:border-neutral-800\"\n              : \"\"\n          }\n        >\n          <p className=\"text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-neutral-100\">\n            Product tour\n          </p>\n          <div className=\"mt-3 flex flex-col gap-2\">\n            {productTours.slice(0, 3).map((tour) => (\n              <button\n                key={tour.id}\n                type=\"button\"\n                onClick={() => onTourClick(tour)}\n                className=\"group flex w-full items-start gap-3 rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-3 text-left transition-colors hover:bg-neutral-100 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800\"\n              >\n                <PlayCircle\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-neutral-500 dark:text-neutral-400\"\n                  aria-hidden=\"true\"\n                />\n                <span className=\"min-w-0 flex-1\">\n                  <span className=\"block text-sm font-medium text-gray-900 dark:text-neutral-100\">\n                    {tour.title || \"Product tour\"}\n                  </span>\n                  {tour.description && (\n                    <span className=\"mt-1 line-clamp-2 block text-xs leading-5 text-neutral-500 dark:text-neutral-400\">\n                      {tour.description}\n                    </span>\n                  )}\n                </span>\n                <ArrowRight\n                  className=\"mt-0.5 h-4 w-4 shrink-0 text-neutral-400 transition-colors group-hover:text-neutral-700 dark:group-hover:text-neutral-200\"\n                  aria-hidden=\"true\"\n                />\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n    </section>\n  );\n}\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { Button } from \"@userorbit/ui/src/ui/button\";\nimport { formatDate } from \"../../lib/dates\";\nimport React, { useState } from \"react\";\nimport { Logger } from \"../../lib/logger\";\nimport { createDocumentComment, fetchDocumentComments } from \"./api-utils\";\n\nconst logger = Logger.getInstance();\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  subscriber?: {\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  };\n  parentId?: string;\n  replies?: Comment[];\n}\n\ninterface CommentSectionProps {\n  announcementId: string;\n  subscriberCode?: string;\n  initialComments?: Comment[];\n  showHeader?: boolean;\n}\n\nconst Avatar: React.FC<{ subscriber?: Comment[\"subscriber\"]; className?: string }> = ({\n  subscriber,\n  className = \"w-7 h-7\",\n}) => {\n  const getInitials = () => {\n    if (subscriber?.name) {\n      return subscriber.name.slice(0, 2).toUpperCase();\n    }\n    if (subscriber?.email) {\n      return subscriber.email.slice(0, 2).toUpperCase();\n    }\n    return \"?\";\n  };\n\n  return (\n    <div\n      className={`${className} flex flex-shrink-0 items-center justify-center rounded-full bg-neutral-100 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.08)] dark:bg-neutral-800 dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)]`}\n    >\n      {subscriber?.avatarUrl ? (\n        <img\n          src={subscriber.avatarUrl}\n          alt={subscriber.name || \"User\"}\n          className={`${className} rounded-full object-cover`}\n        />\n      ) : (\n        <span className=\"text-[12px] font-semibold text-gray-600 dark:text-neutral-300\">\n          {getInitials()}\n        </span>\n      )}\n    </div>\n  );\n};\n\nconst getSubscriberDisplayName = (subscriber?: Comment[\"subscriber\"]) => {\n  return subscriber?.name?.trim() || subscriber?.email?.trim() || \"Anonymous\";\n};\n\nconst getReplyPlaceholderName = (subscriber?: Comment[\"subscriber\"]) => {\n  return subscriber?.name?.trim().split(/\\s+/)[0] || \"Anonymous\";\n};\n\ninterface CommentItemProps {\n  comment: Comment;\n  isReply?: boolean;\n  replyingTo: string | null;\n  replyText: string;\n  setReplyingTo: (id: string | null) => void;\n  setReplyText: (text: string) => void;\n  handleReply: () => void;\n  handleReplyKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n  replyMutation: any;\n}\n\nconst ReplyComposer: React.FC<{\n  value: string;\n  onChange: (value: string) => void;\n  onSubmit: () => void;\n  onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n  placeholder: string;\n  isPending: boolean;\n  onCancel: () => void;\n}> = ({ value, onChange, onSubmit, onKeyDown, placeholder, isPending, onCancel }) => {\n  const [isFocused, setIsFocused] = useState(false);\n  const hasValue = value.trim().length > 0;\n  const isExpanded = isFocused || hasValue || isPending;\n\n  return (\n    <div className=\"rounded-xl bg-neutral-50 px-3 pl-4 pb-3 pt-2.5 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.08)] transition-[background-color,box-shadow] duration-200 ease-out focus-within:bg-white focus-within:shadow-[inset_0_0_0_1px_rgba(0,0,0,0.18)] dark:bg-white/[0.04] dark:focus-within:bg-white/[0.06] dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)] dark:focus-within:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.22)]\">\n      <textarea\n        rows={1}\n        placeholder={placeholder}\n        value={value}\n        onChange={(e) => onChange(e.target.value)}\n        onKeyDown={onKeyDown}\n        onFocus={() => setIsFocused(true)}\n        onBlur={() => setIsFocused(false)}\n        className={`block w-full resize-none border-0 bg-transparent p-0 font-sans text-[13.5px] leading-[1.55] tracking-[-0.005em] text-gray-900 outline-none transition-[min-height] duration-300 placeholder:text-gray-400 dark:text-white dark:placeholder:text-neutral-500 ${\n          isExpanded ? \"min-h-16\" : \"min-h-10\"\n        }`}\n      />\n      <div\n        className={`grid transition-[grid-template-rows,opacity,transform] duration-300 ease-out ${\n          isExpanded\n            ? \"grid-rows-[1fr] translate-y-0 opacity-100\"\n            : \"grid-rows-[0fr] -translate-y-1 opacity-0\"\n        }`}\n      >\n        <div className=\"overflow-hidden\">\n          <div className=\"mt-1.5 flex items-center justify-end gap-2\">\n            <button\n              type=\"button\"\n              className=\"inline-flex h-7 items-center rounded-lg px-3 text-[12.5px] font-medium tracking-[-0.005em] text-gray-500 transition-colors hover:text-gray-900 dark:text-neutral-400 dark:hover:text-white\"\n              onClick={onCancel}\n            >\n              Cancel\n            </button>\n            <Button\n              type=\"button\"\n              size=\"sm\"\n              className={`inline-flex h-7 min-h-7 items-center rounded-lg px-3 text-[12.5px] font-medium tracking-[-0.005em] ${\n                hasValue\n                  ? \"bg-neutral-950 text-white hover:bg-neutral-800 dark:bg-white dark:text-black dark:hover:bg-neutral-200\"\n                  : \"bg-neutral-200 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-500\"\n              }`}\n              onClick={onSubmit}\n              disabled={!hasValue || isPending}\n              loading={isPending}\n            >\n              Reply\n            </Button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst CommentItem: React.FC<CommentItemProps> = ({\n  comment,\n  isReply = false,\n  replyingTo,\n  replyText,\n  setReplyingTo,\n  setReplyText,\n  handleReply,\n  handleReplyKeyDown,\n  replyMutation,\n}) => {\n  return (\n    <li className={isReply ? \"relative list-none\" : \"relative list-none py-5 last:[&>hr]:hidden\"}>\n      <article className=\"flex items-start gap-3\">\n        <Avatar subscriber={comment.subscriber} className=\"h-[30px] w-[30px]\" />\n        <div className=\"min-w-0 flex-1\">\n          <div className=\"flex flex-wrap items-baseline gap-x-1.5 gap-y-0.5 text-[12px] tracking-[-0.005em] text-gray-500 dark:text-neutral-400\">\n            <span className=\"text-[13.5px] font-semibold tracking-[-0.005em] text-gray-900 dark:text-white\">\n              {getSubscriberDisplayName(comment.subscriber)}\n            </span>\n            {comment.createdAt && (\n              <>\n                <span className=\"text-gray-300 dark:text-neutral-600\">&middot;</span>\n                <span>{formatDate(new Date(comment.createdAt), \"short\")}</span>\n              </>\n            )}\n          </div>\n          <p className=\"mt-1 whitespace-pre-wrap text-pretty text-[14px] leading-[1.55] tracking-[-0.011em] text-gray-700 dark:text-neutral-300\">\n            {comment.text}\n          </p>\n          {!isReply && (\n            <div className=\"mt-2 flex items-center gap-3\">\n              <button\n                type=\"button\"\n                className=\"p-0 text-[12px] font-medium tracking-[-0.005em] text-gray-500 transition-colors hover:text-gray-900 dark:text-neutral-400 dark:hover:text-white\"\n                onClick={() => setReplyingTo(replyingTo === comment.id ? null : comment.id)}\n              >\n                {replyingTo === comment.id ? \"Cancel\" : \"Reply\"}\n              </button>\n              {comment.replies && comment.replies.length > 0 && (\n                <span className=\"text-[12px] font-medium tracking-[-0.005em] text-gray-400 dark:text-neutral-500\">\n                  {comment.replies.length} Replies\n                </span>\n              )}\n            </div>\n          )}\n        </div>\n      </article>\n      {replyingTo === comment.id && (\n        <div\n          aria-hidden=\"false\"\n          className=\"grid grid-rows-[1fr] transition-[grid-template-rows] duration-300\"\n          style={{ transitionTimingFunction: \"cubic-bezier(0.32, 0.72, 0, 1)\" }}\n        >\n          <div className=\"overflow-hidden\">\n            <div className=\"mt-4 translate-y-0 opacity-100 transition-[opacity,transform] duration-300\">\n              <ReplyComposer\n                value={replyText}\n                onChange={setReplyText}\n                onSubmit={handleReply}\n                onKeyDown={handleReplyKeyDown}\n                placeholder={`Reply to ${getReplyPlaceholderName(comment.subscriber)}...`}\n                isPending={replyMutation.isPending}\n                onCancel={() => {\n                  setReplyingTo(null);\n                  setReplyText(\"\");\n                }}\n              />\n            </div>\n          </div>\n        </div>\n      )}\n      {comment.replies && comment.replies.length > 0 && (\n        <ul className=\"relative m-0 ml-[46px] mt-4 flex list-none flex-col gap-4 p-0 before:absolute before:-left-[23px] before:bottom-2 before:top-0 before:w-px before:bg-neutral-200 dark:before:bg-neutral-800\">\n          {comment.replies.map((reply) => (\n            <CommentItem\n              key={reply.id}\n              comment={reply}\n              isReply={true}\n              replyingTo={replyingTo}\n              replyText={replyText}\n              setReplyingTo={setReplyingTo}\n              setReplyText={setReplyText}\n              handleReply={handleReply}\n              handleReplyKeyDown={handleReplyKeyDown}\n              replyMutation={replyMutation}\n            />\n          ))}\n        </ul>\n      )}\n      {!isReply && (\n        <hr className=\"absolute bottom-0 left-[46px] right-0 m-0 border-0 border-t border-dashed border-neutral-200 dark:border-neutral-800\" />\n      )}\n    </li>\n  );\n};\n\nconst CommentSection: React.FC<CommentSectionProps> = ({\n  announcementId,\n  subscriberCode,\n  initialComments = [],\n  showHeader = true,\n}) => {\n  const queryClient = useQueryClient();\n  const [replyingTo, setReplyingTo] = useState<string | null>(null);\n  const [replyText, setReplyText] = useState<string>(\"\");\n\n  // Use React Query to fetch comments\n  const {\n    data: comments = initialComments,\n    isLoading,\n    error,\n  } = useQuery({\n    queryKey: [\"comments\", announcementId],\n    queryFn: async () => {\n      const response = await fetchDocumentComments(announcementId, subscriberCode);\n      return response?.data || [];\n    },\n    enabled: !!announcementId && initialComments.length === 0, // Only fetch if no initial comments\n    staleTime: 1000 * 30, // 30 seconds\n  });\n\n  logger.log(\"comments\", comments, error);\n\n  // Mutation for creating replies\n  const replyMutation = useMutation({\n    mutationFn: async ({ commentId, text }: { commentId: string; text: string }) => {\n      return createDocumentComment(announcementId, text, subscriberCode, commentId);\n    },\n    onSuccess: () => {\n      void queryClient.invalidateQueries({ queryKey: [\"comments\", announcementId] });\n      setReplyText(\"\");\n      setReplyingTo(null);\n    },\n    onError: (error) => {\n      logger.error(\"Failed to add reply:\", error);\n    },\n  });\n\n  const handleReply = () => {\n    if (!replyText.trim() || !replyingTo) return;\n    replyMutation.mutate({ commentId: replyingTo, text: replyText.trim() });\n  };\n\n  const handleReplyKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n    if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      handleReply();\n    }\n  };\n\n  const commentsCount = comments.reduce(\n    (total: number, comment: Comment) => total + 1 + (comment.replies?.length || 0),\n    0,\n  );\n\n  return (\n    <section\n      className={\n        showHeader\n          ? \"mt-7 border-t border-dashed border-neutral-200 pb-8 pt-7 dark:border-neutral-800\"\n          : \"pb-8\"\n      }\n    >\n      {showHeader && (\n        <header className=\"flex items-center justify-between gap-2\">\n          <p className=\"flex items-center gap-1.5 text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-white\">\n            Comments\n            <span className=\"text-gray-300 dark:text-neutral-600\">&middot;</span>\n            <span className=\"font-medium normal-case tracking-[-0.005em] text-gray-500 dark:text-neutral-400\">\n              {commentsCount}\n            </span>\n          </p>\n        </header>\n      )}\n\n      <ul className=\"m-0 mt-2 list-none p-0\">\n        {isLoading ? (\n          <li className=\"py-8 text-center text-gray-500 dark:text-neutral-400\">\n            <div className=\"mx-auto mb-2 h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-gray-500 dark:border-neutral-600 dark:border-t-neutral-400\" />\n            Loading comments...\n          </li>\n        ) : error ? (\n          <li className=\"py-8 text-center text-red-500 dark:text-red-400\">\n            Failed to load comments. Please try again.\n          </li>\n        ) : comments.length === 0 ? (\n          <li className=\"py-12 text-center text-[15px] font-medium tracking-[-0.01em] text-gray-500 dark:text-neutral-400\">\n            No comments yet. Be the first to comment!\n          </li>\n        ) : (\n          comments.map((comment: Comment) => (\n            <CommentItem\n              key={comment.id}\n              comment={comment}\n              replyingTo={replyingTo}\n              replyText={replyText}\n              setReplyingTo={setReplyingTo}\n              setReplyText={setReplyText}\n              handleReply={handleReply}\n              handleReplyKeyDown={handleReplyKeyDown}\n              replyMutation={replyMutation}\n            />\n          ))\n        )}\n      </ul>\n    </section>\n  );\n};\n\nexport default CommentSection;\n","import { Button } from \"@userorbit/ui/src/ui/button\";\nimport { motion } from \"framer-motion\";\nimport { SmilePlus } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { createReaction } from \"./api-utils\";\n\ninterface Reaction {\n  id: string;\n  value: number;\n  type: string;\n  count?: number;\n}\n\ninterface ReactionBarProps {\n  announcementId: string;\n  reactions?: Reaction[];\n  userReaction?: number;\n  subscriberCode?: string;\n  onReactionUpdate?: (newReaction: number | null, status: \"success\" | \"error\") => void;\n}\n\nconst REACTIONS_EMOJI = {\n  1: \"❤️\",\n  2: \"🤩\",\n  3: \"😐\",\n  4: \"🙁\",\n  5: \"😡\",\n};\n\nconst ReactionBar: React.FC<ReactionBarProps> = ({\n  announcementId,\n  // reactions,\n  userReaction,\n  subscriberCode,\n  onReactionUpdate,\n}) => {\n  const [currentReaction, setCurrentReaction] = useState(userReaction);\n  const [isOpen, setIsOpen] = useState(false);\n  const [isLoading, setIsLoading] = useState(false);\n\n  useEffect(() => {\n    setCurrentReaction(userReaction);\n  }, [userReaction]);\n\n  const handleReactionSelect = async (reactionValue: number) => {\n    if (isLoading) return;\n\n    setIsLoading(true);\n    setIsOpen(false);\n\n    try {\n      const response = await createReaction(announcementId, reactionValue, subscriberCode);\n\n      if (response && response.data) {\n        const newReaction = response.data.value;\n        setCurrentReaction(newReaction);\n        onReactionUpdate?.(newReaction, \"success\");\n      }\n    } catch (error) {\n      console.error(\"Failed to add reaction:\", error);\n      onReactionUpdate?.(null, \"error\");\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  // Get current reaction emoji or default icon\n  const currentEmoji = currentReaction\n    ? REACTIONS_EMOJI[currentReaction as keyof typeof REACTIONS_EMOJI]\n    : null;\n\n  return (\n    <div className=\"relative\">\n      <Button\n        variant=\"outline\"\n        className=\"h-8 cursor-pointer bg-transparent text-neutral-500 transition-colors hover:bg-neutral-500 hover:text-white dark:text-neutral-700 dark:hover:bg-neutral-400 dark:hover:text-black\"\n        // className=\"px-2 py-1.5 text-md cursor-pointer font-medium border border-gray-300 dark:border-neutral-600 text-gray-700 dark:text-neutral-300 hover:border-gray-400 dark:hover:border-neutral-500 hover:bg-gray-50 dark:hover:bg-neutral-700 rounded-lg transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed\"\n        onClick={(e) => {\n          e.stopPropagation();\n          setIsOpen(!isOpen);\n        }}\n        disabled={isLoading}\n        tooltip={currentReaction ? \"React\" : \"Add reaction\"}\n      >\n        {currentEmoji ? (\n          <span className=\"text-lg\">{currentEmoji}</span>\n        ) : (\n          <div className=\"flex items-center justify-center\">\n            <SmilePlus className=\"h-5 w-5\" />\n          </div>\n        )}\n        {/* <span className=\"text-gray-700 dark:text-neutral-300 text-sm\"> */}\n\n        {/* </span> */}\n      </Button>\n\n      <>\n        {isOpen && (\n          <>\n            {/* Backdrop */}\n            <div\n              className=\"fixed inset-0 z-40\"\n              onClick={(e) => {\n                e.stopPropagation();\n                setIsOpen(false);\n              }}\n            />\n\n            {/* Emoji Picker */}\n            <motion.div\n              className=\"absolute bottom-full right-0 z-50 mb-2\"\n              initial={{ opacity: 0, scale: 0.8, y: 10 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.8, y: 10 }}\n              transition={{ duration: 0.15 }}\n            >\n              <div className=\"flex overflow-hidden rounded-lg border border-gray-300 bg-white shadow-lg dark:border-neutral-600 dark:bg-neutral-900\">\n                {Object.entries(REACTIONS_EMOJI).map(([value, emoji]) => (\n                  <button\n                    key={value}\n                    className=\"flex h-10 w-10 items-center justify-center text-lg transition-colors hover:bg-gray-100 dark:hover:bg-neutral-800\"\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      handleReactionSelect(Number.parseInt(value));\n                    }}\n                  >\n                    {emoji}\n                  </button>\n                ))}\n              </div>\n            </motion.div>\n          </>\n        )}\n      </>\n    </div>\n  );\n};\n\nexport default ReactionBar;\n","import { Logger } from \"../../lib/logger\";\nimport { Announcement } from \"../../types\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { motion } from \"framer-motion\";\nimport React, { useRef, useState } from \"react\";\nimport { Button } from \"@userorbit/ui/src/ui/button\";\nimport { createDocumentComment } from \"./api-utils\";\nimport CommentSection from \"./comment-section\";\nimport ReactionBar from \"./reaction-bar\";\n\nconst logger = Logger.getInstance();\n\ntype AnnouncementQueryPage = {\n  data?: Announcement[];\n  [key: string]: unknown;\n};\n\ntype AnnouncementsQueryData = {\n  pages?: AnnouncementQueryPage[];\n  [key: string]: unknown;\n};\n\ninterface PostEngagementProps {\n  subscriberCode?: string;\n  compact?: boolean;\n  onShare?: () => void;\n  onBookmark?: () => void;\n  onCopyLink?: () => void;\n  onReport?: () => void;\n  announcement: Announcement;\n}\n\nconst PostEngagement: React.FC<PostEngagementProps> = ({\n  announcement,\n  subscriberCode,\n  compact = false,\n  // onShare,\n  // onBookmark,\n  // onCopyLink,\n  // onReport,\n}) => {\n  const queryClient = useQueryClient();\n\n  const { id: announcementId, reactions, userReaction, comments: initialComments } = announcement;\n  const selectedReaction = userReaction ?? reactions?.[0]?.value;\n  const commentsEnabled = announcement.meta?.feedback !== false;\n  const reactionsEnabled = announcement.meta?.enableReactions === true;\n\n  // const [isBookmarked, setIsBookmarked] = useState(false);\n\n  const handleReactionUpdate = (newReaction: number | null, status: \"success\" | \"error\") => {\n    if (status === \"error\") {\n      void queryClient.invalidateQueries({ queryKey: [\"announcements\", subscriberCode] });\n      return;\n    }\n\n    queryClient.setQueryData<AnnouncementsQueryData>(\n      [\"announcements\", subscriberCode],\n      (currentData) => {\n        if (!currentData?.pages) return currentData;\n\n        return {\n          ...currentData,\n          pages: currentData.pages.map((page) => ({\n            ...page,\n            data: page.data?.map((item) => {\n              if (item.id !== announcementId) return item;\n\n              const previousReaction = item.userReaction ?? item.reactions?.[0]?.value;\n              const nextReactions =\n                previousReaction || newReaction === null\n                  ? item.reactions\n                  : [\n                      ...(item.reactions || []),\n                      {\n                        id: `optimistic-${announcementId}`,\n                        value: newReaction,\n                        type: \"announcement\",\n                      },\n                    ];\n\n              return {\n                ...item,\n                userReaction: newReaction ?? undefined,\n                reactionsCount:\n                  previousReaction || newReaction === null\n                    ? item.reactionsCount\n                    : (item.reactionsCount || 0) + 1,\n                reactions: nextReactions,\n              };\n            }),\n          })),\n        };\n      },\n    );\n    void queryClient.invalidateQueries({ queryKey: [\"announcements\", subscriberCode] });\n  };\n\n  // Commented out unused handlers - can be enabled when needed\n  // const handleShare = () => {\n  //   if (navigator.share) {\n  //     navigator.share({\n  //       title: \"Check out this announcement\",\n  //       url: window.location.href,\n  //     });\n  //   } else {\n  //     onShare?.();\n  //   }\n  // };\n\n  // const handleBookmark = () => {\n  //   setIsBookmarked(!isBookmarked);\n  //   onBookmark?.();\n  // };\n\n  // const handleCopyLink = async () => {\n  //   try {\n  //     await navigator.clipboard.writeText(window.location.href);\n  //     // You could add a toast notification here\n  //     onCopyLink?.();\n  //   } catch (err) {\n  //     console.error(\"Failed to copy link:\", err);\n  //   }\n  // };\n\n  // const handleReport = () => {\n  //   onReport?.();\n  // };\n\n  const [newComment, setNewComment] = useState(\"\");\n  const [isTextareaFocused, setIsTextareaFocused] = useState(false);\n  const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n  // Use mutation for comment submission with query invalidation\n  const commentMutation = useMutation({\n    mutationFn: async (text: string) => {\n      return createDocumentComment(announcementId, text, subscriberCode);\n    },\n    onSuccess: (_response) => {\n      void queryClient.invalidateQueries({ queryKey: [\"comments\", announcementId] });\n      setNewComment(\"\");\n      setIsTextareaFocused(false);\n    },\n    onError: (error) => {\n      logger.error(\"Failed to add comment:\", error);\n    },\n  });\n\n  const handleSubmitComment = async () => {\n    if (!commentsEnabled || !newComment.trim() || commentMutation.isPending) return;\n    commentMutation.mutate(newComment.trim());\n  };\n\n  const handleKeyDown = (event: React.KeyboardEvent) => {\n    if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n      event.preventDefault();\n      void handleSubmitComment();\n    }\n  };\n\n  const isExpanded = isTextareaFocused || newComment.trim().length > 0;\n  const hasValue = newComment.trim().length > 0;\n  const commentsCount =\n    announcement.commentsCount ??\n    initialComments?.reduce(\n      (total: number, comment: any) => total + 1 + (comment.replies?.length || 0),\n      0,\n    ) ??\n    0;\n  if (!commentsEnabled && !reactionsEnabled) return null;\n\n  return (\n    <section className=\"mt-4 border-t border-dashed border-neutral-200 pt-4 dark:border-neutral-800\">\n      <header\n        className={`flex items-center gap-2 ${commentsEnabled ? \"justify-between\" : \"justify-end\"}`}\n      >\n        {commentsEnabled && (\n          <p className=\"flex items-center gap-1.5 text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-white\">\n            Comments\n            <span className=\"text-gray-300 dark:text-neutral-600\">&middot;</span>\n            <span className=\"tabular-nums font-medium normal-case tracking-[-0.005em] text-gray-500 dark:text-neutral-400\">\n              {commentsCount}\n            </span>\n          </p>\n        )}\n        {reactionsEnabled && (\n          <ReactionBar\n            announcementId={announcementId}\n            reactions={reactions}\n            userReaction={selectedReaction}\n            subscriberCode={subscriberCode}\n            onReactionUpdate={handleReactionUpdate}\n          />\n        )}\n      </header>\n\n      {commentsEnabled && (\n        <motion.div\n          className=\"mt-4 cursor-text rounded-xl bg-neutral-50 px-3 pl-4 pb-3 pt-2.5 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.08)] transition-[background-color,box-shadow] duration-200 ease-out focus-within:bg-white focus-within:shadow-[inset_0_0_0_1px_rgba(0,0,0,0.18)] dark:bg-white/[0.04] dark:focus-within:bg-white/[0.06] dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)] dark:focus-within:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.22)]\"\n          onClick={() => {\n            textareaRef.current?.focus();\n            setIsTextareaFocused(true);\n          }}\n        >\n          <motion.textarea\n            ref={textareaRef}\n            value={newComment}\n            onChange={(e) => setNewComment(e.target.value)}\n            onKeyDown={handleKeyDown}\n            onFocus={() => setIsTextareaFocused(true)}\n            onBlur={() => setIsTextareaFocused(false)}\n            placeholder=\"Add a comment...\"\n            className=\"block w-full resize-none border-0 bg-transparent p-0 font-sans text-[13.5px] leading-[1.55] tracking-[-0.005em] text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-neutral-500\"\n            animate={{\n              minHeight: isExpanded ? \"64px\" : \"40px\",\n            }}\n            transition={{\n              duration: 0.3,\n              ease: \"easeInOut\",\n            }}\n            style={{\n              overflow: \"hidden\",\n            }}\n          />\n          <div\n            className={`grid transition-[grid-template-rows,opacity,transform] duration-300 ease-out ${\n              isExpanded\n                ? \"grid-rows-[1fr] translate-y-0 opacity-100\"\n                : \"grid-rows-[0fr] -translate-y-1 opacity-0\"\n            }`}\n          >\n            <div className=\"overflow-hidden\">\n              <div className=\"mt-1.5 flex items-center justify-between gap-2\">\n                <div />\n                <Button\n                  variant=\"flat\"\n                  onClick={handleSubmitComment}\n                  disabled={!hasValue || commentMutation.isPending}\n                  className={`inline-flex h-7 min-h-7 items-center rounded-lg px-3 text-[12.5px] font-medium tracking-[-0.005em] ${\n                    hasValue\n                      ? \"bg-neutral-950 text-white hover:bg-neutral-800 dark:bg-white dark:text-black dark:hover:bg-neutral-200\"\n                      : \"bg-neutral-200 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-500\"\n                  }`}\n                  loading={commentMutation.isPending}\n                >\n                  Comment\n                </Button>\n              </div>\n            </div>\n          </div>\n        </motion.div>\n      )}\n\n      {!compact && commentsEnabled && (\n        <div className=\"space-y-4\">\n          <CommentSection\n            announcementId={announcementId}\n            subscriberCode={subscriberCode}\n            initialComments={initialComments}\n            showHeader={false}\n          />\n        </div>\n      )}\n    </section>\n  );\n};\n\nexport default PostEngagement;\n","import { formatDate } from \"../../lib/dates\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { motion } from \"framer-motion\";\nimport { ArrowUpRight, BadgeCheck } from \"lucide-react\";\nimport React from \"react\";\nimport { renderInteractiveDemoEmbeds } from \"@userorbit/utils/interactive-demo\";\nimport AnnouncementReferences from \"./announcement-references\";\nimport { fetchArticleById, fetchFeedbackById, fetchTourById } from \"./api-utils\";\nimport PostEngagement from \"./post-engagement\";\nimport { TeamMember } from \"./use-widget-data\";\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  author?: {\n    name?: string;\n    email?: string;\n  };\n  parentId?: string;\n}\n\ninterface Reaction {\n  id: string;\n  value: number;\n  type: string;\n  count?: number;\n}\n\ninterface Announcement {\n  id: string;\n  title: string;\n  text: string;\n  createdAt: string;\n  url?: string;\n  pinned?: boolean;\n  collectionId?: string;\n  meta?: {\n    ctaLink?: string;\n    ctaTitle?: string;\n    ctaImage?: string;\n    ctaImageCaption?: string;\n    feedbackIds?: string[];\n    linkedFeedbackIds?: string[];\n    articleIds?: string[];\n    helpArticleIds?: string[];\n    tourIds?: string[];\n    productTourIds?: string[];\n  };\n  updatedAt?: string;\n  collaboratorIds?: string[];\n  reactions?: Reaction[];\n  comments?: Comment[];\n  commentsCount?: number;\n  reactionsCount?: number;\n  userReaction?: number;\n  linkedFeedbacks?: any[];\n  helpArticles?: any[];\n  productTours?: any[];\n}\n\ninterface Collection {\n  id: string;\n  name: string;\n  description?: string;\n  color: string;\n}\n\ninterface AnnouncementDetailProps {\n  announcement: Announcement;\n  subscriberCode?: string;\n  collections: Collection[];\n  onBack: () => void;\n  teamMembers: TeamMember[];\n  product: any;\n  onClose: () => void;\n  onFeedbackClick?: (feedback: any) => void;\n  onArticleClick?: (article: any) => void;\n  onTourClick?: (tour: any) => void;\n  showPoweredByFooter?: boolean;\n}\n\nconst getReferenceIds = (\n  meta: Announcement[\"meta\"],\n  primaryKey: \"feedbackIds\" | \"articleIds\" | \"tourIds\",\n  fallbackKey: \"linkedFeedbackIds\" | \"helpArticleIds\" | \"productTourIds\",\n) => {\n  const values = [\n    ...(Array.isArray(meta?.[primaryKey]) ? meta[primaryKey] : []),\n    ...(Array.isArray(meta?.[fallbackKey]) ? meta[fallbackKey] : []),\n  ];\n\n  return Array.from(\n    new Set(values.filter((id): id is string => typeof id === \"string\" && id.length > 0)),\n  );\n};\n\nconst AnnouncementDetail: React.FC<AnnouncementDetailProps> = ({\n  announcement,\n  subscriberCode,\n  collections,\n  teamMembers,\n  onFeedbackClick,\n  onArticleClick,\n  onTourClick,\n  showPoweredByFooter = false,\n}) => {\n  const postCollaborators = announcement.collaboratorIds\n    ? teamMembers?.filter((member: any) => announcement.collaboratorIds?.includes(member.id))\n    : [];\n\n  const label = collections.find(\n    (collection: Collection) => collection.id === announcement.collectionId,\n  );\n\n  const hydratedFeedbacks = Array.isArray(announcement.linkedFeedbacks)\n    ? announcement.linkedFeedbacks\n    : [];\n  const hydratedArticles = Array.isArray(announcement.helpArticles)\n    ? announcement.helpArticles\n    : [];\n  const hydratedTours = Array.isArray(announcement.productTours)\n    ? announcement.productTours.filter((tour) => tour?.publishedAt)\n    : [];\n  const feedbackIds =\n    hydratedFeedbacks.length === 0 && onFeedbackClick\n      ? getReferenceIds(announcement.meta, \"feedbackIds\", \"linkedFeedbackIds\")\n      : [];\n  const articleIds =\n    hydratedArticles.length === 0 && onArticleClick\n      ? getReferenceIds(announcement.meta, \"articleIds\", \"helpArticleIds\")\n      : [];\n  const tourIds =\n    hydratedTours.length === 0 && onTourClick\n      ? getReferenceIds(announcement.meta, \"tourIds\", \"productTourIds\")\n      : [];\n\n  const { data: fallbackReferences } = useQuery({\n    queryKey: [\n      \"announcement-references\",\n      announcement.id,\n      subscriberCode,\n      feedbackIds,\n      articleIds,\n      tourIds,\n    ],\n    enabled: feedbackIds.length > 0 || articleIds.length > 0 || tourIds.length > 0,\n    queryFn: async () => {\n      const [feedbackResponses, articleResponses, tourResponses] = await Promise.all([\n        Promise.allSettled(feedbackIds.map((id) => fetchFeedbackById(id, subscriberCode))),\n        Promise.allSettled(articleIds.map((id) => fetchArticleById(id, subscriberCode))),\n        Promise.allSettled(tourIds.map((id) => fetchTourById(id, subscriberCode))),\n      ]);\n\n      return {\n        feedbacks: feedbackResponses\n          .map((response) => (response.status === \"fulfilled\" ? response.value?.data : null))\n          .filter(Boolean),\n        articles: articleResponses\n          .map((response) => (response.status === \"fulfilled\" ? response.value?.data : null))\n          .filter(Boolean),\n        tours: tourResponses\n          .map((response) => (response.status === \"fulfilled\" ? response.value?.data : null))\n          .filter((tour) => tour?.publishedAt),\n      };\n    },\n    staleTime: 30_000,\n  });\n  const linkedFeedbacks =\n    hydratedFeedbacks.length > 0 ? hydratedFeedbacks : fallbackReferences?.feedbacks;\n  const helpArticles =\n    hydratedArticles.length > 0 ? hydratedArticles : fallbackReferences?.articles;\n  const productTours = hydratedTours.length > 0 ? hydratedTours : fallbackReferences?.tours;\n  const contentBottomPadding = showPoweredByFooter ? \"pb-[45px]\" : \"pb-5\";\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, x: 30 }}\n      animate={{ opacity: 1, x: 0 }}\n      exit={{ opacity: 0, x: -30 }}\n      transition={{\n        type: \"spring\",\n        stiffness: 300,\n        damping: 25,\n        duration: 0.4,\n      }}\n      className=\"h-full\"\n    >\n      {/* Content */}\n      <div\n        className={`relative flex flex-col space-y-2 overflow-hidden px-8 pt-4 text-left transition-shadow duration-300 dark:border-neutral-800 ${contentBottomPadding}`}\n      >\n        {announcement.meta?.ctaImage && (\n          <div className=\"mb-4\">\n            <img\n              src={announcement.meta.ctaImage}\n              alt={announcement.meta.ctaImageCaption || \"Update image\"}\n              className=\"h-auto w-full rounded-lg\"\n            />\n            {announcement.meta.ctaImageCaption && (\n              <p className=\"mt-2 text-center text-sm text-gray-500 dark:text-neutral-400\">\n                {announcement.meta.ctaImageCaption}\n              </p>\n            )}\n          </div>\n        )}\n        <span className=\"text-[12px] font-medium uppercase leading-4 tracking-[0.06em] text-uo-text-tertiary\">\n          {formatDate(new Date(announcement.createdAt), \"short\")}\n          {label && ` · ${label.name}`}\n        </span>\n        <h1 className=\"m-0 text-[1.3rem] font-bold text-gray-900 dark:text-white\">\n          {announcement.title}\n        </h1>\n        {postCollaborators && postCollaborators.length > 0 ? (\n          <div className=\"mt-1 flex items-center gap-2\">\n            {postCollaborators.map((collaborator: any) => (\n              <div key={collaborator.id} className=\"flex items-center gap-2\">\n                <div className=\"relative\">\n                  <div className=\"h-8 w-8 overflow-hidden rounded-full border border-neutral-200 dark:border-neutral-700\">\n                    {collaborator?.avatarUrl ? (\n                      <img\n                        src={collaborator.avatarUrl}\n                        alt={collaborator.name}\n                        width={32}\n                        height={32}\n                        className=\"h-full w-full object-cover\"\n                      />\n                    ) : (\n                      <div className=\"flex h-full w-full items-center justify-center bg-neutral-100 text-md font-medium text-neutral-600 dark:bg-neutral-800 dark:text-neutral-300\">\n                        {collaborator.name.charAt(0).toUpperCase()}\n                      </div>\n                    )}\n                  </div>\n                  {teamMembers.find((member: any) => member.id === collaborator.id) && (\n                    <div className=\"absolute bottom-0 right-0 z-20 -m-1 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-white dark:bg-black\">\n                      <BadgeCheck\n                        className=\"h-3.5 w-3.5 text-white dark:text-black\"\n                        fill=\"#3912e4\"\n                      />\n                    </div>\n                  )}\n                </div>\n                <div className=\"flex flex-col\">\n                  <div className=\"text-md font-medium text-neutral-800 dark:text-neutral-200\">\n                    {collaborator.name}\n                  </div>\n                  <div className=\"text-tertiary text-sm\">{collaborator.meta?.role || \"Member\"}</div>\n                </div>\n              </div>\n            ))}\n          </div>\n        ) : null}\n        <hr className=\"!mb-5 !mt-4 border-0 border-t border-dashed border-uo-border-default\" />\n        {/* Main Content */}\n        <div\n          className=\"prose prose-gray dark:prose-invert prose-p:m-0 prose-h1:text-gray-900 dark:prose-h1:text-white prose-h2:text-gray-900 dark:prose-h2:text-white prose-h3:text-gray-900 dark:prose-h3:text-white prose-h4:text-gray-900 dark:prose-h4:text-white prose-h5:text-gray-900 dark:prose-h5:text-white prose-h6:text-gray-900 dark:prose-h6:text-white max-w-none text-md leading-relaxed text-gray-800 dark:text-neutral-200\"\n          dangerouslySetInnerHTML={{ __html: renderInteractiveDemoEmbeds(announcement.text) }}\n        />\n\n        {(onFeedbackClick || onArticleClick || onTourClick) && (\n          <AnnouncementReferences\n            feedbacks={linkedFeedbacks}\n            articles={helpArticles}\n            tours={productTours}\n            onFeedbackClick={onFeedbackClick}\n            onArticleClick={onArticleClick}\n            onTourClick={onTourClick}\n          />\n        )}\n\n        {/* CTA Button */}\n        {announcement.meta?.ctaLink && (\n          <div className=\"!mt-5\">\n            <a\n              href={announcement.meta.ctaLink}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"inline-flex h-9 items-center gap-1.5 rounded-uo-control bg-uo-primary px-4 font-sans text-[13px] font-medium text-uo-on-primary no-underline transition-[background-color,transform] duration-150 hover:bg-uo-primary-hover active:scale-[0.96]\"\n            >\n              {announcement.meta.ctaTitle || \"Learn More\"}\n              <ArrowUpRight className=\"h-4 w-4\" />\n            </a>\n          </div>\n        )}\n\n        {/* Post Engagement */}\n        <PostEngagement subscriberCode={subscriberCode} announcement={announcement} />\n      </div>\n    </motion.div>\n  );\n};\n\nexport default AnnouncementDetail;\n","var e={\"\":[\"<em>\",\"</em>\"],_:[\"<strong>\",\"</strong>\"],\"*\":[\"<strong>\",\"</strong>\"],\"~\":[\"<s>\",\"</s>\"],\"\\n\":[\"<br />\"],\" \":[\"<br />\"],\"-\":[\"<hr />\"]};function n(e){return e.replace(RegExp(\"^\"+(e.match(/^(\\t| )+/)||\"\")[0],\"gm\"),\"\")}function r(e){return(e+\"\").replace(/\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}export default function t(a,c){var o,l,g,s,p,u=/((?:^|\\n+)(?:\\n---+|\\* \\*(?: \\*)+)\\n)|(?:^``` *(\\w*)\\n([\\s\\S]*?)\\n```$)|((?:(?:^|\\n+)(?:\\t|  {2,}).+)+\\n*)|((?:(?:^|\\n)([>*+-]|\\d+\\.)\\s+.*)+)|(?:!\\[([^\\]]*?)\\]\\(([^)]+?)\\))|(\\[)|(\\](?:\\(([^)]+?)\\))?)|(?:(?:^|\\n+)([^\\s].*)\\n(-{3,}|={3,})(?:\\n+|$))|(?:(?:^|\\n+)(#{1,6})\\s*(.+)(?:\\n+|$))|(?:`([^`].*?)`)|(  \\n\\n*|\\n{2,}|__|\\*\\*|[_*]|~~)/gm,m=[],h=\"\",i=c||{},d=0;function f(n){var r=e[n[1]||\"\"],t=m[m.length-1]==n;return r?r[1]?(t?m.pop():m.push(n),r[0|t]):r[0]:n}function $(){for(var e=\"\";m.length;)e+=f(m[m.length-1]);return e}for(a=a.replace(/^\\[(.+?)\\]:\\s*(.+)$/gm,function(e,n,r){return i[n.toLowerCase()]=r,\"\"}).replace(/^\\n+|\\n+$/g,\"\");g=u.exec(a);)l=a.substring(d,g.index),d=u.lastIndex,o=g[0],l.match(/[^\\\\](\\\\\\\\)*\\\\$/)||((p=g[3]||g[4])?o='<pre class=\"code '+(g[4]?\"poetry\":g[2].toLowerCase())+'\"><code'+(g[2]?' class=\"language-'+g[2].toLowerCase()+'\"':\"\")+\">\"+n(r(p).replace(/^\\n+|\\n+$/g,\"\"))+\"</code></pre>\":(p=g[6])?(p.match(/\\./)&&(g[5]=g[5].replace(/^\\d+/gm,\"\")),s=t(n(g[5].replace(/^\\s*[>*+.-]/gm,\"\"))),\">\"==p?p=\"blockquote\":(p=p.match(/\\./)?\"ol\":\"ul\",s=s.replace(/^(.*)(\\n|$)/gm,\"<li>$1</li>\")),o=\"<\"+p+\">\"+s+\"</\"+p+\">\"):g[8]?o='<img src=\"'+r(g[8])+'\" alt=\"'+r(g[7])+'\">':g[10]?(h=h.replace(\"<a>\",'<a href=\"'+r(g[11]||i[l.toLowerCase()])+'\">'),o=$()+\"</a>\"):g[9]?o=\"<a>\":g[12]||g[14]?o=\"<\"+(p=\"h\"+(g[14]?g[14].length:g[13]>\"=\"?1:2))+\">\"+t(g[12]||g[15],i)+\"</\"+p+\">\":g[16]?o=\"<code>\"+r(g[16])+\"</code>\":(g[17]||g[1])&&(o=f(g[17]||\"--\"))),h+=l,h+=o;return(h+a.substring(d)+$()).replace(/^\\n+|\\n+$/g,\"\")}\n//# sourceMappingURL=snarkdown.es.js.map\n","import snarkdown from \"snarkdown\";\n\ntype OrderedListState = {\n  shouldContinue: boolean;\n  nextStart: number;\n};\n\ntype OrderedListGroup = {\n  count: number;\n  start: number;\n};\n\nconst FENCED_CODE_BLOCK_RE = /```([^\\n`]*)\\n?([\\s\\S]*?)```/g;\nconst ORDERED_LIST_ITEM_RE = /^(\\d+)\\.\\s+/;\nconst LIST_ITEM_RE = /^\\s*(?:[-*+]\\s+|\\d+\\.\\s+)/;\nconst INDENTED_LIST_CONTINUATION_RE = /^ {2,}(\\S.*)$/;\nconst INDENTED_LIST_ITEM_RE = /^ {2,}((?:[-*+]\\s+|\\d+\\.\\s+).*)$/;\nconst INDENTED_FENCE_RE = /^(\\s*)```/;\nconst MALFORMED_ARTICLE_IMAGE_RE =\n  /(^|\\s)!Article image(?::\\s*([^(<\\n]+?))?\\((https?:\\/\\/[^\\s)]+|\\/[^\\s)]+)\\)?/gi;\nconst IMAGE_METADATA_KEY = \"uo-img=\";\nconst FALLBACK_IMAGE_ASPECT_RATIO = 2;\nconst FRAMED_IMAGE_PARAGRAPH_RE =\n  /<p>\\s*(<div data-name=\"frame\" class=\"uo-image-frame\"(?: style=\"[^\"]*\")?>\\s*<div class=\"uo-image-frame-content\">\\s*<img [^>]*>\\s*<\\/div>\\s*<\\/div>)\\s*<\\/p>/g;\nconst MIXED_LIST_MARKER_RE = /^(\\s*)[-*+]\\s+(?=\\d+\\.\\s+)/;\nconst LIST_SEPARATOR_BREAK_RE = /<\\/(ol|ul)><br \\/><(ol|ul)([^>]*)>/g;\n\nfunction escapeHtml(value: string): string {\n  return value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n  return escapeHtml(value).replace(/\"/g, \"&quot;\");\n}\n\nfunction sanitizeLinks(html: string): string {\n  return html.replace(/<a href=\"([^\"]*)\">/g, (_match, href: string) => {\n    const normalizedHref = href.replace(/&amp;/g, \"&\").trim();\n    if (!/^(https?:|mailto:|#|\\/)/i.test(normalizedHref)) {\n      return \"<a>\";\n    }\n\n    return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">`;\n  });\n}\n\nfunction parseImageMetadata(src: string) {\n  const normalizedSrc = src.replace(/&amp;/g, \"&\").trim();\n  const metadataMatch = normalizedSrc.match(new RegExp(`([#&])${IMAGE_METADATA_KEY}([^#&]*)`));\n\n  if (!metadataMatch) {\n    return {\n      src: normalizedSrc,\n      width: null,\n      height: null,\n      aspectRatio: null,\n    };\n  }\n\n  const prefix = normalizedSrc.slice(0, metadataMatch.index);\n  const metadataValue = metadataMatch[2] || \"\";\n  const metadata = metadataValue.split(\";\").reduce<Record<string, number>>((values, entry) => {\n    const [key, rawValue] = entry.split(\":\");\n    const value = Number.parseFloat(rawValue || \"\");\n\n    if (key && Number.isFinite(value) && value > 0) {\n      values[key] = value;\n    }\n\n    return values;\n  }, {});\n\n  return {\n    src: prefix,\n    width: metadata.width || null,\n    height: metadata.height || null,\n    aspectRatio: metadata.aspect || null,\n  };\n}\n\nfunction sanitizeImages(html: string): string {\n  return html.replace(/<img src=\"([^\"]*)\" alt=\"([^\"]*)\">/g, (_match, src: string, alt: string) => {\n    const metadata = parseImageMetadata(src);\n    if (!/^(https?:|\\/)/i.test(metadata.src)) {\n      return \"\";\n    }\n\n    if (/^Article video\\b/i.test(alt)) {\n      return [\n        '<div data-name=\"frame\" class=\"uo-video-frame\">',\n        `<video src=\"${escapeAttribute(metadata.src)}\" controls preload=\"metadata\" playsinline></video>`,\n        \"</div>\",\n      ].join(\"\");\n    }\n\n    const width = metadata.width ? Math.round(metadata.width) : null;\n    const height =\n      metadata.height ||\n      (width && metadata.aspectRatio ? Math.round(width / metadata.aspectRatio) : null);\n    const attributes = [\n      `src=\"${escapeAttribute(metadata.src)}\"`,\n      `alt=\"${alt}\"`,\n      width ? `width=\"${width}\"` : \"\",\n      height ? `height=\"${Math.round(height)}\"` : \"\",\n      metadata.aspectRatio ? `style=\"aspect-ratio: ${metadata.aspectRatio} / 1;\"` : \"\",\n      'loading=\"lazy\"',\n      'decoding=\"async\"',\n    ].filter(Boolean);\n    const frameAspectRatio = metadata.aspectRatio || FALLBACK_IMAGE_ASPECT_RATIO;\n\n    return [\n      `<div data-name=\"frame\" class=\"uo-image-frame\" style=\"--uo-image-aspect-ratio: ${frameAspectRatio} / 1;\">`,\n      '<div class=\"uo-image-frame-content\">',\n      `<img ${attributes.join(\" \")}>`,\n      \"</div>\",\n      \"</div>\",\n    ].join(\"\");\n  });\n}\n\nfunction unwrapFramedImageParagraphs(html: string): string {\n  return html.replace(FRAMED_IMAGE_PARAGRAPH_RE, \"$1\");\n}\n\nfunction normalizeMalformedArticleImages(content: string): string {\n  return content.replace(MALFORMED_ARTICLE_IMAGE_RE, (_match, prefix, alt, src) => {\n    const label = String(alt || \"Article image\")\n      .replace(/[\\r\\n]+/g, \" \")\n      .split(\"[\")\n      .join(\"\")\n      .split(\"]\")\n      .join(\"\")\n      .replace(/\\s+/g, \" \")\n      .trim();\n\n    return `${prefix}![${label || \"Article image\"}](${src})`;\n  });\n}\n\nfunction normalizeMixedListMarkers(content: string): string {\n  const lines = content.split(\"\\n\");\n  const normalizedLines: string[] = [];\n\n  lines.forEach((line, index) => {\n    if (!MIXED_LIST_MARKER_RE.test(line)) {\n      normalizedLines.push(line);\n      return;\n    }\n\n    if (normalizedLines.length > 0 && normalizedLines[normalizedLines.length - 1]?.trim()) {\n      normalizedLines.push(\"\");\n    }\n\n    normalizedLines.push(line.replace(MIXED_LIST_MARKER_RE, \"$1\"));\n\n    if (lines[index + 1]?.trim()) {\n      normalizedLines.push(\"\");\n    }\n  });\n\n  return normalizedLines.join(\"\\n\");\n}\n\nfunction normalizeIndentedMarkdown(content: string): string {\n  const lines = content.split(\"\\n\");\n  const normalizedLines: string[] = [];\n  let fenceIndent: string | null = null;\n  let shouldUnindentListContinuation = false;\n\n  lines.forEach((line) => {\n    if (fenceIndent !== null) {\n      const normalizedLine = line.startsWith(fenceIndent) ? line.slice(fenceIndent.length) : line;\n      normalizedLines.push(normalizedLine);\n\n      if (INDENTED_FENCE_RE.test(line)) {\n        fenceIndent = null;\n        shouldUnindentListContinuation = false;\n      }\n      return;\n    }\n\n    const fenceMatch = line.match(INDENTED_FENCE_RE);\n    if (fenceMatch) {\n      fenceIndent = fenceMatch[1] || \"\";\n      normalizedLines.push(line.slice(fenceIndent.length));\n      return;\n    }\n\n    if (!line.trim()) {\n      normalizedLines.push(line);\n      return;\n    }\n\n    const indentedListItem = line.match(INDENTED_LIST_ITEM_RE);\n    if (shouldUnindentListContinuation && indentedListItem) {\n      normalizedLines.push(indentedListItem[1]);\n      return;\n    }\n\n    if (LIST_ITEM_RE.test(line)) {\n      shouldUnindentListContinuation = true;\n      normalizedLines.push(line);\n      return;\n    }\n\n    const indentedContinuation = line.match(INDENTED_LIST_CONTINUATION_RE);\n    if (\n      shouldUnindentListContinuation &&\n      indentedContinuation &&\n      !LIST_ITEM_RE.test(indentedContinuation[1])\n    ) {\n      normalizedLines.push(indentedContinuation[1]);\n      return;\n    }\n\n    shouldUnindentListContinuation = false;\n    normalizedLines.push(line);\n  });\n\n  return normalizedLines.join(\"\\n\");\n}\n\nfunction getOrderedListGroups(text: string, state: OrderedListState): OrderedListGroup[] {\n  const groups: OrderedListGroup[] = [];\n  const lines = text.split(\"\\n\");\n  let pendingStart: number | null = null;\n  let pendingCount = 0;\n  let nextStart = state.shouldContinue ? state.nextStart : 1;\n\n  const flushPendingGroup = () => {\n    if (pendingStart !== null) {\n      groups.push({ start: pendingStart, count: pendingCount });\n      nextStart = pendingStart + pendingCount;\n      pendingStart = null;\n      pendingCount = 0;\n    }\n  };\n\n  lines.forEach((line) => {\n    const match = line.match(ORDERED_LIST_ITEM_RE);\n\n    if (!match) {\n      flushPendingGroup();\n      return;\n    }\n\n    const parsedStart = Number(match[1]);\n    if (pendingStart === null) {\n      pendingStart = parsedStart === 1 && nextStart > 1 ? nextStart : parsedStart;\n    }\n\n    pendingCount += 1;\n  });\n\n  flushPendingGroup();\n\n  return groups;\n}\n\nfunction renderMarkdownText(text: string, state: OrderedListState): string {\n  if (!text.trim()) {\n    return \"\";\n  }\n\n  const orderedListGroups = getOrderedListGroups(text, state);\n  let groupIndex = 0;\n  let html = unwrapFramedImageParagraphs(\n    sanitizeImages(sanitizeLinks(snarkdown(escapeHtml(text)))),\n  );\n\n  html = html.replace(/<ol>/g, () => {\n    const group = orderedListGroups[groupIndex];\n    groupIndex += 1;\n\n    if (!group) {\n      return \"<ol>\";\n    }\n\n    state.nextStart = group.start + group.count;\n    return group.start === 1 ? \"<ol>\" : `<ol start=\"${group.start}\">`;\n  });\n  html = html.replace(\n    LIST_SEPARATOR_BREAK_RE,\n    (_match, previousList: string, nextList: string, attributes: string) =>\n      `</${previousList}><${nextList}${attributes}>`,\n  );\n\n  const lastNonEmptyLine = text\n    .split(\"\\n\")\n    .reverse()\n    .find((line) => Boolean(line.trim()));\n  state.shouldContinue =\n    orderedListGroups.length > 0 &&\n    Boolean(lastNonEmptyLine && ORDERED_LIST_ITEM_RE.test(lastNonEmptyLine));\n\n  if (orderedListGroups.length === 0 && text.trim()) {\n    state.shouldContinue = false;\n    state.nextStart = 1;\n  }\n\n  return html;\n}\n\nfunction renderCodeBlock(language: string, code: string): string {\n  const normalizedLanguage = language.trim().split(/\\s+/)[0]?.toLowerCase() || \"\";\n  const className = normalizedLanguage\n    ? ` class=\"language-${escapeAttribute(normalizedLanguage)}\"`\n    : \"\";\n\n  return `<pre class=\"uo-ai-code-block\"><code${className}>${escapeHtml(\n    code.replace(/\\n$/, \"\"),\n  )}</code></pre>`;\n}\n\nexport function renderMarkdown(content: string): string {\n  const normalizedContent = normalizeIndentedMarkdown(\n    normalizeMixedListMarkers(normalizeMalformedArticleImages(content)),\n  );\n  let html = \"\";\n  let lastIndex = 0;\n  const state: OrderedListState = { shouldContinue: false, nextStart: 1 };\n  let match: RegExpExecArray | null;\n\n  while ((match = FENCED_CODE_BLOCK_RE.exec(normalizedContent)) !== null) {\n    html += renderMarkdownText(normalizedContent.slice(lastIndex, match.index), state);\n    html += renderCodeBlock(match[1] || \"\", match[2] || \"\");\n    lastIndex = match.index + match[0].length;\n  }\n\n  html += renderMarkdownText(normalizedContent.slice(lastIndex), state);\n\n  return html;\n}\n","import { widgetFetch } from \"../../../lib/widgetPrivacy\";\n// ABOUTME: React hook for SSE streaming chat with AI assistant\n// ABOUTME: Handles message state, streaming responses, and conversation persistence\n\nimport { useCallback, useState } from \"react\";\nimport { Config } from \"../../../lib/config\";\nimport { Logger } from \"../../../lib/logger\";\nimport { getRequestAuthBody, getHelpCenterReportingContext } from \"../api-utils\";\n\nconst logger = Logger.getInstance();\nconst AI_RESPONSE_TIMEOUT_MS = 30_000;\n\nexport interface ChatMessage {\n  id: string;\n  role: \"user\" | \"assistant\";\n  content: string;\n  articles?: Array<{\n    id: string;\n    urlId: string;\n    title: string;\n    urlSlug?: string;\n    description?: string | null;\n  }>;\n  tourSuggestions?: TourSuggestion[];\n  featureSuggestions?: FeatureSuggestion[];\n  actionSuggestion?: ActionSuggestion | null;\n  unanswered?: boolean;\n}\n\nexport interface ActionSuggestion {\n  type: \"feature_request\" | \"bug_report\" | \"general_feedback\";\n  title: string;\n  description: string;\n  buttonLabel: string;\n  followUpText: string;\n}\n\nexport interface FeatureSuggestion {\n  id: string;\n  urlId?: string;\n  url?: string;\n  title: string;\n  text?: string;\n  status?: string;\n  boardId?: string;\n  feedbackVotesCount: number;\n  feedbackCommentsCount: number;\n  createdAt: string;\n  updatedAt: string;\n  meta?: {\n    updatedAt?: string;\n    transcription?: string;\n    [key: string]: unknown;\n  };\n  subscriber?: {\n    id?: string;\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  } | null;\n  board?: {\n    id: string;\n    name: string;\n    configuration?: {\n      color?: string;\n    };\n  } | null;\n}\n\nexport interface TourSuggestion {\n  id: string;\n  title?: string;\n  description?: string;\n  steps?: Array<{ id: string; title?: string; description?: string }>;\n  publishedAt?: string;\n  configuration?: Record<string, unknown>;\n  [key: string]: unknown;\n}\n\nexport interface AiChatConfig {\n  enabled: boolean;\n  defaultQuestions: string[];\n}\n\ninterface UseAiChatOptions {\n  subscriberCode?: string;\n  currentUrl?: string;\n  language?: string;\n}\n\nexport function useAiChat({ subscriberCode, currentUrl, language }: UseAiChatOptions = {}) {\n  const [messages, setMessages] = useState<ChatMessage[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [conversationId, setConversationId] = useState<string | null>(null);\n  const [error, setError] = useState<string | null>(null);\n\n  const sendMessage = useCallback(\n    async (text: string) => {\n      if (!text.trim() || isLoading) return;\n\n      const config = Config.getInstance();\n      const configData = config.get();\n      if (!configData) {\n        setError(\"Widget not initialized\");\n        return;\n      }\n\n      setIsLoading(true);\n      setError(null);\n\n      const userMessageId = `msg_${Date.now()}`;\n      const userMessage: ChatMessage = {\n        id: userMessageId,\n        role: \"user\",\n        content: text.trim(),\n      };\n\n      setMessages((prev) => [...prev, userMessage]);\n\n      const assistantMessageId = `msg_${Date.now() + 1}`;\n      setMessages((prev) => [...prev, { id: assistantMessageId, role: \"assistant\", content: \"\" }]);\n\n      const controller = new AbortController();\n      let responseTimeout = window.setTimeout(() => controller.abort(), AI_RESPONSE_TIMEOUT_MS);\n      const resetResponseTimeout = () => {\n        window.clearTimeout(responseTimeout);\n        responseTimeout = window.setTimeout(() => controller.abort(), AI_RESPONSE_TIMEOUT_MS);\n      };\n\n      try {\n        const url = `${configData.apiHost}/api/v1/public/ai-chat.stream`;\n        const response = await widgetFetch(url, () => ({\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n          credentials: \"include\",\n          mode: \"cors\",\n          signal: controller.signal,\n          body: JSON.stringify({\n            message: text.trim(),\n            conversationId,\n            ...(currentUrl && { currentUrl }),\n            ...(language && { language }),\n            excludeTourSuggestions: configData.inApp?.enabled === false,\n            ...getRequestAuthBody(),\n            ...getHelpCenterReportingContext(),\n            ...(subscriberCode && { token: subscriberCode }),\n          }),\n        }));\n\n        if (!response.ok) {\n          const errorData = await response.json().catch(() => ({}));\n          throw new Error(errorData.message || \"Failed to send message\");\n        }\n\n        const reader = response.body?.getReader();\n        if (!reader) {\n          throw new Error(\"No response body\");\n        }\n\n        const decoder = new TextDecoder();\n        let fullContent = \"\";\n        let articles: ChatMessage[\"articles\"] = [];\n        let tourSuggestions: ChatMessage[\"tourSuggestions\"] = [];\n        let featureSuggestions: ChatMessage[\"featureSuggestions\"] = [];\n        let actionSuggestion: ChatMessage[\"actionSuggestion\"] = null;\n        let sseBuffer = \"\";\n\n        while (true) {\n          const { done, value } = await reader.read();\n          resetResponseTimeout();\n          if (done) {\n            sseBuffer += decoder.decode();\n          } else {\n            sseBuffer += decoder.decode(value, { stream: true });\n          }\n\n          const events = sseBuffer.split(\"\\n\\n\");\n          sseBuffer = done ? \"\" : (events.pop() ?? \"\");\n\n          for (const event of events) {\n            const dataLines = event\n              .split(\"\\n\")\n              .filter((line) => line.startsWith(\"data: \"))\n              .map((line) => line.slice(6));\n\n            if (dataLines.length === 0) {\n              continue;\n            }\n\n            const jsonStr = dataLines.join(\"\\n\");\n            if (jsonStr === \"[DONE]\") continue;\n\n            let data: any;\n            try {\n              data = JSON.parse(jsonStr);\n            } catch {\n              if (jsonStr && !jsonStr.startsWith(\"[DONE]\")) {\n                logger.debug(\"Failed to parse SSE chunk:\", jsonStr);\n              }\n              continue;\n            }\n\n            if (data.text) {\n              fullContent += data.text;\n              setMessages((prev) =>\n                prev.map((msg) =>\n                  msg.id === assistantMessageId ? { ...msg, content: fullContent } : msg,\n                ),\n              );\n            }\n\n            if (data.done && data.conversationId) {\n              setConversationId(data.conversationId);\n              if (data.articles) {\n                articles = data.articles;\n              }\n\n              if (data.tourSuggestions) {\n                tourSuggestions = data.tourSuggestions;\n              }\n\n              if (data.featureSuggestions) {\n                featureSuggestions = data.featureSuggestions;\n              }\n\n              if (\"actionSuggestion\" in data) {\n                actionSuggestion = data.actionSuggestion;\n              }\n\n              setMessages((prev) =>\n                prev.map((msg) =>\n                  msg.id === assistantMessageId\n                    ? {\n                        ...msg,\n                        articles,\n                        tourSuggestions,\n                        featureSuggestions,\n                        actionSuggestion,\n                        unanswered: data.unanswered === true,\n                      }\n                    : msg,\n                ),\n              );\n            }\n\n            if (data.error) {\n              throw new Error(data.error);\n            }\n          }\n\n          if (done) {\n            break;\n          }\n        }\n      } catch (err) {\n        const timedOut = err instanceof Error && err.name === \"AbortError\";\n        const errorMessage = timedOut\n          ? \"The AI agent took too long to respond\"\n          : err instanceof Error\n            ? err.message\n            : \"Failed to send message\";\n        setError(errorMessage);\n        logger.error(\"AI chat error:\", err);\n\n        setMessages((prev) =>\n          prev.map((msg) =>\n            msg.id === assistantMessageId\n              ? {\n                  ...msg,\n                  unanswered: true,\n                  content: timedOut\n                    ? \"I’m taking longer than expected to reply. Please try again, or talk to our support team.\"\n                    : \"I'm sorry, I encountered an issue. Please try again or talk to our support team.\",\n                }\n              : msg,\n          ),\n        );\n      } finally {\n        window.clearTimeout(responseTimeout);\n        setIsLoading(false);\n      }\n    },\n    [isLoading, conversationId, currentUrl, language, subscriberCode],\n  );\n\n  const clearMessages = useCallback(() => {\n    setMessages([]);\n    setConversationId(null);\n    setError(null);\n  }, []);\n\n  return {\n    messages,\n    sendMessage,\n    isLoading,\n    error,\n    conversationId,\n    clearMessages,\n  };\n}\n","type ChatSound = \"sent\" | \"received\";\n\nlet audioContext: AudioContext | null = null;\nlet lastReceivedSoundAt = 0;\n\nconst RECEIVED_SOUND_THROTTLE_MS = 3000;\n\nfunction getAudioContext() {\n  if (typeof window === \"undefined\") return null;\n  const AudioContextConstructor =\n    window.AudioContext ||\n    (window as typeof window & { webkitAudioContext?: typeof AudioContext }).webkitAudioContext;\n  if (!AudioContextConstructor) return null;\n\n  audioContext ||= new AudioContextConstructor();\n  return audioContext;\n}\n\nfunction playTone(\n  context: AudioContext,\n  startAt: number,\n  fromFrequency: number,\n  toFrequency: number,\n  duration: number,\n  volume: number,\n) {\n  const oscillator = context.createOscillator();\n  const gain = context.createGain();\n\n  oscillator.type = \"sine\";\n  oscillator.frequency.setValueAtTime(fromFrequency, startAt);\n  oscillator.frequency.exponentialRampToValueAtTime(toFrequency, startAt + duration);\n  gain.gain.setValueAtTime(0.0001, startAt);\n  gain.gain.exponentialRampToValueAtTime(volume, startAt + 0.012);\n  gain.gain.exponentialRampToValueAtTime(0.0001, startAt + duration);\n\n  oscillator.connect(gain);\n  gain.connect(context.destination);\n  oscillator.start(startAt);\n  oscillator.stop(startAt + duration + 0.01);\n}\n\nexport function playChatSound(sound: ChatSound) {\n  if (sound === \"received\") {\n    const now = Date.now();\n    if (now - lastReceivedSoundAt < RECEIVED_SOUND_THROTTLE_MS) return;\n    lastReceivedSoundAt = now;\n  }\n\n  const context = getAudioContext();\n  if (!context) return;\n\n  void context\n    .resume()\n    .then(() => {\n      const now = context.currentTime + 0.006;\n      if (sound === \"sent\") {\n        playTone(context, now, 520, 760, 0.09, 0.055);\n        return;\n      }\n\n      playTone(context, now, 610, 740, 0.11, 0.04);\n      playTone(context, now + 0.055, 760, 940, 0.13, 0.035);\n    })\n    .catch(() => undefined);\n}\n","// ABOUTME: Detects when an Ask AI message is requesting human support.\n// ABOUTME: Covers common handoff phrasing while avoiding generic AI-agent product questions.\n\nconst PERSON_ROLE = String.raw`(?:\n  (?:real|actual)\\s+(?:person|human|agent)|\n  human(?:\\s+(?:being|agent|help|assistance|support))?|\n  live\\s+(?:person|agent|help|assistance|support)|\n  person|\n  someone(?:\\s+else)?|\n  somebody(?:\\s+else)?|\n  representatives?|\n  reps?|\n  operators?|\n  advisors?|\n  advisers?|\n  specialists?|\n  experts?|\n  executives?|\n  (?:team|staff)\\s+member|\n  member\\s+of\\s+(?:the|your|our)\\s+team|\n  (?:support|service)\\s+(?:person|team|agents?|representatives?|reps?|specialists?|engineers?|executives?|department|staff)|\n  support|\n  (?:technical|tech)\\s+support|\n  customer\\s+(?:support|service|success|care)(?:\\s+(?:team|agents?|representatives?|reps?|executives?))?|\n  (?:help|service)\\s*desk|\n  manager|\n  supervisor|\n  team\n)`.replace(/\\s+/g, \"\");\n\nconst CONTACT_ROLE = String.raw`(?:${PERSON_ROLE}|agents?)`;\nconst ROLE_QUALIFIER = String.raw`(?:(?:(?:a|an|the|your|our|another)\\s+)|(?:one\\s+of\\s+(?:the|your|our)\\s+))?`;\nconst QUALIFIED_PERSON_ROLE = String.raw`${ROLE_QUALIFIER}${PERSON_ROLE}`;\nconst QUALIFIED_CONTACT_ROLE = String.raw`${ROLE_QUALIFIER}${CONTACT_ROLE}`;\nconst ESCALATION_SUBJECT = String.raw`(?:this(?:\\s+(?:request|issue|case|conversation|chat|ticket|complaint))?|it|my\\s+(?:request|issue|case|conversation|chat|ticket|complaint))`;\n\nconst HUMAN_HANDOFF_PATTERNS = [\n  new RegExp(\n    String.raw`\\b(?:talk|speak|chat|converse|communicate)\\s+(?:directly\\s+)?(?:to|with)\\s+${QUALIFIED_CONTACT_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:connect|transfer|route|send|forward|pass|take)\\s+(?:(?:me|us|this|it|my\\s+(?:request|issue|case|conversation|chat|ticket))\\s+)?(?:over\\s+)?(?:to|with)\\s+${QUALIFIED_CONTACT_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:get|put)\\s+me\\s+(?:in\\s+touch\\s+with|through\\s+to|connected\\s+(?:to|with)|over\\s+to|talking\\s+to)\\s+${QUALIFIED_CONTACT_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(String.raw`\\b(?:contact|reach)\\s+${QUALIFIED_CONTACT_ROLE}\\b`, \"i\"),\n  new RegExp(String.raw`\\b(?:get|find|bring)\\s+me\\s+${QUALIFIED_CONTACT_ROLE}\\b`, \"i\"),\n  new RegExp(\n    String.raw`\\b(?:i\\s+)?(?:want|need|prefer|would\\s+like|i'd\\s+like)\\s+(?:(?:some\\s+)?(?:help|assistance)\\s+from\\s+)?${QUALIFIED_PERSON_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:can|could|may|would)\\s+(?:i|we)\\s+(?:please\\s+)?(?:get|have)\\s+${QUALIFIED_CONTACT_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:can|could|will|would)\\s+${QUALIFIED_PERSON_ROLE}\\s+(?:please\\s+)?(?:help|assist|contact|call|email|reply|respond)\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:have|ask|get)\\s+${QUALIFIED_PERSON_ROLE}\\s+(?:to\\s+)?(?:contact|call|email|reply|respond|get\\s+back\\s+to)\\s+me\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:get|bring|loop)\\s+${QUALIFIED_PERSON_ROLE}\\s+(?:involved|in|on\\s+this)\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:get|find|bring|let|have)\\s+${QUALIFIED_PERSON_ROLE}\\s+(?:to\\s+)?(?:help|assist|take\\s+over|handle\\s+this)\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b(?:escalate|raise|forward|hand\\s*off|pass)\\s+(?:(?:this|it|my\\s+(?:request|issue|case|conversation|chat|ticket|complaint))\\s+)?(?:to|with)\\s+${QUALIFIED_CONTACT_ROLE}\\b`,\n    \"i\",\n  ),\n  new RegExp(String.raw`\\b(?:please\\s+)?escalate\\s+${ESCALATION_SUBJECT}\\b`, \"i\"),\n  new RegExp(\n    String.raw`\\b(?:i\\s+)?(?:want|need|would\\s+like|i'd\\s+like)\\s+${ESCALATION_SUBJECT}\\s+(?:to\\s+be\\s+)?(?:escalated|handed\\s*off|transferred)\\b`,\n    \"i\",\n  ),\n  new RegExp(\n    String.raw`\\b${ESCALATION_SUBJECT}\\s+needs?\\s+(?:to\\s+be\\s+)?(?:escalated|human\\s+attention|support)\\b`,\n    \"i\",\n  ),\n  /^(?:(?:i\\s+)?(?:want|need|would\\s+like|i'd\\s+like)\\s+to\\s+|please\\s+)?(?:escalate|hand\\s*off)(?:\\s+(?:please|now))?[.!?]*$/i,\n  /\\b(?:open|create|raise|submit|start|file|log)\\s+(?:me\\s+)?(?:a\\s+)?(?:new\\s+)?(?:support\\s+)?(?:ticket|case|support\\s+request)\\b/i,\n  /\\b(?:make|file|lodge|raise|submit)\\s+(?:a\\s+)?complaint\\b/i,\n  /\\b(?:need|want|request|schedule)\\s+(?:a\\s+)?(?:call\\s*back|phone\\s+call)\\b/i,\n  /\\b(?:i\\s+)?(?:do\\s+not|don't|dont|no\\s+longer)\\s+(?:want\\s+to\\s+)?(?:talk|speak|chat|deal)\\s+(?:to|with)?\\s*(?:(?:a|an|the)\\s+)?(?:ai|bot|chatbot|assistant)\\b/i,\n  /\\b(?:i\\s+)?(?:do\\s+not|don't|dont)\\s+want\\s+(?:an?\\s+)?(?:ai|bot|chatbot)(?:\\s+(?:answer|response|assistant))?\\b/i,\n  /^(?:i\\s+)?(?:want|need|would\\s+like|i'd\\s+like)\\s+(?:to\\s+)?(?:(?:a|an|the)\\s+)?agent(?:\\s+(?:please|now))?[.!?]*$/i,\n  /^(?:please\\s+)?(?:human(?:\\s+agent)?|agent|representative|support|customer\\s+support|customer\\s+service|live\\s+support|human\\s+handoff)(?:\\s+(?:please|now))?[.!?]*$/i,\n  /^(?:please\\s+)?(?:call|email|contact)\\s+me(?:\\s+(?:please|now))?[.!?]*$/i,\n  /^(?:no|not)\\s+(?:ai|bot|chatbot|assistant)(?:\\s+(?:please|thanks))?[.!?]*$/i,\n];\n\nexport function isHumanHandoffRequest(message: string): boolean {\n  const normalizedMessage = message\n    .normalize(\"NFKC\")\n    .toLowerCase()\n    .replace(/[‘’]/g, \"'\")\n    .replace(/\\s+/g, \" \")\n    .trim();\n\n  if (!normalizedMessage) return false;\n\n  return HUMAN_HANDOFF_PATTERNS.some((pattern) => pattern.test(normalizedMessage));\n}\n","import { widgetFetch } from \"../../../lib/widgetPrivacy\";\n// ABOUTME: AI assistant chat interface for help center widget\n// ABOUTME: Shows default questions, chat messages, and article references\nimport { Config } from \"../../../lib/config\";\nimport { Logger } from \"../../../lib/logger\";\nimport { triggerTour } from \"../../../lib/widget\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowUp, Gift, LifeBuoy, Paperclip, PlayCircle, Smile } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button, FeedbackStatusBadge } from \"@userorbit/ui\";\nimport { getRequestAuthBody } from \"../api-utils\";\nimport { renderMarkdown } from \"./markdown\";\nimport { ChatMessage, FeatureSuggestion, useAiChat } from \"./use-ai-chat\";\nimport { playChatSound } from \"../chat-sounds\";\nimport { isHumanHandoffRequest } from \"./human-handoff\";\n\nconst logger = Logger.getInstance();\n\ninterface AskAiContentProps {\n  subscriberCode?: string;\n  primaryColor?: string;\n  primaryButtonBackgroundColor?: string;\n  primaryButtonTextColor?: string;\n  currentUrl?: string;\n  language?: string;\n  onArticleClick?: (article: { id: string; urlId: string; title: string }) => void;\n  onFeatureClick?: (feature: FeatureSuggestion) => void;\n  onFeedbackClick?: () => void;\n  onSupportClick?: (handoff: {\n    body: string;\n    aiConversationId?: string | null;\n    aiTranscript: Array<{ role: \"user\" | \"assistant\"; content: string }>;\n  }) => void;\n  onClose?: () => void;\n  teamName?: string;\n  initialMessage?: string;\n  autoSubmitInitialMessage?: boolean;\n  showPoweredByFooter?: boolean;\n  isMobileSheet?: boolean;\n}\n\nconst DEFAULT_QUESTIONS = [\n  \"How do I get started?\",\n  \"What's on the roadmap?\",\n  \"How can I contact support?\",\n];\n\nconst AI_GREETING_FOLLOW_UPS = [\n  \"Ask a question and I’ll reply instantly.\",\n  \"If you need more help, type ‘Talk to a person’ to connect with our team.\",\n];\nconst AI_MESSAGE_TOP_GUTTER = 12;\nconst AI_TYPING_DELAY_MS = 1400;\n\nconst NON_ANSWER_PATTERNS = [\n  /\\bi (?:couldn't|could not|can't|cannot) (?:find|confirm|answer)\\b/i,\n  /\\bi can only (?:answer|help)\\b/i,\n  /\\bi (?:don't|do not) have enough (?:detail|information|context)\\b/i,\n  /\\bneed (?:more|additional) (?:detail|information|context)\\b/i,\n  /\\b(?:connecting|sending|transferring) you (?:to|with) (?:our |the )?(?:support )?(?:team|agent)\\b/i,\n  /\\b(?:our (?:support )?team|support) (?:has|have) received your message\\b/i,\n  /\\b(?:we|they)(?:'ll| will) get back to you\\b/i,\n];\n\nfunction getAssistantFollowUp(message?: ChatMessage): string | null {\n  if (!message || message.role !== \"assistant\") return null;\n\n  const content = message.content.trim();\n  if (!content || /\\?\\s*$/.test(content)) return null;\n\n  if (message.actionSuggestion?.followUpText) {\n    return message.actionSuggestion.followUpText;\n  }\n\n  if (NON_ANSWER_PATTERNS.some((pattern) => pattern.test(content))) {\n    return null;\n  }\n\n  return \"Is that what you were looking for?\";\n}\n\nfunction ThinkingIndicator() {\n  return (\n    <span className=\"inline-flex h-5 items-center gap-1\" aria-label=\"AI agent is typing\">\n      {[0, 1, 2].map((index) => (\n        <span\n          key={index}\n          className=\"size-1.5 rounded-full bg-[#8b8790] dark:bg-[#aaa5af]\"\n          style={{\n            animation: `1.2s ease-in-out ${index * 0.2}s infinite normal none running braille-pulse`,\n          }}\n        />\n      ))}\n    </span>\n  );\n}\n\nfunction hasSupportHandoffOffer(content: string): boolean {\n  return [\n    /\\b(?:connect|connecting|transfer|transferring) you (?:to|with) (?:our |the )?(?:support )?(?:team|agent)\\b/i,\n    /\\b(?:contact|reach out to|speak to|talk to) (?:our |the )?(?:support(?: (?:team|agent|person))?|team|agent|person)\\b/i,\n    /\\b(?:support|our (?:support )?team) (?:can|will) (?:help|assist|take a look)\\b/i,\n  ].some((pattern) => pattern.test(content));\n}\n\nconst AskAiContent: React.FC<AskAiContentProps> = ({\n  subscriberCode,\n  primaryColor = \"#6366f1\",\n  primaryButtonBackgroundColor = primaryColor,\n  primaryButtonTextColor = \"#ffffff\",\n  currentUrl,\n  language,\n  onArticleClick,\n  onFeatureClick,\n  onFeedbackClick,\n  onSupportClick,\n  onClose,\n  teamName,\n  initialMessage,\n  autoSubmitInitialMessage = false,\n  showPoweredByFooter = false,\n  isMobileSheet = false,\n}) => {\n  const [inputValue, setInputValue] = React.useState(initialMessage || \"\");\n  const [isGreetingTyping, setIsGreetingTyping] = React.useState(true);\n  const [showResponseTyping, setShowResponseTyping] = React.useState(false);\n  const [conversationTailHeight, setConversationTailHeight] = React.useState(0);\n  const assistantMessageRefs = React.useRef(new Map<string, HTMLDivElement>());\n  const userMessageRefs = React.useRef(new Map<string, HTMLDivElement>());\n  const chatScrollRef = React.useRef<HTMLDivElement>(null);\n  const inputRef = React.useRef<HTMLTextAreaElement>(null);\n  const submittedInitialMessageRef = React.useRef<string | null>(null);\n  const lastRevealedUserMessageRef = React.useRef<string | null>(null);\n  const lastAnchoredAssistantMessageRef = React.useRef<string | null>(null);\n  const lastSoundedAssistantMessageRef = React.useRef<string | null>(null);\n\n  const { messages, sendMessage, isLoading, conversationId } = useAiChat({\n    subscriberCode,\n    currentUrl,\n    language,\n  });\n\n  const { data: aiConfig } = useQuery({\n    queryKey: [\"ai-chat-config\", subscriberCode],\n    queryFn: async () => {\n      const config = Config.getInstance();\n      const configData = config.get();\n      if (!configData) return { enabled: true, defaultQuestions: DEFAULT_QUESTIONS };\n\n      const url = `${configData.apiHost}/api/v1/public/ai-chat.config`;\n      const response = await widgetFetch(url, () => ({\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        credentials: \"include\",\n        mode: \"cors\",\n        body: JSON.stringify({\n          ...getRequestAuthBody(),\n          ...(subscriberCode && { token: subscriberCode }),\n        }),\n      }));\n\n      if (!response.ok) {\n        return { enabled: true, defaultQuestions: DEFAULT_QUESTIONS };\n      }\n\n      const data = await response.json();\n      return data?.data || { enabled: true, defaultQuestions: DEFAULT_QUESTIONS };\n    },\n    staleTime: 1000 * 60 * 5,\n  });\n\n  const defaultQuestions = aiConfig?.defaultQuestions || DEFAULT_QUESTIONS;\n  const lastAssistantMessage = messages.length > 0 ? messages[messages.length - 1] : null;\n  const hasUserMessages = messages.some((message) => message.role === \"user\");\n  const isWaitingForAssistant = Boolean(\n    isLoading && lastAssistantMessage?.role === \"assistant\" && !lastAssistantMessage.content.trim(),\n  );\n  const shouldShowFeedbackCard =\n    lastAssistantMessage?.role === \"assistant\" &&\n    !isLoading &&\n    Boolean(onFeedbackClick) &&\n    Boolean(lastAssistantMessage.actionSuggestion);\n  const shouldShowSupportCard =\n    lastAssistantMessage?.role === \"assistant\" &&\n    !isLoading &&\n    Boolean(onSupportClick) &&\n    (lastAssistantMessage.unanswered || hasSupportHandoffOffer(lastAssistantMessage.content || \"\"));\n\n  const handoffToSupport = React.useCallback(\n    (message: string) => {\n      const trimmedMessage = message.trim();\n      if (!trimmedMessage || !onSupportClick) return false;\n\n      playChatSound(\"sent\");\n      onSupportClick({\n        body: trimmedMessage,\n        aiConversationId: conversationId,\n        aiTranscript: [\n          ...messages\n            .filter((item) => item.content.trim())\n            .map((item) => ({ role: item.role, content: item.content.trim() })),\n          { role: \"user\", content: trimmedMessage },\n        ],\n      });\n      setInputValue(\"\");\n      return true;\n    },\n    [conversationId, messages, onSupportClick],\n  );\n\n  const routeUserMessage = React.useCallback(\n    (message: string) => {\n      const trimmedMessage = message.trim();\n      if (!trimmedMessage || isLoading) return;\n\n      if (isHumanHandoffRequest(trimmedMessage) && handoffToSupport(trimmedMessage)) return;\n\n      playChatSound(\"sent\");\n      void sendMessage(trimmedMessage);\n      setInputValue(\"\");\n    },\n    [handoffToSupport, isLoading, sendMessage],\n  );\n\n  React.useEffect(() => {\n    inputRef.current?.focus();\n  }, []);\n\n  React.useEffect(() => {\n    const timeout = window.setTimeout(() => setIsGreetingTyping(false), 1100);\n    return () => window.clearTimeout(timeout);\n  }, []);\n\n  React.useEffect(() => {\n    if (initialMessage === undefined) return;\n    if (autoSubmitInitialMessage && initialMessage.trim()) return;\n\n    setInputValue(initialMessage);\n    window.setTimeout(() => {\n      inputRef.current?.focus();\n      const length = initialMessage.length;\n      inputRef.current?.setSelectionRange(length, length);\n    }, 0);\n  }, [autoSubmitInitialMessage, initialMessage]);\n\n  React.useEffect(() => {\n    const message = initialMessage?.trim();\n    if (!autoSubmitInitialMessage || !message || isLoading) return;\n    if (submittedInitialMessageRef.current === message) return;\n\n    submittedInitialMessageRef.current = message;\n    routeUserMessage(message);\n  }, [autoSubmitInitialMessage, initialMessage, isLoading, routeUserMessage]);\n\n  React.useEffect(() => {\n    if (!isWaitingForAssistant) {\n      setShowResponseTyping(false);\n      return;\n    }\n\n    setShowResponseTyping(false);\n    const timeout = window.setTimeout(() => setShowResponseTyping(true), AI_TYPING_DELAY_MS);\n    return () => window.clearTimeout(timeout);\n  }, [isWaitingForAssistant, lastAssistantMessage?.id]);\n\n  const revealMessageFromBottom = React.useCallback(\n    (messageNode: HTMLDivElement, behavior: ScrollBehavior) => {\n      const container = chatScrollRef.current;\n      if (!container) return;\n\n      const containerRect = container.getBoundingClientRect();\n      const messageRect = messageNode.getBoundingClientRect();\n      const viewportTop = containerRect.top + AI_MESSAGE_TOP_GUTTER;\n      const viewportBottom = containerRect.bottom - AI_MESSAGE_TOP_GUTTER;\n      const availableHeight = viewportBottom - viewportTop;\n      let scrollDelta = 0;\n\n      if (messageRect.height > availableHeight) {\n        scrollDelta = messageRect.top - viewportTop;\n      } else if (messageRect.bottom > viewportBottom) {\n        scrollDelta = messageRect.bottom - viewportBottom;\n      } else if (messageRect.top < viewportTop) {\n        scrollDelta = messageRect.top - viewportTop;\n      }\n\n      if (Math.abs(scrollDelta) < 1) return;\n\n      const maxScrollTop = Math.max(0, container.scrollHeight - container.clientHeight);\n      container.scrollTo({\n        top: Math.min(maxScrollTop, Math.max(0, container.scrollTop + scrollDelta)),\n        behavior,\n      });\n    },\n    [],\n  );\n\n  React.useEffect(() => {\n    const latestUserMessage = [...messages].reverse().find((message) => message.role === \"user\");\n    if (!latestUserMessage) return;\n    if (lastRevealedUserMessageRef.current === latestUserMessage.id) return;\n\n    lastRevealedUserMessageRef.current = latestUserMessage.id;\n    setConversationTailHeight(0);\n    const frame = window.requestAnimationFrame(() => {\n      const messageNode = userMessageRefs.current.get(latestUserMessage.id);\n      if (messageNode) revealMessageFromBottom(messageNode, \"smooth\");\n    });\n    return () => window.cancelAnimationFrame(frame);\n  }, [messages, revealMessageFromBottom]);\n\n  React.useEffect(() => {\n    if (!showResponseTyping || !lastAssistantMessage) return;\n    if (lastAssistantMessage.role !== \"assistant\" || lastAssistantMessage.content.trim()) return;\n\n    const frame = window.requestAnimationFrame(() => {\n      const messageNode = assistantMessageRefs.current.get(lastAssistantMessage.id);\n      if (messageNode) revealMessageFromBottom(messageNode, \"smooth\");\n    });\n    return () => window.cancelAnimationFrame(frame);\n  }, [lastAssistantMessage, revealMessageFromBottom, showResponseTyping]);\n\n  React.useEffect(() => {\n    const latestAssistantMessage = messages[messages.length - 1];\n    if (latestAssistantMessage?.role !== \"assistant\") return;\n    if (!latestAssistantMessage.content.trim()) return;\n\n    const container = chatScrollRef.current;\n    const anchorUserMessage = [...messages]\n      .slice(0, -1)\n      .reverse()\n      .find((message) => message.role === \"user\");\n    const anchorNode = anchorUserMessage\n      ? userMessageRefs.current.get(anchorUserMessage.id)\n      : undefined;\n    if (!container || !anchorNode) return;\n\n    const containerTop = container.getBoundingClientRect().top;\n    const anchorTop = anchorNode.getBoundingClientRect().top;\n    const anchorOffset = container.scrollTop + anchorTop - containerTop;\n    const targetScrollTop = Math.max(0, anchorOffset - AI_MESSAGE_TOP_GUTTER);\n    const contentScrollHeight = container.scrollHeight - conversationTailHeight;\n    const requiredTailHeight = Math.max(\n      0,\n      Math.ceil(targetScrollTop + container.clientHeight - contentScrollHeight),\n    );\n    if (requiredTailHeight !== conversationTailHeight) {\n      setConversationTailHeight(requiredTailHeight);\n      return;\n    }\n\n    if (lastAnchoredAssistantMessageRef.current === latestAssistantMessage.id) return;\n    lastAnchoredAssistantMessageRef.current = latestAssistantMessage.id;\n    const frame = window.requestAnimationFrame(() => {\n      container.scrollTo({\n        top: targetScrollTop,\n        behavior: \"smooth\",\n      });\n    });\n    return () => window.cancelAnimationFrame(frame);\n  }, [conversationTailHeight, isLoading, messages]);\n\n  React.useEffect(() => {\n    const latestAssistantMessage = [...messages]\n      .reverse()\n      .find((message) => message.role === \"assistant\" && message.content.trim());\n    if (!latestAssistantMessage) return;\n    if (lastSoundedAssistantMessageRef.current === latestAssistantMessage.id) return;\n    lastSoundedAssistantMessageRef.current = latestAssistantMessage.id;\n    playChatSound(\"received\");\n  }, [messages]);\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    routeUserMessage(inputValue);\n  };\n\n  React.useEffect(() => {\n    const el = inputRef.current;\n    if (!el) return;\n    el.style.height = \"auto\";\n    el.style.height = `${el.scrollHeight}px`;\n  }, [inputValue]);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n    if (e.key === \"Enter\" && !e.shiftKey) {\n      e.preventDefault();\n      handleSubmit(e as unknown as React.FormEvent);\n    }\n  };\n\n  const handleQuestionClick = (question: string) => {\n    routeUserMessage(question);\n  };\n\n  const handleSupportClick = () => {\n    const transcript = messages\n      .filter((message) => message.content.trim())\n      .map((message) => ({\n        role: message.role,\n        content: message.content.trim(),\n      }));\n    const lastUserMessage = [...transcript].reverse().find((message) => message.role === \"user\");\n\n    onSupportClick?.({\n      body: lastUserMessage?.content || \"I'd like to contact support about my AI chat.\",\n      aiConversationId: conversationId,\n      aiTranscript: transcript,\n    });\n  };\n\n  const handleTourStart = React.useCallback(\n    async (tour: NonNullable<ChatMessage[\"tourSuggestions\"]>[number]) => {\n      if (!tour || !tour.id) return;\n\n      try {\n        onClose?.();\n        await triggerTour(tour, true);\n      } catch (error) {\n        logger.error(\"Failed to start tour from Ask AI:\", error);\n      }\n    },\n    [onClose],\n  );\n\n  const renderMessage = (message: ChatMessage) => {\n    const isUser = message.role === \"user\";\n    if (!isUser && !message.content && !showResponseTyping) return null;\n\n    return (\n      <motion.div\n        key={message.id}\n        ref={(element) => {\n          const messageRefs = isUser ? userMessageRefs : assistantMessageRefs;\n          if (element) messageRefs.current.set(message.id, element);\n          else messageRefs.current.delete(message.id);\n        }}\n        layout=\"position\"\n        initial={{ opacity: 0, y: 8, scale: 0.98, filter: \"blur(2px)\" }}\n        animate={{ opacity: 1, y: 0, scale: 1, filter: \"blur(0px)\" }}\n        transition={{ type: \"spring\", duration: 0.3, bounce: 0 }}\n        className={`mb-2.5 flex ${isUser ? \"justify-end\" : \"justify-start\"}`}\n      >\n        <div\n          className={`min-w-0 overflow-hidden text-pretty rounded-[20px] px-4 py-3 text-[14px] leading-[1.55] ${\n            isUser\n              ? \"max-w-[85%] rounded-br-[6px] text-white\"\n              : \"max-w-full rounded-bl-[6px] bg-[#f4f4f5] text-[#242127] dark:bg-white/[0.08] dark:text-[#f4f2f7]\"\n          }`}\n          style={\n            isUser\n              ? {\n                  backgroundColor: primaryButtonBackgroundColor,\n                  color: primaryButtonTextColor,\n                }\n              : undefined\n          }\n        >\n          {!isUser && message.tourSuggestions && message.tourSuggestions.length > 0 && (\n            <div className=\"mb-3\">\n              <p className=\"mb-2 text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n                Guided tour:\n              </p>\n              <div className=\"flex flex-col gap-2\">\n                {message.tourSuggestions.map((tour) => (\n                  <div\n                    key={tour.id}\n                    className=\"flex items-center gap-3 rounded-xl border border-neutral-200 px-3 py-2.5 dark:border-neutral-700\"\n                  >\n                    <PlayCircle className=\"size-6 flex-shrink-0 text-neutral-400 dark:text-neutral-500\" />\n                    <div className=\"min-w-0 flex-1\">\n                      <div className=\"truncate text-sm font-medium text-neutral-900 dark:text-neutral-100\">\n                        {tour.title || \"Product tour\"}\n                      </div>\n                      {tour.description ? (\n                        <div className=\"mt-1 line-clamp-2 text-xs text-neutral-500 dark:text-neutral-400\">\n                          {tour.description}\n                        </div>\n                      ) : null}\n                      {tour.steps && tour.steps.length > 0 ? (\n                        <div className=\"mt-1 text-[11px] text-neutral-500 dark:text-neutral-400\">\n                          {tour.steps.length} {tour.steps.length === 1 ? \"step\" : \"steps\"}\n                        </div>\n                      ) : null}\n                    </div>\n                    <Button\n                      onClick={() => handleTourStart(tour)}\n                      variant=\"primary\"\n                      size=\"sm\"\n                      className=\"shrink-0\"\n                      style={{\n                        backgroundColor: primaryButtonBackgroundColor,\n                        color: primaryButtonTextColor,\n                      }}\n                    >\n                      Start tour\n                    </Button>\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {message.content ? (\n            isUser ? (\n              <div>{message.content}</div>\n            ) : (\n              <div\n                className=\"uo-ai-markdown max-w-none text-[14px] leading-[1.55] text-[#242127] dark:text-[#f4f2f7]\"\n                dangerouslySetInnerHTML={{ __html: renderMarkdown(message.content) }}\n              />\n            )\n          ) : (\n            <ThinkingIndicator />\n          )}\n\n          {message.featureSuggestions && message.featureSuggestions.length > 0 && (\n            <div className=\"mt-3 border-t border-neutral-200 pt-3 dark:border-neutral-700\">\n              <p className=\"mb-2 text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n                Possible feature match:\n              </p>\n              <div className=\"flex flex-col gap-2\">\n                {message.featureSuggestions.map((feature) => (\n                  <button\n                    key={feature.id}\n                    type=\"button\"\n                    onClick={() => onFeatureClick?.(feature)}\n                    className=\"rounded-xl border border-neutral-200 px-3 py-2 text-left transition-[background-color,border-color,transform] duration-150 ease-out hover:border-neutral-300 hover:bg-neutral-50 active:scale-[0.96] dark:border-neutral-700 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/60\"\n                  >\n                    <div className=\"flex items-start justify-between gap-3\">\n                      <div className=\"min-w-0 flex-1\">\n                        <div className=\"truncate text-sm font-medium text-neutral-900 dark:text-neutral-100\">\n                          {feature.title}\n                        </div>\n                        {feature.text ? (\n                          <div className=\"mt-1 line-clamp-2 text-xs text-neutral-500 dark:text-neutral-400\">\n                            {feature.text}\n                          </div>\n                        ) : null}\n                      </div>\n                      {feature.status ? <FeedbackStatusBadge status={feature.status} /> : null}\n                    </div>\n                    {(feature.board?.name || feature.feedbackVotesCount > 0) && (\n                      <div className=\"mt-2 flex items-center gap-2 text-[11px] text-neutral-500 dark:text-neutral-400\">\n                        {feature.board?.name ? <span>{feature.board.name}</span> : null}\n                        {feature.feedbackVotesCount > 0 ? (\n                          <span>{feature.feedbackVotesCount} votes</span>\n                        ) : null}\n                      </div>\n                    )}\n                  </button>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {message.articles && message.articles.length > 0 && (\n            <div className=\"mt-3 border-t border-neutral-200 pt-3 dark:border-neutral-700\">\n              <p className=\"mb-2 text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n                Related articles:\n              </p>\n              <div className=\"flex flex-col gap-1.5\">\n                {message.articles.map((article) => (\n                  <button\n                    key={article.id}\n                    type=\"button\"\n                    onClick={() => onArticleClick?.(article)}\n                    className=\"rounded-lg bg-neutral-50 px-3 py-2 text-left transition-[background-color,transform] duration-150 ease-out hover:bg-neutral-200 active:scale-[0.96] dark:bg-neutral-900 dark:hover:bg-neutral-700\"\n                  >\n                    <div className=\"min-w-0\">\n                      <div className=\"truncate text-xs font-medium text-neutral-700 dark:text-neutral-300\">\n                        {article.title}\n                      </div>\n                      {article.description ? (\n                        <div className=\"mt-1 line-clamp-2 text-[11px] leading-relaxed text-neutral-500 dark:text-neutral-400\">\n                          {article.description}\n                        </div>\n                      ) : null}\n                    </div>\n                  </button>\n                ))}\n              </div>\n            </div>\n          )}\n        </div>\n      </motion.div>\n    );\n  };\n\n  const showWelcome = messages.length === 0;\n  const normalizedTeamName = teamName?.trim();\n  const assistantFollowUp = isLoading ? null : getAssistantFollowUp(lastAssistantMessage);\n  const aiGreeting = [\n    normalizedTeamName\n      ? `Hi, I'm ${normalizedTeamName}'s AI assistant.`\n      : \"Hi, I'm your AI assistant.\",\n    ...AI_GREETING_FOLLOW_UPS,\n  ];\n\n  return (\n    <div\n      className={`relative flex min-h-0 flex-col bg-white dark:bg-neutral-950 ${isMobileSheet ? \"h-auto max-h-[calc(100dvh-72px)]\" : \"h-full\"} ${showPoweredByFooter ? \"pb-[25px]\" : \"\"}`}\n    >\n      <div\n        ref={chatScrollRef}\n        className={`uo-chat-scroll min-h-0 flex-1 overflow-y-auto px-4 pb-5 pt-4 ${isMobileSheet ? \"max-h-[calc(100dvh-280px)]\" : \"\"}`}\n        role=\"log\"\n        aria-live=\"polite\"\n      >\n        <div className=\"flex min-h-full flex-col\">\n          <div className=\"flex flex-col items-start gap-1.5 pt-2\">\n            {isGreetingTyping ? (\n              <motion.div\n                initial={{ opacity: 0, y: 6 }}\n                animate={{ opacity: 1, y: 0 }}\n                transition={{ type: \"spring\", duration: 0.3, bounce: 0 }}\n                className=\"rounded-[20px] rounded-bl-[6px] bg-[#f4f4f5] px-4 py-3 dark:bg-white/[0.08]\"\n              >\n                <ThinkingIndicator />\n              </motion.div>\n            ) : (\n              aiGreeting.map((message, index) => (\n                <motion.div\n                  key={message}\n                  initial={{ opacity: 0, y: 8, scale: 0.98, filter: \"blur(2px)\" }}\n                  animate={{ opacity: 1, y: 0, scale: 1, filter: \"blur(0px)\" }}\n                  transition={{\n                    type: \"spring\",\n                    duration: 0.3,\n                    bounce: 0,\n                    delay: index * 0.09,\n                  }}\n                  className=\"max-w-full rounded-[20px] rounded-bl-[6px] bg-[#f4f4f5] px-4 py-3 text-pretty text-[14px] leading-[1.55] text-[#242127] dark:bg-white/[0.08] dark:text-[#f4f2f7]\"\n                >\n                  {message}\n                </motion.div>\n              ))\n            )}\n          </div>\n\n          {!showWelcome && (\n            <div className=\"mt-4 flex flex-col\">\n              <AnimatePresence initial={false}>{messages.map(renderMessage)}</AnimatePresence>\n\n              {shouldShowFeedbackCard && (\n                <div className=\"px-5 py-2\">\n                  <div className=\"relative overflow-hidden rounded-xl border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-700 dark:bg-neutral-800/50\">\n                    <h3 className=\"text-md mt-0 mb-1 font-semibold text-neutral-900 dark:text-neutral-100\">\n                      {lastAssistantMessage?.actionSuggestion?.title}\n                    </h3>\n                    <p className=\"mb-3 text-sm text-neutral-500 dark:text-neutral-400\">\n                      {lastAssistantMessage?.actionSuggestion?.description}\n                    </p>\n                    <Button\n                      onClick={onFeedbackClick}\n                      variant=\"primary\"\n                      size=\"sm\"\n                      style={{\n                        backgroundColor: primaryButtonBackgroundColor,\n                        color: primaryButtonTextColor,\n                      }}\n                    >\n                      {lastAssistantMessage?.actionSuggestion?.buttonLabel}\n                    </Button>\n                    <Gift\n                      className=\"absolute bottom-[-20px] right-[-20px] h-28 w-28 text-neutral-200 opacity-30 dark:text-neutral-700\"\n                      strokeWidth={1.5}\n                    />\n                  </div>\n                </div>\n              )}\n\n              {assistantFollowUp && (\n                <motion.div\n                  key={`follow-up-${lastAssistantMessage.id}`}\n                  initial={{ opacity: 0, y: 8, filter: \"blur(2px)\" }}\n                  animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n                  transition={{ type: \"spring\", duration: 0.3, bounce: 0, delay: 0.1 }}\n                  className=\"mt-0.5 w-fit max-w-[86%] rounded-[20px] rounded-bl-[6px] bg-[#f4f4f5] px-4 py-3 text-pretty text-[14px] leading-[1.55] text-[#242127] dark:bg-white/[0.08] dark:text-[#f4f2f7]\"\n                >\n                  {assistantFollowUp}\n                </motion.div>\n              )}\n\n              {shouldShowSupportCard && (\n                <div className=\"px-5 py-2\">\n                  <button\n                    type=\"button\"\n                    onClick={handleSupportClick}\n                    className=\"flex w-full items-center gap-3 rounded-xl border border-neutral-200 bg-white px-3 py-2.5 text-left transition-[background-color,border-color,transform] duration-150 ease-out hover:border-neutral-300 hover:bg-neutral-50 active:scale-[0.96] dark:border-neutral-700 dark:bg-neutral-900 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/60\"\n                  >\n                    <span className=\"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-neutral-100 text-neutral-600 dark:bg-neutral-800 dark:text-neutral-300\">\n                      <LifeBuoy className=\"size-4\" />\n                    </span>\n                    <span className=\"min-w-0\">\n                      <span className=\"block text-sm font-medium text-neutral-900 dark:text-neutral-100\">\n                        Contact support\n                      </span>\n                      <span className=\"block text-xs leading-5 text-neutral-500 dark:text-neutral-400\">\n                        Send this AI conversation to the team.\n                      </span>\n                    </span>\n                  </button>\n                </div>\n              )}\n              {conversationTailHeight > 0 ? (\n                <div\n                  className=\"shrink-0\"\n                  style={{ height: conversationTailHeight }}\n                  aria-hidden=\"true\"\n                />\n              ) : null}\n            </div>\n          )}\n        </div>\n      </div>\n\n      <div className=\"pointer-events-none absolute bottom-[5.4rem] left-0 right-0 h-8 bg-gradient-to-t from-white to-transparent dark:from-gray-900 dark:to-transparent\" />\n      <div className=\"flex-shrink-0 bg-white px-3 pb-3 pt-2 dark:bg-neutral-950\">\n        {!hasUserMessages && (\n          <div\n            className={`mb-2 flex gap-1.5 overflow-x-auto px-0.5 py-0.5 transition-[opacity,transform] duration-200 ease-out [scrollbar-width:none] [&::-webkit-scrollbar]:hidden ${\n              isGreetingTyping ? \"translate-y-1 opacity-0\" : \"translate-y-0 opacity-100\"\n            }`}\n            aria-hidden={isGreetingTyping}\n          >\n            {defaultQuestions.map((question, index) => (\n              <motion.button\n                key={question}\n                type=\"button\"\n                initial={{ opacity: 0, y: 6 }}\n                animate={{ opacity: 1, y: 0 }}\n                transition={{ delay: 0.2 + index * 0.06, duration: 0.25, ease: \"easeOut\" }}\n                onClick={() => handleQuestionClick(question)}\n                disabled={isLoading || isGreetingTyping}\n                className=\"flex min-h-9 shrink-0 items-center rounded-full bg-white px-3 py-1.5 text-left text-[12px] font-medium text-[#504b59] shadow-[0_0_0_1px_rgba(0,0,0,0.09)] transition-[box-shadow,transform] duration-150 ease-out hover:shadow-[0_0_0_1px_rgba(0,0,0,0.15)] active:scale-[0.96] disabled:cursor-not-allowed disabled:opacity-50 dark:bg-transparent dark:text-[#ded9e6] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.12)]\"\n              >\n                <span>{question}</span>\n              </motion.button>\n            ))}\n          </div>\n        )}\n        <form onSubmit={handleSubmit}>\n          <label className=\"relative flex min-h-[84px] w-full cursor-text flex-col overflow-hidden rounded-[20px] bg-white px-2 pb-2 pt-3 shadow-[0_0_0_1px_rgba(0,0,0,0.15),0_1px_2px_rgba(0,0,0,0.05)] transition-[box-shadow] duration-150 ease-out focus-within:shadow-[0_0_0_1px_rgba(0,0,0,0.28),0_1px_2px_rgba(0,0,0,0.05)] dark:bg-gray-800 dark:shadow-[0_0_0_1px_rgba(255,255,255,0.15)] dark:focus-within:shadow-[0_0_0_1px_rgba(255,255,255,0.28)]\">\n            <textarea\n              ref={inputRef}\n              value={inputValue}\n              onChange={(e) => setInputValue(e.target.value)}\n              onKeyDown={handleKeyDown}\n              placeholder=\"Ask a question...\"\n              disabled={isLoading}\n              autoComplete=\"off\"\n              rows={1}\n              className=\"max-h-28 min-h-7 w-full flex-grow resize-none overflow-y-auto border-0 bg-transparent px-2 py-0 font-sans text-[14px] font-normal leading-6 text-[#242127] outline-none placeholder:text-[#8b8790] dark:text-[#f4f2f7] dark:placeholder:text-[#9a94a3]\"\n            />\n            <span className=\"mt-1 flex items-center justify-between\">\n              <span className=\"flex items-center\">\n                <span\n                  className=\"flex size-10 items-center justify-center text-[#8b8790]\"\n                  aria-hidden=\"true\"\n                >\n                  <Paperclip className=\"size-[18px]\" />\n                </span>\n                <span\n                  className=\"flex size-10 items-center justify-center text-[#8b8790]\"\n                  aria-hidden=\"true\"\n                >\n                  <Smile className=\"size-[18px]\" />\n                </span>\n              </span>\n              <button\n                type=\"submit\"\n                disabled={!inputValue.trim() || isLoading}\n                className=\"flex size-10 flex-shrink-0 items-center justify-center rounded-full transition-[background-color,opacity,transform] duration-150 ease-out active:scale-[0.96] disabled:cursor-not-allowed disabled:bg-[#efeff0] disabled:text-[#c8c6ca]\"\n                style={\n                  inputValue.trim() && !isLoading\n                    ? {\n                        backgroundColor: primaryButtonBackgroundColor,\n                        color: primaryButtonTextColor,\n                      }\n                    : undefined\n                }\n                aria-label=\"Send message\"\n              >\n                <ArrowUp className=\"size-[18px]\" aria-hidden=\"true\" />\n              </button>\n            </span>\n          </label>\n        </form>\n      </div>\n    </div>\n  );\n};\n\nexport default AskAiContent;\n","const poweredByRequiredPlans = new Set([\"free\", \"trial\", \"demo_free\"]);\n\nexport function isPoweredByRequiredPlan(plan?: string | null): boolean {\n  return Boolean(plan && poweredByRequiredPlans.has(plan));\n}\n\nexport function shouldShowPoweredBy(plan?: string | null, showPoweredBy?: boolean | null): boolean {\n  return isPoweredByRequiredPlan(plan) || showPoweredBy === true;\n}\n","\"use client\";\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);\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n  unsupportedValue = inView;\n}\nfunction getRootId(root) {\n  if (!root) return \"0\";\n  if (RootIds.has(root)) return RootIds.get(root);\n  rootId += 1;\n  RootIds.set(root, rootId.toString());\n  return RootIds.get(root);\n}\nfunction optionsToId(options) {\n  return Object.keys(options).sort().filter(\n    (key) => options[key] !== void 0\n  ).map((key) => {\n    return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n  }).toString();\n}\nfunction createObserver(options) {\n  const id = optionsToId(options);\n  let instance = observerMap.get(id);\n  if (!instance) {\n    const elements = /* @__PURE__ */ new Map();\n    let thresholds;\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        var _a;\n        const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n        if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n          entry.isVisible = inView;\n        }\n        (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n          callback(inView, entry);\n        });\n      });\n    }, options);\n    thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n    instance = {\n      id,\n      observer,\n      elements\n    };\n    observerMap.set(id, instance);\n  }\n  return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n  if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n    const bounds = element.getBoundingClientRect();\n    callback(fallbackInView, {\n      isIntersecting: fallbackInView,\n      target: element,\n      intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n      time: 0,\n      boundingClientRect: bounds,\n      intersectionRect: bounds,\n      rootBounds: bounds\n    });\n    return () => {\n    };\n  }\n  const { id, observer, elements } = createObserver(options);\n  const callbacks = elements.get(element) || [];\n  if (!elements.has(element)) {\n    elements.set(element, callbacks);\n  }\n  callbacks.push(callback);\n  observer.observe(element);\n  return function unobserve() {\n    callbacks.splice(callbacks.indexOf(callback), 1);\n    if (callbacks.length === 0) {\n      elements.delete(element);\n      observer.unobserve(element);\n    }\n    if (elements.size === 0) {\n      observer.disconnect();\n      observerMap.delete(id);\n    }\n  };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n  return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n  constructor(props) {\n    super(props);\n    __publicField(this, \"node\", null);\n    __publicField(this, \"_unobserveCb\", null);\n    __publicField(this, \"handleNode\", (node) => {\n      if (this.node) {\n        this.unobserve();\n        if (!node && !this.props.triggerOnce && !this.props.skip) {\n          this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n        }\n      }\n      this.node = node ? node : null;\n      this.observeNode();\n    });\n    __publicField(this, \"handleChange\", (inView, entry) => {\n      if (inView && this.props.triggerOnce) {\n        this.unobserve();\n      }\n      if (!isPlainChildren(this.props)) {\n        this.setState({ inView, entry });\n      }\n      if (this.props.onChange) {\n        this.props.onChange(inView, entry);\n      }\n    });\n    this.state = {\n      inView: !!props.initialInView,\n      entry: void 0\n    };\n  }\n  componentDidMount() {\n    this.unobserve();\n    this.observeNode();\n  }\n  componentDidUpdate(prevProps) {\n    if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n      this.unobserve();\n      this.observeNode();\n    }\n  }\n  componentWillUnmount() {\n    this.unobserve();\n  }\n  observeNode() {\n    if (!this.node || this.props.skip) return;\n    const {\n      threshold,\n      root,\n      rootMargin,\n      trackVisibility,\n      delay,\n      fallbackInView\n    } = this.props;\n    this._unobserveCb = observe(\n      this.node,\n      this.handleChange,\n      {\n        threshold,\n        root,\n        rootMargin,\n        // @ts-ignore\n        trackVisibility,\n        // @ts-ignore\n        delay\n      },\n      fallbackInView\n    );\n  }\n  unobserve() {\n    if (this._unobserveCb) {\n      this._unobserveCb();\n      this._unobserveCb = null;\n    }\n  }\n  render() {\n    const { children } = this.props;\n    if (typeof children === \"function\") {\n      const { inView, entry } = this.state;\n      return children({ inView, entry, ref: this.handleNode });\n    }\n    const {\n      as,\n      triggerOnce,\n      threshold,\n      root,\n      rootMargin,\n      onChange,\n      skip,\n      trackVisibility,\n      delay,\n      initialInView,\n      fallbackInView,\n      ...props\n    } = this.props;\n    return React.createElement(\n      as || \"div\",\n      { ref: this.handleNode, ...props },\n      children\n    );\n  }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n  threshold,\n  delay,\n  trackVisibility,\n  rootMargin,\n  root,\n  triggerOnce,\n  skip,\n  initialInView,\n  fallbackInView,\n  onChange\n} = {}) {\n  var _a;\n  const [ref, setRef] = React2.useState(null);\n  const callback = React2.useRef(onChange);\n  const [state, setState] = React2.useState({\n    inView: !!initialInView,\n    entry: void 0\n  });\n  callback.current = onChange;\n  React2.useEffect(\n    () => {\n      if (skip || !ref) return;\n      let unobserve;\n      unobserve = observe(\n        ref,\n        (inView, entry) => {\n          setState({\n            inView,\n            entry\n          });\n          if (callback.current) callback.current(inView, entry);\n          if (entry.isIntersecting && triggerOnce && unobserve) {\n            unobserve();\n            unobserve = void 0;\n          }\n        },\n        {\n          root,\n          rootMargin,\n          threshold,\n          // @ts-ignore\n          trackVisibility,\n          // @ts-ignore\n          delay\n        },\n        fallbackInView\n      );\n      return () => {\n        if (unobserve) {\n          unobserve();\n        }\n      };\n    },\n    // We break the rule here, because we aren't including the actual `threshold` variable\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      // If the threshold is an array, convert it to a string, so it won't change between renders.\n      Array.isArray(threshold) ? threshold.toString() : threshold,\n      ref,\n      root,\n      rootMargin,\n      triggerOnce,\n      skip,\n      trackVisibility,\n      fallbackInView,\n      delay\n    ]\n  );\n  const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n  const previousEntryTarget = React2.useRef(void 0);\n  if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n    previousEntryTarget.current = entryTarget;\n    setState({\n      inView: !!initialInView,\n      entry: void 0\n    });\n  }\n  const result = [setRef, state.inView, state.entry];\n  result.ref = result[0];\n  result.inView = result[1];\n  result.entry = result[2];\n  return result;\n}\nexport {\n  InView,\n  defaultFallbackInView,\n  observe,\n  useInView\n};\n//# sourceMappingURL=index.mjs.map","// ABOUTME: Skeleton loading components for feedback content\n// ABOUTME: Provides loading states while feedback data is being fetched\nimport React from \"react\";\n\nexport const SkeletonBox: React.FC<{ className?: string }> = ({ className = \"\" }) => (\n  <div className={`animate-pulse rounded bg-neutral-200 dark:bg-neutral-700 ${className}`} />\n);\n\nexport const FeedbackItemSkeleton: React.FC = () => {\n  return (\n    <div className=\"flex w-full items-stretch justify-between overflow-hidden border-b border-solid border-[var(--uo-muted)]\">\n      <div className=\"min-w-0 flex-1\">\n        <div className=\"flex items-center gap-x-2\">\n          <div className=\"min-w-0 flex-grow py-3 pr-2\">\n            <SkeletonBox className=\"mb-2 h-4 w-4/5\" />\n            <SkeletonBox className=\"mb-2 h-3 w-full\" />\n            <SkeletonBox className=\"h-3 w-2/3\" />\n          </div>\n\n          <div className=\"flex h-9 w-11 shrink-0 flex-col items-center justify-center gap-1 rounded-full border border-neutral-200 dark:border-neutral-700\">\n            <SkeletonBox className=\"h-2.5 w-2.5 rounded-full mb-2\" />\n            <SkeletonBox className=\"h-2.5 w-3\" />\n          </div>\n        </div>\n\n        <div className=\"flex items-center gap-x-2 pt-1 pb-3 pr-3\">\n          <SkeletonBox className=\"h-4 w-24\" />\n          <SkeletonBox className=\"h-4 w-20 rounded-full\" />\n          <SkeletonBox className=\"h-4 w-16 rounded-full\" />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport const FeedbackStageSkeleton: React.FC = () => {\n  return (\n    <div className=\"w-[290px] flex-shrink-0 overflow-y-auto px-3\">\n      {/* Stage header skeleton */}\n      <div className=\"mb-3 flex items-center gap-2\">\n        <SkeletonBox className=\"h-4 w-20\" />\n        <SkeletonBox className=\"h-4 w-4 rounded-full\" />\n      </div>\n\n      {/* Items skeleton */}\n      <div className=\"space-y-2\">\n        {Array.from({ length: 10 }).map((_, index) => (\n          <FeedbackItemSkeleton key={index} />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport const FeedbackBoardSkeleton: React.FC = () => {\n  return (\n    <div className=\"w-[290px] flex-shrink-0 overflow-y-auto px-3\">\n      {/* Board header skeleton */}\n      <div className=\"mb-3 flex items-center gap-2\">\n        <SkeletonBox className=\"h-4 w-20\" />\n        <SkeletonBox className=\"h-4 w-4 rounded-full\" />\n      </div>\n\n      {/* Items skeleton */}\n      <div className=\"space-y-2\">\n        {Array.from({ length: 10 }).map((_, index) => (\n          <FeedbackItemSkeleton key={index} />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport const FeedbackContentSkeleton: React.FC<{ length?: number }> = ({ length = 5 }) => {\n  return (\n    <div className=\"relative min-h-64 w-full overflow-hidden pl-1\">\n      {Array.from({ length }).map((_, index) => (\n        <FeedbackItemSkeleton key={index} />\n      ))}\n    </div>\n  );\n};\n\nexport const RoadmapItemSkeleton: React.FC = () => {\n  return (\n    <li className=\"relative m-0 list-none p-0\">\n      <div className=\"flex items-start gap-2.5\">\n        <span\n          aria-hidden=\"true\"\n          className=\"relative mt-[13px] inline-block h-[14px] w-[14px] shrink-0 rounded-full bg-neutral-100 dark:bg-neutral-800\"\n        >\n          <SkeletonBox className=\"absolute inset-[3px] rounded-full\" />\n        </span>\n\n        <div className=\"min-w-0 flex-1 border-b border-[var(--uo-muted)] border-solid\">\n          <div className=\"flex items-center gap-x-2\">\n            <div className=\"min-w-0 flex-grow py-3 pr-2\">\n              <SkeletonBox className=\"mb-2 h-4 w-4/5\" />\n              <SkeletonBox className=\"mb-2 h-3 w-full\" />\n              <SkeletonBox className=\"h-3 w-2/3\" />\n            </div>\n\n            <div className=\"flex h-9 w-11 shrink-0 flex-col items-center justify-center gap-1 rounded-full border border-neutral-200 dark:border-neutral-700\">\n              <SkeletonBox className=\"h-2.5 w-2.5 mb-2 rounded-full\" />\n              <SkeletonBox className=\"h-2.5 w-3\" />\n            </div>\n          </div>\n\n          <div className=\"flex items-center gap-x-2 pb-3 pt-1 pr-3\">\n            <SkeletonBox className=\"h-4 w-24\" />\n            <SkeletonBox className=\"h-4 w-20 rounded-full\" />\n            <SkeletonBox className=\"h-4 w-12 rounded-full\" />\n          </div>\n        </div>\n      </div>\n    </li>\n  );\n};\n\nexport const RoadmapStageSkeleton: React.FC = () => {\n  return (\n    <section className=\"mb-8 last:mb-0\">\n      <div className=\"sticky top-0 z-10 -mx-4 mb-2 flex items-center gap-2 bg-neutral-50 px-4 py-3 dark:bg-gray-800 border border-b border-x-0 border-t-0 border-neutral-100 dark:border-gray-700/70\">\n        <SkeletonBox className=\"h-5 w-5 shrink-0 rounded-full\" />\n        <SkeletonBox className=\"h-4 w-24\" />\n        <SkeletonBox className=\"h-4 w-6 rounded-full\" />\n      </div>\n\n      <ul className=\"m-0 list-none p-0 pl-[3px]\">\n        {Array.from({ length: 4 }).map((_, index) => (\n          <RoadmapItemSkeleton key={index} />\n        ))}\n      </ul>\n    </section>\n  );\n};\n\nexport const DetailPageLoader: React.FC = () => {\n  return (\n    <div className=\"h-full space-y-6 px-4 pt-8\">\n      <div className=\"mb-2 mt-14\">\n        <SkeletonBox className=\"h-[220px] w-full rounded-lg\" />\n      </div>\n\n      {/* Title skeleton */}\n      <SkeletonBox className=\"mb-2 h-6 w-2/4\" />\n      <div className=\"flex items-center gap-3\">\n        <SkeletonBox className=\"h-5 w-8\" />\n        <SkeletonBox className=\"h-5 w-8\" />\n      </div>\n\n      {/* Content skeleton */}\n      <div className=\"my-6 space-y-4\">\n        <SkeletonBox className=\"h-12 w-full\" />\n        <SkeletonBox className=\"h-12 w-4/5\" />\n        <SkeletonBox className=\"h-12 w-full\" />\n        <SkeletonBox className=\"h-12 w-4/5\" />\n        <SkeletonBox className=\"h-12 w-4/5\" />\n      </div>\n\n      {/* Engagement indicators skeleton */}\n      <div className=\"flex items-center gap-3\">\n        <SkeletonBox className=\"h-5 w-8\" />\n        <SkeletonBox className=\"h-5 w-8\" />\n      </div>\n    </div>\n  );\n};\n\nexport const RoadmapContentSkeleton: React.FC = () => {\n  return (\n    <div className=\"relative min-h-64 w-full\">\n      {Array.from({ length: 3 }).map((_, index) => (\n        <RoadmapStageSkeleton key={index} />\n      ))}\n    </div>\n  );\n};\n\nexport const HomeAnnouncementsSkeleton: React.FC<{ title: string; length?: number }> = ({\n  title,\n  length = 4,\n}) => {\n  return (\n    <section aria-busy=\"true\" aria-label={`Loading ${title}`} className=\"px-0 pb-4 pt-1\">\n      <div className=\"text-md mb-2 mt-4 px-5 text-neutral-500 dark:text-neutral-400\">\n        <span className=\"select-none\">{title}</span>\n      </div>\n      <div aria-hidden=\"true\" className=\"relative\">\n        <div className=\"absolute bottom-[11px] left-[26px] top-[11px] border-l border-gray-200 dark:border-gray-700\" />\n        {Array.from({ length }).map((_, index) => (\n          <div key={index} className=\"flex w-full items-center px-5 py-1.5\">\n            <span className=\"relative z-10 ml-[0.125rem] mr-[0.9rem] flex h-[11px] min-h-[11px] w-[11px] min-w-[11px] items-center justify-center\">\n              <SkeletonBox className=\"h-[11px] w-[11px] rounded-full\" />\n            </span>\n            <span className=\"flex min-h-[1.3125rem] flex-1 items-center\">\n              <SkeletonBox className={index % 2 === 0 ? \"h-3 w-3/5\" : \"h-3 w-4/5\"} />\n            </span>\n          </div>\n        ))}\n      </div>\n    </section>\n  );\n};\n\nexport const AnnouncementItemSkeleton: React.FC = () => {\n  return (\n    <div className=\"border-b border-solid border-uo-border-subtle py-6 first:pt-2 last:border-b-0\">\n      <SkeletonBox className=\"mb-3 h-3 w-16\" />\n      <SkeletonBox className=\"mb-3 h-5 w-3/4\" />\n      <SkeletonBox className=\"mb-2 h-4 w-full\" />\n      <SkeletonBox className=\"mb-2 h-4 w-4/5\" />\n      <SkeletonBox className=\"mt-4 h-32 w-full\" />\n    </div>\n  );\n};\n\nexport const AnnouncementTimelineSkeleton: React.FC<{ length?: number }> = ({ length = 4 }) => {\n  return (\n    <div className=\"px-6 pb-4\">\n      {Array.from({ length: length }).map((_, index) => (\n        <AnnouncementItemSkeleton key={index} />\n      ))}\n    </div>\n  );\n};\n\nexport const ArticleItemSkeleton: React.FC = () => {\n  return (\n    <div className=\"rounded-lg border border-gray-200 bg-white p-4 dark:border-neutral-800 dark:bg-neutral-900\">\n      <SkeletonBox className=\"mb-2 h-5 w-3/4\" />\n      <SkeletonBox className=\"h-4 w-full\" />\n      <SkeletonBox className=\"mt-1 h-4 w-2/3\" />\n    </div>\n  );\n};\n\nexport const CollectionCardSkeleton: React.FC = () => {\n  return (\n    <div className=\"rounded-lg border border-gray-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-900\">\n      <SkeletonBox className=\"mb-4 h-6 w-6\" />\n      <SkeletonBox className=\"mb-2 h-5 w-2/3\" />\n      <SkeletonBox className=\"mb-1 h-4 w-full\" />\n      <SkeletonBox className=\"mt-2 h-3 w-20\" />\n    </div>\n  );\n};\n\nexport const HelpCenterContentSkeleton: React.FC = () => {\n  return (\n    <div className=\"\">\n      <div className=\"z-20 px-4.5 pt-8\">\n        <SkeletonBox className=\"mb-3 h-4 w-32\" />\n        <div className=\"space-y-1\">\n          {Array.from({ length: 3 }).map((_, index) => (\n            <div key={index} className=\"flex items-center justify-between rounded-md py-2.5\">\n              <SkeletonBox className=\"h-4 w-full\" />\n            </div>\n          ))}\n        </div>\n      </div>\n      <div className=\"px-4.5 pt-8\">\n        <SkeletonBox className=\"mb-3 h-4 w-32 pl-1\" />\n        <div className=\"space-y-2\">\n          {Array.from({ length: 4 }).map((_, index) => (\n            <div\n              key={index}\n              className=\"rounded-lg border border-gray-200 bg-white p-4 dark:border-neutral-800 dark:bg-neutral-950\"\n            >\n              <div className=\"flex items-start gap-4\">\n                <SkeletonBox className=\"mt-0.5 h-6 w-6 flex-shrink-0 rounded\" />\n                <div className=\"flex-1 min-w-0\">\n                  <SkeletonBox className=\"mb-1 h-4 w-2/3\" />\n                  <SkeletonBox className=\"h-3 w-full\" />\n                  <SkeletonBox className=\"mt-1 h-3 w-4/5\" />\n                </div>\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport const CollectionPageSkeleton: React.FC = () => {\n  return (\n    <div className=\"px-4 py-6\">\n      <div className=\"mb-6 mt-12\">\n        <div className=\"mb-12 pt-10 flex flex-col items-center text-center\">\n          <SkeletonBox className=\"mb-4 h-12 w-12 rounded-lg\" />\n          <SkeletonBox className=\"mb-2 h-8 w-48\" />\n          <SkeletonBox className=\"mb-2 h-4 w-[400px]\" />\n          <SkeletonBox className=\"h-4 w-24\" />\n        </div>\n        <SkeletonBox className=\"mb-8 h-10 w-full rounded-xl\" />\n      </div>\n      <div className=\"rounded-lg border border-gray-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-900\">\n        <div className=\"space-y-1\">\n          {Array.from({ length: 8 }).map((_, index) => (\n            <div key={index} className=\"flex items-center justify-between px-3 py-3\">\n              <SkeletonBox className=\"h-4 w-3/4\" />\n              <SkeletonBox className=\"h-4 w-4\" />\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  );\n};\n","// ABOUTME: React Query provider for managing feedback API state\n// ABOUTME: Provides query client and default configuration for feedback components\n\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport React, { createContext, useContext } from \"react\";\n\n// Create query client with optimal configuration for feedback widget\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      staleTime: 1000 * 60, // 1 minute\n      retry: (failureCount, error: any) => {\n        // Don't retry on 404s or client errors\n        if (error?.status >= 400 && error?.status < 500) {\n          return false;\n        }\n        return failureCount < 2;\n      },\n      refetchOnWindowFocus: false,\n    },\n    mutations: {\n      retry: false,\n    },\n  },\n});\n\nconst QueryProviderContext = createContext<QueryClient | null>(null);\n\ninterface QueryProviderProps {\n  children: React.ReactNode;\n}\n\nexport const FeedbackQueryProvider: React.FC<QueryProviderProps> = ({ children }) => {\n  return (\n    <QueryClientProvider client={queryClient}>\n      <QueryProviderContext.Provider value={queryClient}>{children}</QueryProviderContext.Provider>\n    </QueryClientProvider>\n  );\n};\n\nexport const useQueryClient = () => {\n  const client = useContext(QueryProviderContext);\n  if (!client) {\n    throw new Error(\"useQueryClient must be used within FeedbackQueryProvider\");\n  }\n  return client;\n};\n\nexport { queryClient };\n","import * as React from \"react\";\n\ninterface WidgetEmptyStateProps {\n  icon: React.ReactNode;\n  title: string;\n  description?: string;\n  className?: string;\n}\n\nexport function WidgetEmptyState({\n  icon,\n  title,\n  description,\n  className = \"\",\n}: WidgetEmptyStateProps) {\n  return (\n    <div className={`flex h-full items-center justify-center px-5 py-10 ${className}`}>\n      <div className=\"max-w-[280px] text-center\">\n        <div className=\"mx-auto mb-4 flex h-10 w-10 items-center justify-center text-neutral-400 dark:text-neutral-500\">\n          {icon}\n        </div>\n        <div className=\"text-[16px] font-medium text-neutral-500 dark:text-neutral-400\">\n          {title}\n        </div>\n        {description ? (\n          <div className=\"mt-1 text-[12px] text-neutral-400 dark:text-neutral-500\">\n            {description}\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n}\n","import { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { ArrowUp } from \"lucide-react\";\nimport * as React from \"react\";\nimport { createFeedbackVote, deleteFeedbackVote, fetchFeedbackVoteInfo } from \"../api-utils\";\nimport { queryClient } from \"../query-provider\";\n\nconst defaultButtonClassName =\n  \"group tabular-nums relative inline-flex h-8 shrink-0 cursor-pointer items-center gap-1.5 rounded-full border-0 px-3 font-sans text-[13px] font-medium transition-[background-color,color,transform] duration-150 active:scale-[0.96] disabled:pointer-events-none disabled:opacity-60\";\n\nexport interface PostVoteProps {\n  votesCount: number;\n  id: string;\n  code?: string;\n}\n\ntype VoteInfo = {\n  count: number;\n  isSubscriberVoted: boolean;\n};\n\nconst getNextVoteInfo = (current: VoteInfo | null | undefined, isSubscriberVoted: boolean) => {\n  const count = Math.max((current?.count ?? 0) + (isSubscriberVoted ? 1 : -1), 0);\n  return { count, isSubscriberVoted };\n};\n\nconst updateItemVoteCount = (item: any, id: string, count: number) => {\n  if (!item || item.id !== id) return item;\n  return { ...item, feedbackVotesCount: count };\n};\n\nconst syncCachedItemVoteCounts = (id: string, count: number) => {\n  queryClient.setQueriesData({ queryKey: [\"feedback-items\"] }, (current: any) => {\n    if (!current?.pages) return current;\n\n    return {\n      ...current,\n      pages: current.pages.map((page: any) => ({\n        ...page,\n        data: page?.data?.map((item: any) => updateItemVoteCount(item, id, count)) || page?.data,\n      })),\n    };\n  });\n\n  queryClient.setQueriesData({ queryKey: [\"roadmap-view-items\"] }, (current: any) => {\n    if (!current?.data?.columns) return current;\n\n    return {\n      ...current,\n      data: {\n        ...current.data,\n        columns: current.data.columns.map((column: any) => ({\n          ...column,\n          items:\n            column.items?.map((item: any) => updateItemVoteCount(item, id, count)) || column.items,\n        })),\n      },\n    };\n  });\n\n  queryClient.setQueriesData({ queryKey: [\"feedback-by-id\", id] }, (current: any) => {\n    if (!current?.data) return current;\n    return { ...current, data: updateItemVoteCount(current.data, id, count) };\n  });\n};\n\nconst invalidateVoteQueries = (id: string) => {\n  void queryClient.invalidateQueries({ queryKey: [\"feedback-votes\", id] });\n  void queryClient.invalidateQueries({ queryKey: [\"feedback-items\"] });\n  void queryClient.invalidateQueries({ queryKey: [\"roadmap-view-items\"] });\n  void queryClient.invalidateQueries({ queryKey: [\"feedback-by-id\", id] });\n};\n\nconst PostVote: React.FC<PostVoteProps> = ({ votesCount = 0, id, code }) => {\n  const [isActive, setIsActive] = React.useState(false);\n  const [votes, setVotes] = React.useState<null | VoteInfo>({\n    count: votesCount,\n    isSubscriberVoted: false,\n  });\n\n  const { data } = useQuery({\n    queryKey: [\"feedback-votes\", id],\n    queryFn: async () => {\n      const response = await fetchFeedbackVoteInfo(id, code);\n      return response.data;\n    },\n  });\n\n  React.useEffect(() => {\n    if (data) {\n      setVotes(data);\n      setIsActive(data.isSubscriberVoted);\n    }\n  }, [data]);\n\n  const { mutate: addVote } = useMutation({\n    mutationKey: [\"addFeedbackVote\"],\n    mutationFn: () => createFeedbackVote(id, code),\n    onMutate: async () => {\n      await queryClient.cancelQueries({ queryKey: [\"feedback-votes\", id] });\n      const previousVotes = queryClient.getQueryData<VoteInfo>([\"feedback-votes\", id]);\n      const nextVotes = getNextVoteInfo(votes || previousVotes, true);\n\n      queryClient.setQueryData([\"feedback-votes\", id], nextVotes);\n      setVotes(nextVotes);\n      setIsActive(true);\n      syncCachedItemVoteCounts(id, nextVotes.count);\n\n      return { previousVotes };\n    },\n    onError: (_error, _variables, context) => {\n      if (!context?.previousVotes) return;\n      queryClient.setQueryData([\"feedback-votes\", id], context.previousVotes);\n      setVotes(context.previousVotes);\n      setIsActive(context.previousVotes.isSubscriberVoted);\n      syncCachedItemVoteCounts(id, context.previousVotes.count);\n    },\n    onSettled: () => {\n      invalidateVoteQueries(id);\n    },\n  });\n\n  const { mutate: deleteVote } = useMutation({\n    mutationKey: [\"deleteFeedbackVote\"],\n    mutationFn: () => deleteFeedbackVote(id, code),\n    onMutate: async () => {\n      await queryClient.cancelQueries({ queryKey: [\"feedback-votes\", id] });\n      const previousVotes = queryClient.getQueryData<VoteInfo>([\"feedback-votes\", id]);\n      const nextVotes = getNextVoteInfo(votes || previousVotes, false);\n\n      queryClient.setQueryData([\"feedback-votes\", id], nextVotes);\n      setVotes(nextVotes);\n      setIsActive(false);\n      syncCachedItemVoteCounts(id, nextVotes.count);\n\n      return { previousVotes };\n    },\n    onError: (_error, _variables, context) => {\n      if (!context?.previousVotes) return;\n      queryClient.setQueryData([\"feedback-votes\", id], context.previousVotes);\n      setVotes(context.previousVotes);\n      setIsActive(context.previousVotes.isSubscriberVoted);\n      syncCachedItemVoteCounts(id, context.previousVotes.count);\n    },\n    onSettled: () => {\n      invalidateVoteQueries(id);\n    },\n  });\n\n  const toggleVote = () => {\n    if (isActive) {\n      deleteVote();\n    } else {\n      addVote();\n    }\n  };\n\n  const onVote = (e: any) => {\n    e.preventDefault();\n    toggleVote();\n  };\n\n  return (\n    <div className=\"flex\">\n      <button\n        type=\"button\"\n        aria-pressed={isActive}\n        aria-label={isActive ? \"Remove upvote\" : \"Upvote feedback\"}\n        className={`${defaultButtonClassName} ${\n          isActive\n            ? \"active bg-uo-primary text-uo-on-primary hover:bg-uo-primary-hover\"\n            : \"bg-transparent text-uo-text-secondary shadow-[inset_0_0_0_1px_var(--uo-color-border-subtle)] hover:bg-uo-fill-hover hover:text-uo-text-primary\"\n        }`}\n        onClick={onVote}\n      >\n        <ArrowUp\n          className=\"h-3.5 w-3.5 transition-transform group-hover:-translate-y-0.5\"\n          strokeWidth={2.5}\n        />\n        <span>{votes?.count || 0}</span>\n      </button>\n    </div>\n  );\n};\n\nexport default PostVote;\n","import { useInfiniteQuery, useQuery } from \"@tanstack/react-query\";\nimport { FeedbackBoard, FeedbackStatusBadge } from \"@userorbit/ui\";\n\nimport { Check, Filter, Lightbulb, Search, ArrowDownWideNarrow } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\nimport { Logger } from \"../../../lib/logger\";\nimport { fetchFeedbackBoardList, fetchFeedbackItems } from \"../api-utils\";\nimport { BoardType } from \"../feedback-list\";\nimport { FeedbackContentSkeleton } from \"../feedback-skeleton\";\nimport { IconFeedback } from \"../icons\";\nimport { FeedbackQueryProvider } from \"../query-provider\";\nimport { WidgetEmptyState } from \"../widget-empty-state\";\nimport PostVote from \"./post-vote\";\n\nconst logger = Logger.getInstance();\n\nconst feedbackStatuses = [\n  { value: \"in_review\", label: \"Review\" },\n  { value: \"planned\", label: \"Planned\" },\n  { value: \"in_progress\", label: \"In Progress\" },\n  { value: \"completed\", label: \"Completed\" },\n  { value: \"closed\", label: \"Closed\" },\n] as const;\n\nconst defaultStatusFilters = feedbackStatuses.map((status) => status.value);\n\nconst sortOptions = [\n  { value: \"top\", label: \"Top\" },\n  { value: \"newest\", label: \"New\" },\n] as const;\n\ninterface FeedbackItem {\n  id: string;\n  urlId?: string;\n  url?: string;\n  title: string;\n  text?: string;\n  createdAt: string;\n  feedbackVotesCount: number;\n  feedbackCommentsCount?: number;\n  status?: string;\n  boardId?: string;\n  subscriber?: {\n    id?: string;\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  } | null;\n  meta?: {\n    updatedAt?: string;\n    transcription?: string;\n    [key: string]: unknown;\n  };\n  board?: {\n    id: string;\n    name: string;\n    configuration?: {\n      color?: string;\n    };\n    meta?: {\n      icon?: string;\n    };\n  } | null;\n}\n\ninterface FeedbackContentProps {\n  primaryColor?: string;\n  onItemClick: (item: FeedbackItem) => void;\n  subscriberCode?: string;\n  onCreateFeedback?: () => void;\n  onClose: () => void;\n  product: any;\n  activeBoardId?: string;\n  onBoardChange?: (boardId: string) => void;\n}\n\nconst FeedbackItemComponent: React.FC<{\n  item: FeedbackItem;\n  primaryColor: string;\n  onItemClick: (item: FeedbackItem) => void;\n  boards: BoardType[];\n  selectedBoardId: string;\n  subscriberCode?: string;\n  isLast?: boolean;\n}> = ({\n  item,\n  primaryColor: _primaryColor,\n  onItemClick: _onItemClick,\n  boards,\n  selectedBoardId,\n  subscriberCode,\n  isLast,\n}) => {\n  const fbBoard = boards?.find((b: any) => b?.id === item.boardId);\n\n  return (\n    <div\n      className={`flex w-full cursor-pointer items-start gap-3 border-solid border-uo-border-subtle py-4 ${isLast ? \"\" : \"border-0 border-b\"}`}\n      onClick={() => _onItemClick(item)}\n    >\n      <div className=\"flex min-w-0 flex-1 flex-col\">\n        <h4 className=\"m-0 line-clamp-2 text-[14px] font-semibold leading-5 text-uo-text-primary\">\n          {item.title}\n        </h4>\n        {item.text && (\n          <p className=\"m-0 mt-1 line-clamp-2 text-[13px] leading-[19px] text-uo-text-secondary\">\n            {item.text}\n          </p>\n        )}\n        <div className=\"mt-2.5 flex min-w-0 items-center gap-2\">\n          <FeedbackStatusBadge status={item.status} showLabel />\n          <div className=\"flex min-w-0 items-center gap-1.5 text-[12px] leading-4 text-uo-text-tertiary\">\n            <span className=\"truncate\">\n              {item.subscriber?.name || item.subscriber?.email || \"Anonymous\"}\n            </span>\n            {selectedBoardId === \"all\" && fbBoard ? (\n              <>\n                <span aria-hidden=\"true\">·</span>\n                <span\n                  className=\"h-1.5 w-1.5 shrink-0 rounded-full\"\n                  style={{ backgroundColor: fbBoard.configuration?.color || \"#3912e4\" }}\n                />\n                <span className=\"truncate\">{fbBoard.name}</span>\n              </>\n            ) : null}\n          </div>\n        </div>\n      </div>\n      <div className=\"shrink-0\" onClick={(event) => event.stopPropagation()}>\n        <PostVote id={item.id} code={subscriberCode} votesCount={item.feedbackVotesCount || 0} />\n      </div>\n    </div>\n  );\n};\n\nconst FeedbackContentInner: React.FC<FeedbackContentProps> = ({\n  primaryColor = \"#3912e4\",\n  onItemClick,\n  subscriberCode,\n  activeBoardId: propActiveBoardId,\n}) => {\n  const [activeBoardId, setActiveBoardId] = useState<string>(propActiveBoardId || \"all\");\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  const [searchInputValue, setSearchInputValue] = useState(\"\");\n  const [sortBy, setSortBy] = useState<\"newest\" | \"top\" | \"trending\">(\"newest\");\n  const [sortMenuOpen, setSortMenuOpen] = useState(false);\n  const [statusFiltersOpen, setStatusFiltersOpen] = useState(false);\n  const [selectedStatuses, setSelectedStatuses] = useState<string[]>(defaultStatusFilters);\n  const sortMenuRef = React.useRef<HTMLDivElement | null>(null);\n  const statusFiltersRef = React.useRef<HTMLDivElement | null>(null);\n  const { ref, inView } = useInView();\n  const PAGE_SIZE = 10;\n\n  useEffect(() => {\n    if (propActiveBoardId !== undefined) {\n      setActiveBoardId(propActiveBoardId);\n    }\n  }, [propActiveBoardId]);\n\n  // Fetch feedback boards configuration using react-query\n  const {\n    data: boardsResponse,\n    isLoading: boardsLoading,\n    error: boardsError,\n  } = useQuery({\n    queryKey: [\"feedback-boards\", subscriberCode],\n    queryFn: () => fetchFeedbackBoardList(),\n    staleTime: 1000 * 60 * 5, // 5 minutes\n  });\n\n  // Fetch feedback items for the active board\n  const {\n    data,\n    isFetchingNextPage,\n    fetchNextPage,\n    hasNextPage,\n    isLoading: itemsLoading,\n    error: itemsError,\n  } = useInfiniteQuery({\n    queryKey: [\"feedback-items\", activeBoardId, searchQuery, sortBy, selectedStatuses],\n    queryFn: async ({ pageParam = 0 }) => {\n      const response = await fetchFeedbackItems(\n        activeBoardId,\n        PAGE_SIZE,\n        pageParam,\n        searchQuery,\n        sortBy,\n        subscriberCode,\n        selectedStatuses,\n      );\n      return response;\n    },\n    initialPageParam: 0,\n    getNextPageParam: (lastPage, pages) => {\n      if (!lastPage?.data) return undefined;\n      const totalFetched = pages.reduce((acc, page) => acc + (page?.data?.length || 0), 0);\n      return lastPage.data.length === PAGE_SIZE ? totalFetched : undefined;\n    },\n    staleTime: 1000 * 60, // 1 minute\n    enabled: selectedStatuses.length > 0,\n  });\n\n  // Trigger fetch next page when bottom element is in view\n  useEffect(() => {\n    if (inView && hasNextPage && !isFetchingNextPage) {\n      void fetchNextPage();\n    }\n  }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n  useEffect(() => {\n    if (!sortMenuOpen && !statusFiltersOpen) return;\n\n    const handleOutsideClick = (event: MouseEvent) => {\n      const target = event.target as Node;\n      if (sortMenuRef.current?.contains(target) || statusFiltersRef.current?.contains(target)) {\n        return;\n      }\n\n      setSortMenuOpen(false);\n      setStatusFiltersOpen(false);\n    };\n\n    document.addEventListener(\"click\", handleOutsideClick);\n    return () => document.removeEventListener(\"click\", handleOutsideClick);\n  }, [sortMenuOpen, statusFiltersOpen]);\n\n  // Flatten all pages data\n  const allItems = data?.pages.flatMap((page) => page?.data || []) || [];\n  const visibleItems = selectedStatuses.length > 0 ? allItems : [];\n  const boards = boardsResponse?.data || [];\n\n  logger.log(\"boards\", boards);\n\n  const activeBoard = boards.find((board) => board.id === activeBoardId) || boards[0];\n\n  const emptyText =\n    visibleItems.length === 0\n      ? searchQuery.trim()\n        ? `No feedback found for \"${searchQuery}\"`\n        : selectedStatuses.length === 0\n          ? \"No statuses selected\"\n          : activeBoardId === \"all\"\n            ? \"No feedback submitted yet\"\n            : `No feedback in ${activeBoard?.name.toLowerCase()}`\n      : \"\";\n  const emptyDescription =\n    visibleItems.length === 0\n      ? searchQuery.trim()\n        ? \"Try a different search term.\"\n        : selectedStatuses.length === 0\n          ? \"Select at least one status to see feedback.\"\n          : \"Ideas and requests from the team will appear here\"\n      : \"\";\n\n  const activeStatusCount = selectedStatuses.length;\n  const toggleStatus = (status: string) => {\n    setSelectedStatuses((current) =>\n      current.includes(status) ? current.filter((value) => value !== status) : [...current, status],\n    );\n  };\n\n  return (\n    <div className=\"h-full\">\n      <div className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-4 pb-10 pt-3\">\n        {boardsError ? (\n          <div className=\"card-bg card-radius card-border flex flex-col items-center justify-center space-y-6 py-10 text-center\">\n            <h4 className=\"m-0 text-md font-medium text-red-500 dark:text-red-400\">\n              Failed to load feedback data\n            </h4>\n          </div>\n        ) : !boardsLoading && boards && boards.length === 0 ? (\n          <WidgetEmptyState\n            icon={<Lightbulb className=\"h-10 w-10\" />}\n            title=\"Have something to say?\"\n            description=\"Tell us how we could make the product more useful to you.\"\n          />\n        ) : (\n          <>\n            <div className=\"mb-2 mt-2 pl-0.5\">\n              <div className=\"flex items-center gap-1.5\">\n                <label className=\"relative flex h-9 min-w-[118px] flex-[1_1_0] items-center gap-2 rounded-xl bg-neutral-100/70 pl-3 pr-3 text-neutral-500 shadow-[inset_0_0_0_1px_var(--uo-muted)] transition-colors focus-within:bg-white focus-within:text-neutral-900 dark:bg-neutral-800/60 dark:text-neutral-400 dark:focus-within:bg-neutral-900 dark:focus-within:text-neutral-100\">\n                  <Search className=\"h-3.5 w-3.5 shrink-0\" />\n                  <span className=\"sr-only\">Search feedback</span>\n                  <input\n                    type=\"search\"\n                    value={searchInputValue}\n                    onChange={(event) => {\n                      setSearchInputValue(event.target.value);\n                      setSearchQuery(event.target.value);\n                    }}\n                    placeholder=\"Search feedback\"\n                    className=\"min-w-0 flex-1 bg-transparent text-[13px] text-neutral-900 placeholder:text-neutral-400 focus:outline-none dark:text-neutral-100 dark:placeholder:text-neutral-500\"\n                  />\n                </label>\n\n                <div className=\"relative shrink-0\" ref={sortMenuRef}>\n                  <button\n                    type=\"button\"\n                    aria-label={`Sort feedback: ${sortOptions.find((option) => option.value === sortBy)?.label || \"New\"}`}\n                    aria-haspopup=\"menu\"\n                    aria-expanded={sortMenuOpen}\n                    title=\"Sort feedback\"\n                    className=\"relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-xl bg-neutral-100/70 text-neutral-500 shadow-[inset_0_0_0_1px_var(--uo-muted)] transition-colors hover:bg-neutral-100 hover:text-neutral-900 focus:outline-none focus-visible:shadow-[inset_0_0_0_1px_var(--uo-muted)] dark:bg-neutral-800/60 dark:text-neutral-400 dark:hover:bg-neutral-800 dark:hover:text-neutral-100\"\n                    onClick={() => {\n                      setSortMenuOpen((open) => !open);\n                      setStatusFiltersOpen(false);\n                    }}\n                  >\n                    <ArrowDownWideNarrow className=\"h-[15px] w-[15px]\" />\n                  </button>\n                  {sortMenuOpen ? (\n                    <div\n                      role=\"menu\"\n                      aria-label=\"Sort feedback\"\n                      className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-40 rounded-xl border border-neutral-200 bg-white p-2 shadow-[0_16px_40px_-24px_rgba(15,23,42,0.7)] dark:border-neutral-800 dark:bg-neutral-950\"\n                    >\n                      <fieldset className=\"m-0 border-0 p-0\">\n                        <legend className=\"px-2 pb-1.5 text-[10.5px] font-semibold uppercase tracking-[0.06em] text-neutral-400\">\n                          Sort\n                        </legend>\n                        <div className=\"grid gap-0.5\">\n                          {sortOptions.map((option) => {\n                            const checked = sortBy === option.value;\n                            return (\n                              <button\n                                key={option.value}\n                                type=\"button\"\n                                role=\"menuitemradio\"\n                                aria-checked={checked}\n                                className={`flex w-full cursor-pointer items-center justify-between gap-2 rounded-lg px-2 py-1.5 text-start text-[13px] focus:outline-none ${\n                                  checked\n                                    ? \"bg-neutral-100 text-neutral-950 dark:bg-neutral-800 dark:text-neutral-100\"\n                                    : \"text-neutral-600 hover:bg-neutral-100 hover:text-neutral-950 focus:bg-neutral-100 focus:text-neutral-950 dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-neutral-100 dark:focus:bg-neutral-800\"\n                                }`}\n                                onClick={() => {\n                                  setSortBy(option.value);\n                                  setSortMenuOpen(false);\n                                }}\n                              >\n                                <span>{option.label}</span>\n                                {checked ? (\n                                  <Check className=\"h-3.5 w-3.5 text-neutral-950 dark:text-white\" />\n                                ) : null}\n                              </button>\n                            );\n                          })}\n                        </div>\n                      </fieldset>\n                    </div>\n                  ) : null}\n                </div>\n\n                <div className=\"relative shrink-0\" ref={statusFiltersRef}>\n                  <button\n                    type=\"button\"\n                    aria-label={`Status filters · ${activeStatusCount} active`}\n                    aria-haspopup=\"menu\"\n                    aria-expanded={statusFiltersOpen}\n                    title=\"Status filters\"\n                    className=\"relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-full bg-neutral-100/70 text-neutral-500 shadow-[inset_0_0_0_1px_var(--uo-muted)] transition-colors hover:bg-neutral-100 hover:text-neutral-900 focus:outline-none focus-visible:shadow-[inset_0_0_0_1px_var(--uo-muted)] dark:bg-neutral-800/60 dark:text-neutral-400 dark:hover:bg-neutral-800 dark:hover:text-neutral-100\"\n                    onClick={() => {\n                      setStatusFiltersOpen((open) => !open);\n                      setSortMenuOpen(false);\n                    }}\n                  >\n                    <Filter className=\"h-[15px] w-[15px]\" />\n                  </button>\n                  {statusFiltersOpen ? (\n                    <div\n                      role=\"menu\"\n                      aria-label=\"Status filters\"\n                      className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-52 rounded-xl border border-neutral-200 bg-white p-2 shadow-[0_16px_40px_-24px_rgba(15,23,42,0.7)] dark:border-neutral-800 dark:bg-neutral-950\"\n                    >\n                      <fieldset className=\"m-0 border-0 p-0\">\n                        <legend className=\"px-2 pb-1.5 text-[10.5px] font-semibold uppercase tracking-[0.06em] text-neutral-400\">\n                          Status\n                        </legend>\n                        <div className=\"grid gap-0.5\">\n                          {feedbackStatuses.map((status) => {\n                            const checked = selectedStatuses.includes(status.value);\n                            return (\n                              <button\n                                key={status.value}\n                                type=\"button\"\n                                role=\"menuitemcheckbox\"\n                                aria-checked={checked}\n                                className=\"flex w-full cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 text-start text-[13px] text-neutral-600 hover:bg-neutral-100 hover:text-neutral-950 focus:bg-neutral-100 focus:text-neutral-950 focus:outline-none dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-neutral-100 dark:focus:bg-neutral-800\"\n                                onClick={() => toggleStatus(status.value)}\n                              >\n                                <span className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded border border-neutral-300 bg-white text-neutral-950 dark:border-neutral-600 dark:bg-neutral-900 dark:text-white\">\n                                  {checked ? <Check className=\"h-3 w-3\" /> : null}\n                                </span>\n                                <span>{status.label}</span>\n                              </button>\n                            );\n                          })}\n                        </div>\n                      </fieldset>\n                    </div>\n                  ) : null}\n                </div>\n              </div>\n            </div>\n\n            {itemsLoading || boardsLoading ? (\n              <FeedbackContentSkeleton length={6} />\n            ) : (\n              <div className=\"relative flex h-[calc(var(--container-height)-76px)] w-full overflow-hidden text-[#14161a] dark:text-[#f7f7f7]\">\n                <FeedbackBoard\n                  items={visibleItems}\n                  renderItem={(item: FeedbackItem, isLast: boolean) => (\n                    <FeedbackItemComponent\n                      boards={boards}\n                      selectedBoardId={activeBoardId}\n                      item={item}\n                      subscriberCode={subscriberCode}\n                      primaryColor={primaryColor}\n                      onItemClick={onItemClick}\n                      isLast={isLast}\n                    />\n                  )}\n                  isLoading={itemsLoading}\n                  isError={Boolean(itemsError)}\n                  emptyText={emptyText}\n                  emptyDescription={emptyDescription}\n                  emptyIcon={<IconFeedback className=\"h-10 w-10\" size={40} />}\n                  loadingText=\"Loading feedback...\"\n                  errorText=\"Failed to load feedback\"\n                  isFetchingNextPage={isFetchingNextPage}\n                  hasNextPage={hasNextPage}\n                  loadMoreRef={ref}\n                  loadingMoreText=\"Loading more...\"\n                  scrollToLoadMoreText=\"Scroll to load more\"\n                />\n              </div>\n            )}\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst FeedbackContent: React.FC<FeedbackContentProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <FeedbackContentInner {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default FeedbackContent;\n","import { useCallback, useEffect, useState } from \"react\";\n\nconst PREFIX = \"uo-draft-\";\n\nexport function useDraft(key: string) {\n  const storageKey = PREFIX + key;\n\n  const [value, setValue] = useState(() => {\n    try {\n      return sessionStorage.getItem(storageKey) || \"\";\n    } catch {\n      return \"\";\n    }\n  });\n\n  useEffect(() => {\n    try {\n      if (value) {\n        sessionStorage.setItem(storageKey, value);\n      } else {\n        sessionStorage.removeItem(storageKey);\n      }\n    } catch {\n      // sessionStorage unavailable\n    }\n  }, [value, storageKey]);\n\n  const clearDraft = useCallback(() => {\n    setValue(\"\");\n    try {\n      sessionStorage.removeItem(storageKey);\n    } catch {\n      // sessionStorage unavailable\n    }\n  }, [storageKey]);\n\n  return [value, setValue, clearDraft] as const;\n}\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { Button } from \"@userorbit/ui/src/ui/button\";\nimport { formatDate } from \"../../lib/dates\";\nimport React, { useState } from \"react\";\nimport { useDraft } from \"../../hooks/use-draft\";\nimport { Logger } from \"../../lib/logger\";\nimport { createFeedbackComment, fetchFeedbackComments } from \"./api-utils\";\n\nconst logger = Logger.getInstance();\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  subscriber?: {\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  };\n  parentId?: string;\n  replies?: Comment[];\n}\n\ninterface FeedbackCommentSectionProps {\n  feedbackId: string;\n  subscriberCode?: string;\n  initialComments?: Comment[];\n}\n\nconst Avatar: React.FC<{ subscriber?: Comment[\"subscriber\"]; className?: string }> = ({\n  subscriber,\n  className = \"w-7 h-7\",\n}) => {\n  const getInitials = () => {\n    if (subscriber?.name) {\n      return subscriber.name.slice(0, 2).toUpperCase();\n    }\n    if (subscriber?.email) {\n      return subscriber.email.slice(0, 2).toUpperCase();\n    }\n    return \"?\";\n  };\n\n  return (\n    <div\n      className={`${className} flex flex-shrink-0 items-center justify-center rounded-full bg-neutral-100 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.08)] dark:bg-neutral-800 dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)]`}\n    >\n      {subscriber?.avatarUrl ? (\n        <img\n          src={subscriber.avatarUrl}\n          alt={subscriber.name || \"User\"}\n          className={`${className} rounded-full object-cover`}\n        />\n      ) : (\n        <span className=\"text-[12px] font-semibold text-gray-600 dark:text-neutral-300\">\n          {getInitials()}\n        </span>\n      )}\n    </div>\n  );\n};\n\nconst getSubscriberDisplayName = (subscriber?: Comment[\"subscriber\"]) => {\n  return subscriber?.name?.trim() || subscriber?.email?.trim() || \"Anonymous\";\n};\n\nconst getReplyPlaceholderName = (subscriber?: Comment[\"subscriber\"]) => {\n  return subscriber?.name?.trim().split(/\\s+/)[0] || \"Anonymous\";\n};\n\nconst HTML_TAG_PATTERN = /<\\/?[a-z][\\s\\S]*>/i;\nconst DANGEROUS_TAG_PATTERN =\n  /<\\s*(script|iframe|object|embed|form|input|textarea|button|applet|meta|link|base|frameset|frame)[^>]*>/gi;\nconst EVENT_HANDLER_PATTERN = /\\s+on\\w+\\s*=\\s*[\"'][^\"']*[\"']/gi;\nconst JAVASCRIPT_URL_PATTERN = /\\s+(href|src|action)\\s*=\\s*[\"']\\s*javascript\\s*:/gi;\n\nconst looksLikeHtml = (value: string) => HTML_TAG_PATTERN.test(value);\nconst sanitizeCommentHtml = (value: string) =>\n  value\n    .replace(DANGEROUS_TAG_PATTERN, \"\")\n    .replace(\n      /<\\s*\\/\\s*(script|iframe|object|embed|form|input|textarea|button|applet|meta|link|base|frameset|frame)\\s*>/gi,\n      \"\",\n    )\n    .replace(EVENT_HANDLER_PATTERN, \"\")\n    .replace(JAVASCRIPT_URL_PATTERN, \" \");\n\ninterface CommentItemProps {\n  comment: Comment;\n  isReply?: boolean;\n  replyingTo: string | null;\n  replyText: string;\n  setReplyingTo: (id: string | null) => void;\n  setReplyText: (text: string) => void;\n  handleReply: () => void;\n  handleReplyKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n  replyMutation: any;\n}\n\nconst CommentComposer: React.FC<{\n  value: string;\n  onChange: (value: string) => void;\n  onSubmit: () => void;\n  onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n  placeholder: string;\n  submitLabel: string;\n  isPending: boolean;\n  onCancel?: () => void;\n}> = ({ value, onChange, onSubmit, onKeyDown, placeholder, submitLabel, isPending, onCancel }) => {\n  const [isFocused, setIsFocused] = useState(false);\n  const hasValue = value.trim().length > 0;\n  const isExpanded = isFocused || hasValue || isPending;\n\n  return (\n    <div className=\"rounded-xl bg-neutral-50 px-3 pl-4 pb-3 pt-2.5 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.08)] transition-[background-color,box-shadow] duration-200 ease-out focus-within:bg-white focus-within:shadow-[inset_0_0_0_1px_rgba(0,0,0,0.18)] dark:bg-white/[0.04] dark:focus-within:bg-white/[0.06] dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)] dark:focus-within:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.22)]\">\n      <textarea\n        rows={1}\n        placeholder={placeholder}\n        value={value}\n        onChange={(e) => onChange(e.target.value)}\n        onKeyDown={onKeyDown}\n        onFocus={() => setIsFocused(true)}\n        onBlur={() => setIsFocused(false)}\n        className={`block w-full resize-none border-0 bg-transparent p-0 font-sans text-[13.5px] leading-[1.55] tracking-[-0.005em] text-gray-900 outline-none transition-[min-height] duration-300 placeholder:text-gray-400 dark:text-white dark:placeholder:text-neutral-500 ${\n          isExpanded ? \"min-h-16\" : \"min-h-10\"\n        }`}\n      />\n      <div\n        className={`grid transition-[grid-template-rows,opacity,transform] duration-300 ease-out ${\n          isExpanded\n            ? \"grid-rows-[1fr] translate-y-0 opacity-100\"\n            : \"grid-rows-[0fr] -translate-y-1 opacity-0\"\n        }`}\n      >\n        <div className=\"overflow-hidden\">\n          <div className=\"mt-1.5 flex items-center justify-end gap-2\">\n            {onCancel && (\n              <button\n                type=\"button\"\n                className=\"inline-flex h-7 items-center rounded-lg px-3 text-[12.5px] font-medium tracking-[-0.005em] text-gray-500 transition-colors hover:text-gray-900 dark:text-neutral-400 dark:hover:text-white\"\n                onClick={onCancel}\n              >\n                Cancel\n              </button>\n            )}\n            <Button\n              type=\"button\"\n              className={`inline-flex h-7 min-h-7 items-center rounded-lg px-3 text-[12.5px] font-medium tracking-[-0.005em] ${\n                hasValue\n                  ? \"bg-neutral-950 text-white hover:bg-neutral-800 dark:bg-white dark:text-black dark:hover:bg-neutral-200\"\n                  : \"bg-neutral-200 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-500\"\n              }`}\n              onClick={onSubmit}\n              disabled={!hasValue || isPending}\n              loading={isPending}\n            >\n              {submitLabel}\n            </Button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst CommentItem: React.FC<CommentItemProps> = ({\n  comment,\n  isReply = false,\n  replyingTo,\n  replyText,\n  setReplyingTo,\n  setReplyText,\n  handleReply,\n  handleReplyKeyDown,\n  replyMutation,\n}) => {\n  return (\n    <li className={isReply ? \"relative list-none\" : \"relative list-none py-5 last:[&>hr]:hidden\"}>\n      <article className=\"flex items-start gap-3\">\n        <Avatar subscriber={comment.subscriber} className=\"h-[30px] w-[30px]\" />\n        <div className=\"min-w-0 flex-1\">\n          <div className=\"flex flex-wrap items-baseline gap-x-1.5 gap-y-0.5 text-[12px] tracking-[-0.005em] text-gray-500 dark:text-neutral-400\">\n            <span className=\"text-[13.5px] font-semibold tracking-[-0.005em] text-gray-900 dark:text-white\">\n              {getSubscriberDisplayName(comment.subscriber)}\n            </span>\n            {comment.createdAt && (\n              <>\n                <span className=\"text-gray-300 dark:text-neutral-600\">&middot;</span>\n                <span>{formatDate(new Date(comment.createdAt), \"short\")}</span>\n              </>\n            )}\n          </div>\n          {looksLikeHtml(comment.text) ? (\n            <div\n              className=\"mt-1 text-pretty text-[14px] leading-[1.55] tracking-[-0.011em] text-gray-700 [&_a]:underline [&_code]:rounded [&_code]:bg-neutral-100 [&_code]:px-1 [&_h1]:mb-1 [&_h1]:mt-2 [&_h1]:text-[17px] [&_h1]:font-semibold [&_h2]:mb-1 [&_h2]:mt-2 [&_h2]:text-[15px] [&_h2]:font-semibold [&_li]:my-0.5 [&_ol]:my-1 [&_ol]:list-decimal [&_ol]:pl-5 [&_p]:my-1 [&_ul]:my-1 [&_ul]:list-disc [&_ul]:pl-5 dark:text-neutral-300 dark:[&_code]:bg-neutral-800\"\n              dangerouslySetInnerHTML={{ __html: sanitizeCommentHtml(comment.text) }}\n            />\n          ) : (\n            <p className=\"mt-1 whitespace-pre-wrap text-pretty text-[14px] leading-[1.55] tracking-[-0.011em] text-gray-700 dark:text-neutral-300\">\n              {comment.text}\n            </p>\n          )}\n          {!isReply && (\n            <div className=\"mt-2 flex items-center gap-3\">\n              <button\n                type=\"button\"\n                className=\"text-[12px] font-medium tracking-[-0.005em] text-gray-500 transition-colors hover:text-gray-900 dark:text-neutral-400 dark:hover:text-white\"\n                onClick={() => setReplyingTo(replyingTo === comment.id ? null : comment.id)}\n              >\n                {replyingTo === comment.id ? \"Cancel\" : \"Reply\"}\n              </button>\n              {comment.replies && comment.replies.length > 0 && (\n                <span className=\"text-[12px] font-medium tracking-[-0.005em] text-gray-400 dark:text-neutral-500\">\n                  {comment.replies.length} Replies\n                </span>\n              )}\n            </div>\n          )}\n        </div>\n      </article>\n      {replyingTo === comment.id && (\n        <div\n          aria-hidden=\"false\"\n          className=\"grid grid-rows-[1fr] transition-[grid-template-rows] duration-300\"\n          style={{ transitionTimingFunction: \"cubic-bezier(0.32, 0.72, 0, 1)\" }}\n        >\n          <div className=\"overflow-hidden\">\n            <div className=\"mt-4 translate-y-0 opacity-100 transition-[opacity,transform] duration-300\">\n              <CommentComposer\n                value={replyText}\n                onChange={setReplyText}\n                onSubmit={handleReply}\n                onKeyDown={handleReplyKeyDown}\n                placeholder={`Reply to ${getReplyPlaceholderName(comment.subscriber)}...`}\n                submitLabel=\"Reply\"\n                isPending={replyMutation.isPending}\n                onCancel={() => {\n                  setReplyingTo(null);\n                  setReplyText(\"\");\n                }}\n              />\n            </div>\n          </div>\n        </div>\n      )}\n      {comment.replies && comment.replies.length > 0 && (\n        <ul className=\"relative m-0 ml-[46px] mt-4 flex list-none flex-col gap-4 p-0 before:absolute before:-left-[23px] before:bottom-2 before:top-0 before:w-px before:bg-neutral-200 dark:before:bg-neutral-800\">\n          {comment.replies.map((reply) => (\n            <CommentItem\n              key={reply.id}\n              comment={reply}\n              isReply={true}\n              replyingTo={replyingTo}\n              replyText={replyText}\n              setReplyingTo={setReplyingTo}\n              setReplyText={setReplyText}\n              handleReply={handleReply}\n              handleReplyKeyDown={handleReplyKeyDown}\n              replyMutation={replyMutation}\n            />\n          ))}\n        </ul>\n      )}\n      {!isReply && (\n        <hr className=\"absolute bottom-0 left-[46px] right-0 m-0 border-0 border-t border-dashed border-neutral-200 dark:border-neutral-800\" />\n      )}\n    </li>\n  );\n};\n\nconst FeedbackCommentSection: React.FC<FeedbackCommentSectionProps> = ({\n  feedbackId,\n  subscriberCode,\n  initialComments = [],\n}) => {\n  const queryClient = useQueryClient();\n  const [replyingTo, setReplyingTo] = useState<string | null>(null);\n  const [replyText, setReplyText] = useState<string>(\"\");\n  const [mainCommentText, setMainCommentText, clearCommentDraft] = useDraft(\n    `comment-${feedbackId}`,\n  );\n\n  // Use React Query to fetch comments\n  const {\n    data: comments = initialComments,\n    isLoading,\n    error,\n  } = useQuery({\n    queryKey: [\"feedback-comments\", feedbackId],\n    queryFn: async () => {\n      const response = await fetchFeedbackComments(feedbackId, subscriberCode);\n      return response?.data || [];\n    },\n    enabled: !!feedbackId && initialComments.length === 0, // Only fetch if no initial comments\n    staleTime: 1000 * 30, // 30 seconds\n  });\n\n  logger.log(\"feedback comments\", comments, error);\n\n  // Mutation for creating main comments\n  const mainCommentMutation = useMutation({\n    mutationFn: async ({ text }: { text: string }) => {\n      return createFeedbackComment(feedbackId, text, subscriberCode);\n    },\n    onSuccess: () => {\n      void queryClient.invalidateQueries({ queryKey: [\"feedback-comments\", feedbackId] });\n      clearCommentDraft();\n    },\n    onError: (error) => {\n      console.error(\"Failed to add comment:\", error);\n    },\n  });\n\n  // Mutation for creating replies\n  const replyMutation = useMutation({\n    mutationFn: async ({ commentId, text }: { commentId: string; text: string }) => {\n      return createFeedbackComment(feedbackId, text, subscriberCode, commentId);\n    },\n    onSuccess: () => {\n      void queryClient.invalidateQueries({ queryKey: [\"feedback-comments\", feedbackId] });\n      setReplyText(\"\");\n      setReplyingTo(null);\n    },\n    onError: (error) => {\n      logger.error(\"Failed to add reply:\", error);\n    },\n  });\n\n  const handleMainComment = () => {\n    if (!mainCommentText.trim()) return;\n    mainCommentMutation.mutate({ text: mainCommentText.trim() });\n  };\n\n  const handleReply = () => {\n    if (!replyText.trim() || !replyingTo) return;\n    replyMutation.mutate({ commentId: replyingTo, text: replyText.trim() });\n  };\n\n  const handleMainCommentKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n    if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      handleMainComment();\n    }\n  };\n\n  const handleReplyKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n    if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      handleReply();\n    }\n  };\n\n  const commentsCount = comments.reduce(\n    (total: number, comment: Comment) => total + 1 + (comment.replies?.length || 0),\n    0,\n  );\n\n  return (\n    <section className=\"mt-4 border-t border-dashed border-neutral-200 pb-4 pt-7 dark:border-neutral-800\">\n      <header className=\"flex items-center justify-between gap-2\">\n        <p className=\"flex items-center gap-1.5 text-[10.5px] font-semibold uppercase tracking-[0.08em] text-gray-900 dark:text-white\">\n          Comments\n          <span className=\"text-gray-300 dark:text-neutral-600\">&middot;</span>\n          <span className=\"font-medium normal-case tracking-[-0.005em] text-gray-500 dark:text-neutral-400\">\n            {commentsCount}\n          </span>\n        </p>\n      </header>\n\n      <div className=\"mt-4\">\n        <CommentComposer\n          value={mainCommentText}\n          onChange={setMainCommentText}\n          onSubmit={handleMainComment}\n          onKeyDown={handleMainCommentKeyDown}\n          placeholder=\"Add a comment...\"\n          submitLabel=\"Comment\"\n          isPending={mainCommentMutation.isPending}\n        />\n      </div>\n\n      <ul className=\"m-0 mt-2 list-none p-0\">\n        {isLoading ? (\n          <li className=\"py-8 text-center text-gray-500 dark:text-neutral-400\">\n            <div className=\"mx-auto mb-2 h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-gray-500 dark:border-neutral-600 dark:border-t-neutral-400\" />\n            Loading comments...\n          </li>\n        ) : error ? (\n          <li className=\"py-8 text-center text-red-500 dark:text-red-400\">\n            Failed to load comments. Please try again.\n          </li>\n        ) : comments.length === 0 ? (\n          <li className=\"py-12 text-center text-[15px] font-medium tracking-[-0.01em] text-gray-500 dark:text-neutral-400\">\n            No comments yet. Be the first to comment!\n          </li>\n        ) : (\n          comments.map((comment: Comment) => (\n            <CommentItem\n              key={comment.id}\n              comment={comment}\n              replyingTo={replyingTo}\n              replyText={replyText}\n              setReplyingTo={setReplyingTo}\n              setReplyText={setReplyText}\n              handleReply={handleReply}\n              handleReplyKeyDown={handleReplyKeyDown}\n              replyMutation={replyMutation}\n            />\n          ))\n        )}\n      </ul>\n    </section>\n  );\n};\n\nexport default FeedbackCommentSection;\n",".replayer-wrapper {\n  position: relative;\n}\n.replayer-mouse {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  transition: left 0.05s linear, top 0.05s linear;\n  background-size: contain;\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-image: url('data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDUwIDUwIiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPkRlc2lnbl90bnA8L3RpdGxlPjxwYXRoIGQ9Ik00OC43MSw0Mi45MUwzNC4wOCwyOC4yOSw0NC4zMywxOEExLDEsMCwwLDAsNDQsMTYuMzlMMi4zNSwxLjA2QTEsMSwwLDAsMCwxLjA2LDIuMzVMMTYuMzksNDRhMSwxLDAsMCwwLDEuNjUuMzZMMjguMjksMzQuMDgsNDIuOTEsNDguNzFhMSwxLDAsMCwwLDEuNDEsMGw0LjM4LTQuMzhBMSwxLDAsMCwwLDQ4LjcxLDQyLjkxWm0tNS4wOSwzLjY3TDI5LDMyYTEsMSwwLDAsMC0xLjQxLDBsLTkuODUsOS44NUwzLjY5LDMuNjlsMzguMTIsMTRMMzIsMjcuNThBMSwxLDAsMCwwLDMyLDI5TDQ2LjU5LDQzLjYyWiI+PC9wYXRoPjwvc3ZnPg==');\n  border-color: transparent;  /* otherwise we transition from black when .touch-device class is added */\n}\n.replayer-mouse::after {\n  content: '';\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: rgb(73, 80, 246);\n  border-radius: 100%;\n  transform: translate(-50%, -50%);\n  opacity: 0.3;\n}\n.replayer-mouse.active::after {\n  animation: click 0.2s ease-in-out 1;\n}\n.replayer-mouse.touch-device {\n  background-image: none;  /* there's no passive cursor on touch-only screens */\n  width: 70px;\n  height: 70px;\n  border-width: 4px;\n  border-style: solid;\n  border-radius: 100%;\n  margin-left: -37px;\n  margin-top: -37px;\n  border-color: rgba(73, 80, 246, 0);\n  transition: left 0s linear, top 0s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device.touch-active {\n  border-color: rgba(73, 80, 246, 1);\n  transition: left 0.25s linear, top 0.25s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device::after {\n  opacity: 0;  /* there's no passive cursor on touch-only screens */\n}\n.replayer-mouse.touch-device.active::after {\n  animation: touch-click 0.2s ease-in-out 1;\n}\n.replayer-mouse-tail {\n  position: absolute;\n  pointer-events: none;\n}\n\n@keyframes click {\n  0% {\n    opacity: 0.3;\n    width: 20px;\n    height: 20px;\n  }\n  50% {\n    opacity: 0.5;\n    width: 10px;\n    height: 10px;\n  }\n}\n\n@keyframes touch-click {\n  0% {\n    opacity: 0;\n    width: 20px;\n    height: 20px;\n  }\n  50% {\n    opacity: 0.5;\n    width: 10px;\n    height: 10px;\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 _a;\nvar __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$3 = /* @__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$3 || {});\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) ;\nfunction isElement(n2) {\n  return n2.nodeType === n2.ELEMENT_NODE;\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    var _a2;\n    if (!n2) return -1;\n    const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.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(node2) {\n    return this.nodeMetaMap.has(node2);\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 toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction isNodeMetaEqual(a2, b) {\n  if (!a2 || !b || a2.type !== b.type) return false;\n  if (a2.type === NodeType$3.Document)\n    return a2.compatMode === b.compatMode;\n  else if (a2.type === NodeType$3.DocumentType)\n    return a2.name === b.name && a2.publicId === b.publicId && a2.systemId === b.systemId;\n  else if (a2.type === NodeType$3.Comment || a2.type === NodeType$3.Text || a2.type === NodeType$3.CDATA)\n    return a2.textContent === b.textContent;\n  else if (a2.type === NodeType$3.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 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 == null ? void 0 : match[1]) ?? null;\n}\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, \"g\");\nconst mediaSelectorPlugin = {\n  postcssPlugin: \"postcss-custom-selectors\",\n  prepare() {\n    return {\n      postcssPlugin: \"postcss-custom-selectors\",\n      AtRule: function(atrule) {\n        if (atrule.params.match(MEDIA_SELECTOR_GLOBAL)) {\n          atrule.params = atrule.params.replace(MEDIA_SELECTOR_GLOBAL, \"$1-$2\");\n        }\n      }\n    };\n  }\n};\nconst pseudoClassPlugin = {\n  postcssPlugin: \"postcss-hover-classes\",\n  prepare: function() {\n    const fixed = [];\n    return {\n      Rule: function(rule2) {\n        if (fixed.indexOf(rule2) !== -1) {\n          return;\n        }\n        fixed.push(rule2);\n        rule2.selectors.forEach(function(selector) {\n          if (selector.includes(\":hover\")) {\n            rule2.selector += \",\\n\" + selector.replace(/:hover/g, \".\\\\:hover\");\n          }\n        });\n      }\n    };\n  }\n};\nfunction getDefaultExportFromCjs$1(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nfunction getAugmentedNamespace$1(n2) {\n  if (n2.__esModule) return n2;\n  var f2 = n2.default;\n  if (typeof f2 == \"function\") {\n    var a2 = function a22() {\n      if (this instanceof a22) {\n        return Reflect.construct(f2, arguments, this.constructor);\n      }\n      return f2.apply(this, arguments);\n    };\n    a2.prototype = f2.prototype;\n  } else a2 = {};\n  Object.defineProperty(a2, \"__esModule\", { value: true });\n  Object.keys(n2).forEach(function(k) {\n    var d = Object.getOwnPropertyDescriptor(n2, k);\n    Object.defineProperty(a2, k, d.get ? d : {\n      enumerable: true,\n      get: function() {\n        return n2[k];\n      }\n    });\n  });\n  return a2;\n}\nvar picocolors_browser$1 = { exports: {} };\nvar hasRequiredPicocolors_browser$1;\nfunction requirePicocolors_browser$1() {\n  if (hasRequiredPicocolors_browser$1) return picocolors_browser$1.exports;\n  hasRequiredPicocolors_browser$1 = 1;\n  var x = String;\n  var create = function() {\n    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 };\n  };\n  picocolors_browser$1.exports = create();\n  picocolors_browser$1.exports.createColors = create;\n  return picocolors_browser$1.exports;\n}\nconst __viteBrowserExternal$2 = {};\nconst __viteBrowserExternal$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  default: __viteBrowserExternal$2\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$2$1 = /* @__PURE__ */ getAugmentedNamespace$1(__viteBrowserExternal$1$1);\nvar cssSyntaxError$1;\nvar hasRequiredCssSyntaxError$1;\nfunction requireCssSyntaxError$1() {\n  if (hasRequiredCssSyntaxError$1) return cssSyntaxError$1;\n  hasRequiredCssSyntaxError$1 = 1;\n  let pico = /* @__PURE__ */ requirePicocolors_browser$1();\n  let terminalHighlight = require$$2$1;\n  class CssSyntaxError extends Error {\n    constructor(message, line, column, source, file, plugin) {\n      super(message);\n      this.name = \"CssSyntaxError\";\n      this.reason = message;\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      this.setMessage();\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, CssSyntaxError);\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    showSourceCode(color) {\n      if (!this.source) return \"\";\n      let css = this.source;\n      if (color == null) color = pico.isColorSupported;\n      if (terminalHighlight) {\n        if (color) css = terminalHighlight(css);\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      let mark, aside;\n      if (color) {\n        let { bold, gray, red } = pico.createColors(true);\n        mark = (text) => bold(red(text));\n        aside = (text) => gray(text);\n      } else {\n        mark = aside = (str) => str;\n      }\n      return lines.slice(start, end).map((line, index2) => {\n        let number = start + 1 + index2;\n        let gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n        if (number === this.line) {\n          let spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, this.column - 1).replace(/[^\\t]/g, \" \");\n          return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n        }\n        return \" \" + aside(gutter) + line;\n      }).join(\"\\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  cssSyntaxError$1 = CssSyntaxError;\n  CssSyntaxError.default = CssSyntaxError;\n  return cssSyntaxError$1;\n}\nvar symbols$1 = {};\nvar hasRequiredSymbols$1;\nfunction requireSymbols$1() {\n  if (hasRequiredSymbols$1) return symbols$1;\n  hasRequiredSymbols$1 = 1;\n  symbols$1.isClean = Symbol(\"isClean\");\n  symbols$1.my = Symbol(\"my\");\n  return symbols$1;\n}\nvar stringifier$1;\nvar hasRequiredStringifier$1;\nfunction requireStringifier$1() {\n  if (hasRequiredStringifier$1) return stringifier$1;\n  hasRequiredStringifier$1 = 1;\n  const 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  function capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n  }\n  class Stringifier {\n    constructor(builder) {\n      this.builder = builder;\n    }\n    atrule(node2, semicolon) {\n      let name = \"@\" + node2.name;\n      let params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n      if (typeof node2.raws.afterName !== \"undefined\") {\n        name += node2.raws.afterName;\n      } else if (params) {\n        name += \" \";\n      }\n      if (node2.nodes) {\n        this.block(node2, name + params);\n      } else {\n        let end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n        this.builder(name + params + end, node2);\n      }\n    }\n    beforeAfter(node2, detect) {\n      let value;\n      if (node2.type === \"decl\") {\n        value = this.raw(node2, null, \"beforeDecl\");\n      } else if (node2.type === \"comment\") {\n        value = this.raw(node2, null, \"beforeComment\");\n      } else if (detect === \"before\") {\n        value = this.raw(node2, null, \"beforeRule\");\n      } else {\n        value = this.raw(node2, null, \"beforeClose\");\n      }\n      let buf = node2.parent;\n      let depth = 0;\n      while (buf && buf.type !== \"root\") {\n        depth += 1;\n        buf = buf.parent;\n      }\n      if (value.includes(\"\\n\")) {\n        let indent = this.raw(node2, null, \"indent\");\n        if (indent.length) {\n          for (let step = 0; step < depth; step++) value += indent;\n        }\n      }\n      return value;\n    }\n    block(node2, start) {\n      let between = this.raw(node2, \"between\", \"beforeOpen\");\n      this.builder(start + between + \"{\", node2, \"start\");\n      let after;\n      if (node2.nodes && node2.nodes.length) {\n        this.body(node2);\n        after = this.raw(node2, \"after\");\n      } else {\n        after = this.raw(node2, \"after\", \"emptyBody\");\n      }\n      if (after) this.builder(after);\n      this.builder(\"}\", node2, \"end\");\n    }\n    body(node2) {\n      let last = node2.nodes.length - 1;\n      while (last > 0) {\n        if (node2.nodes[last].type !== \"comment\") break;\n        last -= 1;\n      }\n      let semicolon = this.raw(node2, \"semicolon\");\n      for (let i2 = 0; i2 < node2.nodes.length; i2++) {\n        let child = node2.nodes[i2];\n        let before = this.raw(child, \"before\");\n        if (before) this.builder(before);\n        this.stringify(child, last !== i2 || semicolon);\n      }\n    }\n    comment(node2) {\n      let left = this.raw(node2, \"left\", \"commentLeft\");\n      let right = this.raw(node2, \"right\", \"commentRight\");\n      this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n    }\n    decl(node2, semicolon) {\n      let between = this.raw(node2, \"between\", \"colon\");\n      let string = node2.prop + between + this.rawValue(node2, \"value\");\n      if (node2.important) {\n        string += node2.raws.important || \" !important\";\n      }\n      if (semicolon) string += \";\";\n      this.builder(string, node2);\n    }\n    document(node2) {\n      this.body(node2);\n    }\n    raw(node2, own, detect) {\n      let value;\n      if (!detect) detect = own;\n      if (own) {\n        value = node2.raws[own];\n        if (typeof value !== \"undefined\") return value;\n      }\n      let parent = node2.parent;\n      if (detect === \"before\") {\n        if (!parent || parent.type === \"root\" && parent.first === node2) {\n          return \"\";\n        }\n        if (parent && parent.type === \"document\") {\n          return \"\";\n        }\n      }\n      if (!parent) return DEFAULT_RAW[detect];\n      let root2 = node2.root();\n      if (!root2.rawCache) root2.rawCache = {};\n      if (typeof root2.rawCache[detect] !== \"undefined\") {\n        return root2.rawCache[detect];\n      }\n      if (detect === \"before\" || detect === \"after\") {\n        return this.beforeAfter(node2, detect);\n      } else {\n        let method = \"raw\" + capitalize(detect);\n        if (this[method]) {\n          value = this[method](root2, node2);\n        } else {\n          root2.walk((i2) => {\n            value = i2.raws[own];\n            if (typeof value !== \"undefined\") return false;\n          });\n        }\n      }\n      if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n      root2.rawCache[detect] = value;\n      return value;\n    }\n    rawBeforeClose(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length > 0) {\n          if (typeof i2.raws.after !== \"undefined\") {\n            value = i2.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    rawBeforeComment(root2, node2) {\n      let value;\n      root2.walkComments((i2) => {\n        if (typeof i2.raws.before !== \"undefined\") {\n          value = i2.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(node2, null, \"beforeDecl\");\n      } else if (value) {\n        value = value.replace(/\\S/g, \"\");\n      }\n      return value;\n    }\n    rawBeforeDecl(root2, node2) {\n      let value;\n      root2.walkDecls((i2) => {\n        if (typeof i2.raws.before !== \"undefined\") {\n          value = i2.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(node2, null, \"beforeRule\");\n      } else if (value) {\n        value = value.replace(/\\S/g, \"\");\n      }\n      return value;\n    }\n    rawBeforeOpen(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.type !== \"decl\") {\n          value = i2.raws.between;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawBeforeRule(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n          if (typeof i2.raws.before !== \"undefined\") {\n            value = i2.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    rawColon(root2) {\n      let value;\n      root2.walkDecls((i2) => {\n        if (typeof i2.raws.between !== \"undefined\") {\n          value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n          return false;\n        }\n      });\n      return value;\n    }\n    rawEmptyBody(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length === 0) {\n          value = i2.raws.after;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawIndent(root2) {\n      if (root2.raws.indent) return root2.raws.indent;\n      let value;\n      root2.walk((i2) => {\n        let p = i2.parent;\n        if (p && p !== root2 && p.parent && p.parent === root2) {\n          if (typeof i2.raws.before !== \"undefined\") {\n            let parts = i2.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    rawSemicolon(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n          value = i2.raws.semicolon;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawValue(node2, prop) {\n      let value = node2[prop];\n      let raw = node2.raws[prop];\n      if (raw && raw.value === value) {\n        return raw.raw;\n      }\n      return value;\n    }\n    root(node2) {\n      this.body(node2);\n      if (node2.raws.after) this.builder(node2.raws.after);\n    }\n    rule(node2) {\n      this.block(node2, this.rawValue(node2, \"selector\"));\n      if (node2.raws.ownSemicolon) {\n        this.builder(node2.raws.ownSemicolon, node2, \"end\");\n      }\n    }\n    stringify(node2, semicolon) {\n      if (!this[node2.type]) {\n        throw new Error(\n          \"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\"\n        );\n      }\n      this[node2.type](node2, semicolon);\n    }\n  }\n  stringifier$1 = Stringifier;\n  Stringifier.default = Stringifier;\n  return stringifier$1;\n}\nvar stringify_1$1;\nvar hasRequiredStringify$1;\nfunction requireStringify$1() {\n  if (hasRequiredStringify$1) return stringify_1$1;\n  hasRequiredStringify$1 = 1;\n  let Stringifier = requireStringifier$1();\n  function stringify(node2, builder) {\n    let str = new Stringifier(builder);\n    str.stringify(node2);\n  }\n  stringify_1$1 = stringify;\n  stringify.default = stringify;\n  return stringify_1$1;\n}\nvar node$1;\nvar hasRequiredNode$1;\nfunction requireNode$1() {\n  if (hasRequiredNode$1) return node$1;\n  hasRequiredNode$1 = 1;\n  let { isClean, my } = requireSymbols$1();\n  let CssSyntaxError = requireCssSyntaxError$1();\n  let Stringifier = requireStringifier$1();\n  let stringify = requireStringify$1();\n  function cloneNode(obj, parent) {\n    let cloned = new obj.constructor();\n    for (let i2 in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n        continue;\n      }\n      if (i2 === \"proxyCache\") continue;\n      let value = obj[i2];\n      let type = typeof value;\n      if (i2 === \"parent\" && type === \"object\") {\n        if (parent) cloned[i2] = parent;\n      } else if (i2 === \"source\") {\n        cloned[i2] = value;\n      } else if (Array.isArray(value)) {\n        cloned[i2] = value.map((j) => cloneNode(j, cloned));\n      } else {\n        if (type === \"object\" && value !== null) value = cloneNode(value);\n        cloned[i2] = value;\n      }\n    }\n    return cloned;\n  }\n  class Node2 {\n    constructor(defaults = {}) {\n      this.raws = {};\n      this[isClean] = false;\n      this[my] = true;\n      for (let name in defaults) {\n        if (name === \"nodes\") {\n          this.nodes = [];\n          for (let node2 of defaults[name]) {\n            if (typeof node2.clone === \"function\") {\n              this.append(node2.clone());\n            } else {\n              this.append(node2);\n            }\n          }\n        } else {\n          this[name] = defaults[name];\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 s2 = this.source;\n        error.stack = error.stack.replace(\n          /\\n\\s{4}at /,\n          `$&${s2.input.from}:${s2.start.line}:${s2.start.column}$&`\n        );\n      }\n      return error;\n    }\n    after(add) {\n      this.parent.insertAfter(this, add);\n      return this;\n    }\n    assign(overrides = {}) {\n      for (let name in overrides) {\n        this[name] = overrides[name];\n      }\n      return this;\n    }\n    before(add) {\n      this.parent.insertBefore(this, add);\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      delete this.raws.before;\n      delete this.raws.after;\n      if (!keepBetween) delete this.raws.between;\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    cloneAfter(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertAfter(this, cloned);\n      return cloned;\n    }\n    cloneBefore(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertBefore(this, cloned);\n      return cloned;\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    getProxyProcessor() {\n      return {\n        get(node2, prop) {\n          if (prop === \"proxyOf\") {\n            return node2;\n          } else if (prop === \"root\") {\n            return () => node2.root().toProxy();\n          } else {\n            return node2[prop];\n          }\n        },\n        set(node2, prop, value) {\n          if (node2[prop] === value) return true;\n          node2[prop] = value;\n          if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */\n          prop === \"text\") {\n            node2.markDirty();\n          }\n          return true;\n        }\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    next() {\n      if (!this.parent) return void 0;\n      let index2 = this.parent.index(this);\n      return this.parent.nodes[index2 + 1];\n    }\n    positionBy(opts, stringRepresentation) {\n      let pos = this.source.start;\n      if (opts.index) {\n        pos = this.positionInside(opts.index, stringRepresentation);\n      } else if (opts.word) {\n        stringRepresentation = this.toString();\n        let index2 = stringRepresentation.indexOf(opts.word);\n        if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n      }\n      return pos;\n    }\n    positionInside(index2, stringRepresentation) {\n      let string = stringRepresentation || this.toString();\n      let column = this.source.start.column;\n      let line = this.source.start.line;\n      for (let i2 = 0; i2 < index2; i2++) {\n        if (string[i2] === \"\\n\") {\n          column = 1;\n          line += 1;\n        } else {\n          column += 1;\n        }\n      }\n      return { column, line };\n    }\n    prev() {\n      if (!this.parent) return void 0;\n      let index2 = this.parent.index(this);\n      return this.parent.nodes[index2 - 1];\n    }\n    rangeBy(opts) {\n      let start = {\n        column: this.source.start.column,\n        line: this.source.start.line\n      };\n      let end = this.source.end ? {\n        column: this.source.end.column + 1,\n        line: this.source.end.line\n      } : {\n        column: start.column + 1,\n        line: start.line\n      };\n      if (opts.word) {\n        let stringRepresentation = this.toString();\n        let index2 = stringRepresentation.indexOf(opts.word);\n        if (index2 !== -1) {\n          start = this.positionInside(index2, stringRepresentation);\n          end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n        }\n      } else {\n        if (opts.start) {\n          start = {\n            column: opts.start.column,\n            line: opts.start.line\n          };\n        } else if (opts.index) {\n          start = this.positionInside(opts.index);\n        }\n        if (opts.end) {\n          end = {\n            column: opts.end.column,\n            line: opts.end.line\n          };\n        } else if (typeof opts.endIndex === \"number\") {\n          end = this.positionInside(opts.endIndex);\n        } else if (opts.index) {\n          end = this.positionInside(opts.index + 1);\n        }\n      }\n      if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n        end = { column: start.column + 1, line: start.line };\n      }\n      return { end, start };\n    }\n    raw(prop, defaultType) {\n      let str = new Stringifier();\n      return str.raw(this, prop, defaultType);\n    }\n    remove() {\n      if (this.parent) {\n        this.parent.removeChild(this);\n      }\n      this.parent = void 0;\n      return this;\n    }\n    replaceWith(...nodes) {\n      if (this.parent) {\n        let bookmark = this;\n        let foundSelf = false;\n        for (let node2 of nodes) {\n          if (node2 === this) {\n            foundSelf = true;\n          } else if (foundSelf) {\n            this.parent.insertAfter(bookmark, node2);\n            bookmark = node2;\n          } else {\n            this.parent.insertBefore(bookmark, node2);\n          }\n        }\n        if (!foundSelf) {\n          this.remove();\n        }\n      }\n      return this;\n    }\n    root() {\n      let result2 = this;\n      while (result2.parent && result2.parent.type !== \"document\") {\n        result2 = result2.parent;\n      }\n      return result2;\n    }\n    toJSON(_, inputs) {\n      let fixed = {};\n      let emitInputs = inputs == null;\n      inputs = inputs || /* @__PURE__ */ new Map();\n      let inputsNextIndex = 0;\n      for (let name in this) {\n        if (!Object.prototype.hasOwnProperty.call(this, name)) {\n          continue;\n        }\n        if (name === \"parent\" || name === \"proxyCache\") continue;\n        let value = this[name];\n        if (Array.isArray(value)) {\n          fixed[name] = value.map((i2) => {\n            if (typeof i2 === \"object\" && i2.toJSON) {\n              return i2.toJSON(null, inputs);\n            } else {\n              return i2;\n            }\n          });\n        } else if (typeof value === \"object\" && value.toJSON) {\n          fixed[name] = value.toJSON(null, inputs);\n        } else if (name === \"source\") {\n          let inputId = inputs.get(value.input);\n          if (inputId == null) {\n            inputId = inputsNextIndex;\n            inputs.set(value.input, inputsNextIndex);\n            inputsNextIndex++;\n          }\n          fixed[name] = {\n            end: value.end,\n            inputId,\n            start: value.start\n          };\n        } else {\n          fixed[name] = value;\n        }\n      }\n      if (emitInputs) {\n        fixed.inputs = [...inputs.keys()].map((input2) => input2.toJSON());\n      }\n      return fixed;\n    }\n    toProxy() {\n      if (!this.proxyCache) {\n        this.proxyCache = new Proxy(this, this.getProxyProcessor());\n      }\n      return this.proxyCache;\n    }\n    toString(stringifier2 = stringify) {\n      if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n      let result2 = \"\";\n      stringifier2(this, (i2) => {\n        result2 += i2;\n      });\n      return result2;\n    }\n    warn(result2, text, opts) {\n      let data = { node: this };\n      for (let i2 in opts) data[i2] = opts[i2];\n      return result2.warn(text, data);\n    }\n    get proxyOf() {\n      return this;\n    }\n  }\n  node$1 = Node2;\n  Node2.default = Node2;\n  return node$1;\n}\nvar declaration$1;\nvar hasRequiredDeclaration$1;\nfunction requireDeclaration$1() {\n  if (hasRequiredDeclaration$1) return declaration$1;\n  hasRequiredDeclaration$1 = 1;\n  let Node2 = requireNode$1();\n  class Declaration extends Node2 {\n    constructor(defaults) {\n      if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n        defaults = { ...defaults, value: String(defaults.value) };\n      }\n      super(defaults);\n      this.type = \"decl\";\n    }\n    get variable() {\n      return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n    }\n  }\n  declaration$1 = Declaration;\n  Declaration.default = Declaration;\n  return declaration$1;\n}\nvar nonSecure$1;\nvar hasRequiredNonSecure$1;\nfunction requireNonSecure$1() {\n  if (hasRequiredNonSecure$1) return nonSecure$1;\n  hasRequiredNonSecure$1 = 1;\n  let urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\n  let customAlphabet = (alphabet, defaultSize = 21) => {\n    return (size = defaultSize) => {\n      let id = \"\";\n      let i2 = size;\n      while (i2--) {\n        id += alphabet[Math.random() * alphabet.length | 0];\n      }\n      return id;\n    };\n  };\n  let nanoid = (size = 21) => {\n    let id = \"\";\n    let i2 = size;\n    while (i2--) {\n      id += urlAlphabet[Math.random() * 64 | 0];\n    }\n    return id;\n  };\n  nonSecure$1 = { nanoid, customAlphabet };\n  return nonSecure$1;\n}\nvar previousMap$1;\nvar hasRequiredPreviousMap$1;\nfunction requirePreviousMap$1() {\n  if (hasRequiredPreviousMap$1) return previousMap$1;\n  hasRequiredPreviousMap$1 = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2$1;\n  let { existsSync, readFileSync } = require$$2$1;\n  let { dirname, join } = require$$2$1;\n  function fromBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str, \"base64\").toString();\n    } else {\n      return window.atob(str);\n    }\n  }\n  class PreviousMap {\n    constructor(css, opts) {\n      if (opts.map === false) return;\n      this.loadAnnotation(css);\n      this.inline = this.startWith(this.annotation, \"data:\");\n      let prev = opts.map ? opts.map.prev : void 0;\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    consumer() {\n      if (!this.consumerCache) {\n        this.consumerCache = new SourceMapConsumer(this.text);\n      }\n      return this.consumerCache;\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      if (charsetUri.test(text) || uri.test(text)) {\n        return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n      }\n      if (baseCharsetUri.test(text) || baseUri.test(text)) {\n        return fromBase64(text.substr(RegExp.lastMatch.length));\n      }\n      let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n      throw new Error(\"Unsupported source map encoding \" + encoding);\n    }\n    getAnnotationURL(sourceMapString) {\n      return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n    }\n    isMap(map) {\n      if (typeof map !== \"object\") return false;\n      return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n    }\n    loadAnnotation(css) {\n      let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n      if (!comments) return;\n      let start = css.lastIndexOf(comments.pop());\n      let end = css.indexOf(\"*/\", start);\n      if (start > -1 && end > -1) {\n        this.annotation = this.getAnnotationURL(css.substring(start, end));\n      }\n    }\n    loadFile(path) {\n      this.root = dirname(path);\n      if (existsSync(path)) {\n        this.mapFile = path;\n        return readFileSync(path, \"utf-8\").toString().trim();\n      }\n    }\n    loadMap(file, prev) {\n      if (prev === false) return false;\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);\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        return this.loadFile(map);\n      }\n    }\n    startWith(string, start) {\n      if (!string) return false;\n      return string.substr(0, start.length) === start;\n    }\n    withContent() {\n      return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    }\n  }\n  previousMap$1 = PreviousMap;\n  PreviousMap.default = PreviousMap;\n  return previousMap$1;\n}\nvar input$1;\nvar hasRequiredInput$1;\nfunction requireInput$1() {\n  if (hasRequiredInput$1) return input$1;\n  hasRequiredInput$1 = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2$1;\n  let { fileURLToPath, pathToFileURL } = require$$2$1;\n  let { isAbsolute, resolve } = require$$2$1;\n  let { nanoid } = /* @__PURE__ */ requireNonSecure$1();\n  let terminalHighlight = require$$2$1;\n  let CssSyntaxError = requireCssSyntaxError$1();\n  let PreviousMap = requirePreviousMap$1();\n  let fromOffsetCache = Symbol(\"fromOffsetCache\");\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(resolve && isAbsolute);\n  class Input {\n    constructor(css, opts = {}) {\n      if (css === null || typeof css === \"undefined\" || typeof css === \"object\" && !css.toString) {\n        throw new Error(`PostCSS received ${css} instead of CSS string`);\n      }\n      this.css = css.toString();\n      if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n        this.hasBOM = true;\n        this.css = this.css.slice(1);\n      } else {\n        this.hasBOM = false;\n      }\n      if (opts.from) {\n        if (!pathAvailable || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n          this.file = opts.from;\n        } else {\n          this.file = resolve(opts.from);\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      if (!this.file) {\n        this.id = \"<input css \" + nanoid(6) + \">\";\n      }\n      if (this.map) this.map.file = this.from;\n    }\n    error(message, line, column, opts = {}) {\n      let result2, endLine, endColumn;\n      if (line && typeof line === \"object\") {\n        let start = line;\n        let end = column;\n        if (typeof start.offset === \"number\") {\n          let pos = this.fromOffset(start.offset);\n          line = pos.line;\n          column = pos.col;\n        } else {\n          line = start.line;\n          column = start.column;\n        }\n        if (typeof end.offset === \"number\") {\n          let pos = this.fromOffset(end.offset);\n          endLine = pos.line;\n          endColumn = pos.col;\n        } else {\n          endLine = end.line;\n          endColumn = end.column;\n        }\n      } else if (!column) {\n        let pos = this.fromOffset(line);\n        line = pos.line;\n        column = pos.col;\n      }\n      let origin = this.origin(line, column, endLine, endColumn);\n      if (origin) {\n        result2 = new CssSyntaxError(\n          message,\n          origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line },\n          origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine },\n          origin.source,\n          origin.file,\n          opts.plugin\n        );\n      } else {\n        result2 = new CssSyntaxError(\n          message,\n          endLine === void 0 ? line : { column, line },\n          endLine === void 0 ? column : { column: endColumn, line: endLine },\n          this.css,\n          this.file,\n          opts.plugin\n        );\n      }\n      result2.input = { column, endColumn, endLine, line, source: this.css };\n      if (this.file) {\n        if (pathToFileURL) {\n          result2.input.url = pathToFileURL(this.file).toString();\n        }\n        result2.input.file = this.file;\n      }\n      return result2;\n    }\n    fromOffset(offset) {\n      let lastLine, lineToIndex;\n      if (!this[fromOffsetCache]) {\n        let lines = this.css.split(\"\\n\");\n        lineToIndex = new Array(lines.length);\n        let prevIndex = 0;\n        for (let i2 = 0, l2 = lines.length; i2 < l2; i2++) {\n          lineToIndex[i2] = prevIndex;\n          prevIndex += lines[i2].length + 1;\n        }\n        this[fromOffsetCache] = lineToIndex;\n      } else {\n        lineToIndex = this[fromOffsetCache];\n      }\n      lastLine = lineToIndex[lineToIndex.length - 1];\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    mapResolve(file) {\n      if (/^\\w+:\\/\\//.test(file)) {\n        return file;\n      }\n      return resolve(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n    }\n    origin(line, column, endLine, endColumn) {\n      if (!this.map) return false;\n      let consumer = this.map.consumer();\n      let from = consumer.originalPositionFor({ column, line });\n      if (!from.source) return false;\n      let to;\n      if (typeof endLine === \"number\") {\n        to = consumer.originalPositionFor({ column: endColumn, line: endLine });\n      }\n      let fromUrl;\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      let result2 = {\n        column: from.column,\n        endColumn: to && to.column,\n        endLine: to && to.line,\n        line: from.line,\n        url: fromUrl.toString()\n      };\n      if (fromUrl.protocol === \"file:\") {\n        if (fileURLToPath) {\n          result2.file = fileURLToPath(fromUrl);\n        } else {\n          throw new Error(`file: protocol is not available in this PostCSS build`);\n        }\n      }\n      let source = consumer.sourceContentFor(from.source);\n      if (source) result2.source = source;\n      return result2;\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 = void 0;\n        }\n      }\n      return json;\n    }\n    get from() {\n      return this.file || this.id;\n    }\n  }\n  input$1 = Input;\n  Input.default = Input;\n  if (terminalHighlight && terminalHighlight.registerInput) {\n    terminalHighlight.registerInput(Input);\n  }\n  return input$1;\n}\nvar mapGenerator$1;\nvar hasRequiredMapGenerator$1;\nfunction requireMapGenerator$1() {\n  if (hasRequiredMapGenerator$1) return mapGenerator$1;\n  hasRequiredMapGenerator$1 = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2$1;\n  let { dirname, relative, resolve, sep } = require$$2$1;\n  let { pathToFileURL } = require$$2$1;\n  let Input = requireInput$1();\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(dirname && resolve && relative && sep);\n  class MapGenerator {\n    constructor(stringify, root2, opts, cssString) {\n      this.stringify = stringify;\n      this.mapOpts = opts.map || {};\n      this.root = root2;\n      this.opts = opts;\n      this.css = cssString;\n      this.originalCSS = cssString;\n      this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n      this.memoizedFileURLs = /* @__PURE__ */ new Map();\n      this.memoizedPaths = /* @__PURE__ */ new Map();\n      this.memoizedURLs = /* @__PURE__ */ new Map();\n    }\n    addAnnotation() {\n      let content;\n      if (this.isInline()) {\n        content = \"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      this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n    }\n    applyPrevMaps() {\n      for (let prev of this.previous()) {\n        let from = this.toUrl(this.path(prev.file));\n        let root2 = prev.root || dirname(prev.file);\n        let map;\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        this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n      }\n    }\n    clearAnnotation() {\n      if (this.mapOpts.annotation === false) return;\n      if (this.root) {\n        let node2;\n        for (let i2 = this.root.nodes.length - 1; i2 >= 0; i2--) {\n          node2 = this.root.nodes[i2];\n          if (node2.type !== \"comment\") continue;\n          if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n            this.root.removeChild(i2);\n          }\n        }\n      } else if (this.css) {\n        this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n      }\n    }\n    generate() {\n      this.clearAnnotation();\n      if (pathAvailable && sourceMapAvailable && this.isMap()) {\n        return this.generateMap();\n      } else {\n        let result2 = \"\";\n        this.stringify(this.root, (i2) => {\n          result2 += i2;\n        });\n        return [result2];\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 ? this.toUrl(this.path(this.opts.from)) : \"<no source>\"\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      if (this.isInline()) {\n        return [this.css];\n      } else {\n        return [this.css, this.map];\n      }\n    }\n    generateString() {\n      this.css = \"\";\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      });\n      let line = 1;\n      let column = 1;\n      let noSource = \"<no source>\";\n      let mapping = {\n        generated: { column: 0, line: 0 },\n        original: { column: 0, line: 0 },\n        source: \"\"\n      };\n      let lines, last;\n      this.stringify(this.root, (str, node2, type) => {\n        this.css += str;\n        if (node2 && type !== \"end\") {\n          mapping.generated.line = line;\n          mapping.generated.column = column - 1;\n          if (node2.source && node2.source.start) {\n            mapping.source = this.sourcePath(node2);\n            mapping.original.line = node2.source.start.line;\n            mapping.original.column = node2.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        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        if (node2 && type !== \"start\") {\n          let p = node2.parent || { raws: {} };\n          let childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n          if (!childless || node2 !== p.last || p.raws.semicolon) {\n            if (node2.source && node2.source.end) {\n              mapping.source = this.sourcePath(node2);\n              mapping.original.line = node2.source.end.line;\n              mapping.original.column = node2.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    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((i2) => i2.annotation);\n      }\n      return true;\n    }\n    isInline() {\n      if (typeof this.mapOpts.inline !== \"undefined\") {\n        return this.mapOpts.inline;\n      }\n      let annotation = this.mapOpts.annotation;\n      if (typeof annotation !== \"undefined\" && annotation !== true) {\n        return false;\n      }\n      if (this.previous().length) {\n        return this.previous().some((i2) => i2.inline);\n      }\n      return true;\n    }\n    isMap() {\n      if (typeof this.opts.map !== \"undefined\") {\n        return !!this.opts.map;\n      }\n      return this.previous().length > 0;\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((i2) => i2.withContent());\n      }\n      return true;\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    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      let from = this.opts.to ? dirname(this.opts.to) : \".\";\n      if (typeof this.mapOpts.annotation === \"string\") {\n        from = dirname(resolve(from, this.mapOpts.annotation));\n      }\n      let path = relative(from, file);\n      this.memoizedPaths.set(file, path);\n      return path;\n    }\n    previous() {\n      if (!this.previousMaps) {\n        this.previousMaps = [];\n        if (this.root) {\n          this.root.walk((node2) => {\n            if (node2.source && node2.source.input.map) {\n              let map = node2.source.input.map;\n              if (!this.previousMaps.includes(map)) {\n                this.previousMaps.push(map);\n              }\n            }\n          });\n        } else {\n          let input2 = new Input(this.originalCSS, this.opts);\n          if (input2.map) this.previousMaps.push(input2.map);\n        }\n      }\n      return this.previousMaps;\n    }\n    setSourcesContent() {\n      let already = {};\n      if (this.root) {\n        this.root.walk((node2) => {\n          if (node2.source) {\n            let from = node2.source.input.from;\n            if (from && !already[from]) {\n              already[from] = true;\n              let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n              this.map.setSourceContent(fromUrl, node2.source.input.css);\n            }\n          }\n        });\n      } else if (this.css) {\n        let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\";\n        this.map.setSourceContent(from, this.css);\n      }\n    }\n    sourcePath(node2) {\n      if (this.mapOpts.from) {\n        return this.toUrl(this.mapOpts.from);\n      } else if (this.usesFileUrls) {\n        return this.toFileUrl(node2.source.input.from);\n      } else {\n        return this.toUrl(this.path(node2.source.input.from));\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    toFileUrl(path) {\n      let cached = this.memoizedFileURLs.get(path);\n      if (cached) return cached;\n      if (pathToFileURL) {\n        let fileURL = pathToFileURL(path).toString();\n        this.memoizedFileURLs.set(path, fileURL);\n        return fileURL;\n      } else {\n        throw new Error(\n          \"`map.absolute` option is not available in this PostCSS build\"\n        );\n      }\n    }\n    toUrl(path) {\n      let cached = this.memoizedURLs.get(path);\n      if (cached) return cached;\n      if (sep === \"\\\\\") {\n        path = path.replace(/\\\\/g, \"/\");\n      }\n      let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n      this.memoizedURLs.set(path, url);\n      return url;\n    }\n  }\n  mapGenerator$1 = MapGenerator;\n  return mapGenerator$1;\n}\nvar comment$1;\nvar hasRequiredComment$1;\nfunction requireComment$1() {\n  if (hasRequiredComment$1) return comment$1;\n  hasRequiredComment$1 = 1;\n  let Node2 = requireNode$1();\n  class Comment extends Node2 {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"comment\";\n    }\n  }\n  comment$1 = Comment;\n  Comment.default = Comment;\n  return comment$1;\n}\nvar container$1;\nvar hasRequiredContainer$1;\nfunction requireContainer$1() {\n  if (hasRequiredContainer$1) return container$1;\n  hasRequiredContainer$1 = 1;\n  let { isClean, my } = requireSymbols$1();\n  let Declaration = requireDeclaration$1();\n  let Comment = requireComment$1();\n  let Node2 = requireNode$1();\n  let parse, Rule, AtRule, Root;\n  function cleanSource(nodes) {\n    return nodes.map((i2) => {\n      if (i2.nodes) i2.nodes = cleanSource(i2.nodes);\n      delete i2.source;\n      return i2;\n    });\n  }\n  function markDirtyUp(node2) {\n    node2[isClean] = false;\n    if (node2.proxyOf.nodes) {\n      for (let i2 of node2.proxyOf.nodes) {\n        markDirtyUp(i2);\n      }\n    }\n  }\n  class Container extends Node2 {\n    append(...children) {\n      for (let child of children) {\n        let nodes = this.normalize(child, this.last);\n        for (let node2 of nodes) this.proxyOf.nodes.push(node2);\n      }\n      this.markDirty();\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      super.cleanRaws(keepBetween);\n      if (this.nodes) {\n        for (let node2 of this.nodes) node2.cleanRaws(keepBetween);\n      }\n    }\n    each(callback) {\n      if (!this.proxyOf.nodes) return void 0;\n      let iterator = this.getIterator();\n      let index2, result2;\n      while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n        index2 = this.indexes[iterator];\n        result2 = callback(this.proxyOf.nodes[index2], index2);\n        if (result2 === false) break;\n        this.indexes[iterator] += 1;\n      }\n      delete this.indexes[iterator];\n      return result2;\n    }\n    every(condition) {\n      return this.nodes.every(condition);\n    }\n    getIterator() {\n      if (!this.lastEach) this.lastEach = 0;\n      if (!this.indexes) this.indexes = {};\n      this.lastEach += 1;\n      let iterator = this.lastEach;\n      this.indexes[iterator] = 0;\n      return iterator;\n    }\n    getProxyProcessor() {\n      return {\n        get(node2, prop) {\n          if (prop === \"proxyOf\") {\n            return node2;\n          } else if (!node2[prop]) {\n            return node2[prop];\n          } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n            return (...args) => {\n              return node2[prop](\n                ...args.map((i2) => {\n                  if (typeof i2 === \"function\") {\n                    return (child, index2) => i2(child.toProxy(), index2);\n                  } else {\n                    return i2;\n                  }\n                })\n              );\n            };\n          } else if (prop === \"every\" || prop === \"some\") {\n            return (cb) => {\n              return node2[prop](\n                (child, ...other) => cb(child.toProxy(), ...other)\n              );\n            };\n          } else if (prop === \"root\") {\n            return () => node2.root().toProxy();\n          } else if (prop === \"nodes\") {\n            return node2.nodes.map((i2) => i2.toProxy());\n          } else if (prop === \"first\" || prop === \"last\") {\n            return node2[prop].toProxy();\n          } else {\n            return node2[prop];\n          }\n        },\n        set(node2, prop, value) {\n          if (node2[prop] === value) return true;\n          node2[prop] = value;\n          if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n            node2.markDirty();\n          }\n          return true;\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    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 node2 of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (existIndex < index2) {\n          this.indexes[id] = index2 + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    insertBefore(exist, add) {\n      let existIndex = this.index(exist);\n      let type = existIndex === 0 ? \"prepend\" : false;\n      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n      existIndex = this.index(exist);\n      for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex, 0, node2);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (existIndex <= index2) {\n          this.indexes[id] = index2 + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\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 i2 of nodes) {\n          if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n        }\n      } else if (nodes.type === \"root\" && this.type !== \"document\") {\n        nodes = nodes.nodes.slice(0);\n        for (let i2 of nodes) {\n          if (i2.parent) i2.parent.removeChild(i2, \"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) {\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      let processed = nodes.map((i2) => {\n        if (!i2[my]) Container.rebuild(i2);\n        i2 = i2.proxyOf;\n        if (i2.parent) i2.parent.removeChild(i2);\n        if (i2[isClean]) markDirtyUp(i2);\n        if (typeof i2.raws.before === \"undefined\") {\n          if (sample && typeof sample.raws.before !== \"undefined\") {\n            i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n          }\n        }\n        i2.parent = this.proxyOf;\n        return i2;\n      });\n      return processed;\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 node2 of nodes) this.proxyOf.nodes.unshift(node2);\n        for (let id in this.indexes) {\n          this.indexes[id] = this.indexes[id] + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    push(child) {\n      child.parent = this;\n      this.proxyOf.nodes.push(child);\n      return this;\n    }\n    removeAll() {\n      for (let node2 of this.proxyOf.nodes) node2.parent = void 0;\n      this.proxyOf.nodes = [];\n      this.markDirty();\n      return this;\n    }\n    removeChild(child) {\n      child = this.index(child);\n      this.proxyOf.nodes[child].parent = void 0;\n      this.proxyOf.nodes.splice(child, 1);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (index2 >= child) {\n          this.indexes[id] = index2 - 1;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    replaceValues(pattern, opts, callback) {\n      if (!callback) {\n        callback = opts;\n        opts = {};\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        decl.value = decl.value.replace(pattern, callback);\n      });\n      this.markDirty();\n      return this;\n    }\n    some(condition) {\n      return this.nodes.some(condition);\n    }\n    walk(callback) {\n      return this.each((child, i2) => {\n        let result2;\n        try {\n          result2 = callback(child, i2);\n        } catch (e2) {\n          throw child.addToError(e2);\n        }\n        if (result2 !== false && child.walk) {\n          result2 = child.walk(callback);\n        }\n        return result2;\n      });\n    }\n    walkAtRules(name, callback) {\n      if (!callback) {\n        callback = name;\n        return this.walk((child, i2) => {\n          if (child.type === \"atrule\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (name instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"atrule\" && name.test(child.name)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"atrule\" && child.name === name) {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkComments(callback) {\n      return this.walk((child, i2) => {\n        if (child.type === \"comment\") {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkDecls(prop, callback) {\n      if (!callback) {\n        callback = prop;\n        return this.walk((child, i2) => {\n          if (child.type === \"decl\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (prop instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"decl\" && prop.test(child.prop)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"decl\" && child.prop === prop) {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkRules(selector, callback) {\n      if (!callback) {\n        callback = selector;\n        return this.walk((child, i2) => {\n          if (child.type === \"rule\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (selector instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"rule\" && selector.test(child.selector)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"rule\" && child.selector === selector) {\n          return callback(child, i2);\n        }\n      });\n    }\n    get first() {\n      if (!this.proxyOf.nodes) return void 0;\n      return this.proxyOf.nodes[0];\n    }\n    get last() {\n      if (!this.proxyOf.nodes) return void 0;\n      return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n    }\n  }\n  Container.registerParse = (dependant) => {\n    parse = dependant;\n  };\n  Container.registerRule = (dependant) => {\n    Rule = dependant;\n  };\n  Container.registerAtRule = (dependant) => {\n    AtRule = dependant;\n  };\n  Container.registerRoot = (dependant) => {\n    Root = dependant;\n  };\n  container$1 = Container;\n  Container.default = Container;\n  Container.rebuild = (node2) => {\n    if (node2.type === \"atrule\") {\n      Object.setPrototypeOf(node2, AtRule.prototype);\n    } else if (node2.type === \"rule\") {\n      Object.setPrototypeOf(node2, Rule.prototype);\n    } else if (node2.type === \"decl\") {\n      Object.setPrototypeOf(node2, Declaration.prototype);\n    } else if (node2.type === \"comment\") {\n      Object.setPrototypeOf(node2, Comment.prototype);\n    } else if (node2.type === \"root\") {\n      Object.setPrototypeOf(node2, Root.prototype);\n    }\n    node2[my] = true;\n    if (node2.nodes) {\n      node2.nodes.forEach((child) => {\n        Container.rebuild(child);\n      });\n    }\n  };\n  return container$1;\n}\nvar document$1$1;\nvar hasRequiredDocument$1;\nfunction requireDocument$1() {\n  if (hasRequiredDocument$1) return document$1$1;\n  hasRequiredDocument$1 = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  class Document2 extends Container {\n    constructor(defaults) {\n      super({ type: \"document\", ...defaults });\n      if (!this.nodes) {\n        this.nodes = [];\n      }\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Document2.registerLazyResult = (dependant) => {\n    LazyResult = dependant;\n  };\n  Document2.registerProcessor = (dependant) => {\n    Processor = dependant;\n  };\n  document$1$1 = Document2;\n  Document2.default = Document2;\n  return document$1$1;\n}\nvar warnOnce$1;\nvar hasRequiredWarnOnce$1;\nfunction requireWarnOnce$1() {\n  if (hasRequiredWarnOnce$1) return warnOnce$1;\n  hasRequiredWarnOnce$1 = 1;\n  let printed = {};\n  warnOnce$1 = function warnOnce2(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n    if (typeof console !== \"undefined\" && console.warn) {\n      console.warn(message);\n    }\n  };\n  return warnOnce$1;\n}\nvar warning$1;\nvar hasRequiredWarning$1;\nfunction requireWarning$1() {\n  if (hasRequiredWarning$1) return warning$1;\n  hasRequiredWarning$1 = 1;\n  class Warning {\n    constructor(text, opts = {}) {\n      this.type = \"warning\";\n      this.text = text;\n      if (opts.node && opts.node.source) {\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      for (let opt in opts) this[opt] = opts[opt];\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      if (this.plugin) {\n        return this.plugin + \": \" + this.text;\n      }\n      return this.text;\n    }\n  }\n  warning$1 = Warning;\n  Warning.default = Warning;\n  return warning$1;\n}\nvar result$1;\nvar hasRequiredResult$1;\nfunction requireResult$1() {\n  if (hasRequiredResult$1) return result$1;\n  hasRequiredResult$1 = 1;\n  let Warning = requireWarning$1();\n  class Result {\n    constructor(processor2, root2, opts) {\n      this.processor = processor2;\n      this.messages = [];\n      this.root = root2;\n      this.opts = opts;\n      this.css = void 0;\n      this.map = void 0;\n    }\n    toString() {\n      return this.css;\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      let warning2 = new Warning(text, opts);\n      this.messages.push(warning2);\n      return warning2;\n    }\n    warnings() {\n      return this.messages.filter((i2) => i2.type === \"warning\");\n    }\n    get content() {\n      return this.css;\n    }\n  }\n  result$1 = Result;\n  Result.default = Result;\n  return result$1;\n}\nvar tokenize$1;\nvar hasRequiredTokenize$1;\nfunction requireTokenize$1() {\n  if (hasRequiredTokenize$1) return tokenize$1;\n  hasRequiredTokenize$1 = 1;\n  const SINGLE_QUOTE = \"'\".charCodeAt(0);\n  const DOUBLE_QUOTE = '\"'.charCodeAt(0);\n  const BACKSLASH = \"\\\\\".charCodeAt(0);\n  const SLASH = \"/\".charCodeAt(0);\n  const NEWLINE = \"\\n\".charCodeAt(0);\n  const SPACE = \" \".charCodeAt(0);\n  const FEED = \"\\f\".charCodeAt(0);\n  const TAB = \"\t\".charCodeAt(0);\n  const CR = \"\\r\".charCodeAt(0);\n  const OPEN_SQUARE = \"[\".charCodeAt(0);\n  const CLOSE_SQUARE = \"]\".charCodeAt(0);\n  const OPEN_PARENTHESES = \"(\".charCodeAt(0);\n  const CLOSE_PARENTHESES = \")\".charCodeAt(0);\n  const OPEN_CURLY = \"{\".charCodeAt(0);\n  const CLOSE_CURLY = \"}\".charCodeAt(0);\n  const SEMICOLON = \";\".charCodeAt(0);\n  const ASTERISK = \"*\".charCodeAt(0);\n  const COLON = \":\".charCodeAt(0);\n  const AT = \"@\".charCodeAt(0);\n  const RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\n  const RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\n  const RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\n  const RE_HEX_ESCAPE = /[\\da-f]/i;\n  tokenize$1 = function tokenizer(input2, options = {}) {\n    let css = input2.css.valueOf();\n    let ignore = options.ignoreErrors;\n    let code, next, quote, content, escape;\n    let escaped, escapePos, prev, n2, currentToken;\n    let length = css.length;\n    let pos = 0;\n    let buffer = [];\n    let returned = [];\n    function position() {\n      return pos;\n    }\n    function unclosed(what) {\n      throw input2.error(\"Unclosed \" + what, pos);\n    }\n    function endOfFile() {\n      return returned.length === 0 && pos >= length;\n    }\n    function nextToken(opts) {\n      if (returned.length) return returned.pop();\n      if (pos >= length) return;\n      let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n      code = css.charCodeAt(pos);\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 (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n          currentToken = [\"space\", css.slice(pos, next)];\n          pos = next - 1;\n          break;\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        case OPEN_PARENTHESES: {\n          prev = buffer.length ? buffer.pop()[1] : \"\";\n          n2 = css.charCodeAt(pos + 1);\n          if (prev === \"url\" && n2 !== SINGLE_QUOTE && n2 !== DOUBLE_QUOTE && n2 !== SPACE && n2 !== NEWLINE && n2 !== TAB && n2 !== FEED && n2 !== CR) {\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            currentToken = [\"brackets\", css.slice(pos, next + 1), pos, next];\n            pos = next;\n          } else {\n            next = css.indexOf(\")\", pos + 1);\n            content = css.slice(pos, next + 1);\n            if (next === -1 || RE_BAD_BRACKET.test(content)) {\n              currentToken = [\"(\", \"(\", pos];\n            } else {\n              currentToken = [\"brackets\", content, pos, next];\n              pos = next;\n            }\n          }\n          break;\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          currentToken = [\"string\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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          currentToken = [\"at-word\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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 (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\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          currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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            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            currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n            buffer.push(currentToken);\n            pos = next;\n          }\n          break;\n        }\n      }\n      pos++;\n      return currentToken;\n    }\n    function back(token) {\n      returned.push(token);\n    }\n    return {\n      back,\n      endOfFile,\n      nextToken,\n      position\n    };\n  };\n  return tokenize$1;\n}\nvar atRule$1;\nvar hasRequiredAtRule$1;\nfunction requireAtRule$1() {\n  if (hasRequiredAtRule$1) return atRule$1;\n  hasRequiredAtRule$1 = 1;\n  let Container = requireContainer$1();\n  class AtRule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"atrule\";\n    }\n    append(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.append(...children);\n    }\n    prepend(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.prepend(...children);\n    }\n  }\n  atRule$1 = AtRule;\n  AtRule.default = AtRule;\n  Container.registerAtRule(AtRule);\n  return atRule$1;\n}\nvar root$1;\nvar hasRequiredRoot$1;\nfunction requireRoot$1() {\n  if (hasRequiredRoot$1) return root$1;\n  hasRequiredRoot$1 = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  class Root extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"root\";\n      if (!this.nodes) this.nodes = [];\n    }\n    normalize(child, sample, type) {\n      let nodes = super.normalize(child);\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 node2 of nodes) {\n            node2.raws.before = sample.raws.before;\n          }\n        }\n      }\n      return nodes;\n    }\n    removeChild(child, ignore) {\n      let index2 = this.index(child);\n      if (!ignore && index2 === 0 && this.nodes.length > 1) {\n        this.nodes[1].raws.before = this.nodes[index2].raws.before;\n      }\n      return super.removeChild(child);\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Root.registerLazyResult = (dependant) => {\n    LazyResult = dependant;\n  };\n  Root.registerProcessor = (dependant) => {\n    Processor = dependant;\n  };\n  root$1 = Root;\n  Root.default = Root;\n  Container.registerRoot(Root);\n  return root$1;\n}\nvar list_1$1;\nvar hasRequiredList$1;\nfunction requireList$1() {\n  if (hasRequiredList$1) return list_1$1;\n  hasRequiredList$1 = 1;\n  let list = {\n    comma(string) {\n      return list.split(string, [\",\"], true);\n    },\n    space(string) {\n      let spaces = [\" \", \"\\n\", \"\t\"];\n      return list.split(string, spaces);\n    },\n    split(string, separators, last) {\n      let array = [];\n      let current = \"\";\n      let split = false;\n      let func = 0;\n      let inQuote = false;\n      let prevQuote = \"\";\n      let escape = false;\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        if (split) {\n          if (current !== \"\") array.push(current.trim());\n          current = \"\";\n          split = false;\n        } else {\n          current += letter;\n        }\n      }\n      if (last || current !== \"\") array.push(current.trim());\n      return array;\n    }\n  };\n  list_1$1 = list;\n  list.default = list;\n  return list_1$1;\n}\nvar rule$1;\nvar hasRequiredRule$1;\nfunction requireRule$1() {\n  if (hasRequiredRule$1) return rule$1;\n  hasRequiredRule$1 = 1;\n  let Container = requireContainer$1();\n  let list = requireList$1();\n  class Rule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"rule\";\n      if (!this.nodes) this.nodes = [];\n    }\n    get selectors() {\n      return list.comma(this.selector);\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  rule$1 = Rule;\n  Rule.default = Rule;\n  Container.registerRule(Rule);\n  return rule$1;\n}\nvar parser$1;\nvar hasRequiredParser$1;\nfunction requireParser$1() {\n  if (hasRequiredParser$1) return parser$1;\n  hasRequiredParser$1 = 1;\n  let Declaration = requireDeclaration$1();\n  let tokenizer = requireTokenize$1();\n  let Comment = requireComment$1();\n  let AtRule = requireAtRule$1();\n  let Root = requireRoot$1();\n  let Rule = requireRule$1();\n  const SAFE_COMMENT_NEIGHBOR = {\n    empty: true,\n    space: true\n  };\n  function findLastWithPosition(tokens) {\n    for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n      let token = tokens[i2];\n      let pos = token[3] || token[2];\n      if (pos) return pos;\n    }\n  }\n  class Parser {\n    constructor(input2) {\n      this.input = input2;\n      this.root = new Root();\n      this.current = this.root;\n      this.spaces = \"\";\n      this.semicolon = false;\n      this.createTokenizer();\n      this.root.source = { input: input2, start: { column: 1, line: 1, offset: 0 } };\n    }\n    atrule(token) {\n      let node2 = new AtRule();\n      node2.name = token[1].slice(1);\n      if (node2.name === \"\") {\n        this.unnamedAtrule(node2, token);\n      }\n      this.init(node2, token[2]);\n      let type;\n      let prev;\n      let shift;\n      let last = false;\n      let open = false;\n      let params = [];\n      let brackets = [];\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        type = token[0];\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        if (brackets.length === 0) {\n          if (type === \";\") {\n            node2.source.end = this.getPosition(token[2]);\n            node2.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                node2.source.end = this.getPosition(prev[3] || prev[2]);\n                node2.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        if (this.tokenizer.endOfFile()) {\n          last = true;\n          break;\n        }\n      }\n      node2.raws.between = this.spacesAndCommentsFromEnd(params);\n      if (params.length) {\n        node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n        this.raw(node2, \"params\", params);\n        if (last) {\n          token = params[params.length - 1];\n          node2.source.end = this.getPosition(token[3] || token[2]);\n          node2.source.end.offset++;\n          this.spaces = node2.raws.between;\n          node2.raws.between = \"\";\n        }\n      } else {\n        node2.raws.afterName = \"\";\n        node2.params = \"\";\n      }\n      if (open) {\n        node2.nodes = [];\n        this.current = node2;\n      }\n    }\n    checkMissedSemicolon(tokens) {\n      let colon = this.colon(tokens);\n      if (colon === false) return;\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      throw this.input.error(\n        \"Missed semicolon\",\n        token[0] === \"word\" ? token[3] + 1 : token[2]\n      );\n    }\n    colon(tokens) {\n      let brackets = 0;\n      let token, type, prev;\n      for (let [i2, element] of tokens.entries()) {\n        token = element;\n        type = token[0];\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 i2;\n          }\n        }\n        prev = token;\n      }\n      return false;\n    }\n    comment(token) {\n      let node2 = new Comment();\n      this.init(node2, token[2]);\n      node2.source.end = this.getPosition(token[3] || token[2]);\n      node2.source.end.offset++;\n      let text = token[1].slice(2, -2);\n      if (/^\\s*$/.test(text)) {\n        node2.text = \"\";\n        node2.raws.left = text;\n        node2.raws.right = \"\";\n      } else {\n        let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n        node2.text = match[2];\n        node2.raws.left = match[1];\n        node2.raws.right = match[3];\n      }\n    }\n    createTokenizer() {\n      this.tokenizer = tokenizer(this.input);\n    }\n    decl(tokens, customProperty) {\n      let node2 = new Declaration();\n      this.init(node2, tokens[0][2]);\n      let last = tokens[tokens.length - 1];\n      if (last[0] === \";\") {\n        this.semicolon = true;\n        tokens.pop();\n      }\n      node2.source.end = this.getPosition(\n        last[3] || last[2] || findLastWithPosition(tokens)\n      );\n      node2.source.end.offset++;\n      while (tokens[0][0] !== \"word\") {\n        if (tokens.length === 1) this.unknownWord(tokens);\n        node2.raws.before += tokens.shift()[1];\n      }\n      node2.source.start = this.getPosition(tokens[0][2]);\n      node2.prop = \"\";\n      while (tokens.length) {\n        let type = tokens[0][0];\n        if (type === \":\" || type === \"space\" || type === \"comment\") {\n          break;\n        }\n        node2.prop += tokens.shift()[1];\n      }\n      node2.raws.between = \"\";\n      let token;\n      while (tokens.length) {\n        token = tokens.shift();\n        if (token[0] === \":\") {\n          node2.raws.between += token[1];\n          break;\n        } else {\n          if (token[0] === \"word\" && /\\w/.test(token[1])) {\n            this.unknownWord([token]);\n          }\n          node2.raws.between += token[1];\n        }\n      }\n      if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n        node2.raws.before += node2.prop[0];\n        node2.prop = node2.prop.slice(1);\n      }\n      let firstSpaces = [];\n      let next;\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== \"space\" && next !== \"comment\") break;\n        firstSpaces.push(tokens.shift());\n      }\n      this.precheckMissedSemicolon(tokens);\n      for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n        token = tokens[i2];\n        if (token[1].toLowerCase() === \"!important\") {\n          node2.important = true;\n          let string = this.stringFrom(tokens, i2);\n          string = this.spacesFromEnd(tokens) + string;\n          if (string !== \" !important\") node2.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 = i2; j > 0; j--) {\n            let type = cache[j][0];\n            if (str.trim().indexOf(\"!\") === 0 && type !== \"space\") {\n              break;\n            }\n            str = cache.pop()[1] + str;\n          }\n          if (str.trim().indexOf(\"!\") === 0) {\n            node2.important = true;\n            node2.raws.important = str;\n            tokens = cache;\n          }\n        }\n        if (token[0] !== \"space\" && token[0] !== \"comment\") {\n          break;\n        }\n      }\n      let hasWord = tokens.some((i2) => i2[0] !== \"space\" && i2[0] !== \"comment\");\n      if (hasWord) {\n        node2.raws.between += firstSpaces.map((i2) => i2[1]).join(\"\");\n        firstSpaces = [];\n      }\n      this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n      if (node2.value.includes(\":\") && !customProperty) {\n        this.checkMissedSemicolon(tokens);\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    emptyRule(token) {\n      let node2 = new Rule();\n      this.init(node2, token[2]);\n      node2.selector = \"\";\n      node2.raws.between = \"\";\n      this.current = node2;\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      this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n      this.spaces = \"\";\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    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    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        }\n      }\n    }\n    // Helpers\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    init(node2, offset) {\n      this.current.push(node2);\n      node2.source = {\n        input: this.input,\n        start: this.getPosition(offset)\n      };\n      node2.raws.before = this.spaces;\n      this.spaces = \"\";\n      if (node2.type !== \"comment\") this.semicolon = false;\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      let tokens = [];\n      let token = start;\n      while (token) {\n        type = token[0];\n        tokens.push(token);\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        token = this.tokenizer.nextToken();\n      }\n      if (this.tokenizer.endOfFile()) end = true;\n      if (brackets.length > 0) this.unclosedBracket(bracket);\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    parse() {\n      let token;\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        switch (token[0]) {\n          case \"space\":\n            this.spaces += token[1];\n            break;\n          case \";\":\n            this.freeSemicolon(token);\n            break;\n          case \"}\":\n            this.end(token);\n            break;\n          case \"comment\":\n            this.comment(token);\n            break;\n          case \"at-word\":\n            this.atrule(token);\n            break;\n          case \"{\":\n            this.emptyRule(token);\n            break;\n          default:\n            this.other(token);\n            break;\n        }\n      }\n      this.endFile();\n    }\n    precheckMissedSemicolon() {\n    }\n    raw(node2, prop, tokens, customProperty) {\n      let token, type;\n      let length = tokens.length;\n      let value = \"\";\n      let clean = true;\n      let next, prev;\n      for (let i2 = 0; i2 < length; i2 += 1) {\n        token = tokens[i2];\n        type = token[0];\n        if (type === \"space\" && i2 === length - 1 && !customProperty) {\n          clean = false;\n        } else if (type === \"comment\") {\n          prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n          next = tokens[i2 + 1] ? tokens[i2 + 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, i2) => all + i2[1], \"\");\n        node2.raws[prop] = { raw, value };\n      }\n      node2[prop] = value;\n    }\n    rule(tokens) {\n      tokens.pop();\n      let node2 = new Rule();\n      this.init(node2, tokens[0][2]);\n      node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n      this.raw(node2, \"selector\", tokens);\n      this.current = node2;\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    // Errors\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    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    stringFrom(tokens, from) {\n      let result2 = \"\";\n      for (let i2 = from; i2 < tokens.length; i2++) {\n        result2 += tokens[i2][1];\n      }\n      tokens.splice(from, tokens.length - from);\n      return result2;\n    }\n    unclosedBlock() {\n      let pos = this.current.source.start;\n      throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n    }\n    unclosedBracket(bracket) {\n      throw this.input.error(\n        \"Unclosed bracket\",\n        { offset: bracket[2] },\n        { offset: bracket[2] + 1 }\n      );\n    }\n    unexpectedClose(token) {\n      throw this.input.error(\n        \"Unexpected }\",\n        { offset: token[2] },\n        { offset: token[2] + 1 }\n      );\n    }\n    unknownWord(tokens) {\n      throw this.input.error(\n        \"Unknown word\",\n        { offset: tokens[0][2] },\n        { offset: tokens[0][2] + tokens[0][1].length }\n      );\n    }\n    unnamedAtrule(node2, 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  parser$1 = Parser;\n  return parser$1;\n}\nvar parse_1$1;\nvar hasRequiredParse$1;\nfunction requireParse$1() {\n  if (hasRequiredParse$1) return parse_1$1;\n  hasRequiredParse$1 = 1;\n  let Container = requireContainer$1();\n  let Parser = requireParser$1();\n  let Input = requireInput$1();\n  function parse(css, opts) {\n    let input2 = new Input(css, opts);\n    let parser2 = new Parser(input2);\n    try {\n      parser2.parse();\n    } catch (e2) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n          if (/\\.scss$/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n          } else if (/\\.sass/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n          } else if (/\\.less$/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n          }\n        }\n      }\n      throw e2;\n    }\n    return parser2.root;\n  }\n  parse_1$1 = parse;\n  parse.default = parse;\n  Container.registerParse(parse);\n  return parse_1$1;\n}\nvar lazyResult$1;\nvar hasRequiredLazyResult$1;\nfunction requireLazyResult$1() {\n  if (hasRequiredLazyResult$1) return lazyResult$1;\n  hasRequiredLazyResult$1 = 1;\n  let { isClean, my } = requireSymbols$1();\n  let MapGenerator = requireMapGenerator$1();\n  let stringify = requireStringify$1();\n  let Container = requireContainer$1();\n  let Document2 = requireDocument$1();\n  let warnOnce2 = requireWarnOnce$1();\n  let Result = requireResult$1();\n  let parse = requireParse$1();\n  let Root = requireRoot$1();\n  const TYPE_TO_CLASS_NAME = {\n    atrule: \"AtRule\",\n    comment: \"Comment\",\n    decl: \"Declaration\",\n    document: \"Document\",\n    root: \"Root\",\n    rule: \"Rule\"\n  };\n  const 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  const NOT_VISITORS = {\n    Once: true,\n    postcssPlugin: true,\n    prepare: true\n  };\n  const CHILDREN = 0;\n  function isPromise(obj) {\n    return typeof obj === \"object\" && typeof obj.then === \"function\";\n  }\n  function getEvents(node2) {\n    let key = false;\n    let type = TYPE_TO_CLASS_NAME[node2.type];\n    if (node2.type === \"decl\") {\n      key = node2.prop.toLowerCase();\n    } else if (node2.type === \"atrule\") {\n      key = node2.name.toLowerCase();\n    }\n    if (key && node2.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 (node2.append) {\n      return [type, CHILDREN, type + \"Exit\"];\n    } else {\n      return [type, type + \"Exit\"];\n    }\n  }\n  function toStack(node2) {\n    let events;\n    if (node2.type === \"document\") {\n      events = [\"Document\", CHILDREN, \"DocumentExit\"];\n    } else if (node2.type === \"root\") {\n      events = [\"Root\", CHILDREN, \"RootExit\"];\n    } else {\n      events = getEvents(node2);\n    }\n    return {\n      eventIndex: 0,\n      events,\n      iterator: 0,\n      node: node2,\n      visitorIndex: 0,\n      visitors: []\n    };\n  }\n  function cleanMarks(node2) {\n    node2[isClean] = false;\n    if (node2.nodes) node2.nodes.forEach((i2) => cleanMarks(i2));\n    return node2;\n  }\n  let postcss2 = {};\n  class LazyResult {\n    constructor(processor2, css, opts) {\n      this.stringified = false;\n      this.processed = false;\n      let root2;\n      if (typeof css === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n        root2 = cleanMarks(css);\n      } else if (css instanceof LazyResult || css instanceof Result) {\n        root2 = 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 parser2 = parse;\n        if (opts.syntax) parser2 = opts.syntax.parse;\n        if (opts.parser) parser2 = opts.parser;\n        if (parser2.parse) parser2 = parser2.parse;\n        try {\n          root2 = parser2(css, opts);\n        } catch (error) {\n          this.processed = true;\n          this.error = error;\n        }\n        if (root2 && !root2[my]) {\n          Container.rebuild(root2);\n        }\n      }\n      this.result = new Result(processor2, root2, opts);\n      this.helpers = { ...postcss2, postcss: postcss2, 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    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    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    getAsyncError() {\n      throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n    }\n    handleError(error, node2) {\n      let plugin = this.result.lastPlugin;\n      try {\n        if (node2) node2.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 a2 = pluginVer.split(\".\");\n            let b = runtimeVer.split(\".\");\n            if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n              console.error(\n                \"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\"\n              );\n            }\n          }\n        }\n      } catch (err) {\n        if (console && console.error) console.error(err);\n      }\n      return error;\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}. 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    async runAsync() {\n      this.plugin = 0;\n      for (let i2 = 0; i2 < this.plugins.length; i2++) {\n        let plugin = this.plugins[i2];\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      this.prepareVisitors();\n      if (this.hasListener) {\n        let root2 = this.result.root;\n        while (!root2[isClean]) {\n          root2[isClean] = true;\n          let stack = [toStack(root2)];\n          while (stack.length > 0) {\n            let promise = this.visitTick(stack);\n            if (isPromise(promise)) {\n              try {\n                await promise;\n              } catch (e2) {\n                let node2 = stack[stack.length - 1].node;\n                throw this.handleError(e2, node2);\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 (root2.type === \"document\") {\n                let roots = root2.nodes.map(\n                  (subRoot) => visitor(subRoot, this.helpers)\n                );\n                await Promise.all(roots);\n              } else {\n                await visitor(root2, this.helpers);\n              }\n            } catch (e2) {\n              throw this.handleError(e2);\n            }\n          }\n        }\n      }\n      this.processed = true;\n      return this.stringify();\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(\n              (root2) => plugin.Once(root2, this.helpers)\n            );\n            if (isPromise(roots[0])) {\n              return Promise.all(roots);\n            }\n            return roots;\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    stringify() {\n      if (this.error) throw this.error;\n      if (this.stringified) return this.result;\n      this.stringified = true;\n      this.sync();\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      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      return this.result;\n    }\n    sync() {\n      if (this.error) throw this.error;\n      if (this.processed) return this.result;\n      this.processed = true;\n      if (this.processing) {\n        throw this.getAsyncError();\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      this.prepareVisitors();\n      if (this.hasListener) {\n        let root2 = this.result.root;\n        while (!root2[isClean]) {\n          root2[isClean] = true;\n          this.walkSync(root2);\n        }\n        if (this.listeners.OnceExit) {\n          if (root2.type === \"document\") {\n            for (let subRoot of root2.nodes) {\n              this.visitSync(this.listeners.OnceExit, subRoot);\n            }\n          } else {\n            this.visitSync(this.listeners.OnceExit, root2);\n          }\n        }\n      }\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (!(\"from\" in this.opts)) {\n          warnOnce2(\n            \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n          );\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this.css;\n    }\n    visitSync(visitors, node2) {\n      for (let [plugin, visitor] of visitors) {\n        this.result.lastPlugin = plugin;\n        let promise;\n        try {\n          promise = visitor(node2, this.helpers);\n        } catch (e2) {\n          throw this.handleError(e2, node2.proxyOf);\n        }\n        if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n          return true;\n        }\n        if (isPromise(promise)) {\n          throw this.getAsyncError();\n        }\n      }\n    }\n    visitTick(stack) {\n      let visit2 = stack[stack.length - 1];\n      let { node: node2, visitors } = visit2;\n      if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n        stack.pop();\n        return;\n      }\n      if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n        let [plugin, visitor] = visitors[visit2.visitorIndex];\n        visit2.visitorIndex += 1;\n        if (visit2.visitorIndex === visitors.length) {\n          visit2.visitors = [];\n          visit2.visitorIndex = 0;\n        }\n        this.result.lastPlugin = plugin;\n        try {\n          return visitor(node2.toProxy(), this.helpers);\n        } catch (e2) {\n          throw this.handleError(e2, node2);\n        }\n      }\n      if (visit2.iterator !== 0) {\n        let iterator = visit2.iterator;\n        let child;\n        while (child = node2.nodes[node2.indexes[iterator]]) {\n          node2.indexes[iterator] += 1;\n          if (!child[isClean]) {\n            child[isClean] = true;\n            stack.push(toStack(child));\n            return;\n          }\n        }\n        visit2.iterator = 0;\n        delete node2.indexes[iterator];\n      }\n      let events = visit2.events;\n      while (visit2.eventIndex < events.length) {\n        let event = events[visit2.eventIndex];\n        visit2.eventIndex += 1;\n        if (event === CHILDREN) {\n          if (node2.nodes && node2.nodes.length) {\n            node2[isClean] = true;\n            visit2.iterator = node2.getIterator();\n          }\n          return;\n        } else if (this.listeners[event]) {\n          visit2.visitors = this.listeners[event];\n          return;\n        }\n      }\n      stack.pop();\n    }\n    walkSync(node2) {\n      node2[isClean] = true;\n      let events = getEvents(node2);\n      for (let event of events) {\n        if (event === CHILDREN) {\n          if (node2.nodes) {\n            node2.each((child) => {\n              if (!child[isClean]) this.walkSync(child);\n            });\n          }\n        } else {\n          let visitors = this.listeners[event];\n          if (visitors) {\n            if (this.visitSync(visitors, node2.toProxy())) return;\n          }\n        }\n      }\n    }\n    warnings() {\n      return this.sync().warnings();\n    }\n    get content() {\n      return this.stringify().content;\n    }\n    get css() {\n      return this.stringify().css;\n    }\n    get map() {\n      return this.stringify().map;\n    }\n    get messages() {\n      return this.sync().messages;\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      return this.sync().root;\n    }\n    get [Symbol.toStringTag]() {\n      return \"LazyResult\";\n    }\n  }\n  LazyResult.registerPostcss = (dependant) => {\n    postcss2 = dependant;\n  };\n  lazyResult$1 = LazyResult;\n  LazyResult.default = LazyResult;\n  Root.registerLazyResult(LazyResult);\n  Document2.registerLazyResult(LazyResult);\n  return lazyResult$1;\n}\nvar noWorkResult$1;\nvar hasRequiredNoWorkResult$1;\nfunction requireNoWorkResult$1() {\n  if (hasRequiredNoWorkResult$1) return noWorkResult$1;\n  hasRequiredNoWorkResult$1 = 1;\n  let MapGenerator = requireMapGenerator$1();\n  let stringify = requireStringify$1();\n  let warnOnce2 = requireWarnOnce$1();\n  let parse = requireParse$1();\n  const Result = requireResult$1();\n  class NoWorkResult {\n    constructor(processor2, css, opts) {\n      css = css.toString();\n      this.stringified = false;\n      this._processor = processor2;\n      this._css = css;\n      this._opts = opts;\n      this._map = void 0;\n      let root2;\n      let str = stringify;\n      this.result = new Result(this._processor, root2, this._opts);\n      this.result.css = css;\n      let self2 = this;\n      Object.defineProperty(this.result, \"root\", {\n        get() {\n          return self2.root;\n        }\n      });\n      let map = new MapGenerator(str, root2, 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    async() {\n      if (this.error) return Promise.reject(this.error);\n      return Promise.resolve(this.result);\n    }\n    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    sync() {\n      if (this.error) throw this.error;\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (!(\"from\" in this._opts)) {\n          warnOnce2(\n            \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n          );\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this._css;\n    }\n    warnings() {\n      return [];\n    }\n    get content() {\n      return this.result.css;\n    }\n    get css() {\n      return this.result.css;\n    }\n    get map() {\n      return this.result.map;\n    }\n    get messages() {\n      return [];\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      if (this._root) {\n        return this._root;\n      }\n      let root2;\n      let parser2 = parse;\n      try {\n        root2 = parser2(this._css, this._opts);\n      } catch (error) {\n        this.error = error;\n      }\n      if (this.error) {\n        throw this.error;\n      } else {\n        this._root = root2;\n        return root2;\n      }\n    }\n    get [Symbol.toStringTag]() {\n      return \"NoWorkResult\";\n    }\n  }\n  noWorkResult$1 = NoWorkResult;\n  NoWorkResult.default = NoWorkResult;\n  return noWorkResult$1;\n}\nvar processor$1;\nvar hasRequiredProcessor$1;\nfunction requireProcessor$1() {\n  if (hasRequiredProcessor$1) return processor$1;\n  hasRequiredProcessor$1 = 1;\n  let NoWorkResult = requireNoWorkResult$1();\n  let LazyResult = requireLazyResult$1();\n  let Document2 = requireDocument$1();\n  let Root = requireRoot$1();\n  class Processor {\n    constructor(plugins = []) {\n      this.version = \"8.4.38\";\n      this.plugins = this.normalize(plugins);\n    }\n    normalize(plugins) {\n      let normalized = [];\n      for (let i2 of plugins) {\n        if (i2.postcss === true) {\n          i2 = i2();\n        } else if (i2.postcss) {\n          i2 = i2.postcss;\n        }\n        if (typeof i2 === \"object\" && Array.isArray(i2.plugins)) {\n          normalized = normalized.concat(i2.plugins);\n        } else if (typeof i2 === \"object\" && i2.postcssPlugin) {\n          normalized.push(i2);\n        } else if (typeof i2 === \"function\") {\n          normalized.push(i2);\n        } else if (typeof i2 === \"object\" && (i2.parse || i2.stringify)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            throw new Error(\n              \"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\"\n            );\n          }\n        } else {\n          throw new Error(i2 + \" is not a PostCSS plugin\");\n        }\n      }\n      return normalized;\n    }\n    process(css, opts = {}) {\n      if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n        return new NoWorkResult(this, css, opts);\n      } else {\n        return new LazyResult(this, css, opts);\n      }\n    }\n    use(plugin) {\n      this.plugins = this.plugins.concat(this.normalize([plugin]));\n      return this;\n    }\n  }\n  processor$1 = Processor;\n  Processor.default = Processor;\n  Root.registerProcessor(Processor);\n  Document2.registerProcessor(Processor);\n  return processor$1;\n}\nvar fromJSON_1$1;\nvar hasRequiredFromJSON$1;\nfunction requireFromJSON$1() {\n  if (hasRequiredFromJSON$1) return fromJSON_1$1;\n  hasRequiredFromJSON$1 = 1;\n  let Declaration = requireDeclaration$1();\n  let PreviousMap = requirePreviousMap$1();\n  let Comment = requireComment$1();\n  let AtRule = requireAtRule$1();\n  let Input = requireInput$1();\n  let Root = requireRoot$1();\n  let Rule = requireRule$1();\n  function fromJSON(json, inputs) {\n    if (Array.isArray(json)) return json.map((n2) => fromJSON(n2));\n    let { inputs: ownInputs, ...defaults } = json;\n    if (ownInputs) {\n      inputs = [];\n      for (let input2 of ownInputs) {\n        let inputHydrated = { ...input2, __proto__: Input.prototype };\n        if (inputHydrated.map) {\n          inputHydrated.map = {\n            ...inputHydrated.map,\n            __proto__: PreviousMap.prototype\n          };\n        }\n        inputs.push(inputHydrated);\n      }\n    }\n    if (defaults.nodes) {\n      defaults.nodes = json.nodes.map((n2) => fromJSON(n2, inputs));\n    }\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    if (defaults.type === \"root\") {\n      return new Root(defaults);\n    } else if (defaults.type === \"decl\") {\n      return new Declaration(defaults);\n    } else if (defaults.type === \"rule\") {\n      return new Rule(defaults);\n    } else if (defaults.type === \"comment\") {\n      return new Comment(defaults);\n    } else if (defaults.type === \"atrule\") {\n      return new AtRule(defaults);\n    } else {\n      throw new Error(\"Unknown node type: \" + json.type);\n    }\n  }\n  fromJSON_1$1 = fromJSON;\n  fromJSON.default = fromJSON;\n  return fromJSON_1$1;\n}\nvar postcss_1$1;\nvar hasRequiredPostcss$1;\nfunction requirePostcss$1() {\n  if (hasRequiredPostcss$1) return postcss_1$1;\n  hasRequiredPostcss$1 = 1;\n  let CssSyntaxError = requireCssSyntaxError$1();\n  let Declaration = requireDeclaration$1();\n  let LazyResult = requireLazyResult$1();\n  let Container = requireContainer$1();\n  let Processor = requireProcessor$1();\n  let stringify = requireStringify$1();\n  let fromJSON = requireFromJSON$1();\n  let Document2 = requireDocument$1();\n  let Warning = requireWarning$1();\n  let Comment = requireComment$1();\n  let AtRule = requireAtRule$1();\n  let Result = requireResult$1();\n  let Input = requireInput$1();\n  let parse = requireParse$1();\n  let list = requireList$1();\n  let Rule = requireRule$1();\n  let Root = requireRoot$1();\n  let Node2 = requireNode$1();\n  function postcss2(...plugins) {\n    if (plugins.length === 1 && Array.isArray(plugins[0])) {\n      plugins = plugins[0];\n    }\n    return new Processor(plugins);\n  }\n  postcss2.plugin = function plugin(name, initializer) {\n    let warningPrinted = false;\n    function creator(...args) {\n      if (console && console.warn && !warningPrinted) {\n        warningPrinted = true;\n        console.warn(\n          name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"\n        );\n        if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n          console.warn(\n            name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://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    let cache;\n    Object.defineProperty(creator, \"postcss\", {\n      get() {\n        if (!cache) cache = creator();\n        return cache;\n      }\n    });\n    creator.process = function(css, processOpts, pluginOpts) {\n      return postcss2([creator(pluginOpts)]).process(css, processOpts);\n    };\n    return creator;\n  };\n  postcss2.stringify = stringify;\n  postcss2.parse = parse;\n  postcss2.fromJSON = fromJSON;\n  postcss2.list = list;\n  postcss2.comment = (defaults) => new Comment(defaults);\n  postcss2.atRule = (defaults) => new AtRule(defaults);\n  postcss2.decl = (defaults) => new Declaration(defaults);\n  postcss2.rule = (defaults) => new Rule(defaults);\n  postcss2.root = (defaults) => new Root(defaults);\n  postcss2.document = (defaults) => new Document2(defaults);\n  postcss2.CssSyntaxError = CssSyntaxError;\n  postcss2.Declaration = Declaration;\n  postcss2.Container = Container;\n  postcss2.Processor = Processor;\n  postcss2.Document = Document2;\n  postcss2.Comment = Comment;\n  postcss2.Warning = Warning;\n  postcss2.AtRule = AtRule;\n  postcss2.Result = Result;\n  postcss2.Input = Input;\n  postcss2.Rule = Rule;\n  postcss2.Root = Root;\n  postcss2.Node = Node2;\n  LazyResult.registerPostcss(postcss2);\n  postcss_1$1 = postcss2;\n  postcss2.default = postcss2;\n  return postcss_1$1;\n}\nvar postcssExports$1 = requirePostcss$1();\nconst postcss$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(postcssExports$1);\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\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 adaptCssForReplay(cssText, cache) {\n  const cachedStyle = cache == null ? void 0 : cache.stylesWithHoverClass.get(cssText);\n  if (cachedStyle) return cachedStyle;\n  let result2 = cssText;\n  try {\n    const ast = postcss$1([\n      mediaSelectorPlugin,\n      pseudoClassPlugin\n    ]).process(cssText);\n    result2 = ast.css;\n  } catch (error) {\n    console.warn(\"Failed to adapt css for replay\", error);\n  }\n  cache == null ? void 0 : cache.stylesWithHoverClass.set(cssText, result2);\n  return result2;\n}\nfunction createCache() {\n  const stylesWithHoverClass = /* @__PURE__ */ new Map();\n  return {\n    stylesWithHoverClass\n  };\n}\nconst REBUILD_TARGET_ERROR = \"rrweb-snapshot.rebuild() cannot rebuild into an unprotected browser document. Use rebuildIntoSandboxedIframe() or set UNSAFE_allowUnprotectedRebuild: true only when you accept the script-execution risk.\";\nconst SANDBOXED_IFRAME_ROOT_ERROR = \"rrweb-snapshot.createSandboxedIframe() requires root to be connected to a document before creating a sandboxed iframe.\";\nconst sandboxedRebuildDocuments = /* @__PURE__ */ new WeakSet();\nfunction isSupportedSandboxedIframe(frameElement) {\n  if (!frameElement || frameElement.tagName !== \"IFRAME\") {\n    return false;\n  }\n  if (!(\"sandbox\" in frameElement)) {\n    return false;\n  }\n  const sandboxTokens = Array.from(frameElement.sandbox);\n  return sandboxTokens.length === 1 && sandboxTokens[0] === \"allow-same-origin\";\n}\nfunction assertRebuildTargetAllowed(options) {\n  if (options.UNSAFE_allowUnprotectedRebuild) {\n    return;\n  }\n  const win = options.doc.defaultView;\n  if (!win) {\n    return;\n  }\n  if (sandboxedRebuildDocuments.has(options.doc) && isSupportedSandboxedIframe(win.frameElement)) {\n    return;\n  }\n  throw new Error(REBUILD_TARGET_ERROR);\n}\nfunction applyCssSplits(n2, cssText, hackCss, cache) {\n  const childTextNodes = [];\n  for (const scn of n2.childNodes) {\n    if (scn.type === NodeType$3.Text) {\n      childTextNodes.push(scn);\n    }\n  }\n  const cssTextSplits = cssText.split(\"/* rr_split */\");\n  while (cssTextSplits.length > 1 && cssTextSplits.length > childTextNodes.length) {\n    cssTextSplits.splice(-2, 2, cssTextSplits.slice(-2).join(\"\"));\n  }\n  let adaptedCss = \"\";\n  if (hackCss) {\n    adaptedCss = adaptCssForReplay(cssTextSplits.join(\"\"), cache);\n  }\n  let startIndex = 0;\n  for (let i2 = 0; i2 < childTextNodes.length; i2++) {\n    if (i2 === cssTextSplits.length) {\n      break;\n    }\n    const childTextNode = childTextNodes[i2];\n    if (!hackCss) {\n      childTextNode.textContent = cssTextSplits[i2];\n    } else if (i2 < cssTextSplits.length - 1) {\n      let endIndex = startIndex;\n      let endSearch = cssTextSplits[i2 + 1].length;\n      endSearch = Math.min(endSearch, 30);\n      let found = false;\n      for (; endSearch > 2; endSearch--) {\n        const searchBit = cssTextSplits[i2 + 1].substring(0, endSearch);\n        const searchIndex = adaptedCss.substring(startIndex).indexOf(searchBit);\n        found = searchIndex !== -1;\n        if (found) {\n          endIndex += searchIndex;\n          break;\n        }\n      }\n      if (!found) {\n        endIndex += cssTextSplits[i2].length;\n      }\n      childTextNode.textContent = adaptedCss.substring(startIndex, endIndex);\n      startIndex = endIndex;\n    } else {\n      childTextNode.textContent = adaptedCss.substring(startIndex);\n    }\n  }\n}\nfunction buildStyleNode(n2, styleEl, cssText, options) {\n  const { doc, hackCss, cache } = options;\n  if (n2.childNodes.length) {\n    applyCssSplits(n2, cssText, hackCss, cache);\n  } else {\n    if (hackCss) {\n      cssText = adaptCssForReplay(cssText, cache);\n    }\n    styleEl.appendChild(doc.createTextNode(cssText));\n  }\n}\nfunction buildNode(n2, options) {\n  var _a2;\n  const { doc, hackCss, cache } = options;\n  switch (n2.type) {\n    case NodeType$3.Document:\n      return doc.implementation.createDocument(null, \"\", null);\n    case NodeType$3.DocumentType:\n      return doc.implementation.createDocumentType(\n        n2.name || \"html\",\n        n2.publicId,\n        n2.systemId\n      );\n    case NodeType$3.Element: {\n      const tagName = getTagName(n2);\n      let node2;\n      if (n2.isSVG) {\n        node2 = 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          ((_a2 = doc.defaultView) == null ? void 0 : _a2.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        node2 = 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        if (typeof value !== \"string\") ;\n        else if (tagName === \"style\" && name === \"_cssText\") {\n          buildStyleNode(n2, node2, value, options);\n          continue;\n        } else if (tagName === \"textarea\" && name === \"value\") {\n          node2.appendChild(doc.createTextNode(value));\n          n2.childNodes = [];\n          continue;\n        }\n        try {\n          if (n2.isSVG && name === \"xlink:href\") {\n            node2.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            node2.setAttribute(\"_\" + name, value.toString());\n          } else if (tagName === \"meta\" && n2.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n            node2.setAttribute(\"csp-content\", value.toString());\n            continue;\n          } else if (tagName === \"link\" && (n2.attributes.rel === \"preload\" && n2.attributes.as === \"script\" || 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            node2.setAttribute(\n              \"rrweb-original-srcset\",\n              n2.attributes.srcset\n            );\n          } else {\n            node2.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 = node2.getContext(\"2d\");\n            if (ctx) {\n              ctx.drawImage(image, 0, 0, image.width, image.height);\n            }\n          };\n          image.src = value.toString();\n          if (node2.RRNodeType)\n            node2.rr_dataURL = value.toString();\n        } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n          const image = node2;\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          node2.style.setProperty(\"width\", value.toString());\n        } else if (name === \"rr_height\") {\n          node2.style.setProperty(\"height\", value.toString());\n        } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n          node2.currentTime = value;\n        } else if (name === \"rr_mediaState\") {\n          switch (value) {\n            case \"played\":\n              node2.play().catch((e2) => console.warn(\"media playback error\", e2));\n              break;\n            case \"paused\":\n              node2.pause();\n              break;\n          }\n        } else if (name === \"rr_mediaPlaybackRate\" && typeof value === \"number\") {\n          node2.playbackRate = value;\n        } else if (name === \"rr_mediaMuted\" && typeof value === \"boolean\") {\n          node2.muted = value;\n        } else if (name === \"rr_mediaLoop\" && typeof value === \"boolean\") {\n          node2.loop = value;\n        } else if (name === \"rr_mediaVolume\" && typeof value === \"number\") {\n          node2.volume = value;\n        } else if (name === \"rr_open_mode\") {\n          node2.setAttribute(\n            \"rr_open_mode\",\n            value\n          );\n        }\n      }\n      if (n2.isShadowHost) {\n        if (!node2.shadowRoot) {\n          node2.attachShadow({ mode: \"open\" });\n        } else {\n          while (node2.shadowRoot.firstChild) {\n            node2.shadowRoot.removeChild(node2.shadowRoot.firstChild);\n          }\n        }\n      }\n      return node2;\n    }\n    case NodeType$3.Text:\n      if (n2.isStyle && hackCss) {\n        return doc.createTextNode(adaptCssForReplay(n2.textContent, cache));\n      }\n      return doc.createTextNode(n2.textContent);\n    case NodeType$3.CDATA:\n      return doc.createCDATASection(n2.textContent);\n    case NodeType$3.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 node2 = buildNode(n2, { doc, hackCss, cache });\n  if (!node2) {\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$3.Document) {\n    doc.close();\n    doc.open();\n    if (n2.compatMode === \"BackCompat\" && n2.childNodes && n2.childNodes[0].type !== NodeType$3.DocumentType) {\n      if (n2.childNodes[0].type === NodeType$3.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    node2 = doc;\n  }\n  mirror2.add(node2, n2);\n  if ((n2.type === NodeType$3.Document || n2.type === NodeType$3.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(node2) && node2.shadowRoot) {\n        node2.shadowRoot.appendChild(childNode);\n      } else if (n2.type === NodeType$3.Document && childN.type == NodeType$3.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          node2.appendChild(childNode);\n          htmlElement.appendChild(body);\n        } else {\n          node2.appendChild(childNode);\n        }\n      } else {\n        node2.appendChild(childNode);\n      }\n      if (afterAppend) {\n        afterAppend(childNode, childN.id);\n      }\n    }\n  }\n  return node2;\n}\nfunction visit(mirror2, onVisit) {\n  function walk(node2) {\n    onVisit(node2);\n  }\n  for (const id of mirror2.getIds()) {\n    if (mirror2.has(id)) {\n      walk(mirror2.getNode(id));\n    }\n  }\n}\nfunction handleScroll(node2, mirror2) {\n  const n2 = mirror2.getMeta(node2);\n  if ((n2 == null ? void 0 : n2.type) !== NodeType$3.Element) {\n    return;\n  }\n  const el = node2;\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  assertRebuildTargetAllowed(options);\n  const {\n    doc,\n    onVisit,\n    hackCss = true,\n    afterAppend,\n    cache,\n    mirror: mirror2 = new Mirror()\n  } = options;\n  const node2 = 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 node2;\n}\nfunction createSandboxedIframe(options) {\n  var _a2;\n  if (!options.root.isConnected) {\n    throw new Error(SANDBOXED_IFRAME_ROOT_ERROR);\n  }\n  const iframe = options.root.ownerDocument.createElement(\"iframe\");\n  for (const [name, value] of Object.entries(options.iframeAttributes || {})) {\n    if (name === \"sandbox\") {\n      continue;\n    }\n    iframe.setAttribute(name, value);\n  }\n  iframe.setAttribute(\"sandbox\", \"allow-same-origin\");\n  options.root.appendChild(iframe);\n  const doc = iframe.contentDocument;\n  if (!doc || !iframe.contentWindow) {\n    (_a2 = iframe.parentNode) == null ? void 0 : _a2.removeChild(iframe);\n    throw new Error(SANDBOXED_IFRAME_ROOT_ERROR);\n  }\n  sandboxedRebuildDocuments.add(doc);\n  return iframe;\n}\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 __defProp22 = Object.defineProperty;\nvar __defNormalProp22 = (obj, key, value) => key in obj ? __defProp22(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField22 = (obj, key, value) => __defNormalProp22(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) ;\nlet Mirror$1 = class Mirror2 {\n  constructor() {\n    __publicField22(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField22(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    var _a2;\n    if (!n2) return -1;\n    const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.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(node2) {\n    return this.nodeMetaMap.has(node2);\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 getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nfunction getAugmentedNamespace(n2) {\n  if (n2.__esModule) return n2;\n  var f2 = n2.default;\n  if (typeof f2 == \"function\") {\n    var a2 = function a22() {\n      if (this instanceof a22) {\n        return Reflect.construct(f2, arguments, this.constructor);\n      }\n      return f2.apply(this, arguments);\n    };\n    a2.prototype = f2.prototype;\n  } else a2 = {};\n  Object.defineProperty(a2, \"__esModule\", { value: true });\n  Object.keys(n2).forEach(function(k) {\n    var d = Object.getOwnPropertyDescriptor(n2, k);\n    Object.defineProperty(a2, k, d.get ? d : {\n      enumerable: true,\n      get: function() {\n        return n2[k];\n      }\n    });\n  });\n  return a2;\n}\nvar picocolors_browser = { exports: {} };\nvar hasRequiredPicocolors_browser;\nfunction requirePicocolors_browser() {\n  if (hasRequiredPicocolors_browser) return picocolors_browser.exports;\n  hasRequiredPicocolors_browser = 1;\n  var x = String;\n  var create = function() {\n    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 };\n  };\n  picocolors_browser.exports = create();\n  picocolors_browser.exports.createColors = create;\n  return picocolors_browser.exports;\n}\nconst __viteBrowserExternal = {};\nconst __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  default: __viteBrowserExternal\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst require$$2 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);\nvar cssSyntaxError;\nvar hasRequiredCssSyntaxError;\nfunction requireCssSyntaxError() {\n  if (hasRequiredCssSyntaxError) return cssSyntaxError;\n  hasRequiredCssSyntaxError = 1;\n  let pico = /* @__PURE__ */ requirePicocolors_browser();\n  let terminalHighlight = require$$2;\n  class CssSyntaxError extends Error {\n    constructor(message, line, column, source, file, plugin) {\n      super(message);\n      this.name = \"CssSyntaxError\";\n      this.reason = message;\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      this.setMessage();\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, CssSyntaxError);\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    showSourceCode(color) {\n      if (!this.source) return \"\";\n      let css = this.source;\n      if (color == null) color = pico.isColorSupported;\n      if (terminalHighlight) {\n        if (color) css = terminalHighlight(css);\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      let mark, aside;\n      if (color) {\n        let { bold, gray, red } = pico.createColors(true);\n        mark = (text) => bold(red(text));\n        aside = (text) => gray(text);\n      } else {\n        mark = aside = (str) => str;\n      }\n      return lines.slice(start, end).map((line, index2) => {\n        let number = start + 1 + index2;\n        let gutter = \" \" + (\" \" + number).slice(-maxWidth) + \" | \";\n        if (number === this.line) {\n          let spacing = aside(gutter.replace(/\\d/g, \" \")) + line.slice(0, this.column - 1).replace(/[^\\t]/g, \" \");\n          return mark(\">\") + aside(gutter) + line + \"\\n \" + spacing + mark(\"^\");\n        }\n        return \" \" + aside(gutter) + line;\n      }).join(\"\\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  cssSyntaxError = CssSyntaxError;\n  CssSyntaxError.default = CssSyntaxError;\n  return cssSyntaxError;\n}\nvar symbols = {};\nvar hasRequiredSymbols;\nfunction requireSymbols() {\n  if (hasRequiredSymbols) return symbols;\n  hasRequiredSymbols = 1;\n  symbols.isClean = Symbol(\"isClean\");\n  symbols.my = Symbol(\"my\");\n  return symbols;\n}\nvar stringifier;\nvar hasRequiredStringifier;\nfunction requireStringifier() {\n  if (hasRequiredStringifier) return stringifier;\n  hasRequiredStringifier = 1;\n  const 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  function capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n  }\n  class Stringifier {\n    constructor(builder) {\n      this.builder = builder;\n    }\n    atrule(node2, semicolon) {\n      let name = \"@\" + node2.name;\n      let params = node2.params ? this.rawValue(node2, \"params\") : \"\";\n      if (typeof node2.raws.afterName !== \"undefined\") {\n        name += node2.raws.afterName;\n      } else if (params) {\n        name += \" \";\n      }\n      if (node2.nodes) {\n        this.block(node2, name + params);\n      } else {\n        let end = (node2.raws.between || \"\") + (semicolon ? \";\" : \"\");\n        this.builder(name + params + end, node2);\n      }\n    }\n    beforeAfter(node2, detect) {\n      let value;\n      if (node2.type === \"decl\") {\n        value = this.raw(node2, null, \"beforeDecl\");\n      } else if (node2.type === \"comment\") {\n        value = this.raw(node2, null, \"beforeComment\");\n      } else if (detect === \"before\") {\n        value = this.raw(node2, null, \"beforeRule\");\n      } else {\n        value = this.raw(node2, null, \"beforeClose\");\n      }\n      let buf = node2.parent;\n      let depth = 0;\n      while (buf && buf.type !== \"root\") {\n        depth += 1;\n        buf = buf.parent;\n      }\n      if (value.includes(\"\\n\")) {\n        let indent = this.raw(node2, null, \"indent\");\n        if (indent.length) {\n          for (let step = 0; step < depth; step++) value += indent;\n        }\n      }\n      return value;\n    }\n    block(node2, start) {\n      let between = this.raw(node2, \"between\", \"beforeOpen\");\n      this.builder(start + between + \"{\", node2, \"start\");\n      let after;\n      if (node2.nodes && node2.nodes.length) {\n        this.body(node2);\n        after = this.raw(node2, \"after\");\n      } else {\n        after = this.raw(node2, \"after\", \"emptyBody\");\n      }\n      if (after) this.builder(after);\n      this.builder(\"}\", node2, \"end\");\n    }\n    body(node2) {\n      let last = node2.nodes.length - 1;\n      while (last > 0) {\n        if (node2.nodes[last].type !== \"comment\") break;\n        last -= 1;\n      }\n      let semicolon = this.raw(node2, \"semicolon\");\n      for (let i2 = 0; i2 < node2.nodes.length; i2++) {\n        let child = node2.nodes[i2];\n        let before = this.raw(child, \"before\");\n        if (before) this.builder(before);\n        this.stringify(child, last !== i2 || semicolon);\n      }\n    }\n    comment(node2) {\n      let left = this.raw(node2, \"left\", \"commentLeft\");\n      let right = this.raw(node2, \"right\", \"commentRight\");\n      this.builder(\"/*\" + left + node2.text + right + \"*/\", node2);\n    }\n    decl(node2, semicolon) {\n      let between = this.raw(node2, \"between\", \"colon\");\n      let string = node2.prop + between + this.rawValue(node2, \"value\");\n      if (node2.important) {\n        string += node2.raws.important || \" !important\";\n      }\n      if (semicolon) string += \";\";\n      this.builder(string, node2);\n    }\n    document(node2) {\n      this.body(node2);\n    }\n    raw(node2, own, detect) {\n      let value;\n      if (!detect) detect = own;\n      if (own) {\n        value = node2.raws[own];\n        if (typeof value !== \"undefined\") return value;\n      }\n      let parent = node2.parent;\n      if (detect === \"before\") {\n        if (!parent || parent.type === \"root\" && parent.first === node2) {\n          return \"\";\n        }\n        if (parent && parent.type === \"document\") {\n          return \"\";\n        }\n      }\n      if (!parent) return DEFAULT_RAW[detect];\n      let root2 = node2.root();\n      if (!root2.rawCache) root2.rawCache = {};\n      if (typeof root2.rawCache[detect] !== \"undefined\") {\n        return root2.rawCache[detect];\n      }\n      if (detect === \"before\" || detect === \"after\") {\n        return this.beforeAfter(node2, detect);\n      } else {\n        let method = \"raw\" + capitalize(detect);\n        if (this[method]) {\n          value = this[method](root2, node2);\n        } else {\n          root2.walk((i2) => {\n            value = i2.raws[own];\n            if (typeof value !== \"undefined\") return false;\n          });\n        }\n      }\n      if (typeof value === \"undefined\") value = DEFAULT_RAW[detect];\n      root2.rawCache[detect] = value;\n      return value;\n    }\n    rawBeforeClose(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length > 0) {\n          if (typeof i2.raws.after !== \"undefined\") {\n            value = i2.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    rawBeforeComment(root2, node2) {\n      let value;\n      root2.walkComments((i2) => {\n        if (typeof i2.raws.before !== \"undefined\") {\n          value = i2.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(node2, null, \"beforeDecl\");\n      } else if (value) {\n        value = value.replace(/\\S/g, \"\");\n      }\n      return value;\n    }\n    rawBeforeDecl(root2, node2) {\n      let value;\n      root2.walkDecls((i2) => {\n        if (typeof i2.raws.before !== \"undefined\") {\n          value = i2.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(node2, null, \"beforeRule\");\n      } else if (value) {\n        value = value.replace(/\\S/g, \"\");\n      }\n      return value;\n    }\n    rawBeforeOpen(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.type !== \"decl\") {\n          value = i2.raws.between;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawBeforeRule(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && (i2.parent !== root2 || root2.first !== i2)) {\n          if (typeof i2.raws.before !== \"undefined\") {\n            value = i2.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    rawColon(root2) {\n      let value;\n      root2.walkDecls((i2) => {\n        if (typeof i2.raws.between !== \"undefined\") {\n          value = i2.raws.between.replace(/[^\\s:]/g, \"\");\n          return false;\n        }\n      });\n      return value;\n    }\n    rawEmptyBody(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length === 0) {\n          value = i2.raws.after;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawIndent(root2) {\n      if (root2.raws.indent) return root2.raws.indent;\n      let value;\n      root2.walk((i2) => {\n        let p = i2.parent;\n        if (p && p !== root2 && p.parent && p.parent === root2) {\n          if (typeof i2.raws.before !== \"undefined\") {\n            let parts = i2.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    rawSemicolon(root2) {\n      let value;\n      root2.walk((i2) => {\n        if (i2.nodes && i2.nodes.length && i2.last.type === \"decl\") {\n          value = i2.raws.semicolon;\n          if (typeof value !== \"undefined\") return false;\n        }\n      });\n      return value;\n    }\n    rawValue(node2, prop) {\n      let value = node2[prop];\n      let raw = node2.raws[prop];\n      if (raw && raw.value === value) {\n        return raw.raw;\n      }\n      return value;\n    }\n    root(node2) {\n      this.body(node2);\n      if (node2.raws.after) this.builder(node2.raws.after);\n    }\n    rule(node2) {\n      this.block(node2, this.rawValue(node2, \"selector\"));\n      if (node2.raws.ownSemicolon) {\n        this.builder(node2.raws.ownSemicolon, node2, \"end\");\n      }\n    }\n    stringify(node2, semicolon) {\n      if (!this[node2.type]) {\n        throw new Error(\n          \"Unknown AST node type \" + node2.type + \". Maybe you need to change PostCSS stringifier.\"\n        );\n      }\n      this[node2.type](node2, semicolon);\n    }\n  }\n  stringifier = Stringifier;\n  Stringifier.default = Stringifier;\n  return stringifier;\n}\nvar stringify_1;\nvar hasRequiredStringify;\nfunction requireStringify() {\n  if (hasRequiredStringify) return stringify_1;\n  hasRequiredStringify = 1;\n  let Stringifier = requireStringifier();\n  function stringify(node2, builder) {\n    let str = new Stringifier(builder);\n    str.stringify(node2);\n  }\n  stringify_1 = stringify;\n  stringify.default = stringify;\n  return stringify_1;\n}\nvar node;\nvar hasRequiredNode;\nfunction requireNode() {\n  if (hasRequiredNode) return node;\n  hasRequiredNode = 1;\n  let { isClean, my } = requireSymbols();\n  let CssSyntaxError = requireCssSyntaxError();\n  let Stringifier = requireStringifier();\n  let stringify = requireStringify();\n  function cloneNode(obj, parent) {\n    let cloned = new obj.constructor();\n    for (let i2 in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, i2)) {\n        continue;\n      }\n      if (i2 === \"proxyCache\") continue;\n      let value = obj[i2];\n      let type = typeof value;\n      if (i2 === \"parent\" && type === \"object\") {\n        if (parent) cloned[i2] = parent;\n      } else if (i2 === \"source\") {\n        cloned[i2] = value;\n      } else if (Array.isArray(value)) {\n        cloned[i2] = value.map((j) => cloneNode(j, cloned));\n      } else {\n        if (type === \"object\" && value !== null) value = cloneNode(value);\n        cloned[i2] = value;\n      }\n    }\n    return cloned;\n  }\n  class Node2 {\n    constructor(defaults = {}) {\n      this.raws = {};\n      this[isClean] = false;\n      this[my] = true;\n      for (let name in defaults) {\n        if (name === \"nodes\") {\n          this.nodes = [];\n          for (let node2 of defaults[name]) {\n            if (typeof node2.clone === \"function\") {\n              this.append(node2.clone());\n            } else {\n              this.append(node2);\n            }\n          }\n        } else {\n          this[name] = defaults[name];\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 s2 = this.source;\n        error.stack = error.stack.replace(\n          /\\n\\s{4}at /,\n          `$&${s2.input.from}:${s2.start.line}:${s2.start.column}$&`\n        );\n      }\n      return error;\n    }\n    after(add) {\n      this.parent.insertAfter(this, add);\n      return this;\n    }\n    assign(overrides = {}) {\n      for (let name in overrides) {\n        this[name] = overrides[name];\n      }\n      return this;\n    }\n    before(add) {\n      this.parent.insertBefore(this, add);\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      delete this.raws.before;\n      delete this.raws.after;\n      if (!keepBetween) delete this.raws.between;\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    cloneAfter(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertAfter(this, cloned);\n      return cloned;\n    }\n    cloneBefore(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertBefore(this, cloned);\n      return cloned;\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    getProxyProcessor() {\n      return {\n        get(node2, prop) {\n          if (prop === \"proxyOf\") {\n            return node2;\n          } else if (prop === \"root\") {\n            return () => node2.root().toProxy();\n          } else {\n            return node2[prop];\n          }\n        },\n        set(node2, prop, value) {\n          if (node2[prop] === value) return true;\n          node2[prop] = value;\n          if (prop === \"prop\" || prop === \"value\" || prop === \"name\" || prop === \"params\" || prop === \"important\" || /* c8 ignore next */\n          prop === \"text\") {\n            node2.markDirty();\n          }\n          return true;\n        }\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    next() {\n      if (!this.parent) return void 0;\n      let index2 = this.parent.index(this);\n      return this.parent.nodes[index2 + 1];\n    }\n    positionBy(opts, stringRepresentation) {\n      let pos = this.source.start;\n      if (opts.index) {\n        pos = this.positionInside(opts.index, stringRepresentation);\n      } else if (opts.word) {\n        stringRepresentation = this.toString();\n        let index2 = stringRepresentation.indexOf(opts.word);\n        if (index2 !== -1) pos = this.positionInside(index2, stringRepresentation);\n      }\n      return pos;\n    }\n    positionInside(index2, stringRepresentation) {\n      let string = stringRepresentation || this.toString();\n      let column = this.source.start.column;\n      let line = this.source.start.line;\n      for (let i2 = 0; i2 < index2; i2++) {\n        if (string[i2] === \"\\n\") {\n          column = 1;\n          line += 1;\n        } else {\n          column += 1;\n        }\n      }\n      return { column, line };\n    }\n    prev() {\n      if (!this.parent) return void 0;\n      let index2 = this.parent.index(this);\n      return this.parent.nodes[index2 - 1];\n    }\n    rangeBy(opts) {\n      let start = {\n        column: this.source.start.column,\n        line: this.source.start.line\n      };\n      let end = this.source.end ? {\n        column: this.source.end.column + 1,\n        line: this.source.end.line\n      } : {\n        column: start.column + 1,\n        line: start.line\n      };\n      if (opts.word) {\n        let stringRepresentation = this.toString();\n        let index2 = stringRepresentation.indexOf(opts.word);\n        if (index2 !== -1) {\n          start = this.positionInside(index2, stringRepresentation);\n          end = this.positionInside(index2 + opts.word.length, stringRepresentation);\n        }\n      } else {\n        if (opts.start) {\n          start = {\n            column: opts.start.column,\n            line: opts.start.line\n          };\n        } else if (opts.index) {\n          start = this.positionInside(opts.index);\n        }\n        if (opts.end) {\n          end = {\n            column: opts.end.column,\n            line: opts.end.line\n          };\n        } else if (typeof opts.endIndex === \"number\") {\n          end = this.positionInside(opts.endIndex);\n        } else if (opts.index) {\n          end = this.positionInside(opts.index + 1);\n        }\n      }\n      if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n        end = { column: start.column + 1, line: start.line };\n      }\n      return { end, start };\n    }\n    raw(prop, defaultType) {\n      let str = new Stringifier();\n      return str.raw(this, prop, defaultType);\n    }\n    remove() {\n      if (this.parent) {\n        this.parent.removeChild(this);\n      }\n      this.parent = void 0;\n      return this;\n    }\n    replaceWith(...nodes) {\n      if (this.parent) {\n        let bookmark = this;\n        let foundSelf = false;\n        for (let node2 of nodes) {\n          if (node2 === this) {\n            foundSelf = true;\n          } else if (foundSelf) {\n            this.parent.insertAfter(bookmark, node2);\n            bookmark = node2;\n          } else {\n            this.parent.insertBefore(bookmark, node2);\n          }\n        }\n        if (!foundSelf) {\n          this.remove();\n        }\n      }\n      return this;\n    }\n    root() {\n      let result2 = this;\n      while (result2.parent && result2.parent.type !== \"document\") {\n        result2 = result2.parent;\n      }\n      return result2;\n    }\n    toJSON(_, inputs) {\n      let fixed = {};\n      let emitInputs = inputs == null;\n      inputs = inputs || /* @__PURE__ */ new Map();\n      let inputsNextIndex = 0;\n      for (let name in this) {\n        if (!Object.prototype.hasOwnProperty.call(this, name)) {\n          continue;\n        }\n        if (name === \"parent\" || name === \"proxyCache\") continue;\n        let value = this[name];\n        if (Array.isArray(value)) {\n          fixed[name] = value.map((i2) => {\n            if (typeof i2 === \"object\" && i2.toJSON) {\n              return i2.toJSON(null, inputs);\n            } else {\n              return i2;\n            }\n          });\n        } else if (typeof value === \"object\" && value.toJSON) {\n          fixed[name] = value.toJSON(null, inputs);\n        } else if (name === \"source\") {\n          let inputId = inputs.get(value.input);\n          if (inputId == null) {\n            inputId = inputsNextIndex;\n            inputs.set(value.input, inputsNextIndex);\n            inputsNextIndex++;\n          }\n          fixed[name] = {\n            end: value.end,\n            inputId,\n            start: value.start\n          };\n        } else {\n          fixed[name] = value;\n        }\n      }\n      if (emitInputs) {\n        fixed.inputs = [...inputs.keys()].map((input2) => input2.toJSON());\n      }\n      return fixed;\n    }\n    toProxy() {\n      if (!this.proxyCache) {\n        this.proxyCache = new Proxy(this, this.getProxyProcessor());\n      }\n      return this.proxyCache;\n    }\n    toString(stringifier2 = stringify) {\n      if (stringifier2.stringify) stringifier2 = stringifier2.stringify;\n      let result2 = \"\";\n      stringifier2(this, (i2) => {\n        result2 += i2;\n      });\n      return result2;\n    }\n    warn(result2, text, opts) {\n      let data = { node: this };\n      for (let i2 in opts) data[i2] = opts[i2];\n      return result2.warn(text, data);\n    }\n    get proxyOf() {\n      return this;\n    }\n  }\n  node = Node2;\n  Node2.default = Node2;\n  return node;\n}\nvar declaration;\nvar hasRequiredDeclaration;\nfunction requireDeclaration() {\n  if (hasRequiredDeclaration) return declaration;\n  hasRequiredDeclaration = 1;\n  let Node2 = requireNode();\n  class Declaration extends Node2 {\n    constructor(defaults) {\n      if (defaults && typeof defaults.value !== \"undefined\" && typeof defaults.value !== \"string\") {\n        defaults = { ...defaults, value: String(defaults.value) };\n      }\n      super(defaults);\n      this.type = \"decl\";\n    }\n    get variable() {\n      return this.prop.startsWith(\"--\") || this.prop[0] === \"$\";\n    }\n  }\n  declaration = Declaration;\n  Declaration.default = Declaration;\n  return declaration;\n}\nvar nonSecure;\nvar hasRequiredNonSecure;\nfunction requireNonSecure() {\n  if (hasRequiredNonSecure) return nonSecure;\n  hasRequiredNonSecure = 1;\n  let urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\n  let customAlphabet = (alphabet, defaultSize = 21) => {\n    return (size = defaultSize) => {\n      let id = \"\";\n      let i2 = size;\n      while (i2--) {\n        id += alphabet[Math.random() * alphabet.length | 0];\n      }\n      return id;\n    };\n  };\n  let nanoid = (size = 21) => {\n    let id = \"\";\n    let i2 = size;\n    while (i2--) {\n      id += urlAlphabet[Math.random() * 64 | 0];\n    }\n    return id;\n  };\n  nonSecure = { nanoid, customAlphabet };\n  return nonSecure;\n}\nvar previousMap;\nvar hasRequiredPreviousMap;\nfunction requirePreviousMap() {\n  if (hasRequiredPreviousMap) return previousMap;\n  hasRequiredPreviousMap = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2;\n  let { existsSync, readFileSync } = require$$2;\n  let { dirname, join } = require$$2;\n  function fromBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str, \"base64\").toString();\n    } else {\n      return window.atob(str);\n    }\n  }\n  class PreviousMap {\n    constructor(css, opts) {\n      if (opts.map === false) return;\n      this.loadAnnotation(css);\n      this.inline = this.startWith(this.annotation, \"data:\");\n      let prev = opts.map ? opts.map.prev : void 0;\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    consumer() {\n      if (!this.consumerCache) {\n        this.consumerCache = new SourceMapConsumer(this.text);\n      }\n      return this.consumerCache;\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      if (charsetUri.test(text) || uri.test(text)) {\n        return decodeURIComponent(text.substr(RegExp.lastMatch.length));\n      }\n      if (baseCharsetUri.test(text) || baseUri.test(text)) {\n        return fromBase64(text.substr(RegExp.lastMatch.length));\n      }\n      let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n      throw new Error(\"Unsupported source map encoding \" + encoding);\n    }\n    getAnnotationURL(sourceMapString) {\n      return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, \"\").trim();\n    }\n    isMap(map) {\n      if (typeof map !== \"object\") return false;\n      return typeof map.mappings === \"string\" || typeof map._mappings === \"string\" || Array.isArray(map.sections);\n    }\n    loadAnnotation(css) {\n      let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n      if (!comments) return;\n      let start = css.lastIndexOf(comments.pop());\n      let end = css.indexOf(\"*/\", start);\n      if (start > -1 && end > -1) {\n        this.annotation = this.getAnnotationURL(css.substring(start, end));\n      }\n    }\n    loadFile(path) {\n      this.root = dirname(path);\n      if (existsSync(path)) {\n        this.mapFile = path;\n        return readFileSync(path, \"utf-8\").toString().trim();\n      }\n    }\n    loadMap(file, prev) {\n      if (prev === false) return false;\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);\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        return this.loadFile(map);\n      }\n    }\n    startWith(string, start) {\n      if (!string) return false;\n      return string.substr(0, start.length) === start;\n    }\n    withContent() {\n      return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    }\n  }\n  previousMap = PreviousMap;\n  PreviousMap.default = PreviousMap;\n  return previousMap;\n}\nvar input;\nvar hasRequiredInput;\nfunction requireInput() {\n  if (hasRequiredInput) return input;\n  hasRequiredInput = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2;\n  let { fileURLToPath, pathToFileURL } = require$$2;\n  let { isAbsolute, resolve } = require$$2;\n  let { nanoid } = /* @__PURE__ */ requireNonSecure();\n  let terminalHighlight = require$$2;\n  let CssSyntaxError = requireCssSyntaxError();\n  let PreviousMap = requirePreviousMap();\n  let fromOffsetCache = Symbol(\"fromOffsetCache\");\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(resolve && isAbsolute);\n  class Input {\n    constructor(css, opts = {}) {\n      if (css === null || typeof css === \"undefined\" || typeof css === \"object\" && !css.toString) {\n        throw new Error(`PostCSS received ${css} instead of CSS string`);\n      }\n      this.css = css.toString();\n      if (this.css[0] === \"\\uFEFF\" || this.css[0] === \"￾\") {\n        this.hasBOM = true;\n        this.css = this.css.slice(1);\n      } else {\n        this.hasBOM = false;\n      }\n      if (opts.from) {\n        if (!pathAvailable || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n          this.file = opts.from;\n        } else {\n          this.file = resolve(opts.from);\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      if (!this.file) {\n        this.id = \"<input css \" + nanoid(6) + \">\";\n      }\n      if (this.map) this.map.file = this.from;\n    }\n    error(message, line, column, opts = {}) {\n      let result2, endLine, endColumn;\n      if (line && typeof line === \"object\") {\n        let start = line;\n        let end = column;\n        if (typeof start.offset === \"number\") {\n          let pos = this.fromOffset(start.offset);\n          line = pos.line;\n          column = pos.col;\n        } else {\n          line = start.line;\n          column = start.column;\n        }\n        if (typeof end.offset === \"number\") {\n          let pos = this.fromOffset(end.offset);\n          endLine = pos.line;\n          endColumn = pos.col;\n        } else {\n          endLine = end.line;\n          endColumn = end.column;\n        }\n      } else if (!column) {\n        let pos = this.fromOffset(line);\n        line = pos.line;\n        column = pos.col;\n      }\n      let origin = this.origin(line, column, endLine, endColumn);\n      if (origin) {\n        result2 = new CssSyntaxError(\n          message,\n          origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line },\n          origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine },\n          origin.source,\n          origin.file,\n          opts.plugin\n        );\n      } else {\n        result2 = new CssSyntaxError(\n          message,\n          endLine === void 0 ? line : { column, line },\n          endLine === void 0 ? column : { column: endColumn, line: endLine },\n          this.css,\n          this.file,\n          opts.plugin\n        );\n      }\n      result2.input = { column, endColumn, endLine, line, source: this.css };\n      if (this.file) {\n        if (pathToFileURL) {\n          result2.input.url = pathToFileURL(this.file).toString();\n        }\n        result2.input.file = this.file;\n      }\n      return result2;\n    }\n    fromOffset(offset) {\n      let lastLine, lineToIndex;\n      if (!this[fromOffsetCache]) {\n        let lines = this.css.split(\"\\n\");\n        lineToIndex = new Array(lines.length);\n        let prevIndex = 0;\n        for (let i2 = 0, l2 = lines.length; i2 < l2; i2++) {\n          lineToIndex[i2] = prevIndex;\n          prevIndex += lines[i2].length + 1;\n        }\n        this[fromOffsetCache] = lineToIndex;\n      } else {\n        lineToIndex = this[fromOffsetCache];\n      }\n      lastLine = lineToIndex[lineToIndex.length - 1];\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    mapResolve(file) {\n      if (/^\\w+:\\/\\//.test(file)) {\n        return file;\n      }\n      return resolve(this.map.consumer().sourceRoot || this.map.root || \".\", file);\n    }\n    origin(line, column, endLine, endColumn) {\n      if (!this.map) return false;\n      let consumer = this.map.consumer();\n      let from = consumer.originalPositionFor({ column, line });\n      if (!from.source) return false;\n      let to;\n      if (typeof endLine === \"number\") {\n        to = consumer.originalPositionFor({ column: endColumn, line: endLine });\n      }\n      let fromUrl;\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      let result2 = {\n        column: from.column,\n        endColumn: to && to.column,\n        endLine: to && to.line,\n        line: from.line,\n        url: fromUrl.toString()\n      };\n      if (fromUrl.protocol === \"file:\") {\n        if (fileURLToPath) {\n          result2.file = fileURLToPath(fromUrl);\n        } else {\n          throw new Error(`file: protocol is not available in this PostCSS build`);\n        }\n      }\n      let source = consumer.sourceContentFor(from.source);\n      if (source) result2.source = source;\n      return result2;\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 = void 0;\n        }\n      }\n      return json;\n    }\n    get from() {\n      return this.file || this.id;\n    }\n  }\n  input = Input;\n  Input.default = Input;\n  if (terminalHighlight && terminalHighlight.registerInput) {\n    terminalHighlight.registerInput(Input);\n  }\n  return input;\n}\nvar mapGenerator;\nvar hasRequiredMapGenerator;\nfunction requireMapGenerator() {\n  if (hasRequiredMapGenerator) return mapGenerator;\n  hasRequiredMapGenerator = 1;\n  let { SourceMapConsumer, SourceMapGenerator } = require$$2;\n  let { dirname, relative, resolve, sep } = require$$2;\n  let { pathToFileURL } = require$$2;\n  let Input = requireInput();\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(dirname && resolve && relative && sep);\n  class MapGenerator {\n    constructor(stringify, root2, opts, cssString) {\n      this.stringify = stringify;\n      this.mapOpts = opts.map || {};\n      this.root = root2;\n      this.opts = opts;\n      this.css = cssString;\n      this.originalCSS = cssString;\n      this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n      this.memoizedFileURLs = /* @__PURE__ */ new Map();\n      this.memoizedPaths = /* @__PURE__ */ new Map();\n      this.memoizedURLs = /* @__PURE__ */ new Map();\n    }\n    addAnnotation() {\n      let content;\n      if (this.isInline()) {\n        content = \"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      this.css += eol + \"/*# sourceMappingURL=\" + content + \" */\";\n    }\n    applyPrevMaps() {\n      for (let prev of this.previous()) {\n        let from = this.toUrl(this.path(prev.file));\n        let root2 = prev.root || dirname(prev.file);\n        let map;\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        this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));\n      }\n    }\n    clearAnnotation() {\n      if (this.mapOpts.annotation === false) return;\n      if (this.root) {\n        let node2;\n        for (let i2 = this.root.nodes.length - 1; i2 >= 0; i2--) {\n          node2 = this.root.nodes[i2];\n          if (node2.type !== \"comment\") continue;\n          if (node2.text.indexOf(\"# sourceMappingURL=\") === 0) {\n            this.root.removeChild(i2);\n          }\n        }\n      } else if (this.css) {\n        this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, \"\");\n      }\n    }\n    generate() {\n      this.clearAnnotation();\n      if (pathAvailable && sourceMapAvailable && this.isMap()) {\n        return this.generateMap();\n      } else {\n        let result2 = \"\";\n        this.stringify(this.root, (i2) => {\n          result2 += i2;\n        });\n        return [result2];\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 ? this.toUrl(this.path(this.opts.from)) : \"<no source>\"\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      if (this.isInline()) {\n        return [this.css];\n      } else {\n        return [this.css, this.map];\n      }\n    }\n    generateString() {\n      this.css = \"\";\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      });\n      let line = 1;\n      let column = 1;\n      let noSource = \"<no source>\";\n      let mapping = {\n        generated: { column: 0, line: 0 },\n        original: { column: 0, line: 0 },\n        source: \"\"\n      };\n      let lines, last;\n      this.stringify(this.root, (str, node2, type) => {\n        this.css += str;\n        if (node2 && type !== \"end\") {\n          mapping.generated.line = line;\n          mapping.generated.column = column - 1;\n          if (node2.source && node2.source.start) {\n            mapping.source = this.sourcePath(node2);\n            mapping.original.line = node2.source.start.line;\n            mapping.original.column = node2.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        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        if (node2 && type !== \"start\") {\n          let p = node2.parent || { raws: {} };\n          let childless = node2.type === \"decl\" || node2.type === \"atrule\" && !node2.nodes;\n          if (!childless || node2 !== p.last || p.raws.semicolon) {\n            if (node2.source && node2.source.end) {\n              mapping.source = this.sourcePath(node2);\n              mapping.original.line = node2.source.end.line;\n              mapping.original.column = node2.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    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((i2) => i2.annotation);\n      }\n      return true;\n    }\n    isInline() {\n      if (typeof this.mapOpts.inline !== \"undefined\") {\n        return this.mapOpts.inline;\n      }\n      let annotation = this.mapOpts.annotation;\n      if (typeof annotation !== \"undefined\" && annotation !== true) {\n        return false;\n      }\n      if (this.previous().length) {\n        return this.previous().some((i2) => i2.inline);\n      }\n      return true;\n    }\n    isMap() {\n      if (typeof this.opts.map !== \"undefined\") {\n        return !!this.opts.map;\n      }\n      return this.previous().length > 0;\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((i2) => i2.withContent());\n      }\n      return true;\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    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      let from = this.opts.to ? dirname(this.opts.to) : \".\";\n      if (typeof this.mapOpts.annotation === \"string\") {\n        from = dirname(resolve(from, this.mapOpts.annotation));\n      }\n      let path = relative(from, file);\n      this.memoizedPaths.set(file, path);\n      return path;\n    }\n    previous() {\n      if (!this.previousMaps) {\n        this.previousMaps = [];\n        if (this.root) {\n          this.root.walk((node2) => {\n            if (node2.source && node2.source.input.map) {\n              let map = node2.source.input.map;\n              if (!this.previousMaps.includes(map)) {\n                this.previousMaps.push(map);\n              }\n            }\n          });\n        } else {\n          let input2 = new Input(this.originalCSS, this.opts);\n          if (input2.map) this.previousMaps.push(input2.map);\n        }\n      }\n      return this.previousMaps;\n    }\n    setSourcesContent() {\n      let already = {};\n      if (this.root) {\n        this.root.walk((node2) => {\n          if (node2.source) {\n            let from = node2.source.input.from;\n            if (from && !already[from]) {\n              already[from] = true;\n              let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n              this.map.setSourceContent(fromUrl, node2.source.input.css);\n            }\n          }\n        });\n      } else if (this.css) {\n        let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : \"<no source>\";\n        this.map.setSourceContent(from, this.css);\n      }\n    }\n    sourcePath(node2) {\n      if (this.mapOpts.from) {\n        return this.toUrl(this.mapOpts.from);\n      } else if (this.usesFileUrls) {\n        return this.toFileUrl(node2.source.input.from);\n      } else {\n        return this.toUrl(this.path(node2.source.input.from));\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    toFileUrl(path) {\n      let cached = this.memoizedFileURLs.get(path);\n      if (cached) return cached;\n      if (pathToFileURL) {\n        let fileURL = pathToFileURL(path).toString();\n        this.memoizedFileURLs.set(path, fileURL);\n        return fileURL;\n      } else {\n        throw new Error(\n          \"`map.absolute` option is not available in this PostCSS build\"\n        );\n      }\n    }\n    toUrl(path) {\n      let cached = this.memoizedURLs.get(path);\n      if (cached) return cached;\n      if (sep === \"\\\\\") {\n        path = path.replace(/\\\\/g, \"/\");\n      }\n      let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n      this.memoizedURLs.set(path, url);\n      return url;\n    }\n  }\n  mapGenerator = MapGenerator;\n  return mapGenerator;\n}\nvar comment;\nvar hasRequiredComment;\nfunction requireComment() {\n  if (hasRequiredComment) return comment;\n  hasRequiredComment = 1;\n  let Node2 = requireNode();\n  class Comment extends Node2 {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"comment\";\n    }\n  }\n  comment = Comment;\n  Comment.default = Comment;\n  return comment;\n}\nvar container;\nvar hasRequiredContainer;\nfunction requireContainer() {\n  if (hasRequiredContainer) return container;\n  hasRequiredContainer = 1;\n  let { isClean, my } = requireSymbols();\n  let Declaration = requireDeclaration();\n  let Comment = requireComment();\n  let Node2 = requireNode();\n  let parse, Rule, AtRule, Root;\n  function cleanSource(nodes) {\n    return nodes.map((i2) => {\n      if (i2.nodes) i2.nodes = cleanSource(i2.nodes);\n      delete i2.source;\n      return i2;\n    });\n  }\n  function markDirtyUp(node2) {\n    node2[isClean] = false;\n    if (node2.proxyOf.nodes) {\n      for (let i2 of node2.proxyOf.nodes) {\n        markDirtyUp(i2);\n      }\n    }\n  }\n  class Container extends Node2 {\n    append(...children) {\n      for (let child of children) {\n        let nodes = this.normalize(child, this.last);\n        for (let node2 of nodes) this.proxyOf.nodes.push(node2);\n      }\n      this.markDirty();\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      super.cleanRaws(keepBetween);\n      if (this.nodes) {\n        for (let node2 of this.nodes) node2.cleanRaws(keepBetween);\n      }\n    }\n    each(callback) {\n      if (!this.proxyOf.nodes) return void 0;\n      let iterator = this.getIterator();\n      let index2, result2;\n      while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n        index2 = this.indexes[iterator];\n        result2 = callback(this.proxyOf.nodes[index2], index2);\n        if (result2 === false) break;\n        this.indexes[iterator] += 1;\n      }\n      delete this.indexes[iterator];\n      return result2;\n    }\n    every(condition) {\n      return this.nodes.every(condition);\n    }\n    getIterator() {\n      if (!this.lastEach) this.lastEach = 0;\n      if (!this.indexes) this.indexes = {};\n      this.lastEach += 1;\n      let iterator = this.lastEach;\n      this.indexes[iterator] = 0;\n      return iterator;\n    }\n    getProxyProcessor() {\n      return {\n        get(node2, prop) {\n          if (prop === \"proxyOf\") {\n            return node2;\n          } else if (!node2[prop]) {\n            return node2[prop];\n          } else if (prop === \"each\" || typeof prop === \"string\" && prop.startsWith(\"walk\")) {\n            return (...args) => {\n              return node2[prop](\n                ...args.map((i2) => {\n                  if (typeof i2 === \"function\") {\n                    return (child, index2) => i2(child.toProxy(), index2);\n                  } else {\n                    return i2;\n                  }\n                })\n              );\n            };\n          } else if (prop === \"every\" || prop === \"some\") {\n            return (cb) => {\n              return node2[prop](\n                (child, ...other) => cb(child.toProxy(), ...other)\n              );\n            };\n          } else if (prop === \"root\") {\n            return () => node2.root().toProxy();\n          } else if (prop === \"nodes\") {\n            return node2.nodes.map((i2) => i2.toProxy());\n          } else if (prop === \"first\" || prop === \"last\") {\n            return node2[prop].toProxy();\n          } else {\n            return node2[prop];\n          }\n        },\n        set(node2, prop, value) {\n          if (node2[prop] === value) return true;\n          node2[prop] = value;\n          if (prop === \"name\" || prop === \"params\" || prop === \"selector\") {\n            node2.markDirty();\n          }\n          return true;\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    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 node2 of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node2);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (existIndex < index2) {\n          this.indexes[id] = index2 + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    insertBefore(exist, add) {\n      let existIndex = this.index(exist);\n      let type = existIndex === 0 ? \"prepend\" : false;\n      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n      existIndex = this.index(exist);\n      for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex, 0, node2);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (existIndex <= index2) {\n          this.indexes[id] = index2 + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\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 i2 of nodes) {\n          if (i2.parent) i2.parent.removeChild(i2, \"ignore\");\n        }\n      } else if (nodes.type === \"root\" && this.type !== \"document\") {\n        nodes = nodes.nodes.slice(0);\n        for (let i2 of nodes) {\n          if (i2.parent) i2.parent.removeChild(i2, \"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) {\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      let processed = nodes.map((i2) => {\n        if (!i2[my]) Container.rebuild(i2);\n        i2 = i2.proxyOf;\n        if (i2.parent) i2.parent.removeChild(i2);\n        if (i2[isClean]) markDirtyUp(i2);\n        if (typeof i2.raws.before === \"undefined\") {\n          if (sample && typeof sample.raws.before !== \"undefined\") {\n            i2.raws.before = sample.raws.before.replace(/\\S/g, \"\");\n          }\n        }\n        i2.parent = this.proxyOf;\n        return i2;\n      });\n      return processed;\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 node2 of nodes) this.proxyOf.nodes.unshift(node2);\n        for (let id in this.indexes) {\n          this.indexes[id] = this.indexes[id] + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    push(child) {\n      child.parent = this;\n      this.proxyOf.nodes.push(child);\n      return this;\n    }\n    removeAll() {\n      for (let node2 of this.proxyOf.nodes) node2.parent = void 0;\n      this.proxyOf.nodes = [];\n      this.markDirty();\n      return this;\n    }\n    removeChild(child) {\n      child = this.index(child);\n      this.proxyOf.nodes[child].parent = void 0;\n      this.proxyOf.nodes.splice(child, 1);\n      let index2;\n      for (let id in this.indexes) {\n        index2 = this.indexes[id];\n        if (index2 >= child) {\n          this.indexes[id] = index2 - 1;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    replaceValues(pattern, opts, callback) {\n      if (!callback) {\n        callback = opts;\n        opts = {};\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        decl.value = decl.value.replace(pattern, callback);\n      });\n      this.markDirty();\n      return this;\n    }\n    some(condition) {\n      return this.nodes.some(condition);\n    }\n    walk(callback) {\n      return this.each((child, i2) => {\n        let result2;\n        try {\n          result2 = callback(child, i2);\n        } catch (e2) {\n          throw child.addToError(e2);\n        }\n        if (result2 !== false && child.walk) {\n          result2 = child.walk(callback);\n        }\n        return result2;\n      });\n    }\n    walkAtRules(name, callback) {\n      if (!callback) {\n        callback = name;\n        return this.walk((child, i2) => {\n          if (child.type === \"atrule\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (name instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"atrule\" && name.test(child.name)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"atrule\" && child.name === name) {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkComments(callback) {\n      return this.walk((child, i2) => {\n        if (child.type === \"comment\") {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkDecls(prop, callback) {\n      if (!callback) {\n        callback = prop;\n        return this.walk((child, i2) => {\n          if (child.type === \"decl\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (prop instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"decl\" && prop.test(child.prop)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"decl\" && child.prop === prop) {\n          return callback(child, i2);\n        }\n      });\n    }\n    walkRules(selector, callback) {\n      if (!callback) {\n        callback = selector;\n        return this.walk((child, i2) => {\n          if (child.type === \"rule\") {\n            return callback(child, i2);\n          }\n        });\n      }\n      if (selector instanceof RegExp) {\n        return this.walk((child, i2) => {\n          if (child.type === \"rule\" && selector.test(child.selector)) {\n            return callback(child, i2);\n          }\n        });\n      }\n      return this.walk((child, i2) => {\n        if (child.type === \"rule\" && child.selector === selector) {\n          return callback(child, i2);\n        }\n      });\n    }\n    get first() {\n      if (!this.proxyOf.nodes) return void 0;\n      return this.proxyOf.nodes[0];\n    }\n    get last() {\n      if (!this.proxyOf.nodes) return void 0;\n      return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n    }\n  }\n  Container.registerParse = (dependant) => {\n    parse = dependant;\n  };\n  Container.registerRule = (dependant) => {\n    Rule = dependant;\n  };\n  Container.registerAtRule = (dependant) => {\n    AtRule = dependant;\n  };\n  Container.registerRoot = (dependant) => {\n    Root = dependant;\n  };\n  container = Container;\n  Container.default = Container;\n  Container.rebuild = (node2) => {\n    if (node2.type === \"atrule\") {\n      Object.setPrototypeOf(node2, AtRule.prototype);\n    } else if (node2.type === \"rule\") {\n      Object.setPrototypeOf(node2, Rule.prototype);\n    } else if (node2.type === \"decl\") {\n      Object.setPrototypeOf(node2, Declaration.prototype);\n    } else if (node2.type === \"comment\") {\n      Object.setPrototypeOf(node2, Comment.prototype);\n    } else if (node2.type === \"root\") {\n      Object.setPrototypeOf(node2, Root.prototype);\n    }\n    node2[my] = true;\n    if (node2.nodes) {\n      node2.nodes.forEach((child) => {\n        Container.rebuild(child);\n      });\n    }\n  };\n  return container;\n}\nvar document$1;\nvar hasRequiredDocument;\nfunction requireDocument() {\n  if (hasRequiredDocument) return document$1;\n  hasRequiredDocument = 1;\n  let Container = requireContainer();\n  let LazyResult, Processor;\n  class Document2 extends Container {\n    constructor(defaults) {\n      super({ type: \"document\", ...defaults });\n      if (!this.nodes) {\n        this.nodes = [];\n      }\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Document2.registerLazyResult = (dependant) => {\n    LazyResult = dependant;\n  };\n  Document2.registerProcessor = (dependant) => {\n    Processor = dependant;\n  };\n  document$1 = Document2;\n  Document2.default = Document2;\n  return document$1;\n}\nvar warnOnce;\nvar hasRequiredWarnOnce;\nfunction requireWarnOnce() {\n  if (hasRequiredWarnOnce) return warnOnce;\n  hasRequiredWarnOnce = 1;\n  let printed = {};\n  warnOnce = function warnOnce2(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n    if (typeof console !== \"undefined\" && console.warn) {\n      console.warn(message);\n    }\n  };\n  return warnOnce;\n}\nvar warning;\nvar hasRequiredWarning;\nfunction requireWarning() {\n  if (hasRequiredWarning) return warning;\n  hasRequiredWarning = 1;\n  class Warning {\n    constructor(text, opts = {}) {\n      this.type = \"warning\";\n      this.text = text;\n      if (opts.node && opts.node.source) {\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      for (let opt in opts) this[opt] = opts[opt];\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      if (this.plugin) {\n        return this.plugin + \": \" + this.text;\n      }\n      return this.text;\n    }\n  }\n  warning = Warning;\n  Warning.default = Warning;\n  return warning;\n}\nvar result;\nvar hasRequiredResult;\nfunction requireResult() {\n  if (hasRequiredResult) return result;\n  hasRequiredResult = 1;\n  let Warning = requireWarning();\n  class Result {\n    constructor(processor2, root2, opts) {\n      this.processor = processor2;\n      this.messages = [];\n      this.root = root2;\n      this.opts = opts;\n      this.css = void 0;\n      this.map = void 0;\n    }\n    toString() {\n      return this.css;\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      let warning2 = new Warning(text, opts);\n      this.messages.push(warning2);\n      return warning2;\n    }\n    warnings() {\n      return this.messages.filter((i2) => i2.type === \"warning\");\n    }\n    get content() {\n      return this.css;\n    }\n  }\n  result = Result;\n  Result.default = Result;\n  return result;\n}\nvar tokenize;\nvar hasRequiredTokenize;\nfunction requireTokenize() {\n  if (hasRequiredTokenize) return tokenize;\n  hasRequiredTokenize = 1;\n  const SINGLE_QUOTE = \"'\".charCodeAt(0);\n  const DOUBLE_QUOTE = '\"'.charCodeAt(0);\n  const BACKSLASH = \"\\\\\".charCodeAt(0);\n  const SLASH = \"/\".charCodeAt(0);\n  const NEWLINE = \"\\n\".charCodeAt(0);\n  const SPACE = \" \".charCodeAt(0);\n  const FEED = \"\\f\".charCodeAt(0);\n  const TAB = \"\t\".charCodeAt(0);\n  const CR = \"\\r\".charCodeAt(0);\n  const OPEN_SQUARE = \"[\".charCodeAt(0);\n  const CLOSE_SQUARE = \"]\".charCodeAt(0);\n  const OPEN_PARENTHESES = \"(\".charCodeAt(0);\n  const CLOSE_PARENTHESES = \")\".charCodeAt(0);\n  const OPEN_CURLY = \"{\".charCodeAt(0);\n  const CLOSE_CURLY = \"}\".charCodeAt(0);\n  const SEMICOLON = \";\".charCodeAt(0);\n  const ASTERISK = \"*\".charCodeAt(0);\n  const COLON = \":\".charCodeAt(0);\n  const AT = \"@\".charCodeAt(0);\n  const RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\n  const RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\n  const RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\n  const RE_HEX_ESCAPE = /[\\da-f]/i;\n  tokenize = function tokenizer(input2, options = {}) {\n    let css = input2.css.valueOf();\n    let ignore = options.ignoreErrors;\n    let code, next, quote, content, escape;\n    let escaped, escapePos, prev, n2, currentToken;\n    let length = css.length;\n    let pos = 0;\n    let buffer = [];\n    let returned = [];\n    function position() {\n      return pos;\n    }\n    function unclosed(what) {\n      throw input2.error(\"Unclosed \" + what, pos);\n    }\n    function endOfFile() {\n      return returned.length === 0 && pos >= length;\n    }\n    function nextToken(opts) {\n      if (returned.length) return returned.pop();\n      if (pos >= length) return;\n      let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n      code = css.charCodeAt(pos);\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 (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n          currentToken = [\"space\", css.slice(pos, next)];\n          pos = next - 1;\n          break;\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        case OPEN_PARENTHESES: {\n          prev = buffer.length ? buffer.pop()[1] : \"\";\n          n2 = css.charCodeAt(pos + 1);\n          if (prev === \"url\" && n2 !== SINGLE_QUOTE && n2 !== DOUBLE_QUOTE && n2 !== SPACE && n2 !== NEWLINE && n2 !== TAB && n2 !== FEED && n2 !== CR) {\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            currentToken = [\"brackets\", css.slice(pos, next + 1), pos, next];\n            pos = next;\n          } else {\n            next = css.indexOf(\")\", pos + 1);\n            content = css.slice(pos, next + 1);\n            if (next === -1 || RE_BAD_BRACKET.test(content)) {\n              currentToken = [\"(\", \"(\", pos];\n            } else {\n              currentToken = [\"brackets\", content, pos, next];\n              pos = next;\n            }\n          }\n          break;\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          currentToken = [\"string\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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          currentToken = [\"at-word\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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 (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\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          currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n          pos = next;\n          break;\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            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            currentToken = [\"word\", css.slice(pos, next + 1), pos, next];\n            buffer.push(currentToken);\n            pos = next;\n          }\n          break;\n        }\n      }\n      pos++;\n      return currentToken;\n    }\n    function back(token) {\n      returned.push(token);\n    }\n    return {\n      back,\n      endOfFile,\n      nextToken,\n      position\n    };\n  };\n  return tokenize;\n}\nvar atRule;\nvar hasRequiredAtRule;\nfunction requireAtRule() {\n  if (hasRequiredAtRule) return atRule;\n  hasRequiredAtRule = 1;\n  let Container = requireContainer();\n  class AtRule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"atrule\";\n    }\n    append(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.append(...children);\n    }\n    prepend(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.prepend(...children);\n    }\n  }\n  atRule = AtRule;\n  AtRule.default = AtRule;\n  Container.registerAtRule(AtRule);\n  return atRule;\n}\nvar root;\nvar hasRequiredRoot;\nfunction requireRoot() {\n  if (hasRequiredRoot) return root;\n  hasRequiredRoot = 1;\n  let Container = requireContainer();\n  let LazyResult, Processor;\n  class Root extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"root\";\n      if (!this.nodes) this.nodes = [];\n    }\n    normalize(child, sample, type) {\n      let nodes = super.normalize(child);\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 node2 of nodes) {\n            node2.raws.before = sample.raws.before;\n          }\n        }\n      }\n      return nodes;\n    }\n    removeChild(child, ignore) {\n      let index2 = this.index(child);\n      if (!ignore && index2 === 0 && this.nodes.length > 1) {\n        this.nodes[1].raws.before = this.nodes[index2].raws.before;\n      }\n      return super.removeChild(child);\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Root.registerLazyResult = (dependant) => {\n    LazyResult = dependant;\n  };\n  Root.registerProcessor = (dependant) => {\n    Processor = dependant;\n  };\n  root = Root;\n  Root.default = Root;\n  Container.registerRoot(Root);\n  return root;\n}\nvar list_1;\nvar hasRequiredList;\nfunction requireList() {\n  if (hasRequiredList) return list_1;\n  hasRequiredList = 1;\n  let list = {\n    comma(string) {\n      return list.split(string, [\",\"], true);\n    },\n    space(string) {\n      let spaces = [\" \", \"\\n\", \"\t\"];\n      return list.split(string, spaces);\n    },\n    split(string, separators, last) {\n      let array = [];\n      let current = \"\";\n      let split = false;\n      let func = 0;\n      let inQuote = false;\n      let prevQuote = \"\";\n      let escape = false;\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        if (split) {\n          if (current !== \"\") array.push(current.trim());\n          current = \"\";\n          split = false;\n        } else {\n          current += letter;\n        }\n      }\n      if (last || current !== \"\") array.push(current.trim());\n      return array;\n    }\n  };\n  list_1 = list;\n  list.default = list;\n  return list_1;\n}\nvar rule;\nvar hasRequiredRule;\nfunction requireRule() {\n  if (hasRequiredRule) return rule;\n  hasRequiredRule = 1;\n  let Container = requireContainer();\n  let list = requireList();\n  class Rule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = \"rule\";\n      if (!this.nodes) this.nodes = [];\n    }\n    get selectors() {\n      return list.comma(this.selector);\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  rule = Rule;\n  Rule.default = Rule;\n  Container.registerRule(Rule);\n  return rule;\n}\nvar parser;\nvar hasRequiredParser;\nfunction requireParser() {\n  if (hasRequiredParser) return parser;\n  hasRequiredParser = 1;\n  let Declaration = requireDeclaration();\n  let tokenizer = requireTokenize();\n  let Comment = requireComment();\n  let AtRule = requireAtRule();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  const SAFE_COMMENT_NEIGHBOR = {\n    empty: true,\n    space: true\n  };\n  function findLastWithPosition(tokens) {\n    for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n      let token = tokens[i2];\n      let pos = token[3] || token[2];\n      if (pos) return pos;\n    }\n  }\n  class Parser {\n    constructor(input2) {\n      this.input = input2;\n      this.root = new Root();\n      this.current = this.root;\n      this.spaces = \"\";\n      this.semicolon = false;\n      this.createTokenizer();\n      this.root.source = { input: input2, start: { column: 1, line: 1, offset: 0 } };\n    }\n    atrule(token) {\n      let node2 = new AtRule();\n      node2.name = token[1].slice(1);\n      if (node2.name === \"\") {\n        this.unnamedAtrule(node2, token);\n      }\n      this.init(node2, token[2]);\n      let type;\n      let prev;\n      let shift;\n      let last = false;\n      let open = false;\n      let params = [];\n      let brackets = [];\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        type = token[0];\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        if (brackets.length === 0) {\n          if (type === \";\") {\n            node2.source.end = this.getPosition(token[2]);\n            node2.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                node2.source.end = this.getPosition(prev[3] || prev[2]);\n                node2.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        if (this.tokenizer.endOfFile()) {\n          last = true;\n          break;\n        }\n      }\n      node2.raws.between = this.spacesAndCommentsFromEnd(params);\n      if (params.length) {\n        node2.raws.afterName = this.spacesAndCommentsFromStart(params);\n        this.raw(node2, \"params\", params);\n        if (last) {\n          token = params[params.length - 1];\n          node2.source.end = this.getPosition(token[3] || token[2]);\n          node2.source.end.offset++;\n          this.spaces = node2.raws.between;\n          node2.raws.between = \"\";\n        }\n      } else {\n        node2.raws.afterName = \"\";\n        node2.params = \"\";\n      }\n      if (open) {\n        node2.nodes = [];\n        this.current = node2;\n      }\n    }\n    checkMissedSemicolon(tokens) {\n      let colon = this.colon(tokens);\n      if (colon === false) return;\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      throw this.input.error(\n        \"Missed semicolon\",\n        token[0] === \"word\" ? token[3] + 1 : token[2]\n      );\n    }\n    colon(tokens) {\n      let brackets = 0;\n      let token, type, prev;\n      for (let [i2, element] of tokens.entries()) {\n        token = element;\n        type = token[0];\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 i2;\n          }\n        }\n        prev = token;\n      }\n      return false;\n    }\n    comment(token) {\n      let node2 = new Comment();\n      this.init(node2, token[2]);\n      node2.source.end = this.getPosition(token[3] || token[2]);\n      node2.source.end.offset++;\n      let text = token[1].slice(2, -2);\n      if (/^\\s*$/.test(text)) {\n        node2.text = \"\";\n        node2.raws.left = text;\n        node2.raws.right = \"\";\n      } else {\n        let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n        node2.text = match[2];\n        node2.raws.left = match[1];\n        node2.raws.right = match[3];\n      }\n    }\n    createTokenizer() {\n      this.tokenizer = tokenizer(this.input);\n    }\n    decl(tokens, customProperty) {\n      let node2 = new Declaration();\n      this.init(node2, tokens[0][2]);\n      let last = tokens[tokens.length - 1];\n      if (last[0] === \";\") {\n        this.semicolon = true;\n        tokens.pop();\n      }\n      node2.source.end = this.getPosition(\n        last[3] || last[2] || findLastWithPosition(tokens)\n      );\n      node2.source.end.offset++;\n      while (tokens[0][0] !== \"word\") {\n        if (tokens.length === 1) this.unknownWord(tokens);\n        node2.raws.before += tokens.shift()[1];\n      }\n      node2.source.start = this.getPosition(tokens[0][2]);\n      node2.prop = \"\";\n      while (tokens.length) {\n        let type = tokens[0][0];\n        if (type === \":\" || type === \"space\" || type === \"comment\") {\n          break;\n        }\n        node2.prop += tokens.shift()[1];\n      }\n      node2.raws.between = \"\";\n      let token;\n      while (tokens.length) {\n        token = tokens.shift();\n        if (token[0] === \":\") {\n          node2.raws.between += token[1];\n          break;\n        } else {\n          if (token[0] === \"word\" && /\\w/.test(token[1])) {\n            this.unknownWord([token]);\n          }\n          node2.raws.between += token[1];\n        }\n      }\n      if (node2.prop[0] === \"_\" || node2.prop[0] === \"*\") {\n        node2.raws.before += node2.prop[0];\n        node2.prop = node2.prop.slice(1);\n      }\n      let firstSpaces = [];\n      let next;\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== \"space\" && next !== \"comment\") break;\n        firstSpaces.push(tokens.shift());\n      }\n      this.precheckMissedSemicolon(tokens);\n      for (let i2 = tokens.length - 1; i2 >= 0; i2--) {\n        token = tokens[i2];\n        if (token[1].toLowerCase() === \"!important\") {\n          node2.important = true;\n          let string = this.stringFrom(tokens, i2);\n          string = this.spacesFromEnd(tokens) + string;\n          if (string !== \" !important\") node2.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 = i2; j > 0; j--) {\n            let type = cache[j][0];\n            if (str.trim().indexOf(\"!\") === 0 && type !== \"space\") {\n              break;\n            }\n            str = cache.pop()[1] + str;\n          }\n          if (str.trim().indexOf(\"!\") === 0) {\n            node2.important = true;\n            node2.raws.important = str;\n            tokens = cache;\n          }\n        }\n        if (token[0] !== \"space\" && token[0] !== \"comment\") {\n          break;\n        }\n      }\n      let hasWord = tokens.some((i2) => i2[0] !== \"space\" && i2[0] !== \"comment\");\n      if (hasWord) {\n        node2.raws.between += firstSpaces.map((i2) => i2[1]).join(\"\");\n        firstSpaces = [];\n      }\n      this.raw(node2, \"value\", firstSpaces.concat(tokens), customProperty);\n      if (node2.value.includes(\":\") && !customProperty) {\n        this.checkMissedSemicolon(tokens);\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    emptyRule(token) {\n      let node2 = new Rule();\n      this.init(node2, token[2]);\n      node2.selector = \"\";\n      node2.raws.between = \"\";\n      this.current = node2;\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      this.current.raws.after = (this.current.raws.after || \"\") + this.spaces;\n      this.spaces = \"\";\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    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    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        }\n      }\n    }\n    // Helpers\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    init(node2, offset) {\n      this.current.push(node2);\n      node2.source = {\n        input: this.input,\n        start: this.getPosition(offset)\n      };\n      node2.raws.before = this.spaces;\n      this.spaces = \"\";\n      if (node2.type !== \"comment\") this.semicolon = false;\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      let tokens = [];\n      let token = start;\n      while (token) {\n        type = token[0];\n        tokens.push(token);\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        token = this.tokenizer.nextToken();\n      }\n      if (this.tokenizer.endOfFile()) end = true;\n      if (brackets.length > 0) this.unclosedBracket(bracket);\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    parse() {\n      let token;\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        switch (token[0]) {\n          case \"space\":\n            this.spaces += token[1];\n            break;\n          case \";\":\n            this.freeSemicolon(token);\n            break;\n          case \"}\":\n            this.end(token);\n            break;\n          case \"comment\":\n            this.comment(token);\n            break;\n          case \"at-word\":\n            this.atrule(token);\n            break;\n          case \"{\":\n            this.emptyRule(token);\n            break;\n          default:\n            this.other(token);\n            break;\n        }\n      }\n      this.endFile();\n    }\n    precheckMissedSemicolon() {\n    }\n    raw(node2, prop, tokens, customProperty) {\n      let token, type;\n      let length = tokens.length;\n      let value = \"\";\n      let clean = true;\n      let next, prev;\n      for (let i2 = 0; i2 < length; i2 += 1) {\n        token = tokens[i2];\n        type = token[0];\n        if (type === \"space\" && i2 === length - 1 && !customProperty) {\n          clean = false;\n        } else if (type === \"comment\") {\n          prev = tokens[i2 - 1] ? tokens[i2 - 1][0] : \"empty\";\n          next = tokens[i2 + 1] ? tokens[i2 + 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, i2) => all + i2[1], \"\");\n        node2.raws[prop] = { raw, value };\n      }\n      node2[prop] = value;\n    }\n    rule(tokens) {\n      tokens.pop();\n      let node2 = new Rule();\n      this.init(node2, tokens[0][2]);\n      node2.raws.between = this.spacesAndCommentsFromEnd(tokens);\n      this.raw(node2, \"selector\", tokens);\n      this.current = node2;\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    // Errors\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    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    stringFrom(tokens, from) {\n      let result2 = \"\";\n      for (let i2 = from; i2 < tokens.length; i2++) {\n        result2 += tokens[i2][1];\n      }\n      tokens.splice(from, tokens.length - from);\n      return result2;\n    }\n    unclosedBlock() {\n      let pos = this.current.source.start;\n      throw this.input.error(\"Unclosed block\", pos.line, pos.column);\n    }\n    unclosedBracket(bracket) {\n      throw this.input.error(\n        \"Unclosed bracket\",\n        { offset: bracket[2] },\n        { offset: bracket[2] + 1 }\n      );\n    }\n    unexpectedClose(token) {\n      throw this.input.error(\n        \"Unexpected }\",\n        { offset: token[2] },\n        { offset: token[2] + 1 }\n      );\n    }\n    unknownWord(tokens) {\n      throw this.input.error(\n        \"Unknown word\",\n        { offset: tokens[0][2] },\n        { offset: tokens[0][2] + tokens[0][1].length }\n      );\n    }\n    unnamedAtrule(node2, 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  parser = Parser;\n  return parser;\n}\nvar parse_1;\nvar hasRequiredParse;\nfunction requireParse() {\n  if (hasRequiredParse) return parse_1;\n  hasRequiredParse = 1;\n  let Container = requireContainer();\n  let Parser = requireParser();\n  let Input = requireInput();\n  function parse(css, opts) {\n    let input2 = new Input(css, opts);\n    let parser2 = new Parser(input2);\n    try {\n      parser2.parse();\n    } catch (e2) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (e2.name === \"CssSyntaxError\" && opts && opts.from) {\n          if (/\\.scss$/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser\";\n          } else if (/\\.sass/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser\";\n          } else if (/\\.less$/i.test(opts.from)) {\n            e2.message += \"\\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser\";\n          }\n        }\n      }\n      throw e2;\n    }\n    return parser2.root;\n  }\n  parse_1 = parse;\n  parse.default = parse;\n  Container.registerParse(parse);\n  return parse_1;\n}\nvar lazyResult;\nvar hasRequiredLazyResult;\nfunction requireLazyResult() {\n  if (hasRequiredLazyResult) return lazyResult;\n  hasRequiredLazyResult = 1;\n  let { isClean, my } = requireSymbols();\n  let MapGenerator = requireMapGenerator();\n  let stringify = requireStringify();\n  let Container = requireContainer();\n  let Document2 = requireDocument();\n  let warnOnce2 = requireWarnOnce();\n  let Result = requireResult();\n  let parse = requireParse();\n  let Root = requireRoot();\n  const TYPE_TO_CLASS_NAME = {\n    atrule: \"AtRule\",\n    comment: \"Comment\",\n    decl: \"Declaration\",\n    document: \"Document\",\n    root: \"Root\",\n    rule: \"Rule\"\n  };\n  const 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  const NOT_VISITORS = {\n    Once: true,\n    postcssPlugin: true,\n    prepare: true\n  };\n  const CHILDREN = 0;\n  function isPromise(obj) {\n    return typeof obj === \"object\" && typeof obj.then === \"function\";\n  }\n  function getEvents(node2) {\n    let key = false;\n    let type = TYPE_TO_CLASS_NAME[node2.type];\n    if (node2.type === \"decl\") {\n      key = node2.prop.toLowerCase();\n    } else if (node2.type === \"atrule\") {\n      key = node2.name.toLowerCase();\n    }\n    if (key && node2.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 (node2.append) {\n      return [type, CHILDREN, type + \"Exit\"];\n    } else {\n      return [type, type + \"Exit\"];\n    }\n  }\n  function toStack(node2) {\n    let events;\n    if (node2.type === \"document\") {\n      events = [\"Document\", CHILDREN, \"DocumentExit\"];\n    } else if (node2.type === \"root\") {\n      events = [\"Root\", CHILDREN, \"RootExit\"];\n    } else {\n      events = getEvents(node2);\n    }\n    return {\n      eventIndex: 0,\n      events,\n      iterator: 0,\n      node: node2,\n      visitorIndex: 0,\n      visitors: []\n    };\n  }\n  function cleanMarks(node2) {\n    node2[isClean] = false;\n    if (node2.nodes) node2.nodes.forEach((i2) => cleanMarks(i2));\n    return node2;\n  }\n  let postcss2 = {};\n  class LazyResult {\n    constructor(processor2, css, opts) {\n      this.stringified = false;\n      this.processed = false;\n      let root2;\n      if (typeof css === \"object\" && css !== null && (css.type === \"root\" || css.type === \"document\")) {\n        root2 = cleanMarks(css);\n      } else if (css instanceof LazyResult || css instanceof Result) {\n        root2 = 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 parser2 = parse;\n        if (opts.syntax) parser2 = opts.syntax.parse;\n        if (opts.parser) parser2 = opts.parser;\n        if (parser2.parse) parser2 = parser2.parse;\n        try {\n          root2 = parser2(css, opts);\n        } catch (error) {\n          this.processed = true;\n          this.error = error;\n        }\n        if (root2 && !root2[my]) {\n          Container.rebuild(root2);\n        }\n      }\n      this.result = new Result(processor2, root2, opts);\n      this.helpers = { ...postcss2, postcss: postcss2, 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    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    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    getAsyncError() {\n      throw new Error(\"Use process(css).then(cb) to work with async plugins\");\n    }\n    handleError(error, node2) {\n      let plugin = this.result.lastPlugin;\n      try {\n        if (node2) node2.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 a2 = pluginVer.split(\".\");\n            let b = runtimeVer.split(\".\");\n            if (a2[0] !== b[0] || parseInt(a2[1]) > parseInt(b[1])) {\n              console.error(\n                \"Unknown error from PostCSS plugin. Your current PostCSS version is \" + runtimeVer + \", but \" + pluginName + \" uses \" + pluginVer + \". Perhaps this is the source of the error below.\"\n              );\n            }\n          }\n        }\n      } catch (err) {\n        if (console && console.error) console.error(err);\n      }\n      return error;\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}. 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    async runAsync() {\n      this.plugin = 0;\n      for (let i2 = 0; i2 < this.plugins.length; i2++) {\n        let plugin = this.plugins[i2];\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      this.prepareVisitors();\n      if (this.hasListener) {\n        let root2 = this.result.root;\n        while (!root2[isClean]) {\n          root2[isClean] = true;\n          let stack = [toStack(root2)];\n          while (stack.length > 0) {\n            let promise = this.visitTick(stack);\n            if (isPromise(promise)) {\n              try {\n                await promise;\n              } catch (e2) {\n                let node2 = stack[stack.length - 1].node;\n                throw this.handleError(e2, node2);\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 (root2.type === \"document\") {\n                let roots = root2.nodes.map(\n                  (subRoot) => visitor(subRoot, this.helpers)\n                );\n                await Promise.all(roots);\n              } else {\n                await visitor(root2, this.helpers);\n              }\n            } catch (e2) {\n              throw this.handleError(e2);\n            }\n          }\n        }\n      }\n      this.processed = true;\n      return this.stringify();\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(\n              (root2) => plugin.Once(root2, this.helpers)\n            );\n            if (isPromise(roots[0])) {\n              return Promise.all(roots);\n            }\n            return roots;\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    stringify() {\n      if (this.error) throw this.error;\n      if (this.stringified) return this.result;\n      this.stringified = true;\n      this.sync();\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      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      return this.result;\n    }\n    sync() {\n      if (this.error) throw this.error;\n      if (this.processed) return this.result;\n      this.processed = true;\n      if (this.processing) {\n        throw this.getAsyncError();\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      this.prepareVisitors();\n      if (this.hasListener) {\n        let root2 = this.result.root;\n        while (!root2[isClean]) {\n          root2[isClean] = true;\n          this.walkSync(root2);\n        }\n        if (this.listeners.OnceExit) {\n          if (root2.type === \"document\") {\n            for (let subRoot of root2.nodes) {\n              this.visitSync(this.listeners.OnceExit, subRoot);\n            }\n          } else {\n            this.visitSync(this.listeners.OnceExit, root2);\n          }\n        }\n      }\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (!(\"from\" in this.opts)) {\n          warnOnce2(\n            \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n          );\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this.css;\n    }\n    visitSync(visitors, node2) {\n      for (let [plugin, visitor] of visitors) {\n        this.result.lastPlugin = plugin;\n        let promise;\n        try {\n          promise = visitor(node2, this.helpers);\n        } catch (e2) {\n          throw this.handleError(e2, node2.proxyOf);\n        }\n        if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n          return true;\n        }\n        if (isPromise(promise)) {\n          throw this.getAsyncError();\n        }\n      }\n    }\n    visitTick(stack) {\n      let visit2 = stack[stack.length - 1];\n      let { node: node2, visitors } = visit2;\n      if (node2.type !== \"root\" && node2.type !== \"document\" && !node2.parent) {\n        stack.pop();\n        return;\n      }\n      if (visitors.length > 0 && visit2.visitorIndex < visitors.length) {\n        let [plugin, visitor] = visitors[visit2.visitorIndex];\n        visit2.visitorIndex += 1;\n        if (visit2.visitorIndex === visitors.length) {\n          visit2.visitors = [];\n          visit2.visitorIndex = 0;\n        }\n        this.result.lastPlugin = plugin;\n        try {\n          return visitor(node2.toProxy(), this.helpers);\n        } catch (e2) {\n          throw this.handleError(e2, node2);\n        }\n      }\n      if (visit2.iterator !== 0) {\n        let iterator = visit2.iterator;\n        let child;\n        while (child = node2.nodes[node2.indexes[iterator]]) {\n          node2.indexes[iterator] += 1;\n          if (!child[isClean]) {\n            child[isClean] = true;\n            stack.push(toStack(child));\n            return;\n          }\n        }\n        visit2.iterator = 0;\n        delete node2.indexes[iterator];\n      }\n      let events = visit2.events;\n      while (visit2.eventIndex < events.length) {\n        let event = events[visit2.eventIndex];\n        visit2.eventIndex += 1;\n        if (event === CHILDREN) {\n          if (node2.nodes && node2.nodes.length) {\n            node2[isClean] = true;\n            visit2.iterator = node2.getIterator();\n          }\n          return;\n        } else if (this.listeners[event]) {\n          visit2.visitors = this.listeners[event];\n          return;\n        }\n      }\n      stack.pop();\n    }\n    walkSync(node2) {\n      node2[isClean] = true;\n      let events = getEvents(node2);\n      for (let event of events) {\n        if (event === CHILDREN) {\n          if (node2.nodes) {\n            node2.each((child) => {\n              if (!child[isClean]) this.walkSync(child);\n            });\n          }\n        } else {\n          let visitors = this.listeners[event];\n          if (visitors) {\n            if (this.visitSync(visitors, node2.toProxy())) return;\n          }\n        }\n      }\n    }\n    warnings() {\n      return this.sync().warnings();\n    }\n    get content() {\n      return this.stringify().content;\n    }\n    get css() {\n      return this.stringify().css;\n    }\n    get map() {\n      return this.stringify().map;\n    }\n    get messages() {\n      return this.sync().messages;\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      return this.sync().root;\n    }\n    get [Symbol.toStringTag]() {\n      return \"LazyResult\";\n    }\n  }\n  LazyResult.registerPostcss = (dependant) => {\n    postcss2 = dependant;\n  };\n  lazyResult = LazyResult;\n  LazyResult.default = LazyResult;\n  Root.registerLazyResult(LazyResult);\n  Document2.registerLazyResult(LazyResult);\n  return lazyResult;\n}\nvar noWorkResult;\nvar hasRequiredNoWorkResult;\nfunction requireNoWorkResult() {\n  if (hasRequiredNoWorkResult) return noWorkResult;\n  hasRequiredNoWorkResult = 1;\n  let MapGenerator = requireMapGenerator();\n  let stringify = requireStringify();\n  let warnOnce2 = requireWarnOnce();\n  let parse = requireParse();\n  const Result = requireResult();\n  class NoWorkResult {\n    constructor(processor2, css, opts) {\n      css = css.toString();\n      this.stringified = false;\n      this._processor = processor2;\n      this._css = css;\n      this._opts = opts;\n      this._map = void 0;\n      let root2;\n      let str = stringify;\n      this.result = new Result(this._processor, root2, this._opts);\n      this.result.css = css;\n      let self2 = this;\n      Object.defineProperty(this.result, \"root\", {\n        get() {\n          return self2.root;\n        }\n      });\n      let map = new MapGenerator(str, root2, 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    async() {\n      if (this.error) return Promise.reject(this.error);\n      return Promise.resolve(this.result);\n    }\n    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    sync() {\n      if (this.error) throw this.error;\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (!(\"from\" in this._opts)) {\n          warnOnce2(\n            \"Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.\"\n          );\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this._css;\n    }\n    warnings() {\n      return [];\n    }\n    get content() {\n      return this.result.css;\n    }\n    get css() {\n      return this.result.css;\n    }\n    get map() {\n      return this.result.map;\n    }\n    get messages() {\n      return [];\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      if (this._root) {\n        return this._root;\n      }\n      let root2;\n      let parser2 = parse;\n      try {\n        root2 = parser2(this._css, this._opts);\n      } catch (error) {\n        this.error = error;\n      }\n      if (this.error) {\n        throw this.error;\n      } else {\n        this._root = root2;\n        return root2;\n      }\n    }\n    get [Symbol.toStringTag]() {\n      return \"NoWorkResult\";\n    }\n  }\n  noWorkResult = NoWorkResult;\n  NoWorkResult.default = NoWorkResult;\n  return noWorkResult;\n}\nvar processor;\nvar hasRequiredProcessor;\nfunction requireProcessor() {\n  if (hasRequiredProcessor) return processor;\n  hasRequiredProcessor = 1;\n  let NoWorkResult = requireNoWorkResult();\n  let LazyResult = requireLazyResult();\n  let Document2 = requireDocument();\n  let Root = requireRoot();\n  class Processor {\n    constructor(plugins = []) {\n      this.version = \"8.4.38\";\n      this.plugins = this.normalize(plugins);\n    }\n    normalize(plugins) {\n      let normalized = [];\n      for (let i2 of plugins) {\n        if (i2.postcss === true) {\n          i2 = i2();\n        } else if (i2.postcss) {\n          i2 = i2.postcss;\n        }\n        if (typeof i2 === \"object\" && Array.isArray(i2.plugins)) {\n          normalized = normalized.concat(i2.plugins);\n        } else if (typeof i2 === \"object\" && i2.postcssPlugin) {\n          normalized.push(i2);\n        } else if (typeof i2 === \"function\") {\n          normalized.push(i2);\n        } else if (typeof i2 === \"object\" && (i2.parse || i2.stringify)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            throw new Error(\n              \"PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.\"\n            );\n          }\n        } else {\n          throw new Error(i2 + \" is not a PostCSS plugin\");\n        }\n      }\n      return normalized;\n    }\n    process(css, opts = {}) {\n      if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n        return new NoWorkResult(this, css, opts);\n      } else {\n        return new LazyResult(this, css, opts);\n      }\n    }\n    use(plugin) {\n      this.plugins = this.plugins.concat(this.normalize([plugin]));\n      return this;\n    }\n  }\n  processor = Processor;\n  Processor.default = Processor;\n  Root.registerProcessor(Processor);\n  Document2.registerProcessor(Processor);\n  return processor;\n}\nvar fromJSON_1;\nvar hasRequiredFromJSON;\nfunction requireFromJSON() {\n  if (hasRequiredFromJSON) return fromJSON_1;\n  hasRequiredFromJSON = 1;\n  let Declaration = requireDeclaration();\n  let PreviousMap = requirePreviousMap();\n  let Comment = requireComment();\n  let AtRule = requireAtRule();\n  let Input = requireInput();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  function fromJSON(json, inputs) {\n    if (Array.isArray(json)) return json.map((n2) => fromJSON(n2));\n    let { inputs: ownInputs, ...defaults } = json;\n    if (ownInputs) {\n      inputs = [];\n      for (let input2 of ownInputs) {\n        let inputHydrated = { ...input2, __proto__: Input.prototype };\n        if (inputHydrated.map) {\n          inputHydrated.map = {\n            ...inputHydrated.map,\n            __proto__: PreviousMap.prototype\n          };\n        }\n        inputs.push(inputHydrated);\n      }\n    }\n    if (defaults.nodes) {\n      defaults.nodes = json.nodes.map((n2) => fromJSON(n2, inputs));\n    }\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    if (defaults.type === \"root\") {\n      return new Root(defaults);\n    } else if (defaults.type === \"decl\") {\n      return new Declaration(defaults);\n    } else if (defaults.type === \"rule\") {\n      return new Rule(defaults);\n    } else if (defaults.type === \"comment\") {\n      return new Comment(defaults);\n    } else if (defaults.type === \"atrule\") {\n      return new AtRule(defaults);\n    } else {\n      throw new Error(\"Unknown node type: \" + json.type);\n    }\n  }\n  fromJSON_1 = fromJSON;\n  fromJSON.default = fromJSON;\n  return fromJSON_1;\n}\nvar postcss_1;\nvar hasRequiredPostcss;\nfunction requirePostcss() {\n  if (hasRequiredPostcss) return postcss_1;\n  hasRequiredPostcss = 1;\n  let CssSyntaxError = requireCssSyntaxError();\n  let Declaration = requireDeclaration();\n  let LazyResult = requireLazyResult();\n  let Container = requireContainer();\n  let Processor = requireProcessor();\n  let stringify = requireStringify();\n  let fromJSON = requireFromJSON();\n  let Document2 = requireDocument();\n  let Warning = requireWarning();\n  let Comment = requireComment();\n  let AtRule = requireAtRule();\n  let Result = requireResult();\n  let Input = requireInput();\n  let parse = requireParse();\n  let list = requireList();\n  let Rule = requireRule();\n  let Root = requireRoot();\n  let Node2 = requireNode();\n  function postcss2(...plugins) {\n    if (plugins.length === 1 && Array.isArray(plugins[0])) {\n      plugins = plugins[0];\n    }\n    return new Processor(plugins);\n  }\n  postcss2.plugin = function plugin(name, initializer) {\n    let warningPrinted = false;\n    function creator(...args) {\n      if (console && console.warn && !warningPrinted) {\n        warningPrinted = true;\n        console.warn(\n          name + \": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"\n        );\n        if (process.env.LANG && process.env.LANG.startsWith(\"cn\")) {\n          console.warn(\n            name + \": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://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    let cache;\n    Object.defineProperty(creator, \"postcss\", {\n      get() {\n        if (!cache) cache = creator();\n        return cache;\n      }\n    });\n    creator.process = function(css, processOpts, pluginOpts) {\n      return postcss2([creator(pluginOpts)]).process(css, processOpts);\n    };\n    return creator;\n  };\n  postcss2.stringify = stringify;\n  postcss2.parse = parse;\n  postcss2.fromJSON = fromJSON;\n  postcss2.list = list;\n  postcss2.comment = (defaults) => new Comment(defaults);\n  postcss2.atRule = (defaults) => new AtRule(defaults);\n  postcss2.decl = (defaults) => new Declaration(defaults);\n  postcss2.rule = (defaults) => new Rule(defaults);\n  postcss2.root = (defaults) => new Root(defaults);\n  postcss2.document = (defaults) => new Document2(defaults);\n  postcss2.CssSyntaxError = CssSyntaxError;\n  postcss2.Declaration = Declaration;\n  postcss2.Container = Container;\n  postcss2.Processor = Processor;\n  postcss2.Document = Document2;\n  postcss2.Comment = Comment;\n  postcss2.Warning = Warning;\n  postcss2.AtRule = AtRule;\n  postcss2.Result = Result;\n  postcss2.Input = Input;\n  postcss2.Rule = Rule;\n  postcss2.Root = Root;\n  postcss2.Node = Node2;\n  LazyResult.registerPostcss(postcss2);\n  postcss_1 = postcss2;\n  postcss2.default = postcss2;\n  return postcss_1;\n}\nvar postcssExports = requirePostcss();\nconst postcss = /* @__PURE__ */ getDefaultExportFromCjs(postcssExports);\npostcss.stringify;\npostcss.fromJSON;\npostcss.plugin;\npostcss.parse;\npostcss.list;\npostcss.document;\npostcss.comment;\npostcss.atRule;\npostcss.rule;\npostcss.decl;\npostcss.root;\npostcss.CssSyntaxError;\npostcss.Declaration;\npostcss.Container;\npostcss.Processor;\npostcss.Document;\npostcss.Comment;\npostcss.Warning;\npostcss.AtRule;\npostcss.Result;\npostcss.Input;\npostcss.Rule;\npostcss.Root;\npostcss.Node;\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 || {});\nfunction parseCSSText(cssText) {\n  const res = {};\n  const listDelimiter = /;(?![^(]*\\))/g;\n  const propertyDelimiter = /:(.+)/;\n  const comment2 = /\\/\\*.*?\\*\\//g;\n  cssText.replace(comment2, \"\").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    __publicField2(this, \"parentElement\", null);\n    __publicField2(this, \"parentNode\", null);\n    __publicField2(this, \"ownerDocument\");\n    __publicField2(this, \"firstChild\", null);\n    __publicField2(this, \"lastChild\", null);\n    __publicField2(this, \"previousSibling\", null);\n    __publicField2(this, \"nextSibling\", null);\n    __publicField2(this, \"ELEMENT_NODE\", 1);\n    __publicField2(this, \"TEXT_NODE\", 3);\n    __publicField2(this, \"nodeType\");\n    __publicField2(this, \"nodeName\");\n    __publicField2(this, \"RRNodeType\");\n  }\n  get childNodes() {\n    const childNodes2 = [];\n    let childIterator = this.firstChild;\n    while (childIterator) {\n      childNodes2.push(childIterator);\n      childIterator = childIterator.nextSibling;\n    }\n    return childNodes2;\n  }\n  contains(node2) {\n    if (!(node2 instanceof BaseRRNode)) return false;\n    else if (node2.ownerDocument !== this.ownerDocument) return false;\n    else if (node2 === this) return true;\n    while (node2.parentNode) {\n      if (node2.parentNode === this) return true;\n      node2 = node2.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    __publicField2(this, \"nodeType\", 9);\n    __publicField2(this, \"nodeName\", \"#document\");\n    __publicField2(this, \"compatMode\", \"CSS1Compat\");\n    __publicField2(this, \"RRNodeType\", NodeType$1.Document);\n    __publicField2(this, \"textContent\", null);\n    this.ownerDocument = this;\n  }\n  get documentElement() {\n    return this.childNodes.find(\n      (node2) => node2.RRNodeType === NodeType$1.Element && node2.tagName === \"HTML\"\n    ) || null;\n  }\n  get body() {\n    var _a2;\n    return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n      (node2) => node2.RRNodeType === NodeType$1.Element && node2.tagName === \"BODY\"\n    )) || null;\n  }\n  get head() {\n    var _a2;\n    return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n      (node2) => node2.RRNodeType === NodeType$1.Element && node2.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(node2) {\n    return removeChild(this, node2);\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 comment2 = new BaseRRComment(data);\n    comment2.ownerDocument = this;\n    return comment2;\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    __publicField2(this, \"nodeType\", 10);\n    __publicField2(this, \"RRNodeType\", NodeType$1.DocumentType);\n    __publicField2(this, \"name\");\n    __publicField2(this, \"publicId\");\n    __publicField2(this, \"systemId\");\n    __publicField2(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    __publicField2(this, \"nodeType\", 1);\n    __publicField2(this, \"RRNodeType\", NodeType$1.Element);\n    __publicField2(this, \"tagName\");\n    __publicField2(this, \"attributes\", {});\n    __publicField2(this, \"shadowRoot\", null);\n    __publicField2(this, \"scrollLeft\");\n    __publicField2(this, \"scrollTop\");\n    this.tagName = tagName.toUpperCase();\n    this.nodeName = tagName.toUpperCase();\n  }\n  get textContent() {\n    let result2 = \"\";\n    this.childNodes.forEach((node2) => result2 += node2.textContent);\n    return result2;\n  }\n  set textContent(textContent2) {\n    this.firstChild = null;\n    this.lastChild = null;\n    this.appendChild(this.ownerDocument.createTextNode(textContent2));\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    if (this.attributes[name] === void 0) return null;\n    return this.attributes[name];\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(node2) {\n    return removeChild(this, node2);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  attachShadow(_init) {\n    const shadowRoot2 = this.ownerDocument.createElement(\"SHADOWROOT\");\n    this.shadowRoot = shadowRoot2;\n    return shadowRoot2;\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    __publicField2(this, \"currentTime\");\n    __publicField2(this, \"volume\");\n    __publicField2(this, \"paused\");\n    __publicField2(this, \"muted\");\n    __publicField2(this, \"playbackRate\");\n    __publicField2(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 BaseRRDialogElement extends BaseRRElement {\n  constructor() {\n    super(...arguments);\n    __publicField2(this, \"tagName\", \"DIALOG\");\n    __publicField2(this, \"nodeName\", \"DIALOG\");\n  }\n  get isModal() {\n    return this.getAttribute(\"rr_open_mode\") === \"modal\";\n  }\n  get open() {\n    return this.getAttribute(\"open\") !== null;\n  }\n  close() {\n    this.removeAttribute(\"open\");\n    this.removeAttribute(\"rr_open_mode\");\n  }\n  show() {\n    this.setAttribute(\"open\", \"\");\n    this.setAttribute(\"rr_open_mode\", \"non-modal\");\n  }\n  showModal() {\n    this.setAttribute(\"open\", \"\");\n    this.setAttribute(\"rr_open_mode\", \"modal\");\n  }\n}\nclass BaseRRText extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField2(this, \"nodeType\", 3);\n    __publicField2(this, \"nodeName\", \"#text\");\n    __publicField2(this, \"RRNodeType\", NodeType$1.Text);\n    __publicField2(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent2) {\n    this.data = textContent2;\n  }\n  toString() {\n    return `RRText text=${JSON.stringify(this.data)}`;\n  }\n}\nclass BaseRRComment extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField2(this, \"nodeType\", 8);\n    __publicField2(this, \"nodeName\", \"#comment\");\n    __publicField2(this, \"RRNodeType\", NodeType$1.Comment);\n    __publicField2(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent2) {\n    this.data = textContent2;\n  }\n  toString() {\n    return `RRComment text=${JSON.stringify(this.data)}`;\n  }\n}\nclass BaseRRCDATASection extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField2(this, \"nodeName\", \"#cdata-section\");\n    __publicField2(this, \"nodeType\", 4);\n    __publicField2(this, \"RRNodeType\", NodeType$1.CDATA);\n    __publicField2(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent2) {\n    this.data = textContent2;\n  }\n  toString() {\n    return `RRCDATASection data=${JSON.stringify(this.data)}`;\n  }\n}\nclass ClassList {\n  constructor(classText, onChange) {\n    __publicField2(this, \"onChange\");\n    __publicField2(this, \"classes\", []);\n    __publicField2(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    __publicField2(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$2 = /* @__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$2 || {});\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  var _a2;\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    (_a2 = oldTree.parentNode) == null ? void 0 : _a2.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 == null ? void 0 : 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 = oldTree.contentDocument;\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  var _a2;\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          if (newMediaRRElement.loop !== void 0)\n            oldMediaElement.loop = newMediaRRElement.loop;\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        // Props of style elements have to be updated after all children are updated. Otherwise the props can be overwritten by textContent.\n        case \"STYLE\": {\n          const styleSheet = oldElement.sheet;\n          styleSheet && newTree.rules.forEach(\n            (data) => replayer.applyStyleSheetMutation(data, styleSheet)\n          );\n          break;\n        }\n        case \"DIALOG\": {\n          const dialog = oldElement;\n          const rrDialog = newRRElement;\n          const wasOpen = dialog.open;\n          const wasModal = dialog.matches(\"dialog:modal\");\n          const shouldBeOpen = rrDialog.open;\n          const shouldBeModal = rrDialog.isModal;\n          const modalChanged = wasModal !== shouldBeModal;\n          const openChanged = wasOpen !== shouldBeOpen;\n          if (modalChanged || wasOpen && openChanged) dialog.close();\n          if (shouldBeOpen && (openChanged || modalChanged)) {\n            try {\n              if (shouldBeModal) dialog.showModal();\n              else dialog.show();\n            } catch (e2) {\n              console.warn(e2);\n            }\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 == null ? void 0 : createdNodeSet.has(oldTree)) {\n    createdNodeSet.delete(oldTree);\n    (_a2 = replayer.afterAppend) == null ? void 0 : _a2.call(replayer, 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 == null ? void 0 : 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        oldTree.insertBefore(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        oldTree.insertBefore(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          oldTree.insertBefore(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          oldTree.insertBefore(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        oldTree.insertBefore(newNode, referenceNode);\n      } catch (e2) {\n        console.warn(e2);\n      }\n    }\n  } else if (newStartIndex > newEndIndex) {\n    for (; oldStartIndex <= oldEndIndex; oldStartIndex++) {\n      const node2 = oldChildren[oldStartIndex];\n      if (!node2 || node2.parentNode !== oldTree) continue;\n      try {\n        oldTree.removeChild(node2);\n        replayer.mirror.removeNodeFromMap(node2);\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 node2 = null;\n  if (nodeId > -1) node2 = domMirror.getNode(nodeId);\n  if (node2 !== null && sameNodeType(node2, rrNode)) return node2;\n  switch (rrNode.RRNodeType) {\n    case NodeType$1.Document:\n      node2 = new Document();\n      break;\n    case NodeType$1.DocumentType:\n      node2 = 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 == null ? void 0 : sn.isSVG)) {\n        node2 = document.createElementNS(NAMESPACES[\"svg\"], tagName);\n      } else node2 = document.createElement(rrNode.tagName);\n      break;\n    }\n    case NodeType$1.Text:\n      node2 = document.createTextNode(rrNode.data);\n      break;\n    case NodeType$1.Comment:\n      node2 = document.createComment(rrNode.data);\n      break;\n    case NodeType$1.CDATA:\n      node2 = document.createCDATASection(rrNode.data);\n      break;\n  }\n  if (sn) domMirror.add(node2, { ...sn });\n  try {\n    createdNodeSet == null ? void 0 : createdNodeSet.add(node2);\n  } catch (e2) {\n  }\n  return node2;\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}\nclass RRDocument extends BaseRRDocument {\n  constructor(mirror2) {\n    super();\n    __publicField2(this, \"UNSERIALIZED_STARTING_ID\", -2);\n    __publicField2(this, \"_unserializedId\", this.UNSERIALIZED_STARTING_ID);\n    __publicField2(this, \"mirror\", createMirror());\n    __publicField2(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      case \"DIALOG\":\n        element = new RRDialogElement(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    __publicField2(this, \"inputData\", null);\n    __publicField2(this, \"scrollData\", null);\n  }\n}\nclass RRMediaElement extends BaseRRMediaElement {\n}\nclass RRDialogElement extends BaseRRDialogElement {\n}\nclass RRCanvasElement extends RRElement {\n  constructor() {\n    super(...arguments);\n    __publicField2(this, \"rr_dataURL\", null);\n    __publicField2(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    __publicField2(this, \"rules\", []);\n  }\n}\nclass RRIFrameElement extends RRElement {\n  constructor(upperTagName, mirror2) {\n    super(upperTagName);\n    __publicField2(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(node2, rrdom, domMirror, parentRRNode) {\n  let rrNode;\n  switch (node2.nodeType) {\n    case NodeType$2.DOCUMENT_NODE:\n      if (parentRRNode && parentRRNode.nodeName === \"IFRAME\")\n        rrNode = parentRRNode.contentDocument;\n      else {\n        rrNode = rrdom;\n        rrNode.compatMode = node2.compatMode;\n      }\n      break;\n    case NodeType$2.DOCUMENT_TYPE_NODE: {\n      const documentType = node2;\n      rrNode = rrdom.createDocumentType(\n        documentType.name,\n        documentType.publicId,\n        documentType.systemId\n      );\n      break;\n    }\n    case NodeType$2.ELEMENT_NODE: {\n      const elementNode = node2;\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$2.TEXT_NODE:\n      rrNode = rrdom.createTextNode(node2.textContent || \"\");\n      break;\n    case NodeType$2.CDATA_SECTION_NODE:\n      rrNode = rrdom.createCDATASection(node2.data);\n      break;\n    case NodeType$2.COMMENT_NODE:\n      rrNode = rrdom.createComment(node2.textContent || \"\");\n      break;\n    // if node is a shadow root\n    case NodeType$2.DOCUMENT_FRAGMENT_NODE:\n      rrNode = parentRRNode.attachShadow({ mode: \"open\" });\n      break;\n    default:\n      return null;\n  }\n  let sn = domMirror.getMeta(node2);\n  if (rrdom instanceof RRDocument) {\n    if (!sn) {\n      sn = getDefaultSN(rrNode, rrdom.unserializedId);\n      domMirror.add(node2, 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(node2, parentRRNode) {\n    const rrNode = buildFromNode(node2, rrdom, domMirror, parentRRNode);\n    if (rrNode === null) return;\n    if (\n      // if the parentRRNode isn't a RRIFrameElement\n      (parentRRNode == null ? void 0 : parentRRNode.nodeName) !== \"IFRAME\" && // if node isn't a shadow root\n      node2.nodeType !== NodeType$2.DOCUMENT_FRAGMENT_NODE\n    ) {\n      parentRRNode == null ? void 0 : parentRRNode.appendChild(rrNode);\n      rrNode.parentNode = parentRRNode;\n      rrNode.parentElement = parentRRNode;\n    }\n    if (node2.nodeName === \"IFRAME\") {\n      const iframeDoc = node2.contentDocument;\n      iframeDoc && walk2(iframeDoc, rrNode);\n    } else if (node2.nodeType === NodeType$2.DOCUMENT_NODE || node2.nodeType === NodeType$2.ELEMENT_NODE || node2.nodeType === NodeType$2.DOCUMENT_FRAGMENT_NODE) {\n      if (node2.nodeType === NodeType$2.ELEMENT_NODE && node2.shadowRoot)\n        walk2(node2.shadowRoot, rrNode);\n      node2.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    __publicField2(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField2(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    var _a2;\n    if (!n2) return -1;\n    const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.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(node2) {\n    return this.nodeMetaMap.has(node2);\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(node2, id) {\n  switch (node2.RRNodeType) {\n    case NodeType$1.Document:\n      return {\n        id,\n        type: node2.RRNodeType,\n        childNodes: []\n      };\n    case NodeType$1.DocumentType: {\n      const doctype = node2;\n      return {\n        id,\n        type: node2.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: node2.RRNodeType,\n        tagName: node2.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: node2.RRNodeType,\n        textContent: node2.textContent || \"\"\n      };\n    case NodeType$1.Comment:\n      return {\n        id,\n        type: node2.RRNodeType,\n        textContent: node2.textContent || \"\"\n      };\n    case NodeType$1.CDATA:\n      return {\n        id,\n        type: node2.RRNodeType,\n        textContent: \"\"\n      };\n  }\n}\nconst testableAccessors = {\n  Node: [\n    \"childNodes\",\n    \"parentNode\",\n    \"parentElement\",\n    \"textContent\",\n    \"ownerDocument\"\n  ],\n  ShadowRoot: [\"host\", \"styleSheets\"],\n  Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n  MutationObserver: []\n};\nconst testableMethods = {\n  Node: [\"contains\", \"getRootNode\"],\n  ShadowRoot: [\"getSelection\"],\n  Element: [],\n  MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst untaintedBaseIframeCleanup = {};\nconst isAngularZonePresent = () => {\n  return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n  if (untaintedBasePrototype[key])\n    return untaintedBasePrototype[key];\n  const defaultObj = globalThis[key];\n  const defaultPrototype = defaultObj.prototype;\n  const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n  const isUntaintedAccessors = Boolean(\n    accessorNames && // @ts-expect-error 2345\n    accessorNames.every(\n      (accessor) => {\n        var _a2, _b;\n        return Boolean(\n          (_b = (_a2 = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a2.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n        );\n      }\n    )\n  );\n  const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n  const isUntaintedMethods = Boolean(\n    methodNames && methodNames.every(\n      // @ts-expect-error 2345\n      (method) => {\n        var _a2;\n        return typeof defaultPrototype[method] === \"function\" && ((_a2 = defaultPrototype[method]) == null ? void 0 : _a2.toString().includes(\"[native code]\"));\n      }\n    )\n  );\n  if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n    untaintedBasePrototype[key] = defaultObj.prototype;\n    return defaultObj.prototype;\n  }\n  try {\n    const iframeEl = document.createElement(\"iframe\");\n    iframeEl.style.display = \"none\";\n    document.body.appendChild(iframeEl);\n    const win = iframeEl.contentWindow;\n    if (!win) return defaultObj.prototype;\n    const untaintedObject = win[key].prototype;\n    if (!untaintedObject) {\n      iframeEl.remove();\n      return defaultPrototype;\n    }\n    const ua = navigator.userAgent;\n    if (ua.includes(\"Safari\") && !ua.includes(\"Chrome\")) {\n      iframeEl.classList.add(\"rr-block\");\n      iframeEl.setAttribute(\"__rrwebUntaintedMutationObserver\", \"\");\n      untaintedBaseIframeCleanup[key] = () => iframeEl.remove();\n    } else {\n      iframeEl.remove();\n    }\n    return untaintedBasePrototype[key] = untaintedObject;\n  } catch {\n    return defaultPrototype;\n  }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n  var _a2;\n  const cacheKey = `${key}.${String(accessor)}`;\n  if (untaintedAccessorCache[cacheKey])\n    return untaintedAccessorCache[cacheKey].call(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedAccessor = (_a2 = Object.getOwnPropertyDescriptor(\n    untaintedPrototype,\n    accessor\n  )) == null ? void 0 : _a2.get;\n  if (!untaintedAccessor) return instance[accessor];\n  untaintedAccessorCache[cacheKey] = untaintedAccessor;\n  return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n  const cacheKey = `${key}.${String(method)}`;\n  if (untaintedMethodCache[cacheKey])\n    return untaintedMethodCache[cacheKey].bind(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedMethod = untaintedPrototype[method];\n  if (typeof untaintedMethod !== \"function\") return instance[method];\n  untaintedMethodCache[cacheKey] = untaintedMethod;\n  return untaintedMethod.bind(instance);\n}\nfunction ownerDocument(n2) {\n  return getUntaintedAccessor(\"Node\", n2, \"ownerDocument\");\n}\nfunction childNodes(n2) {\n  return getUntaintedAccessor(\"Node\", n2, \"childNodes\");\n}\nfunction parentNode(n2) {\n  return getUntaintedAccessor(\"Node\", n2, \"parentNode\");\n}\nfunction parentElement(n2) {\n  return getUntaintedAccessor(\"Node\", n2, \"parentElement\");\n}\nfunction textContent(n2) {\n  return getUntaintedAccessor(\"Node\", n2, \"textContent\");\n}\nfunction contains(n2, other) {\n  return getUntaintedMethod(\"Node\", n2, \"contains\")(other);\n}\nfunction getRootNode(n2) {\n  return getUntaintedMethod(\"Node\", n2, \"getRootNode\")();\n}\nfunction host(n2) {\n  if (!n2 || !(\"host\" in n2)) return null;\n  return getUntaintedAccessor(\"ShadowRoot\", n2, \"host\");\n}\nfunction styleSheets(n2) {\n  return n2.styleSheets;\n}\nfunction shadowRoot(n2) {\n  if (!n2 || !(\"shadowRoot\" in n2)) return null;\n  return getUntaintedAccessor(\"Element\", n2, \"shadowRoot\");\n}\nfunction querySelector(n2, selectors) {\n  return getUntaintedAccessor(\"Element\", n2, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n2, selectors) {\n  return getUntaintedAccessor(\"Element\", n2, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n  return [\n    getUntaintedPrototype(\"MutationObserver\").constructor,\n    untaintedBaseIframeCleanup[\"MutationObserver\"] ?? (() => {\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 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}\nconst index = {\n  ownerDocument,\n  childNodes,\n  parentNode,\n  parentElement,\n  textContent,\n  contains,\n  getRootNode,\n  host,\n  styleSheets,\n  shadowRoot,\n  querySelector,\n  querySelectorAll,\n  nowTimestamp,\n  mutationObserverCtor,\n  patch\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 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}\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 getBaseDimension(node2, rootIframe) {\n  var _a2, _b;\n  const frameElement = (_b = (_a2 = node2.ownerDocument) == null ? void 0 : _a2.defaultView) == null ? void 0 : _b.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  if (!n2) return false;\n  if (n2 instanceof BaseRRNode && \"shadowRoot\" in n2) {\n    return Boolean(n2.shadowRoot);\n  }\n  return Boolean(index.shadowRoot(n2));\n}\nfunction getNestedRule(rules2, position) {\n  const rule2 = rules2 == null ? void 0 : rules2[position[0]];\n  if (!rule2) {\n    return null;\n  }\n  if (position.length === 1) {\n    return rule2;\n  } else {\n    return getNestedRule(rule2.cssRules, position.slice(1));\n  }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n  const positions = [...nestedIndex];\n  const index2 = positions.pop();\n  return { positions, index: index2 };\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    __publicField(this, \"id\", 1);\n    __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n    __publicField(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}\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  EventType2[EventType2[\"Asset\"] = 7] = \"Asset\";\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 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 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 || {});\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 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 jsContent = '(function() {\\n  \"use strict\";\\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\\n  var lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\\n  for (var i = 0; i < chars.length; i++) {\\n    lookup[chars.charCodeAt(i)] = i;\\n  }\\n  var 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  };\\n  const lastBlobMap = /* @__PURE__ */ new Map();\\n  const transparentBlobMap = /* @__PURE__ */ new Map();\\n  async function getTransparentBlobFor(width, height, dataURLOptions) {\\n    const id = `${width}-${height}`;\\n    if (\"OffscreenCanvas\" in globalThis) {\\n      if (transparentBlobMap.has(id)) return transparentBlobMap.get(id);\\n      const offscreen = new OffscreenCanvas(width, height);\\n      offscreen.getContext(\"2d\");\\n      const blob = await offscreen.convertToBlob(dataURLOptions);\\n      const arrayBuffer = await blob.arrayBuffer();\\n      const base64 = encode(arrayBuffer);\\n      transparentBlobMap.set(id, base64);\\n      return base64;\\n    } else {\\n      return \"\";\\n    }\\n  }\\n  const worker = self;\\n  worker.onmessage = async function(e) {\\n    if (\"OffscreenCanvas\" in globalThis) {\\n      const { id, bitmap, width, height, dataURLOptions } = e.data;\\n      const transparentBase64 = getTransparentBlobFor(\\n        width,\\n        height,\\n        dataURLOptions\\n      );\\n      const offscreen = new OffscreenCanvas(width, height);\\n      const ctx = offscreen.getContext(\"2d\");\\n      ctx.drawImage(bitmap, 0, 0);\\n      bitmap.close();\\n      const blob = await offscreen.convertToBlob(dataURLOptions);\\n      const type = blob.type;\\n      const arrayBuffer = await blob.arrayBuffer();\\n      const base64 = encode(arrayBuffer);\\n      if (!lastBlobMap.has(id) && await transparentBase64 === base64) {\\n        lastBlobMap.set(id, base64);\\n        return worker.postMessage({ id });\\n      }\\n      if (lastBlobMap.get(id) === base64) return worker.postMessage({ id });\\n      worker.postMessage({\\n        id,\\n        type,\\n        base64,\\n        width,\\n        height\\n      });\\n      lastBlobMap.set(id, base64);\\n    } else {\\n      return worker.postMessage({ id: e.data.id });\\n    }\\n  };\\n})();\\n//# sourceMappingURL=image-bitmap-data-url-worker-IJpC7g_b.js.map\\n';\ntypeof self !== \"undefined\" && self.Blob && new Blob([jsContent], { type: \"text/javascript;charset=utf-8\" });\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 = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\ncreateMirror$2();\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}\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    __publicField(this, \"timeOffset\", 0);\n    __publicField(this, \"speed\");\n    __publicField(this, \"actions\");\n    __publicField(this, \"raf\", null);\n    __publicField(this, \"lastTimestamp\");\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 index2 = this.findActionIndex(action);\n      this.actions.splice(index2, 0, action);\n    }\n    if (rafWasActive) {\n      this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n    }\n  }\n  start() {\n    this.timeOffset = 0;\n    this.lastTimestamp = performance.now();\n    this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n  }\n  updateLiveTime() {\n    if (this.raf === true) {\n      this.rafCheck();\n    }\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 = requestAnimationFrame(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          var _a2;\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 == null ? void 0 : lastPlayedEvent.timestamp;\n          if ((lastPlayedEvent == null ? void 0 : lastPlayedEvent.type) === EventType.IncrementalSnapshot && lastPlayedEvent.data.source === IncrementalSource.MouseMove) {\n            lastPlayedTimestamp = lastPlayedEvent.timestamp + ((_a2 = lastPlayedEvent.data.positions[0]) == null ? void 0 : _a2.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: index2 } = arg;\n        return variableListFor(ctx, name)[index2];\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 blob2 = new Blob(blobContents, {\n          type: arg.type\n        });\n        return blob2;\n      }\n    } else if (Array.isArray(arg)) {\n      const result2 = await Promise.all(\n        arg.map(deserializeArg(imageMap, ctx, preload))\n      );\n      return result2;\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, result2) {\n  if (!(result2 == null ? void 0 : result2.constructor)) return;\n  const { name } = result2.constructor;\n  if (!WebGLVariableConstructorsNames.includes(name)) return;\n  const variables = variableListFor(ctx, name);\n  if (!variables.includes(result2)) variables.push(result2);\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 result2 = original.apply(ctx, args);\n    saveToWebGLVarMap(ctx, result2);\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, index2) => {\n    const mutation = mutations[index2];\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}\nclass MediaManager {\n  constructor(options) {\n    __publicField(this, \"mediaMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"warn\");\n    __publicField(this, \"service\");\n    __publicField(this, \"speedService\");\n    __publicField(this, \"emitter\");\n    __publicField(this, \"getCurrentTime\");\n    __publicField(this, \"metadataCallbackMap\", /* @__PURE__ */ new Map());\n    this.warn = options.warn;\n    this.service = options.service;\n    this.speedService = options.speedService;\n    this.emitter = options.emitter;\n    this.getCurrentTime = options.getCurrentTime;\n    this.emitter.on(ReplayerEvents.Start, this.start.bind(this));\n    this.emitter.on(ReplayerEvents.SkipStart, this.start.bind(this));\n    this.emitter.on(ReplayerEvents.Pause, this.pause.bind(this));\n    this.emitter.on(ReplayerEvents.Finish, this.pause.bind(this));\n    this.speedService.subscribe(() => {\n      this.syncAllMediaElements();\n    });\n  }\n  syncAllMediaElements(options = { pause: false }) {\n    this.mediaMap.forEach((_mediaState, target) => {\n      this.syncTargetWithState(target);\n      if (options.pause) {\n        target.pause();\n      }\n    });\n  }\n  start() {\n    this.syncAllMediaElements();\n  }\n  pause() {\n    this.syncAllMediaElements({ pause: true });\n  }\n  seekTo({\n    time,\n    target,\n    mediaState\n  }) {\n    if (mediaState.isPlaying) {\n      const differenceBetweenCurrentTimeAndMediaMutationTimestamp = time - mediaState.lastInteractionTimeOffset;\n      const mediaPlaybackOffset = differenceBetweenCurrentTimeAndMediaMutationTimestamp / 1e3 * mediaState.playbackRate;\n      const duration = \"duration\" in target && target.duration;\n      if (Number.isNaN(duration)) {\n        this.waitForMetadata(target);\n        return;\n      }\n      let seekToTime = mediaState.currentTimeAtLastInteraction + mediaPlaybackOffset;\n      if (target.loop && // RRMediaElement doesn't have a duration property\n      duration !== false) {\n        seekToTime = seekToTime % duration;\n      }\n      target.currentTime = seekToTime;\n    } else {\n      target.pause();\n      target.currentTime = mediaState.currentTimeAtLastInteraction;\n    }\n  }\n  waitForMetadata(target) {\n    if (this.metadataCallbackMap.has(target)) return;\n    if (!(\"addEventListener\" in target)) return;\n    const onLoadedMetadata = () => {\n      this.metadataCallbackMap.delete(target);\n      const mediaState = this.mediaMap.get(target);\n      if (!mediaState) return;\n      this.seekTo({\n        time: this.getCurrentTime(),\n        target,\n        mediaState\n      });\n    };\n    this.metadataCallbackMap.set(target, onLoadedMetadata);\n    target.addEventListener(\"loadedmetadata\", onLoadedMetadata, {\n      once: true\n    });\n  }\n  getMediaStateFromMutation({\n    target,\n    timeOffset,\n    mutation\n  }) {\n    const lastState = this.mediaMap.get(target);\n    const { type, playbackRate, currentTime, muted, volume, loop } = mutation;\n    const isPlaying = type === MediaInteractions.Play || type !== MediaInteractions.Pause && ((lastState == null ? void 0 : lastState.isPlaying) || target.getAttribute(\"autoplay\") !== null);\n    const mediaState = {\n      isPlaying,\n      currentTimeAtLastInteraction: currentTime ?? (lastState == null ? void 0 : lastState.currentTimeAtLastInteraction) ?? 0,\n      lastInteractionTimeOffset: timeOffset,\n      playbackRate: playbackRate ?? (lastState == null ? void 0 : lastState.playbackRate) ?? 1,\n      volume: volume ?? (lastState == null ? void 0 : lastState.volume) ?? 1,\n      muted: muted ?? (lastState == null ? void 0 : lastState.muted) ?? target.getAttribute(\"muted\") === null,\n      loop: loop ?? (lastState == null ? void 0 : lastState.loop) ?? target.getAttribute(\"loop\") === null\n    };\n    return mediaState;\n  }\n  syncTargetWithState(target) {\n    const mediaState = this.mediaMap.get(target);\n    if (!mediaState) return;\n    const { muted, loop, volume, isPlaying } = mediaState;\n    const playerIsPaused = this.service.state.matches(\"paused\");\n    const playbackRate = mediaState.playbackRate * this.speedService.state.context.timer.speed;\n    try {\n      this.seekTo({\n        time: this.getCurrentTime(),\n        target,\n        mediaState\n      });\n      if (target.volume !== volume) {\n        target.volume = volume;\n      }\n      target.muted = muted;\n      target.loop = loop;\n      if (target.playbackRate !== playbackRate) {\n        target.playbackRate = playbackRate;\n      }\n      if (isPlaying && !playerIsPaused) {\n        void target.play();\n      } else {\n        target.pause();\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  }\n  addMediaElements(node2, timeOffset, mirror2) {\n    if (![\"AUDIO\", \"VIDEO\"].includes(node2.nodeName)) return;\n    const target = node2;\n    const serializedNode = mirror2.getMeta(target);\n    if (!serializedNode || !(\"attributes\" in serializedNode)) return;\n    const playerIsPaused = this.service.state.matches(\"paused\");\n    const mediaAttributes = serializedNode.attributes;\n    let isPlaying = false;\n    if (mediaAttributes.rr_mediaState) {\n      isPlaying = mediaAttributes.rr_mediaState === \"played\";\n    } else {\n      isPlaying = target.getAttribute(\"autoplay\") !== null;\n    }\n    if (isPlaying && playerIsPaused) target.pause();\n    let playbackRate = 1;\n    if (typeof mediaAttributes.rr_mediaPlaybackRate === \"number\") {\n      playbackRate = mediaAttributes.rr_mediaPlaybackRate;\n    }\n    let muted = false;\n    if (typeof mediaAttributes.rr_mediaMuted === \"boolean\") {\n      muted = mediaAttributes.rr_mediaMuted;\n    } else {\n      muted = target.getAttribute(\"muted\") !== null;\n    }\n    let loop = false;\n    if (typeof mediaAttributes.rr_mediaLoop === \"boolean\") {\n      loop = mediaAttributes.rr_mediaLoop;\n    } else {\n      loop = target.getAttribute(\"loop\") !== null;\n    }\n    let volume = 1;\n    if (typeof mediaAttributes.rr_mediaVolume === \"number\") {\n      volume = mediaAttributes.rr_mediaVolume;\n    }\n    let currentTimeAtLastInteraction = 0;\n    if (typeof mediaAttributes.rr_mediaCurrentTime === \"number\") {\n      currentTimeAtLastInteraction = mediaAttributes.rr_mediaCurrentTime;\n    }\n    this.mediaMap.set(target, {\n      isPlaying,\n      currentTimeAtLastInteraction,\n      lastInteractionTimeOffset: timeOffset,\n      playbackRate,\n      volume,\n      muted,\n      loop\n    });\n    this.syncTargetWithState(target);\n  }\n  mediaMutation({\n    target,\n    timeOffset,\n    mutation\n  }) {\n    this.mediaMap.set(\n      target,\n      this.getMediaStateFromMutation({\n        target,\n        timeOffset,\n        mutation\n      })\n    );\n    this.syncTargetWithState(target);\n  }\n  isSupportedMediaElement(node2) {\n    return [\"AUDIO\", \"VIDEO\"].includes(node2.nodeName);\n  }\n  reset() {\n    this.mediaMap.clear();\n  }\n}\nfunction applyDialogToTopLevel(node2, attributeMutation) {\n  if (node2.nodeName !== \"DIALOG\" || node2 instanceof BaseRRNode) return;\n  const dialog = node2;\n  const oldIsOpen = dialog.open;\n  const oldIsModalState = oldIsOpen && dialog.matches(\"dialog:modal\");\n  const rrOpenMode = dialog.getAttribute(\"rr_open_mode\");\n  const newIsOpen = typeof (attributeMutation == null ? void 0 : attributeMutation.attributes.open) === \"string\" || typeof dialog.getAttribute(\"open\") === \"string\";\n  const newIsModalState = rrOpenMode === \"modal\";\n  const newIsNonModalState = rrOpenMode === \"non-modal\";\n  const modalStateChanged = oldIsModalState && newIsNonModalState || !oldIsModalState && newIsModalState;\n  if (oldIsOpen && !modalStateChanged) return;\n  if (!dialog.isConnected) {\n    console.warn(\"dialog is not attached to the dom\", dialog);\n    return;\n  }\n  if (oldIsOpen) dialog.close();\n  if (!newIsOpen) return;\n  if (newIsModalState) dialog.showModal();\n  else dialog.show();\n}\nfunction removeDialogFromTopLevel(node2, attributeMutation) {\n  if (node2.nodeName !== \"DIALOG\" || node2 instanceof BaseRRNode) return;\n  const dialog = node2;\n  if (!dialog.isConnected) {\n    console.warn(\"dialog is not attached to the dom\", dialog);\n    return;\n  }\n  if (attributeMutation.attributes.open === null) {\n    dialog.removeAttribute(\"open\");\n    dialog.removeAttribute(\"rr_open_mode\");\n  }\n}\nconst SKIP_TIME_INTERVAL = 5 * 1e3;\nconst mitt = mitt$1;\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}\nclass Replayer {\n  constructor(events, config) {\n    __publicField(this, \"wrapper\");\n    __publicField(this, \"iframe\");\n    __publicField(this, \"UNSAFE_replayCanvas\", false);\n    __publicField(this, \"service\");\n    __publicField(this, \"speedService\");\n    __publicField(this, \"config\");\n    __publicField(this, \"usingVirtualDom\", false);\n    __publicField(this, \"virtualDom\", new RRDocument());\n    __publicField(this, \"mouse\");\n    __publicField(this, \"mouseTail\", null);\n    __publicField(this, \"tailPositions\", []);\n    __publicField(this, \"emitter\", mitt());\n    __publicField(this, \"nextUserInteractionEvent\");\n    __publicField(this, \"legacy_missingNodeRetryMap\", {});\n    __publicField(this, \"cache\", createCache());\n    __publicField(this, \"imageMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"canvasEventMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"mirror\", createMirror$2());\n    __publicField(this, \"styleMirror\", new StyleSheetMirror());\n    __publicField(this, \"mediaManager\");\n    __publicField(this, \"firstFullSnapshot\", null);\n    __publicField(this, \"newDocumentQueue\", []);\n    __publicField(this, \"mousePos\", null);\n    __publicField(this, \"touchActive\", null);\n    __publicField(this, \"lastMouseDownEvent\", null);\n    __publicField(this, \"lastHoveredRootNode\");\n    __publicField(this, \"lastSelectionData\", null);\n    __publicField(this, \"constructedStyleMutations\", []);\n    __publicField(this, \"adoptedStyleSheets\", []);\n    __publicField(this, \"handleResize\", (dimension) => {\n      this.iframe.style.display = \"inherit\";\n      for (const el of [this.mouseTail, this.iframe]) {\n        if (!el) {\n          continue;\n        }\n        el.setAttribute(\"width\", String(dimension.width));\n        el.setAttribute(\"height\", String(dimension.height));\n      }\n    });\n    __publicField(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    __publicField(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            var _a2;\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.mediaManager.reset();\n            this.styleMirror.reset();\n            this.rebuildFullSnapshot(event, isSync);\n            (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(event.data.initialOffset);\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 lastIndex = this.service.state.context.events.length - 1;\n        if (!this.config.liveMode && event === this.service.state.context.events[lastIndex]) {\n          const finish = () => {\n            if (lastIndex < 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 finishBuffer = 50;\n          if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions.length) {\n            finishBuffer += Math.max(0, -event.data.positions[0].timeOffset);\n          }\n          setTimeout(finish, finishBuffer);\n        }\n        this.emitter.emit(ReplayerEvents.EventCast, event);\n      };\n      return wrappedCastFn;\n    });\n    if (!(config == null ? void 0 : 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, canvasMutationData, target) => {\n            void canvasMutation({\n              event: canvasEvent,\n              mutation: canvasMutationData,\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: (node2, id) => {\n            for (const plugin of this.config.plugins || []) {\n              if (plugin.onBuild) plugin.onBuild(node2, { id, replayer: this });\n            }\n          }\n        };\n        if (this.iframe.contentDocument)\n          try {\n            diff(\n              this.iframe.contentDocument,\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      if (this.mousePos) {\n        this.moveAndHover(\n          this.mousePos.x,\n          this.mousePos.y,\n          this.mousePos.id,\n          true,\n          this.mousePos.debugData\n        );\n        this.mousePos = null;\n      }\n      if (this.touchActive === true) {\n        this.mouse.classList.add(\"touch-active\");\n      } else if (this.touchActive === false) {\n        this.mouse.classList.remove(\"touch-active\");\n      }\n      this.touchActive = null;\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      this.mediaManager.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    this.mediaManager = new MediaManager({\n      warn: this.warn.bind(this),\n      service: this.service,\n      speedService: this.speedService,\n      emitter: this.emitter,\n      getCurrentTime: this.getCurrentTime.bind(this)\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(() => {\n        this.emitter.emit(ReplayerEvents.Resize, {\n          width,\n          height\n        });\n      }, 0);\n    }\n    if (firstFullsnapshot) {\n      setTimeout(() => {\n        var _a2;\n        if (this.firstFullSnapshot) {\n          return;\n        }\n        this.firstFullSnapshot = firstFullsnapshot;\n        this.rebuildFullSnapshot(\n          firstFullsnapshot\n        );\n        (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(\n          firstFullsnapshot.data.initialOffset\n        );\n      }, 1);\n    }\n    if (this.service.state.context.events.find(indicatesTouchDevice)) {\n      this.mouse.classList.add(\"touch-device\");\n    }\n  }\n  get timer() {\n    return this.service.state.context.timer;\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        if (this.mouseTail) {\n          this.mouseTail.style.display = \"none\";\n        }\n      } else {\n        if (!this.mouseTail) {\n          this.mouseTail = document.createElement(\"canvas\");\n          this.mouseTail.width = Number.parseFloat(this.iframe.width);\n          this.mouseTail.height = Number.parseFloat(this.iframe.height);\n          this.mouseTail.classList.add(\"replayer-mouse-tail\");\n          this.wrapper.insertBefore(this.mouseTail, this.iframe);\n        }\n        this.mouseTail.style.display = \"inherit\";\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  /**\n   * Get the actual time offset the player is at now compared to the first event.\n   */\n  getCurrentTime() {\n    if (this.config.liveMode) {\n      this.timer.updateLiveTime();\n    }\n    return this.timer.timeOffset + this.getTimeOffset();\n  }\n  /**\n   * Get the time offset the player is at now compared to the first event, but without regard for the timer.\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    var _a2, _b;\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    (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.classList.remove(\"rrweb-paused\");\n    this.emitter.emit(ReplayerEvents.Start);\n  }\n  pause(timeOffset) {\n    var _a2, _b;\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    (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.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.mirror.reset();\n    this.styleMirror.reset();\n    this.mediaManager.reset();\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    if (indicatesTouchDevice(event)) {\n      this.mouse.classList.add(\"touch-device\");\n    }\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.mouse = document.createElement(\"div\");\n    this.mouse.classList.add(\"replayer-mouse\");\n    this.wrapper.appendChild(this.mouse);\n    if (this.config.mouseTail !== false) {\n      this.mouseTail = document.createElement(\"canvas\");\n      this.mouseTail.classList.add(\"replayer-mouse-tail\");\n      this.mouseTail.style.display = \"inherit\";\n      this.wrapper.appendChild(this.mouseTail);\n    }\n    if (this.config.UNSAFE_replayCanvas) {\n      this.iframe = document.createElement(\"iframe\");\n      this.iframe.setAttribute(\"sandbox\", \"allow-same-origin allow-scripts\");\n      this.wrapper.appendChild(this.iframe);\n      this.UNSAFE_replayCanvas = true;\n    } else {\n      this.iframe = createSandboxedIframe({\n        root: this.wrapper\n      });\n      this.UNSAFE_replayCanvas = false;\n    }\n    this.iframe.style.display = \"none\";\n    this.disableInteract();\n    if (this.iframe.contentWindow && this.iframe.contentDocument) {\n      polyfill(\n        this.iframe.contentWindow,\n        this.iframe.contentDocument\n      );\n      polyfill$1(this.iframe.contentWindow);\n    }\n  }\n  rebuildFullSnapshot(event, isSync = false) {\n    if (!this.iframe.contentDocument) {\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 collectedIframes = [];\n    const collectedDialogs = /* @__PURE__ */ new Set();\n    const afterAppend = (builtNode, id) => {\n      if (builtNode.nodeName === \"DIALOG\")\n        collectedDialogs.add(builtNode);\n      this.collectIframeAndAttachDocument(collectedIframes, builtNode);\n      if (this.mediaManager.isSupportedMediaElement(builtNode)) {\n        const { events } = this.service.state.context;\n        this.mediaManager.addMediaElements(\n          builtNode,\n          event.timestamp - events[0].timestamp,\n          this.mirror\n        );\n      }\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: this.iframe.contentDocument,\n      afterAppend,\n      cache: this.cache,\n      mirror: this.mirror,\n      UNSAFE_allowUnprotectedRebuild: this.UNSAFE_replayCanvas\n    });\n    afterAppend(this.iframe.contentDocument, event.data.node.id);\n    for (const { mutationInQueue, builtNode } of collectedIframes) {\n      this.attachDocumentToIframe(mutationInQueue, builtNode);\n      this.newDocumentQueue = this.newDocumentQueue.filter(\n        (m) => m !== mutationInQueue\n      );\n    }\n    const { documentElement, head } = this.iframe.contentDocument;\n    this.insertStyleRules(documentElement, head);\n    collectedDialogs.forEach((d) => applyDialogToTopLevel(d));\n    if (!this.service.state.matches(\"playing\")) {\n      this.iframe.contentDocument.getElementsByTagName(\"html\")[0].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    var _a2;\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 (!injectStylesRules.length) {\n      return;\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, index2) => ({\n          rule: cssText,\n          index: index2\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        (_a2 = styleEl.sheet) == null ? void 0 : _a2.insertRule(injectStylesRules[idx], idx);\n      }\n    }\n  }\n  attachDocumentToIframe(mutation, iframeEl) {\n    const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n    const collectedIframes = [];\n    const collectedDialogs = /* @__PURE__ */ new Set();\n    const afterAppend = (builtNode, id) => {\n      if (builtNode.nodeName === \"DIALOG\")\n        collectedDialogs.add(builtNode);\n      this.collectIframeAndAttachDocument(collectedIframes, builtNode);\n      const sn = mirror2.getMeta(builtNode);\n      if ((sn == null ? void 0 : sn.type) === NodeType.Element && (sn == null ? void 0 : sn.tagName.toUpperCase()) === \"HTML\") {\n        const { documentElement, head } = iframeEl.contentDocument;\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: iframeEl.contentDocument,\n      mirror: mirror2,\n      hackCss: true,\n      skipChild: false,\n      afterAppend,\n      cache: this.cache\n    });\n    afterAppend(iframeEl.contentDocument, mutation.node.id);\n    for (const { mutationInQueue, builtNode } of collectedIframes) {\n      this.attachDocumentToIframe(mutationInQueue, builtNode);\n      this.newDocumentQueue = this.newDocumentQueue.filter(\n        (m) => m !== mutationInQueue\n      );\n    }\n    collectedDialogs.forEach((d) => applyDialogToTopLevel(d));\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    var _a2;\n    const head = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.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(() => {\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 == null ? void 0 : ctx.createImageData(canvas.width, canvas.height);\n      ctx == null ? void 0 : 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    var _a2, _b, _c;\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        if (isSync) {\n          const lastPosition = d.positions[d.positions.length - 1];\n          this.mousePos = {\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);\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 - ((_a2 = d.positions[0]) == null ? void 0 : _a2.timeOffset)\n          });\n        }\n        break;\n      case IncrementalSource.MouseInteraction: {\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                this.touchActive = true;\n              } else if (d.type === MouseInteractions.TouchEnd) {\n                this.touchActive = false;\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              this.mousePos = {\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                this.tailPositions.length = 0;\n              }\n              this.moveAndHover(d.x || 0, d.y || 0, d.id, isSync, d);\n              if (d.type === MouseInteractions.Click) {\n                this.mouse.classList.remove(\"active\");\n                void this.mouse.offsetWidth;\n                this.mouse.classList.add(\"active\");\n              } else if (d.type === MouseInteractions.TouchStart) {\n                void this.mouse.offsetWidth;\n                this.mouse.classList.add(\"touch-active\");\n              } else if (d.type === MouseInteractions.TouchEnd) {\n                this.mouse.classList.remove(\"touch-active\");\n              } else {\n                target.dispatchEvent(event);\n              }\n            }\n            break;\n          case MouseInteractions.TouchCancel:\n            if (isSync) {\n              this.touchActive = false;\n            } else {\n              this.mouse.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        const { events } = this.service.state.context;\n        this.mediaManager.mediaMutation({\n          target: mediaEl,\n          timeOffset: e2.timestamp - events[0].timestamp,\n          mutation: d\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            (_b = this.virtualDom.mirror.getNode(d.id)) == null ? void 0 : _b.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          (_c = this.iframe.contentDocument) == null ? void 0 : _c.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  /**\n   * Apply the mutation to the virtual dom or the real dom.\n   * @param d - The mutation data.\n   * @param isSync - Whether the mutation should be applied synchronously (while fast-forwarding).\n   */\n  applyMutation(d, isSync) {\n    if (this.config.useVirtualDom && !this.usingVirtualDom && isSync) {\n      this.usingVirtualDom = true;\n      buildFromDom(this.iframe.contentDocument, this.mirror, this.virtualDom);\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      var _a2;\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\" && ((_a2 = parent.rules) == null ? void 0 : _a2.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      var _a2, _b;\n      if (!this.iframe.contentDocument) {\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.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 : this.iframe.contentDocument;\n      if (isSerializedIframe(parent, mirror2)) {\n        this.attachDocumentToIframe(\n          mutation,\n          parent\n        );\n        return;\n      }\n      const afterAppend = (node2, id) => {\n        if (this.usingVirtualDom) return;\n        applyDialogToTopLevel(node2);\n        for (const plugin of this.config.plugins || []) {\n          if (plugin.onBuild) plugin.onBuild(node2, { 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.Element && mutation.node.type === NodeType.Text) {\n        const prospectiveSiblings = Array.isArray(parent.childNodes) ? parent.childNodes : Array.from(parent.childNodes);\n        if (parentSn.tagName === \"textarea\") {\n          for (const c2 of prospectiveSiblings) {\n            if (c2.nodeType === parent.TEXT_NODE) {\n              parent.removeChild(c2);\n            }\n          }\n        } else if (parentSn.tagName === \"style\" && prospectiveSiblings.length === 1) {\n          for (const cssText of prospectiveSiblings) {\n            if (cssText.nodeType === parent.TEXT_NODE && !mirror2.hasNode(cssText)) {\n              target.textContent = cssText.textContent;\n              parent.removeChild(cssText);\n            }\n          }\n        }\n      } else if ((parentSn == null ? void 0 : parentSn.type) === NodeType.Document) {\n        const parentDoc = parent;\n        if (mutation.node.type === NodeType.DocumentType && ((_a2 = parentDoc.childNodes[0]) == null ? void 0 : _a2.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\" && ((_b = parent.rules) == null ? void 0 : _b.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      var _a2;\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      const parentEl = target.parentElement;\n      if (mutation.value && parentEl && parentEl.tagName === \"STYLE\") {\n        target.textContent = adaptCssForReplay(mutation.value, this.cache);\n      } else {\n        target.textContent = mutation.value;\n      }\n      if (this.usingVirtualDom) {\n        const parent = target.parentNode;\n        if (((_a2 = parent == null ? void 0 : parent.rules) == null ? void 0 : _a2.length) > 0) parent.rules = [];\n      }\n    });\n    d.attributes.forEach((mutation) => {\n      var _a2;\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            if (attributeName === \"open\")\n              removeDialogFromTopLevel(target, mutation);\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                  Object.assign(\n                    newSn.attributes,\n                    mutation.attributes\n                  );\n                  const siblingNode = target.nextSibling;\n                  const parentNode2 = target.parentNode;\n                  if (newNode && parentNode2) {\n                    parentNode2.removeChild(target);\n                    parentNode2.insertBefore(\n                      newNode,\n                      siblingNode\n                    );\n                    mirror2.replace(mutation.id, newNode);\n                    break;\n                  }\n                } catch (e2) {\n                }\n              }\n              if (attributeName === \"value\" && target.nodeName === \"TEXTAREA\") {\n                const textarea = target;\n                textarea.childNodes.forEach(\n                  (c2) => textarea.removeChild(c2)\n                );\n                const tn = (_a2 = target.ownerDocument) == null ? void 0 : _a2.createTextNode(value);\n                if (tn) {\n                  textarea.appendChild(tn);\n                }\n              } else {\n                target.setAttribute(\n                  attributeName,\n                  value\n                );\n              }\n              if (attributeName === \"rr_open_mode\" && target.nodeName === \"DIALOG\") {\n                applyDialogToTopLevel(target, mutation);\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    var _a2, _b;\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    if (target === this.iframe.contentDocument) {\n      (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo({\n        top: d.y,\n        left: d.x,\n        behavior: isSync ? \"auto\" : \"smooth\"\n      });\n    } else if ((sn == null ? void 0 : sn.type) === NodeType.Document) {\n      (_b = target.defaultView) == null ? void 0 : _b.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 result2 = new Range();\n        result2.setStart(startContainer, startOffset);\n        result2.setEnd(endContainer, endOffset);\n        const doc = startContainer.ownerDocument;\n        const selection = doc == null ? void 0 : doc.getSelection();\n        selection && selectionSet.add(selection);\n        return {\n          range: result2,\n          selection\n        };\n      });\n      selectionSet.forEach((s2) => s2.removeAllRanges());\n      ranges.forEach((r2) => {\n        var _a2;\n        return r2 && ((_a2 = r2.selection) == null ? void 0 : _a2.addRange(r2.range));\n      });\n    } catch (error) {\n    }\n  }\n  applyStyleSheetMutation(data) {\n    var _a2;\n    let styleSheet = null;\n    if (data.styleId) styleSheet = this.styleMirror.getStyle(data.styleId);\n    else if (data.id)\n      styleSheet = ((_a2 = this.mirror.getNode(data.id)) == null ? void 0 : _a2.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    var _a2, _b, _c, _d;\n    (_a2 = data.adds) == null ? void 0 : _a2.forEach(({ rule: rule2, index: nestedIndex }) => {\n      try {\n        if (Array.isArray(nestedIndex)) {\n          const { positions, index: index2 } = getPositionsAndIndex(nestedIndex);\n          const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n          nestedRule == null ? void 0 : nestedRule.insertRule(rule2, index2);\n        } else {\n          const index2 = nestedIndex === void 0 ? void 0 : Math.min(nestedIndex, styleSheet.cssRules.length);\n          styleSheet == null ? void 0 : styleSheet.insertRule(rule2, index2);\n        }\n      } catch (e2) {\n      }\n    });\n    (_b = data.removes) == null ? void 0 : _b.forEach(({ index: nestedIndex }) => {\n      try {\n        if (Array.isArray(nestedIndex)) {\n          const { positions, index: index2 } = getPositionsAndIndex(nestedIndex);\n          const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n          nestedRule == null ? void 0 : nestedRule.deleteRule(index2 || 0);\n        } else {\n          styleSheet == null ? void 0 : styleSheet.deleteRule(nestedIndex);\n        }\n      } catch (e2) {\n      }\n    });\n    if (typeof data.replace === \"string\")\n      try {\n        void ((_c = styleSheet.replace) == null ? void 0 : _c.call(styleSheet, data.replace));\n      } catch (e2) {\n      }\n    if (typeof data.replaceSync === \"string\")\n      try {\n        (_d = styleSheet.replaceSync) == null ? void 0 : _d.call(styleSheet, data.replaceSync);\n      } catch (e2) {\n      }\n  }\n  /**\n   * Apply a StyleDeclaration event (setProperty/removeProperty) to a stylesheet.\n   *\n   * Uses defensive null checks because the rule may not exist:\n   * - Timing issues: The rule was added by a previous StyleSheetRule event\n   *   that hasn't been processed yet\n   * - Dynamic stylesheets: Constructed stylesheets or adopted stylesheets\n   *   may not be fully synchronized\n   * - Nested rules: Rules inside @media/@supports require the parent rule\n   *   to exist first\n   */\n  applyStyleDeclaration(data, styleSheet) {\n    if (data.set) {\n      const rule2 = getNestedRule(\n        styleSheet.rules,\n        data.index\n      );\n      if (rule2 == null ? void 0 : rule2.style) {\n        rule2.style.setProperty(\n          data.set.property,\n          data.set.value,\n          data.set.priority\n        );\n      }\n    }\n    if (data.remove) {\n      const rule2 = getNestedRule(\n        styleSheet.rules,\n        data.index\n      );\n      if (rule2 == null ? void 0 : rule2.style) {\n        rule2.style.removeProperty(data.remove.property);\n      }\n    }\n  }\n  applyAdoptedStyleSheet(data) {\n    var _a2;\n    const targetHost = this.mirror.getNode(data.id);\n    if (!targetHost) return;\n    (_a2 = data.styles) == null ? void 0 : _a2.forEach((style) => {\n      var _a3;\n      let newStyleSheet = null;\n      let hostWindow = null;\n      if (hasShadowRoot(targetHost))\n        hostWindow = ((_a3 = targetHost.ownerDocument) == null ? void 0 : _a3.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(\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: node2, mutation } = previousInMap;\n      parent.insertBefore(node2, 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, node2, mutation);\n      }\n    }\n    if (nextInMap) {\n      const { node: node2, mutation } = nextInMap;\n      parent.insertBefore(\n        node2,\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, node2, mutation);\n      }\n    }\n  }\n  moveAndHover(x, y, id, isSync, debugData) {\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    this.mouse.style.left = `${_x}px`;\n    this.mouse.style.top = `${_y}px`;\n    if (!isSync) {\n      this.drawMouseTail({ x: _x, y: _y });\n    }\n    this.hoverElements(target);\n  }\n  drawMouseTail(position) {\n    if (!this.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 (!this.mouseTail) {\n        return;\n      }\n      const ctx = this.mouseTail.getContext(\"2d\");\n      if (!ctx || !this.tailPositions.length) {\n        return;\n      }\n      ctx.clearRect(0, 0, this.mouseTail.width, this.mouseTail.height);\n      ctx.beginPath();\n      ctx.lineWidth = lineWidth;\n      ctx.lineCap = lineCap;\n      ctx.strokeStyle = strokeStyle;\n      ctx.moveTo(this.tailPositions[0].x, this.tailPositions[0].y);\n      this.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\n      ctx.stroke();\n    };\n    this.tailPositions.push(position);\n    draw();\n    setTimeout(() => {\n      this.tailPositions = this.tailPositions.filter((p) => p !== position);\n      draw();\n    }, duration / this.speedService.state.context.timer.speed);\n  }\n  hoverElements(el) {\n    var _a2;\n    (_a2 = this.lastHoveredRootNode || this.iframe.contentDocument) == null ? void 0 : _a2.querySelectorAll(\".\\\\:hover\").forEach((hoveredEl) => {\n      hoveredEl.classList.remove(\":hover\");\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  Replayer\n};\n//# sourceMappingURL=replay.js.map\n","import { widgetFetch } from \"../../lib/widgetPrivacy\";\nimport \"@rrweb/replay/dist/style.css\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Loader2, Maximize2, Minimize2, Pause, Play, RotateCcw } from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReplayEvidence } from \"../../lib/replay\";\nimport { fetchFeedbackReplayPreview } from \"./api-utils\";\n\ntype ReplayEvent = { timestamp: number; type?: number; data?: unknown };\n\ntype ReplayPreviewData = {\n  replaySessionId: string;\n  timestampMs: number;\n  startTimestampMs: number;\n  durationMs: number;\n  initialUrl?: string | null;\n  chunks: Array<{\n    id: string;\n    index: number;\n    downloadUrl: string | null;\n    downloadHeaders: Record<string, string>;\n  }>;\n};\n\nconst formatDuration = (milliseconds: number) => {\n  const seconds = Math.max(0, Math.floor(milliseconds / 1000));\n  return `${String(Math.floor(seconds / 60)).padStart(2, \"0\")}:${String(seconds % 60).padStart(2, \"0\")}`;\n};\n\nconst loadPreview = async ({\n  feedbackId,\n  replayEvidence,\n  subscriberCode,\n}: {\n  feedbackId?: string;\n  replayEvidence?: ReplayEvidence;\n  subscriberCode?: string;\n}) => {\n  const response = await fetchFeedbackReplayPreview({\n    feedbackId,\n    replayEvidence,\n    token: subscriberCode,\n  });\n  const preview = response.data as ReplayPreviewData;\n  const eventGroups = await Promise.all(\n    preview.chunks.map(async (chunk) => {\n      if (!chunk.downloadUrl) return [] as ReplayEvent[];\n      const chunkResponse = await widgetFetch(chunk.downloadUrl, () => ({\n        credentials: \"omit\",\n        headers: chunk.downloadHeaders,\n      }));\n      if (!chunkResponse.ok) throw new Error(\"Replay data could not be downloaded\");\n      return (await chunkResponse.json()) as ReplayEvent[];\n    }),\n  );\n\n  return {\n    ...preview,\n    events: eventGroups.flat().sort((left, right) => left.timestamp - right.timestamp),\n  };\n};\n\nexport const FeedbackReplayPreview = ({\n  feedbackId,\n  replayEvidence,\n  subscriberCode,\n}: {\n  feedbackId?: string;\n  replayEvidence?: ReplayEvidence;\n  subscriberCode?: string;\n}) => {\n  const [expanded, setExpanded] = useState(false);\n  const [playing, setPlaying] = useState(false);\n  const [currentMs, setCurrentMs] = useState(0);\n  const [fullscreen, setFullscreen] = useState(false);\n  const shellRef = useRef<HTMLDivElement | null>(null);\n  const stageRef = useRef<HTMLDivElement | null>(null);\n  const replayerRef = useRef<any>(null);\n  const query = useQuery({\n    queryKey: [\n      \"feedback-replay-preview\",\n      feedbackId,\n      replayEvidence?.replaySessionId,\n      replayEvidence?.timestampMs,\n    ],\n    queryFn: () => loadPreview({ feedbackId, replayEvidence, subscriberCode }),\n    enabled: expanded,\n    staleTime: 60_000,\n    retry: 1,\n  });\n  const clipDurationMs = query.data?.durationMs || 0;\n  const replayOffsetMs = useMemo(() => {\n    if (!query.data?.events.length) return 0;\n    return Math.max(0, query.data.startTimestampMs - query.data.events[0].timestamp);\n  }, [query.data]);\n\n  useEffect(() => {\n    const handleFullscreenChange = () =>\n      setFullscreen(document.fullscreenElement === shellRef.current);\n    document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n    return () => document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n  }, []);\n\n  useEffect(() => {\n    const stage = stageRef.current;\n    const data = query.data;\n    if (!expanded || !stage || !data || data.events.length < 2) return;\n\n    let disposed = false;\n    let resizeObserver: ResizeObserver | null = null;\n    void import(\"@rrweb/replay\").then(({ Replayer }) => {\n      if (disposed) return;\n      const replayer = new Replayer(data.events as never[], {\n        root: stage,\n        skipInactive: true,\n        mouseTail: false,\n      });\n      replayerRef.current = replayer;\n      replayer.pause(replayOffsetMs);\n\n      const fit = () => {\n        const width = Number(replayer.iframe.getAttribute(\"width\")) || 1024;\n        const height = Number(replayer.iframe.getAttribute(\"height\")) || 576;\n        const scale = Math.min(stage.clientWidth / width, stage.clientHeight / height);\n        replayer.wrapper.style.position = \"absolute\";\n        replayer.wrapper.style.width = `${width}px`;\n        replayer.wrapper.style.height = `${height}px`;\n        replayer.wrapper.style.transformOrigin = \"top left\";\n        replayer.wrapper.style.transform = `translate(${(stage.clientWidth - width * scale) / 2}px, ${(stage.clientHeight - height * scale) / 2}px) scale(${scale})`;\n      };\n      replayer.on(\"resize\", fit);\n      resizeObserver = new ResizeObserver(fit);\n      resizeObserver.observe(stage);\n      fit();\n    });\n\n    return () => {\n      disposed = true;\n      resizeObserver?.disconnect();\n      replayerRef.current?.destroy();\n      replayerRef.current = null;\n      stage.replaceChildren();\n      setPlaying(false);\n      setCurrentMs(0);\n    };\n  }, [expanded, query.data, replayOffsetMs]);\n\n  useEffect(() => {\n    if (!playing) return;\n    const timer = window.setInterval(() => {\n      const replayer = replayerRef.current;\n      if (!replayer) return;\n      const next = Math.max(0, replayer.getCurrentTime() - replayOffsetMs);\n      if (next >= clipDurationMs) {\n        replayer.pause(replayOffsetMs + clipDurationMs);\n        setCurrentMs(clipDurationMs);\n        setPlaying(false);\n      } else {\n        setCurrentMs(next);\n      }\n    }, 100);\n    return () => window.clearInterval(timer);\n  }, [clipDurationMs, playing, replayOffsetMs]);\n\n  const seek = (value: number) => {\n    const next = Math.max(0, Math.min(value, clipDurationMs));\n    replayerRef.current?.pause(replayOffsetMs + next);\n    setCurrentMs(next);\n    setPlaying(false);\n  };\n\n  const togglePlayback = () => {\n    const replayer = replayerRef.current;\n    if (!replayer) return;\n    if (playing) {\n      replayer.pause();\n      setPlaying(false);\n      return;\n    }\n    const next = currentMs >= clipDurationMs ? 0 : currentMs;\n    replayer.play(replayOffsetMs + next);\n    setCurrentMs(next);\n    setPlaying(true);\n  };\n\n  const toggleFullscreen = async () => {\n    if (document.fullscreenElement === shellRef.current) {\n      await document.exitFullscreen();\n      return;\n    }\n    await shellRef.current?.requestFullscreen();\n  };\n\n  if (!expanded) {\n    return (\n      <button\n        type=\"button\"\n        onClick={() => setExpanded(true)}\n        className=\"flex h-11 w-full items-center justify-center gap-2 border-0 bg-neutral-950 px-3 text-xs font-medium text-white transition-[background-color,scale] hover:bg-neutral-900 active:scale-[0.99]\"\n      >\n        <Play className=\"h-3.5 w-3.5 fill-current\" />\n        Preview replay\n      </button>\n    );\n  }\n\n  return (\n    <div\n      ref={shellRef}\n      className={`flex w-full overflow-hidden bg-neutral-950 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)] ${fullscreen ? \"h-screen flex-col rounded-none\" : \"flex-col\"}`}\n    >\n      <div\n        className={`relative overflow-hidden bg-[#1d1e24] ${fullscreen ? \"min-h-0 flex-1\" : \"aspect-video min-h-48\"}`}\n      >\n        {query.isLoading ? (\n          <div className=\"flex h-full items-center justify-center gap-2 text-xs text-white/70\">\n            <Loader2 className=\"h-4 w-4 animate-spin\" /> Preparing preview…\n          </div>\n        ) : query.isError || !query.data?.events.length ? (\n          <div className=\"flex h-full items-center justify-center px-6 text-center text-xs text-white/65\">\n            This replay preview is not available. Remove it and capture again.\n          </div>\n        ) : (\n          <>\n            <div ref={stageRef} className=\"absolute inset-0\" />\n            <button\n              type=\"button\"\n              onClick={togglePlayback}\n              className=\"group absolute inset-0 z-10 flex cursor-pointer items-center justify-center border-0 bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-white/80\"\n              aria-label={playing ? \"Pause replay\" : \"Play replay\"}\n            >\n              <span\n                className={`flex h-12 w-12 items-center justify-center rounded-full bg-black/65 text-white shadow-lg backdrop-blur-sm transition-[opacity,scale] group-hover:opacity-100 group-active:scale-95 ${playing ? \"opacity-0\" : \"opacity-100\"}`}\n              >\n                {playing ? (\n                  <Pause className=\"h-5 w-5 fill-current\" />\n                ) : (\n                  <Play className=\"h-5 w-5 translate-x-px fill-current\" />\n                )}\n              </span>\n            </button>\n          </>\n        )}\n      </div>\n      {query.data?.events.length ? (\n        <div className=\"flex h-12 shrink-0 items-center gap-1 bg-[#111216] px-1.5 text-white\">\n          <button\n            type=\"button\"\n            onClick={togglePlayback}\n            className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border-0 bg-transparent text-white transition-[background-color,scale] hover:bg-white/10 active:scale-[0.96]\"\n            aria-label={playing ? \"Pause replay\" : \"Play replay\"}\n          >\n            {playing ? (\n              <Pause className=\"h-4 w-4 fill-current\" />\n            ) : (\n              <Play className=\"h-4 w-4 translate-x-px fill-current\" />\n            )}\n          </button>\n          <input\n            type=\"range\"\n            min={0}\n            max={Math.max(clipDurationMs, 1)}\n            value={Math.min(currentMs, clipDurationMs)}\n            onChange={(event) => seek(Number(event.target.value))}\n            className=\"min-w-0 flex-1 accent-violet-500\"\n            aria-label=\"Replay position\"\n          />\n          <span className=\"min-w-[74px] text-right text-[11px] tabular-nums text-white/70\">\n            {formatDuration(currentMs)} / {formatDuration(clipDurationMs)}\n          </span>\n          <button\n            type=\"button\"\n            onClick={() => seek(0)}\n            className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border-0 bg-transparent text-white transition-[background-color,scale] hover:bg-white/10 active:scale-[0.96]\"\n            aria-label=\"Restart replay\"\n          >\n            <RotateCcw className=\"h-4 w-4\" />\n          </button>\n          <button\n            type=\"button\"\n            onClick={toggleFullscreen}\n            className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border-0 bg-transparent text-white transition-[background-color,scale] hover:bg-white/10 active:scale-[0.96]\"\n            aria-label={fullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n          >\n            {fullscreen ? <Minimize2 className=\"h-4 w-4\" /> : <Maximize2 className=\"h-4 w-4\" />}\n          </button>\n        </div>\n      ) : null}\n    </div>\n  );\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Button, FeedbackStatusBadge } from \"@userorbit/ui\";\nimport { FileText, Info } from \"lucide-react\";\nimport { timeAgo } from \"../../lib/dates\";\nimport { fetchFeedbackBoardList } from \"./api-utils\";\nimport { renderMarkdown } from \"./ask-ai-content/markdown\";\nimport FeedbackCommentSection from \"./feedback-comment-section\";\nimport { FeedbackReplayPreview } from \"./feedback-replay-preview\";\nimport PostVote from \"./feedback-content/post-vote\";\nimport { FeedbackQueryProvider } from \"./query-provider\";\n\nexport type FeedbackData = {\n  id: string;\n  title: string;\n  text?: string;\n  createdAt: string;\n  feedbackVotesCount: number;\n  feedbackCommentsCount: number;\n  status: string;\n  subscriber?: {\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  } | null;\n  meta?: {\n    updatedAt?: string;\n    transcription?: string;\n    attachments?: Array<{ url: string; name?: string; type?: string }>;\n  };\n  replayEvidence?: {\n    replaySessionId: string;\n    timestampMs: number;\n    startTimestampMs: number;\n    lookbackMs: number;\n  };\n  boardId?: string | null;\n  board?: {\n    id: string;\n    name: string;\n    configuration?: {\n      color?: string;\n    };\n  } | null;\n};\n\ninterface FeedbackDetailProps {\n  feedback: FeedbackData;\n  subscriberCode?: string;\n}\n\nconst FeedbackDetailContent: React.FC<FeedbackDetailProps> = ({ feedback, subscriberCode }) => {\n  const { data: boardsResponse } = useQuery({\n    queryKey: [\"feedback-boards\", subscriberCode],\n    queryFn: () => fetchFeedbackBoardList(),\n    staleTime: 1000 * 60 * 5, // 5 minutes\n  });\n\n  const fbBoard =\n    boardsResponse?.data?.find((b: any) => b?.id === (feedback.boardId || feedback.board?.id)) ||\n    feedback.board;\n  const subscriberName = feedback.subscriber?.name || feedback.subscriber?.email || \"Anonymous\";\n\n  return (\n    <div className=\"h-full\">\n      <div className=\"scroll-container h-[calc(var(--container-height)+28px)] overflow-y-auto px-3 py-3 pt-4\">\n        <div className=\"relative min-h-64 w-full overflow-hidden px-3 pt-2\">\n          <div className=\"flex items-center gap-2.5\">\n            {feedback.subscriber?.avatarUrl ? (\n              <img\n                alt={subscriberName}\n                loading=\"eager\"\n                decoding=\"async\"\n                src={feedback.subscriber.avatarUrl}\n                className=\"block h-8 w-8 shrink-0 rounded-full bg-uo-surface-2 object-cover\"\n              />\n            ) : (\n              <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-uo-surface-2 text-[13px] font-semibold text-uo-text-secondary\">\n                {subscriberName.charAt(0).toUpperCase()}\n              </div>\n            )}\n            <div className=\"min-w-0\">\n              <div className=\"truncate text-[13.5px] font-semibold leading-[18px] text-uo-text-primary\">\n                {subscriberName}\n              </div>\n              <div className=\"text-[12px] leading-4 text-uo-text-tertiary\">\n                {timeAgo(new Date(feedback.meta?.updatedAt || feedback.createdAt))} ago\n              </div>\n            </div>\n          </div>\n\n          <h1 className=\"m-0 mt-5 text-[20px] font-semibold leading-[26px] tracking-[-0.015em] text-uo-text-primary\">\n            {feedback.title}\n          </h1>\n          {feedback.text && (\n            <div\n              className=\"mt-2 text-pretty text-[14px] leading-[22px] text-uo-text-secondary\"\n              dangerouslySetInnerHTML={{\n                __html: /!\\[[^\\]]*\\]\\(|\\[[^\\]]+\\]\\([^)]+\\)|[*_`#>-]/.test(feedback.text)\n                  ? renderMarkdown(feedback.text)\n                  : feedback.text,\n              }}\n            />\n          )}\n          {feedback.meta?.transcription && (\n            <div className=\"mt-3 flex flex-col gap-2\">\n              <div className=\"rounded-md border border-neutral-200 bg-neutral-50 p-2 text-md dark:border-neutral-700 dark:bg-neutral-800\">\n                <div className=\"text-sm font-medium text-neutral-500 dark:text-neutral-400 mb-1\">\n                  Voice Transcription:\n                </div>\n                <div className=\"text-neutral-700 dark:text-neutral-300\">\n                  {feedback.meta.transcription}\n                </div>\n              </div>\n            </div>\n          )}\n\n          {Array.isArray(feedback.meta?.attachments) && feedback.meta.attachments.length > 0 && (\n            <div className=\"mt-3 grid grid-cols-2 gap-2\">\n              {feedback.meta.attachments.map((attachment) => {\n                const type = attachment.type || \"\";\n                const name = attachment.name || \"Attachment\";\n                if (type.startsWith(\"video/\")) {\n                  return (\n                    <video\n                      key={attachment.url}\n                      src={attachment.url}\n                      controls\n                      preload=\"metadata\"\n                      aria-label={name}\n                      className=\"col-span-2 block max-h-52 w-full rounded-md bg-black object-contain\"\n                    />\n                  );\n                }\n                return (\n                  <a\n                    key={attachment.url}\n                    href={attachment.url}\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                    title={name}\n                    className=\"flex h-24 items-center justify-center overflow-hidden rounded-md border border-solid border-neutral-200 bg-neutral-50 text-neutral-500 no-underline dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400\"\n                  >\n                    {type.startsWith(\"image/\") ? (\n                      <img src={attachment.url} alt={name} className=\"h-full w-full object-cover\" />\n                    ) : (\n                      <span className=\"flex min-w-0 flex-col items-center gap-1 px-2 text-xs\">\n                        <FileText className=\"h-5 w-5\" />\n                        <span className=\"max-w-full truncate\">{name}</span>\n                      </span>\n                    )}\n                  </a>\n                );\n              })}\n            </div>\n          )}\n\n          {feedback.replayEvidence && (\n            <div className=\"mt-3 overflow-hidden rounded-lg bg-neutral-50 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.1)] dark:bg-neutral-800 dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)]\">\n              <div className=\"flex min-h-14 items-center gap-1 px-3\">\n                <div className=\"text-sm font-medium text-neutral-900 dark:text-neutral-100\">\n                  Recent activity\n                </div>\n                <Button\n                  type=\"button\"\n                  iconOnly={<Info className=\"h-3.5 w-3.5\" />}\n                  accessibilityLabel=\"About recent activity\"\n                  variant=\"plain\"\n                  className=\"h-10 w-10 cursor-help bg-transparent p-0 text-neutral-400 hover:bg-neutral-200 hover:text-neutral-700 dark:text-neutral-500 dark:hover:bg-neutral-700 dark:hover:text-neutral-200\"\n                  tooltip=\"Includes up to the last 30 seconds. Only you and your team can view it; sensitive fields are hidden.\"\n                />\n              </div>\n              <FeedbackReplayPreview feedbackId={feedback.id} subscriberCode={subscriberCode} />\n            </div>\n          )}\n\n          <div className=\"mt-5 flex items-center justify-between gap-2\">\n            <div className=\"flex min-w-0 items-center gap-2\">\n              <FeedbackStatusBadge status={feedback.status} showLabel />\n              {fbBoard && (\n                <div className=\"inline-flex h-7 min-w-0 items-center gap-1.5 rounded-full px-2.5 text-[12.5px] font-medium text-uo-text-secondary shadow-[inset_0_0_0_1px_var(--uo-color-border-subtle)]\">\n                  <span\n                    className=\"h-2 w-2 shrink-0 rounded-full\"\n                    style={{ backgroundColor: fbBoard.configuration?.color || \"#3912e4\" }}\n                  />\n                  <span className=\"truncate\">{fbBoard.name}</span>\n                </div>\n              )}\n            </div>\n            <PostVote\n              id={feedback.id}\n              code={subscriberCode}\n              votesCount={feedback.feedbackVotesCount || 0}\n            />\n          </div>\n\n          {/* Comments section */}\n          <div className=\"pb-4\">\n            <FeedbackCommentSection feedbackId={feedback.id} subscriberCode={subscriberCode} />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst FeedbackDetail: React.FC<FeedbackDetailProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <FeedbackDetailContent {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default FeedbackDetail;\n","// ABOUTME: Loads html2canvas from the CDN on first use so page captures don't grow the SDK bundle.\n// ABOUTME: Also lists the SDK's own DOM so captures leave the widget, pickers and HUD out.\n\nconst HTML2CANVAS_SRC = \"https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js\";\n\nlet html2canvasLoad: Promise<any> | null = null;\n\nexport function loadHtml2Canvas(): Promise<any> {\n  const existing = (window as any).html2canvas;\n  if (existing) return Promise.resolve(existing);\n\n  html2canvasLoad ??= new Promise((resolve, reject) => {\n    const script = document.createElement(\"script\");\n    script.src = HTML2CANVAS_SRC;\n    script.async = true;\n    script.onload = () => {\n      const html2canvas = (window as any).html2canvas;\n      if (html2canvas) resolve(html2canvas);\n      else reject(new Error(\"html2canvas is not available\"));\n    };\n    script.onerror = () => {\n      html2canvasLoad = null;\n      reject(new Error(\"Failed to load html2canvas from CDN\"));\n    };\n    document.head.appendChild(script);\n  });\n\n  return html2canvasLoad;\n}\n\nexport function isUserorbitElement(element: Element) {\n  return (\n    element.id === \"uojs\" ||\n    element.id === \"floating-widget-container\" ||\n    element.classList.contains(\"unh-widget\") ||\n    element.classList.contains(\"uojs-widget-drawer\") ||\n    element.hasAttribute(\"data-standalone-feedback\")\n  );\n}\n","// Screenshot privacy markers are independent of replay modes and selectors.\nexport const SCREENSHOT_PRIVATE_SELECTOR =\n  '.uo-mask, [data-uo-mask], .uo-block, input[type=\"password\" i]';\n\nexport function isScreenshotPrivate(element: Element) {\n  return Boolean(element.closest(SCREENSHOT_PRIVATE_SELECTOR));\n}\n\nexport function hasScreenshotPrivateContent(element: Element) {\n  return (\n    isScreenshotPrivate(element) || Boolean(element.querySelector(SCREENSHOT_PRIVATE_SELECTOR))\n  );\n}\n\nfunction clearPrivateRegion(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const computed = element.ownerDocument.defaultView?.getComputedStyle(element);\n  const display = computed?.display;\n  const boxSize = (dimension: \"width\" | \"height\", offset: number, fallback: number) => {\n    const size = Number.parseFloat(computed?.getPropertyValue(dimension) || \"\");\n    if (!Number.isFinite(size)) return offset || fallback;\n    if (computed?.boxSizing === \"border-box\") return size;\n    const sides = dimension === \"width\" ? [\"left\", \"right\"] : [\"top\", \"bottom\"];\n    return (\n      size +\n      sides.reduce(\n        (sum, side) =>\n          sum +\n          (Number.parseFloat(computed?.getPropertyValue(`padding-${side}`) || \"\") || 0) +\n          (Number.parseFloat(computed?.getPropertyValue(`border-${side}-width`) || \"\") || 0),\n        0,\n      )\n    );\n  };\n  const width = boxSize(\"width\", element.offsetWidth, rect.width);\n  const height = boxSize(\"height\", element.offsetHeight, rect.height);\n  const layout = [\n    \"display\",\n    \"position\",\n    \"top\",\n    \"right\",\n    \"bottom\",\n    \"left\",\n    \"margin-top\",\n    \"margin-right\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"vertical-align\",\n    \"float\",\n    \"flex\",\n    \"align-self\",\n    \"order\",\n    \"grid-area\",\n    \"transform\",\n    \"transform-origin\",\n  ].map((property) => [property, computed?.getPropertyValue(property)] as const);\n  element.textContent = \"\";\n  if (\"value\" in element) (element as HTMLInputElement).value = \"\";\n  for (const attribute of Array.from(element.attributes)) {\n    element.removeAttribute(attribute.name);\n  }\n  layout.forEach(([property, value]) => {\n    if (value) element.style.setProperty(property, value);\n  });\n  element.setAttribute(\"data-uo-screenshot-private\", \"\");\n  element.style.setProperty(\"width\", `${width}px`, \"important\");\n  element.style.setProperty(\"height\", `${height}px`, \"important\");\n  element.style.setProperty(\"box-sizing\", \"border-box\", \"important\");\n  if (display === \"inline\") element.style.setProperty(\"display\", \"inline-block\", \"important\");\n  element.style.setProperty(\"visibility\", \"hidden\", \"important\");\n  element.style.setProperty(\"background-image\", \"none\", \"important\");\n}\n\nexport function sanitizeScreenshotClone(document: Document, captureElement?: HTMLElement) {\n  const regions = Array.from(\n    document.querySelectorAll<HTMLElement>(SCREENSHOT_PRIVATE_SELECTOR),\n  ).filter((element) => !element.parentElement?.closest(SCREENSHOT_PRIVATE_SELECTOR));\n  // A pinned target inside a private ancestor must be sanitized before its ancestor\n  // detaches it: html2canvas retains the target reference for rendering.\n  if (captureElement && isScreenshotPrivate(captureElement) && !regions.includes(captureElement)) {\n    clearPrivateRegion(captureElement);\n  }\n  regions\n    .filter(\n      (region) => !captureElement || region === captureElement || !region.contains(captureElement),\n    )\n    .forEach(clearPrivateRegion);\n}\n","export type AudienceTargeting = {\n  audience?: \"all\" | \"segment\" | \"specific\";\n  segmentId?: string | null;\n  userSegment?: unknown;\n};\n\nconst getTargetingValue = (data: Record<string, any>, path: string) => {\n  if (path in data) return data[path];\n  if (data.attributes && path in data.attributes) return data.attributes[path];\n  if (data.meta && path in data.meta) return data.meta[path];\n\n  return path.split(\".\").reduce((current, part) => {\n    if (!current || typeof current !== \"object\") return undefined;\n    return current[part];\n  }, data as any);\n};\n\nconst applyJsonLogic = (logic: any, data: Record<string, any>): any => {\n  if (!logic || typeof logic !== \"object\" || Array.isArray(logic)) return logic;\n\n  const [operator] = Object.keys(logic);\n  const operands = logic[operator];\n  const values = Array.isArray(operands) ? operands : [operands];\n\n  if (operator === \"var\") return getTargetingValue(data, String(operands));\n  if (operator === \"and\") return values.every((value) => Boolean(applyJsonLogic(value, data)));\n  if (operator === \"or\") return values.some((value) => Boolean(applyJsonLogic(value, data)));\n  if (operator === \"!\") return !applyJsonLogic(values[0], data);\n\n  const left = applyJsonLogic(values[0], data);\n  const right = applyJsonLogic(values[1], data);\n\n  if (operator === \"==\") return String(left) === String(right);\n  if (operator === \"!=\") return String(left) !== String(right);\n  if (operator === \">\") return Number(left) > Number(right);\n  if (operator === \">=\") return Number(left) >= Number(right);\n  if (operator === \"<\") return Number(left) < Number(right);\n  if (operator === \"<=\") return Number(left) <= Number(right);\n  if (operator === \"in\") return String(right ?? \"\").includes(String(left ?? \"\"));\n\n  return false;\n};\n\nexport const matchesAudienceTargeting = (\n  targeting: AudienceTargeting | null | undefined,\n  personData: any,\n  options: { missingSegmentMatches?: boolean } = {},\n) => {\n  const audience = targeting?.audience || \"all\";\n\n  if (audience === \"all\") return true;\n  if (!personData) return false;\n\n  if (audience === \"segment\") {\n    if (!targeting?.segmentId) return options.missingSegmentMatches === true;\n    return (personData.segments || []).includes(targeting.segmentId);\n  }\n\n  if (audience === \"specific\") {\n    if (!targeting?.userSegment) return true;\n    return Boolean(applyJsonLogic(targeting.userSegment, personData));\n  }\n\n  return true;\n};\n","// ABOUTME: Lazy loader for the session replay recorder runtime. Reads the team's\n// ABOUTME: replay config, rolls sampling once per SDK session, and injects the bundle.\nimport { getUserorbit } from \"./analytics\";\nimport { type AudienceTargeting, matchesAudienceTargeting } from \"./audience-targeting\";\nimport { Config } from \"./config\";\nimport { subscribeToEnvironmentState } from \"./environmentState\";\nimport { Logger } from \"./logger\";\nimport { privacyAllowed } from \"./privacyPreferences\";\nimport { hasGlobalPrivacyControl } from \"./privacySignals\";\nimport { getSessionId, getWindowId } from \"./sessionTracking\";\nimport { isWidgetRuntimeFeatureEnabled } from \"./widget-features\";\n\nconst logger = Logger.getInstance();\n\nconst REPLAY_SCRIPT_ID = \"userorbit-replay-runtime\";\nconst REPLAY_EVIDENCE_TIMEOUT_MS = 10_000;\nconst SAMPLE_STORAGE_PREFIX = \"uo-replay-sample:\";\nconst SESSION_POLL_INTERVAL_MS = 10000;\n\ntype ReplayPrivacyMode = \"mask_pii\" | \"mask_all\" | \"record_all\";\ntype ReplayPiiType = \"email\" | \"phone\" | \"payment_card\" | \"ip_address\";\n\ntype ReplayClientConfig = {\n  enabled?: boolean;\n  ingestHost?: string;\n  sampleRate?: number;\n  targeting?: AudienceTargeting;\n  privacyMode?: ReplayPrivacyMode;\n  piiTypes?: ReplayPiiType[];\n  maskAllText?: boolean;\n  maskSelector?: string;\n  blockSelector?: string;\n  maxDurationMs?: number;\n};\n\ntype ReplayStartOptions = {\n  apiHost: string;\n  ingestHost?: string;\n  apiKey: string;\n  sessionId: string;\n  windowId: string;\n  distinctId: string;\n  url: string;\n  viewport: { width: number; height: number };\n  recorderVersion: string;\n  subscriberToken?: string;\n  privacyMode: ReplayPrivacyMode;\n  piiTypes: ReplayPiiType[];\n  maskAllText: boolean;\n  maskSelector: string;\n  blockSelector: string;\n  maxDurationMs?: number;\n};\n\ntype ReplayRuntime = {\n  supportsConsentWithdrawal?: boolean;\n  startReplayRecording: (options: ReplayStartOptions) => Promise<void> | void;\n  stopReplayRecording: (endReason?: string) => Promise<void> | void;\n  markReplayRecording: () => Promise<ReplayEvidence | null>;\n  getReplayState: () => { replaySessionId: string | null; isRecording: boolean };\n};\n\nexport type ReplayEvidence = {\n  replaySessionId: string;\n  sdkSessionId: string;\n  windowId: string;\n  timestampMs: number;\n  startTimestampMs?: number;\n};\n\ntype ReplayWindow = Window & typeof globalThis & { userorbitReplay?: ReplayRuntime };\n\nlet replayScriptPromise: Promise<void> | null = null;\nlet activeSessionId: string | null = null;\nlet sessionTransition: Promise<void> = Promise.resolve();\nlet sessionWatcherStarted = false;\nlet replayOptedOut = false;\nlet callerReplayEnabled = true;\nlet consentGeneration = 0;\nlet disposeEnvironmentSubscription: (() => void) | null = null;\n\nconst getReplayRuntimeUrl = () => {\n  const sdkScript = Array.from(document.scripts).find((script) =>\n    script.src.includes(\"userorbit.umd.cjs\"),\n  );\n\n  if (!sdkScript?.src) {\n    return `${process.env.APP_HOST}/userorbit-replay.umd.cjs`;\n  }\n\n  return new URL(\"userorbit-replay.umd.cjs\", sdkScript.src).toString();\n};\n\nconst isReplaySupported = () =>\n  typeof (window as any).CompressionStream === \"function\" &&\n  typeof crypto !== \"undefined\" &&\n  typeof crypto.randomUUID === \"function\" &&\n  typeof fetch === \"function\" &&\n  typeof Request !== \"undefined\" &&\n  \"keepalive\" in Request.prototype;\n\nconst getReplayContext = () => {\n  const currentConfig = Config.getInstance().get();\n  const environmentData =\n    currentConfig && currentConfig.environmentState && currentConfig.environmentState.data;\n  if (!currentConfig || !environmentData) return null;\n  if (!isWidgetRuntimeFeatureEnabled(environmentData.product, \"sessionReplay\")) return null;\n\n  const replayConfig: ReplayClientConfig | undefined =\n    environmentData.product &&\n    environmentData.product.configuration &&\n    environmentData.product.configuration.replay;\n  const project = Array.isArray(environmentData.projects)\n    ? environmentData.projects.find(\n        (candidate: { id?: string }) => candidate.id === environmentData.analyticsProjectId,\n      ) || environmentData.projects[0]\n    : null;\n  if (!replayConfig || !project || !project.api_key) return null;\n\n  return {\n    apiHost: currentConfig.apiHost as string,\n    apiKey: project.api_key as string,\n    replayConfig,\n  };\n};\n\nconst getDistinctId = () => {\n  const userorbit = getUserorbit();\n  if (userorbit) return userorbit.getDistinctId();\n\n  try {\n    const stored = window.localStorage.getItem(\"userorbit_distinct_id\");\n    if (stored) return JSON.parse(stored).distinctId as string;\n  } catch {\n    logger.debug(\"Failed to read distinct id from storage\");\n  }\n  return null;\n};\n\nconst safeSelector = (value: unknown, fallback: string) => {\n  if (typeof value !== \"string\" || !value.trim()) return fallback;\n  try {\n    document.querySelector(value);\n    return value;\n  } catch {\n    logger.debug(\"Invalid replay selector, using default\");\n    return fallback;\n  }\n};\n\nconst rollSamplingVerdict = (sessionId: string, sampleRate: number) => {\n  const key = SAMPLE_STORAGE_PREFIX + sessionId;\n\n  try {\n    const stored = window.localStorage.getItem(key);\n    if (stored === \"1\") return true;\n    if (stored === \"0\") return false;\n  } catch {\n    logger.debug(\"Failed to read replay sampling verdict\");\n  }\n\n  const sampled = Math.random() < sampleRate;\n  try {\n    window.localStorage.setItem(key, sampled ? \"1\" : \"0\");\n  } catch {\n    logger.debug(\"Failed to store replay sampling verdict\");\n  }\n  return sampled;\n};\n\nconst loadReplayRuntime = () => {\n  const replayWindow = window as ReplayWindow;\n  if (replayWindow.userorbitReplay?.startReplayRecording) {\n    return Promise.resolve();\n  }\n\n  if (replayScriptPromise) return replayScriptPromise;\n\n  replayScriptPromise = new Promise<void>((resolve, reject) => {\n    const script = document.createElement(\"script\");\n    script.id = REPLAY_SCRIPT_ID;\n    script.async = true;\n    script.src = getReplayRuntimeUrl();\n    script.onload = () => resolve();\n    script.onerror = () => reject(new Error(\"Replay runtime failed\"));\n    document.head.appendChild(script);\n  });\n\n  return replayScriptPromise;\n};\n\nconst startRecordingForSession = async (\n  sessionId: string,\n  { skipSampling = false }: { skipSampling?: boolean } = {},\n) => {\n  const generation = consentGeneration;\n  if (replayOptedOut || hasGlobalPrivacyControl()) return;\n  const context = getReplayContext();\n  if (!context) return;\n  const personData = Config.getInstance().get()?.personState?.data;\n\n  const windowId = getWindowId();\n  if (!windowId) return;\n\n  const sampleRate =\n    typeof context.replayConfig.sampleRate === \"number\" ? context.replayConfig.sampleRate : 1;\n  if (!skipSampling && !rollSamplingVerdict(sessionId, sampleRate)) {\n    logger.debug(\"Session replay not sampled for this session\");\n    return;\n  }\n\n  const distinctId = getDistinctId();\n  if (!distinctId) return;\n\n  try {\n    await loadReplayRuntime();\n    if (replayOptedOut || hasGlobalPrivacyControl() || generation !== consentGeneration) return;\n    const runtime = (window as ReplayWindow).userorbitReplay;\n    if (!runtime?.startReplayRecording) {\n      throw new Error(\"Replay runtime did not expose startReplayRecording\");\n    }\n    if (runtime.supportsConsentWithdrawal !== true) {\n      throw new Error(\"Replay runtime must support consent withdrawal before recording\");\n    }\n    const pageUrl = new URL(window.location.href);\n    pageUrl.search = \"\";\n    pageUrl.hash = \"\";\n    pageUrl.username = \"\";\n    pageUrl.password = \"\";\n\n    await runtime.startReplayRecording({\n      apiHost: context.apiHost,\n      ingestHost: context.replayConfig.ingestHost,\n      apiKey: context.apiKey,\n      sessionId,\n      windowId,\n      distinctId,\n      url: pageUrl.toString(),\n      viewport: { width: window.innerWidth, height: window.innerHeight },\n      recorderVersion: String(\n        ((import.meta as any).env && (import.meta as any).env.VERSION) || \"0.0.0\",\n      ),\n      subscriberToken:\n        typeof personData?.code === \"string\" && personData.code ? personData.code : undefined,\n      privacyMode:\n        context.replayConfig.privacyMode ||\n        (context.replayConfig.maskAllText === true ? \"mask_all\" : \"mask_pii\"),\n      piiTypes: Array.isArray(context.replayConfig.piiTypes)\n        ? context.replayConfig.piiTypes\n        : [\"email\", \"phone\", \"payment_card\", \"ip_address\"],\n      maskAllText: context.replayConfig.maskAllText === true,\n      maskSelector: safeSelector(context.replayConfig.maskSelector, \".uo-mask, [data-uo-mask]\"),\n      blockSelector: safeSelector(context.replayConfig.blockSelector, \"img, video\"),\n      maxDurationMs: context.replayConfig.maxDurationMs,\n    });\n  } catch (error) {\n    logger.debug(`Failed to start session replay: ${error}`);\n  }\n};\n\nconst handleSessionChange = () => {\n  if (hasGlobalPrivacyControl()) {\n    if (!replayOptedOut) void initializeSessionReplay();\n    return;\n  }\n  if (replayOptedOut) return;\n\n  const sessionId = getSessionId();\n  if (!sessionId || sessionId === activeSessionId) return;\n\n  activeSessionId = sessionId;\n  sessionTransition = sessionTransition\n    .then(async () => {\n      if (activeSessionId !== sessionId) return;\n      const runtime = (window as ReplayWindow).userorbitReplay;\n      if (runtime?.stopReplayRecording) {\n        await runtime.stopReplayRecording(\"ended\");\n      }\n      if (activeSessionId !== sessionId) return;\n      await startRecordingForSession(sessionId);\n    })\n    .catch((error) => {\n      logger.debug(`Replay session transition failed: ${error}`);\n    });\n};\n\nconst startSessionWatcher = () => {\n  if (sessionWatcherStarted) return;\n  sessionWatcherStarted = true;\n\n  setInterval(handleSessionChange, SESSION_POLL_INTERVAL_MS);\n  document.addEventListener(\"visibilitychange\", () => {\n    if (document.visibilityState === \"visible\") {\n      handleSessionChange();\n    }\n  });\n};\n\nconst stopActiveRecording = async () => {\n  activeSessionId = null;\n  const generation = consentGeneration;\n  const runtime = (window as ReplayWindow).userorbitReplay;\n  // Install the barrier synchronously so a re-enable waits for the immediate stop.\n  let immediateStop: Promise<void>;\n  try {\n    immediateStop = Promise.resolve(runtime?.stopReplayRecording?.(\"consent_withdrawn\"));\n  } catch (error) {\n    immediateStop = Promise.reject(error);\n  }\n  sessionTransition = Promise.allSettled([sessionTransition, immediateStop])\n    .then(async () => {\n      if (generation !== consentGeneration || !replayOptedOut) return;\n      await (window as ReplayWindow).userorbitReplay?.stopReplayRecording?.(\"consent_withdrawn\");\n    })\n    .catch((error) => logger.debug(`Failed to stop session replay: ${error}`));\n  await sessionTransition;\n};\n\nconst ensureEnvironmentSubscription = () => {\n  if (disposeEnvironmentSubscription) return;\n\n  disposeEnvironmentSubscription = subscribeToEnvironmentState(() => {\n    void initializeSessionReplay();\n  });\n};\n\nexport const initializeSessionReplay = async (enabled?: boolean) => {\n  if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n\n  ensureEnvironmentSubscription();\n  if (enabled !== undefined) {\n    // A caller opt-out survives automatic environment/person refreshes. Explicit\n    // SDK configuration enabled:true is required to grant consent again.\n    if (!enabled || Config.getInstance().get()?.sessionReplay?.enabled === true) {\n      callerReplayEnabled = enabled;\n    }\n  }\n\n  const context = getReplayContext();\n  const personData = Config.getInstance().get()?.personState?.data;\n  const matchesAudience =\n    Config.getInstance().get()?.sessionReplay?.enabled !== false &&\n    context?.replayConfig.enabled === true &&\n    matchesAudienceTargeting(context.replayConfig.targeting, personData);\n\n  replayOptedOut =\n    !privacyAllowed(\"sessionReplay\") ||\n    hasGlobalPrivacyControl() ||\n    !callerReplayEnabled ||\n    !matchesAudience;\n  if (replayOptedOut) consentGeneration += 1;\n  if (replayOptedOut) {\n    await stopActiveRecording();\n    return;\n  }\n\n  if (!context) return;\n\n  if (!isReplaySupported()) {\n    logger.debug(\"Session replay not supported in this browser\");\n    return;\n  }\n\n  const sessionId = getSessionId();\n  if (!sessionId) return;\n\n  startSessionWatcher();\n  handleSessionChange();\n  await sessionTransition;\n};\n\nexport const getReplayState = () => {\n  const runtime =\n    typeof window !== \"undefined\" ? (window as ReplayWindow).userorbitReplay : undefined;\n  if (runtime?.getReplayState) return runtime.getReplayState();\n  return { replaySessionId: null, isRecording: false };\n};\n\nexport const canStartReplayOnDemand = () => {\n  const context = getReplayContext();\n  return Boolean(\n    context &&\n    context.replayConfig.enabled === true &&\n    callerReplayEnabled &&\n    !replayOptedOut &&\n    Config.getInstance().get()?.sessionReplay?.enabled !== false &&\n    isReplaySupported(),\n  );\n};\n\nexport const startReplayOnDemand = async () => {\n  if (getReplayState().isRecording) return true;\n  const sessionId = getSessionId();\n  if (!sessionId || !canStartReplayOnDemand()) return false;\n\n  activeSessionId = sessionId;\n  await startRecordingForSession(sessionId, { skipSampling: true });\n  return getReplayState().isRecording;\n};\n\nexport const stopReplayOnDemand = async () => {\n  const runtime =\n    typeof window !== \"undefined\" ? (window as ReplayWindow).userorbitReplay : undefined;\n  await runtime?.stopReplayRecording?.(\"ended\");\n};\n\nexport const captureReplayEvidence = async (): Promise<ReplayEvidence | null> => {\n  const runtime =\n    typeof window !== \"undefined\" ? (window as ReplayWindow).userorbitReplay : undefined;\n  if (!runtime?.markReplayRecording) return null;\n\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\n  const capture = runtime.markReplayRecording().catch((error) => {\n    logger.debug(`Failed to attach replay evidence: ${error}`);\n    return null;\n  });\n\n  try {\n    return await Promise.race([\n      capture,\n      new Promise<null>((resolve) => {\n        timeoutId = setTimeout(() => resolve(null), REPLAY_EVIDENCE_TIMEOUT_MS);\n      }),\n    ]);\n  } finally {\n    if (timeoutId) clearTimeout(timeoutId);\n  }\n};\n","// ABOUTME: Round, mirrored camera preview pinned to the bottom-left of the host page.\n// ABOUTME: Because it sits on the page, a recording of the current tab captures the speaker too.\n\nimport React, { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport const CameraBubble: React.FC<{ stream: MediaStream; portalTarget: Element }> = ({\n  stream,\n  portalTarget,\n}) => {\n  const videoRef = useRef<HTMLVideoElement>(null);\n\n  useEffect(() => {\n    const video = videoRef.current;\n    if (!video) return;\n    video.srcObject = stream;\n    void video.play().catch(() => undefined);\n    return () => {\n      video.srcObject = null;\n    };\n  }, [stream]);\n\n  return createPortal(\n    <div className=\"pointer-events-none fixed bottom-[24px] left-[24px] z-max h-[168px] w-[168px] overflow-hidden rounded-full bg-uo-surface-hud shadow-uo-3 ring-[3px] ring-white/90\">\n      <video\n        ref={videoRef}\n        muted\n        playsInline\n        aria-label=\"Camera preview\"\n        className=\"h-full w-full -scale-x-100 object-cover\"\n      />\n    </div>,\n    portalTarget,\n  );\n};\n","// ABOUTME: Tracks the camera and microphone a feedback recording should use.\n// ABOUTME: Asks for permission on selection, keeps device labels fresh and owns the live camera stream.\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport const INPUT_OFF = \"off\";\nconst DEFAULT_DEVICE = \"default\";\n\nexport type RecordingInputOption = { id: string; label: string };\n\nfunction toOptions(devices: MediaDeviceInfo[], kind: MediaDeviceKind, fallbackLabel: string) {\n  const options = devices\n    .filter((device) => device.kind === kind && device.deviceId)\n    .map((device, index) => ({\n      id: device.deviceId,\n      label: device.label || `${fallbackLabel} ${index + 1}`,\n    }));\n  return options.length > 0 ? options : [{ id: DEFAULT_DEVICE, label: fallbackLabel }];\n}\n\nfunction getDeviceConstraint(deviceId: string) {\n  return deviceId === DEFAULT_DEVICE ? true : { deviceId: { exact: deviceId } };\n}\n\nfunction getTrackDeviceId(track: MediaStreamTrack | undefined, requestedId: string) {\n  return track?.getSettings().deviceId || requestedId;\n}\n\nexport function useRecordingInputs(active: boolean) {\n  const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n  const [cameraId, setCameraId] = useState(INPUT_OFF);\n  const [microphoneId, setMicrophoneId] = useState(INPUT_OFF);\n  const [cameraStream, setCameraStream] = useState<MediaStream | null>(null);\n  const [inputError, setInputError] = useState<string | null>(null);\n  const cameraStreamRef = useRef<MediaStream | null>(null);\n  const cameraRequestRef = useRef(0);\n\n  const isSupported =\n    typeof navigator !== \"undefined\" &&\n    Boolean(navigator.mediaDevices?.getUserMedia && navigator.mediaDevices.enumerateDevices);\n\n  const refreshDevices = useCallback(async () => {\n    if (!isSupported) return;\n    try {\n      setDevices(await navigator.mediaDevices.enumerateDevices());\n    } catch {\n      setDevices([]);\n    }\n  }, [isSupported]);\n\n  const replaceCameraStream = useCallback((stream: MediaStream | null) => {\n    cameraStreamRef.current?.getTracks().forEach((track) => track.stop());\n    cameraStreamRef.current = stream;\n    setCameraStream(stream);\n  }, []);\n\n  const selectCamera = useCallback(\n    async (deviceId: string) => {\n      setInputError(null);\n      const requestId = cameraRequestRef.current + 1;\n      cameraRequestRef.current = requestId;\n\n      if (deviceId === INPUT_OFF) {\n        replaceCameraStream(null);\n        setCameraId(INPUT_OFF);\n        return;\n      }\n\n      try {\n        const stream = await navigator.mediaDevices.getUserMedia({\n          video: {\n            ...(deviceId === DEFAULT_DEVICE ? {} : { deviceId: { exact: deviceId } }),\n            width: { ideal: 640 },\n            height: { ideal: 640 },\n          },\n          audio: false,\n        });\n        if (cameraRequestRef.current !== requestId) {\n          stream.getTracks().forEach((track) => track.stop());\n          return;\n        }\n        replaceCameraStream(stream);\n        setCameraId(getTrackDeviceId(stream.getVideoTracks()[0], deviceId));\n        await refreshDevices();\n      } catch {\n        if (cameraRequestRef.current !== requestId) return;\n        replaceCameraStream(null);\n        setCameraId(INPUT_OFF);\n        setInputError(\"Camera access was blocked. Allow it in your browser to show your camera.\");\n      }\n    },\n    [refreshDevices, replaceCameraStream],\n  );\n\n  const selectMicrophone = useCallback(\n    async (deviceId: string) => {\n      setInputError(null);\n      if (deviceId === INPUT_OFF) {\n        setMicrophoneId(INPUT_OFF);\n        return;\n      }\n\n      try {\n        const stream = await navigator.mediaDevices.getUserMedia({\n          audio: getDeviceConstraint(deviceId),\n          video: false,\n        });\n        const track = stream.getAudioTracks()[0];\n        setMicrophoneId(getTrackDeviceId(track, deviceId));\n        stream.getTracks().forEach((item) => item.stop());\n        await refreshDevices();\n      } catch {\n        setMicrophoneId(INPUT_OFF);\n        setInputError(\"Microphone access was blocked. Allow it in your browser to add your voice.\");\n      }\n    },\n    [refreshDevices],\n  );\n\n  const openMicrophone = useCallback(async () => {\n    if (microphoneId === INPUT_OFF) return null;\n    return navigator.mediaDevices.getUserMedia({\n      audio: {\n        ...(microphoneId === DEFAULT_DEVICE ? {} : { deviceId: { exact: microphoneId } }),\n        echoCancellation: true,\n        noiseSuppression: true,\n      },\n      video: false,\n    });\n  }, [microphoneId]);\n\n  const releaseCamera = useCallback(() => {\n    cameraRequestRef.current += 1;\n    replaceCameraStream(null);\n    setCameraId(INPUT_OFF);\n  }, [replaceCameraStream]);\n\n  useEffect(() => {\n    if (!active || !isSupported) return;\n    void refreshDevices();\n    navigator.mediaDevices.addEventListener?.(\"devicechange\", refreshDevices);\n    return () => navigator.mediaDevices.removeEventListener?.(\"devicechange\", refreshDevices);\n  }, [active, isSupported, refreshDevices]);\n\n  useEffect(\n    () => () => {\n      cameraRequestRef.current += 1;\n      cameraStreamRef.current?.getTracks().forEach((track) => track.stop());\n    },\n    [],\n  );\n\n  return {\n    isSupported,\n    cameras: toOptions(devices, \"videoinput\", \"Camera\"),\n    microphones: toOptions(devices, \"audioinput\", \"Microphone\"),\n    cameraId,\n    microphoneId,\n    cameraStream,\n    inputError,\n    selectCamera,\n    selectMicrophone,\n    openMicrophone,\n    releaseCamera,\n  };\n}\n","// ABOUTME: Screen-recording setup pieces shown in the feedback form while the record mode is active.\n// ABOUTME: Camera and microphone pickers with staggered rows, plus the growing Start recording button.\n\nimport { ChevronDown, Mic, MicOff, Video, VideoOff } from \"lucide-react\";\nimport React from \"react\";\nimport { INPUT_OFF, type RecordingInputOption } from \"./use-recording-inputs\";\n\nexport type ComposerMode = \"compose\" | \"pin\" | \"record\";\n\nexport const COMPOSER_EASE = \"cubic-bezier(0.22, 1, 0.36, 1)\";\nexport const COMPOSER_RESIZE_MS = 420;\n\nexport const composerModeTint: Record<ComposerMode, string> = {\n  compose: \"transparent\",\n  pin: \"#3B82F6\",\n  record: \"#FF2056\",\n};\n\nexport const crossfadeLabelStyle = (visible: boolean): React.CSSProperties => ({\n  opacity: visible ? 1 : 0,\n  filter: visible ? \"blur(0px)\" : \"blur(3px)\",\n  pointerEvents: visible ? undefined : \"none\",\n  transition: visible\n    ? \"opacity 240ms ease-out 220ms, filter 240ms ease-out 220ms\"\n    : \"opacity 140ms ease-out, filter 140ms ease-out\",\n});\n\nconst StaggeredRows: React.FC<{ visible: boolean; children: React.ReactNode[] }> = ({\n  visible,\n  children,\n}) => (\n  <div className=\"flex flex-col gap-[2px] pb-[2px]\">\n    {children.filter(Boolean).map((child, index) => (\n      <div\n        key={index}\n        style={{\n          opacity: visible ? 1 : 0,\n          transform: visible ? \"none\" : \"translateY(-4px)\",\n          transition: `opacity 240ms ease-out ${140 + index * 60}ms, transform 240ms ${COMPOSER_EASE} ${140 + index * 60}ms`,\n        }}\n      >\n        {child}\n      </div>\n    ))}\n  </div>\n);\n\nconst composerRowClassName =\n  \"relative flex h-[32px] w-full cursor-pointer items-center gap-[8px] rounded-[10px] border-0 bg-transparent px-[10px] text-left font-sans text-[13px] text-uo-text-secondary transition-colors duration-150 hover:bg-uo-fill-hover hover:text-uo-text-primary disabled:cursor-default disabled:opacity-60\";\n\nconst DeviceRow: React.FC<{\n  label: string;\n  value: string;\n  options: RecordingInputOption[];\n  icon: React.ReactNode;\n  offIcon: React.ReactNode;\n  disabled?: boolean;\n  onChange: (value: string) => void;\n}> = ({ label, value, options, icon, offIcon, disabled, onChange }) => (\n  <label className={composerRowClassName}>\n    <span className=\"flex shrink-0\">{value === INPUT_OFF ? offIcon : icon}</span>\n    <span className=\"min-w-0 flex-1 truncate\">\n      {value === INPUT_OFF\n        ? `${label} off`\n        : options.find((option) => option.id === value)?.label || label}\n    </span>\n    <ChevronDown className=\"h-4 w-4 shrink-0 opacity-60\" aria-hidden=\"true\" />\n    <select\n      aria-label={label}\n      value={value}\n      disabled={disabled}\n      onChange={(event) => onChange(event.target.value)}\n      className=\"absolute inset-0 cursor-pointer appearance-none opacity-0 disabled:cursor-default\"\n    >\n      <option value={INPUT_OFF}>{label} off</option>\n      {options.map((option) => (\n        <option key={option.id} value={option.id}>\n          {option.label}\n        </option>\n      ))}\n    </select>\n  </label>\n);\n\nexport const RecordingInputs: React.FC<{\n  visible: boolean;\n  cameras: RecordingInputOption[];\n  microphones: RecordingInputOption[];\n  cameraId: string;\n  microphoneId: string;\n  inputError: string | null;\n  disabled: boolean;\n  onCameraChange: (deviceId: string) => void;\n  onMicrophoneChange: (deviceId: string) => void;\n}> = ({\n  visible,\n  cameras,\n  microphones,\n  cameraId,\n  microphoneId,\n  inputError,\n  disabled,\n  onCameraChange,\n  onMicrophoneChange,\n}) => (\n  <StaggeredRows visible={visible}>\n    {[\n      <DeviceRow\n        key=\"camera\"\n        label=\"Camera\"\n        value={cameraId}\n        options={cameras}\n        icon={<Video className=\"h-4 w-4\" />}\n        offIcon={<VideoOff className=\"h-4 w-4\" />}\n        disabled={disabled || !visible}\n        onChange={onCameraChange}\n      />,\n      <DeviceRow\n        key=\"microphone\"\n        label=\"Microphone\"\n        value={microphoneId}\n        options={microphones}\n        icon={<Mic className=\"h-4 w-4\" />}\n        offIcon={<MicOff className=\"h-4 w-4\" />}\n        disabled={disabled || !visible}\n        onChange={onMicrophoneChange}\n      />,\n      inputError && (\n        <p role=\"alert\" className=\"m-0 px-[10px] text-[11.5px] leading-[16px] text-uo-danger-fg\">\n          {inputError}\n        </p>\n      ),\n    ]}\n  </StaggeredRows>\n);\n\nexport const StartRecordingButton: React.FC<{\n  visible: boolean;\n  isStarting: boolean;\n  onStart: () => void;\n}> = ({ visible, isStarting, onStart }) => (\n  <button\n    type=\"button\"\n    onClick={onStart}\n    disabled={isStarting || !visible}\n    tabIndex={visible ? 0 : -1}\n    aria-hidden={!visible}\n    className=\"relative h-[32px] shrink-0 cursor-pointer overflow-hidden rounded-full border-0 p-0 font-sans text-[13px] font-medium text-white disabled:cursor-default\"\n    style={{\n      flexGrow: visible ? 1 : 0,\n      flexBasis: 0,\n      minWidth: 0,\n      marginLeft: visible ? 0 : -8,\n      opacity: visible ? (isStarting ? 0.6 : 1) : 0,\n      transform: visible ? \"none\" : \"scale(0.8)\",\n      backgroundColor: composerModeTint.record,\n      boxShadow: \"inset 0 1px 0 0 rgb(255 255 255 / 0.20)\",\n      transition: [\n        `flex-grow ${COMPOSER_RESIZE_MS}ms ${COMPOSER_EASE}`,\n        `margin-left ${COMPOSER_RESIZE_MS}ms ${COMPOSER_EASE}`,\n        \"opacity 200ms ease-out\",\n        \"transform 200ms ease-out\",\n      ].join(\", \"),\n    }}\n  >\n    <span\n      className=\"absolute inset-0 flex items-center justify-center whitespace-nowrap px-[12px]\"\n      style={crossfadeLabelStyle(visible)}\n    >\n      {isStarting ? \"Choose what to share…\" : \"Start recording\"}\n    </span>\n  </button>\n);\n","// ABOUTME: The always-dark status pill shown top-center on the host page during a capture mode.\n// ABOUTME: Pinning and recording fill it with their own status, exit hint and controls.\n\nimport { IconEye, IconEyeOff } from \"@tabler/icons-react\";\nimport React from \"react\";\n\nexport const formatCaptureDuration = (seconds: number) =>\n  `${String(Math.floor(seconds / 60)).padStart(2, \"0\")}:${String(seconds % 60).padStart(2, \"0\")}`;\n\nexport const CaptureHud: React.FC<{ label: string; children: React.ReactNode }> = ({\n  label,\n  children,\n}) => (\n  <div\n    role=\"status\"\n    aria-label={label}\n    className=\"pointer-events-auto fixed left-1/2 top-[16px] z-max flex h-[40px] -translate-x-1/2 items-center gap-[4px] whitespace-nowrap rounded-full bg-uo-surface-hud py-[4px] pl-[12px] pr-[4px] font-sans text-[14px] font-medium text-uo-text-on-hud shadow-uo-2\"\n  >\n    {children}\n  </div>\n);\n\nexport const CaptureHudDivider = () => (\n  <span aria-hidden=\"true\" className=\"mx-[4px] h-[18px] w-px bg-white/15\" />\n);\n\nexport const CaptureHudKey: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n  <kbd className=\"rounded-[6px] bg-white/15 px-[6px] font-mono text-[11px] font-medium leading-[18px] text-uo-text-on-hud\">\n    {children}\n  </kbd>\n);\n\nexport const CaptureHudDot: React.FC<{ color: \"pick\" | \"record\"; pulsing?: boolean }> = ({\n  color,\n  pulsing,\n}) => (\n  <span\n    aria-hidden=\"true\"\n    className={`h-[8px] w-[8px] shrink-0 rounded-full ${color === \"pick\" ? \"bg-uo-pick\" : \"bg-uo-record\"} ${pulsing ? \"animate-pulse\" : \"\"}`}\n  />\n);\n\nexport const CaptureHudButton: React.FC<\n  React.ButtonHTMLAttributes<HTMLButtonElement> & { tone?: \"ghost\" | \"record\" }\n> = ({ tone = \"ghost\", className = \"\", ...props }) => (\n  <button\n    type=\"button\"\n    {...props}\n    className={`flex h-[32px] cursor-pointer items-center gap-[6px] rounded-full border-0 px-[12px] font-sans text-[13px] font-medium transition-colors active:scale-[0.96] disabled:cursor-default disabled:opacity-50 ${\n      tone === \"record\"\n        ? \"bg-uo-record text-white hover:brightness-110\"\n        : \"bg-white/10 text-uo-text-on-hud hover:bg-white/20\"\n    } ${className}`}\n  />\n);\n\nexport const CaptureHudIconButton: React.FC<\n  React.ButtonHTMLAttributes<HTMLButtonElement> & { label: string }\n> = ({ label, className = \"\", ...props }) => (\n  <button\n    type=\"button\"\n    aria-label={label}\n    title={label}\n    {...props}\n    className={`flex h-[32px] w-[32px] cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-uo-text-on-hud opacity-80 transition hover:bg-white/10 hover:opacity-100 active:scale-[0.96] ${className}`}\n  />\n);\n\nexport const CaptureHudFormToggle: React.FC<{\n  isFormHidden: boolean;\n  onFormHiddenChange: (hidden: boolean) => void;\n}> = ({ isFormHidden, onFormHiddenChange }) => (\n  <CaptureHudButton onClick={() => onFormHiddenChange(!isFormHidden)}>\n    {isFormHidden ? <IconEye size={14} /> : <IconEyeOff size={14} />}\n    {isFormHidden ? \"Show form\" : \"Hide form\"}\n  </CaptureHudButton>\n);\n","// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\nlet config;\nlet rootDocument;\nlet start;\nexport function finder(input, options) {\n    start = new Date();\n    if (input.nodeType !== Node.ELEMENT_NODE) {\n        throw new Error(`Can't generate CSS selector for non-element node type.`);\n    }\n    if ('html' === input.tagName.toLowerCase()) {\n        return 'html';\n    }\n    const defaults = {\n        root: document.body,\n        idName: (name) => true,\n        className: (name) => true,\n        tagName: (name) => true,\n        attr: (name, value) => false,\n        seedMinLength: 1,\n        optimizedMinLength: 2,\n        threshold: 1000,\n        maxNumberOfTries: 10000,\n        timeoutMs: undefined,\n    };\n    config = { ...defaults, ...options };\n    rootDocument = findRootDocument(config.root, defaults);\n    let path = bottomUpSearch(input, 'all', () => bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))));\n    if (path) {\n        const optimized = sort(optimize(path, input));\n        if (optimized.length > 0) {\n            path = optimized[0];\n        }\n        return selector(path);\n    }\n    else {\n        throw new Error(`Selector was not found.`);\n    }\n}\nfunction findRootDocument(rootNode, defaults) {\n    if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n        return rootNode;\n    }\n    if (rootNode === defaults.root) {\n        return rootNode.ownerDocument;\n    }\n    return rootNode;\n}\nfunction bottomUpSearch(input, limit, fallback) {\n    let path = null;\n    let stack = [];\n    let current = input;\n    let i = 0;\n    while (current) {\n        const elapsedTime = new Date().getTime() - start.getTime();\n        if (config.timeoutMs !== undefined && elapsedTime > config.timeoutMs) {\n            throw new Error(`Timeout: Can't find a unique selector after ${elapsedTime}ms`);\n        }\n        let level = maybe(id(current)) ||\n            maybe(...attr(current)) ||\n            maybe(...classNames(current)) ||\n            maybe(tagName(current)) || [any()];\n        const nth = index(current);\n        if (limit == 'all') {\n            if (nth) {\n                level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n            }\n        }\n        else if (limit == 'two') {\n            level = level.slice(0, 1);\n            if (nth) {\n                level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n            }\n        }\n        else if (limit == 'one') {\n            const [node] = (level = level.slice(0, 1));\n            if (nth && dispensableNth(node)) {\n                level = [nthChild(node, nth)];\n            }\n        }\n        else if (limit == 'none') {\n            level = [any()];\n            if (nth) {\n                level = [nthChild(level[0], nth)];\n            }\n        }\n        for (let node of level) {\n            node.level = i;\n        }\n        stack.push(level);\n        if (stack.length >= config.seedMinLength) {\n            path = findUniquePath(stack, fallback);\n            if (path) {\n                break;\n            }\n        }\n        current = current.parentElement;\n        i++;\n    }\n    if (!path) {\n        path = findUniquePath(stack, fallback);\n    }\n    if (!path && fallback) {\n        return fallback();\n    }\n    return path;\n}\nfunction findUniquePath(stack, fallback) {\n    const paths = sort(combinations(stack));\n    if (paths.length > config.threshold) {\n        return fallback ? fallback() : null;\n    }\n    for (let candidate of paths) {\n        if (unique(candidate)) {\n            return candidate;\n        }\n    }\n    return null;\n}\nfunction selector(path) {\n    let node = path[0];\n    let query = node.name;\n    for (let i = 1; i < path.length; i++) {\n        const level = path[i].level || 0;\n        if (node.level === level - 1) {\n            query = `${path[i].name} > ${query}`;\n        }\n        else {\n            query = `${path[i].name} ${query}`;\n        }\n        node = path[i];\n    }\n    return query;\n}\nfunction penalty(path) {\n    return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\nfunction unique(path) {\n    const css = selector(path);\n    switch (rootDocument.querySelectorAll(css).length) {\n        case 0:\n            throw new Error(`Can't select any node with this selector: ${css}`);\n        case 1:\n            return true;\n        default:\n            return false;\n    }\n}\nfunction id(input) {\n    const elementId = input.getAttribute('id');\n    if (elementId && config.idName(elementId)) {\n        return {\n            name: '#' + CSS.escape(elementId),\n            penalty: 0,\n        };\n    }\n    return null;\n}\nfunction attr(input) {\n    const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n    return attrs.map((attr) => ({\n        name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n        penalty: 0.5,\n    }));\n}\nfunction classNames(input) {\n    const names = Array.from(input.classList).filter(config.className);\n    return names.map((name) => ({\n        name: '.' + CSS.escape(name),\n        penalty: 1,\n    }));\n}\nfunction tagName(input) {\n    const name = input.tagName.toLowerCase();\n    if (config.tagName(name)) {\n        return {\n            name,\n            penalty: 2,\n        };\n    }\n    return null;\n}\nfunction any() {\n    return {\n        name: '*',\n        penalty: 3,\n    };\n}\nfunction index(input) {\n    const parent = input.parentNode;\n    if (!parent) {\n        return null;\n    }\n    let child = parent.firstChild;\n    if (!child) {\n        return null;\n    }\n    let i = 0;\n    while (child) {\n        if (child.nodeType === Node.ELEMENT_NODE) {\n            i++;\n        }\n        if (child === input) {\n            break;\n        }\n        child = child.nextSibling;\n    }\n    return i;\n}\nfunction nthChild(node, i) {\n    return {\n        name: node.name + `:nth-child(${i})`,\n        penalty: node.penalty + 1,\n    };\n}\nfunction dispensableNth(node) {\n    return node.name !== 'html' && !node.name.startsWith('#');\n}\nfunction maybe(...level) {\n    const list = level.filter(notEmpty);\n    if (list.length > 0) {\n        return list;\n    }\n    return null;\n}\nfunction notEmpty(value) {\n    return value !== null && value !== undefined;\n}\nfunction* combinations(stack, path = []) {\n    if (stack.length > 0) {\n        for (let node of stack[0]) {\n            yield* combinations(stack.slice(1, stack.length), path.concat(node));\n        }\n    }\n    else {\n        yield path;\n    }\n}\nfunction sort(paths) {\n    return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\nfunction* optimize(path, input, scope = {\n    counter: 0,\n    visited: new Map(),\n}) {\n    if (path.length > 2 && path.length > config.optimizedMinLength) {\n        for (let i = 1; i < path.length - 1; i++) {\n            if (scope.counter > config.maxNumberOfTries) {\n                return; // Okay At least I tried!\n            }\n            scope.counter += 1;\n            const newPath = [...path];\n            newPath.splice(i, 1);\n            const newPathKey = selector(newPath);\n            if (scope.visited.has(newPathKey)) {\n                return;\n            }\n            if (unique(newPath) && same(newPath, input)) {\n                yield newPath;\n                scope.visited.set(newPathKey, true);\n                yield* optimize(newPath, input, scope);\n            }\n        }\n    }\n}\nfunction same(path, input) {\n    return rootDocument.querySelector(selector(path)) === input;\n}\n","// ABOUTME: Generates the ranked selector bank (primary + fallbacks + fingerprint) for a picked\n// ABOUTME: element, filtering unstable ids/classes and preferring durable attributes.\n\nimport { finder } from \"@medv/finder\";\nimport type { ElementSelectorFingerprint } from \"@userorbit/types\";\nimport {\n  createElementFingerprint,\n  durableAttributeNames,\n  escapeAttributeValue,\n  escapeIdentifier,\n  getAncestors,\n  getElementLabel,\n  isDurableAttribute,\n  isFrameworkGeneratedId,\n  isStableClassName,\n  isStableId,\n  isStableToken,\n  isUsableAttribute,\n  localizedAttributeNames,\n} from \"@userorbit/ui/src/components/guide/element-fingerprint\";\n\nexport type { ElementSelectorFingerprint };\n\nexport type SelectorBank = {\n  primary: string | null;\n  fallbacks: string[];\n  candidates: string[];\n  fingerprint: ElementSelectorFingerprint;\n};\n\nexport function createSelectorBank(element: HTMLElement): SelectorBank {\n  const candidates: { selector: string; rank: number }[] = [];\n  const addCandidate = (selector: string | null | undefined, rank: number) => {\n    if (!selector || candidates.some((candidate) => candidate.selector === selector)) return;\n    if (selectsElement(selector, element)) candidates.push({ selector, rank });\n  };\n\n  addCandidate(uniqueIdSelector(element), 100);\n  for (const selector of uniqueAttributeSelectors(element, durableAttributeNames)) {\n    addCandidate(selector, 90);\n  }\n  addCandidate(uniqueClassSelector(element), 70);\n  addCandidate(finderSelector(element, \"durable\"), 65);\n  for (const selector of uniqueAttributeSelectors(element, localizedAttributeNames)) {\n    addCandidate(selector, 75);\n  }\n  addCandidate(localizedRoleSelector(element), 74);\n  addCandidate(wildcardIdSelector(element), 72);\n  addCandidate(scopedAttributeSelector(element), 71);\n  addCandidate(scopedRoleStructureSelector(element), 66);\n  addCandidate(scopedStructureSelector(element), 25);\n  addCandidate(finderSelector(element, \"default\"), 20);\n  addCandidate(nthOfTypeSelector(element), 10);\n\n  const sortedCandidates = candidates\n    .sort((left, right) => right.rank - left.rank)\n    .map((candidate) => candidate.selector);\n\n  return {\n    primary: sortedCandidates[0] || null,\n    fallbacks: sortedCandidates.slice(1, 8),\n    candidates: sortedCandidates,\n    fingerprint: createElementFingerprint(element),\n  };\n}\n\nexport function getBestSelector(element: HTMLElement) {\n  return createSelectorBank(element).primary;\n}\n\nexport function createAnchoredSelector(anchor: HTMLElement, target: HTMLElement) {\n  if (anchor === target || !anchor.contains(target)) return null;\n  if (anchor.ownerDocument !== target.ownerDocument) return null;\n\n  const anchorSelector = createSelectorBank(anchor).primary;\n  if (!anchorSelector) return null;\n\n  const descendant = `${anchorSelector} ${target.tagName.toLowerCase()}`;\n  if (selectsElement(descendant, target)) return descendant;\n\n  const path = relativeNthOfTypePath(anchor, target);\n  if (!path) return null;\n\n  const combined = `${anchorSelector} > ${path}`;\n  return selectsElement(combined, target) ? combined : null;\n}\n\nfunction finderSelector(element: HTMLElement, mode: \"durable\" | \"default\") {\n  try {\n    const selector = finder(\n      element,\n      mode === \"durable\"\n        ? {\n            root: element.ownerDocument.body,\n            idName: isStableId,\n            className: isStableClassName,\n            attr: isDurableAttribute,\n            tagName: () => true,\n            timeoutMs: 400,\n            seedMinLength: 2,\n            optimizedMinLength: 2,\n            maxNumberOfTries: 5000,\n          }\n        : {\n            root: element.ownerDocument.body,\n            timeoutMs: 400,\n            maxNumberOfTries: 5000,\n          },\n    );\n\n    return isFragileGeneratedSelector(selector) ? null : selector;\n  } catch {\n    return null;\n  }\n}\n\nfunction uniqueIdSelector(element: HTMLElement) {\n  const id = element.getAttribute(\"id\");\n  if (!id || !isStableId(id)) return null;\n  return `#${escapeIdentifier(id)}`;\n}\n\nconst idDigitRunPattern = /\\d{3,}/;\n\nfunction wildcardIdSelector(element: HTMLElement) {\n  const id = element.getAttribute(\"id\");\n  if (!id || isStableId(id) || isFrameworkGeneratedId(id)) return null;\n  if (!idDigitRunPattern.test(id)) return null;\n\n  const firstRunIndex = id.search(idDigitRunPattern);\n  const lastRun = id.match(/\\d{3,}(?!.*\\d{3,})/);\n  const prefix = id.slice(0, firstRunIndex);\n  const suffix =\n    lastRun && lastRun.index !== undefined ? id.slice(lastRun.index + lastRun[0].length) : \"\";\n\n  const parts: string[] = [];\n  if (prefix.length >= 3 && isStableToken(prefix)) {\n    parts.push(`[id^=\"${escapeAttributeValue(prefix)}\"]`);\n  }\n  if (suffix.length >= 3 && isStableToken(suffix)) {\n    parts.push(`[id$=\"${escapeAttributeValue(suffix)}\"]`);\n  }\n  if (parts.length === 0) return null;\n\n  return `${element.tagName.toLowerCase()}${parts.join(\"\")}`;\n}\n\nfunction uniqueAttributeSelectors(element: HTMLElement, attributeNames: string[]) {\n  const tag = element.tagName.toLowerCase();\n  const selectors: string[] = [];\n\n  for (const name of attributeNames) {\n    const value = element.getAttribute(name);\n    if (!value || !isUsableAttribute(name, value)) continue;\n    const attrSelector = `[${escapeIdentifier(name)}=\"${escapeAttributeValue(value)}\"]`;\n    selectors.push(`${tag}${attrSelector}`, attrSelector);\n  }\n\n  return selectors;\n}\n\nfunction localizedRoleSelector(element: HTMLElement) {\n  const role = element.getAttribute(\"role\");\n  const ariaLabel = element.getAttribute(\"aria-label\");\n  if (role && ariaLabel && isStableToken(role) && isUsableAttribute(\"aria-label\", ariaLabel)) {\n    return `[role=\"${escapeAttributeValue(role)}\"][aria-label=\"${escapeAttributeValue(ariaLabel)}\"]`;\n  }\n\n  return null;\n}\n\nfunction scopedAttributeSelector(element: HTMLElement) {\n  const tag = element.tagName.toLowerCase();\n  const attributeSelectors: string[] = [];\n  for (const name of [...durableAttributeNames, ...localizedAttributeNames]) {\n    const value = element.getAttribute(name);\n    if (!value || !isUsableAttribute(name, value)) continue;\n    attributeSelectors.push(`${tag}[${escapeIdentifier(name)}=\"${escapeAttributeValue(value)}\"]`);\n  }\n  if (attributeSelectors.length === 0) return null;\n\n  for (const ancestor of getAncestors(element)) {\n    const anchor = ancestorAnchorSelector(ancestor);\n    if (!anchor) continue;\n\n    const pathParts = relativeNthOfTypeParts(ancestor, element) || [];\n    for (const attribute of attributeSelectors) {\n      const direct = `${anchor} ${attribute}`;\n      if (selectsElement(direct, element)) return direct;\n\n      for (let depth = 1; depth <= Math.min(3, pathParts.length - 1); depth++) {\n        const scoped = `${anchor} > ${pathParts.slice(0, depth).join(\" > \")} ${attribute}`;\n        if (selectsElement(scoped, element)) return scoped;\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction ancestorAnchorSelector(ancestor: HTMLElement) {\n  const anchor =\n    uniqueIdSelector(ancestor) ||\n    wildcardIdSelector(ancestor) ||\n    uniqueAttributeSelectors(ancestor, durableAttributeNames).find((selector) =>\n      selectsElement(selector, ancestor),\n    ) ||\n    uniqueClassSelector(ancestor);\n\n  return anchor && selectsElement(anchor, ancestor) ? anchor : null;\n}\n\nfunction scopedRoleStructureSelector(element: HTMLElement) {\n  const ancestors = getAncestors(element);\n\n  for (const ancestor of ancestors) {\n    const role = ancestor.getAttribute(\"role\");\n    if (!role || !isStableToken(role)) continue;\n\n    const label = getElementLabel(ancestor);\n    const anchor = label\n      ? `[role=\"${escapeAttributeValue(role)}\"][aria-label=\"${escapeAttributeValue(label)}\"]`\n      : `[role=\"${escapeAttributeValue(role)}\"]`;\n    const path = relativeNthOfTypePath(ancestor, element);\n    if (!path) continue;\n\n    const selector = `${anchor} > ${path}`;\n    if (selectsElement(selector, element)) return selector;\n  }\n\n  return null;\n}\n\nfunction uniqueClassSelector(element: HTMLElement) {\n  const tag = element.tagName.toLowerCase();\n  const classNames = Array.from(element.classList).filter(isStableClassName).slice(0, 4);\n  if (classNames.length === 0) return null;\n  return `${tag}${classNames.map((name) => `.${escapeIdentifier(name)}`).join(\"\")}`;\n}\n\nfunction scopedStructureSelector(element: HTMLElement) {\n  const ancestors = getAncestors(element);\n\n  for (const ancestor of ancestors) {\n    const anchor = ancestorAnchorSelector(ancestor);\n    if (!anchor) continue;\n\n    const path = relativeNthOfTypePath(ancestor, element);\n    if (!path) continue;\n\n    const selector = `${anchor} > ${path}`;\n    if (selectsElement(selector, element)) return selector;\n  }\n\n  return null;\n}\n\nfunction nthOfTypeSelector(element: HTMLElement) {\n  const path = relativeNthOfTypePath(element.ownerDocument.body, element);\n  return path ? `body > ${path}` : null;\n}\n\nfunction relativeNthOfTypePath(root: HTMLElement, element: HTMLElement) {\n  const parts = relativeNthOfTypeParts(root, element);\n  return parts ? parts.join(\" > \") : null;\n}\n\nfunction relativeNthOfTypeParts(root: HTMLElement, element: HTMLElement) {\n  const parts: string[] = [];\n  let current: HTMLElement | null = element;\n\n  while (current && current !== root) {\n    parts.unshift(nthOfTypePart(current));\n    current = current.parentElement;\n  }\n\n  return current === root && parts.length > 0 ? parts : null;\n}\n\nfunction nthOfTypePart(element: HTMLElement) {\n  const tag = element.tagName.toLowerCase();\n  const siblings = element.parentElement\n    ? Array.from(element.parentElement.children).filter(\n        (child) => child.tagName.toLowerCase() === tag,\n      )\n    : [];\n  const index = siblings.indexOf(element) + 1;\n  return index > 0 ? `${tag}:nth-of-type(${index})` : tag;\n}\n\nfunction selectsElement(selector: string, element: HTMLElement) {\n  try {\n    const matches = element.ownerDocument.querySelectorAll(selector);\n    return matches.length === 1 && matches[0] === element;\n  } catch {\n    return false;\n  }\n}\n\nfunction isFragileGeneratedSelector(selector: string | null) {\n  if (!selector) return true;\n  const idNames = Array.from(selector.matchAll(/#((?:\\\\.|[\\w:-])+)/g)).map((match) =>\n    match[1].replace(/\\\\/g, \"\"),\n  );\n  if (idNames.some((id) => !isStableId(id))) return true;\n  if (selector.length > 240) return true;\n\n  const classNames = Array.from(selector.matchAll(/\\.((?:\\\\.|[\\w/-])+)/g)).map((match) =>\n    match[1].replace(/\\\\/g, \"\"),\n  );\n  return classNames.length > 0 && classNames.every((className) => !isStableClassName(className));\n}\n","// ABOUTME: Describes an element the user pinned to feedback: selectors, fingerprint, geometry and page.\n// ABOUTME: The description is what teammates and agents use to find exactly what the feedback is about.\n\nimport { createSelectorBank } from \"@userorbit/tour-builder-runtime/src/shared/utils/css-selector\";\nimport type { ElementSelectorFingerprint } from \"@userorbit/types\";\nimport { getAncestors } from \"@userorbit/ui/src/components/guide/element-fingerprint\";\nimport { isUserorbitElement, loadHtml2Canvas } from \"../../../lib/html2canvas\";\nimport {\n  hasScreenshotPrivateContent,\n  SCREENSHOT_PRIVATE_SELECTOR,\n  sanitizeScreenshotClone,\n} from \"../../../lib/screenshot-privacy\";\nimport { describePage, type PageContext } from \"./page-context\";\n\nexport type PinnedElement = {\n  selector: string | null;\n  fallbackSelectors: string[];\n  fingerprint: ElementSelectorFingerprint;\n  rect: { x: number; y: number; width: number; height: number };\n  viewport: PageContext[\"viewport\"];\n  pageUrl: string;\n  pageTitle: string;\n  screenshot?: { url: string; name: string; type: string };\n};\n\nconst HEADING_TAGS = new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst MAX_SCREENSHOT_SCALE = 2;\n\nfunction hasPrivateDescriptorContent(element: Element) {\n  if (hasScreenshotPrivateContent(element)) return true;\n  return (element.getAttribute(\"aria-labelledby\")?.split(/\\s+/).filter(Boolean) || []).some(\n    (id) => {\n      const label = element.ownerDocument.getElementById(id);\n      return label ? hasScreenshotPrivateContent(label) : false;\n    },\n  );\n}\n\nexport function describePinnedElement(element: HTMLElement): PinnedElement {\n  const isPrivate = hasPrivateDescriptorContent(element);\n  const bank: {\n    primary: string | null;\n    fallbacks: string[];\n    fingerprint: ElementSelectorFingerprint;\n  } = isPrivate\n    ? {\n        primary: null,\n        fallbacks: [],\n        fingerprint: {\n          tagName: element.tagName.toLowerCase(),\n          role: null,\n          label: null,\n          text: null,\n          attributes: {},\n          classNames: [],\n          ancestorHints: [],\n          siblingIndex: null,\n        },\n      }\n    : createSelectorBank(element);\n  if (!isPrivate) {\n    const ancestors = getAncestors(element).slice(0, 4);\n    bank.fingerprint.ancestorHints = bank.fingerprint.ancestorHints.filter(\n      (_, index) => !hasPrivateDescriptorContent(ancestors[index]),\n    );\n    if (element.closest(\"table\")?.querySelector(SCREENSHOT_PRIVATE_SELECTOR)) {\n      delete bank.fingerprint.tableContext;\n    }\n  }\n  const rect = element.getBoundingClientRect();\n  const page = describePage();\n\n  return {\n    selector: bank.primary,\n    fallbackSelectors: bank.fallbacks,\n    fingerprint: bank.fingerprint,\n    rect: {\n      x: Math.round(rect.left + window.scrollX),\n      y: Math.round(rect.top + window.scrollY),\n      width: Math.round(rect.width),\n      height: Math.round(rect.height),\n    },\n    viewport: page.viewport,\n    pageUrl: isPrivate ? window.location.origin : page.url,\n    pageTitle: isPrivate ? \"\" : page.title,\n  };\n}\n\nexport function getElementKind(fingerprint: Pick<ElementSelectorFingerprint, \"tagName\" | \"role\">) {\n  if (HEADING_TAGS.has(fingerprint.tagName)) return \"heading\";\n  if (fingerprint.tagName === \"img\" || fingerprint.role === \"img\") return \"image\";\n  if (fingerprint.role === \"field\") return \"field\";\n  return fingerprint.role || fingerprint.tagName;\n}\n\nexport function getElementName(fingerprint: Pick<ElementSelectorFingerprint, \"label\" | \"text\">) {\n  return fingerprint.label || fingerprint.text || \"\";\n}\n\nexport async function captureElementImage(element: HTMLElement): Promise<File | null> {\n  const html2canvas = await loadHtml2Canvas();\n  const canvas: HTMLCanvasElement = await html2canvas(element, {\n    useCORS: true,\n    logging: false,\n    scale: Math.min(window.devicePixelRatio || 1, MAX_SCREENSHOT_SCALE),\n    ignoreElements: isUserorbitElement,\n    onclone: sanitizeScreenshotClone,\n  });\n\n  const blob = await new Promise<Blob | null>((resolve) => canvas.toBlob(resolve, \"image/png\"));\n  if (!blob) return null;\n  return new File([blob], `pinned-element-${Date.now()}.png`, { type: \"image/png\" });\n}\n","// ABOUTME: Lets the user point at an element on the host page and click to pin it to feedback.\n// ABOUTME: Swallows page clicks while active, lets Cmd/Ctrl-clicks through, and exits on Esc.\n\nimport { IconX } from \"@tabler/icons-react\";\nimport { createElementFingerprint } from \"@userorbit/ui/src/components/guide/element-fingerprint\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { USERORBIT_OWNED_HOST_ATTRIBUTE, isUserorbitOwnedNode } from \"../../../lib/domOwnership\";\nimport {\n  CaptureHud,\n  CaptureHudDivider,\n  CaptureHudDot,\n  CaptureHudFormToggle,\n  CaptureHudIconButton,\n  CaptureHudKey,\n} from \"./capture-hud\";\nimport { getElementKind, getElementName } from \"./pinned-element\";\n\ntype Highlight = { rect: DOMRect; label: string };\n\nconst SWALLOWED_EVENTS = [\"pointerdown\", \"pointerup\", \"mousedown\", \"mouseup\", \"click\", \"dblclick\"];\nconst BYPASS_KEYS = new Set([\"Meta\", \"Control\"]);\nconst LABEL_NAME_LIMIT = 32;\nconst HIGHLIGHT_Z_INDEX = 2147483646;\nconst PICKING_CURSOR_CSS = `html, html * { cursor: crosshair !important; } [${USERORBIT_OWNED_HOST_ATTRIBUTE}] { cursor: auto !important; }`;\n\nfunction getEventElement(event: Event): HTMLElement | null {\n  const target = event.composedPath()[0];\n  let element = target instanceof Element ? target : null;\n  while (element && !(element instanceof HTMLElement)) element = element.parentElement;\n  return element as HTMLElement | null;\n}\n\nfunction isSelectionBypassEvent(event: Event) {\n  return \"metaKey\" in event && ((event as MouseEvent).metaKey || (event as MouseEvent).ctrlKey);\n}\n\nfunction getHighlightLabel(element: HTMLElement) {\n  const fingerprint = createElementFingerprint(element);\n  const name = getElementName(fingerprint);\n  const kind = getElementKind(fingerprint);\n  if (!name) return kind;\n  return `${kind} · ${name.length > LABEL_NAME_LIMIT ? `${name.slice(0, LABEL_NAME_LIMIT)}…` : name}`;\n}\n\nfunction readTokens(element: Element) {\n  const styles = getComputedStyle(element);\n  const token = (name: string, fallback: string) =>\n    styles.getPropertyValue(name).trim() || fallback;\n  return {\n    pick: token(\"--uo-color-pick\", \"#2563EB\"),\n    pickTint: token(\"--uo-color-pick-tint\", \"rgba(37,99,235,0.08)\"),\n    hud: token(\"--uo-color-surface-hud\", \"#111113\"),\n    onHud: token(\"--uo-color-text-on-hud\", \"#F4F4F5\"),\n    shadow: token(\"--uo-shadow-2\", \"0 6px 16px -4px rgba(16,16,20,0.10)\"),\n    mono: token(\"--uo-font-mono\", \"ui-monospace, SFMono-Regular, Menlo, monospace\"),\n  };\n}\n\nconst bypassKeyLabel =\n  typeof navigator !== \"undefined\" && /Mac|iPhone|iPad/.test(navigator.platform) ? \"⌘\" : \"Ctrl\";\n\nexport const ElementPicker: React.FC<{\n  portalTarget: Element;\n  isFormHidden: boolean;\n  onFormHiddenChange: (hidden: boolean) => void;\n  onPick: (element: HTMLElement) => void;\n  onCancel: () => void;\n}> = ({ portalTarget, isFormHidden, onFormHiddenChange, onPick, onCancel }) => {\n  const [highlight, setHighlight] = useState<Highlight | null>(null);\n  const [isBypassing, setIsBypassing] = useState(false);\n  const hoveredRef = useRef<HTMLElement | null>(null);\n  const tokens = useMemo(() => readTokens(portalTarget), [portalTarget]);\n\n  const updateHighlight = useCallback((element: HTMLElement | null) => {\n    hoveredRef.current = element;\n    setHighlight(\n      element ? { rect: element.getBoundingClientRect(), label: getHighlightLabel(element) } : null,\n    );\n  }, []);\n\n  useEffect(() => {\n    const isWidgetEvent = (event: Event, element: HTMLElement) =>\n      event.composedPath().includes(portalTarget) || isUserorbitOwnedNode(element);\n\n    const handlePointerMove = (event: PointerEvent) => {\n      setIsBypassing(isSelectionBypassEvent(event));\n      const element = getEventElement(event);\n      const next = element && !isWidgetEvent(event, element) ? element : null;\n      if (next !== hoveredRef.current) updateHighlight(next);\n    };\n\n    const handleSwallowedEvent = (event: Event) => {\n      const element = getEventElement(event);\n      if (!element || isWidgetEvent(event, element) || isSelectionBypassEvent(event)) return;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      if (event.type === \"click\") onPick(element);\n    };\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (BYPASS_KEYS.has(event.key)) {\n        setIsBypassing(true);\n        return;\n      }\n      if (event.key !== \"Escape\") return;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      onCancel();\n    };\n\n    const handleKeyUp = (event: KeyboardEvent) => {\n      if (BYPASS_KEYS.has(event.key)) setIsBypassing(false);\n    };\n\n    const handleBlur = () => setIsBypassing(false);\n\n    const handleViewportChange = () => {\n      if (hoveredRef.current) updateHighlight(hoveredRef.current);\n    };\n\n    const cursorStyle = document.createElement(\"style\");\n    cursorStyle.textContent = PICKING_CURSOR_CSS;\n    document.head.appendChild(cursorStyle);\n\n    window.addEventListener(\"pointermove\", handlePointerMove, true);\n    SWALLOWED_EVENTS.forEach((type) => window.addEventListener(type, handleSwallowedEvent, true));\n    window.addEventListener(\"keydown\", handleKeyDown, true);\n    window.addEventListener(\"keyup\", handleKeyUp, true);\n    window.addEventListener(\"blur\", handleBlur);\n    window.addEventListener(\"scroll\", handleViewportChange, true);\n    window.addEventListener(\"resize\", handleViewportChange);\n\n    return () => {\n      cursorStyle.remove();\n      window.removeEventListener(\"pointermove\", handlePointerMove, true);\n      SWALLOWED_EVENTS.forEach((type) =>\n        window.removeEventListener(type, handleSwallowedEvent, true),\n      );\n      window.removeEventListener(\"keydown\", handleKeyDown, true);\n      window.removeEventListener(\"keyup\", handleKeyUp, true);\n      window.removeEventListener(\"blur\", handleBlur);\n      window.removeEventListener(\"scroll\", handleViewportChange, true);\n      window.removeEventListener(\"resize\", handleViewportChange);\n    };\n  }, [onCancel, onPick, portalTarget, updateHighlight]);\n\n  const visibleHighlight = isBypassing ? null : highlight;\n\n  return (\n    <>\n      {visibleHighlight &&\n        createPortal(\n          <div\n            aria-hidden=\"true\"\n            style={{\n              position: \"fixed\",\n              zIndex: HIGHLIGHT_Z_INDEX,\n              pointerEvents: \"none\",\n              boxSizing: \"border-box\",\n              left: visibleHighlight.rect.left - 3,\n              top: visibleHighlight.rect.top - 3,\n              width: visibleHighlight.rect.width + 6,\n              height: visibleHighlight.rect.height + 6,\n              borderRadius: 4,\n              border: `1.5px dashed ${tokens.pick}`,\n              background: tokens.pickTint,\n            }}\n          >\n            <span\n              style={{\n                position: \"absolute\",\n                left: -1.5,\n                ...(visibleHighlight.rect.top > 28\n                  ? { bottom: \"calc(100% + 4px)\" }\n                  : { top: \"calc(100% + 4px)\" }),\n                maxWidth: 280,\n                overflow: \"hidden\",\n                textOverflow: \"ellipsis\",\n                whiteSpace: \"nowrap\",\n                borderRadius: 6,\n                padding: \"0 6px\",\n                background: tokens.hud,\n                color: tokens.onHud,\n                boxShadow: tokens.shadow,\n                font: `12px/20px ${tokens.mono}`,\n              }}\n            >\n              {visibleHighlight.label}\n            </span>\n          </div>,\n          document.body,\n        )}\n      {createPortal(\n        <CaptureHud label=\"Pinning mode\">\n          <CaptureHudDot color=\"pick\" />\n          <span className=\"ml-[4px]\">Pinning mode</span>\n          <CaptureHudKey>Esc</CaptureHudKey>\n          <CaptureHudDivider />\n          <span className=\"flex items-center gap-[6px] pr-[4px] text-[13px] opacity-70\">\n            Hold <CaptureHudKey>{bypassKeyLabel}</CaptureHudKey> to click\n          </span>\n          <CaptureHudFormToggle\n            isFormHidden={isFormHidden}\n            onFormHiddenChange={onFormHiddenChange}\n          />\n          <CaptureHudIconButton label=\"Exit pinning mode (Esc)\" onClick={onCancel}>\n            <IconX size={16} />\n          </CaptureHudIconButton>\n        </CaptureHud>,\n        portalTarget,\n      )}\n    </>\n  );\n};\n","// ABOUTME: Status pill controlling an in-progress feedback recording on the host page.\n// ABOUTME: Shows elapsed time and lets the user pause, stop and attach, or discard the recording.\n\nimport {\n  IconLoader2,\n  IconPlayerPause,\n  IconPlayerPlay,\n  IconPlayerStopFilled,\n  IconTrash,\n} from \"@tabler/icons-react\";\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n  CaptureHud,\n  CaptureHudButton,\n  CaptureHudDivider,\n  CaptureHudDot,\n  CaptureHudIconButton,\n  formatCaptureDuration,\n} from \"./capture-hud\";\n\nexport type RecordingStatus = \"idle\" | \"requesting\" | \"recording\" | \"paused\" | \"finishing\";\n\nexport const RecordingHud: React.FC<{\n  status: Exclude<RecordingStatus, \"idle\">;\n  elapsedSeconds: number;\n  portalTarget: Element;\n  onTogglePause: () => void;\n  onStop: () => void;\n  onDiscard: () => void;\n}> = ({ status, elapsedSeconds, portalTarget, onTogglePause, onStop, onDiscard }) => {\n  if (status === \"requesting\" || status === \"finishing\") {\n    return createPortal(\n      <CaptureHud label=\"Recording status\">\n        <IconLoader2 size={16} className=\"animate-spin\" aria-hidden=\"true\" />\n        <span className=\"ml-[4px] pr-[10px]\">\n          {status === \"requesting\" ? \"Choose what to share…\" : \"Preparing recording…\"}\n        </span>\n      </CaptureHud>,\n      portalTarget,\n    );\n  }\n\n  const isPaused = status === \"paused\";\n\n  return createPortal(\n    <CaptureHud label=\"Recording controls\">\n      <CaptureHudDot color=\"record\" pulsing={!isPaused} />\n      <span className=\"ml-[4px] min-w-[44px] font-mono text-[13px] tabular-nums\">\n        {formatCaptureDuration(elapsedSeconds)}\n      </span>\n      <CaptureHudDivider />\n      <CaptureHudButton onClick={onTogglePause}>\n        {isPaused ? <IconPlayerPlay size={14} /> : <IconPlayerPause size={14} />}\n        {isPaused ? \"Resume\" : \"Pause\"}\n      </CaptureHudButton>\n      <CaptureHudButton tone=\"record\" onClick={onStop}>\n        <IconPlayerStopFilled size={12} />\n        Stop\n      </CaptureHudButton>\n      <CaptureHudIconButton label=\"Discard recording\" onClick={onDiscard}>\n        <IconTrash size={16} />\n      </CaptureHudIconButton>\n    </CaptureHud>,\n    portalTarget,\n  );\n};\n","// ABOUTME: Status pill controlling an in-progress session replay recording on the host page.\n// ABOUTME: Shows elapsed time, hides or shows the form, and completes or cancels the recording.\n\nimport { IconCheck, IconLoader2, IconX } from \"@tabler/icons-react\";\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n  CaptureHud,\n  CaptureHudButton,\n  CaptureHudDivider,\n  CaptureHudDot,\n  CaptureHudFormToggle,\n  CaptureHudIconButton,\n  formatCaptureDuration,\n} from \"./capture-hud\";\n\nexport const ReplayHud: React.FC<{\n  elapsedSeconds: number;\n  isCompleting: boolean;\n  isFormHidden: boolean;\n  portalTarget: Element;\n  onFormHiddenChange: (hidden: boolean) => void;\n  onComplete: () => void;\n  onCancel: () => void;\n}> = ({\n  elapsedSeconds,\n  isCompleting,\n  isFormHidden,\n  portalTarget,\n  onFormHiddenChange,\n  onComplete,\n  onCancel,\n}) =>\n  createPortal(\n    <CaptureHud label=\"Session replay controls\">\n      <CaptureHudDot color=\"record\" pulsing />\n      <span className=\"ml-[4px]\">Recording session</span>\n      <span className=\"ml-[4px] min-w-[44px] font-mono text-[13px] tabular-nums\">\n        {formatCaptureDuration(elapsedSeconds)}\n      </span>\n      <CaptureHudDivider />\n      <CaptureHudFormToggle isFormHidden={isFormHidden} onFormHiddenChange={onFormHiddenChange} />\n      <CaptureHudButton tone=\"record\" onClick={onComplete} disabled={isCompleting}>\n        {isCompleting ? (\n          <IconLoader2 size={14} className=\"animate-spin\" aria-hidden=\"true\" />\n        ) : (\n          <IconCheck size={14} />\n        )}\n        Complete\n      </CaptureHudButton>\n      <CaptureHudIconButton\n        label=\"Cancel session replay\"\n        onClick={onCancel}\n        disabled={isCompleting}\n      >\n        <IconX size={16} />\n      </CaptureHudIconButton>\n    </CaptureHud>,\n    portalTarget,\n  );\n","// ABOUTME: Class names for the flat card surface shared by widget screens (home, feedback form).\n// ABOUTME: Cards sit on the muted panel canvas with a hairline border and no drop shadow.\n\nexport const widgetCardClassName =\n  \"rounded-uo-card border border-solid border-uo-border-subtle bg-uo-surface-1\";\n","// ABOUTME: Confirmation shown after feedback is submitted from the widget.\n// ABOUTME: Names the board, shows the post with its starting status and says how the user will hear back.\n\nimport { IconCaretUpFilled, IconCheck, IconEye } from \"@tabler/icons-react\";\nimport { motion } from \"framer-motion\";\nimport React from \"react\";\nimport { widgetCardClassName } from \"./widget-card\";\n\nexport const FeedbackSubmitted: React.FC<{\n  title: string;\n  votes: number;\n  boardName?: string;\n  email?: string;\n  primaryBackgroundColor: string;\n  primaryTextColor: string;\n  onViewPost: () => void;\n  onDone: () => void;\n}> = ({\n  title,\n  votes,\n  boardName,\n  email,\n  primaryBackgroundColor,\n  primaryTextColor,\n  onViewPost,\n  onDone,\n}) => (\n  <motion.div\n    initial={{ opacity: 0, y: 6 }}\n    animate={{ opacity: 1, y: 0 }}\n    transition={{ duration: 0.2, ease: \"easeOut\" }}\n    className=\"flex min-h-0 flex-1 flex-col px-[8px] pb-[8px] pt-[4px]\"\n  >\n    <div\n      role=\"status\"\n      className={`${widgetCardClassName} flex min-h-0 flex-1 flex-col items-center gap-[10px] overflow-auto px-[20px] pb-[20px] pt-[28px] text-center`}\n    >\n      <div className=\"flex h-[48px] w-[48px] shrink-0 items-center justify-center rounded-full bg-uo-success-bg text-uo-success-fg\">\n        <IconCheck size={24} aria-hidden=\"true\" />\n      </div>\n      <h2 className=\"m-0 mt-[6px] text-[18px] font-semibold leading-[24px] tracking-[-0.01em] text-uo-text-primary\">\n        Thanks, we got it\n      </h2>\n      <p className=\"m-0 max-w-[290px] text-pretty text-[13px] leading-[18px] text-uo-text-secondary\">\n        {email ? (\n          <>\n            We'll email <span className=\"font-medium text-uo-text-primary\">{email}</span> when the\n            status changes or someone replies.\n          </>\n        ) : (\n          \"We'll let you know here when the status changes or someone replies.\"\n        )}\n      </p>\n      <div className=\"mt-[12px] flex w-full items-center gap-[12px] rounded-[12px] bg-uo-surface-2 p-[12px] text-left\">\n        <div\n          className=\"flex h-[48px] w-[40px] shrink-0 flex-col items-center justify-center rounded-[10px]\"\n          style={{\n            backgroundColor: primaryBackgroundColor,\n            color: primaryTextColor,\n          }}\n        >\n          <IconCaretUpFilled size={16} aria-hidden=\"true\" />\n          <span className=\"text-[12px] font-semibold tabular-nums leading-none\">{votes}</span>\n        </div>\n        <div className=\"flex min-w-0 flex-1 flex-col gap-[5px]\">\n          <div className=\"truncate text-[13px] font-semibold leading-[18px] text-uo-text-primary\">\n            {title}\n          </div>\n          <div className=\"flex flex-wrap items-center gap-[6px]\">\n            <span className=\"flex h-[22px] items-center gap-[4px] rounded-full bg-uo-status-review-bg pl-[6px] pr-[8px] text-[11.5px] font-medium text-uo-status-review\">\n              <IconEye size={13} aria-hidden=\"true\" />\n              In Review\n            </span>\n            {boardName && <span className=\"text-[11.5px] text-uo-text-tertiary\">{boardName}</span>}\n          </div>\n        </div>\n      </div>\n      <div className=\"flex-1\" />\n      <div className=\"flex w-full gap-[8px]\">\n        <button\n          type=\"button\"\n          onClick={onViewPost}\n          className=\"h-[40px] flex-1 cursor-pointer rounded-full border-0 bg-transparent font-sans text-[13px] font-medium text-uo-text-primary shadow-[inset_0_0_0_1px_var(--uo-color-border-default)] transition-[background-color,transform] hover:bg-uo-fill-hover active:scale-[0.98]\"\n        >\n          View post\n        </button>\n        <button\n          type=\"button\"\n          onClick={onDone}\n          className=\"h-[40px] flex-1 cursor-pointer rounded-full border-0 font-sans text-[13px] font-medium transition-[opacity,transform] hover:opacity-90 active:scale-[0.98]\"\n          style={{\n            backgroundColor: primaryBackgroundColor,\n            color: primaryTextColor,\n          }}\n        >\n          Done\n        </button>\n      </div>\n    </div>\n  </motion.div>\n);\n","// ABOUTME: Class names for text fields shared by widget screens (home composer, feedback form).\n// ABOUTME: Focus deepens the hairline border instead of drawing a high-contrast ring.\n\nexport const widgetFieldClassName =\n  \"w-full rounded-uo-control border-0 bg-uo-surface-2 font-sans text-[13px] text-uo-text-primary shadow-[inset_0_0_0_1px_var(--uo-color-border-subtle)] outline-none transition-[background-color,box-shadow] duration-150 placeholder:text-uo-text-tertiary focus:bg-uo-surface-1 focus:shadow-[inset_0_0_0_1px_var(--uo-color-border-strong)]\";\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { Popover, PopoverContent, PopoverTrigger, Tooltip } from \"@userorbit/ui\";\nimport { VoiceRecorder } from \"@userorbit/ui\";\nimport {\n  IconAlertCircle,\n  IconCamera,\n  IconCaretUp,\n  IconCheck,\n  IconFile,\n  IconFileText,\n  IconHistory,\n  IconInfoCircle,\n  IconLoader2,\n  IconLock,\n  IconMusic,\n  IconPaperclip,\n  IconPin,\n  IconPlayerPlayFilled,\n  IconPlus,\n  IconSelector,\n  IconUpload,\n  IconVideo,\n  IconX,\n} from \"@tabler/icons-react\";\nimport { motion } from \"framer-motion\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDraft } from \"../../hooks/use-draft\";\nimport { OpenWidgetOptions } from \"../../index\";\nimport { getReadableTextColor } from \"../../lib/colors\";\nimport { Config } from \"../../lib/config\";\nimport { isUserorbitElement, loadHtml2Canvas } from \"../../lib/html2canvas\";\nimport { sanitizeScreenshotClone } from \"../../lib/screenshot-privacy\";\nimport { Logger } from \"../../lib/logger\";\nimport {\n  canStartReplayOnDemand,\n  captureReplayEvidence,\n  getReplayState,\n  type ReplayEvidence,\n  startReplayOnDemand,\n  stopReplayOnDemand,\n} from \"../../lib/replay\";\nimport {\n  createFeedback,\n  fetchFeedbackBoardList,\n  fetchFeedbackItems,\n  updateFeedback,\n  uploadAttachment,\n} from \"./api-utils\";\nimport { shouldShowPoweredBy } from \"./branding\";\nimport { CameraBubble } from \"./feedback-capture/camera-bubble\";\nimport {\n  type ComposerMode,\n  RecordingInputs,\n  StartRecordingButton,\n} from \"./feedback-capture/capture-mode-controls\";\nimport { ElementPicker } from \"./feedback-capture/element-picker\";\nimport {\n  captureElementImage,\n  describePinnedElement,\n  getElementKind,\n  getElementName,\n  type PinnedElement,\n} from \"./feedback-capture/pinned-element\";\nimport { RecordingHud, type RecordingStatus } from \"./feedback-capture/recording-hud\";\nimport { ReplayHud } from \"./feedback-capture/replay-hud\";\nimport { useRecordingInputs } from \"./feedback-capture/use-recording-inputs\";\nimport { FeedbackReplayPreview } from \"./feedback-replay-preview\";\nimport { FeedbackSubmitted } from \"./feedback-submitted\";\nimport { FeedbackQueryProvider, useQueryClient } from \"./query-provider\";\nimport { widgetCardClassName } from \"./widget-card\";\nimport { widgetFieldClassName } from \"./widget-field\";\n\nconst logger = Logger.getInstance();\n\ninterface FeedbackFormProps {\n  primaryColor: string;\n  primaryButtonBackgroundColor?: string;\n  primaryButtonTextColor?: string;\n  onBack: () => void;\n  onClose?: () => void;\n  onSubmit?: (feedback: any) => void;\n  isCompact?: boolean;\n  subscriberCode?: string;\n  product?: {\n    name?: string;\n    avatarUrl?: string;\n    plan?: string;\n    configuration?: {\n      showPoweredBy?: boolean;\n      feedback?: {\n        enableVoiceFeedback?: boolean;\n        enableReplayEvidence?: boolean;\n        enableScreenRecording?: boolean;\n      };\n    };\n  };\n  handleFeedbackItemClick?: (item: FeedbackItem) => void;\n  openOptions?: OpenWidgetOptions;\n  feedback?: any;\n  initialTitle?: string;\n  initialText?: string;\n  onPanelHiddenChange?: (hidden: boolean) => void;\n  onElementPickingChange?: (active: boolean) => void;\n}\n\ninterface Board {\n  id: string;\n  name: string;\n  text?: string;\n  public?: boolean;\n  configuration?: {\n    color?: string;\n  };\n}\n\ninterface FeedbackItem {\n  id: string;\n  title: string;\n  text?: string;\n  createdAt: string;\n  feedbackVotesCount: number;\n  feedbackCommentsCount: number;\n  status?: string;\n  boardId?: string;\n  subscriber?: {\n    name: string;\n    email?: string;\n    avatarUrl?: string;\n  };\n  isCompact?: boolean;\n  board?: {\n    id: string;\n    name: string;\n    configuration?: {\n      color?: string;\n    };\n  };\n}\n\ninterface AttachmentItem {\n  id: string;\n  file: File;\n  previewUrl: string;\n  status: \"uploading\" | \"ready\" | \"error\";\n  private?: boolean;\n  uploaded?: { url: string; name: string; type: string; private?: boolean };\n}\n\ninterface PinnedElementItem {\n  element: PinnedElement;\n  previewUrl: string | null;\n  status: \"capturing\" | \"uploading\" | \"ready\" | \"error\";\n}\n\nconst MAX_ATTACHMENTS = 10;\nconst MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024;\nconst SESSION_RECORDING_SOFT_LIMIT_BYTES = 8 * 1024 * 1024;\nconst PINNED_NAME_LIMIT = 24;\nconst ATTACHMENT_ACCEPT =\n  \"image/*,video/*,audio/*,application/pdf,application/json,text/plain,text/csv,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\nconst DOCUMENT_ATTACHMENT_TYPES = new Set([\n  \"application/pdf\",\n  \"application/json\",\n  \"text/plain\",\n  \"text/csv\",\n  \"application/msword\",\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n  \"application/vnd.ms-excel\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n]);\n\nconst formatFileSize = (bytes: number) =>\n  bytes < 1024 * 1024\n    ? `${Math.max(1, Math.round(bytes / 1024))} KB`\n    : `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n\nconst formatElapsed = (seconds: number) =>\n  `${String(Math.floor(seconds / 60)).padStart(2, \"0\")}:${String(seconds % 60).padStart(2, \"0\")}`;\n\nconst fieldLabelClassName = \"text-[11.5px] font-medium leading-[14px] text-uo-text-secondary\";\nconst iconButtonClassName =\n  \"flex h-[32px] w-[32px] shrink-0 cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-uo-text-secondary transition-[background-color,color,transform] duration-150 hover:bg-uo-fill-hover hover:text-uo-text-primary active:scale-[0.96] disabled:cursor-default disabled:opacity-40\";\nconst menuItemClassName =\n  \"flex h-[32px] w-full cursor-pointer items-center gap-[8px] rounded-[8px] border-0 bg-transparent px-[8px] text-left font-sans text-[13px] text-uo-text-primary transition-colors hover:bg-uo-fill-hover disabled:cursor-default disabled:opacity-60\";\nconst attachmentTileFaceClassName =\n  \"relative flex h-full w-full flex-col items-center justify-center gap-[6px] overflow-hidden rounded-[12px] bg-uo-surface-2 px-[10px] text-uo-text-tertiary\";\n\nfunction getAttachmentIcon(file: File) {\n  if (file.type.startsWith(\"audio/\")) return <IconMusic size={16} />;\n  if (file.type.startsWith(\"video/\")) return <IconVideo size={16} />;\n  if (file.type === \"application/pdf\") return <IconFileText size={16} />;\n  return <IconFile size={16} />;\n}\n\nfunction getFileExtension(file: File) {\n  const extension = file.name.includes(\".\") ? file.name.split(\".\").pop() : undefined;\n  return extension ? extension.slice(0, 4).toUpperCase() : \"FILE\";\n}\n\nconst AttachmentTile: React.FC<{\n  label: string;\n  removeLabel?: string;\n  onRemove?: () => void;\n  onOpen?: () => void;\n  children: React.ReactNode;\n}> = ({ label, removeLabel, onRemove, onOpen, children }) => {\n  const face = (\n    <>\n      {children}\n      <span\n        aria-hidden=\"true\"\n        className=\"pointer-events-none absolute inset-0 rounded-[12px] shadow-[inset_0_0_0_1px_var(--uo-color-border-subtle)]\"\n      />\n    </>\n  );\n  return (\n    <div className=\"relative h-[56px] w-[56px] shrink-0\" title={label}>\n      {onOpen ? (\n        <button\n          type=\"button\"\n          onClick={onOpen}\n          aria-label={`Preview ${label}`}\n          className={`${attachmentTileFaceClassName} cursor-pointer border-0 p-0`}\n        >\n          {face}\n        </button>\n      ) : (\n        <div className={attachmentTileFaceClassName}>{face}</div>\n      )}\n      {onRemove && (\n        <button\n          type=\"button\"\n          onClick={onRemove}\n          aria-label={removeLabel}\n          className=\"absolute -right-[6px] -top-[6px] z-[1] flex h-[20px] w-[20px] cursor-pointer items-center justify-center rounded-full border-0 bg-uo-surface-hud p-0 text-uo-text-on-hud shadow-[0_0_0_2px_var(--uo-color-surface-1)] transition-transform before:absolute before:-inset-[10px] before:content-[''] active:scale-[0.9]\"\n        >\n          <IconX size={12} stroke={2.25} />\n        </button>\n      )}\n    </div>\n  );\n};\n\nconst AttachmentTileChip: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n  <span className=\"absolute bottom-[4px] left-[4px] flex items-center gap-[2px] rounded-[4px] bg-black/55 px-[4px] font-mono text-[9.5px] font-medium leading-[14px] text-white\">\n    {children}\n  </span>\n);\n\nconst AttachmentTileProgress: React.FC<{ color: string }> = ({ color }) => (\n  <span className=\"block h-[3px] w-full overflow-hidden rounded-full bg-uo-surface-3\">\n    <span\n      className=\"block h-full w-[62%] animate-pulse rounded-full\"\n      style={{ backgroundColor: color }}\n    />\n  </span>\n);\n\nconst ToggleSwitch: React.FC<{\n  checked: boolean;\n  busy?: boolean;\n  label: string;\n  color: string;\n  onChange: (checked: boolean) => void;\n}> = ({ checked, busy, label, color, onChange }) => (\n  <button\n    type=\"button\"\n    role=\"switch\"\n    aria-checked={checked}\n    aria-label={label}\n    aria-busy={busy}\n    disabled={busy}\n    onClick={() => onChange(!checked)}\n    className=\"relative h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border-0 p-0 transition-colors duration-200 before:absolute before:-inset-[10px] before:content-[''] disabled:cursor-default\"\n    style={{ backgroundColor: checked ? color : \"var(--uo-color-surface-3)\" }}\n  >\n    <span\n      className=\"absolute left-[2px] top-[2px] flex h-[14px] w-[14px] items-center justify-center rounded-full bg-white text-neutral-500 shadow-[0_1px_2px_rgba(0,0,0,0.2)] transition-transform duration-200 ease-out\"\n      style={{ transform: checked ? \"translateX(14px)\" : \"none\" }}\n    >\n      {busy && <IconLoader2 size={10} className=\"animate-spin\" aria-hidden=\"true\" />}\n    </span>\n  </button>\n);\n\nconst BoardDot: React.FC<{ board?: Board | null }> = ({ board }) => (\n  <span\n    aria-hidden=\"true\"\n    className=\"h-[8px] w-[8px] shrink-0 rounded-full\"\n    style={{ backgroundColor: board?.configuration?.color || \"var(--uo-color-label-blue)\" }}\n  />\n);\n\nfunction getPinnedSummary(element: PinnedElement) {\n  const kind = getElementKind(element.fingerprint);\n  const name = getElementName(element.fingerprint);\n  return {\n    kind,\n    name: name.length > PINNED_NAME_LIMIT ? `${name.slice(0, PINNED_NAME_LIMIT)}…` : name,\n  };\n}\n\nfunction getPinnedStatus(pinned: PinnedElementItem) {\n  if (pinned.status === \"capturing\") return \"Capturing\";\n  if (pinned.status === \"uploading\") return \"Uploading\";\n  if (pinned.status === \"error\") return \"Snapshot failed, element is still pinned\";\n  return \"Pinned element\";\n}\n\nfunction getSubscriberEmail() {\n  const config = Config.getInstance().get();\n  const email = config?.personState?.data?.email || config?.email;\n  return typeof email === \"string\" && email.trim() ? email.trim() : undefined;\n}\n\nfunction isSupportedAttachment(file: File) {\n  return (\n    file.type.startsWith(\"image/\") ||\n    file.type.startsWith(\"video/\") ||\n    file.type.startsWith(\"audio/\") ||\n    DOCUMENT_ATTACHMENT_TYPES.has(file.type)\n  );\n}\n\nconst FeedbackFormInner: React.FC<FeedbackFormProps> = ({\n  primaryColor,\n  primaryButtonBackgroundColor,\n  primaryButtonTextColor,\n  onBack,\n  onClose,\n  onSubmit,\n  subscriberCode,\n  handleFeedbackItemClick,\n  product,\n  openOptions,\n  feedback,\n  initialTitle,\n  initialText,\n  onPanelHiddenChange,\n  onElementPickingChange,\n}) => {\n  const [title, setTitle, clearTitleDraft] = useDraft(\"feedback-title\");\n  const [text, setText, clearTextDraft] = useDraft(\"feedback-text\");\n  const [selectedBoard, setSelectedBoard] = useState<Board | null>(null);\n  const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(\"\");\n  const [submitError, setSubmitError] = useState<string | null>(null);\n  const [attachments, setAttachments] = useState<AttachmentItem[]>([]);\n  const [selectedAttachment, setSelectedAttachment] = useState<AttachmentItem | null>(null);\n  const [isAttachmentPopoverOpen, setIsAttachmentPopoverOpen] = useState(false);\n  const [isCapturingScreenshot, setIsCapturingScreenshot] = useState(false);\n  const [isReplayAvailable, setIsReplayAvailable] = useState(false);\n  const [canRecordReplayFromNow, setCanRecordReplayFromNow] = useState(false);\n  const [replayEvidence, setReplayEvidence] = useState<ReplayEvidence | null>(null);\n  const [isCapturingReplay, setIsCapturingReplay] = useState(false);\n  const [replayRecordingStartedAt, setReplayRecordingStartedAt] = useState<number | null>(null);\n  const [replayRecordingSeconds, setReplayRecordingSeconds] = useState(0);\n  const replayStartedByFormRef = useRef(false);\n  const replayStartRequestRef = useRef(0);\n  const [captureMode, setCaptureMode] = useState<ComposerMode>(\"compose\");\n  const [pinnedElement, setPinnedElement] = useState<PinnedElementItem | null>(null);\n  const [isFormHidden, setIsFormHidden] = useState(false);\n  const [submittedFeedback, setSubmittedFeedback] = useState<any>(null);\n  const [sessionRecordingStatus, setSessionRecordingStatus] = useState<RecordingStatus>(\"idle\");\n  const [recordingElapsedSeconds, setRecordingElapsedSeconds] = useState(0);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const attachmentsRef = useRef<AttachmentItem[]>([]);\n  const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n  const recordingStreamRef = useRef<MediaStream | null>(null);\n  const recordingChunksRef = useRef<Blob[]>([]);\n  const recordingBytesRef = useRef(0);\n  const recordingSegmentStartedAtRef = useRef<number | null>(null);\n  const recordingElapsedBeforeSegmentRef = useRef(0);\n  const recordingRequestRef = useRef(0);\n  const recordingFinalizationRef = useRef<\"cancel\" | \"finish\">(\"finish\");\n  const pinRequestRef = useRef(0);\n  const formRootRef = useRef<HTMLDivElement>(null);\n  const [capturePortalTarget, setCapturePortalTarget] = useState<Element | null>(null);\n  const queryClient = useQueryClient();\n  const isEditing = Boolean(feedback?.id);\n  const isUploadingAttachment = attachments.some((attachment) => attachment.status === \"uploading\");\n  const hasAttachmentError = attachments.some((attachment) => attachment.status === \"error\");\n  const isPinningElement =\n    pinnedElement?.status === \"capturing\" || pinnedElement?.status === \"uploading\";\n  const submitButtonBackgroundColor = primaryButtonBackgroundColor || primaryColor;\n  const submitButtonTextColor =\n    primaryButtonTextColor || getReadableTextColor(submitButtonBackgroundColor);\n\n  const enableVoiceFeedback =\n    product?.configuration?.feedback?.enableVoiceFeedback === true && !!subscriberCode;\n  const enableReplayEvidence = product?.configuration?.feedback?.enableReplayEvidence === true;\n  const enableScreenRecording = product?.configuration?.feedback?.enableScreenRecording === true;\n  const recordingInputs = useRecordingInputs(captureMode === \"record\");\n  const { cameraStream, openMicrophone, releaseCamera } = recordingInputs;\n  logger.log(\"Voice feedback config:\", {\n    enableVoiceFeedback,\n    hasSubscriberCode: !!subscriberCode,\n    productConfig: product?.configuration,\n    feedbackConfig: product?.configuration?.feedback,\n  });\n\n  const { data: boardsData } = useQuery({\n    queryKey: [\"feedback-boards\", subscriberCode],\n    queryFn: fetchFeedbackBoardList,\n  });\n\n  const boards = useMemo(() => boardsData?.data || [], [boardsData]);\n  logger.log(\"boards\", boards);\n\n  useEffect(() => {\n    if (isEditing || !enableReplayEvidence) {\n      setIsReplayAvailable(false);\n      setCanRecordReplayFromNow(false);\n      return;\n    }\n    const updateReplayAvailability = () => {\n      const isRecording = getReplayState().isRecording;\n      setIsReplayAvailable(isRecording);\n      setCanRecordReplayFromNow(isRecording || canStartReplayOnDemand());\n    };\n    updateReplayAvailability();\n    const interval = setInterval(updateReplayAvailability, 1_000);\n    return () => clearInterval(interval);\n  }, [enableReplayEvidence, isEditing]);\n\n  useEffect(() => {\n    if (boards.length > 0 && !selectedBoard) {\n      setSelectedBoard(boards[0]);\n    } else if (boards.length === 1 && selectedBoard?.id !== boards[0].id) {\n      setSelectedBoard(boards[0]);\n    }\n  }, [boards, selectedBoard]);\n\n  // Debounced search term for similar feedbacks\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      setDebouncedSearchTerm(title);\n    }, 300);\n    return () => clearTimeout(timeoutId);\n  }, [title]);\n\n  // Fetch similar feedbacks using useQuery\n  const { data: similarFeedbacks } = useQuery({\n    queryKey: [\"similar-feedbacks\", debouncedSearchTerm, subscriberCode],\n    queryFn: () => fetchFeedbackItems(undefined, 5, 0, debouncedSearchTerm, \"newest\"),\n    enabled: debouncedSearchTerm.length >= 3 && !openOptions?.modal && !isEditing,\n    staleTime: 1000 * 60, // 1 minute\n  });\n\n  useEffect(() => {\n    if (!feedback) return;\n\n    setTitle(feedback.title || \"\");\n    setText(feedback.text || \"\");\n\n    const feedbackBoardId = feedback.boardId || feedback.board?.id;\n    if (feedbackBoardId && boards.length > 0) {\n      setSelectedBoard(boards.find((board: Board) => board.id === feedbackBoardId) || null);\n    }\n  }, [boards, feedback, setText, setTitle]);\n\n  useEffect(() => {\n    if (feedback) return;\n    if (initialTitle) setTitle(initialTitle);\n    if (initialText) setText(initialText);\n  }, [feedback, initialText, initialTitle, setText, setTitle]);\n\n  // Handle title change\n  const handleTitleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setTitle(e.target.value);\n  };\n\n  const stopReplayStartedByForm = useCallback(() => {\n    replayStartRequestRef.current += 1;\n    if (!replayStartedByFormRef.current) return;\n    replayStartedByFormRef.current = false;\n    void stopReplayOnDemand();\n  }, []);\n\n  const feedbackMutation = useMutation({\n    onMutate: () => {\n      setSubmitError(null);\n    },\n    mutationFn: async ({ title, text }: { title: string; text: string }) => {\n      const uploadedAttachments = attachments\n        .map((attachment) => attachment.uploaded)\n        .filter(\n          (\n            attachment,\n          ): attachment is {\n            url: string;\n            name: string;\n            type: string;\n            private?: boolean;\n          } => Boolean(attachment),\n        );\n\n      if (isEditing && feedback?.id) {\n        return updateFeedback({\n          id: feedback.id,\n          title,\n          text,\n          boardId: selectedBoard?.id || feedback.boardId || feedback.board?.id,\n          token: subscriberCode,\n        });\n      }\n\n      const recordedReplayEvidence = replayRecordingStartedAt\n        ? await captureReplayEvidence()\n        : null;\n\n      return createFeedback({\n        title,\n        text,\n        boardId: selectedBoard?.id || (boards.length === 1 ? boards[0].id : undefined),\n        token: subscriberCode,\n        attachments: uploadedAttachments.length > 0 ? uploadedAttachments : undefined,\n        replayEvidence: recordedReplayEvidence\n          ? { ...recordedReplayEvidence, startTimestampMs: replayRecordingStartedAt! }\n          : replayEvidence,\n        pinnedElement: pinnedElement?.element,\n      });\n    },\n    onSuccess: (response, variables) => {\n      releaseCamera();\n      setCaptureMode(\"compose\");\n      setSubmitError(null);\n      void queryClient.invalidateQueries({ queryKey: [\"feedback-items\"] });\n      clearTitleDraft();\n      clearTextDraft();\n      attachments.forEach((attachment) => URL.revokeObjectURL(attachment.previewUrl));\n      setAttachments([]);\n      setReplayEvidence(null);\n      setReplayRecordingStartedAt(null);\n      stopReplayStartedByForm();\n      setPinnedElement(null);\n\n      const createdFeedback =\n        response?.data?.id && response.data.title\n          ? response.data\n          : {\n              title: variables.title,\n              text: variables.text,\n              boardId: selectedBoard?.id || (boards.length === 1 ? boards[0].id : undefined),\n              createdAt: new Date().toISOString(),\n              updatedAt: new Date().toISOString(),\n              feedbackVotesCount: 0,\n              feedbackCommentsCount: 0,\n              status: \"in_review\",\n            };\n\n      if (!isEditing) {\n        setSubmittedFeedback(createdFeedback);\n      } else if (onSubmit) {\n        onSubmit(createdFeedback);\n      } else {\n        onBack();\n      }\n    },\n    onError: (error) => {\n      logger.error(\"Failed to submit feedback:\", error);\n      setSubmitError(\n        error instanceof Error ? error.message : \"Failed to submit feedback. Please try again.\",\n      );\n    },\n  });\n\n  const isValid =\n    title.trim().length >= 4 &&\n    !isUploadingAttachment &&\n    !hasAttachmentError &&\n    !isCapturingScreenshot &&\n    !isCapturingReplay &&\n    !isPinningElement &&\n    sessionRecordingStatus === \"idle\";\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n        event.preventDefault();\n        if (isValid && !feedbackMutation.isPending && !submittedFeedback) {\n          feedbackMutation.mutate({\n            title: title.trim(),\n            text: (text || \"\").trim(),\n          });\n        }\n      }\n    };\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleKeyDown);\n  }, [isValid, feedbackMutation, title, text, submittedFeedback]);\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!isValid) return;\n    feedbackMutation.mutate({\n      title: title.trim(),\n      text: (text || \"\").trim(),\n    });\n  };\n\n  const handleVoiceRecordingComplete = useCallback((transcriptionText: string) => {\n    setText((currentText) => {\n      if (currentText.trim() === \"\") {\n        return transcriptionText;\n      }\n      return `${currentText} ${transcriptionText}`;\n    });\n  }, []);\n\n  const handleTitleVoiceRecordingComplete = useCallback((transcriptionText: string) => {\n    setTitle((currentTitle) => {\n      if (currentTitle.trim() === \"\") {\n        return transcriptionText;\n      }\n      return `${currentTitle} ${transcriptionText}`;\n    });\n  }, []);\n\n  const addAttachment = useCallback(\n    (file: File, options: { private?: boolean } = {}) => {\n      if (!isSupportedAttachment(file)) {\n        setSubmitError(`${file.name} is not a supported file type.`);\n        return;\n      }\n      if (file.size > MAX_ATTACHMENT_BYTES) {\n        setSubmitError(`${file.name} is larger than 10 MB.`);\n        return;\n      }\n      if (attachmentsRef.current.length >= MAX_ATTACHMENTS) {\n        setSubmitError(`You can attach up to ${MAX_ATTACHMENTS} files.`);\n        return;\n      }\n\n      const attachment: AttachmentItem = {\n        id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,\n        file,\n        previewUrl: URL.createObjectURL(file),\n        status: \"uploading\",\n        private: options.private,\n      };\n\n      setAttachments((prev) => [...prev, attachment]);\n\n      uploadAttachment(file, subscriberCode)\n        .then((uploaded) => {\n          setAttachments((prev) =>\n            prev.map((item) =>\n              item.id === attachment.id\n                ? {\n                    ...item,\n                    status: \"ready\",\n                    uploaded: {\n                      ...uploaded,\n                      ...(options.private && { private: true }),\n                    },\n                  }\n                : item,\n            ),\n          );\n        })\n        .catch((error) => {\n          logger.error(\"Failed to upload attachment:\", error);\n          setAttachments((prev) =>\n            prev.map((item) => (item.id === attachment.id ? { ...item, status: \"error\" } : item)),\n          );\n        });\n    },\n    [subscriberCode],\n  );\n\n  const stopRecordingTracks = useCallback(() => {\n    recordingStreamRef.current?.getTracks().forEach((track) => track.stop());\n    recordingStreamRef.current = null;\n  }, []);\n\n  const getRecordingElapsedSeconds = useCallback(() => {\n    const segmentStartedAt = recordingSegmentStartedAtRef.current;\n    const segmentMs = segmentStartedAt === null ? 0 : Date.now() - segmentStartedAt;\n    return Math.max(0, Math.floor((recordingElapsedBeforeSegmentRef.current + segmentMs) / 1_000));\n  }, []);\n\n  const finishSessionRecording = useCallback(\n    (mode: \"cancel\" | \"finish\") => {\n      recordingFinalizationRef.current = mode;\n      recordingRequestRef.current += 1;\n      const recorder = mediaRecorderRef.current;\n\n      if (recorder && recorder.state !== \"inactive\") {\n        setSessionRecordingStatus(mode === \"finish\" ? \"finishing\" : \"idle\");\n        recorder.stop();\n      } else {\n        stopRecordingTracks();\n        setSessionRecordingStatus(\"idle\");\n      }\n    },\n    [stopRecordingTracks],\n  );\n\n  const toggleSessionRecordingPause = useCallback(() => {\n    const recorder = mediaRecorderRef.current;\n    if (!recorder) return;\n\n    if (recorder.state === \"recording\") {\n      recorder.pause();\n      recordingElapsedBeforeSegmentRef.current +=\n        Date.now() - (recordingSegmentStartedAtRef.current ?? Date.now());\n      recordingSegmentStartedAtRef.current = null;\n      setRecordingElapsedSeconds(getRecordingElapsedSeconds());\n      setSessionRecordingStatus(\"paused\");\n    } else if (recorder.state === \"paused\") {\n      recorder.resume();\n      recordingSegmentStartedAtRef.current = Date.now();\n      setSessionRecordingStatus(\"recording\");\n    }\n  }, [getRecordingElapsedSeconds]);\n\n  const startSessionRecording = useCallback(async () => {\n    setIsAttachmentPopoverOpen(false);\n    setSubmitError(null);\n\n    if (!navigator.mediaDevices?.getDisplayMedia || typeof MediaRecorder === \"undefined\") {\n      setSubmitError(\"Screen recording is not supported in this browser.\");\n      return;\n    }\n\n    const requestId = recordingRequestRef.current + 1;\n    recordingRequestRef.current = requestId;\n    setSessionRecordingStatus(\"requesting\");\n\n    let microphoneStream: MediaStream | null = null;\n    try {\n      microphoneStream = await openMicrophone();\n      const displayStream = await navigator.mediaDevices.getDisplayMedia({\n        video: { frameRate: 30 },\n        audio: false,\n        preferCurrentTab: true,\n        selfBrowserSurface: \"include\",\n        surfaceSwitching: \"exclude\",\n      } as DisplayMediaStreamOptions);\n      if (recordingRequestRef.current !== requestId) {\n        displayStream.getTracks().forEach((track) => track.stop());\n        microphoneStream?.getTracks().forEach((track) => track.stop());\n        return;\n      }\n\n      const stream = new MediaStream([\n        ...displayStream.getVideoTracks(),\n        ...(microphoneStream?.getAudioTracks() ?? []),\n      ]);\n      const hasAudio = stream.getAudioTracks().length > 0;\n      const preferredMimeType = (\n        hasAudio\n          ? [\"video/webm;codecs=vp9,opus\", \"video/webm;codecs=vp8,opus\", \"video/webm\", \"video/mp4\"]\n          : [\"video/webm;codecs=vp9\", \"video/webm\", \"video/mp4\"]\n      ).find((type) => MediaRecorder.isTypeSupported(type));\n      const bitrates = {\n        videoBitsPerSecond: 1_000_000,\n        ...(hasAudio && { audioBitsPerSecond: 64_000 }),\n      };\n      const recorder = new MediaRecorder(\n        stream,\n        preferredMimeType ? { mimeType: preferredMimeType, ...bitrates } : bitrates,\n      );\n\n      recordingChunksRef.current = [];\n      recordingBytesRef.current = 0;\n      recordingStreamRef.current = stream;\n      mediaRecorderRef.current = recorder;\n      recordingFinalizationRef.current = \"finish\";\n      recorder.ondataavailable = (event) => {\n        if (event.data.size === 0) return;\n\n        const nextSize = recordingBytesRef.current + event.data.size;\n        if (nextSize <= MAX_ATTACHMENT_BYTES) {\n          recordingChunksRef.current.push(event.data);\n          recordingBytesRef.current = nextSize;\n        }\n\n        if (nextSize >= SESSION_RECORDING_SOFT_LIMIT_BYTES && recorder.state !== \"inactive\") {\n          setSessionRecordingStatus(\"finishing\");\n          recorder.stop();\n        }\n      };\n      recorder.onstop = () => {\n        const shouldAttach = recordingFinalizationRef.current === \"finish\";\n        const chunks = recordingChunksRef.current;\n        const mimeType = recorder.mimeType || \"video/webm\";\n        const extension = mimeType.includes(\"mp4\") ? \"mp4\" : \"webm\";\n\n        stopRecordingTracks();\n        releaseCamera();\n        mediaRecorderRef.current = null;\n        recordingChunksRef.current = [];\n        recordingBytesRef.current = 0;\n        recordingSegmentStartedAtRef.current = null;\n        recordingElapsedBeforeSegmentRef.current = 0;\n        setRecordingElapsedSeconds(0);\n        setSessionRecordingStatus(\"idle\");\n        setCaptureMode(\"compose\");\n\n        if (shouldAttach && chunks.length > 0) {\n          const file = new File(chunks, `session-recording-${Date.now()}.${extension}`, {\n            type: mimeType,\n          });\n          addAttachment(file, { private: true });\n        }\n      };\n\n      const videoTrack = stream.getVideoTracks()[0];\n      if (videoTrack) {\n        videoTrack.onended = () => {\n          if (recorder.state !== \"inactive\") {\n            recordingFinalizationRef.current = \"finish\";\n            setSessionRecordingStatus(\"finishing\");\n            recorder.stop();\n          }\n        };\n      }\n\n      recordingElapsedBeforeSegmentRef.current = 0;\n      recordingSegmentStartedAtRef.current = Date.now();\n      setRecordingElapsedSeconds(0);\n      setSessionRecordingStatus(\"recording\");\n      recorder.start(1_000);\n    } catch (error) {\n      microphoneStream?.getTracks().forEach((track) => track.stop());\n      setSessionRecordingStatus(\"idle\");\n      if (error instanceof DOMException && error.name === \"NotAllowedError\") return;\n      logger.error(\"Failed to start session recording:\", error);\n      setSubmitError(\"The session recording could not be started. Please try again.\");\n    }\n  }, [addAttachment, openMicrophone, releaseCamera, stopRecordingTracks]);\n\n  useEffect(() => {\n    setCapturePortalTarget(\n      formRootRef.current?.closest(\".floating-widget-root, #uojs\") ||\n        formRootRef.current?.ownerDocument.body ||\n        null,\n    );\n  }, []);\n\n  useEffect(() => {\n    if (sessionRecordingStatus !== \"recording\") return;\n    const updateElapsedTime = () => setRecordingElapsedSeconds(getRecordingElapsedSeconds());\n    updateElapsedTime();\n    const interval = setInterval(updateElapsedTime, 1_000);\n    return () => clearInterval(interval);\n  }, [getRecordingElapsedSeconds, sessionRecordingStatus]);\n\n  useEffect(\n    () => () => {\n      recordingFinalizationRef.current = \"cancel\";\n      const recorder = mediaRecorderRef.current;\n      if (recorder && recorder.state !== \"inactive\") recorder.stop();\n      stopRecordingTracks();\n    },\n    [stopRecordingTracks],\n  );\n\n  const captureScreenshot = useCallback(async () => {\n    try {\n      setIsAttachmentPopoverOpen(false);\n      setIsCapturingScreenshot(true);\n\n      const html2canvas = await loadHtml2Canvas();\n\n      const documentElement = document.documentElement;\n      const body = document.body;\n      await document.fonts?.ready;\n\n      const captureWidth = Math.max(\n        window.innerWidth,\n        documentElement.clientWidth,\n        body?.clientWidth || 0,\n      );\n      const captureHeight = Math.max(\n        window.innerHeight,\n        documentElement.clientHeight,\n        documentElement.scrollHeight,\n        documentElement.offsetHeight,\n        body?.clientHeight || 0,\n        body?.scrollHeight || 0,\n        body?.offsetHeight || 0,\n      );\n\n      const canvas = await html2canvas(documentElement, {\n        useCORS: true,\n        logging: false,\n        x: 0,\n        y: 0,\n        width: captureWidth,\n        height: captureHeight,\n        scrollX: 0,\n        scrollY: 0,\n        windowWidth: captureWidth,\n        windowHeight: window.innerHeight,\n        scale: 1,\n        ignoreElements: isUserorbitElement,\n        onclone: (clonedDocument: Document, clonedElement: HTMLElement) => {\n          const clonedDocumentElement = clonedDocument.documentElement;\n          const clonedBody = clonedDocument.body;\n\n          clonedDocumentElement.style.width = `${captureWidth}px`;\n          clonedDocumentElement.style.minWidth = `${captureWidth}px`;\n          clonedDocumentElement.style.height = `${captureHeight}px`;\n          clonedDocumentElement.style.minHeight = `${captureHeight}px`;\n\n          if (clonedBody) {\n            clonedBody.style.width = `${captureWidth}px`;\n            clonedBody.style.minWidth = `${captureWidth}px`;\n            clonedBody.style.height = `${captureHeight}px`;\n            clonedBody.style.minHeight = `${captureHeight}px`;\n          }\n\n          clonedDocument.querySelectorAll<HTMLElement>(\"*\").forEach((element) => {\n            const position = clonedDocument.defaultView?.getComputedStyle(element).position;\n            if (position === \"sticky\") {\n              element.style.position = \"static\";\n              element.style.left = \"auto\";\n              element.style.right = \"auto\";\n              element.style.top = \"auto\";\n              element.style.bottom = \"auto\";\n            }\n          });\n          sanitizeScreenshotClone(clonedDocument, clonedElement);\n        },\n      });\n\n      canvas.toBlob((blob: Blob | null) => {\n        if (blob) {\n          const file = new File([blob], `screenshot-${Date.now()}.png`, {\n            type: \"image/png\",\n          });\n          addAttachment(file);\n        }\n        setIsCapturingScreenshot(false);\n      }, \"image/png\");\n    } catch (error) {\n      logger.error(\"Failed to capture screenshot:\", error);\n      setIsCapturingScreenshot(false);\n      alert(\"Failed to capture screenshot. Please try uploading an image instead.\");\n    }\n  }, [addAttachment]);\n\n  const handleFileUpload = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const files = Array.from(event.target.files || []);\n      if (files.length > 0) {\n        files.slice(0, MAX_ATTACHMENTS - attachmentsRef.current.length).forEach((file) => {\n          addAttachment(file);\n        });\n        setIsAttachmentPopoverOpen(false);\n      }\n      if (fileInputRef.current) {\n        fileInputRef.current.value = \"\";\n      }\n    },\n    [addAttachment],\n  );\n\n  const handleAttachmentClick = useCallback(() => {\n    fileInputRef.current?.click();\n  }, []);\n\n  const attachRecentReplay = useCallback(async () => {\n    setSubmitError(null);\n    setCaptureMode(\"compose\");\n    setReplayRecordingStartedAt(null);\n    setIsCapturingReplay(true);\n    const evidence = await captureReplayEvidence();\n    setIsCapturingReplay(false);\n\n    if (evidence) {\n      setReplayEvidence(evidence);\n      return;\n    }\n\n    setSubmitError(\"Recent activity could not be attached. Please try again.\");\n  }, []);\n\n  const recordReplayFromNow = useCallback(async () => {\n    const requestId = ++replayStartRequestRef.current;\n    setSubmitError(null);\n    setIsCapturingReplay(true);\n    const wasRecording = getReplayState().isRecording;\n    const isRecording = await startReplayOnDemand();\n    if (replayStartRequestRef.current !== requestId) {\n      if (!wasRecording && isRecording) await stopReplayOnDemand();\n      return;\n    }\n    setIsCapturingReplay(false);\n    setCaptureMode(\"compose\");\n\n    if (!isRecording) {\n      setSubmitError(\"Session replay isn't available right now.\");\n      return;\n    }\n\n    if (!wasRecording) replayStartedByFormRef.current = true;\n    setReplayEvidence(null);\n    setReplayRecordingStartedAt(Date.now());\n  }, []);\n\n  const completeReplayRecording = useCallback(async () => {\n    if (replayRecordingStartedAt === null) return;\n    setSubmitError(null);\n    setIsCapturingReplay(true);\n    const evidence = await captureReplayEvidence();\n    setIsCapturingReplay(false);\n\n    if (!evidence) {\n      setIsFormHidden(false);\n      setSubmitError(\"Session replay could not be attached. Please try again.\");\n      return;\n    }\n\n    setReplayEvidence({ ...evidence, startTimestampMs: replayRecordingStartedAt });\n    setReplayRecordingStartedAt(null);\n    stopReplayStartedByForm();\n  }, [replayRecordingStartedAt, stopReplayStartedByForm]);\n\n  const removeReplay = useCallback(() => {\n    setReplayEvidence(null);\n    setReplayRecordingStartedAt(null);\n    stopReplayStartedByForm();\n  }, [stopReplayStartedByForm]);\n\n  useEffect(() => {\n    if (replayRecordingStartedAt === null) return;\n    const updateSeconds = () =>\n      setReplayRecordingSeconds(Math.floor((Date.now() - replayRecordingStartedAt) / 1_000));\n    updateSeconds();\n    const interval = setInterval(updateSeconds, 1_000);\n    return () => clearInterval(interval);\n  }, [replayRecordingStartedAt]);\n\n  useEffect(() => stopReplayStartedByForm, [stopReplayStartedByForm]);\n\n  const removeAttachment = useCallback((attachmentId: string) => {\n    setAttachments((prev) => {\n      const attachment = prev.find((item) => item.id === attachmentId);\n      if (attachment) URL.revokeObjectURL(attachment.previewUrl);\n      return prev.filter((item) => item.id !== attachmentId);\n    });\n    setSelectedAttachment((current) => (current?.id === attachmentId ? null : current));\n  }, []);\n\n  const changeCaptureMode = useCallback(\n    (mode: ComposerMode) => {\n      setSubmitError(null);\n      setCaptureMode((current) => {\n        const next = current === mode ? \"compose\" : mode;\n        if (current === \"record\" && next !== \"record\") releaseCamera();\n        return next;\n      });\n    },\n    [releaseCamera],\n  );\n\n  const cancelPinning = useCallback(() => setCaptureMode(\"compose\"), []);\n\n  useEffect(() => {\n    if (captureMode !== \"record\") return;\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key !== \"Escape\" || sessionRecordingStatus !== \"idle\") return;\n      event.preventDefault();\n      event.stopPropagation();\n      changeCaptureMode(captureMode);\n    };\n    window.addEventListener(\"keydown\", handleKeyDown, true);\n    return () => window.removeEventListener(\"keydown\", handleKeyDown, true);\n  }, [captureMode, changeCaptureMode, sessionRecordingStatus]);\n\n  const isPickingElement = captureMode === \"pin\";\n\n  useEffect(() => {\n    if (!isPickingElement) return;\n    onElementPickingChange?.(true);\n    return () => onElementPickingChange?.(false);\n  }, [isPickingElement, onElementPickingChange]);\n\n  const isReplayRecording = replayRecordingStartedAt !== null;\n\n  useEffect(() => {\n    if (!isPickingElement && !isReplayRecording) setIsFormHidden(false);\n  }, [isPickingElement, isReplayRecording]);\n\n  const pinElement = useCallback(\n    async (target: HTMLElement) => {\n      setCaptureMode(\"compose\");\n      const requestId = pinRequestRef.current + 1;\n      pinRequestRef.current = requestId;\n      const isCurrentRequest = () => pinRequestRef.current === requestId;\n      setPinnedElement({\n        element: describePinnedElement(target),\n        previewUrl: null,\n        status: \"capturing\",\n      });\n\n      try {\n        const image = await captureElementImage(target);\n        if (!isCurrentRequest()) return;\n        if (!image) throw new Error(\"The pinned element could not be captured\");\n\n        const previewUrl = URL.createObjectURL(image);\n        setPinnedElement((current) => current && { ...current, previewUrl, status: \"uploading\" });\n\n        const screenshot = await uploadAttachment(image, subscriberCode);\n        if (!isCurrentRequest()) return;\n        setPinnedElement(\n          (current) =>\n            current && {\n              ...current,\n              status: \"ready\",\n              element: { ...current.element, screenshot },\n            },\n        );\n      } catch (error) {\n        if (!isCurrentRequest()) return;\n        logger.error(\"Failed to capture pinned element:\", error);\n        setPinnedElement((current) => current && { ...current, status: \"error\" });\n      }\n    },\n    [subscriberCode],\n  );\n\n  const removePinnedElement = useCallback(() => {\n    pinRequestRef.current += 1;\n    setPinnedElement(null);\n  }, []);\n\n  useEffect(() => {\n    const previewUrl = pinnedElement?.previewUrl;\n    return () => {\n      if (previewUrl) URL.revokeObjectURL(previewUrl);\n    };\n  }, [pinnedElement?.previewUrl]);\n\n  useEffect(() => {\n    attachmentsRef.current = attachments;\n  }, [attachments]);\n\n  useEffect(() => {\n    return () => {\n      attachmentsRef.current.forEach((attachment) => URL.revokeObjectURL(attachment.previewUrl));\n    };\n  }, []);\n\n  const showPoweredBy = shouldShowPoweredBy(product.plan, product.configuration?.showPoweredBy);\n  const canCapture = !isEditing;\n  const hasAttachmentTiles =\n    attachments.length > 0 || isCapturingScreenshot || pinnedElement !== null;\n  const canAttachRecentReplay = isReplayAvailable || replayEvidence !== null || isCapturingReplay;\n  const showReplayRow =\n    canCapture &&\n    enableReplayEvidence &&\n    (canAttachRecentReplay || canRecordReplayFromNow || isReplayRecording);\n  const similarItems: FeedbackItem[] = (similarFeedbacks?.data ?? []).slice(0, 3);\n\n  const renderFooter = () => {\n    if (!showPoweredBy) return null;\n\n    return (\n      <div className=\"absolute bottom-0 left-0 right-0 flex h-[32px] items-center justify-center bg-uo-surface-0\">\n        <a\n          href=\"https://userorbit.com?utm_source=userorbit-widget\"\n          target=\"_blank\"\n          className=\"m-0 cursor-pointer font-sans text-[11px] text-uo-text-tertiary no-underline transition-colors hover:text-uo-text-primary\"\n          rel=\"noreferrer\"\n        >\n          Powered by <span className=\"font-semibold text-uo-text-secondary\">Userorbit</span>\n        </a>\n      </div>\n    );\n  };\n\n  const renderPinnedElementTile = () => {\n    if (!pinnedElement) return null;\n    const { kind, name } = getPinnedSummary(pinnedElement.element);\n    const isBusy = pinnedElement.status === \"capturing\" || pinnedElement.status === \"uploading\";\n\n    return (\n      <AttachmentTile\n        label={`${kind}${name ? ` “${name}”` : \"\"} · ${getPinnedStatus(pinnedElement)}`}\n        removeLabel=\"Remove pinned element\"\n        onRemove={removePinnedElement}\n      >\n        {isBusy ? (\n          <>\n            <IconPin size={16} />\n            <AttachmentTileProgress color={submitButtonBackgroundColor} />\n          </>\n        ) : (\n          <>\n            {pinnedElement.previewUrl ? (\n              <img\n                src={pinnedElement.previewUrl}\n                alt=\"\"\n                className=\"absolute inset-0 h-full w-full object-cover\"\n              />\n            ) : (\n              <IconPin size={16} />\n            )}\n            <AttachmentTileChip>\n              <IconPin size={10} aria-hidden=\"true\" />\n              Pin\n            </AttachmentTileChip>\n          </>\n        )}\n      </AttachmentTile>\n    );\n  };\n\n  const renderAttachmentTile = (attachment: AttachmentItem) => {\n    const { file } = attachment;\n    const isImage = file.type.startsWith(\"image/\");\n    const isVideo = file.type.startsWith(\"video/\");\n    const statusLabel =\n      attachment.status === \"uploading\"\n        ? \"Uploading\"\n        : attachment.status === \"error\"\n          ? \"Upload failed\"\n          : formatFileSize(file.size);\n\n    return (\n      <AttachmentTile\n        key={attachment.id}\n        label={`${file.name} · ${statusLabel}${attachment.private ? \" · Private\" : \"\"}`}\n        removeLabel={`Remove ${file.name}`}\n        onRemove={() => removeAttachment(attachment.id)}\n        onOpen={\n          attachment.status === \"ready\" && (isImage || isVideo)\n            ? () => setSelectedAttachment(attachment)\n            : undefined\n        }\n      >\n        {attachment.status === \"uploading\" ? (\n          <>\n            {getAttachmentIcon(file)}\n            <AttachmentTileProgress color={submitButtonBackgroundColor} />\n          </>\n        ) : attachment.status === \"error\" ? (\n          <>\n            <IconAlertCircle size={16} className=\"text-uo-danger-fg\" />\n            <span className=\"text-[10px] font-medium leading-[12px] text-uo-danger-fg\">Failed</span>\n          </>\n        ) : isImage || isVideo ? (\n          <>\n            {isImage ? (\n              <img\n                src={attachment.previewUrl}\n                alt=\"\"\n                className=\"absolute inset-0 h-full w-full object-cover\"\n              />\n            ) : (\n              <>\n                <video\n                  src={attachment.previewUrl}\n                  muted\n                  playsInline\n                  preload=\"metadata\"\n                  className=\"absolute inset-0 h-full w-full bg-black object-cover\"\n                />\n                <span className=\"relative flex h-[24px] w-[24px] items-center justify-center rounded-full bg-black/55 text-white\">\n                  <IconPlayerPlayFilled size={12} aria-hidden=\"true\" />\n                </span>\n              </>\n            )}\n            <AttachmentTileChip>\n              {attachment.private && <IconLock size={10} aria-hidden=\"true\" />}\n              {formatFileSize(file.size)}\n            </AttachmentTileChip>\n          </>\n        ) : (\n          <>\n            {getAttachmentIcon(file)}\n            <span className=\"font-mono text-[9.5px] font-medium leading-[12px]\">\n              {getFileExtension(file)}\n            </span>\n          </>\n        )}\n      </AttachmentTile>\n    );\n  };\n\n  const renderAttachmentTiles = () => {\n    if (!hasAttachmentTiles) return null;\n\n    return (\n      <div className=\"flex flex-wrap gap-[8px]\" aria-live=\"polite\">\n        {isCapturingScreenshot && (\n          <AttachmentTile label=\"Capturing screenshot\">\n            <IconCamera size={16} />\n            <AttachmentTileProgress color={submitButtonBackgroundColor} />\n          </AttachmentTile>\n        )}\n        {renderPinnedElementTile()}\n        {attachments.map(renderAttachmentTile)}\n        {attachments.length < MAX_ATTACHMENTS && (\n          <button\n            type=\"button\"\n            onClick={handleAttachmentClick}\n            aria-label=\"Add files\"\n            title=\"Add files\"\n            className=\"flex h-[56px] w-[56px] shrink-0 cursor-pointer items-center justify-center rounded-[12px] border-[1.5px] border-dashed border-uo-border-strong bg-transparent p-0 text-uo-text-tertiary transition-colors hover:bg-uo-fill-hover hover:text-uo-text-secondary\"\n          >\n            <IconPlus size={16} />\n          </button>\n        )}\n      </div>\n    );\n  };\n\n  const renderReplayRow = () => {\n    if (!showReplayRow) return null;\n\n    if (isReplayRecording) {\n      return (\n        <div className=\"flex items-center gap-[10px]\" aria-live=\"polite\">\n          <span className=\"flex h-[18px] w-[18px] shrink-0 items-center justify-center\">\n            <span className=\"h-[8px] w-[8px] animate-pulse rounded-full bg-uo-record\" />\n          </span>\n          <div className=\"flex min-w-0 flex-1 flex-col gap-[1px]\">\n            <div className=\"text-[13px] font-medium leading-[18px] text-uo-text-primary\">\n              Recording this session\n            </div>\n            <div className=\"text-[11.5px] leading-[16px] text-uo-text-tertiary\">\n              <span className=\"tabular-nums\">{formatElapsed(replayRecordingSeconds)}</span> ·\n              Attached when you submit\n            </div>\n          </div>\n          <button\n            type=\"button\"\n            onClick={removeReplay}\n            aria-label=\"Stop recording session replay\"\n            className={iconButtonClassName}\n          >\n            <IconX size={16} />\n          </button>\n        </div>\n      );\n    }\n\n    const description = !canAttachRecentReplay\n      ? \"Captures this page from now until you submit.\"\n      : replayEvidence?.startTimestampMs\n        ? \"Recorded on this page.\"\n        : \"Up to the last 30 seconds on this page.\";\n\n    return (\n      <div className=\"flex flex-col gap-[10px]\">\n        <div className=\"flex items-center gap-[10px]\">\n          <IconHistory size={16} className=\"shrink-0 text-uo-text-secondary\" aria-hidden=\"true\" />\n          <div className=\"flex min-w-0 flex-1 flex-col gap-[1px]\">\n            <div className=\"flex items-center gap-[4px] text-[13px] font-medium leading-[18px] text-uo-text-primary\">\n              {canAttachRecentReplay ? \"Attach recent activity\" : \"Record this session\"}\n              <Tooltip\n                label=\"Inputs are masked. Only you and the team can view the recording.\"\n                hideOnKeyboardFocus={false}\n              >\n                <button\n                  type=\"button\"\n                  aria-label=\"About activity privacy\"\n                  className=\"flex cursor-help items-center border-0 bg-transparent p-0 text-uo-text-tertiary\"\n                >\n                  <IconInfoCircle size={14} aria-hidden=\"true\" />\n                </button>\n              </Tooltip>\n            </div>\n            <div className=\"text-[11.5px] leading-[16px] text-uo-text-tertiary\">{description}</div>\n          </div>\n          {canAttachRecentReplay ? (\n            <ToggleSwitch\n              checked={replayEvidence !== null || isCapturingReplay}\n              busy={isCapturingReplay}\n              label=\"Attach recent activity\"\n              color={submitButtonBackgroundColor}\n              onChange={(checked) => (checked ? void attachRecentReplay() : removeReplay())}\n            />\n          ) : (\n            <button\n              type=\"button\"\n              onClick={() => void recordReplayFromNow()}\n              disabled={isCapturingReplay}\n              aria-label=\"Record from now until you submit\"\n              className=\"flex h-[28px] shrink-0 cursor-pointer items-center gap-[6px] rounded-full border-0 bg-transparent px-[12px] font-sans text-[12px] font-medium text-uo-text-primary shadow-[inset_0_0_0_1px_var(--uo-color-border-default)] transition-colors hover:bg-uo-fill-hover disabled:cursor-default disabled:opacity-60\"\n            >\n              {isCapturingReplay ? (\n                <IconLoader2 size={12} className=\"animate-spin\" aria-hidden=\"true\" />\n              ) : (\n                <span className=\"h-[7px] w-[7px] rounded-full bg-uo-record\" aria-hidden=\"true\" />\n              )}\n              Record\n            </button>\n          )}\n        </div>\n        {replayEvidence && !isCapturingReplay && (\n          <div className=\"overflow-hidden rounded-[12px]\">\n            <FeedbackReplayPreview\n              replayEvidence={replayEvidence}\n              subscriberCode={subscriberCode}\n            />\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  const renderScreenRecordingSetup = () => (\n    <div className=\"flex flex-col gap-[4px] rounded-[12px] bg-uo-record-tint p-[6px]\">\n      <RecordingInputs\n        visible\n        cameras={recordingInputs.cameras}\n        microphones={recordingInputs.microphones}\n        cameraId={recordingInputs.cameraId}\n        microphoneId={recordingInputs.microphoneId}\n        inputError={recordingInputs.isSupported ? recordingInputs.inputError : null}\n        disabled={sessionRecordingStatus === \"requesting\"}\n        onCameraChange={(deviceId) => void recordingInputs.selectCamera(deviceId)}\n        onMicrophoneChange={(deviceId) => void recordingInputs.selectMicrophone(deviceId)}\n      />\n      <div className=\"flex\">\n        <StartRecordingButton\n          visible\n          isStarting={sessionRecordingStatus === \"requesting\"}\n          onStart={() => void startSessionRecording()}\n        />\n      </div>\n    </div>\n  );\n\n  const openAttachmentPopover = (open: boolean) => {\n    if (open && captureMode !== \"compose\") changeCaptureMode(captureMode);\n    setIsAttachmentPopoverOpen(open);\n  };\n\n  const renderAttachButton = () => (\n    <>\n      <input\n        ref={fileInputRef}\n        type=\"file\"\n        accept={ATTACHMENT_ACCEPT}\n        multiple\n        onChange={handleFileUpload}\n        className=\"hidden\"\n      />\n      <Popover open={isAttachmentPopoverOpen} onOpenChange={openAttachmentPopover}>\n        <PopoverTrigger asChild>\n          <button\n            type=\"button\"\n            aria-label={isCapturingScreenshot ? \"Capturing screenshot\" : \"Attach\"}\n            aria-busy={isCapturingScreenshot}\n            title={isCapturingScreenshot ? \"Capturing screenshot…\" : \"Attach a file or screenshot\"}\n            className={iconButtonClassName}\n            disabled={\n              isCapturingScreenshot || sessionRecordingStatus !== \"idle\" || isCapturingReplay\n            }\n          >\n            {isCapturingScreenshot ? (\n              <IconLoader2 size={16} className=\"animate-spin\" aria-hidden=\"true\" />\n            ) : (\n              <IconPaperclip size={16} />\n            )}\n          </button>\n        </PopoverTrigger>\n        <PopoverContent\n          className=\"!w-[192px] !rounded-uo-menu !border-0 !bg-uo-surface-raised !p-[4px] !shadow-uo-2\"\n          align=\"start\"\n          side=\"top\"\n          sideOffset={8}\n        >\n          <button type=\"button\" onClick={handleAttachmentClick} className={menuItemClassName}>\n            <IconUpload size={16} className=\"text-uo-text-secondary\" />\n            Upload files\n          </button>\n          <button\n            type=\"button\"\n            onClick={captureScreenshot}\n            disabled={isCapturingScreenshot}\n            className={menuItemClassName}\n          >\n            <IconCamera size={16} className=\"text-uo-text-secondary\" />\n            {isCapturingScreenshot ? \"Capturing...\" : \"Take screenshot\"}\n          </button>\n        </PopoverContent>\n      </Popover>\n    </>\n  );\n\n  const renderCaptureModeButton = (\n    mode: Exclude<ComposerMode, \"compose\">,\n    label: string,\n    icon: React.ReactNode,\n    activeClassName: string,\n  ) => {\n    const isActive = captureMode === mode;\n    return (\n      <button\n        type=\"button\"\n        aria-label={label}\n        aria-pressed={isActive}\n        title={isActive ? `Exit ${label.toLowerCase()} (Esc)` : label}\n        disabled={sessionRecordingStatus !== \"idle\" || isCapturingReplay}\n        onClick={() => changeCaptureMode(mode)}\n        className={`${iconButtonClassName} ${isActive ? activeClassName : \"\"}`}\n      >\n        {icon}\n      </button>\n    );\n  };\n\n  const renderActionBar = () => (\n    <div className={`px-[8px] pt-[6px] ${showPoweredBy ? \"\" : \"pb-[8px]\"}`}>\n      <div className={`${widgetCardClassName} flex items-center gap-[2px] p-[6px]`}>\n        {renderAttachButton()}\n        {canCapture &&\n          renderCaptureModeButton(\n            \"pin\",\n            \"Pin an element\",\n            <IconPin size={16} />,\n            \"!bg-uo-pick-tint !text-uo-pick\",\n          )}\n        {canCapture &&\n          enableScreenRecording &&\n          renderCaptureModeButton(\n            \"record\",\n            \"Record your screen\",\n            <IconVideo size={16} />,\n            \"!bg-uo-record-tint !text-uo-record\",\n          )}\n        <div className=\"flex-1\" />\n        {!openOptions?.compact && (\n          <button\n            type=\"button\"\n            onClick={onBack}\n            className=\"h-[32px] cursor-pointer rounded-full border-0 bg-transparent px-[12px] font-sans text-[13px] font-medium text-uo-text-secondary transition-[background-color,color,transform] hover:bg-uo-fill-hover hover:text-uo-text-primary active:scale-[0.97]\"\n          >\n            Cancel\n          </button>\n        )}\n        <button\n          type=\"submit\"\n          disabled={!isValid || feedbackMutation.isPending}\n          aria-busy={feedbackMutation.isPending}\n          className=\"flex h-[32px] cursor-pointer items-center gap-[6px] rounded-full border-0 px-[16px] font-sans text-[13px] font-medium transition-[opacity,transform] active:scale-[0.97] disabled:cursor-default disabled:opacity-50\"\n          style={{\n            backgroundColor: submitButtonBackgroundColor,\n            color: submitButtonTextColor,\n          }}\n        >\n          {feedbackMutation.isPending && (\n            <IconLoader2 size={16} className=\"animate-spin\" aria-hidden=\"true\" />\n          )}\n          {isEditing ? \"Save changes\" : \"Submit\"}\n        </button>\n      </div>\n    </div>\n  );\n\n  const renderBoardField = () => {\n    if (boards.length <= 1) return null;\n\n    return (\n      <div className=\"flex flex-col gap-[6px]\">\n        <span id=\"feedback-board-label\" className={fieldLabelClassName}>\n          Board\n        </span>\n        <SelectPrimitive.Root\n          value={selectedBoard?.id || \"\"}\n          onValueChange={(value) => {\n            const board = boards.find((b: Board) => b.id === value) || null;\n            setSelectedBoard(board);\n          }}\n        >\n          <SelectPrimitive.Trigger\n            aria-labelledby=\"feedback-board-label\"\n            className={`${widgetFieldClassName} flex h-[36px] cursor-pointer items-center gap-[8px] px-[12px] text-left focus:bg-uo-surface-2`}\n          >\n            <BoardDot board={selectedBoard} />\n            <span className=\"min-w-0 flex-1 truncate\">\n              <SelectPrimitive.Value placeholder=\"Select a board\" />\n            </span>\n            <SelectPrimitive.Icon asChild>\n              <IconSelector size={16} className=\"shrink-0 text-uo-text-tertiary\" />\n            </SelectPrimitive.Icon>\n          </SelectPrimitive.Trigger>\n          <SelectPrimitive.Content\n            position=\"popper\"\n            align=\"start\"\n            sideOffset={6}\n            avoidCollisions={true}\n            className=\"relative z-50 max-h-[320px] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-uo-menu bg-uo-surface-raised p-[4px] text-uo-text-primary shadow-uo-2\"\n          >\n            <SelectPrimitive.Viewport>\n              {boards.map((board: Board) => (\n                <SelectPrimitive.Item\n                  key={board.id}\n                  value={board.id}\n                  className=\"relative flex h-[32px] cursor-pointer select-none items-center gap-[8px] rounded-[8px] pl-[10px] pr-[32px] font-sans text-[13px] outline-none data-[highlighted]:bg-uo-fill-hover\"\n                >\n                  <BoardDot board={board} />\n                  <SelectPrimitive.ItemText>{board.name}</SelectPrimitive.ItemText>\n                  <SelectPrimitive.ItemIndicator className=\"absolute right-[10px] flex text-uo-text-secondary\">\n                    <IconCheck size={16} />\n                  </SelectPrimitive.ItemIndicator>\n                </SelectPrimitive.Item>\n              ))}\n            </SelectPrimitive.Viewport>\n          </SelectPrimitive.Content>\n        </SelectPrimitive.Root>\n      </div>\n    );\n  };\n\n  const renderSimilarFeedback = () => {\n    if (similarItems.length === 0) return null;\n\n    return (\n      <motion.div\n        initial={{ opacity: 0, y: -4 }}\n        animate={{ opacity: 1, y: 0 }}\n        transition={{ duration: 0.2, ease: \"easeOut\" }}\n        className={`${widgetCardClassName} flex flex-col p-[4px]`}\n      >\n        <div className=\"px-[10px] pb-[2px] pt-[6px] text-[11.5px] font-medium leading-[14px] text-uo-text-tertiary\">\n          Similar feedback\n        </div>\n        {similarItems.map((item) => (\n          <button\n            key={item.id}\n            type=\"button\"\n            onClick={() => handleFeedbackItemClick?.(item)}\n            className=\"flex w-full cursor-pointer items-center gap-[12px] rounded-[12px] border-0 bg-transparent py-[8px] pl-[10px] pr-[8px] text-left font-sans transition-colors hover:bg-uo-fill-hover\"\n          >\n            <span className=\"min-w-0 flex-1 truncate text-[13px] font-medium leading-[18px] text-uo-text-primary\">\n              {item.title}\n            </span>\n            <span className=\"flex h-[28px] shrink-0 items-center gap-[2px] rounded-full pl-[6px] pr-[10px] text-[12px] font-semibold tabular-nums text-uo-text-primary shadow-[inset_0_0_0_1px_var(--uo-color-border-default)]\">\n              <IconCaretUp size={16} className=\"text-uo-text-secondary\" aria-hidden=\"true\" />\n              {item.feedbackVotesCount ?? 0}\n            </span>\n          </button>\n        ))}\n      </motion.div>\n    );\n  };\n\n  const renderForm = () => (\n    <form onSubmit={handleSubmit} className=\"flex min-h-0 flex-1 flex-col\">\n      <div className=\"scroll-container flex min-h-0 flex-1 flex-col gap-[6px] overflow-auto px-[8px] pb-[2px] pt-[4px]\">\n        {submitError && (\n          <div\n            role=\"alert\"\n            className=\"flex items-start gap-[8px] rounded-uo-card bg-uo-danger-bg px-[12px] py-[10px] text-[12px] leading-[16px] text-uo-danger-fg shadow-[inset_0_0_0_1px_var(--uo-color-danger-border)]\"\n          >\n            <IconAlertCircle size={16} className=\"mt-[1px] shrink-0\" aria-hidden=\"true\" />\n            {submitError}\n          </div>\n        )}\n        <div className={`${widgetCardClassName} flex flex-col gap-[12px] p-[12px]`}>\n          {renderBoardField()}\n          <div className=\"flex flex-col gap-[6px]\">\n            <label htmlFor=\"title\" className={fieldLabelClassName}>\n              Title\n            </label>\n            <div className=\"relative\">\n              <input\n                id=\"title\"\n                type=\"text\"\n                placeholder=\"Summarize your feedback\"\n                value={title}\n                onChange={handleTitleChange}\n                className={`${widgetFieldClassName} h-[36px] px-[12px] ${enableVoiceFeedback ? \"pr-[40px]\" : \"\"}`}\n                required\n              />\n              {enableVoiceFeedback && (\n                <div className=\"absolute right-[4px] top-0 flex h-full items-center\">\n                  <VoiceRecorder onRecordingComplete={handleTitleVoiceRecordingComplete} />\n                </div>\n              )}\n            </div>\n          </div>\n          <div className=\"flex flex-col gap-[6px]\">\n            <label htmlFor=\"text\" className={fieldLabelClassName}>\n              Details\n            </label>\n            <div className=\"relative\">\n              <textarea\n                id=\"text\"\n                placeholder=\"What happened, and what did you expect?\"\n                value={text}\n                onChange={(e) => setText(e.target.value)}\n                className={`${widgetFieldClassName} block max-h-[300px] min-h-[96px] resize-none px-[12px] py-[10px] leading-[18px] [field-sizing:content] ${enableVoiceFeedback ? \"pb-[40px]\" : \"\"}`}\n              />\n              {enableVoiceFeedback && (\n                <div className=\"absolute bottom-[6px] right-[6px]\">\n                  <VoiceRecorder onRecordingComplete={handleVoiceRecordingComplete} />\n                </div>\n              )}\n            </div>\n          </div>\n          {captureMode === \"record\" && renderScreenRecordingSetup()}\n          {renderAttachmentTiles()}\n          {renderReplayRow()}\n        </div>\n        {renderSimilarFeedback()}\n      </div>\n      {renderActionBar()}\n    </form>\n  );\n\n  const renderRecordingInProgress = () => (\n    <div className=\"flex min-h-0 flex-1 flex-col px-[8px] pb-[8px] pt-[4px]\">\n      <div\n        className={`${widgetCardClassName} flex min-h-0 flex-1 flex-col items-center justify-center gap-[4px] px-[24px] text-center`}\n        role=\"status\"\n        aria-live=\"polite\"\n      >\n        <div className=\"mb-[8px] flex h-[36px] w-[36px] items-center justify-center rounded-full bg-uo-record-tint text-uo-record\">\n          {sessionRecordingStatus === \"finishing\" ? (\n            <IconLoader2 size={20} className=\"animate-spin\" aria-hidden=\"true\" />\n          ) : (\n            <span className=\"h-[12px] w-[12px] animate-pulse rounded-full bg-current\" />\n          )}\n        </div>\n        <p className=\"m-0 text-[13px] font-medium leading-[18px] text-uo-text-primary\">\n          {sessionRecordingStatus === \"finishing\"\n            ? \"Preparing your recording\"\n            : \"Session recording in progress\"}\n        </p>\n        <p className=\"m-0 max-w-[260px] text-[11.5px] leading-[16px] text-uo-text-tertiary\">\n          Your feedback draft is saved. The finished recording is private to the team.\n        </p>\n      </div>\n    </div>\n  );\n\n  const isRecordingActive =\n    sessionRecordingStatus === \"recording\" ||\n    sessionRecordingStatus === \"paused\" ||\n    sessionRecordingStatus === \"finishing\";\n  const isPanelHidden =\n    isRecordingActive || ((isPickingElement || isReplayRecording) && isFormHidden);\n\n  useEffect(() => {\n    if (!isPanelHidden) return;\n    onPanelHiddenChange?.(true);\n    return () => onPanelHiddenChange?.(false);\n  }, [isPanelHidden, onPanelHiddenChange]);\n\n  const renderBody = () => {\n    if (submittedFeedback) {\n      return (\n        <FeedbackSubmitted\n          title={submittedFeedback.title}\n          votes={submittedFeedback.feedbackVotesCount ?? 0}\n          boardName={submittedFeedback.board?.name || selectedBoard?.name}\n          email={getSubscriberEmail()}\n          primaryBackgroundColor={submitButtonBackgroundColor}\n          primaryTextColor={submitButtonTextColor}\n          onViewPost={() => (onSubmit ? onSubmit(submittedFeedback) : onBack())}\n          onDone={() => (openOptions?.compact && onClose ? onClose() : onBack())}\n        />\n      );\n    }\n    if (isRecordingActive) return renderRecordingInProgress();\n    return renderForm();\n  };\n\n  return (\n    <>\n      <div\n        ref={formRootRef}\n        className={`relative flex h-full flex-col bg-uo-surface-0 ${showPoweredBy ? \"pb-[32px]\" : \"\"}`}\n      >\n        <motion.div\n          initial={{ opacity: 0, x: 20 }}\n          animate={{ opacity: 1, x: 0 }}\n          className=\"mx-auto flex h-full w-full max-w-2xl flex-col\"\n        >\n          {renderBody()}\n        </motion.div>\n        {selectedAttachment && (\n          <div\n            className=\"absolute inset-0 z-50 flex items-center justify-center bg-uo-scrim p-[16px]\"\n            role=\"dialog\"\n            aria-modal=\"true\"\n            aria-label=\"Attachment preview\"\n            onClick={() => setSelectedAttachment(null)}\n          >\n            <div\n              className=\"relative max-h-full max-w-full overflow-hidden rounded-uo-card bg-uo-surface-1 shadow-uo-3\"\n              onClick={(event) => event.stopPropagation()}\n            >\n              <button\n                type=\"button\"\n                onClick={() => setSelectedAttachment(null)}\n                className=\"absolute right-[8px] top-[8px] z-10 flex h-[32px] w-[32px] cursor-pointer items-center justify-center rounded-full border-0 bg-uo-surface-hud p-0 text-uo-text-on-hud transition-transform active:scale-[0.94]\"\n                aria-label=\"Close preview\"\n              >\n                <IconX size={16} />\n              </button>\n              {selectedAttachment.file.type.startsWith(\"video/\") ? (\n                <video\n                  src={selectedAttachment.previewUrl}\n                  controls\n                  autoPlay\n                  playsInline\n                  className=\"block max-h-[80vh] max-w-full bg-black\"\n                  aria-label={`Preview ${selectedAttachment.file.name}`}\n                />\n              ) : (\n                <img\n                  src={selectedAttachment.previewUrl}\n                  alt={selectedAttachment.file.name}\n                  className=\"block max-h-[80vh] max-w-full object-contain\"\n                />\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n      {captureMode === \"pin\" && capturePortalTarget && (\n        <ElementPicker\n          portalTarget={capturePortalTarget}\n          isFormHidden={isFormHidden}\n          onFormHiddenChange={setIsFormHidden}\n          onPick={pinElement}\n          onCancel={cancelPinning}\n        />\n      )}\n      {isReplayRecording && !isPickingElement && capturePortalTarget && (\n        <ReplayHud\n          elapsedSeconds={replayRecordingSeconds}\n          isCompleting={isCapturingReplay}\n          isFormHidden={isFormHidden}\n          portalTarget={capturePortalTarget}\n          onFormHiddenChange={setIsFormHidden}\n          onComplete={() => void completeReplayRecording()}\n          onCancel={removeReplay}\n        />\n      )}\n      {cameraStream && capturePortalTarget && (\n        <CameraBubble stream={cameraStream} portalTarget={capturePortalTarget} />\n      )}\n      {isRecordingActive && capturePortalTarget && (\n        <RecordingHud\n          status={sessionRecordingStatus as \"recording\" | \"paused\" | \"finishing\"}\n          elapsedSeconds={recordingElapsedSeconds}\n          portalTarget={capturePortalTarget}\n          onTogglePause={toggleSessionRecordingPause}\n          onStop={() => finishSessionRecording(\"finish\")}\n          onDiscard={() => finishSessionRecording(\"cancel\")}\n        />\n      )}\n      {renderFooter()}\n    </>\n  );\n};\n\nconst FeedbackForm: React.FC<FeedbackFormProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <FeedbackFormInner {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default FeedbackForm;\n","import { trackHelpCenterEvent, trackHelpCenterSearchClick } from \"../api-utils\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"@userorbit/ui\";\nimport { motion } from \"framer-motion\";\nimport { BookOpen, ChevronRight, FolderOpen, Gift, PlayCircle } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Logger } from \"../../../lib/logger\";\nimport { triggerTour } from \"../../../lib/widget\";\nimport {\n  fetchArticleCollections,\n  fetchArticles,\n  fetchPageResources,\n  fetchPopularArticles,\n  searchArticles,\n} from \"../api-utils\";\nimport { HelpCenterContentSkeleton, SkeletonBox } from \"../feedback-skeleton\";\nimport { IconHelp } from \"../icons\";\nimport { WidgetEmptyState } from \"../widget-empty-state\";\n\nconst logger = Logger.getInstance();\n\nconst DEFAULT_HELP_CENTER_COPY = {\n  relatedPageHeading: \"Related to this page\",\n  suggestedHeading: \"Suggested\",\n  resultsHeading: \"Results\",\n  browseTopicsHeading: \"Browse by topic\",\n  noSearchResultsText: \"No articles found for your search.\",\n  emptyArticlesTitle: \"No articles found\",\n  emptySearchArticlesTitle: \"No articles found for your search\",\n  emptyArticlesDescription: \"Check back later for more content.\",\n  feedbackPromptTitle: \"Have feedback or suggestions?\",\n  feedbackPromptDescription: \"Share your thoughts and help us improve.\",\n  feedbackPromptButton: \"Submit feedback\",\n} as const;\n\ntype HelpCenterCopyOverrides = Partial<Record<keyof typeof DEFAULT_HELP_CENTER_COPY, string>>;\ntype HelpCenterCopy = Record<keyof typeof DEFAULT_HELP_CENTER_COPY, string>;\n\nfunction resolveHelpCenterCopy(overrides?: HelpCenterCopyOverrides | null): HelpCenterCopy {\n  const copy: HelpCenterCopy = { ...DEFAULT_HELP_CENTER_COPY };\n  if (!overrides) return copy;\n\n  for (const [key, value] of Object.entries(overrides)) {\n    if (typeof value === \"string\" && value.trim()) {\n      copy[key as keyof HelpCenterCopy] = value;\n    }\n  }\n\n  return copy;\n}\n\ninterface HelpCenterContentProps {\n  subscriberCode?: string;\n  primaryButtonBackgroundColor?: string;\n  primaryButtonTextColor?: string;\n  onArticleClick: (article: any) => void;\n  onCollectionClick: (collection: any) => void;\n  onFeedbackClick?: () => void;\n  onClose?: () => void;\n  searchQuery?: string;\n  language?: string;\n  copyOverrides?: HelpCenterCopyOverrides;\n}\n\nconst HelpCenterContent: React.FC<HelpCenterContentProps> = ({\n  subscriberCode,\n  primaryButtonBackgroundColor = \"#3912e4\",\n  primaryButtonTextColor = \"#ffffff\",\n  onArticleClick,\n  onCollectionClick,\n  onFeedbackClick,\n  onClose,\n  searchQuery: debouncedSearchQuery = \"\",\n  language,\n  copyOverrides,\n}) => {\n  const copy = resolveHelpCenterCopy(copyOverrides);\n  React.useEffect(() => {\n    trackHelpCenterEvent(\"visit\", { language }, subscriberCode);\n  }, [language, subscriberCode]);\n  const { data: collectionsData, isLoading: isLoadingCollections } = useQuery({\n    queryKey: [\"article-collections\", subscriberCode, language],\n    queryFn: async () => {\n      const response = await fetchArticleCollections(subscriberCode, language);\n      return response?.data || [];\n    },\n    staleTime: 1000 * 60 * 5,\n  });\n\n  const { data: popularArticlesData, isLoading: isLoadingPopular } = useQuery({\n    queryKey: [\"popular-articles\", subscriberCode, language],\n    queryFn: async () => {\n      const response = await fetchPopularArticles(5, subscriberCode, language);\n      return response?.data || [];\n    },\n    staleTime: 1000 * 60 * 5,\n  });\n\n  const { data: articlesData, isLoading: isLoadingArticles } = useQuery({\n    queryKey: [\"articles\", debouncedSearchQuery, subscriberCode, language],\n    queryFn: async () => {\n      if (debouncedSearchQuery) {\n        const response = await searchArticles(debouncedSearchQuery, 25, subscriberCode, language);\n        return (response?.data || []).map((article: any) => ({\n          ...article,\n          description: article.snippet || article.metaDescription || \"\",\n        }));\n      }\n\n      const response = await fetchArticles(undefined, 100, subscriberCode, language);\n      return response?.data || [];\n    },\n    staleTime: 1000 * 60,\n  });\n\n  const [currentUrl] = React.useState(() => {\n    if (typeof window === \"undefined\") return \"\";\n    return window.location.pathname;\n  });\n\n  const { data: pageResourcesData, isLoading: isLoadingPageResources } = useQuery({\n    queryKey: [\"page-resources\", currentUrl, subscriberCode, language],\n    queryFn: async () => {\n      if (!currentUrl) return null;\n      const response = await fetchPageResources(currentUrl, subscriberCode, language);\n      return response?.data || null;\n    },\n    staleTime: 1000 * 60 * 5,\n    enabled: !!currentUrl && !debouncedSearchQuery,\n  });\n\n  const collections = React.useMemo(() => collectionsData || [], [collectionsData]);\n  const popularArticles = React.useMemo(() => popularArticlesData || [], [popularArticlesData]);\n  const articles = React.useMemo(() => articlesData || [], [articlesData]);\n\n  const filteredCollections = React.useMemo(() => {\n    if (debouncedSearchQuery && collections.length > 0) {\n      return collections.filter((collection: any) => {\n        const collectionArticles = articles.filter((article: any) =>\n          article.collections?.some((c: any) => c.id === collection.id),\n        );\n        return collectionArticles.length > 0;\n      });\n    }\n    return collections;\n  }, [debouncedSearchQuery, articles, collections]);\n\n  const pageRelatedItems = React.useMemo(() => {\n    if (!pageResourcesData) return [];\n    const items: Array<\n      | { id: string; type: \"article\"; title: string; metadata: string; article: any }\n      | { id: string; type: \"tour\"; title: string; metadata: string; tour: any }\n    > = [];\n\n    const apiArticles = pageResourcesData.articles || [];\n    const apiTours = pageResourcesData.tours || [];\n\n    apiArticles.forEach((article: any) => {\n      const readTime = article.readTime ? ` · ${article.readTime} min read` : \"\";\n      items.push({\n        id: article.id,\n        type: \"article\" as const,\n        title: article.title,\n        metadata: `Help Article${readTime}`,\n        article,\n      });\n    });\n\n    apiTours.forEach((tour: any) => {\n      items.push({\n        id: tour.id,\n        type: \"tour\" as const,\n        title: tour.title || tour.name || \"Product Tour\",\n        metadata: tour.description || \"Product Tour\",\n        tour,\n      });\n    });\n\n    return items;\n  }, [pageResourcesData]);\n\n  const isLoading =\n    isLoadingCollections || isLoadingPopular || (debouncedSearchQuery && isLoadingArticles);\n  const showResults = debouncedSearchQuery && articles.length > 0;\n  const showCollections = !debouncedSearchQuery || showResults;\n\n  const handleTourStart = React.useCallback(\n    async (tour: any) => {\n      if (!tour || !tour.id) {\n        logger.error(\"Invalid tour object:\", tour);\n        return;\n      }\n      try {\n        onClose?.();\n        await triggerTour(tour, true);\n      } catch (error) {\n        logger.error(\"Failed to start tour:\", error);\n      }\n    },\n    [onClose],\n  );\n\n  if (isLoading && !debouncedSearchQuery) {\n    return (\n      <div className=\"h-full overflow-y-auto\">\n        <div className=\"relative h-full overflow-y-auto bg-white px-0 pb-6 pt-0 dark:bg-neutral-950\">\n          <HelpCenterContentSkeleton />\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"h-full overflow-y-auto\">\n      <div className=\"relative h-[calc(var(--container-height)-75px)] overflow-y-auto bg-white px-0 pb-6 pt-0 dark:bg-neutral-950\">\n        {!debouncedSearchQuery &&\n          (isLoadingPageResources ? (\n            <div className=\"px-5 pt-8\">\n              <SkeletonBox className=\"mb-3 h-4 w-32\" />\n              <div className=\"space-y-1\">\n                {Array.from({ length: 3 }).map((_, index) => (\n                  <div key={index} className=\"flex items-center justify-between py-2.5\">\n                    <SkeletonBox className=\"h-4 w-full\" />\n                  </div>\n                ))}\n              </div>\n            </div>\n          ) : (\n            (pageRelatedItems.length > 0 || popularArticles.length > 0) && (\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                transition={{ duration: 0.4, ease: \"easeOut\" }}\n                className=\"px-4 pt-4\"\n              >\n                <p className=\"mb-2 px-1 text-[0.72rem] font-medium uppercase tracking-wider text-neutral-400 dark:text-neutral-500\">\n                  {pageRelatedItems.length > 0 ? copy.relatedPageHeading : copy.suggestedHeading}\n                </p>\n                <div className=\"overflow-hidden rounded-xl border border-neutral-100 dark:border-neutral-800\">\n                  {pageRelatedItems.length > 0\n                    ? pageRelatedItems.map((item, index) => {\n                        const isLast = index === pageRelatedItems.length - 1;\n                        if (item.type === \"article\") {\n                          return (\n                            <button\n                              type=\"button\"\n                              key={item.id}\n                              onClick={() => onArticleClick(item.article)}\n                              className={`group flex w-full items-center justify-between px-4 py-3 text-left transition hover:bg-neutral-50 dark:hover:bg-neutral-800/50 ${!isLast ? \"border-b border-neutral-100 dark:border-neutral-800\" : \"\"}`}\n                            >\n                              <div className=\"flex items-start gap-3\">\n                                <BookOpen className=\"mt-0.5 size-4 flex-shrink-0 text-neutral-400 dark:text-neutral-500\" />\n                                <div className=\"flex-1\">\n                                  <p className=\"text-md font-medium text-neutral-900 dark:text-neutral-100 line-clamp-1\">\n                                    {item.title}\n                                  </p>\n                                  <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n                                    {item.metadata}\n                                  </p>\n                                </div>\n                              </div>\n                              <ChevronRight className=\"h-4 w-4 min-w-4 text-neutral-300 transition group-hover:text-neutral-500 dark:text-neutral-600 dark:group-hover:text-neutral-400\" />\n                            </button>\n                          );\n                        }\n                        if (item.type === \"tour\" && item.tour) {\n                          return (\n                            <div\n                              key={item.id}\n                              className={`flex items-center justify-between px-4 py-3 transition hover:bg-neutral-50 dark:hover:bg-neutral-800/50 ${!isLast ? \"border-b border-neutral-100 dark:border-neutral-800\" : \"\"}`}\n                            >\n                              <div className=\"flex items-center gap-3\">\n                                <PlayCircle className=\"size-4 flex-shrink-0 text-neutral-400 dark:text-neutral-500\" />\n                                <div>\n                                  <p className=\"text-md font-medium text-neutral-900 dark:text-neutral-100 line-clamp-1\">\n                                    {item.title}\n                                  </p>\n                                  <p className=\"text-sm text-neutral-500 dark:text-neutral-400\">\n                                    {item.metadata}\n                                  </p>\n                                </div>\n                              </div>\n                              <Button\n                                onClick={async (e) => {\n                                  e.stopPropagation();\n                                  e.preventDefault();\n                                  await handleTourStart(item.tour);\n                                }}\n                                className=\"cursor-pointer\"\n                                size=\"sm\"\n                                variant=\"primary\"\n                                style={{\n                                  backgroundColor: primaryButtonBackgroundColor,\n                                  color: primaryButtonTextColor,\n                                }}\n                              >\n                                Start Tour\n                              </Button>\n                            </div>\n                          );\n                        }\n                        return null;\n                      })\n                    : popularArticles.slice(0, 3).map((article: any, index: number) => (\n                        <button\n                          type=\"button\"\n                          key={article.id}\n                          onClick={() => {\n                            trackHelpCenterSearchClick(article, subscriberCode);\n                            onArticleClick(article);\n                          }}\n                          className={`group flex w-full items-center justify-between px-4 py-3 text-left transition hover:bg-neutral-50 dark:hover:bg-neutral-800/50 ${index < Math.min(popularArticles.length, 3) - 1 ? \"border-b border-neutral-100 dark:border-neutral-800\" : \"\"}`}\n                        >\n                          <span className=\"text-md font-medium text-neutral-900 dark:text-neutral-100 line-clamp-1\">\n                            {article.title}\n                          </span>\n                          <ChevronRight className=\"h-4 w-4 min-w-4 text-neutral-300 transition group-hover:text-neutral-500 dark:text-neutral-600 dark:group-hover:text-neutral-400\" />\n                        </button>\n                      ))}\n                </div>\n              </motion.div>\n            )\n          ))}\n\n        {debouncedSearchQuery && (\n          <div className=\"px-4 pt-4\">\n            <p className=\"mb-2 px-1 text-[0.72rem] font-medium uppercase tracking-wider text-neutral-400 dark:text-neutral-500\">\n              {copy.resultsHeading}\n            </p>\n            {isLoadingArticles ? (\n              <div className=\"space-y-3 px-1 pb-4\">\n                {Array.from({ length: 3 }).map((_, index) => (\n                  <div key={index} className=\"py-2.5\">\n                    <div className=\"mb-1 h-4 w-3/4 animate-pulse rounded bg-neutral-200 dark:bg-neutral-700\" />\n                    <div className=\"h-3 w-1/2 animate-pulse rounded bg-neutral-200 dark:bg-neutral-700\" />\n                  </div>\n                ))}\n              </div>\n            ) : articles.length > 0 ? (\n              <div className=\"overflow-hidden rounded-xl border border-neutral-100 dark:border-neutral-800\">\n                {articles.map((article: any, index: number) => (\n                  <button\n                    type=\"button\"\n                    key={article.id}\n                    onClick={() => {\n                      trackHelpCenterSearchClick(article, subscriberCode);\n                      onArticleClick(article);\n                    }}\n                    className={`group flex w-full items-center justify-between px-4 py-3 text-left transition hover:bg-neutral-50 dark:hover:bg-neutral-800/50 ${index < articles.length - 1 ? \"border-b border-neutral-100 dark:border-neutral-800\" : \"\"}`}\n                  >\n                    <div className=\"flex flex-col\">\n                      <p className=\"text-md font-medium text-neutral-900 dark:text-neutral-100 line-clamp-1\">\n                        {article.title}\n                      </p>\n                      {article.description && (\n                        <p className=\"mt-0.5 line-clamp-2 text-sm text-neutral-500 dark:text-neutral-400\">\n                          {article.description}\n                        </p>\n                      )}\n                    </div>\n                    <ChevronRight className=\"h-4 w-4 min-w-4 text-neutral-300 transition group-hover:text-neutral-500 dark:text-neutral-600 dark:group-hover:text-neutral-400\" />\n                  </button>\n                ))}\n              </div>\n            ) : (\n              <div className=\"px-1 py-4 text-md text-neutral-500 dark:text-neutral-400\">\n                {copy.noSearchResultsText}\n              </div>\n            )}\n          </div>\n        )}\n\n        {showCollections && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            transition={{ delay: 0.12, duration: 0.4, ease: \"easeOut\" }}\n          >\n            {filteredCollections.length > 0 ? (\n              <div className=\"px-4 pt-5\">\n                <p className=\"mb-2 px-1 text-[0.72rem] font-medium uppercase tracking-wider text-neutral-400 dark:text-neutral-500\">\n                  {copy.browseTopicsHeading}\n                </p>\n                <div className=\"overflow-hidden rounded-xl border border-neutral-100 dark:border-neutral-800\">\n                  {filteredCollections.map((collection: any, index: number) => (\n                    <button\n                      type=\"button\"\n                      key={collection.id}\n                      onClick={() => onCollectionClick(collection)}\n                      className={`group flex w-full items-center justify-between px-4 py-3 text-left transition hover:bg-neutral-50 dark:hover:bg-neutral-800/50 ${index < filteredCollections.length - 1 ? \"border-b border-neutral-100 dark:border-neutral-800\" : \"\"}`}\n                    >\n                      <div className=\"flex items-center gap-3\">\n                        <FolderOpen className=\"size-4 flex-shrink-0 text-neutral-400 dark:text-neutral-500\" />\n                        <span className=\"text-md font-medium text-neutral-900 dark:text-neutral-100 line-clamp-1\">\n                          {collection.name}\n                        </span>\n                      </div>\n                      <ChevronRight className=\"h-4 w-4 min-w-4 text-neutral-300 transition group-hover:text-neutral-500 dark:text-neutral-600 dark:group-hover:text-neutral-400\" />\n                    </button>\n                  ))}\n                </div>\n              </div>\n            ) : (\n              <WidgetEmptyState\n                icon={<IconHelp className=\"h-10 w-10\" size={40} />}\n                title={\n                  debouncedSearchQuery ? copy.emptySearchArticlesTitle : copy.emptyArticlesTitle\n                }\n                description={copy.emptyArticlesDescription}\n              />\n            )}\n            {!debouncedSearchQuery && filteredCollections.length > 0 && onFeedbackClick && (\n              <motion.div\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                transition={{ delay: 0.24, duration: 0.4, ease: \"easeOut\" }}\n                className=\"px-5 py-6\"\n              >\n                <div className=\"relative overflow-hidden rounded-xl border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-700 dark:bg-neutral-800/50\">\n                  <h3 className=\"mb-1 text-md font-semibold text-neutral-900 dark:text-neutral-100\">\n                    {copy.feedbackPromptTitle}\n                  </h3>\n                  <p className=\"mb-3 text-sm text-neutral-500 dark:text-neutral-400\">\n                    {copy.feedbackPromptDescription}\n                  </p>\n                  <Button\n                    onClick={onFeedbackClick}\n                    variant=\"primary\"\n                    size=\"sm\"\n                    style={{\n                      backgroundColor: primaryButtonBackgroundColor,\n                      color: primaryButtonTextColor,\n                    }}\n                  >\n                    {copy.feedbackPromptButton}\n                  </Button>\n                  <Gift\n                    className=\"absolute bottom-[-20px] right-[-20px] h-28 w-28 text-neutral-200 opacity-30 dark:text-neutral-700\"\n                    strokeWidth={1.5}\n                  />\n                </div>\n              </motion.div>\n            )}\n          </motion.div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default HelpCenterContent;\n","const languageLabels: Record<string, string> = {\n  bash: \"Bash\",\n  css: \"CSS\",\n  html: \"HTML\",\n  javascript: \"JavaScript\",\n  js: \"JavaScript\",\n  json: \"JSON\",\n  json5: \"JSON\",\n  jsx: \"JSX\",\n  shell: \"Shell\",\n  sh: \"Shell\",\n  ts: \"TypeScript\",\n  tsx: \"TSX\",\n  typescript: \"TypeScript\",\n  xml: \"XML\",\n  yaml: \"YAML\",\n  yml: \"YAML\",\n};\n\nconst languageAliases: Record<string, string> = {\n  js: \"javascript\",\n  json5: \"json\",\n  ts: \"typescript\",\n  yml: \"yaml\",\n};\n\nfunction inferLanguageFromCode(code: string): string | null {\n  const trimmed = code.trimStart();\n\n  if (/^<(?:!--|!doctype|\\/?[a-z][\\w:-]*)(?:\\s|>|\\/)/i.test(trimmed)) {\n    return \"html\";\n  }\n\n  return null;\n}\n\nexport function getCodeBlockLanguageInfo({\n  className = \"\",\n  code = \"\",\n}: {\n  className?: string;\n  code?: string;\n}) {\n  const languageClass = className.match(/\\blanguage-([a-z0-9_-]+)\\b/i)?.[1]?.toLowerCase() || \"\";\n  const inferredLanguage = inferLanguageFromCode(code);\n  const classLanguage =\n    inferredLanguage && (!languageClass || languageClass === \"typescript\")\n      ? inferredLanguage\n      : languageClass || inferredLanguage || \"typescript\";\n  const highlightLanguage = languageAliases[classLanguage] || classLanguage;\n\n  return {\n    classLanguage,\n    label: languageLabels[classLanguage] || languageLabels[highlightLanguage] || classLanguage,\n  };\n}\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  __addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    if (name) node.scope = `language:${name}`;\n\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit$1({\n    scope: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\n  );\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensitivity of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.__addSublanguage(result._emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\n\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        modeBuffer += \"\\n\";\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n          if (!match) break;\n\n          const beforeMatch = codeToHighlight.substring(index, match.index);\n          const processedCount = processLexeme(beforeMatch, match);\n          index = match.index + processedCount;\n        }\n        processLexeme(codeToHighlight.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\n    };\n    result._emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - secondBest (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    function boot() {\n      // if a highlight was requested before DOM was loaded, do now\n      highlightAll();\n    }\n\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      // make sure the event listener is only added once\n      if (!wantsHighlight) {\n        window.addEventListener('DOMContentLoaded', boot, false);\n      }\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","import hljs from \"highlight.js/lib/core\";\nimport bash from \"highlight.js/lib/languages/bash\";\nimport css from \"highlight.js/lib/languages/css\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport json from \"highlight.js/lib/languages/json\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport xml from \"highlight.js/lib/languages/xml\";\nimport yaml from \"highlight.js/lib/languages/yaml\";\n\nhljs.registerLanguage(\"bash\", bash);\nhljs.registerLanguage(\"css\", css);\nhljs.registerLanguage(\"html\", xml);\nhljs.registerLanguage(\"javascript\", javascript);\nhljs.registerLanguage(\"json\", json);\nhljs.registerLanguage(\"jsx\", javascript);\nhljs.registerLanguage(\"shell\", bash);\nhljs.registerLanguage(\"sh\", bash);\nhljs.registerLanguage(\"tsx\", typescript);\nhljs.registerLanguage(\"typescript\", typescript);\nhljs.registerLanguage(\"xml\", xml);\nhljs.registerLanguage(\"yaml\", yaml);\n\nexport { hljs };\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { Card, CardContent } from \"@userorbit/ui\";\nimport * as React from \"react\";\nimport { Logger } from \"../../../lib/logger\";\nimport { createArticleVote, deleteArticleVote, fetchArticleVoteInfo } from \"../api-utils\";\n\nconst logger = Logger.getInstance();\n\ntype VoteValue = -1 | 0 | 1;\n\ninterface ArticleVoteProps {\n  articleId: string;\n  subscriberCode?: string;\n}\n\ninterface ArticleVoteData {\n  helpfulCount: number;\n  notHelpfulCount: number;\n  totalCount: number;\n  isSubscriberVoted: boolean;\n  userVote: number | string | null;\n}\n\ninterface ArticleVoteResponse {\n  data: ArticleVoteData;\n  status: number;\n  ok: boolean;\n}\n\ninterface VoteButtonProps {\n  vote: VoteValue;\n  selectedVote: number | null;\n  onClick: (vote: VoteValue) => void;\n  emoji: string;\n  label: string;\n  ariaLabel: string;\n  disabled?: boolean;\n}\n\nconst VOTE_VALUES: VoteValue[] = [-1, 0, 1];\nconst VOTE_EMOJIS: Record<VoteValue, string> = {\n  [-1]: \"😞\",\n  [0]: \"😐\",\n  [1]: \"😊\",\n};\nconst VOTE_LABELS: Record<VoteValue, string> = {\n  [-1]: \"Not helpful\",\n  [0]: \"Neutral\",\n  [1]: \"Helpful\",\n};\n\nconst VoteButton: React.FC<VoteButtonProps> = ({\n  vote,\n  selectedVote,\n  onClick,\n  emoji,\n  label,\n  ariaLabel,\n  disabled = false,\n}) => {\n  const isSelected = selectedVote === vote;\n  const hasOtherVote = selectedVote !== null && selectedVote !== vote;\n\n  return (\n    <button\n      type=\"button\"\n      onClick={() => onClick(vote)}\n      disabled={disabled}\n      className={`group flex flex-col items-center gap-2 rounded-lg bg-transparent p-3 transition-all ${\n        disabled\n          ? \"cursor-not-allowed opacity-50\"\n          : isSelected\n            ? \"scale-110\"\n            : hasOtherVote\n              ? \"opacity-50 grayscale\"\n              : \"hover:scale-110\"\n      }`}\n      aria-label={ariaLabel}\n    >\n      <span\n        className={`text-lg transition-all ${\n          isSelected ? \"scale-110\" : \"group-hover:scale-110 group-hover:brightness-110\"\n        }`}\n        role=\"img\"\n        aria-label={label}\n      >\n        {emoji}\n      </span>\n    </button>\n  );\n};\n\nconst ArticleVote: React.FC<ArticleVoteProps> = ({ articleId, subscriberCode }) => {\n  const queryClient = useQueryClient();\n\n  const { data } = useQuery<ArticleVoteResponse>({\n    queryKey: [\"articleVote\", articleId],\n    queryFn: async () => {\n      return await fetchArticleVoteInfo(articleId, subscriberCode);\n    },\n    enabled: !!articleId,\n  });\n\n  const selectedVote = data?.data?.userVote != null ? Number(data.data.userVote) : null;\n\n  const { mutate: createVote, isPending: isCreating } = useMutation<\n    { data: { value: string } },\n    unknown,\n    VoteValue\n  >({\n    mutationKey: [\"createArticleVote\", articleId],\n    mutationFn: async (vote: VoteValue) => {\n      return await createArticleVote(articleId, vote, subscriberCode);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({\n        queryKey: [\"articleVote\", articleId],\n      });\n    },\n    onError: () => {\n      logger.error(\"Failed to record your feedback. Please try again.\");\n    },\n  });\n\n  const { mutate: deleteVote, isPending: isDeleting } = useMutation({\n    mutationKey: [\"deleteArticleVote\", articleId],\n    mutationFn: async () => {\n      return await deleteArticleVote(articleId, subscriberCode);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({\n        queryKey: [\"articleVote\", articleId],\n      });\n    },\n    onError: () => {\n      logger.error(\"Failed to remove your vote. Please try again.\");\n    },\n  });\n\n  const handleVote = (vote: VoteValue) => {\n    if (selectedVote === vote) {\n      deleteVote();\n    } else {\n      createVote(vote);\n    }\n  };\n\n  const isPending = isCreating || isDeleting;\n\n  return (\n    <Card className=\"mt-8 border-t border-none border-neutral-100 bg-gray-50 dark:border-neutral-700 dark:bg-neutral-800\">\n      <CardContent className=\"pb-4 pt-5\">\n        <div className=\"flex flex-col items-center justify-center gap-4\">\n          <h3 className=\"mb-0 text-md font-medium text-gray-900 dark:text-gray-100\">\n            Did this answer your question?\n          </h3>\n          <div className=\"flex items-center gap-6\">\n            {VOTE_VALUES.map((vote) => (\n              <VoteButton\n                key={vote}\n                vote={vote}\n                selectedVote={selectedVote}\n                onClick={handleVote}\n                emoji={VOTE_EMOJIS[vote]}\n                label={VOTE_LABELS[vote]}\n                ariaLabel={VOTE_LABELS[vote]}\n                disabled={isPending}\n              />\n            ))}\n          </div>\n        </div>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default ArticleVote;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { ArticleLink } from \"@userorbit/ui\";\nimport * as React from \"react\";\nimport { fetchArticles } from \"../api-utils\";\n\nexport interface RelatedArticlesProps {\n  articleId: string;\n  collectionIds?: string[];\n  limit?: number;\n  subscriberCode?: string;\n  onArticleClick: (article: any) => void;\n  language?: string;\n}\n\nconst RelatedArticles: React.FC<RelatedArticlesProps> = ({\n  articleId,\n  collectionIds,\n  limit = 5,\n  subscriberCode,\n  onArticleClick,\n  language,\n}) => {\n  const { data: articlesData, isLoading } = useQuery({\n    queryKey: [\"articles\", collectionIds, subscriberCode, language],\n    queryFn: async () => {\n      const articleLists = await Promise.all(\n        (collectionIds || []).map(async (collectionId) => {\n          const response = await fetchArticles(\n            undefined,\n            limit + 1,\n            subscriberCode,\n            language,\n            collectionId,\n            true,\n          );\n          return response?.data || [];\n        }),\n      );\n      return articleLists.flat();\n    },\n    enabled: !!collectionIds && collectionIds.length > 0,\n    staleTime: 1000 * 60,\n  });\n\n  const articles = React.useMemo(() => {\n    if (!articlesData || !collectionIds || collectionIds.length === 0) return [];\n    const articleById = new Map<string, any>();\n\n    for (const article of articlesData) {\n      if (article.id !== articleId && !articleById.has(article.id)) {\n        articleById.set(article.id, article);\n      }\n    }\n\n    return Array.from(articleById.values()).slice(0, limit);\n  }, [articlesData, collectionIds, articleId, limit]);\n\n  if (isLoading || articles.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className=\"mb-8 mt-8 rounded-lg border border-gray-200 dark:border-neutral-800\">\n      <div className=\"mb-3 px-4 pl-5 pt-4 text-md font-semibold text-gray-900 dark:text-white\">\n        Related Articles\n      </div>\n      <div className=\"space-y-0 px-2 pb-6\">\n        {articles.map((article) => (\n          <ArticleLink\n            key={article.id}\n            onClick={() => onArticleClick(article)}\n            className=\"font-sans\"\n            iconContainerClassName=\"-mt-4\"\n          >\n            {article.title}\n          </ArticleLink>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default RelatedArticles;\n","import {\n  IconBrandFacebook,\n  IconBrandLinkedin,\n  IconBrandTwitter,\n  IconCopy,\n  IconShare,\n} from \"@tabler/icons-react\";\nimport { Button } from \"@userorbit/ui\";\nimport * as React from \"react\";\nimport { Logger } from \"../../../lib/logger\";\n\nconst logger = Logger.getInstance();\n\ninterface ShareMenuProps {\n  articleUrl: string;\n  articleTitle: string;\n  subdomain?: string;\n}\n\nconst ShareMenu: React.FC<ShareMenuProps> = ({ articleUrl, articleTitle, subdomain }) => {\n  const [copied, setCopied] = React.useState(false);\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  const pageUrl = subdomain\n    ? `https://${subdomain}.userorbit.com${articleUrl}`\n    : typeof window !== \"undefined\"\n      ? window.location.href\n      : \"\";\n\n  const handleCopyLink = async () => {\n    try {\n      await navigator.clipboard.writeText(pageUrl);\n      setCopied(true);\n      setTimeout(() => setCopied(false), 2000);\n    } catch (err) {\n      logger.error(\"Failed to copy link:\", err);\n    }\n  };\n\n  const twitterShare = () => {\n    const twitterWindow = window.open(\n      `https://twitter.com/intent/tweet?text=${encodeURIComponent(articleTitle)}&url=${encodeURIComponent(pageUrl)}`,\n      \"twitter-popup\",\n      \"height=350,width=600\",\n    );\n    if (twitterWindow?.focus) {\n      twitterWindow.focus();\n    }\n  };\n\n  const facebookShare = () => {\n    const facebookWindow = window.open(\n      `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(pageUrl)}`,\n      \"facebook-popup\",\n      \"height=350,width=600\",\n    );\n    if (facebookWindow?.focus) {\n      facebookWindow.focus();\n    }\n  };\n\n  const linkedInShare = () => {\n    const linkedInWindow = window.open(\n      `http://www.linkedin.com/shareArticle?mini=true&url=${encodeURIComponent(pageUrl)}&title=${encodeURIComponent(articleTitle)}`,\n      \"linkedin-popup\",\n      \"height=350,width=600\",\n    );\n    if (linkedInWindow?.focus) {\n      linkedInWindow.focus();\n    }\n  };\n\n  return (\n    <div className=\"relative\">\n      <Button\n        variant=\"plain\"\n        onClick={() => setIsOpen(!isOpen)}\n        iconOnly={<IconShare size={17} />}\n        accessibilityLabel=\"Share\"\n        className=\"cursor-pointer bg-transparent text-neutral-500 transition-colors hover:bg-neutral-500 hover:text-white dark:text-neutral-700 dark:hover:bg-neutral-400 dark:hover:text-black\"\n        tooltip=\"Share\"\n      />\n      {isOpen && (\n        <>\n          <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n          <div className=\"absolute right-0 top-8 z-20 flex flex-col gap-2 rounded-lg border border-neutral-200 bg-white p-2 shadow-lg dark:border-neutral-700 dark:bg-neutral-900\">\n            <button\n              onClick={facebookShare}\n              className=\"flex cursor-pointer items-center gap-2 rounded bg-transparent px-3 py-2 text-md text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-800\"\n            >\n              <IconBrandFacebook className=\"h-5 w-5 text-blue-600\" />\n              Facebook\n            </button>\n            <button\n              onClick={twitterShare}\n              className=\"flex cursor-pointer items-center gap-2 rounded bg-transparent px-3 py-2 text-md text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-800\"\n            >\n              <IconBrandTwitter className=\"h-5 w-5\" />\n              Twitter\n            </button>\n            <button\n              onClick={linkedInShare}\n              className=\"flex cursor-pointer items-center gap-2 rounded bg-transparent px-3 py-2 text-md text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-800\"\n            >\n              <IconBrandLinkedin className=\"h-5 w-5 text-blue-700\" />\n              LinkedIn\n            </button>\n            <button\n              onClick={handleCopyLink}\n              className=\"flex cursor-pointer items-center gap-2 rounded bg-transparent px-3 py-2 text-md text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-800\"\n            >\n              <IconCopy className=\"h-4 w-4\" />\n              {copied ? \"Copied!\" : \"Copy link\"}\n            </button>\n          </div>\n        </>\n      )}\n    </div>\n  );\n};\n\nexport default ShareMenu;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { renderInteractiveDemoEmbeds } from \"@userorbit/utils/interactive-demo\";\nimport { getCodeBlockLanguageInfo } from \"../../../lib/code-block-language\";\nimport { hljs } from \"../../../lib/syntax-highlighting\";\nimport * as React from \"react\";\nimport { fetchArticleById, trackHelpCenterEvent } from \"../api-utils\";\nimport { renderMarkdown } from \"../ask-ai-content/markdown\";\nimport { DetailPageLoader } from \"../feedback-skeleton\";\nimport ArticleVote from \"./article-vote\";\nimport RelatedArticles from \"./related-articles\";\nimport ShareMenu from \"./share-menu\";\n\nconst copyCodeIcon = [\n  '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" color=\"currentColor\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">',\n  '<path d=\"M7 11V9C7 5.70017 7 4.05025 8.02513 3.02513C9.05025 2 10.7002 2 14 2C17.2998 2 18.9497 2 19.9749 3.02513C21 4.05025 21 5.70017 21 9V11C21 14.2998 21 15.9497 19.9749 16.9749C18.9497 18 17.2998 18 14 18C10.7002 18 9.05025 18 8.02513 16.9749C7 15.9497 7 14.2998 7 11Z\" />',\n  '<path d=\"M3 6V15C3 18.2998 3 19.9497 4.02513 20.9749C5.05025 22 6.70017 22 10 22H17\" />',\n  \"</svg>\",\n].join(\"\");\n\nconst copiedCodeIcon = [\n  '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" color=\"currentColor\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">',\n  '<path d=\"M5 13L9 17L19 7\" />',\n  \"</svg>\",\n].join(\"\");\n\nconst HTML_BLOCK_TAG_PATTERN =\n  /<\\/?(p|div|h[1-6]|ul|ol|li|table|thead|tbody|tr|td|th|blockquote|pre|section|article|figure|iframe|hr)[\\s>/]/i;\n\nconst IMAGE_ASPECT_RATIO_ATTRIBUTES = [\n  \"aspectratio\",\n  \"aspectRatio\",\n  \"data-aspectratio\",\n  \"data-aspect-ratio\",\n] as const;\nconst FALLBACK_IMAGE_ASPECT_RATIO = 2;\n\nfunction configureCodeCopyButton(button: HTMLButtonElement) {\n  button.innerHTML = copyCodeIcon;\n  button.title = \"Copy\";\n  button.setAttribute(\"aria-label\", \"Copy code\");\n}\n\nfunction showCodeCopied(button: HTMLButtonElement) {\n  button.innerHTML = copiedCodeIcon;\n  button.title = \"Copied\";\n  button.setAttribute(\"aria-label\", \"Copied\");\n  button.dataset.copied = \"true\";\n  window.setTimeout(() => {\n    configureCodeCopyButton(button);\n    delete button.dataset.copied;\n  }, 1600);\n}\n\nfunction getImageAspectRatio(image: HTMLImageElement): number {\n  const aspectRatio = IMAGE_ASPECT_RATIO_ATTRIBUTES.map((attribute) =>\n    image.getAttribute(attribute),\n  )\n    .map((value) => (value ? Number.parseFloat(value) : Number.NaN))\n    .find((value) => Number.isFinite(value) && value > 0);\n\n  return aspectRatio || FALLBACK_IMAGE_ASPECT_RATIO;\n}\n\nfunction frameArticleImages(body: HTMLElement) {\n  body.querySelectorAll<HTMLImageElement>(\"img\").forEach((image) => {\n    if (image.closest('[data-name=\"frame\"], .uo-image-frame')) return;\n\n    const frame = document.createElement(\"div\");\n    frame.dataset.name = \"frame\";\n    frame.className = \"uo-image-frame\";\n    frame.style.setProperty(\"--uo-image-aspect-ratio\", `${getImageAspectRatio(image)} / 1`);\n\n    const content = document.createElement(\"div\");\n    content.className = \"uo-image-frame-content\";\n\n    image.parentNode?.insertBefore(frame, image);\n    content.append(image);\n    frame.append(content);\n  });\n}\n\nfunction prepareWidgetArticleHtml(text: string): string {\n  if (!text) return \"\";\n\n  const isHtmlContent = HTML_BLOCK_TAG_PATTERN.test(text);\n  const normalizedText = isHtmlContent || text.includes(\"\\n\") ? text : text.replace(/\\\\n/g, \"\\n\");\n  const html = isHtmlContent ? normalizedText : renderMarkdown(normalizedText);\n  const articleHtml = renderInteractiveDemoEmbeds(html);\n\n  if (typeof DOMParser === \"undefined\") {\n    return articleHtml;\n  }\n\n  const doc = new DOMParser().parseFromString(articleHtml, \"text/html\");\n\n  doc.body.querySelectorAll(\"img\").forEach((image) => {\n    image.setAttribute(\"decoding\", \"async\");\n\n    const aspectRatio = IMAGE_ASPECT_RATIO_ATTRIBUTES.map((attribute) =>\n      image.getAttribute(attribute),\n    )\n      .map((value) => (value ? Number.parseFloat(value) : Number.NaN))\n      .find((value) => Number.isFinite(value) && value > 0);\n\n    if (!aspectRatio) {\n      return;\n    }\n\n    const width = Number.parseFloat(image.getAttribute(\"width\") || \"\");\n    if (!image.getAttribute(\"height\") && Number.isFinite(width) && width > 0) {\n      image.setAttribute(\"height\", `${Math.round(width / aspectRatio)}`);\n    }\n\n    image.style.setProperty(\"aspect-ratio\", `${aspectRatio} / 1`);\n    image.style.setProperty(\"display\", \"block\");\n    image.style.setProperty(\"height\", \"auto\");\n    image.style.setProperty(\"background\", \"var(--unh-bg-subtle)\");\n  });\n\n  return doc.body.innerHTML;\n}\n\ninterface HelpCenterArticleProps {\n  articleId: string;\n  subscriberCode?: string;\n  subdomain?: string;\n  onArticleClick: (article: any) => void;\n  primaryColor?: string;\n  language?: string;\n}\n\nconst HelpCenterArticle: React.FC<HelpCenterArticleProps> = ({\n  articleId,\n  subscriberCode,\n  subdomain,\n  onArticleClick,\n  primaryColor = \"#3912e4\",\n  language,\n}) => {\n  const { data: articleData, isLoading: isLoadingArticle } = useQuery({\n    queryKey: [\"article\", articleId, subscriberCode, language],\n    queryFn: async () => {\n      const response = await fetchArticleById(articleId, subscriberCode, language);\n      return response?.data;\n    },\n    staleTime: 1000 * 60 * 5,\n  });\n\n  React.useEffect(() => {\n    if (articleData?.id)\n      trackHelpCenterEvent(\n        \"article_view\",\n        { articleId: articleData.id, language: articleData.language || language },\n        subscriberCode,\n      );\n  }, [articleData?.id, articleData?.language, language, subscriberCode]);\n\n  const collections = React.useMemo(() => {\n    if (!articleData?.collections || !Array.isArray(articleData.collections)) return [];\n    return articleData.collections;\n  }, [articleData?.collections]);\n\n  const articleHtml = React.useMemo(\n    () => prepareWidgetArticleHtml(articleData?.text || \"\"),\n    [articleData?.text],\n  );\n  const articleInnerHtml = React.useMemo(() => ({ __html: articleHtml }), [articleHtml]);\n  const articleBodyRef = React.useRef<HTMLDivElement>(null);\n  const selectedTabsRef = React.useRef(new Map<number, string>());\n  const selectedTabsArticleIdRef = React.useRef(articleId);\n\n  React.useLayoutEffect(() => {\n    if (selectedTabsArticleIdRef.current !== articleId) {\n      selectedTabsArticleIdRef.current = articleId;\n      selectedTabsRef.current.clear();\n      return;\n    }\n\n    const body = articleBodyRef.current;\n    if (!body || selectedTabsRef.current.size === 0) return;\n\n    body\n      .querySelectorAll<HTMLElement>('[data-type=\"imported-tabs\"]')\n      .forEach((tabs, groupIndex) => {\n        const selectedTitle = selectedTabsRef.current.get(groupIndex);\n        if (!selectedTitle) return;\n\n        const tabItems = Array.from(\n          tabs.querySelectorAll<HTMLElement>(':scope > [data-type=\"imported-tab\"]'),\n        );\n        const selectedTab = tabItems.find(\n          (tab) =>\n            tab.querySelector(\":scope > h3:first-child\")?.textContent?.trim() === selectedTitle,\n        );\n\n        if (!selectedTab) {\n          selectedTabsRef.current.delete(groupIndex);\n          return;\n        }\n\n        tabItems.forEach((tab) => tab.classList.toggle(\"is-active\", tab === selectedTab));\n      });\n  });\n\n  React.useEffect(() => {\n    const body = articleBodyRef.current;\n    if (!body) return;\n\n    frameArticleImages(body);\n\n    body.querySelectorAll<HTMLElement>('[data-type=\"imported-tabs\"]').forEach((tabs) => {\n      const activeTab = tabs.querySelector<HTMLElement>(\n        ':scope > [data-type=\"imported-tab\"].is-active',\n      );\n      const firstTab = tabs.querySelector<HTMLElement>(':scope > [data-type=\"imported-tab\"]');\n      if (!activeTab && firstTab) {\n        firstTab.classList.add(\"is-active\");\n      }\n\n      if (\n        tabs.dataset.component === \"code-group\" &&\n        !tabs.querySelector(':scope > button[data-code-group-copy=\"true\"]')\n      ) {\n        const copyButton = document.createElement(\"button\");\n        copyButton.type = \"button\";\n        copyButton.className = \"code-group-copy\";\n        copyButton.dataset.codeGroupCopy = \"true\";\n        configureCodeCopyButton(copyButton);\n        tabs.append(copyButton);\n      }\n    });\n\n    body.querySelectorAll<HTMLElement>(\"pre\").forEach((pre) => {\n      const code = pre.querySelector<HTMLElement>(\"code\");\n\n      if (code && !pre.querySelector(':scope > span[data-code-block-language=\"true\"]')) {\n        const { classLanguage, label } = getCodeBlockLanguageInfo({\n          className: code.className,\n          code: code.innerText,\n        });\n\n        if (!code.classList.contains(`language-${classLanguage}`)) {\n          code.classList.add(`language-${classLanguage}`);\n        }\n\n        const languageLabel = document.createElement(\"span\");\n        languageLabel.className = \"code-block-language\";\n        languageLabel.dataset.codeBlockLanguage = \"true\";\n        languageLabel.textContent = label;\n        pre.append(languageLabel);\n      }\n\n      if (!pre.querySelector(':scope > button[data-code-block-copy=\"true\"]')) {\n        const copyButton = document.createElement(\"button\");\n        copyButton.type = \"button\";\n        copyButton.className = \"code-block-copy\";\n        copyButton.dataset.codeBlockCopy = \"true\";\n        configureCodeCopyButton(copyButton);\n        pre.append(copyButton);\n      }\n    });\n\n    body.querySelectorAll<HTMLElement>(\"pre code\").forEach((code) => {\n      if (code.dataset.highlighted === \"yes\") return;\n      if (!/\\blanguage-[a-z0-9_-]+\\b/i.test(code.className)) {\n        code.classList.add(\"language-typescript\");\n      }\n      hljs.highlightElement(code);\n    });\n\n    const handleClick = (event: MouseEvent) => {\n      const target = event.target instanceof Element ? event.target : null;\n      const copyButton = target?.closest<HTMLButtonElement>('[data-code-group-copy=\"true\"]');\n      if (copyButton) {\n        const codeGroup = copyButton.closest<HTMLElement>(\n          '[data-type=\"imported-tabs\"][data-component=\"code-group\"]',\n        );\n        const code = codeGroup?.querySelector<HTMLElement>(\n          ':scope > [data-type=\"imported-tab\"].is-active pre code',\n        );\n\n        if (code?.innerText) {\n          void navigator.clipboard?.writeText(code.innerText);\n          showCodeCopied(copyButton);\n        }\n        return;\n      }\n\n      const blockCopyButton = target?.closest<HTMLButtonElement>('[data-code-block-copy=\"true\"]');\n      if (blockCopyButton) {\n        const code = blockCopyButton\n          .closest<HTMLElement>(\"pre\")\n          ?.querySelector<HTMLElement>(\"code\");\n\n        if (code?.innerText) {\n          void navigator.clipboard?.writeText(code.innerText);\n          showCodeCopied(blockCopyButton);\n        }\n        return;\n      }\n\n      const tabTitle = target?.closest('[data-type=\"imported-tab\"] > h3:first-child');\n      if (!tabTitle) return;\n\n      const tab = tabTitle.closest<HTMLElement>('[data-type=\"imported-tab\"]');\n      const tabs = tab?.closest<HTMLElement>('[data-type=\"imported-tabs\"]');\n      if (!tab || !tabs) return;\n\n      const groupIndex = Array.from(\n        body.querySelectorAll<HTMLElement>('[data-type=\"imported-tabs\"]'),\n      ).indexOf(tabs);\n      const selectedTitle = tabTitle.textContent?.trim();\n      if (groupIndex >= 0 && selectedTitle) {\n        selectedTabsRef.current.set(groupIndex, selectedTitle);\n      }\n\n      tabs.querySelectorAll<HTMLElement>(':scope > [data-type=\"imported-tab\"]').forEach((child) => {\n        child.classList.toggle(\"is-active\", child === tab);\n      });\n    };\n\n    body.addEventListener(\"click\", handleClick);\n    return () => {\n      body.removeEventListener(\"click\", handleClick);\n    };\n  }, [articleHtml]);\n\n  if (isLoadingArticle || !articleData) {\n    return <DetailPageLoader />;\n  }\n\n  const articleUrl = articleData.url || `/help-center/${articleData.url || articleData.id}`;\n\n  return (\n    <div className=\"h-full overflow-y-auto bg-white px-4 py-6 dark:bg-neutral-950\">\n      <article className=\"relative flex px-1 min-w-0 flex-1 flex-col gap-6 overflow-hidden\">\n        <div className=\"post-content px-2 py-3\">\n          <div className=\"mb-4 flex items-start justify-between gap-x-1\">\n            <div className=\"flex w-full flex-col gap-y-2\">\n              {collections.length > 0 && (\n                <nav\n                  className=\"mb-0 flex items-center gap-2 text-md font-medium\"\n                  style={{ color: primaryColor }}\n                >\n                  {collections.map((collection: any, index: number) => (\n                    <React.Fragment key={collection.id}>\n                      {index > 0 && <span className=\"opacity-60\">/</span>}\n                      <span>{collection.name}</span>\n                    </React.Fragment>\n                  ))}\n                </nav>\n              )}\n              <div className=\"a-postMeta flex items-start justify-between\">\n                <h2 className=\"text-black dark:text-white m-0 text-[1.3rem] font-bold no-underline\">\n                  {articleData.title}\n                </h2>\n                <div className=\"flex items-center gap-2\">\n                  <ShareMenu\n                    articleUrl={articleUrl}\n                    articleTitle={articleData.title}\n                    subdomain={subdomain}\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"post-body\">\n            <div className=\"prose prose-post dark:prose-invert prose-headings:relative prose-headings:scroll-mt-20 prose-headings:font-display prose-a:font-medium prose-a:text-gray-500 prose-a:underline-offset-4 hover:prose-a:text-black prose-thead:text-lg mx-1 max-w-none text-md transition-all lg:mx-0\">\n              <div ref={articleBodyRef} className=\"announcement__text-preview\">\n                <div dangerouslySetInnerHTML={articleInnerHtml} />\n              </div>\n            </div>\n          </div>\n        </div>\n\n        {collections.length > 0 && (\n          <RelatedArticles\n            articleId={articleData.id}\n            collectionIds={collections.map((c: any) => c.id)}\n            subscriberCode={subscriberCode}\n            onArticleClick={onArticleClick}\n            language={language}\n          />\n        )}\n\n        <ArticleVote articleId={articleData.id} subscriberCode={subscriberCode} />\n      </article>\n    </div>\n  );\n};\n\nexport default HelpCenterArticle;\n","import {\n  IconAlertCircle,\n  IconAnchor,\n  IconArrowDown,\n  IconArrowLeft,\n  IconArrowNarrowDown,\n  IconArrowNarrowLeft,\n  IconArrowNarrowRight,\n  IconArrowNarrowUp,\n  IconArrowRight,\n  IconArrowUp,\n  IconBarcode,\n  IconBarcodeOff,\n  IconBattery,\n  IconBell,\n  IconBook,\n  IconBrain,\n  IconBriefcase,\n  IconBrush,\n  IconBug,\n  IconCalendar,\n  IconCamera,\n  IconChartArea,\n  IconChartBar,\n  IconChartLine,\n  IconChartPie,\n  IconCheck,\n  IconChevronDown,\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronUp,\n  IconClipboard,\n  IconCloud,\n  IconCode,\n  IconCompass,\n  IconCpu,\n  IconCreditCard,\n  IconCup,\n  IconCurrencyDollar,\n  IconDatabase,\n  IconDots,\n  IconDotsVertical,\n  IconDownload,\n  IconDroplet,\n  IconEdit,\n  IconEye,\n  IconFile,\n  IconFlame,\n  IconFlask,\n  IconFlower,\n  IconFolder,\n  IconFolderOpen,\n  IconGift,\n  IconGlobe,\n  IconGrid3x3,\n  IconGripHorizontal,\n  IconHeadphones,\n  IconHeart,\n  IconHome,\n  IconKey,\n  IconList,\n  IconLocation,\n  IconLock,\n  IconLockOpen2,\n  IconMail,\n  IconMapPin,\n  IconMenu,\n  IconMessage,\n  IconMicrophone,\n  IconMicrophoneOff,\n  IconMinus,\n  IconMoon,\n  IconMusic,\n  IconMusicOff,\n  IconNote,\n  IconPalette,\n  IconPaw,\n  IconPencil,\n  IconPhone,\n  IconPhoto,\n  IconPlane,\n  IconPlant,\n  IconPlayerPause,\n  IconPlayerPlay,\n  IconPlayerSkipBack,\n  IconPlayerSkipForward,\n  IconPlus,\n  IconRepeat,\n  IconRocket,\n  IconScale,\n  IconSearch,\n  IconSettings,\n  IconShield,\n  IconShoppingCart,\n  IconSpeakerphone,\n  IconStar,\n  IconStethoscope,\n  IconSun,\n  IconTag,\n  IconTerminal,\n  IconThumbDown,\n  IconThumbUp,\n  IconTool,\n  IconTrash,\n  IconUpload,\n  IconUser,\n  IconUsers,\n  IconVolume,\n  IconVolumeOff,\n  IconWifi,\n  IconWorld,\n  IconX,\n  type Icon,\n} from \"@tabler/icons-react\";\n\nexport type TablerIconComponent = Icon;\n\nexport const DEFAULT_TABLER_ICON: TablerIconComponent = IconBook;\n\nconst TABLER_ICON_MAP: Record<string, TablerIconComponent> = {\n  IconAlertCircle,\n  IconAnchor,\n  IconArrowDown,\n  IconArrowLeft,\n  IconArrowNarrowDown,\n  IconArrowNarrowLeft,\n  IconArrowNarrowRight,\n  IconArrowNarrowUp,\n  IconArrowRight,\n  IconArrowUp,\n  IconBarcode,\n  IconBarcodeOff,\n  IconBattery,\n  IconBell,\n  IconBook,\n  IconBrain,\n  IconBriefcase,\n  IconBrush,\n  IconBug,\n  IconCalendar,\n  IconCamera,\n  IconChartArea,\n  IconChartBar,\n  IconChartLine,\n  IconChartPie,\n  IconCheck,\n  IconChevronDown,\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronUp,\n  IconClipboard,\n  IconCloud,\n  IconCode,\n  IconCompass,\n  IconCpu,\n  IconCreditCard,\n  IconCup,\n  IconCurrencyDollar,\n  IconDatabase,\n  IconDots,\n  IconDotsVertical,\n  IconDownload,\n  IconDroplet,\n  IconEdit,\n  IconEye,\n  IconFile,\n  IconFlame,\n  IconFlask,\n  IconFlower,\n  IconFolder,\n  IconFolderOpen,\n  IconGift,\n  IconGlobe,\n  IconGrid3x3,\n  IconGripHorizontal,\n  IconHeadphones,\n  IconHeart,\n  IconHome,\n  IconKey,\n  IconList,\n  IconLocation,\n  IconLock,\n  IconLockOpen2,\n  IconMail,\n  IconMapPin,\n  IconMenu,\n  IconMessage,\n  IconMicrophone,\n  IconMicrophoneOff,\n  IconMinus,\n  IconMoon,\n  IconMusic,\n  IconMusicOff,\n  IconNote,\n  IconPalette,\n  IconPaw,\n  IconPencil,\n  IconPhone,\n  IconPhoto,\n  IconPlane,\n  IconPlant,\n  IconPlayerPause,\n  IconPlayerPlay,\n  IconPlayerSkipBack,\n  IconPlayerSkipForward,\n  IconPlus,\n  IconRepeat,\n  IconRocket,\n  IconScale,\n  IconSearch,\n  IconSettings,\n  IconShield,\n  IconShoppingCart,\n  IconSpeakerphone,\n  IconStar,\n  IconStethoscope,\n  IconSun,\n  IconTag,\n  IconTerminal,\n  IconThumbDown,\n  IconThumbUp,\n  IconTool,\n  IconTrash,\n  IconUpload,\n  IconUser,\n  IconUsers,\n  IconVolume,\n  IconVolumeOff,\n  IconWifi,\n  IconWorld,\n  IconX,\n};\n\nexport function getTablerIconByName(name: string): TablerIconComponent | null {\n  return TABLER_ICON_MAP[name] || null;\n}\n\nexport function normalizeTablerIconName(name: string): string {\n  if (name.startsWith(\"Icon\")) {\n    return name;\n  }\n\n  const pascalCase = name\n    .replace(/[-_]/g, \" \")\n    .replace(/\\b\\w/g, (char) => char.toUpperCase())\n    .replace(/\\s+/g, \"\");\n\n  return `Icon${pascalCase}`;\n}\n\nexport function getNormalizedTablerIcon(\n  name: string | undefined,\n  fallback: TablerIconComponent = DEFAULT_TABLER_ICON,\n): TablerIconComponent {\n  if (!name) {\n    return fallback;\n  }\n\n  return getTablerIconByName(normalizeTablerIconName(name.trim())) || fallback;\n}\n","import type * as React from \"react\";\nimport { getNormalizedTablerIcon } from \"../tabler-icon-map\";\n\nexport const getCollectionIcon = (iconName: string | undefined): React.ComponentType<any> =>\n  getNormalizedTablerIcon(iconName);\n","import { trackHelpCenterSearchClick } from \"../api-utils\";\nimport { IconSearch } from \"@tabler/icons-react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { ArticleLink } from \"@userorbit/ui\";\nimport { motion } from \"framer-motion\";\nimport { Inbox } from \"lucide-react\";\nimport * as React from \"react\";\nimport { fetchArticleCollection, fetchArticles, searchArticles } from \"../api-utils\";\nimport { CollectionPageSkeleton } from \"../feedback-skeleton\";\nimport { getCollectionIcon } from \"./icon-utils\";\n\ninterface HelpCenterCollectionProps {\n  collectionId: string;\n  subscriberCode?: string;\n  onArticleClick: (article: any) => void;\n  onBack: () => void;\n  language?: string;\n}\n\nconst HelpCenterCollection: React.FC<HelpCenterCollectionProps> = ({\n  collectionId,\n  subscriberCode,\n  onArticleClick,\n  language,\n}) => {\n  const [searchQuery, setSearchQuery] = React.useState(\"\");\n  const [debouncedSearchQuery, setDebouncedSearchQuery] = React.useState(\"\");\n  const [searchInputValue, setSearchInputValue] = React.useState(\"\");\n  const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n  React.useEffect(() => {\n    const timer = setTimeout(() => {\n      setDebouncedSearchQuery(searchQuery);\n    }, 500);\n\n    return () => clearTimeout(timer);\n  }, [searchQuery]);\n\n  React.useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n        e.preventDefault();\n        e.stopPropagation();\n        if (searchInputRef.current) {\n          searchInputRef.current.focus();\n          searchInputRef.current.select();\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, []);\n\n  const { data: collectionData, isLoading: isLoadingCollection } = useQuery({\n    queryKey: [\"article-collection\", collectionId, subscriberCode, language],\n    queryFn: async () => {\n      const response = await fetchArticleCollection(collectionId, subscriberCode, language);\n      return response?.data;\n    },\n    staleTime: 1000 * 60 * 5,\n  });\n\n  const { data: articlesData, isLoading: isLoadingArticles } = useQuery({\n    queryKey: [\"articles\", collectionId, debouncedSearchQuery, subscriberCode, language],\n    queryFn: async () => {\n      if (debouncedSearchQuery) {\n        const response = await searchArticles(\n          debouncedSearchQuery,\n          25,\n          subscriberCode,\n          language,\n          collectionId,\n        );\n        return response?.data || [];\n      }\n\n      const response = await fetchArticles(\n        undefined,\n        100,\n        subscriberCode,\n        language,\n        collectionId,\n        true,\n      );\n      return response?.data || [];\n    },\n    staleTime: 1000 * 60,\n  });\n\n  const collectionArticles = React.useMemo(() => articlesData || [], [articlesData]);\n\n  if (isLoadingCollection || !collectionData) {\n    return <CollectionPageSkeleton />;\n  }\n\n  const CollectionIcon = getCollectionIcon(collectionData.icon);\n  const articleCount = collectionArticles.length;\n\n  return (\n    <div className=\"h-full bg-white px-4 py-6 dark:bg-neutral-950\">\n      <div className=\"mb-8\">\n        <div className=\"mb-8 flex flex-col items-center text-center\">\n          <div\n            className=\"mb-6 mt-12 flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-lg\"\n            style={{\n              backgroundColor: `${collectionData.color || \"#3912e4\"}20`,\n            }}\n          >\n            <CollectionIcon\n              className=\"h-6 w-6\"\n              style={{ color: collectionData.color || \"#3912e4\" }}\n            />\n          </div>\n          <h1 className=\"mb-2 mt-0 text-lg font-semibold text-gray-900 dark:text-neutral-100\">\n            {collectionData.name}\n          </h1>\n          {collectionData.description && (\n            <p className=\"mb-2 mt-0 text-md text-gray-600 dark:text-neutral-400\">\n              {collectionData.description}\n            </p>\n          )}\n          <p className=\"mx-2 text-md text-gray-600 dark:text-neutral-400\">\n            {articleCount} articles\n          </p>\n        </div>\n\n        <div className=\"mb-8 w-full\">\n          <div className=\"group relative flex w-full focus-within:outline-none\">\n            <IconSearch\n              className=\"pointer-events-none absolute inset-y-0 left-4 z-10 my-auto h-4 w-4 text-gray-500 dark:text-gray-400\"\n              strokeWidth={2}\n            />\n            <input\n              ref={searchInputRef}\n              id=\"collection-search-input\"\n              type=\"text\"\n              value={searchInputValue}\n              onChange={(e) => {\n                setSearchInputValue(e.target.value);\n                setSearchQuery(e.target.value);\n              }}\n              placeholder=\"Search for articles...\"\n              className=\"w-full rounded-xl border-0 bg-gray-100 p-3 pl-12 pr-20 text-left text-neutral-700 transition-colors focus:outline-none focus:ring-2 focus:ring-gray-300 dark:bg-neutral-800 dark:text-neutral-300\"\n            />\n            <span className=\"pointer-events-none absolute inset-y-0 right-4 my-auto h-5 text-md text-gray-400 dark:text-neutral-500\">\n              ⌘K\n            </span>\n          </div>\n        </div>\n      </div>\n\n      <motion.div\n        initial={{ y: 20, opacity: 0 }}\n        animate={{ y: 0, opacity: 1 }}\n        exit={{ y: 20, opacity: 0 }}\n      >\n        {isLoadingArticles ? (\n          <div className=\"rounded-lg border border-gray-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-900\">\n            <div className=\"space-y-1\">\n              {Array.from({ length: 5 }).map((_, index) => (\n                <div key={index} className=\"flex items-center justify-between px-3 py-3\">\n                  <div className=\"h-4 w-3/4 animate-pulse rounded bg-neutral-200 dark:bg-neutral-700\" />\n                  <div className=\"h-4 w-4 animate-pulse rounded bg-neutral-200 dark:bg-neutral-700\" />\n                </div>\n              ))}\n            </div>\n          </div>\n        ) : collectionArticles.length > 0 ? (\n          <div className=\"rounded-lg border border-gray-200 bg-white p-2 dark:border-neutral-800 dark:bg-neutral-900\">\n            <div className=\"space-y-1\">\n              {collectionArticles.map((article: any) => (\n                <ArticleLink\n                  key={article.id}\n                  onClick={() => {\n                    trackHelpCenterSearchClick(article, subscriberCode);\n                    onArticleClick(article);\n                  }}\n                  className=\"w-full font-sans px-3 py-3 hover:bg-neutral-100 dark:hover:bg-neutral-800\"\n                >\n                  {article.title}\n                </ArticleLink>\n              ))}\n            </div>\n          </div>\n        ) : (\n          <div className=\"min-h-[400px] w-full\">\n            <div className=\"relative flex flex-col items-center justify-center space-y-6 rounded-lg border border-gray-200 bg-white pb-20 dark:border-neutral-800 dark:bg-neutral-900\">\n              <div className=\"text-center\">\n                <div className=\"mx-auto mt-20 h-10 w-10 text-gray-700\">\n                  <Inbox className=\"h-10 w-10 text-neutral-600 dark:text-neutral-300\" />\n                </div>\n                <div className=\"mt-4 text-md font-semibold text-neutral-600 dark:text-neutral-300\">\n                  No articles found\n                  {debouncedSearchQuery ? \" for your search\" : \"\"}.\n                </div>\n                <div className=\"mt-2 max-w-[420px] text-md font-medium leading-6 text-neutral-400 dark:text-neutral-500\">\n                  Check back later for more content.\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n      </motion.div>\n    </div>\n  );\n};\n\nexport default HelpCenterCollection;\n","import type { Icon } from \"@tabler/icons-react\";\nimport { getTablerIconByName, normalizeTablerIconName } from \"./tabler-icon-map\";\n\nexport function getIconByName(name: string): Icon | null {\n  return getTablerIconByName(normalizeTablerIconName(name.trim()));\n}\n","import {\n  IconCircle,\n  IconCircleCheck,\n  IconCircleDashed,\n  IconCircleDashedX,\n  IconClock,\n  IconLoader,\n  IconMessage,\n} from \"@tabler/icons-react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { FeedbackBoard } from \"@userorbit/ui\";\n\nimport React, { useMemo, useState } from \"react\";\nimport { fetchRoadmapViewItems } from \"../api-utils\";\nimport PostVote from \"../feedback-content/post-vote\";\nimport { RoadmapContentSkeleton } from \"../feedback-skeleton\";\nimport { IconRoadmap } from \"../icons\";\nimport { FeedbackQueryProvider } from \"../query-provider\";\nimport { RoadmapData, RoadmapViewColumn, RoadmapViewItem } from \"../use-roadmap-data\";\nimport { WidgetEmptyState } from \"../widget-empty-state\";\n\nconst COMPACT_VISIBLE_ITEMS = 3;\nconst DEFAULT_VISIBLE_ITEMS = 4;\n\nconst stageIcons: Record<string, React.ReactNode> = {\n  pending: <IconCircle className=\"h-4 w-4\" />,\n  review: <IconCircleDashed className=\"h-4 w-4\" />,\n  plan: <IconLoader className=\"h-4 w-4\" />,\n  progress: <IconClock className=\"h-4 w-4\" />,\n  done: <IconCircleCheck className=\"h-4 w-4\" />,\n  cancel: <IconCircleDashedX className=\"h-4 w-4\" />,\n};\n\nconst columnNameToIcon: Record<string, string> = {\n  \"in review\": \"review\",\n  planned: \"plan\",\n  \"in progress\": \"progress\",\n  completed: \"done\",\n  done: \"done\",\n  rejected: \"cancel\",\n  pending: \"pending\",\n};\n\nconst resolveColumnIcon = (icon?: string | null, name?: string) => {\n  if (icon && icon !== \"cube\" && stageIcons[icon]) return icon;\n  if (!name) return null;\n\n  return columnNameToIcon[name.toLowerCase().replace(/[-_]/g, \" \")] || null;\n};\n\nconst RoadmapItemComponent: React.FC<{\n  item: RoadmapViewItem;\n  onItemClick: (item: RoadmapViewItem) => void;\n  subscriberCode?: string;\n  isLast?: boolean;\n}> = ({ item, onItemClick, subscriberCode, isLast }) => {\n  return (\n    <div\n      className={`border-[var(--uo-muted)] flex w-full cursor-pointer flex-col items-stretch justify-between overflow-hidden border-solid transition-colors ${isLast ? \"\" : \"border-b\"}`}\n    >\n      <div className=\"flex items-center gap-x-2\">\n        <div className=\"flex min-w-0 flex-grow flex-col\" onClick={() => onItemClick(item)}>\n          <div className=\"flex flex-grow flex-col py-3 pr-2 pt-3\">\n            <h4 className=\"mb-0 mt-0 line-clamp-2 text-[0.92rem] font-[550] text-neutral-950 dark:text-white\">\n              {item.title}\n            </h4>\n            {item.text ? (\n              <p className=\"my-1 line-clamp-2 text-md text-gray-500 dark:text-gray-500\">\n                {item.text}\n              </p>\n            ) : null}\n          </div>\n        </div>\n\n        <div className=\"flex flex-shrink-0 items-center justify-center\">\n          <PostVote id={item.id} code={subscriberCode} votesCount={item.feedbackVotesCount || 0} />\n        </div>\n      </div>\n\n      <div className=\"relative flex items-center justify-start gap-x-2 pb-2 pr-3\">\n        <div className=\"flex min-w-0 items-center gap-2 text-sm text-gray-500 dark:text-gray-400\">\n          <span className=\"max-w-[140px] truncate font-medium\">\n            {item.subscriber?.name || item.subscriber?.email || \"Anonymous\"}\n          </span>\n        </div>\n        {item.board?.name ? (\n          <div className=\"action flex h-7 items-center rounded-full px-2.5 text-tertiary shadow-[inset_0_0_0_1px_var(--uo-muted)]\">\n            <div className=\"max-w-24 truncate text-sm font-medium capitalize leading-none\">\n              {item.board.name}\n            </div>\n          </div>\n        ) : null}\n        {(item.feedbackCommentsCount || 0) > 0 ? (\n          <div className=\"action flex h-7 items-center rounded-full px-2.5 text-tertiary shadow-[inset_0_0_0_1px_var(--uo-muted)]\">\n            <div className=\"flex items-center justify-center gap-1\">\n              <IconMessage size={14} />\n              <span className=\"text-sm\">{item.feedbackCommentsCount}</span>\n            </div>\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n};\n\nconst RoadmapStageSection: React.FC<{\n  column: RoadmapViewColumn;\n  onItemClick: (item: RoadmapViewItem) => void;\n  subscriberCode?: string;\n  isCompact?: boolean;\n}> = ({ column, onItemClick, subscriberCode, isCompact = false }) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const items = column.items || [];\n  const initialVisibleItems = isCompact ? COMPACT_VISIBLE_ITEMS : DEFAULT_VISIBLE_ITEMS;\n  const visibleItems = isExpanded ? items : items.slice(0, initialVisibleItems);\n  const hasMore = items.length > initialVisibleItems;\n  const iconKey = resolveColumnIcon(column.icon, column.name);\n  const stageColor = column.color || \"#64748b\";\n  const visibleCount = column.count || items.length;\n\n  return (\n    <section className=\"mb-8 last:mb-0\">\n      <div className=\"sticky top-0 z-10 -mx-4 mb-2 flex items-center gap-2 bg-neutral-50 px-4 py-3 dark:bg-gray-800 border border-b border-x-0 border-t-0 border-neutral-100 dark:border-gray-700/70\">\n        <span\n          className=\"flex h-5 w-5 shrink-0 items-center justify-center\"\n          style={{ color: stageColor }}\n        >\n          {iconKey && stageIcons[iconKey] ? (\n            stageIcons[iconKey]\n          ) : (\n            <span className=\"h-2.5 w-2.5 rounded-full\" style={{ backgroundColor: stageColor }} />\n          )}\n        </span>\n        <h3 className=\"m-0 min-w-0 truncate text-[0.92rem] font-semibold tracking-[-0.01em] text-neutral-950 dark:text-white\">\n          {column.name}\n        </h3>\n        <span\n          className=\"rounded-full px-1.5 py-0.5 font-mono text-[10px] font-semibold leading-none tabular-nums\"\n          style={{\n            backgroundColor: `${stageColor}18`,\n            boxShadow: `inset 0 0 0 1px ${stageColor}38`,\n            color: stageColor,\n          }}\n        >\n          {String(visibleCount).padStart(2, \"0\")}\n        </span>\n      </div>\n\n      {visibleItems.length > 0 ? (\n        <ul className=\"m-0 list-none p-0 pl-[3px]\">\n          {visibleItems.map((item, index) => {\n            const isLastVisible = index === visibleItems.length - 1;\n\n            return (\n              <li key={item.id} className=\"relative m-0 list-none p-0\">\n                <div className=\"flex items-start gap-2.5\">\n                  <span\n                    aria-hidden=\"true\"\n                    className=\"card-bg relative mt-[13px] inline-block h-[14px] w-[14px] shrink-0 rounded-full\"\n                  >\n                    <span\n                      className=\"absolute inset-[3px] rounded-full\"\n                      style={{ backgroundColor: stageColor }}\n                    />\n                  </span>\n                  <div className=\"min-w-0 flex-1\">\n                    <RoadmapItemComponent\n                      item={item}\n                      onItemClick={onItemClick}\n                      subscriberCode={subscriberCode}\n                      isLast={isLastVisible}\n                    />\n                  </div>\n                </div>\n              </li>\n            );\n          })}\n        </ul>\n      ) : (\n        <div className=\"mt-8 card-bg card-radius card-border flex min-h-[116px] items-center justify-center px-3 py-5 text-center text-[14px] font-medium text-neutral-500 dark:text-neutral-400\">\n          No items in {column.name}\n        </div>\n      )}\n\n      {hasMore ? (\n        <div className=\"mt-3 pl-[27px]\">\n          <button\n            type=\"button\"\n            className=\"text-sm font-medium text-neutral-500 transition-colors hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-white\"\n            onClick={() => setIsExpanded((current) => !current)}\n          >\n            {isExpanded ? \"Show less\" : \"Show more\"}\n          </button>\n        </div>\n      ) : null}\n    </section>\n  );\n};\n\ninterface RoadmapContentProps {\n  primaryColor?: string;\n  onItemClick: (item: RoadmapViewItem) => void;\n  subscriberCode?: string;\n  activeRoadmapId?: string;\n  isLoading?: boolean;\n  isCompact?: boolean;\n}\n\nconst RoadmapContentInner: React.FC<RoadmapContentProps> = ({\n  onItemClick,\n  subscriberCode,\n  activeRoadmapId = \"\",\n  isLoading = false,\n  isCompact = false,\n}) => {\n  const {\n    data: roadmapItemsResponse,\n    isLoading: roadmapItemsLoading,\n    error: roadmapItemsError,\n  } = useQuery({\n    queryKey: [\"roadmap-view-items\", activeRoadmapId, subscriberCode],\n    queryFn: () =>\n      fetchRoadmapViewItems({\n        id: activeRoadmapId,\n        token: subscriberCode,\n      }),\n    staleTime: 1000 * 60,\n    enabled: Boolean(activeRoadmapId),\n  });\n\n  const roadmapData = roadmapItemsResponse?.data as RoadmapData | undefined;\n  const columns = useMemo<RoadmapViewColumn[]>(() => {\n    const roadmapColumns = roadmapData?.columns || [];\n    return roadmapColumns.slice().sort((a, b) => a.position - b.position);\n  }, [roadmapData]);\n\n  if (roadmapItemsError) {\n    return (\n      <div className=\"h-full\">\n        <div className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-4 pb-10 pt-0\">\n          <div className=\"card-bg card-radius card-border flex flex-col items-center justify-center space-y-6 py-10 text-center\">\n            <h4 className=\"m-0 text-md font-medium text-red-500 dark:text-red-400\">\n              Failed to load roadmap data\n            </h4>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  if (isLoading) {\n    return (\n      <div className=\"h-full\">\n        <div className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-4 pb-10 pt-0\">\n          <RoadmapContentSkeleton />\n        </div>\n      </div>\n    );\n  }\n\n  if (!activeRoadmapId) {\n    return (\n      <div className=\"h-full\">\n        <div className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-4 pb-10 pt-0\">\n          <WidgetEmptyState\n            icon={<IconRoadmap className=\"h-10 w-10\" size={40} />}\n            title=\"No roadmap available\"\n            description=\"Check back later for updates on our roadmap\"\n          />\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"h-full\">\n      <div className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-4 pb-10 pt-0\">\n        {roadmapItemsLoading ? (\n          <RoadmapContentSkeleton />\n        ) : (\n          <div className=\"relative min-h-64 w-full text-[#14161a] dark:text-[#f7f7f7]\">\n            {columns.length > 0 ? (\n              columns.map((column) => (\n                <RoadmapStageSection\n                  key={column.id}\n                  column={column}\n                  onItemClick={onItemClick}\n                  subscriberCode={subscriberCode}\n                  isCompact={isCompact}\n                />\n              ))\n            ) : (\n              <FeedbackBoard\n                items={[]}\n                renderItem={() => null}\n                isLoading={false}\n                isError={Boolean(roadmapItemsError)}\n                emptyText=\"No roadmap items yet\"\n                emptyDescription=\"Planned work and product progress will appear here\"\n                emptyIcon={<IconRoadmap className=\"h-10 w-10\" size={40} />}\n                loadingText=\"Loading roadmap...\"\n                errorText=\"Failed to load roadmap\"\n              />\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst RoadmapContent: React.FC<RoadmapContentProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <RoadmapContentInner {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default RoadmapContent;\n","import React from \"react\";\nimport FeedbackDetail, { FeedbackData } from \"./feedback-detail\";\nimport { RoadmapViewItem } from \"./use-roadmap-data\";\n\ninterface RoadmapDetailProps {\n  item: RoadmapViewItem;\n  subscriberCode?: string;\n  onBack: () => void;\n}\n\nconst RoadmapDetail: React.FC<RoadmapDetailProps> = ({ item, subscriberCode }) => {\n  if (!item) {\n    return null;\n  }\n\n  const feedback: FeedbackData = {\n    id: item.id,\n    title: item.title,\n    text: item.text,\n    createdAt: item.createdAt,\n    feedbackVotesCount: item.feedbackVotesCount || 0,\n    feedbackCommentsCount: item.feedbackCommentsCount || 0,\n    status: item.status,\n    subscriber: item.subscriber,\n    meta: {\n      ...item.meta,\n      updatedAt: item.updatedAt,\n    },\n    boardId: item.boardId || item.board?.id,\n    board: item.board,\n  };\n\n  return <FeedbackDetail feedback={feedback} subscriberCode={subscriberCode} />;\n};\n\nexport default RoadmapDetail;\n","import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement> & { strokeWidth?: number; size?: string | number };\n\nfunction IconBookOpenOutlineDuo18({ strokeWidth = 1.5, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        d=\"M8.99999 15.051C9.16999 15.051 9.33899 15.006 9.49399 14.917C10.137 14.546 11.226 14.07 12.635 14.072C13.534 14.073 14.302 14.269 14.905 14.507C15.553 14.762 16.249 14.267 16.249 13.57V4.48701C16.249 4.13301 16.068 3.80701 15.763 3.62701C15.126 3.25101 14.037 2.76401 12.623 2.76401C10.733 2.76401 9.42499 3.63601 8.99899 3.94601\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M8.99999 15.051C9.16999 15.051 9.33899 15.006 9.49399 14.917C10.137 14.546 11.226 14.07 12.635 14.072C13.534 14.073 14.302 14.269 14.905 14.507C15.553 14.762 16.249 14.267 16.249 13.57V4.48701C16.249 4.13301 16.068 3.80701 15.763 3.62701C15.126 3.25101 14.037 2.76401 12.623 2.76401C10.733 2.76401 9.42499 3.63601 8.99899 3.94601\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M9.00001 15.051C8.83001 15.051 8.66101 15.006 8.50601 14.917C7.86301 14.546 6.77401 14.07 5.36501 14.072C4.46601 14.073 3.69801 14.269 3.09501 14.507C2.44701 14.762 1.75101 14.27 1.75101 13.574C1.75101 10.981 1.75101 6.10201 1.75101 4.48401C1.75101 4.13001 1.93201 3.80801 2.23701 3.62801C2.87401 3.25201 3.96301 2.76501 5.37701 2.76501C7.26701 2.76501 8.57501 3.63701 9.00101 3.94701V15.051H9.00001Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nfunction IconLightbulb3OutlineDuo18({ strokeWidth = 1.5, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        opacity=\"0.3\"\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M7.97299 4.358C11.045 3.714 13.75 6.041 13.75 9C13.75 10.867 12.6695 12.475 11.1028 13.25H6.89719C5.11109 12.367 3.95699 10.399 4.31499 8.202C4.62299 6.315 6.10099 4.75 7.97299 4.358Z\"\n        fill=\"currentColor\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M9 0.75V1.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M14.834 3.16599L14.127 3.87299\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M17.25 9H16.25\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M3.16602 3.16599L3.87302 3.87299\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M0.75 9H1.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M13.75 8.99999C13.75 6.04069 11.0445 3.71348 7.97199 4.35818C6.09979 4.75108 4.62099 6.31669 4.31449 8.20489C3.93509 10.5427 5.26679 12.6193 7.24999 13.407V15.25C7.24999 16.0784 7.92159 16.75 8.74999 16.75H9.24999C10.0784 16.75 10.75 16.0784 10.75 15.25V13.407C12.505 12.71 13.75 11.004 13.75 8.99999Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M6.89697 13.25H11.103\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nfunction IconBullhornOutlineDuo18({ strokeWidth = 1.5, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M10 10.75C12.313 10.75 13.7417 13.25 13.7417 13.25V1.75C13.7417 1.75 12.312 4.25 10 4.25H5.75V10.75H10Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M8.805 10.75L9.787 15.397C9.901 15.937 9.556 16.468 9.015 16.582L8.037 16.789C7.497 16.903 6.966 16.558 6.852 16.017L5.75 10.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M13.75 13.25C13.75 13.25 11.813 10.75 9.5 10.75H5C3.205 10.75 1.75 9.295 1.75 7.5C1.75 5.705 3.205 4.25 5 4.25H9.5C11.812 4.25 13.75 1.75 13.75 1.75V13.25Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M5.75 4.25V10.75\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M16.3843 6C16.9018 6.2995 17.25 6.8591 17.25 7.5C17.25 8.1409 16.9018 8.7005 16.3843 9\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nfunction IconFlagOutlineDuo18({ strokeWidth = 2, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      {...props}\n    >\n      <path\n        d=\"M15.8785 3L10.2827 3C7.32099 3 5.84015 3 4.92007 3.87868C4 4.75736 4 6.17157 4 9L4.10619 15L15.8785 15C18.1016 15 19.2131 15 19.6847 14.4255C19.8152 14.2666 19.9108 14.0841 19.9656 13.889C20.1639 13.184 19.497 12.3348 18.1631 10.6364C17.6083 9.92985 17.3309 9.57659 17.2814 9.1751C17.2671 9.05877 17.2671 8.94123 17.2814 8.8249C17.3309 8.42341 17.6083 8.07015 18.1631 7.36364C19.497 5.66521 20.1639 4.816 19.9656 4.11098C19.9108 3.91591 19.8152 3.73342 19.6847 3.57447C19.2131 3 18.1016 3 15.8785 3Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M15.8785 3L10.2827 3C7.32099 3 5.84015 3 4.92007 3.87868C4 4.75736 4 6.17157 4 9L4.10619 15L15.8785 15C18.1016 15 19.2131 15 19.6847 14.4255C19.8152 14.2666 19.9108 14.0841 19.9656 13.889C20.1639 13.184 19.497 12.3348 18.1631 10.6364C17.6083 9.92985 17.3309 9.57659 17.2814 9.1751C17.2671 9.05877 17.2671 8.94123 17.2814 8.8249C17.3309 8.42341 17.6083 8.07015 18.1631 7.36364C19.497 5.66521 20.1639 4.816 19.9656 4.11098C19.9108 3.91591 19.8152 3.73342 19.6847 3.57447C19.2131 3 18.1016 3 15.8785 3Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M4 21L4 8\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nfunction IconTasks2OutlineDuo18({ strokeWidth = 1.5, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        opacity=\"0.3\"\n        d=\"M13.75 5.25H7.25C6.145 5.25 5.25 6.145 5.25 7.25V13.75C5.25 14.855 6.145 15.75 7.25 15.75H13.75C14.855 15.75 15.75 14.855 15.75 13.75V7.25C15.75 6.145 14.855 5.25 13.75 5.25Z\"\n        fill=\"currentColor\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M7.99695 11.25L9.60596 12.75L13.003 8.25\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M13.75 5.25H7.25C6.145 5.25 5.25 6.145 5.25 7.25V13.75C5.25 14.855 6.145 15.75 7.25 15.75H13.75C14.855 15.75 15.75 14.855 15.75 13.75V7.25C15.75 6.145 14.855 5.25 13.75 5.25Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M12.4012 2.74996C12.0022 2.06146 11.2151 1.64841 10.38 1.77291L3.45602 2.80196C2.36402 2.96386 1.61003 3.98093 1.77203 5.07393L2.75002 11.6547\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nfunction IconMsgSmileOutlineDuo18({ strokeWidth = 1.5, size = \"18px\", ...props }: IconProps) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x=\"0px\"\n      y=\"0px\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        d=\"M9 1.75C4.996 1.75 1.75 4.996 1.75 9C1.75 10.319 2.108 11.552 2.723 12.617C3.153 13.423 2.67 15.329 1.75 16.25C3 16.318 4.647 15.753 5.383 15.277C5.872 15.559 6.647 15.933 7.662 16.125C8.095 16.207 8.543 16.25 9 16.25C13.004 16.25 16.25 13.004 16.25 9C16.25 4.996 13.004 1.75 9 1.75Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.3\"\n        data-color=\"color-2\"\n        data-stroke=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M9 1.75C4.996 1.75 1.75 4.996 1.75 9C1.75 10.319 2.108 11.552 2.723 12.617C3.153 13.423 2.67 15.329 1.75 16.25C3 16.318 4.647 15.753 5.383 15.277C5.872 15.559 6.647 15.933 7.662 16.125C8.095 16.207 8.543 16.25 9 16.25C13.004 16.25 16.25 13.004 16.25 9C16.25 4.996 13.004 1.75 9 1.75Z\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>{\" \"}\n      <path\n        d=\"M5.992 12C6.762 12.772 7.826 13.25 9 13.25C10.174 13.25 11.231 12.775 12 12.008\"\n        stroke=\"currentColor\"\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        fill=\"none\"\n      ></path>\n    </svg>\n  );\n}\n\nconst resourceIcons = {\n  article: IconBookOpenOutlineDuo18,\n  feedback: IconLightbulb3OutlineDuo18,\n  announcement: IconBullhornOutlineDuo18,\n  tour: IconFlagOutlineDuo18,\n  checklist: IconTasks2OutlineDuo18,\n  survey: IconMsgSmileOutlineDuo18,\n};\n\nexport function SupportResourceIcon({\n  type,\n  ...props\n}: IconProps & { type: keyof typeof resourceIcons }) {\n  const Icon = resourceIcons[type];\n  return <Icon aria-hidden=\"true\" {...props} />;\n}\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  ArrowDown,\n  ArrowLeft,\n  ArrowUp,\n  BookOpen,\n  ChevronRight,\n  Loader2,\n  Paperclip,\n  X,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { Config } from \"../../lib/config\";\nimport { localStore } from \"../../lib/storage\";\nimport { IconMessages } from \"./icons\";\nimport { SupportResourceIcon } from \"./support-resource-icon\";\nimport type { TeamMember } from \"./use-widget-data\";\nimport {\n  createSupportMessage,\n  createSupportThread,\n  fetchSupportThread,\n  fetchSupportThreads,\n  getSupportEventsUrl,\n  identifySubscriber,\n  requestSubscriberAuthentication,\n  sendSupportTyping,\n  uploadAttachment,\n  verifySubscriberAuthentication,\n} from \"./api-utils\";\nimport { renderMarkdown } from \"./ask-ai-content/markdown\";\nimport { playChatSound } from \"./chat-sounds\";\n\ntype AttachmentUpload = {\n  url: string;\n  name: string;\n  type: string;\n  size?: number;\n};\n\ntype AttachmentItem = {\n  id: string;\n  file: File;\n  previewUrl: string;\n  status: \"uploading\" | \"ready\" | \"error\";\n  uploaded?: AttachmentUpload;\n};\n\ntype RequestField = {\n  id: string;\n  label: string;\n  type?: \"text\" | \"textarea\" | \"select\" | \"checkbox\";\n  required?: boolean;\n  placeholder?: string;\n  options?: Array<{ label: string; value: string } | string>;\n};\n\ntype RequestForm = {\n  id?: string;\n  title?: string;\n  fields?: RequestField[];\n};\n\ntype AiTranscriptMessage = {\n  id?: string;\n  role: \"user\" | \"assistant\";\n  content: string;\n  createdAt?: string | null;\n};\n\nexport type SupportHandoff = {\n  body?: string;\n  aiConversationId?: string | null;\n  aiTranscript?: AiTranscriptMessage[];\n};\n\nexport type SupportFeedbackSuggestion = {\n  messageId: string;\n  title: string;\n  text: string;\n  createdAt: string;\n};\n\ntype CreateSupportInput = {\n  body?: string;\n  subject?: string;\n  priorMessages?: string[];\n  clearFeedbackSuggestion?: boolean;\n  handoffOnly?: boolean;\n};\n\nexport type SupportArticleLink = { id?: string; url: string };\nexport type SupportMessageResource = {\n  id: string;\n  type: \"article\" | \"feedback\" | \"announcement\" | \"tour\" | \"checklist\" | \"survey\";\n  title: string;\n  description?: string | null;\n  url?: string | null;\n};\n\ntype SupportContentProps = {\n  subscriberCode?: string;\n  primaryButtonBackgroundColor?: string;\n  primaryButtonTextColor?: string;\n  mode?: \"messages\" | \"chat\";\n  chatTitle?: string;\n  product?: {\n    subdomain?: string;\n    configuration?: {\n      helpCenter?: {\n        publicUrl?: string;\n      };\n      aiAssistant?: {\n        enabled?: boolean | null;\n      };\n      support?: {\n        requestForm?: RequestForm;\n        requestForms?: RequestForm[];\n      };\n    };\n  };\n  onArticleOpen?: (article: SupportArticleLink, threadId: string | null) => void;\n  onResourceOpen?: (\n    resource: SupportMessageResource,\n    threadId: string | null,\n  ) => void | Promise<void>;\n  initialThreadId?: string | null;\n  resumeActiveThread?: boolean;\n  handoff?: SupportHandoff | null;\n  initialMessage?: string;\n  onInitialMessageConsumed?: () => void;\n  chatMembers?: TeamMember[];\n  onHandoffConsumed?: () => void;\n  feedbackSuggestion?: SupportFeedbackSuggestion | null;\n  onFeedbackSuggestionChange?: (suggestion: SupportFeedbackSuggestion | null) => void;\n  onFeedbackRequest?: (draft: { title: string; text: string }) => void;\n  onStartChat?: () => void;\n  onThreadViewChange?: (isThreadView: boolean) => void;\n  onBack?: () => void;\n  onClose?: () => void;\n  showPoweredByFooter?: boolean;\n  requireAuthentication?: boolean;\n  initialEmail?: string;\n  initialName?: string;\n  emailHash?: string;\n};\n\ntype SupportThread = {\n  id: string;\n  externalId?: string | null;\n  subject: string;\n  status?: string;\n  customerProgress: string;\n  lastMessagePreview?: string | null;\n  unreadByCustomerAt?: string | null;\n  updatedAt?: string | null;\n  messages?: SupportMessage[];\n  hasAiHandoff?: boolean;\n};\n\ntype SupportMessage = {\n  id: string;\n  authorType: \"subscriber\" | \"user\" | \"team_member\" | \"ai\" | \"system\";\n  messageType?: string;\n  authorUser?: {\n    name?: string | null;\n    avatarUrl?: string | null;\n  } | null;\n  body: string;\n  bodyFormat?: \"plain\" | \"html\";\n  bodyHtml?: string | null;\n  authoredBody?: boolean;\n  resources?: SupportMessageResource[];\n  createdAt?: string | null;\n  suggestedArticles?: Array<{\n    id?: string;\n    title: string;\n    url: string;\n  }>;\n  attachments?: Array<{\n    id: string;\n    url: string;\n    name: string;\n    contentType?: string | null;\n    size?: number | null;\n  }>;\n};\n\nfunction supportResourceActionLabel(type: SupportMessageResource[\"type\"]) {\n  if (type === \"article\") return \"Read help article\";\n  if (type === \"feedback\") return \"View feedback\";\n  if (type === \"announcement\") return \"Read announcement\";\n  if (type === \"tour\") return \"Start product tour\";\n  if (type === \"checklist\") return \"Open checklist\";\n  if (type === \"survey\") return \"Open survey\";\n  return type;\n}\n\nfunction isValidEmail(value: string) {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value.trim());\n}\n\ntype SupportTypingEvent = {\n  name?: string;\n  threadId?: string;\n  actorType?: \"subscriber\" | \"user\";\n  actorName?: string | null;\n};\n\nconst URL_PATTERN = /https?:\\/\\/[^\\s<>\"')]+/g;\n\nfunction articleSlugFromUrl(url: string, helpCenterHosts: string[]) {\n  try {\n    const parsed = new URL(url);\n    if (!helpCenterHosts.includes(parsed.hostname)) return null;\n    const segments = parsed.pathname.split(\"/\").filter(Boolean);\n    return segments[segments.length - 1] || null;\n  } catch {\n    return null;\n  }\n}\n\nfunction MessageBody({\n  body,\n  helpCenterHosts,\n  onOpenArticle,\n}: {\n  body: string;\n  helpCenterHosts: string[];\n  onOpenArticle: (article: SupportArticleLink) => void;\n}) {\n  const parts: React.ReactNode[] = [];\n  let lastIndex = 0;\n  for (const match of body.matchAll(URL_PATTERN)) {\n    const url = match[0];\n    const start = match.index ?? 0;\n    if (start > lastIndex) parts.push(body.slice(lastIndex, start));\n    const slug = articleSlugFromUrl(url, helpCenterHosts);\n    if (slug) {\n      parts.push(\n        <button\n          key={`${start}-${url}`}\n          type=\"button\"\n          onClick={() => onOpenArticle({ id: slug, url })}\n          className=\"break-all text-left underline underline-offset-2\"\n        >\n          {url}\n        </button>,\n      );\n    } else {\n      parts.push(\n        <a\n          key={`${start}-${url}`}\n          href={url}\n          target=\"_blank\"\n          rel=\"noreferrer\"\n          className=\"break-all underline underline-offset-2\"\n        >\n          {url}\n        </a>,\n      );\n    }\n    lastIndex = start + url.length;\n  }\n  if (lastIndex < body.length) parts.push(body.slice(lastIndex));\n  return <>{parts}</>;\n}\n\nexport function relativeTime(value?: string | null) {\n  if (!value) return \"\";\n  const date = new Date(value);\n  const diffMinutes = Math.max(1, Math.floor((Date.now() - date.getTime()) / 60000));\n  if (diffMinutes < 60) return `${diffMinutes}m ago`;\n  const diffHours = Math.floor(diffMinutes / 60);\n  if (diffHours < 24) return `${diffHours}h ago`;\n  return `${Math.floor(diffHours / 24)}d ago`;\n}\n\nfunction detectProductFeedbackIntent(value: string) {\n  const text = value.trim().toLowerCase();\n  return [\n    /\\bi wish\\b/,\n    /\\bplease add\\b/,\n    /\\bi(?:'d| would) like to (?:request|suggest)\\b/,\n    /\\bi (?:want|need) to (?:create|submit|share) (?:a )?(?:feature request|product feedback)\\b/,\n    /\\bi have (?:a |some )?(?:product feedback|suggestion)\\b/,\n    /\\bmy suggestion is\\b/,\n    /^(?:feature request|product feedback)\\b/,\n    /^(?:suggestion|improvement)\\s*[:—-]/,\n    /^(?:add|put|include|consider)\\b.+\\b(?:on|to) (?:the )?roadmap\\b/,\n  ].some((pattern) => pattern.test(text));\n}\n\nfunction getRequestForm(product: SupportContentProps[\"product\"]) {\n  const supportConfig = product?.configuration?.support;\n  return supportConfig?.requestForm || supportConfig?.requestForms?.[0] || null;\n}\n\nfunction getDisplayName(value?: string | null) {\n  return value?.trim() || \"\";\n}\n\nfunction getInitial(value?: string | null) {\n  return (getDisplayName(value) || \"?\").slice(0, 1).toUpperCase();\n}\n\nfunction supportMessageSender(message: SupportMessage) {\n  if (message.authorType === \"ai\") return \"AI Agent\";\n  if (message.messageType === \"auto_reply\") return \"AI Agent\";\n  if (message.messageType === \"chat_greeting\") return \"Support team\";\n  return getDisplayName(message.authorUser?.name) || \"Support team\";\n}\n\nfunction supportMessageAvatarUrl(message: SupportMessage) {\n  return message.authorUser?.avatarUrl || null;\n}\n\nfunction SenderAvatar({\n  name,\n  avatarUrl,\n  size = \"small\",\n  showPresence = false,\n}: {\n  name: string;\n  avatarUrl?: string | null;\n  size?: \"small\" | \"medium\";\n  showPresence?: boolean;\n}) {\n  return (\n    <span\n      className={`relative inline-flex shrink-0 ${size === \"medium\" ? \"size-9 text-[12px]\" : \"size-7 text-[11px]\"}`}\n    >\n      <span className=\"inline-flex h-full w-full items-center justify-center overflow-hidden rounded-full bg-neutral-100 font-semibold text-neutral-500 dark:bg-neutral-800 dark:text-neutral-300\">\n        {avatarUrl ? (\n          <img className=\"h-full w-full object-cover\" alt={name} src={avatarUrl} />\n        ) : (\n          <span>{getInitial(name)}</span>\n        )}\n      </span>\n      {showPresence ? (\n        <span\n          className=\"absolute bottom-0 right-0 size-2.5 rounded-full bg-emerald-500 ring-2 ring-neutral-50 dark:ring-gray-800\"\n          aria-hidden=\"true\"\n        />\n      ) : null}\n    </span>\n  );\n}\n\nfunction fieldOptions(field: RequestField) {\n  return (field.options || []).map((option) =>\n    typeof option === \"string\" ? { label: option, value: option } : option,\n  );\n}\n\nfunction normalizeAttachments(attachments: AttachmentItem[]) {\n  return attachments\n    .map((attachment) =>\n      attachment.uploaded\n        ? {\n            ...attachment.uploaded,\n            size: attachment.file.size,\n          }\n        : null,\n    )\n    .filter((attachment): attachment is AttachmentUpload & { size: number } => Boolean(attachment));\n}\n\nconst NOTICE_AUTO_DISMISS_MS = 5000;\nconst MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024;\nconst CHAT_GREETING_TYPING_MS = 1400;\nconst CHAT_SCROLL_TOP_GUTTER = 12;\nconst CHAT_SCROLL_BOTTOM_TOLERANCE = 72;\nconst CHAT_GREETING = \"Hi, we’re here to help.\";\nconst CHAT_GREETING_FOLLOW_UP = \"Send us a message and our team will get back to you.\";\nconst AI_HANDOFF_MESSAGE =\n  \"I'm connecting you with our support team now. They'll be able to see this conversation and help you further.\";\nconst CHAT_PROMPTS = [\n  { label: \"Ask a question\", prefill: \"I have a question about \" },\n  { label: \"Report a problem\", prefill: \"I'm running into a problem: \" },\n  { label: \"Get help\", prefill: \"I need help with \" },\n];\nconst fallbackPublicTokenKey = \"publicToken\";\n\nfunction getAiHandoffSubject(handoff: SupportHandoff) {\n  const firstCustomerMessage = handoff.aiTranscript\n    ?.find((message) => message.role === \"user\" && message.content.trim())\n    ?.content.trim();\n\n  return (firstCustomerMessage || handoff.body || \"Support request from AI chat\")\n    .trim()\n    .slice(0, 80);\n}\n\nfunction handoffMessageToSupportMessage(\n  message: AiTranscriptMessage,\n  index: number,\n): SupportMessage {\n  const isCustomer = message.role === \"user\";\n  return {\n    id: message.id || `handoff-${message.role}-${index}`,\n    authorType: isCustomer ? \"subscriber\" : \"ai\",\n    messageType: isCustomer ? \"customer_message\" : \"ai_message\",\n    body: message.content,\n    createdAt: message.createdAt,\n  };\n}\n\nfunction TypingIndicatorBubble() {\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 6 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.25, ease: \"easeOut\" }}\n      className=\"inline-flex items-center gap-1 rounded-2xl rounded-bl-md bg-black/[0.05] px-3.5 py-3 dark:bg-white/[0.08]\"\n    >\n      {[0, 0.2, 0.4].map((delay) => (\n        <span\n          key={delay}\n          className=\"size-1.5 rounded-full bg-[#85808c] dark:bg-[#9a94a3]\"\n          aria-hidden=\"true\"\n          style={{\n            animation: `1.2s ease-in-out ${delay}s infinite normal none running braille-pulse`,\n          }}\n        />\n      ))}\n    </motion.div>\n  );\n}\n\nfunction MessageReveal({\n  typeBeforeReveal,\n  children,\n}: {\n  typeBeforeReveal: boolean;\n  children: React.ReactNode;\n}) {\n  const [isRevealed, setIsRevealed] = React.useState(!typeBeforeReveal);\n\n  React.useEffect(() => {\n    if (!typeBeforeReveal) return;\n    const timeout = window.setTimeout(() => setIsRevealed(true), 720);\n    return () => window.clearTimeout(timeout);\n  }, [typeBeforeReveal]);\n\n  if (!isRevealed) {\n    return (\n      <div className=\"flex items-start\" role=\"status\" aria-label=\"Message sender is typing\">\n        <TypingIndicatorBubble />\n      </div>\n    );\n  }\n\n  return <>{children}</>;\n}\n\nfunction ChatGreeting() {\n  const [isTyping, setIsTyping] = React.useState(true);\n\n  React.useEffect(() => {\n    const timeout = window.setTimeout(() => setIsTyping(false), CHAT_GREETING_TYPING_MS);\n    return () => window.clearTimeout(timeout);\n  }, []);\n\n  return (\n    <div className=\"flex min-h-full flex-col justify-end px-4 py-5\">\n      <div className=\"flex flex-col items-start\">\n        {isTyping ? (\n          <TypingIndicatorBubble />\n        ) : (\n          <div className=\"flex flex-col items-start gap-1.5\">\n            {[CHAT_GREETING, CHAT_GREETING_FOLLOW_UP].map((message, index) => (\n              <motion.div\n                key={message}\n                initial={{ opacity: 0, y: 8, scale: 0.98, filter: \"blur(2px)\" }}\n                animate={{ opacity: 1, y: 0, scale: 1, filter: \"blur(0px)\" }}\n                transition={{\n                  type: \"spring\",\n                  duration: 0.3,\n                  bounce: 0,\n                  delay: index * 0.09,\n                }}\n                className=\"max-w-full rounded-[20px] rounded-bl-[6px] bg-[#f4f4f5] px-4 py-3 text-pretty text-[14px] leading-[1.55] text-[#242127] dark:bg-white/[0.08] dark:text-[#f4f2f7]\"\n              >\n                {message}\n              </motion.div>\n            ))}\n            <span className=\"px-3 pt-0.5 text-[12px] leading-5 text-[#817b8d] dark:text-[#aaa3b4]\">\n              Support team · Just now\n            </span>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n\nfunction getPublicTokenStorageKey() {\n  let scope = \"\";\n  try {\n    const config = Config.getInstance().get();\n    scope = config?.accountId || config?.environmentState?.team?.subdomain || \"\";\n  } catch {\n    scope = \"\";\n  }\n  if (!scope && typeof window !== \"undefined\") scope = window.location.origin;\n  return `userorbit:publicToken:${scope || \"default\"}`;\n}\n\nfunction getAuthenticatedPublicTokenStorageKey() {\n  return `${getPublicTokenStorageKey()}:authenticated`;\n}\n\nexport function getStoredPublicToken() {\n  if (typeof window === \"undefined\") return null;\n  return localStore.get(getPublicTokenStorageKey()) || localStore.get(fallbackPublicTokenKey);\n}\n\nfunction getStoredAuthenticatedPublicToken() {\n  if (typeof window === \"undefined\") return null;\n  return localStore.get(getAuthenticatedPublicTokenStorageKey());\n}\n\nfunction storePublicToken(token?: string | null, authenticated = false) {\n  if (!token || typeof window === \"undefined\") return;\n  localStore.set(getPublicTokenStorageKey(), token);\n  if (authenticated) {\n    localStore.set(getAuthenticatedPublicTokenStorageKey(), token);\n  }\n}\n\nexport default function SupportContent({\n  subscriberCode,\n  primaryButtonBackgroundColor = \"#3912e4\",\n  primaryButtonTextColor = \"#ffffff\",\n  mode = \"messages\",\n  chatTitle = \"Talk to us\",\n  product,\n  onArticleOpen,\n  onResourceOpen,\n  initialThreadId,\n  resumeActiveThread = false,\n  handoff,\n  initialMessage,\n  onInitialMessageConsumed,\n  chatMembers = [],\n  onHandoffConsumed,\n  feedbackSuggestion,\n  onFeedbackSuggestionChange,\n  onFeedbackRequest,\n  onStartChat,\n  onThreadViewChange,\n  onBack,\n  onClose,\n  showPoweredByFooter = false,\n  requireAuthentication = false,\n  initialEmail = \"\",\n  initialName = \"\",\n  emailHash,\n}: SupportContentProps) {\n  const queryClient = useQueryClient();\n  const [subject, setSubject] = React.useState(\"\");\n  const [body, setBody] = React.useState(\"\");\n  const [email, setEmail] = React.useState(initialEmail);\n  const [fullName, setFullName] = React.useState(initialName);\n  const [authenticationStep, setAuthenticationStep] = React.useState<\"identify\" | \"verify\">(\n    \"identify\",\n  );\n  const [verificationCode, setVerificationCode] = React.useState(\"\");\n  const [authenticationError, setAuthenticationError] = React.useState(\"\");\n  const [notice, setNotice] = React.useState(\"\");\n  const [handoffTranscript, setHandoffTranscript] = React.useState<AiTranscriptMessage[]>([]);\n  const [pendingAutoHandoff, setPendingAutoHandoff] = React.useState(false);\n  const [isSettlingAiHandoff, setIsSettlingAiHandoff] = React.useState(Boolean(handoff));\n  const [selectedThreadId, setSelectedThreadId] = React.useState<string | null>(\n    initialThreadId ?? null,\n  );\n  const [isComposingNewRequest, setIsComposingNewRequest] = React.useState(\n    mode === \"chat\" && !initialThreadId,\n  );\n  const [publicToken, setPublicToken] = React.useState<string | null>(() =>\n    requireAuthentication && !(initialEmail && emailHash)\n      ? getStoredAuthenticatedPublicToken()\n      : getStoredPublicToken(),\n  );\n  const [attachments, setAttachments] = React.useState<AttachmentItem[]>([]);\n  const [fieldValues, setFieldValues] = React.useState<Record<string, string | boolean>>({});\n  const fileInputRef = React.useRef<HTMLInputElement>(null);\n  const attachmentsRef = React.useRef<AttachmentItem[]>([]);\n  const handoffRef = React.useRef<SupportHandoff | null>(null);\n  const autoHandoffIdentityRef = React.useRef<string | null>(null);\n  const identifyPromiseRef = React.useRef<Promise<string> | null>(null);\n  const publicTokenRef = React.useRef<string | null>(publicToken);\n  const typingTimeoutRef = React.useRef<number | null>(null);\n  const lastTypingStartedAtRef = React.useRef(0);\n  const resumeAttemptedRef = React.useRef(false);\n  const requestForm = getRequestForm(product);\n  const requestFields = requestForm?.fields || [];\n  const trustedSubscriberCode =\n    requireAuthentication && !(initialEmail && emailHash) ? undefined : subscriberCode;\n  const supportToken = trustedSubscriberCode || publicToken || undefined;\n  const showAuthentication = requireAuthentication && !supportToken;\n  const isUploadingAttachment = attachments.some((attachment) => attachment.status === \"uploading\");\n  const hasAttachmentError = attachments.some((attachment) => attachment.status === \"error\");\n\n  const helpCenterHosts = React.useMemo(() => {\n    const hosts: string[] = [];\n    const configured = product?.configuration?.helpCenter?.publicUrl?.trim();\n    if (configured) {\n      try {\n        hosts.push(\n          new URL(/^https?:\\/\\//.test(configured) ? configured : `https://${configured}`).hostname,\n        );\n      } catch {\n        // ignore invalid configured URLs\n      }\n    }\n    if (product?.subdomain) {\n      hosts.push(`${product.subdomain}.userorbit.help`, `${product.subdomain}.userorbit.com`);\n    }\n    return hosts;\n  }, [product]);\n\n  const openArticle = React.useCallback(\n    (article: SupportArticleLink) => {\n      if (onArticleOpen) onArticleOpen(article, selectedThreadId);\n      else window.open(article.url, \"_blank\");\n    },\n    [onArticleOpen, selectedThreadId],\n  );\n  const openResource = React.useCallback(\n    async (resource: SupportMessageResource) => {\n      setNotice(\"\");\n      try {\n        if (onResourceOpen) await onResourceOpen(resource, selectedThreadId);\n        else if (resource.url) window.open(resource.url, \"_blank\");\n      } catch (error) {\n        setNotice(\n          error instanceof Error\n            ? error.message\n            : \"Unable to open shared content. Please try again.\",\n        );\n      }\n    },\n    [onResourceOpen, selectedThreadId],\n  );\n\n  const [realtimeConnected, setRealtimeConnected] = React.useState(false);\n  const [agentTyping, setAgentTyping] = React.useState<{\n    threadId: string;\n    actorName: string;\n    expiresAt: number;\n  } | null>(null);\n\n  const threadsQuery = useQuery({\n    queryKey: [\"support-threads\", supportToken],\n    queryFn: async () => {\n      try {\n        const response = await fetchSupportThreads(supportToken);\n        return response?.data || [];\n      } catch {\n        return [];\n      }\n    },\n    enabled: Boolean(supportToken),\n    staleTime: 1000 * 60,\n  });\n\n  const threadQuery = useQuery({\n    queryKey: [\"support-thread\", selectedThreadId, supportToken],\n    queryFn: async () => {\n      const response = await fetchSupportThread(selectedThreadId as string, supportToken);\n      return (response?.data as SupportThread) || null;\n    },\n    enabled: Boolean(selectedThreadId && supportToken),\n    staleTime: 1000 * 30,\n    refetchInterval: realtimeConnected ? false : 15000,\n  });\n\n  const authenticationRequestMutation = useMutation({\n    mutationFn: () =>\n      requestSubscriberAuthentication({ email: email.trim(), name: fullName.trim() }),\n    onSuccess: () => {\n      setAuthenticationError(\"\");\n      setVerificationCode(\"\");\n      setAuthenticationStep(\"verify\");\n    },\n    onError: (error) => {\n      setAuthenticationError(\n        error instanceof Error ? error.message : \"Unable to send a verification code\",\n      );\n    },\n  });\n\n  const authenticationVerifyMutation = useMutation({\n    mutationFn: () =>\n      verifySubscriberAuthentication({\n        email: email.trim(),\n        code: verificationCode,\n      }),\n    onSuccess: (response) => {\n      const token = response?.publicToken || response?.code;\n      if (!token) {\n        setAuthenticationError(\"Unable to verify this email. Please request a new code.\");\n        return;\n      }\n      storePublicToken(token, true);\n      publicTokenRef.current = token;\n      setPublicToken(token);\n      setAuthenticationError(\"\");\n      void queryClient.invalidateQueries({ queryKey: [\"support-threads\"] });\n    },\n    onError: (error) => {\n      setAuthenticationError(\n        error instanceof Error ? error.message : \"The verification code is invalid or expired\",\n      );\n    },\n  });\n\n  React.useEffect(() => {\n    if (initialEmail) setEmail(initialEmail);\n    if (initialName) setFullName(initialName);\n  }, [initialEmail, initialName]);\n\n  React.useEffect(() => {\n    if (!supportToken || typeof window === \"undefined\" || !(\"EventSource\" in window)) return;\n    const url = getSupportEventsUrl(supportToken);\n    if (!url) return;\n\n    let disconnected = false;\n    const source = new EventSource(url);\n    source.onopen = () => {\n      setRealtimeConnected(true);\n      if (!disconnected) return;\n      disconnected = false;\n      void queryClient.invalidateQueries({ queryKey: [\"support-threads\", supportToken] });\n      void queryClient.invalidateQueries({ queryKey: [\"support-thread\"] });\n    };\n    source.onerror = () => {\n      disconnected = true;\n      setRealtimeConnected(false);\n    };\n    source.onmessage = (message) => {\n      let event: SupportTypingEvent | null = null;\n      try {\n        event = JSON.parse(message.data);\n      } catch {\n        event = null;\n      }\n      if (\n        event?.threadId &&\n        event.actorType === \"user\" &&\n        (event.name === \"typing.start\" || event.name === \"typing.stop\")\n      ) {\n        if (event.name === \"typing.start\") {\n          setAgentTyping({\n            threadId: event.threadId,\n            actorName: event.actorName || \"Support\",\n            expiresAt: Date.now() + 5000,\n          });\n        } else {\n          setAgentTyping((current) => (current?.threadId === event?.threadId ? null : current));\n        }\n        return;\n      }\n      void queryClient.invalidateQueries({ queryKey: [\"support-threads\", supportToken] });\n      void queryClient.invalidateQueries({ queryKey: [\"support-thread\"] });\n    };\n\n    return () => {\n      setRealtimeConnected(false);\n      source.close();\n    };\n  }, [supportToken, queryClient]);\n\n  React.useEffect(() => {\n    const interval = window.setInterval(() => {\n      setAgentTyping((current) => (current && current.expiresAt <= Date.now() ? null : current));\n    }, 1000);\n    return () => window.clearInterval(interval);\n  }, []);\n\n  React.useEffect(() => {\n    if (!selectedThreadId || !threadQuery.isSuccess) return;\n    queryClient.setQueryData<SupportThread[]>([\"support-threads\", supportToken], (current) =>\n      current?.map((thread) =>\n        thread.id === selectedThreadId && thread.unreadByCustomerAt\n          ? { ...thread, unreadByCustomerAt: null }\n          : thread,\n      ),\n    );\n  }, [selectedThreadId, threadQuery.isSuccess, queryClient, supportToken]);\n\n  const threads: SupportThread[] = threadsQuery.data || [];\n  const selectedThread = selectedThreadId\n    ? threadQuery.data || threads.find((thread) => thread.id === selectedThreadId) || null\n    : null;\n  const showInboxHome = !selectedThread;\n  const isChatMode = mode === \"chat\";\n  const showMessageListView = showInboxHome && !isComposingNewRequest;\n  const showThreadList = showMessageListView && threads.length > 0;\n  const showMessagesLanding =\n    showMessageListView && !threadsQuery.isLoading && threads.length === 0;\n  const showEmailField = !supportToken;\n  const isClosed = selectedThread?.status === \"done\" || selectedThread?.status === \"ignored\";\n  const customFields = requestFields\n    .map((field) => ({\n      id: field.id,\n      label: field.label,\n      value: fieldValues[field.id],\n    }))\n    .filter((field) => field.value !== undefined && field.value !== \"\");\n\n  const stopCustomerTyping = React.useCallback(() => {\n    if (typingTimeoutRef.current !== null) {\n      window.clearTimeout(typingTimeoutRef.current);\n      typingTimeoutRef.current = null;\n    }\n    lastTypingStartedAtRef.current = 0;\n    if (!selectedThreadId) return;\n    void sendSupportTyping({\n      threadId: selectedThreadId,\n      isTyping: false,\n      token: supportToken || publicTokenRef.current || undefined,\n    }).catch(() => undefined);\n  }, [selectedThreadId, supportToken]);\n\n  const startCustomerTyping = React.useCallback(() => {\n    if (!selectedThreadId) return;\n    if (typingTimeoutRef.current !== null) window.clearTimeout(typingTimeoutRef.current);\n    const now = Date.now();\n    if (now - lastTypingStartedAtRef.current > 2500) {\n      lastTypingStartedAtRef.current = now;\n      void sendSupportTyping({\n        threadId: selectedThreadId,\n        isTyping: true,\n        token: supportToken || publicTokenRef.current || undefined,\n      }).catch(() => undefined);\n    }\n    typingTimeoutRef.current = window.setTimeout(stopCustomerTyping, 3000);\n  }, [selectedThreadId, stopCustomerTyping, supportToken]);\n\n  React.useEffect(() => {\n    return () => stopCustomerTyping();\n  }, [stopCustomerTyping]);\n\n  const canSubmit =\n    Boolean(body.trim()) &&\n    !isUploadingAttachment &&\n    !hasAttachmentError &&\n    (!showInboxHome || requestFields.every((field) => !field.required || fieldValues[field.id]));\n\n  React.useEffect(() => {\n    resumeAttemptedRef.current = false;\n    setSelectedThreadId(initialThreadId ?? null);\n    setIsComposingNewRequest(mode === \"chat\" && !initialThreadId);\n    setHandoffTranscript([]);\n    setNotice(\"\");\n  }, [initialThreadId, mode]);\n\n  React.useEffect(() => {\n    if (!resumeActiveThread || resumeAttemptedRef.current) return;\n    if (mode !== \"chat\" || selectedThreadId || handoff || handoffRef.current) return;\n    if (!supportToken || !threadsQuery.data) return;\n    resumeAttemptedRef.current = true;\n    const activeThread = threadsQuery.data.find(\n      (thread: SupportThread) => thread.status !== \"done\" && thread.status !== \"ignored\",\n    );\n    if (activeThread) {\n      setSelectedThreadId(activeThread.id);\n      setIsComposingNewRequest(false);\n      return;\n    }\n    let cancelled = false;\n    void fetchSupportThreads(supportToken, { active: true, limit: 1 })\n      .then((response) => {\n        const thread: SupportThread | undefined = response?.data?.[0];\n        if (cancelled || !thread) return;\n        setSelectedThreadId(thread.id);\n        setIsComposingNewRequest(false);\n      })\n      .catch(() => undefined);\n    return () => {\n      cancelled = true;\n    };\n  }, [resumeActiveThread, mode, selectedThreadId, handoff, threadsQuery.data, supportToken]);\n\n  React.useEffect(() => {\n    onThreadViewChange?.(Boolean(selectedThreadId));\n  }, [onThreadViewChange, selectedThreadId]);\n\n  React.useEffect(() => {\n    return () => onThreadViewChange?.(false);\n  }, [onThreadViewChange]);\n\n  React.useEffect(() => {\n    if (!handoff) return;\n    setIsSettlingAiHandoff(true);\n    handoffRef.current = handoff;\n    autoHandoffIdentityRef.current = null;\n    setSelectedThreadId(null);\n    setIsComposingNewRequest(true);\n    setHandoffTranscript(handoff.aiTranscript || []);\n    setPendingAutoHandoff(true);\n    onFeedbackSuggestionChange?.(null);\n    setBody(\"\");\n    setSubject(getAiHandoffSubject(handoff));\n    setNotice(\"\");\n    onHandoffConsumed?.();\n  }, [handoff, onFeedbackSuggestionChange, onHandoffConsumed]);\n\n  React.useEffect(() => {\n    attachmentsRef.current = attachments;\n  }, [attachments]);\n\n  React.useEffect(() => {\n    return () => {\n      attachmentsRef.current.forEach((attachment) => URL.revokeObjectURL(attachment.previewUrl));\n    };\n  }, []);\n\n  React.useEffect(() => {\n    publicTokenRef.current = publicToken;\n  }, [publicToken]);\n\n  React.useEffect(() => {\n    if (!notice) return;\n    const timeout = window.setTimeout(() => setNotice(\"\"), NOTICE_AUTO_DISMISS_MS);\n    return () => window.clearTimeout(timeout);\n  }, [notice]);\n\n  const ensureSupportToken = React.useCallback(async () => {\n    if (supportToken) return supportToken;\n    if (publicTokenRef.current) return publicTokenRef.current;\n    const trimmedEmail = email.trim();\n    if (!trimmedEmail) {\n      throw new Error(\"Enter your email before attaching files.\");\n    }\n    if (!identifyPromiseRef.current) {\n      identifyPromiseRef.current = identifySubscriber({\n        email: trimmedEmail,\n        name: fullName.trim() || undefined,\n        emailHash,\n      })\n        .then((response) => {\n          const token = response?.publicToken || response?.code;\n          if (!token) throw new Error(\"Unable to prepare attachment upload.\");\n          storePublicToken(token);\n          publicTokenRef.current = token;\n          setPublicToken(token);\n          return token;\n        })\n        .finally(() => {\n          identifyPromiseRef.current = null;\n        });\n    }\n    return identifyPromiseRef.current;\n  }, [email, emailHash, fullName, supportToken]);\n\n  const createMutation = useMutation({\n    mutationFn: async (input: CreateSupportInput) => {\n      const trimmedBody = (input.body ?? body).trim();\n      const trimmedSubject = (input.subject ?? subject).trim();\n      const uploadedAttachments = normalizeAttachments(attachments);\n      if (selectedThread) {\n        const effectiveSupportToken = supportToken || publicTokenRef.current || undefined;\n        stopCustomerTyping();\n        return createSupportMessage({\n          threadId: selectedThread.id,\n          body: trimmedBody,\n          token: effectiveSupportToken,\n          email: email.trim() || undefined,\n          attachments: uploadedAttachments,\n        });\n      }\n\n      const aiHandoff = handoffRef.current;\n      const effectiveSupportToken = supportToken || publicTokenRef.current || undefined;\n      return createSupportThread({\n        subject: trimmedSubject || trimmedBody.slice(0, 80) || \"New support request\",\n        body: trimmedBody,\n        email: email.trim() || undefined,\n        emailHash,\n        name: fullName.trim() || undefined,\n        token: effectiveSupportToken,\n        currentUrl: typeof window === \"undefined\" ? undefined : window.location.href,\n        attachments: uploadedAttachments,\n        aiConversationId: aiHandoff?.aiConversationId || undefined,\n        aiTranscript: aiHandoff?.aiTranscript,\n        handoffOnly: input.handoffOnly,\n        includeChatGreeting: isChatMode && !aiHandoff,\n        priorMessages: input.priorMessages,\n        customFields,\n        intent: \"support_request\",\n        requestFormId: requestForm?.id,\n      });\n    },\n    onSuccess: (result, input) => {\n      if (!result) return;\n\n      if (result?.publicToken && !subscriberCode) {\n        storePublicToken(result.publicToken);\n        setPublicToken(result.publicToken);\n      }\n\n      const verificationRequired = Boolean(result?.verificationRequired) && !result?.publicToken;\n      if (verificationRequired) {\n        setIsSettlingAiHandoff(false);\n        setNotice(\"Check your email to verify your address, then send this message again.\");\n        return;\n      }\n\n      const updatedThread = result?.data as SupportThread | undefined;\n      if (updatedThread) {\n        queryClient.setQueryData<SupportThread[]>(\n          [\"support-threads\", supportToken || result?.publicToken],\n          (current) => {\n            const existing = current || [];\n            return [updatedThread, ...existing.filter((thread) => thread.id !== updatedThread.id)];\n          },\n        );\n        queryClient.setQueryData(\n          [\"support-thread\", updatedThread.id, supportToken || result?.publicToken],\n          updatedThread,\n        );\n        setSelectedThreadId(updatedThread.id);\n        if (input.clearFeedbackSuggestion) onFeedbackSuggestionChange?.(null);\n      }\n      attachments.forEach((attachment) => URL.revokeObjectURL(attachment.previewUrl));\n      setAttachments([]);\n      setSubject(\"\");\n      setBody(\"\");\n      setFieldValues({});\n      setHandoffTranscript([]);\n      setPendingAutoHandoff(false);\n      handoffRef.current = null;\n      setNotice(\"\");\n      window.setTimeout(() => setIsSettlingAiHandoff(false), 400);\n      void queryClient.invalidateQueries({\n        queryKey: [\"support-threads\", supportToken || result?.publicToken],\n      });\n    },\n    onError: (error) => {\n      setPendingAutoHandoff(false);\n      setIsSettlingAiHandoff(false);\n      setNotice(error instanceof Error ? error.message : \"Unable to create request\");\n    },\n  });\n\n  React.useEffect(() => {\n    if (!pendingAutoHandoff || !handoffRef.current || createMutation.isPending) return;\n    if (showAuthentication) return;\n\n    const normalizedEmail = email.trim().toLowerCase();\n    const identity =\n      supportToken || (isValidEmail(normalizedEmail) ? `email:${normalizedEmail}` : \"\");\n    if (!identity || autoHandoffIdentityRef.current === identity) return;\n    autoHandoffIdentityRef.current = identity;\n    const aiHandoff = handoffRef.current;\n    const lastCustomerMessage = [...(aiHandoff.aiTranscript || [])]\n      .reverse()\n      .find((message) => message.role === \"user\")?.content;\n    const handoffBody = (lastCustomerMessage || aiHandoff.body || \"Talk to a person\").trim();\n    createMutation.mutate({\n      body: handoffBody,\n      subject: getAiHandoffSubject(aiHandoff),\n      handoffOnly: true,\n    });\n  }, [\n    createMutation.isPending,\n    createMutation.mutate,\n    email,\n    pendingAutoHandoff,\n    showAuthentication,\n    supportToken,\n  ]);\n\n  const addAttachment = React.useCallback(\n    (file: File) => {\n      if (file.size > MAX_ATTACHMENT_BYTES) {\n        setNotice(\"Attachments must be under 10MB.\");\n        return;\n      }\n      const canPrepareUpload = Boolean(supportToken || email.trim());\n      const attachment: AttachmentItem = {\n        id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,\n        file,\n        previewUrl: URL.createObjectURL(file),\n        status: canPrepareUpload ? \"uploading\" : \"error\",\n      };\n\n      setAttachments((current) => [...current, attachment]);\n\n      if (!canPrepareUpload) {\n        setNotice(\"Enter your email before attaching files.\");\n        return;\n      }\n\n      ensureSupportToken()\n        .then((token) => uploadAttachment(file, token))\n        .then((uploaded) => {\n          setAttachments((current) =>\n            current.map((item) =>\n              item.id === attachment.id ? { ...item, status: \"ready\", uploaded } : item,\n            ),\n          );\n        })\n        .catch((error) => {\n          setAttachments((current) =>\n            current.map((item) =>\n              item.id === attachment.id ? { ...item, status: \"error\" } : item,\n            ),\n          );\n          setNotice(error instanceof Error ? error.message : \"Attachment upload failed.\");\n        });\n    },\n    [email, ensureSupportToken, supportToken],\n  );\n\n  const handleFileUpload = React.useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const files = Array.from(event.target.files || []);\n      files.slice(0, 5).forEach(addAttachment);\n      if (fileInputRef.current) fileInputRef.current.value = \"\";\n    },\n    [addAttachment],\n  );\n\n  const removeAttachment = React.useCallback((attachmentId: string) => {\n    setAttachments((current) => {\n      const attachment = current.find((item) => item.id === attachmentId);\n      if (attachment) URL.revokeObjectURL(attachment.previewUrl);\n      return current.filter((item) => item.id !== attachmentId);\n    });\n  }, []);\n\n  let persistedMessages: SupportMessage[] = [];\n  if (selectedThread?.messages && selectedThread.messages.length > 0) {\n    persistedMessages = selectedThread.messages;\n  } else if (selectedThread) {\n    persistedMessages = [\n      {\n        id: `${selectedThread.id}-preview`,\n        authorType: \"subscriber\",\n        body: selectedThread.lastMessagePreview || \"Request submitted.\",\n        createdAt: selectedThread.updatedAt,\n      },\n    ];\n  }\n  const hasPendingHandoff = !selectedThread && handoffTranscript.length > 0;\n  const pendingHandoffMessages: SupportMessage[] = hasPendingHandoff\n    ? [\n        ...handoffTranscript.map(handoffMessageToSupportMessage),\n        {\n          id: \"handoff-routing\",\n          authorType: \"ai\",\n          messageType: \"ai_message\",\n          body: AI_HANDOFF_MESSAGE,\n        },\n      ]\n    : [];\n  const pendingFeedbackMessages: SupportMessage[] =\n    !selectedThread && !hasPendingHandoff && feedbackSuggestion\n      ? [\n          {\n            id: `feedback-greeting-${feedbackSuggestion.messageId}`,\n            authorType: \"system\",\n            messageType: \"chat_greeting\",\n            authorUser: chatMembers[0]\n              ? {\n                  name: chatMembers[0].name,\n                  avatarUrl: chatMembers[0].avatarUrl,\n                }\n              : null,\n            body: CHAT_GREETING,\n            createdAt: feedbackSuggestion.createdAt,\n          },\n          {\n            id: feedbackSuggestion.messageId,\n            authorType: \"subscriber\",\n            messageType: \"customer_message\",\n            body: feedbackSuggestion.text,\n            createdAt: feedbackSuggestion.createdAt,\n          },\n        ]\n      : [];\n  const messages = selectedThread\n    ? persistedMessages\n    : hasPendingHandoff\n      ? pendingHandoffMessages\n      : pendingFeedbackMessages;\n  const hasHumanSupportResponse = persistedMessages.some(\n    (message) => message.authorType === \"user\" || message.authorType === \"team_member\",\n  );\n  const showAwaitingSupportResponse = Boolean(\n    selectedThread && isChatMode && !isClosed && !hasHumanSupportResponse,\n  );\n  const humanMessages = messages.filter(\n    (message) => message.authorType === \"user\" || message.authorType === \"team_member\",\n  );\n  const firstHumanMessageId = humanMessages[0]?.id;\n  const activeResponder = humanMessages[humanMessages.length - 1];\n  const isAgentTypingInSelectedThread = Boolean(\n    selectedThread && agentTyping?.threadId === selectedThread.id,\n  );\n\n  const messagesScrollRef = React.useRef<HTMLDivElement>(null);\n  const composerRef = React.useRef<HTMLTextAreaElement>(null);\n  const messageNodesRef = React.useRef(new Map<string, HTMLDivElement>());\n  const previousMessageIdsRef = React.useRef(new Set<string>());\n  const scrollConversationKeyRef = React.useRef<string | null>(null);\n  const isNearConversationBottomRef = React.useRef(true);\n  const isProgrammaticScrollRef = React.useRef(false);\n  const programmaticScrollTimeoutRef = React.useRef<number | null>(null);\n  const soundedInboundIdsRef = React.useRef(new Set<string>());\n  const inboundSoundThreadRef = React.useRef<string | null>(null);\n  const [unreadInboundMessageId, setUnreadInboundMessageId] = React.useState<string | null>(null);\n  const [pendingInboundScrollId, setPendingInboundScrollId] = React.useState<string | null>(null);\n  const [conversationTailHeight, setConversationTailHeight] = React.useState(0);\n  const conversationKey = selectedThreadId\n    ? `thread:${selectedThreadId}`\n    : hasPendingHandoff\n      ? \"handoff\"\n      : feedbackSuggestion\n        ? `feedback:${feedbackSuggestion.messageId}`\n        : \"draft\";\n\n  const beginProgrammaticScroll = React.useCallback(() => {\n    isProgrammaticScrollRef.current = true;\n    if (programmaticScrollTimeoutRef.current !== null) {\n      window.clearTimeout(programmaticScrollTimeoutRef.current);\n    }\n    programmaticScrollTimeoutRef.current = window.setTimeout(() => {\n      isProgrammaticScrollRef.current = false;\n      programmaticScrollTimeoutRef.current = null;\n    }, 500);\n  }, []);\n\n  const scrollToConversationBottom = React.useCallback(\n    (behavior: ScrollBehavior = \"auto\") => {\n      const container = messagesScrollRef.current;\n      if (!container) return;\n      beginProgrammaticScroll();\n      isNearConversationBottomRef.current = true;\n      container.scrollTo({ top: container.scrollHeight, behavior });\n    },\n    [beginProgrammaticScroll],\n  );\n\n  const scrollToMessageStart = React.useCallback((messageId: string) => {\n    setPendingInboundScrollId(messageId);\n    setUnreadInboundMessageId(null);\n  }, []);\n\n  const handleConversationScroll = React.useCallback(() => {\n    if (isProgrammaticScrollRef.current) return;\n    const container = messagesScrollRef.current;\n    if (!container) return;\n    const distanceFromBottom =\n      container.scrollHeight - container.scrollTop - container.clientHeight;\n    const isNearBottom = distanceFromBottom <= CHAT_SCROLL_BOTTOM_TOLERANCE;\n    isNearConversationBottomRef.current = isNearBottom;\n    if (isNearBottom) setUnreadInboundMessageId(null);\n  }, []);\n\n  const handleConversationScrollIntent = React.useCallback(() => {\n    isProgrammaticScrollRef.current = false;\n    if (programmaticScrollTimeoutRef.current !== null) {\n      window.clearTimeout(programmaticScrollTimeoutRef.current);\n      programmaticScrollTimeoutRef.current = null;\n    }\n  }, []);\n\n  React.useEffect(\n    () => () => {\n      if (programmaticScrollTimeoutRef.current !== null) {\n        window.clearTimeout(programmaticScrollTimeoutRef.current);\n      }\n    },\n    [],\n  );\n\n  React.useEffect(() => {\n    if (!pendingInboundScrollId) return;\n    const container = messagesScrollRef.current;\n    const messageNode = messageNodesRef.current.get(pendingInboundScrollId);\n    if (!container || !messageNode) return;\n\n    const containerTop = container.getBoundingClientRect().top;\n    const messageTop = messageNode.getBoundingClientRect().top;\n    const targetScrollTop = Math.max(\n      0,\n      container.scrollTop + messageTop - containerTop - CHAT_SCROLL_TOP_GUTTER,\n    );\n    const contentScrollHeight = container.scrollHeight - conversationTailHeight;\n    const requiredTailHeight = Math.max(\n      0,\n      Math.ceil(targetScrollTop + container.clientHeight - contentScrollHeight),\n    );\n    if (requiredTailHeight !== conversationTailHeight) {\n      setConversationTailHeight(requiredTailHeight);\n      return;\n    }\n\n    beginProgrammaticScroll();\n    isNearConversationBottomRef.current = true;\n    const frame = window.requestAnimationFrame(() => {\n      container.scrollTo({ top: targetScrollTop, behavior: \"smooth\" });\n      setPendingInboundScrollId(null);\n    });\n    return () => window.cancelAnimationFrame(frame);\n  }, [beginProgrammaticScroll, conversationTailHeight, messages, pendingInboundScrollId]);\n\n  React.useEffect(() => {\n    if (!isChatMode || showAuthentication || showMessageListView || isClosed) return;\n\n    const frame = window.requestAnimationFrame(() => {\n      composerRef.current?.focus({ preventScroll: true });\n    });\n\n    return () => window.cancelAnimationFrame(frame);\n  }, [isChatMode, showAuthentication, showMessageListView, isClosed]);\n\n  React.useEffect(() => {\n    if (messages.length === 0) return;\n    const messageIds = new Set(messages.map((message) => message.id));\n    const isNewConversation = scrollConversationKeyRef.current !== conversationKey;\n\n    if (isNewConversation) {\n      scrollConversationKeyRef.current = conversationKey;\n      previousMessageIdsRef.current = messageIds;\n      isNearConversationBottomRef.current = true;\n      setConversationTailHeight(0);\n      setPendingInboundScrollId(null);\n      setUnreadInboundMessageId(null);\n      const frame = window.requestAnimationFrame(() => scrollToConversationBottom(\"auto\"));\n      return () => window.cancelAnimationFrame(frame);\n    }\n\n    const newMessages = messages.filter(\n      (message) => !previousMessageIdsRef.current.has(message.id),\n    );\n    previousMessageIdsRef.current = messageIds;\n    if (newMessages.length === 0) return;\n\n    const newestInboundMessage = [...newMessages]\n      .reverse()\n      .find(\n        (message) => message.authorType !== \"subscriber\" && message.messageType !== \"chat_greeting\",\n      );\n    const customerSentMessage = newMessages.some((message) => message.authorType === \"subscriber\");\n\n    const frame = window.requestAnimationFrame(() => {\n      if (newestInboundMessage) {\n        if (isNearConversationBottomRef.current) {\n          scrollToMessageStart(newestInboundMessage.id);\n        } else {\n          setUnreadInboundMessageId(newestInboundMessage.id);\n        }\n      } else if (customerSentMessage) {\n        setConversationTailHeight(0);\n        setPendingInboundScrollId(null);\n        scrollToConversationBottom(\"smooth\");\n      }\n    });\n    return () => window.cancelAnimationFrame(frame);\n  }, [conversationKey, messages, scrollToConversationBottom, scrollToMessageStart]);\n\n  React.useEffect(() => {\n    if (!isAgentTypingInSelectedThread || !isNearConversationBottomRef.current) return;\n    const frame = window.requestAnimationFrame(() => scrollToConversationBottom(\"smooth\"));\n    return () => window.cancelAnimationFrame(frame);\n  }, [isAgentTypingInSelectedThread, scrollToConversationBottom]);\n\n  React.useEffect(() => {\n    if (inboundSoundThreadRef.current !== conversationKey) {\n      inboundSoundThreadRef.current = conversationKey;\n      soundedInboundIdsRef.current = new Set(messages.map((message) => message.id));\n      return;\n    }\n\n    const newInboundMessage = [...messages]\n      .reverse()\n      .find(\n        (message) =>\n          message.authorType !== \"subscriber\" &&\n          message.messageType !== \"chat_greeting\" &&\n          !soundedInboundIdsRef.current.has(message.id),\n      );\n    messages.forEach((message) => soundedInboundIdsRef.current.add(message.id));\n    if (newInboundMessage) {\n      const createdAt = newInboundMessage.createdAt\n        ? new Date(newInboundMessage.createdAt).getTime()\n        : 0;\n      const delay = createdAt > 0 && Date.now() - createdAt < 10_000 ? 720 : 0;\n      const timeout = window.setTimeout(() => playChatSound(\"received\"), delay);\n      return () => window.clearTimeout(timeout);\n    }\n  }, [conversationKey, messages]);\n\n  React.useEffect(() => {\n    const el = composerRef.current;\n    if (!el) return;\n    el.style.height = \"auto\";\n    el.style.height = `${el.scrollHeight}px`;\n  }, [body]);\n\n  const submitComposer = () => {\n    const trimmedBody = body.trim();\n    playChatSound(\"sent\");\n    const shouldOfferFeedback =\n      !selectedThread &&\n      !hasPendingHandoff &&\n      attachments.length === 0 &&\n      Boolean(onFeedbackRequest && onFeedbackSuggestionChange) &&\n      detectProductFeedbackIntent(trimmedBody);\n\n    if (shouldOfferFeedback) {\n      onFeedbackSuggestionChange?.({\n        messageId: `feedback-suggestion-${Date.now()}`,\n        title: subject.trim() || trimmedBody.slice(0, 80),\n        text: trimmedBody,\n        createdAt: new Date().toISOString(),\n      });\n      setSubject(\"\");\n      setBody(\"\");\n      setNotice(\"\");\n      return;\n    }\n\n    const pendingFeedbackSuggestion = !selectedThread ? feedbackSuggestion : null;\n    createMutation.mutate({\n      subject: pendingFeedbackSuggestion?.title,\n      priorMessages: pendingFeedbackSuggestion ? [pendingFeedbackSuggestion.text] : undefined,\n      clearFeedbackSuggestion: Boolean(pendingFeedbackSuggestion),\n    });\n  };\n\n  const pendingInitialMessageRef = React.useRef<string | null>(null);\n\n  React.useEffect(() => {\n    if (!initialMessage?.trim()) return;\n    pendingInitialMessageRef.current = initialMessage.trim();\n    setBody(initialMessage.trim());\n    onInitialMessageConsumed?.();\n  }, [initialMessage, onInitialMessageConsumed]);\n\n  React.useEffect(() => {\n    const pendingMessage = pendingInitialMessageRef.current;\n    if (!pendingMessage || body.trim() !== pendingMessage) return;\n    if (showAuthentication) return;\n    if (!canSubmit || createMutation.isPending) return;\n    pendingInitialMessageRef.current = null;\n    submitComposer();\n  });\n\n  const handleComposerKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n    if (event.key === \"Enter\" && !event.shiftKey) {\n      event.preventDefault();\n      if (canSubmit && !createMutation.isPending) submitComposer();\n    }\n  };\n\n  const applyChatPrompt = (prefill: string) => {\n    setBody(prefill);\n    window.requestAnimationFrame(() => {\n      const el = composerRef.current;\n      if (!el) return;\n      el.focus();\n      el.setSelectionRange(prefill.length, prefill.length);\n    });\n  };\n\n  const acceptFeedbackSuggestion = () => {\n    if (!feedbackSuggestion || !onFeedbackRequest) return;\n    onFeedbackRequest({\n      title: feedbackSuggestion.title,\n      text: feedbackSuggestion.text,\n    });\n  };\n\n  const sendFeedbackSuggestionToSupport = () => {\n    if (!feedbackSuggestion || createMutation.isPending) return;\n    createMutation.mutate({\n      body: feedbackSuggestion.text,\n      subject: feedbackSuggestion.title,\n      clearFeedbackSuggestion: true,\n    });\n  };\n\n  const renderFields = () => {\n    if (!showInboxHome || requestFields.length === 0) return null;\n\n    return (\n      <div className=\"mb-2 space-y-2\">\n        {requestFields.map((field) => {\n          const value = fieldValues[field.id];\n          if (field.type === \"checkbox\") {\n            return (\n              <label\n                key={field.id}\n                className=\"flex items-center gap-2 rounded-lg px-1 text-[13px] text-[#504b59] dark:text-[#d9d4df]\"\n              >\n                <input\n                  type=\"checkbox\"\n                  checked={value === true}\n                  onChange={(event) =>\n                    setFieldValues((current) => ({\n                      ...current,\n                      [field.id]: event.target.checked,\n                    }))\n                  }\n                />\n                <span>{field.label}</span>\n              </label>\n            );\n          }\n\n          if (field.type === \"select\") {\n            return (\n              <label key={field.id} className=\"block\">\n                <span className=\"mb-1 block text-[12px] font-medium text-[#67616f] dark:text-[#aaa3b4]\">\n                  {field.label}\n                </span>\n                <select\n                  value={typeof value === \"string\" ? value : \"\"}\n                  onChange={(event) =>\n                    setFieldValues((current) => ({ ...current, [field.id]: event.target.value }))\n                  }\n                  className=\"h-9 w-full rounded-lg border border-[#dedbe4] bg-white px-2 font-sans text-[13px] text-[#17151c] outline-none dark:border-[#45414d] dark:bg-[#25232b] dark:text-[#f4f2f7]\"\n                >\n                  <option value=\"\">{field.placeholder || \"Select\"}</option>\n                  {fieldOptions(field).map((option) => (\n                    <option key={option.value} value={option.value}>\n                      {option.label}\n                    </option>\n                  ))}\n                </select>\n              </label>\n            );\n          }\n\n          const FieldTag = field.type === \"textarea\" ? \"textarea\" : \"input\";\n          return (\n            <label key={field.id} className=\"block\">\n              <span className=\"mb-1 block text-[12px] font-medium text-[#67616f] dark:text-[#aaa3b4]\">\n                {field.label}\n              </span>\n              <FieldTag\n                value={typeof value === \"string\" ? value : \"\"}\n                onChange={(event) =>\n                  setFieldValues((current) => ({ ...current, [field.id]: event.target.value }))\n                }\n                placeholder={field.placeholder}\n                className=\"w-full rounded-lg border border-[#dedbe4] bg-white px-2 py-2 font-sans text-[13px] text-[#17151c] outline-none placeholder:text-[#85808c] dark:border-[#45414d] dark:bg-[#25232b] dark:text-[#f4f2f7] dark:placeholder:text-[#9a94a3]\"\n              />\n            </label>\n          );\n        })}\n      </div>\n    );\n  };\n\n  const renderAttachments = () => {\n    if (attachments.length === 0) return null;\n\n    return (\n      <div className=\"mt-2 flex flex-wrap gap-2\">\n        {attachments.map((attachment) => (\n          <div\n            key={attachment.id}\n            className=\"relative flex h-10 max-w-full items-center gap-2 rounded-lg border border-[#dedbe4] bg-[#fafafa] px-2 pr-8 dark:border-[#45414d] dark:bg-[#1d1b22]\"\n          >\n            {attachment.status === \"uploading\" ? (\n              <Loader2 className=\"size-3.5 animate-spin text-[#7b7483]\" />\n            ) : (\n              <Paperclip className=\"size-3.5 text-[#7b7483]\" />\n            )}\n            <span className=\"max-w-[9rem] truncate text-[12px] text-[#504b59] dark:text-[#ddd7e6]\">\n              {attachment.file.name}\n            </span>\n            {attachment.status === \"error\" ? (\n              <span className=\"text-[11px] text-red-500\">Failed</span>\n            ) : null}\n            <button\n              type=\"button\"\n              onClick={() => removeAttachment(attachment.id)}\n              className=\"absolute right-1.5 top-1.5 inline-flex size-5 items-center justify-center rounded-md text-[#827b8b] hover:bg-black/[0.06] dark:hover:bg-white/[0.08]\"\n              aria-label=\"Remove attachment\"\n            >\n              <X className=\"size-3.5\" />\n            </button>\n          </div>\n        ))}\n      </div>\n    );\n  };\n\n  const openRequestList = () => {\n    setSelectedThreadId(null);\n    setIsComposingNewRequest(isChatMode);\n    setNotice(\"\");\n  };\n\n  const headerIconButtonClass =\n    \"inline-flex size-10 shrink-0 items-center justify-center rounded-lg text-[#5f5b66] transition-[background-color,transform] hover:bg-black/[0.04] active:scale-[0.96] dark:text-[#ded9e6] dark:hover:bg-white/[0.06]\";\n  let headerTitle = \"Messages\";\n  let headerSubtitle = \"\";\n  if (showAuthentication) {\n    headerTitle = authenticationStep === \"verify\" ? \"Check your email\" : \"Help us know who you are\";\n  } else if (isChatMode && activeResponder) {\n    headerTitle = supportMessageSender(activeResponder);\n    headerSubtitle = \"Active\";\n  } else if (isChatMode) {\n    headerTitle = chatTitle;\n  } else if (selectedThread) {\n    headerTitle = `${selectedThread.externalId ? `${selectedThread.externalId} ` : \"\"}${selectedThread.subject}`;\n  } else if (isComposingNewRequest) {\n    headerTitle = \"Ask a question\";\n  }\n  let composerPlaceholder = \"Ask a question...\";\n  if (selectedThread) {\n    composerPlaceholder = \"Message...\";\n  } else if (hasPendingHandoff) {\n    composerPlaceholder = \"Message...\";\n  }\n  const messageListScrollPaddingClass = \"pb-[72px]\";\n  const isLoadingContent =\n    Boolean(selectedThreadId && (threadsQuery.isLoading || threadQuery.isLoading)) ||\n    Boolean(showMessageListView && threadsQuery.isLoading);\n\n  function renderAuthentication() {\n    return (\n      <div className=\"mx-auto flex min-h-full w-full max-w-[420px] flex-col px-5 py-7\">\n        {authenticationStep === \"identify\" ? (\n          <form\n            className=\"flex flex-1 flex-col\"\n            onSubmit={(event) => {\n              event.preventDefault();\n              setAuthenticationError(\"\");\n              authenticationRequestMutation.mutate();\n            }}\n          >\n            <p className=\"mb-7 text-[14px] leading-6 text-[#67616f] dark:text-[#aaa3b4]\">\n              Continue the conversation over email if you leave.\n            </p>\n            <label className=\"mb-5 block\">\n              <span className=\"mb-2 block text-[14px] font-semibold text-[#242029] dark:text-[#f4f2f7]\">\n                Email address\n              </span>\n              <input\n                type=\"email\"\n                required\n                autoComplete=\"email\"\n                value={email}\n                onChange={(event) => setEmail(event.target.value)}\n                placeholder=\"email@example.com\"\n                className=\"h-11 w-full rounded-lg border border-[#d9d6df] bg-white px-3 font-sans text-[14px] text-[#17151c] outline-none transition focus:border-[#8b8493] focus:ring-2 focus:ring-black/[0.05] dark:border-[#45414d] dark:bg-[#1d1b22] dark:text-[#f4f2f7] dark:placeholder:text-[#8f8997] dark:focus:border-[#77717f] dark:focus:ring-white/[0.06]\"\n              />\n            </label>\n            <label className=\"mb-6 block\">\n              <span className=\"mb-2 block text-[14px] font-semibold text-[#242029] dark:text-[#f4f2f7]\">\n                Full name\n              </span>\n              <input\n                required\n                autoComplete=\"name\"\n                value={fullName}\n                onChange={(event) => setFullName(event.target.value)}\n                placeholder=\"Alice Smith\"\n                className=\"h-11 w-full rounded-lg border border-[#d9d6df] bg-white px-3 font-sans text-[14px] text-[#17151c] outline-none transition focus:border-[#8b8493] focus:ring-2 focus:ring-black/[0.05] dark:border-[#45414d] dark:bg-[#1d1b22] dark:text-[#f4f2f7] dark:placeholder:text-[#8f8997] dark:focus:border-[#77717f] dark:focus:ring-white/[0.06]\"\n              />\n            </label>\n            {authenticationError ? (\n              <p className=\"mb-4 text-[13px] leading-5 text-red-600 dark:text-red-400\" role=\"alert\">\n                {authenticationError}\n              </p>\n            ) : null}\n            <button\n              type=\"submit\"\n              disabled={\n                !email.trim() || !fullName.trim() || authenticationRequestMutation.isPending\n              }\n              className=\"mt-auto flex h-11 w-full items-center justify-center rounded-lg text-[14px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-50\"\n              style={{\n                backgroundColor: primaryButtonBackgroundColor,\n                color: primaryButtonTextColor,\n              }}\n            >\n              {authenticationRequestMutation.isPending ? (\n                <Loader2 className=\"size-4 animate-spin\" />\n              ) : (\n                \"Submit\"\n              )}\n            </button>\n          </form>\n        ) : (\n          <form\n            className=\"flex flex-1 flex-col\"\n            onSubmit={(event) => {\n              event.preventDefault();\n              setAuthenticationError(\"\");\n              authenticationVerifyMutation.mutate();\n            }}\n          >\n            <p className=\"mb-7 text-[14px] leading-6 text-[#67616f] dark:text-[#aaa3b4]\">\n              We've sent a code to <span className=\"font-medium\">{email.trim()}</span>\n            </p>\n            <label className=\"block\">\n              <span className=\"mb-2 block text-[14px] font-semibold text-[#242029] dark:text-[#f4f2f7]\">\n                Verification code\n              </span>\n              <input\n                inputMode=\"numeric\"\n                autoComplete=\"one-time-code\"\n                maxLength={8}\n                required\n                value={verificationCode}\n                onChange={(event) => setVerificationCode(event.target.value.replace(/\\D/g, \"\"))}\n                placeholder=\"--------\"\n                aria-label=\"Eight digit verification code\"\n                className=\"h-14 w-full rounded-lg border border-[#d9d6df] bg-white px-4 text-center font-mono text-[20px] font-semibold tracking-[0.42em] text-[#17151c] outline-none transition placeholder:text-[#aaa5af] focus:border-[#8b8493] focus:ring-2 focus:ring-black/[0.05] dark:border-[#45414d] dark:bg-[#1d1b22] dark:text-[#f4f2f7] dark:placeholder:text-[#77717f] dark:focus:border-[#77717f] dark:focus:ring-white/[0.06]\"\n              />\n            </label>\n            <p className=\"mt-5 text-[14px] text-[#67616f] dark:text-[#aaa3b4]\">\n              Didn't get a code?{\" \"}\n              <button\n                type=\"button\"\n                disabled={authenticationRequestMutation.isPending}\n                onClick={() => {\n                  setAuthenticationError(\"\");\n                  authenticationRequestMutation.mutate();\n                }}\n                className=\"font-medium text-[#242029] underline underline-offset-4 disabled:opacity-50 dark:text-[#f4f2f7]\"\n              >\n                Resend\n              </button>\n            </p>\n            {authenticationError ? (\n              <p className=\"mt-4 text-[13px] leading-5 text-red-600 dark:text-red-400\" role=\"alert\">\n                {authenticationError}\n              </p>\n            ) : null}\n            <button\n              type=\"submit\"\n              disabled={verificationCode.length !== 8 || authenticationVerifyMutation.isPending}\n              className=\"mt-auto flex h-11 w-full items-center justify-center rounded-lg text-[14px] font-semibold transition disabled:cursor-not-allowed disabled:opacity-50\"\n              style={{\n                backgroundColor: primaryButtonBackgroundColor,\n                color: primaryButtonTextColor,\n              }}\n            >\n              {authenticationVerifyMutation.isPending ? (\n                <Loader2 className=\"size-4 animate-spin\" />\n              ) : (\n                \"Verify email\"\n              )}\n            </button>\n          </form>\n        )}\n      </div>\n    );\n  }\n\n  const activeView = showAuthentication\n    ? \"authentication\"\n    : isChatMode\n      ? \"chat\"\n      : selectedThreadId\n        ? `thread-${selectedThreadId}`\n        : isComposingNewRequest\n          ? \"compose\"\n          : \"inbox\";\n  const isInboxView = activeView === \"inbox\";\n\n  return (\n    <div\n      className={`relative flex h-full flex-col overflow-hidden bg-white text-[#171719] antialiased dark:bg-gray-900 dark:text-[#f4f4f5] ${showPoweredByFooter ? \"pb-[25px]\" : \"\"}`}\n    >\n      <AnimatePresence initial={false} mode=\"sync\">\n        <motion.div\n          key={activeView}\n          initial={isSettlingAiHandoff ? false : { x: isInboxView ? \"-40%\" : \"40%\" }}\n          animate={{ x: 0 }}\n          exit={{ x: isInboxView ? \"-40%\" : \"40%\", opacity: 0 }}\n          transition={{ type: \"spring\", stiffness: 300, damping: 30, mass: 0.8 }}\n          className={`absolute inset-x-0 top-0 flex min-h-0 flex-col ${showPoweredByFooter ? \"bottom-[25px]\" : \"bottom-0\"}`}\n        >\n          <div\n            className={`sticky top-0 z-10 flex shrink-0 items-center justify-between gap-2 rounded-t-xl border-b border-solid border-gray-100 bg-white px-3 dark:border-gray-700/70 dark:bg-gray-800 ${headerSubtitle ? \"h-16\" : \"h-14\"}`}\n          >\n            <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n              {(isChatMode || isInboxView) && onBack ? (\n                <button\n                  type=\"button\"\n                  className={headerIconButtonClass}\n                  aria-label={isInboxView ? \"Back to support\" : \"Back\"}\n                  onClick={\n                    showAuthentication && authenticationStep === \"verify\"\n                      ? () => {\n                          setAuthenticationStep(\"identify\");\n                          setAuthenticationError(\"\");\n                        }\n                      : onBack\n                  }\n                >\n                  <ArrowLeft className=\"size-4\" />\n                </button>\n              ) : (selectedThread || isComposingNewRequest) && !isChatMode ? (\n                <button\n                  type=\"button\"\n                  className={headerIconButtonClass}\n                  aria-label=\"Back to messages\"\n                  onClick={openRequestList}\n                >\n                  <ArrowLeft className=\"size-4\" />\n                </button>\n              ) : null}\n              {isChatMode && !showAuthentication && activeResponder ? (\n                <SenderAvatar\n                  name={supportMessageSender(activeResponder)}\n                  avatarUrl={supportMessageAvatarUrl(activeResponder)}\n                  size=\"medium\"\n                  showPresence\n                />\n              ) : null}\n              <div className=\"flex min-w-0 flex-col justify-center\">\n                <h2 className=\"m-0 truncate text-[16px] font-semibold leading-5 text-neutral-950 dark:text-neutral-100\">\n                  {headerTitle}\n                </h2>\n                {headerSubtitle ? (\n                  <p className=\"m-0 mt-0.5 truncate text-[12px] leading-4 text-[#817b8d] dark:text-[#aaa3b4]\">\n                    {headerSubtitle}\n                  </p>\n                ) : null}\n              </div>\n            </div>\n            <div className=\"flex shrink-0 items-center gap-1\">\n              {onClose ? (\n                <button\n                  type=\"button\"\n                  className={headerIconButtonClass}\n                  aria-label=\"Close\"\n                  onClick={onClose}\n                >\n                  <X className=\"size-4\" />\n                </button>\n              ) : null}\n            </div>\n          </div>\n\n          <div\n            ref={messagesScrollRef}\n            onScroll={handleConversationScroll}\n            onTouchStart={handleConversationScrollIntent}\n            onWheel={handleConversationScrollIntent}\n            className={`uo-chat-scroll min-h-0 flex-1 overflow-y-auto ${\n              showMessageListView ? messageListScrollPaddingClass : \"\"\n            }`}\n          >\n            {showAuthentication ? (\n              renderAuthentication()\n            ) : isLoadingContent ? (\n              <div className=\"flex h-full items-center justify-center\">\n                <Loader2 className=\"size-5 animate-spin text-[#69686e] dark:text-[#9b9ba1]\" />\n              </div>\n            ) : (\n              <div className=\"min-h-full\">\n                {showInboxHome ? (\n                  <>\n                    {showThreadList ? (\n                      <div className=\"flex flex-col gap-[2px] p-[8px]\">\n                        {threads.map((thread) => (\n                          <button\n                            key={thread.id}\n                            type=\"button\"\n                            onClick={() => setSelectedThreadId(thread.id)}\n                            className=\"flex w-full cursor-pointer items-start gap-[12px] rounded-[12px] border-0 bg-transparent px-[12px] py-[10px] text-left font-sans outline-none transition-colors hover:bg-uo-fill-hover focus-visible:bg-uo-fill-hover\"\n                          >\n                            <div className=\"flex min-w-0 flex-1 flex-col gap-[2px]\">\n                              <span className=\"truncate text-[14px] font-semibold leading-[20px] text-uo-text-primary\">\n                                {thread.subject}\n                              </span>\n                              <span className=\"truncate text-[13px] leading-[18px] text-uo-text-tertiary\">\n                                {thread.lastMessagePreview || thread.customerProgress}\n                              </span>\n                            </div>\n                            <div className=\"flex shrink-0 flex-col items-end gap-[4px]\">\n                              <span className=\"flex items-center gap-[6px] text-[12px] leading-[20px] tabular-nums text-uo-text-tertiary\">\n                                {thread.unreadByCustomerAt ? (\n                                  <span\n                                    className=\"size-[7px] rounded-full bg-uo-info-solid\"\n                                    aria-label=\"Unread message\"\n                                  />\n                                ) : null}\n                                {relativeTime(thread.updatedAt)}\n                              </span>\n                              {thread.customerProgress ? (\n                                <span className=\"rounded-full bg-uo-surface-2 px-[8px] text-[11px] font-medium leading-[18px] text-uo-text-secondary\">\n                                  {thread.customerProgress}\n                                </span>\n                              ) : null}\n                            </div>\n                          </button>\n                        ))}\n                      </div>\n                    ) : null}\n                    {showMessagesLanding ? (\n                      <div className=\"flex min-h-full flex-col items-center justify-center px-6 pb-24 pt-8 text-center\">\n                        <IconMessages\n                          className=\"mb-2.5 text-[#242029] dark:text-[#f4f2f7]\"\n                          size={30}\n                        />\n                        <h3 className=\"text-[18px] font-semibold leading-6 text-[#242029] dark:text-[#f4f2f7]\">\n                          No messages\n                        </h3>\n                        <p className=\"mt-1.5 max-w-[260px] text-[13px] leading-5 text-[#5f5b66] dark:text-[#d8d4de]\">\n                          Messages from the team will be shown here\n                        </p>\n                      </div>\n                    ) : null}\n                    {isChatMode &&\n                    isComposingNewRequest &&\n                    !hasPendingHandoff &&\n                    !feedbackSuggestion ? (\n                      <ChatGreeting />\n                    ) : null}\n                  </>\n                ) : null}\n\n                {messages.length > 0 ? (\n                  <div className=\"flex min-h-full flex-col justify-end\">\n                    <div\n                      className=\"space-y-3 px-4 pb-6 pt-5\"\n                      role=\"log\"\n                      aria-live=\"polite\"\n                      aria-relevant=\"additions text\"\n                    >\n                      {messages.map((message, index) => {\n                        const isCustomer = message.authorType === \"subscriber\";\n                        const sender = supportMessageSender(message);\n                        const nextMessage = messages[index + 1];\n                        const showInboundMetadata =\n                          !isCustomer &&\n                          !message.suggestedArticles?.length &&\n                          (!nextMessage ||\n                            nextMessage.authorType === \"subscriber\" ||\n                            supportMessageSender(nextMessage) !== sender);\n                        const showFeedbackSuggestion = Boolean(\n                          feedbackSuggestion &&\n                          !selectedThread &&\n                          feedbackSuggestion.messageId === message.id,\n                        );\n                        const messageCreatedAt = message.createdAt\n                          ? new Date(message.createdAt).getTime()\n                          : 0;\n                        const typeBeforeReveal =\n                          !isCustomer &&\n                          message.messageType !== \"chat_greeting\" &&\n                          (message.id === \"handoff-routing\" ||\n                            (!isSettlingAiHandoff &&\n                              messageCreatedAt > 0 &&\n                              Date.now() - messageCreatedAt < 10_000));\n                        return (\n                          <motion.div\n                            key={message.id}\n                            ref={(node) => {\n                              if (node) messageNodesRef.current.set(message.id, node);\n                              else messageNodesRef.current.delete(message.id);\n                            }}\n                            layout=\"position\"\n                            initial={\n                              isSettlingAiHandoff\n                                ? false\n                                : { opacity: 0, y: 8, scale: 0.98, filter: \"blur(2px)\" }\n                            }\n                            animate={{ opacity: 1, y: 0, scale: 1, filter: \"blur(0px)\" }}\n                            transition={{\n                              type: \"spring\",\n                              duration: 0.3,\n                              bounce: 0,\n                              delay: Math.min(index * 0.045, 0.24),\n                            }}\n                          >\n                            {message.id === firstHumanMessageId ? (\n                              <div className=\"flex items-center justify-center gap-2 py-2 text-[12px] leading-5 text-[#817b8d] dark:text-[#aaa3b4]\">\n                                <SenderAvatar\n                                  name={sender}\n                                  avatarUrl={supportMessageAvatarUrl(message)}\n                                />\n                                <span>{sender} joined the conversation</span>\n                              </div>\n                            ) : null}\n                            <MessageReveal typeBeforeReveal={typeBeforeReveal}>\n                              <div\n                                className={`flex flex-col ${isCustomer ? \"items-end\" : \"items-start\"}`}\n                              >\n                                <div\n                                  className={`min-w-0 overflow-hidden whitespace-pre-wrap text-pretty text-[14px] leading-[1.55] ${\n                                    isCustomer\n                                      ? \"max-w-[85%] rounded-[20px] rounded-br-[6px] px-4 py-3\"\n                                      : \"max-w-full rounded-[20px] rounded-bl-[6px] bg-[#f4f4f5] px-4 py-3 text-[#242127] dark:bg-white/[0.08] dark:text-[#f4f2f7]\"\n                                  }`}\n                                  style={\n                                    isCustomer\n                                      ? {\n                                          backgroundColor: primaryButtonBackgroundColor,\n                                          color: primaryButtonTextColor,\n                                        }\n                                      : undefined\n                                  }\n                                >\n                                  {message.authorType === \"ai\" ? (\n                                    <div\n                                      className=\"uo-ai-markdown max-w-none text-[14px] leading-6\"\n                                      dangerouslySetInnerHTML={{\n                                        __html: renderMarkdown(message.body),\n                                      }}\n                                    />\n                                  ) : message.bodyFormat === \"html\" &&\n                                    message.bodyHtml &&\n                                    message.authoredBody !== false ? (\n                                    <div\n                                      className=\"uo-ai-markdown max-w-none whitespace-normal text-[14px] leading-6\"\n                                      dangerouslySetInnerHTML={{ __html: message.bodyHtml }}\n                                    />\n                                  ) : message.authoredBody !== false ? (\n                                    <MessageBody\n                                      body={message.body}\n                                      helpCenterHosts={helpCenterHosts}\n                                      onOpenArticle={openArticle}\n                                    />\n                                  ) : null}\n                                  {message.resources && message.resources.length > 0 ? (\n                                    <div className=\"mt-2 flex w-full flex-col gap-1.5 whitespace-normal\">\n                                      {message.resources.map((resource) => (\n                                        <button\n                                          key={`${resource.type}:${resource.id}`}\n                                          type=\"button\"\n                                          onClick={() => openResource(resource)}\n                                          className=\"flex min-h-11 w-full items-center gap-2.5 rounded-xl px-3 py-2 text-left text-[#504b59] transition-[background-color,transform] hover:bg-black/[0.045] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-current active:scale-[0.99] dark:text-[#ded9e6] dark:hover:bg-white/[0.08]\"\n                                        >\n                                          <SupportResourceIcon\n                                            type={resource.type}\n                                            className=\"size-5 shrink-0\"\n                                          />\n                                          <span className=\"min-w-0 flex-1\">\n                                            <span className=\"block line-clamp-2 text-[12px] font-medium\">\n                                              {resource.title}\n                                            </span>\n                                            {resource.description ? (\n                                              <span className=\"mt-0.5 line-clamp-2 text-[11px] leading-4 opacity-75\">\n                                                {resource.description}\n                                              </span>\n                                            ) : null}\n                                            <span className=\"mt-0.5 block text-[10px] opacity-65\">\n                                              {supportResourceActionLabel(resource.type)}\n                                            </span>\n                                          </span>\n                                          <ChevronRight\n                                            aria-hidden=\"true\"\n                                            className=\"size-3.5 shrink-0 opacity-55\"\n                                          />\n                                        </button>\n                                      ))}\n                                    </div>\n                                  ) : null}\n                                  {message.suggestedArticles &&\n                                  message.suggestedArticles.length > 0 ? (\n                                    <div className=\"mt-2 flex flex-col items-start gap-1.5\">\n                                      {message.suggestedArticles.map((article) => (\n                                        <button\n                                          key={article.url}\n                                          type=\"button\"\n                                          onClick={() => openArticle(article)}\n                                          className={`inline-flex max-w-full items-center gap-1.5 rounded-lg px-2 py-1 text-left text-[12px] ${\n                                            isCustomer\n                                              ? \"bg-white/[0.16] text-inherit hover:bg-white/[0.24]\"\n                                              : \"bg-black/[0.04] text-[#504b59] hover:bg-black/[0.07] dark:bg-white/[0.08] dark:text-[#ded9e6] dark:hover:bg-white/[0.12]\"\n                                          }`}\n                                        >\n                                          <BookOpen className=\"size-3.5 shrink-0\" />\n                                          <span className=\"truncate\">{article.title}</span>\n                                        </button>\n                                      ))}\n                                    </div>\n                                  ) : null}\n                                  {message.attachments && message.attachments.length > 0 ? (\n                                    <div className=\"mt-2 flex flex-wrap gap-2\">\n                                      {message.attachments.map((attachment) =>\n                                        attachment.contentType?.startsWith(\"image/\") ? (\n                                          <a\n                                            key={attachment.id}\n                                            href={attachment.url}\n                                            target=\"_blank\"\n                                            rel=\"noreferrer\"\n                                            className=\"block max-w-full\"\n                                          >\n                                            <img\n                                              src={attachment.url}\n                                              alt={attachment.name}\n                                              loading=\"lazy\"\n                                              className=\"max-h-48 w-auto max-w-full rounded-lg\"\n                                            />\n                                          </a>\n                                        ) : (\n                                          <a\n                                            key={attachment.id}\n                                            href={attachment.url}\n                                            target=\"_blank\"\n                                            rel=\"noreferrer\"\n                                            className={`inline-flex max-w-full items-center gap-1.5 rounded-lg px-2 py-1 text-[12px] no-underline ${\n                                              isCustomer\n                                                ? \"bg-white/[0.16] text-inherit hover:bg-white/[0.24]\"\n                                                : \"bg-black/[0.04] text-[#504b59] hover:bg-black/[0.07] dark:bg-white/[0.08] dark:text-[#ded9e6] dark:hover:bg-white/[0.12]\"\n                                            }`}\n                                          >\n                                            <Paperclip className=\"size-3.5\" />\n                                            <span className=\"truncate\">{attachment.name}</span>\n                                          </a>\n                                        ),\n                                      )}\n                                    </div>\n                                  ) : null}\n                                </div>\n                                {showInboundMetadata ? (\n                                  <span className=\"mt-1 px-3 text-[12px] leading-5 tabular-nums text-[#817b8d] dark:text-[#827c8b]\">\n                                    {sender}\n                                    {` · ${relativeTime(message.createdAt) || \"Just now\"}`}\n                                  </span>\n                                ) : null}\n                              </div>\n                              {showFeedbackSuggestion ? (\n                                <motion.div\n                                  initial={{ opacity: 0, y: 6, filter: \"blur(4px)\" }}\n                                  animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n                                  transition={{ type: \"spring\", duration: 0.3, bounce: 0 }}\n                                  className=\"w-fit max-w-[92%]\"\n                                >\n                                  <button\n                                    type=\"button\"\n                                    onClick={acceptFeedbackSuggestion}\n                                    className=\"group flex min-h-12 w-full items-center gap-2 rounded-xl bg-white px-3 py-2 text-left shadow-[0_0_0_1px_rgba(0,0,0,0.06),0_1px_2px_-1px_rgba(0,0,0,0.06),0_2px_4px_rgba(0,0,0,0.04)] transition-[box-shadow,transform] duration-150 ease-out hover:shadow-[0_0_0_1px_rgba(0,0,0,0.09),0_1px_2px_-1px_rgba(0,0,0,0.08),0_2px_4px_rgba(0,0,0,0.06)] active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black/20 focus-visible:ring-offset-2 dark:bg-[#242229] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.08)] dark:hover:shadow-[0_0_0_1px_rgba(255,255,255,0.13)] dark:focus-visible:ring-white/25 dark:focus-visible:ring-offset-gray-900\"\n                                  >\n                                    <span className=\"min-w-0 flex-1\">\n                                      <span className=\"block text-[14px] font-medium leading-5 text-[#242029] dark:text-[#f4f2f7]\">\n                                        Create product feedback\n                                      </span>\n                                      <span className=\"block text-pretty text-[12px] leading-4 text-[#817b8d] dark:text-[#aaa3b4]\">\n                                        Prefill the form with this message\n                                      </span>\n                                    </span>\n                                    <ChevronRight className=\"size-4 shrink-0 text-[#817b8d] transition-transform duration-150 ease-out group-hover:translate-x-0.5 dark:text-[#aaa3b4]\" />\n                                  </button>\n                                  <button\n                                    type=\"button\"\n                                    onClick={sendFeedbackSuggestionToSupport}\n                                    disabled={createMutation.isPending}\n                                    className=\"mt-0.5 flex h-10 items-center justify-center gap-2 rounded-lg px-2 text-[12px] font-medium text-[#67616f] transition-[color,transform] duration-150 ease-out hover:text-[#242029] active:scale-[0.96] disabled:cursor-not-allowed disabled:opacity-60 dark:text-[#aaa3b4] dark:hover:text-[#f4f2f7]\"\n                                  >\n                                    <span className=\"size-1.5 shrink-0 rounded-full bg-emerald-500\" />\n                                    {createMutation.isPending\n                                      ? \"Sending to support…\"\n                                      : \"Send to support team\"}\n                                  </button>\n                                </motion.div>\n                              ) : null}\n                            </MessageReveal>\n                          </motion.div>\n                        );\n                      })}\n                      {showAwaitingSupportResponse ? (\n                        <div\n                          className=\"flex items-center justify-center gap-2 py-1 text-[12px] leading-5 text-[#817b8d] dark:text-[#aaa3b4]\"\n                          role=\"status\"\n                        >\n                          <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n                          <span>Waiting for the support team</span>\n                        </div>\n                      ) : null}\n                      {isAgentTypingInSelectedThread && agentTyping ? (\n                        <div\n                          className=\"px-1 pb-1\"\n                          aria-label={`${agentTyping.actorName} is typing`}\n                          aria-live=\"polite\"\n                          role=\"status\"\n                        >\n                          <TypingIndicatorBubble />\n                        </div>\n                      ) : null}\n                      {conversationTailHeight > 0 ? (\n                        <div\n                          className=\"shrink-0\"\n                          style={{ height: conversationTailHeight }}\n                          aria-hidden=\"true\"\n                        />\n                      ) : null}\n                    </div>\n                  </div>\n                ) : null}\n              </div>\n            )}\n          </div>\n\n          <AnimatePresence initial={false}>\n            {unreadInboundMessageId ? (\n              <motion.button\n                type=\"button\"\n                initial={{ opacity: 0, y: 8, filter: \"blur(4px)\" }}\n                animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n                exit={{ opacity: 0, y: 6, filter: \"blur(4px)\" }}\n                transition={{ type: \"spring\", duration: 0.3, bounce: 0 }}\n                onClick={() => scrollToMessageStart(unreadInboundMessageId)}\n                className=\"absolute bottom-[112px] left-1/2 z-30 flex min-h-10 -translate-x-1/2 items-center gap-1.5 rounded-full bg-[#171719] px-4 text-[13px] font-medium text-white shadow-[0_8px_24px_-10px_rgba(0,0,0,0.55)] transition-[background-color,scale] duration-150 ease-out hover:bg-[#2a2930] active:scale-[0.96] dark:bg-white dark:text-[#171719] dark:hover:bg-[#f2f2f4]\"\n              >\n                <span>New message</span>\n                <ArrowDown className=\"size-3.5\" />\n              </motion.button>\n            ) : null}\n          </AnimatePresence>\n\n          {!showAuthentication && showMessageListView && !threadsQuery.isLoading ? (\n            <div className=\"pointer-events-none absolute bottom-0 left-0 right-0 z-20 flex h-[72px] items-end justify-center bg-gradient-to-t from-white via-white/90 to-transparent px-3 pb-4 dark:from-gray-900 dark:via-gray-900/90\">\n              <button\n                type=\"button\"\n                className=\"pointer-events-auto mx-auto flex h-[36px] cursor-pointer items-center justify-center rounded-full border-0 bg-uo-primary px-[16px] font-sans text-[13px] font-medium text-uo-on-primary shadow-[0_8px_20px_-12px_rgba(0,0,0,0.5)] transition-[background-color,transform] duration-150 hover:bg-uo-primary-hover active:scale-[0.96]\"\n                onClick={() => {\n                  onStartChat?.();\n                }}\n              >\n                Ask a question\n              </button>\n            </div>\n          ) : null}\n\n          {!showAuthentication && !showMessageListView ? (\n            <div className=\"shrink-0 bg-white px-3 pb-3 pt-2 dark:bg-gray-900\">\n              {isClosed ? (\n                <div className=\"rounded-xl bg-[#f6f6f8] px-3 py-3 text-[13px] text-[#68616f] dark:bg-[#242229] dark:text-[#c5bdce]\">\n                  This request is closed.\n                </div>\n              ) : (\n                <>\n                  {renderFields()}\n                  {isChatMode &&\n                  !selectedThread &&\n                  !body &&\n                  !hasPendingHandoff &&\n                  !feedbackSuggestion ? (\n                    <div className=\"mb-2 flex flex-wrap gap-1.5\">\n                      {CHAT_PROMPTS.map((prompt) => (\n                        <button\n                          key={prompt.label}\n                          type=\"button\"\n                          onClick={() => applyChatPrompt(prompt.prefill)}\n                          className=\"rounded-full border border-solid border-[#dedbe4] bg-white px-3 py-1.5 text-[13px] font-medium text-[#504b59] transition-[background-color,transform] hover:bg-black/[0.04] active:scale-[0.97] dark:border-[#45414d] dark:bg-transparent dark:text-[#ded9e6] dark:hover:bg-white/[0.06]\"\n                        >\n                          {prompt.label}\n                        </button>\n                      ))}\n                    </div>\n                  ) : null}\n                  <div\n                    className=\"min-h-[84px] w-full cursor-text rounded-[20px] bg-white px-2 pb-2 pt-3 shadow-[0_0_0_1px_rgba(0,0,0,0.15),0_1px_2px_rgba(0,0,0,0.05)] transition-[box-shadow] duration-150 ease-out focus-within:shadow-[0_0_0_1px_rgba(0,0,0,0.28),0_1px_2px_rgba(0,0,0,0.05)] dark:bg-gray-800 dark:shadow-[0_0_0_1px_rgba(255,255,255,0.15)] dark:focus-within:shadow-[0_0_0_1px_rgba(255,255,255,0.28)]\"\n                    onClick={() => composerRef.current?.focus()}\n                  >\n                    {showInboxHome && showEmailField ? (\n                      <input\n                        value={email}\n                        onChange={(event) => setEmail(event.target.value)}\n                        placeholder=\"Email for replies\"\n                        className=\"mb-1 h-8 w-full border-0 border-b border-solid border-black/[0.06] bg-transparent px-2 font-sans text-[13px] text-[#17151c] outline-none placeholder:text-[#85808c] dark:border-white/[0.08] dark:text-[#f4f2f7] dark:placeholder:text-[#9a94a3]\"\n                      />\n                    ) : null}\n                    <textarea\n                      ref={composerRef}\n                      value={body}\n                      onChange={(event) => {\n                        setBody(event.target.value);\n                        if (!selectedThread) return;\n                        if (event.target.value.trim()) startCustomerTyping();\n                        else stopCustomerTyping();\n                      }}\n                      onKeyDown={handleComposerKeyDown}\n                      placeholder={composerPlaceholder}\n                      rows={1}\n                      className=\"max-h-28 w-full resize-none overflow-y-auto border-0 bg-transparent px-2 py-1 font-sans text-[14px] font-normal leading-6 text-[#17151c] outline-none placeholder:text-[#85808c] dark:text-[#f4f2f7] dark:placeholder:text-[#9a94a3]\"\n                    />\n                    {renderAttachments()}\n                    <div className=\"flex shrink-0 flex-row items-center justify-end gap-1\">\n                      <button\n                        type=\"button\"\n                        onClick={() => fileInputRef.current?.click()}\n                        className=\"flex size-10 items-center justify-center rounded-lg text-[#7b7483] transition-[background-color,color,transform] hover:bg-gray-100 hover:text-[#17151c] active:scale-[0.96] dark:hover:bg-white/[0.08] dark:hover:text-[#f4f2f7]\"\n                        aria-label=\"Attach files\"\n                      >\n                        <Paperclip className=\"size-[18px]\" />\n                      </button>\n                      <button\n                        type=\"button\"\n                        disabled={!canSubmit || createMutation.isPending}\n                        onClick={submitComposer}\n                        aria-label=\"Send message\"\n                        className={`flex size-10 items-center justify-center rounded-full transition-[background-color,opacity,transform] active:scale-[0.96] disabled:cursor-not-allowed disabled:opacity-60 ${\n                          body.trim()\n                            ? \"\"\n                            : \"bg-white text-gray-600 ring-1 ring-black/15 hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:ring-white/15 dark:hover:bg-gray-600\"\n                        }`}\n                        style={\n                          body.trim()\n                            ? {\n                                backgroundColor: primaryButtonBackgroundColor,\n                                color: primaryButtonTextColor,\n                              }\n                            : undefined\n                        }\n                      >\n                        {createMutation.isPending ? (\n                          <Loader2 className=\"size-[18px] animate-spin\" />\n                        ) : (\n                          <ArrowUp className=\"size-[18px]\" />\n                        )}\n                      </button>\n                    </div>\n                  </div>\n                </>\n              )}\n              <input\n                ref={fileInputRef}\n                type=\"file\"\n                accept=\"image/*\"\n                multiple\n                onChange={handleFileUpload}\n                className=\"hidden\"\n              />\n              {notice ? (\n                <p className=\"mt-2 text-[12px] leading-5 text-[#6e6d72] dark:text-[#8c8c93]\">\n                  {notice}\n                </p>\n              ) : null}\n            </div>\n          ) : null}\n        </motion.div>\n      </AnimatePresence>\n    </div>\n  );\n}\n","import { IconHeart, IconMessageCircle, IconPin } from \"@tabler/icons-react\";\nimport { motion } from \"framer-motion\";\nimport { BadgeCheck } from \"lucide-react\";\nimport { renderInteractiveDemoEmbeds } from \"@userorbit/utils/interactive-demo\";\nimport PostEngagement from \"../post-engagement\";\nimport { Collection } from \"../update-timeline\";\nimport { TeamMember } from \"../use-widget-data\";\n\ntype ChangelogListItemProps = {\n  teamMembers: TeamMember[];\n  changelog: any;\n  collections: Collection[];\n  onAnnouncementClick: (announcement: any) => void;\n  subscriberCode?: string;\n};\n\nconst ChangelogListItem = ({\n  teamMembers,\n  changelog,\n  collections,\n  onAnnouncementClick,\n  subscriberCode,\n}: ChangelogListItemProps) => {\n  const label = collections.find(\n    (collection: Collection) => collection.id === changelog.collectionId,\n  );\n\n  const postCollaborators = changelog.collaboratorIds\n    ? teamMembers?.filter((member: any) => changelog.collaboratorIds.includes(member.id))\n    : [];\n  const reactionsCount = changelog.reactionsCount ?? changelog.reactions?.length ?? 0;\n  const commentsEnabled = changelog.meta?.feedback !== false;\n  const reactionsEnabled = changelog.meta?.enableReactions === true;\n  const showEngagement = commentsEnabled || reactionsEnabled;\n\n  return (\n    <motion.article\n      key={changelog.id}\n      className=\"relative flex min-w-full flex-col border-b border-solid border-uo-border-subtle py-6 text-left first:pt-2 last:border-b-0\"\n      initial={{ opacity: 0, y: 12 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.25 }}\n    >\n      <div className=\"cursor-pointer\" onClick={() => onAnnouncementClick?.(changelog)}>\n        {changelog.meta?.ctaImage && (\n          <img\n            src={changelog.meta.ctaImage}\n            alt={changelog.meta?.ctaImageCaption || changelog.title}\n            className=\"mb-4 aspect-video w-full rounded-uo-media border border-solid border-uo-border-subtle object-cover\"\n          />\n        )}\n        <div className=\"mb-2 flex items-center gap-2\">\n          <span className=\"text-[12px] font-medium uppercase leading-4 tracking-[0.06em] text-uo-text-tertiary\">\n            {changelog.date}\n            {label && ` · ${label.name}`}\n          </span>\n          {changelog.pinned && (\n            <IconPin className=\"ml-auto h-4 w-4 rotate-45 text-uo-text-tertiary\" />\n          )}\n        </div>\n        <h2 className=\"m-0 text-[18px] font-semibold leading-6 text-uo-text-primary\">\n          {changelog.title}\n        </h2>\n        <div\n          className={`prose prose-sm dark:prose-invert prose-p:m-0 prose-headings:text-uo-text-primary prose-strong:text-uo-text-primary mt-2 max-w-none text-[14px] leading-[22px] text-uo-text-secondary ${changelog.isExpanded ? \"\" : \"line-clamp-4\"}`}\n          dangerouslySetInnerHTML={{\n            __html: changelog.isExpanded\n              ? renderInteractiveDemoEmbeds(changelog.text)\n              : changelog.text,\n          }}\n        />\n        {changelog.shouldTruncate && !changelog.isExpanded && (\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              onAnnouncementClick?.(changelog);\n            }}\n            className=\"mt-2 cursor-pointer bg-transparent p-0 text-[13px] font-medium text-uo-text-primary outline-none hover:underline\"\n          >\n            Continue reading\n          </button>\n        )}\n      </div>\n\n      {postCollaborators && postCollaborators.length > 0 ? (\n        <div className=\"mt-4 flex flex-wrap items-center gap-4\">\n          {postCollaborators.map((collaborator: any) => (\n            <div key={collaborator.id} className=\"flex items-center gap-2\">\n              <div className=\"relative\">\n                <div className=\"h-8 w-8 overflow-hidden rounded-full border border-solid border-uo-border-subtle\">\n                  {collaborator?.avatarUrl ? (\n                    <img\n                      src={collaborator.avatarUrl}\n                      alt={collaborator.name}\n                      width={32}\n                      height={32}\n                      className=\"h-full w-full object-cover\"\n                    />\n                  ) : (\n                    <div className=\"flex h-full w-full items-center justify-center bg-uo-surface-2 text-md font-medium text-uo-text-secondary\">\n                      {collaborator.name.charAt(0).toUpperCase()}\n                    </div>\n                  )}\n                </div>\n                {teamMembers.find((member: any) => member.id === collaborator.id) && (\n                  <div className=\"absolute bottom-0 right-0 z-20 -m-1 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-white dark:bg-black\">\n                    <BadgeCheck className=\"h-3.5 w-3.5 text-white dark:text-black\" fill=\"#3912e4\" />\n                  </div>\n                )}\n              </div>\n              <div className=\"flex flex-col\">\n                <div className=\"text-[13px] font-medium leading-[18px] text-uo-text-primary\">\n                  {collaborator.name}\n                </div>\n                <div className=\"text-[12px] leading-4 text-uo-text-tertiary\">\n                  {collaborator.meta?.role || \"Member\"}\n                </div>\n              </div>\n            </div>\n          ))}\n        </div>\n      ) : null}\n\n      {showEngagement && (\n        <div className=\"mt-4\">\n          {((commentsEnabled && (changelog.commentsCount || 0) > 0) ||\n            (reactionsEnabled && reactionsCount > 0)) && (\n            <div className=\"mb-2 flex items-center gap-3 text-uo-text-tertiary\">\n              {commentsEnabled && (changelog.commentsCount || 0) > 0 && (\n                <div className=\"flex items-center gap-1\">\n                  <IconMessageCircle className=\"h-4 w-4\" />\n                  <span className=\"text-md tabular-nums\">{changelog.commentsCount}</span>\n                </div>\n              )}\n              {reactionsEnabled && reactionsCount > 0 && (\n                <div className=\"flex items-center gap-1\">\n                  <IconHeart className=\"h-4 w-4\" />\n                  <span className=\"text-md tabular-nums\">{reactionsCount}</span>\n                </div>\n              )}\n            </div>\n          )}\n\n          <PostEngagement announcement={changelog} subscriberCode={subscriberCode} compact />\n        </div>\n      )}\n    </motion.article>\n  );\n};\n\nexport default ChangelogListItem;\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport { motion } from \"framer-motion\";\nimport { Loader2 } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\nimport { Logger } from \"../../lib/logger\";\nimport { fetchAnnouncements } from \"./api-utils\";\nimport ChangelogListItem from \"./changelog/list-item\";\nimport { AnnouncementTimelineSkeleton } from \"./feedback-skeleton\";\nimport { IconUpdates } from \"./icons\";\nimport { FeedbackQueryProvider } from \"./query-provider\";\nimport { TeamMember } from \"./use-widget-data\";\nimport { WidgetEmptyState } from \"./widget-empty-state\";\n\nconst logger = Logger.getInstance();\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  author?: {\n    name?: string;\n    email?: string;\n  };\n  parentId?: string;\n}\n\ninterface Reaction {\n  id: string;\n  value: number;\n  type: string;\n  count?: number;\n}\n\ninterface Announcement {\n  id: string;\n  title: string;\n  text: string;\n  createdAt: string;\n  url?: string;\n  pinned?: boolean;\n  collectionId?: string;\n  meta?: {\n    ctaLink?: string;\n    ctaTitle?: string;\n    ctaImage?: string;\n    ctaImageCaption?: string;\n  };\n  reactions?: Reaction[];\n  comments?: Comment[];\n  commentsCount?: number;\n  reactionsCount?: number;\n  userReaction?: number;\n}\n\nexport interface Collection {\n  id: string;\n  name: string;\n  description?: string;\n  color: string;\n}\n\ninterface UpdateTimelineProps {\n  onAnnouncementClick: (announcement: Announcement) => void;\n  onReactionAdd?: (announcementId: string, reactionType: string) => void;\n  onCommentAdd?: (announcementId: string, comment: string) => void;\n  product: {\n    name?: string;\n  };\n  collections: Collection[];\n  subscriberCode?: string;\n  teamMembers: TeamMember[];\n}\n\ntype UpdatedAnnouncement = Announcement & {\n  date: string;\n  description: string;\n  fullText: string;\n  shouldTruncate: boolean;\n  isExpanded: boolean;\n};\n\nconst UpdateTimelineInner: React.FC<UpdateTimelineProps> = ({\n  onAnnouncementClick,\n  // onCommentAdd,\n  collections,\n  subscriberCode,\n  teamMembers,\n}) => {\n  const { ref, inView } = useInView();\n  const PAGE_SIZE = 10;\n  const [expandedCards] = useState<Set<string>>(new Set());\n  // const [commentInputs, setCommentInputs] = useState<{ [key: string]: string }>({});\n  // const [textareaHeights, setTextareaHeights] = useState<{ [key: string]: number }>({});\n  // const [expandedComments, setExpandedComments] = useState<Set<string>>(new Set());\n\n  const { data, isFetchingNextPage, fetchNextPage, hasNextPage, isLoading, error } =\n    useInfiniteQuery({\n      queryKey: [\"announcements\", subscriberCode],\n      queryFn: async ({ pageParam = 0 }) => {\n        const response = await fetchAnnouncements(PAGE_SIZE, pageParam, subscriberCode);\n        return response;\n      },\n      initialPageParam: 0,\n      getNextPageParam: (lastPage, pages) => {\n        if (!lastPage?.data) return undefined;\n        const totalFetched = pages.reduce((acc, page) => acc + (page?.data?.length || 0), 0);\n        return lastPage.data.length === PAGE_SIZE ? totalFetched : undefined;\n      },\n      staleTime: 1000 * 60, // 1 minute\n    });\n\n  // Trigger fetch next page when bottom element is in view\n  useEffect(() => {\n    if (inView && hasNextPage && !isFetchingNextPage) {\n      fetchNextPage();\n    }\n  }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n  // Flatten all pages data\n  const allAnnouncements = data?.pages.flatMap((page) => page?.data || []) || [];\n\n  // Transform announcements to timeline format with better description handling\n  const updates: UpdatedAnnouncement[] = allAnnouncements.map((announcement, index) => {\n    const plainText = announcement.text.replace(/<[^>]*>/g, \"\");\n    const isExpanded = expandedCards.has(announcement.id) || index === 0;\n    const shouldTruncate = plainText.length > 220 && index > 0;\n\n    return {\n      ...announcement,\n      date: new Date(announcement.createdAt)\n        .toLocaleDateString(\"en-US\", {\n          month: \"short\",\n          day: \"numeric\",\n        })\n        .toUpperCase(),\n      description: isExpanded || !shouldTruncate ? plainText : plainText.substring(0, 220) + \"...\",\n      fullText: plainText,\n      shouldTruncate,\n      isExpanded,\n    };\n  });\n\n  // Commented out unused function - can be enabled when needed\n  // const handleCommentSubmit = (announcementId: string) => {\n  //   const comment = commentInputs[announcementId]?.trim();\n  //   if (comment) {\n  //     onCommentAdd?.(announcementId, comment);\n  //     setCommentInputs((prev) => ({ ...prev, [announcementId]: \"\" }));\n  //     // Reset textarea height\n  //     setTextareaHeights((prev) => ({ ...prev, [announcementId]: 100 }));\n  //     // Close the expanded comment section\n  //     setExpandedComments((prev) => {\n  //       const newSet = new Set(prev);\n  //       newSet.delete(announcementId);\n  //       return newSet;\n  //     });\n  //   }\n  // };\n\n  // Commented out unused handlers - can be enabled when needed\n  // const handleCommentInputChange = (announcementId: string, value: string) => {\n  //   setCommentInputs((prev) => ({ ...prev, [announcementId]: value }));\n  // };\n\n  // const handleTextareaKeyDown = (e: React.KeyboardEvent, announcementId: string) => {\n  //   if (e.shiftKey && e.key === \"End\") {\n  //     e.preventDefault();\n  //     const textarea = e.target as HTMLTextAreaElement;\n  //     // Expand to show more content\n  //     const newHeight = Math.min(textarea.scrollHeight + 40, 200);\n  //     setTextareaHeights((prev) => ({ ...prev, [announcementId]: newHeight }));\n  //   } else if (e.key === \"Enter\" && !e.shiftKey) {\n  //     e.preventDefault();\n  //     e.stopPropagation();\n  //     handleCommentSubmit(announcementId);\n  //   }\n  // };\n\n  // const autoResizeTextarea = (announcementId: string, textarea: HTMLTextAreaElement) => {\n  //   // Calculate new height and let framer-motion handle the smooth transition\n  //   textarea.style.height = \"auto\";\n  //   const newHeight = Math.max(40, Math.min(textarea.scrollHeight, 120));\n  //   textarea.style.height = `${textareaHeights[announcementId] || 40}px`; // Reset to current height\n  //   setTextareaHeights((prev) => ({ ...prev, [announcementId]: newHeight }));\n  // };\n\n  // const toggleCommentExpansion = (announcementId: string) => {\n  //   const newExpanded = new Set(expandedComments);\n  //   if (newExpanded.has(announcementId)) {\n  //     newExpanded.delete(announcementId);\n  //     setCommentInputs((prev) => ({ ...prev, [announcementId]: \"\" }));\n  //   } else {\n  //     newExpanded.add(announcementId);\n  //     // Set initial height for expanded textarea\n  //     setTextareaHeights((prev) => ({ ...prev, [announcementId]: 100 }));\n  //   }\n  //   setExpandedComments(newExpanded);\n  // };\n\n  if (isLoading) {\n    return <AnnouncementTimelineSkeleton length={4} />;\n  }\n\n  if (error) {\n    return (\n      <WidgetEmptyState\n        icon={<IconUpdates className=\"h-10 w-10\" size={40} />}\n        title=\"Failed to load updates\"\n        description=\"Something went wrong while loading announcements.\"\n      />\n    );\n  }\n\n  if (updates.length === 0) {\n    return (\n      <WidgetEmptyState\n        icon={<IconUpdates className=\"h-10 w-10\" size={40} />}\n        title=\"No updates published yet\"\n        description=\"The team will share news and releases here\"\n      />\n    );\n  }\n\n  logger.log(\"updates\", updates);\n\n  return (\n    <motion.div\n      className=\"scroll-container h-[var(--container-height)] overflow-y-auto px-6 pb-4\"\n      initial={{ opacity: 1 }}\n      exit={{ opacity: 0, x: -30 }}\n      transition={{ duration: 0.3 }}\n    >\n      {updates.map((update, _index) => (\n        <ChangelogListItem\n          key={update.id}\n          changelog={update}\n          collections={collections}\n          subscriberCode={subscriberCode}\n          teamMembers={teamMembers}\n          onAnnouncementClick={onAnnouncementClick}\n        />\n      ))}\n\n      {/* Load more trigger */}\n      <div ref={ref} className=\"flex justify-center py-2\">\n        {isFetchingNextPage && <Loader2 className=\"h-4 w-4 animate-spin text-gray-400\" />}\n      </div>\n    </motion.div>\n  );\n};\n\nconst UpdateTimeline: React.FC<UpdateTimelineProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <UpdateTimelineInner {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default UpdateTimeline;\n","import {\n  IconArrowUp,\n  IconArrowUpRight,\n  IconBulb,\n  IconChevronRight,\n  IconFolder,\n  IconX,\n} from \"@tabler/icons-react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Button, ColorDotDropdown } from \"@userorbit/ui\";\nimport {\n  clampWidgetHomeHeight,\n  clampWidgetLogoHeight,\n} from \"@userorbit/ui/src/shared/lib/widget-sizing\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowLeft, ChevronLeft, ChevronRight, MoreHorizontal, Search } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { getReadableTextColor } from \"../../lib/colors\";\nimport { Logger } from \"../../lib/logger\";\nimport { Config } from \"../../lib/config\";\nimport { canAutomaticallyLaunchExperience } from \"../../lib/automatic-targeting\";\nimport { sessionStore } from \"../../lib/storage\";\nimport type { OpenWidgetOptions } from \"../../index\";\nimport { Tabs, TabsContent, TabsContents, TabsList, TabsTrigger } from \"../animated-tabs\";\nimport AnnouncementDetail from \"./announcement-detail\";\nimport {\n  fetchAnnouncementById,\n  fetchAnnouncements,\n  fetchArticleById,\n  fetchFeedbackBoardList,\n  fetchFeedbackById,\n  fetchRoadmapItem,\n  fetchRoadmapViews,\n  fetchTourById,\n  recordAnnouncementVisit,\n} from \"./api-utils\";\nimport AskAiContent from \"./ask-ai-content\";\nimport { shouldShowPoweredBy } from \"./branding\";\nimport FeedbackContent from \"./feedback-content\";\nimport FeedbackDetail from \"./feedback-detail\";\nimport FeedbackForm from \"./feedback-form\";\nimport { DetailPageLoader, HomeAnnouncementsSkeleton } from \"./feedback-skeleton\";\nimport HelpCenterContent from \"./help-center-content\";\nimport HelpCenterArticle from \"./help-center-content/article-detail\";\nimport HelpCenterCollection from \"./help-center-content/collection-page\";\nimport { getIconByName } from \"./icon-registry\";\nimport {\n  IconFeedback,\n  IconHelp,\n  IconHome,\n  IconMessages,\n  IconNewFeedback,\n  IconRoadmap,\n  IconSparkle,\n  IconUpdates,\n} from \"./icons\";\nimport { FeedbackQueryProvider } from \"./query-provider\";\nimport RoadmapContent from \"./roadmap-content\";\nimport RoadmapDetail from \"./roadmap-detail\";\nimport SupportContent, {\n  type SupportArticleLink,\n  type SupportFeedbackSuggestion,\n  type SupportHandoff,\n  type SupportMessageResource,\n} from \"./support-content\";\nimport UpdateTimeline from \"./update-timeline\";\nimport { widgetCardClassName } from \"./widget-card\";\nimport { widgetFieldClassName } from \"./widget-field\";\nimport { RoadmapViewItem } from \"./use-roadmap-data\";\nimport { TeamMember } from \"./use-widget-data\";\n\nconst logger = Logger.getInstance();\n\nfunction normalizeExternalUrl(value?: string | null) {\n  const trimmed = value?.trim();\n  if (!trimmed) return \"\";\n\n  return /^https?:\\/\\//i.test(trimmed) ? trimmed : `https://${trimmed}`;\n}\n\n// ============================================================================\n// TYPES & INTERFACES\n// ============================================================================\n\ntype TabType = \"home\" | \"feedback\" | \"roadmap\" | \"updates\" | \"help\" | \"support\";\ntype WidgetSizeMode = \"default\" | \"tall\" | \"expanded\";\ntype WidgetOpenOptions = OpenWidgetOptions & {\n  tabOrder?: TabType[];\n  defaultTab?: TabType;\n};\n\ninterface Comment {\n  id: string;\n  text: string;\n  createdAt: string;\n  author?: {\n    name?: string;\n    email?: string;\n  };\n  parentId?: string;\n}\n\ninterface FeedbackItem {\n  id: string;\n  urlId?: string;\n  url?: string;\n  title: string;\n  text?: string;\n  createdAt: string;\n  feedbackVotesCount: number;\n  feedbackCommentsCount: number;\n  status?: string;\n  boardId?: string;\n  subscriber?: {\n    id?: string;\n    name?: string;\n    email?: string;\n    avatarUrl?: string;\n  } | null;\n  meta?: {\n    updatedAt?: string;\n    transcription?: string;\n    [key: string]: unknown;\n  };\n  board?: {\n    id: string;\n    name: string;\n    configuration?: {\n      color?: string;\n    };\n  } | null;\n}\n\ninterface Reaction {\n  id: string;\n  value: number;\n  type: string;\n  count?: number;\n}\n\ninterface Announcement {\n  id: string;\n  title: string;\n  text: string;\n  createdAt: string;\n  url?: string;\n  pinned?: boolean;\n  collectionId?: string;\n  meta?: {\n    ctaLink?: string;\n    ctaTitle?: string;\n    ctaImage?: string;\n    ctaImageCaption?: string;\n    feedbackIds?: string[];\n    linkedFeedbackIds?: string[];\n    articleIds?: string[];\n    helpArticleIds?: string[];\n    tourIds?: string[];\n    productTourIds?: string[];\n  };\n  reactions?: Reaction[];\n  comments?: Comment[];\n  commentsCount?: number;\n  reactionsCount?: number;\n  userReaction?: number;\n  linkedFeedbacks?: any[];\n  helpArticles?: any[];\n  productTours?: any[];\n}\n\ninterface Collection {\n  id: string;\n  name: string;\n  description?: string;\n  color: string;\n}\n\ninterface WidgetContentProps {\n  product: {\n    theme: any;\n    name?: string;\n    avatarUrl?: string;\n    subdomain?: string;\n    plan?: string;\n    configuration?: {\n      widgetDescription?: string;\n      portalLogoLight?: string;\n      portalLogoDark?: string;\n      helpCenter?: {\n        isLive?: boolean;\n        defaultLanguage?: string;\n        supportedLanguages?: string[];\n        publicUrl?: string;\n        showInbox?: boolean | null;\n      };\n      showPoweredBy?: boolean;\n      feedback?: {\n        enableVoiceFeedback?: boolean;\n        publicBoardModeration?: boolean;\n        allowAnonymousFeedback?: boolean;\n        enableReplayEvidence?: boolean;\n        enableScreenRecording?: boolean;\n      };\n      aiAssistant?: {\n        enabled?: boolean | null;\n      };\n      support?: {\n        requestForm?: {\n          id?: string;\n          title?: string;\n          fields?: Array<{\n            id: string;\n            label: string;\n            type?: \"text\" | \"textarea\" | \"select\" | \"checkbox\";\n            required?: boolean;\n            placeholder?: string;\n            options?: Array<{ label: string; value: string } | string>;\n          }>;\n        };\n        requestForms?: Array<{\n          id?: string;\n          title?: string;\n          fields?: Array<{\n            id: string;\n            label: string;\n            type?: \"text\" | \"textarea\" | \"select\" | \"checkbox\";\n            required?: boolean;\n            placeholder?: string;\n            options?: Array<{ label: string; value: string } | string>;\n          }>;\n        }>;\n      };\n      widget?: {\n        activeTabs?: TabType[];\n        primaryColor?: string;\n        primaryColorLight?: string;\n        primaryColorDark?: string;\n        primaryButtonBackgroundColorLight?: string;\n        primaryButtonBackgroundColorDark?: string;\n        primaryButtonTextColorLight?: string;\n        primaryButtonTextColorDark?: string;\n        welcomeText?: string;\n        showWelcomeLogo?: boolean;\n        welcomeLogoUrl?: string;\n        welcomeLogoUrlLight?: string;\n        welcomeLogoUrlDark?: string;\n        welcomeLogoHeight?: number;\n        copyOverrides?: Record<string, string>;\n        homeSections?: {\n          search?: boolean;\n          chat?: boolean;\n          requests?: boolean;\n          whatsNew?: boolean;\n        };\n        chatMemberIds?: string[];\n        chatAction?: {\n          actionType: \"default\" | \"support\" | \"script\";\n          value?: string;\n        };\n        homeLinks?: Array<{\n          label: string;\n          description?: string;\n          icon?: string;\n          actionType: \"url\" | \"script\";\n          value: string;\n        }>;\n      };\n    };\n  };\n  onClose: () => void;\n  collections: Collection[];\n  loading: boolean;\n  error: string | null;\n  _subscriberCode?: string;\n  onSizeChange?: (mode: WidgetSizeMode) => void;\n  onPreferredHeightChange?: (height: number | null) => void;\n  onPanelHiddenChange?: (hidden: boolean) => void;\n  onElementPickingChange?: (active: boolean) => void;\n  variant?: \"floating\" | \"drawer\" | \"popover\";\n  panelHeight?: number;\n  openOptions?: WidgetOpenOptions;\n  teamMembers: TeamMember[];\n  openedFromNotification?: boolean;\n  onNotificationHandled?: () => void;\n  themeMode?: \"light\" | \"dark\";\n  isMobileSheet?: boolean;\n  widgetLocale?: string;\n  requireAuthentication?: boolean;\n  initialEmail?: string;\n  initialName?: string;\n  emailHash?: string;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst VALID_TABS: TabType[] = [\"home\", \"updates\", \"roadmap\", \"feedback\", \"help\", \"support\"];\nconst DEFAULT_ACTIVE_TABS: TabType[] = [\"home\", \"feedback\", \"updates\", \"help\", \"roadmap\"];\nconst DEFAULT_TAB_ORDER: TabType[] = [\"home\", \"updates\", \"feedback\", \"help\", \"roadmap\", \"support\"];\nconst SESSION_STORAGE_KEYS = {\n  WIDGET_OPEN_OPTIONS: \"uo-widget-open-options\",\n  ACTIVE_TAB: \"uo-active-tab\",\n} as const;\n\nconst TRANSITION_DELAY = 300;\n\nconst HOME_SEARCH_PLACEHOLDER = \"Search docs\";\n\nconst getFirstAvailableTab = (tabs: TabType[], isHelpCenterLive: boolean): TabType => {\n  const tab = tabs.find((item) => item !== \"help\" || isHelpCenterLive);\n  return tab || \"feedback\";\n};\n\nconst getDefaultTab = (\n  tabs: TabType[],\n  isHelpCenterLive: boolean,\n  defaultTab?: TabType,\n): TabType => {\n  if (defaultTab && tabs.includes(defaultTab) && (defaultTab !== \"help\" || isHelpCenterLive)) {\n    return defaultTab;\n  }\n  if (tabs.includes(\"home\")) return \"home\";\n  if (tabs.includes(\"updates\")) return \"updates\";\n  return getFirstAvailableTab(tabs, isHelpCenterLive);\n};\n\nconst getOrderedTabs = (tabs: TabType[], tabOrder?: TabType[]): TabType[] => {\n  const order = tabOrder?.length\n    ? [...tabOrder, ...DEFAULT_TAB_ORDER.filter((tab) => !tabOrder.includes(tab))]\n    : DEFAULT_TAB_ORDER;\n  const ordered = order.filter((tab) => tabs.includes(tab));\n  return [...ordered, ...tabs.filter((tab) => !ordered.includes(tab))];\n};\n\nconst normalizeColor = (color?: string | null) => {\n  const trimmed = color?.trim();\n  return trimmed || undefined;\n};\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\nconst WidgetContentInner: React.FC<WidgetContentProps> = ({\n  product,\n  collections,\n  teamMembers,\n  loading: _loading,\n  error,\n  onClose,\n  _subscriberCode,\n  onSizeChange,\n  onPreferredHeightChange,\n  onPanelHiddenChange,\n  onElementPickingChange,\n  variant = \"floating\",\n  panelHeight,\n  openOptions,\n  openedFromNotification,\n  onNotificationHandled,\n  themeMode = \"light\",\n  isMobileSheet = false,\n  widgetLocale,\n  requireAuthentication = false,\n  initialEmail,\n  initialName,\n  emailHash,\n}) => {\n  // ============================================================================\n  // STATE\n  // ============================================================================\n\n  const activeTabs = React.useMemo<TabType[]>(() => {\n    const requestedTab = openOptions?.supportThreadId ? \"support\" : openOptions?.tab;\n    const defaultActiveTabs =\n      requestedTab &&\n      VALID_TABS.includes(requestedTab) &&\n      !DEFAULT_ACTIVE_TABS.includes(requestedTab)\n        ? [...DEFAULT_ACTIVE_TABS, requestedTab]\n        : DEFAULT_ACTIVE_TABS;\n\n    if (variant === \"floating\" || variant === \"drawer\") {\n      return openOptions?.activeTabs?.length\n        ? (openOptions.activeTabs.filter((tab) => VALID_TABS.includes(tab as TabType)) as TabType[])\n        : defaultActiveTabs;\n    }\n\n    if (openOptions?.activeTabs && openOptions.activeTabs.length > 0) {\n      return openOptions.activeTabs.filter((tab) =>\n        VALID_TABS.includes(tab as TabType),\n      ) as TabType[];\n    }\n    return defaultActiveTabs;\n  }, [openOptions?.activeTabs, openOptions?.supportThreadId, openOptions?.tab, variant]);\n  const hasSupportTab = activeTabs.includes(\"support\");\n  const isSupportHandoffAvailable =\n    hasSupportTab ||\n    product.configuration?.helpCenter?.showInbox === true ||\n    product.configuration?.widget?.activeTabs?.includes(\"support\") === true ||\n    product.configuration?.widget?.chatAction?.actionType === \"support\";\n  const defaultTab = React.useMemo<TabType | undefined>(() => {\n    return openOptions?.defaultTab && VALID_TABS.includes(openOptions.defaultTab)\n      ? openOptions.defaultTab\n      : undefined;\n  }, [openOptions?.defaultTab]);\n  const orderedNavigationTabs = React.useMemo<TabType[]>(() => {\n    const tabOrder = openOptions?.tabOrder?.filter((tab) => VALID_TABS.includes(tab));\n    return getOrderedTabs(activeTabs, tabOrder);\n  }, [activeTabs, openOptions?.tabOrder]);\n\n  const hasExplicitActiveTabs = (openOptions?.activeTabs?.length ?? 0) > 0;\n  const isStandaloneSupportWidget =\n    hasExplicitActiveTabs && activeTabs.length === 1 && activeTabs[0] === \"support\";\n\n  const [activeTab, setActiveTab] = useState<TabType>(() => {\n    if (\n      (variant === \"floating\" || variant === \"drawer\") &&\n      !openOptions?.tab &&\n      !openOptions?.articleId &&\n      !openOptions?.announcementId &&\n      !openOptions?.roadmapId &&\n      !openOptions?.topicId &&\n      !openOptions?.supportThreadId &&\n      !openOptions?.showFeedbackForm &&\n      !openOptions?.modal\n    ) {\n      return getDefaultTab(\n        activeTabs,\n        product.configuration?.helpCenter?.isLive !== false,\n        defaultTab,\n      );\n    }\n\n    if (openOptions?.supportThreadId && activeTabs.includes(\"support\")) return \"support\";\n    if (activeTabs.length === 1) return activeTabs[0];\n\n    if (openOptions?.tab && activeTabs.includes(openOptions.tab)) {\n      return openOptions.tab;\n    }\n\n    const isHelpCenterLive = product.configuration?.helpCenter?.isLive !== false;\n    if (\n      defaultTab &&\n      activeTabs.includes(defaultTab) &&\n      (defaultTab !== \"home\" || variant === \"floating\" || variant === \"drawer\") &&\n      (defaultTab !== \"help\" || isHelpCenterLive)\n    ) {\n      return defaultTab;\n    }\n\n    if (isHelpCenterLive && activeTabs.includes(\"help\")) {\n      return \"help\";\n    }\n\n    if (activeTabs.includes(\"feedback\")) {\n      return \"feedback\";\n    }\n\n    return getFirstAvailableTab(activeTabs, isHelpCenterLive);\n  });\n  const [selectedAnnouncement, setSelectedAnnouncement] = useState<Announcement | null>(null);\n  const [showAnnouncementDetail, setShowAnnouncementDetail] = useState(false);\n  const [selectedRoadmapItem, setSelectedRoadmapItem] = useState<RoadmapViewItem | null>(null);\n  const [showRoadmapDetail, setShowRoadmapDetail] = useState(false);\n  const [selectedFeedbackItem, setSelectedFeedbackItem] = useState<FeedbackItem | null>(null);\n  const [showFeedbackDetail, setShowFeedbackDetail] = useState(false);\n  const [showFeedbackForm, setShowFeedbackForm] = useState(false);\n  const [selectedArticle, setSelectedArticle] = useState<any>(null);\n  const [articleReturnTab, setArticleReturnTab] = useState<\"support\" | null>(null);\n  const [selectedCollection, setSelectedCollection] = useState<any>(null);\n  const [showArticleDetail, setShowArticleDetail] = useState(false);\n  const [showCollectionPage, setShowCollectionPage] = useState(false);\n  const [showAskAi, setShowAskAi] = useState(false);\n  const [askAiReturnTab, setAskAiReturnTab] = useState<TabType | null>(null);\n  const [feedbackReturnTab, setFeedbackReturnTab] = useState<TabType | null>(null);\n  const [supportReturnTab, setSupportReturnTab] = useState<TabType | null>(null);\n  const [askAiInitialMessage, setAskAiInitialMessage] = useState(\"\");\n  const [askAiAutoSubmitInitialMessage, setAskAiAutoSubmitInitialMessage] = useState(false);\n  const [homeMessage, setHomeMessage] = useState(\"\");\n  const [supportInitialMessage, setSupportInitialMessage] = useState(\"\");\n  const [supportHandoff, setSupportHandoff] = useState<SupportHandoff | null>(null);\n  const [supportInitialThreadId, setSupportInitialThreadId] = useState<string | null>(\n    openOptions?.supportThreadId ?? null,\n  );\n  const [supportMode, setSupportMode] = useState<\"messages\" | \"chat\">(\"messages\");\n  const [supportResumeActiveThread, setSupportResumeActiveThread] = useState(false);\n  const [isSupportThreadView, setIsSupportThreadView] = useState(\n    Boolean(openOptions?.supportThreadId),\n  );\n  const [showSupportLanding, setShowSupportLanding] = useState(\n    isStandaloneSupportWidget && !openOptions?.supportThreadId,\n  );\n  const [supportFeedbackSuggestion, setSupportFeedbackSuggestion] =\n    useState<SupportFeedbackSuggestion | null>(null);\n  const [feedbackDraft, setFeedbackDraft] = useState<{\n    title: string;\n    text: string;\n    returnToSupport?: boolean;\n  } | null>(null);\n  const processedNavigationKeyRef = React.useRef<string | null>(null);\n  const [helpSearchQuery, setHelpSearchQuery] = useState(\"\");\n  const [debouncedHelpSearchQuery, setDebouncedHelpSearchQuery] = useState(\"\");\n  const helpSearchInputRef = useRef<HTMLInputElement>(null);\n  const [activeBoardId, setActiveBoardId] = useState<string>(\"all\");\n  const [activeRoadmapId, setActiveRoadmapId] = useState<string>(\"\");\n  // ============================================================================\n  // COMPUTED VALUES\n  // ============================================================================\n\n  const defaultPrimaryColor = product.theme?.primaryColor || \"#3912e4\";\n  const configuredWidgetPrimaryColor = normalizeColor(product.configuration?.widget?.primaryColor);\n  const primaryColorLight =\n    normalizeColor(product.configuration?.widget?.primaryColorLight) ||\n    configuredWidgetPrimaryColor ||\n    defaultPrimaryColor;\n  const primaryColorDark =\n    normalizeColor(product.configuration?.widget?.primaryColorDark) ||\n    configuredWidgetPrimaryColor ||\n    defaultPrimaryColor;\n  const primaryColor = themeMode === \"dark\" ? primaryColorDark : primaryColorLight;\n  const primaryButtonBackgroundColorLight =\n    normalizeColor(product.configuration?.widget?.primaryButtonBackgroundColorLight) ||\n    primaryColorLight;\n  const primaryButtonBackgroundColorDark =\n    normalizeColor(product.configuration?.widget?.primaryButtonBackgroundColorDark) ||\n    primaryColorDark;\n  const primaryButtonBackgroundColor =\n    themeMode === \"dark\" ? primaryButtonBackgroundColorDark : primaryButtonBackgroundColorLight;\n  const primaryButtonTextColorLight =\n    normalizeColor(product.configuration?.widget?.primaryButtonTextColorLight) ||\n    getReadableTextColor(primaryButtonBackgroundColorLight);\n  const primaryButtonTextColorDark =\n    normalizeColor(product.configuration?.widget?.primaryButtonTextColorDark) ||\n    getReadableTextColor(primaryButtonBackgroundColorDark);\n  const primaryButtonTextColor =\n    themeMode === \"dark\" ? primaryButtonTextColorDark : primaryButtonTextColorLight;\n  const isAskAiEnabled = product.configuration?.aiAssistant?.enabled !== false;\n  const isAskAiOpen = showAskAi && isAskAiEnabled;\n  const primaryForegroundColor = getReadableTextColor(primaryColor);\n  const isHelpCenterLive = product.configuration?.helpCenter?.isLive !== false;\n  const showHome = activeTab === \"home\";\n  const homeTitle =\n    product.configuration?.widget?.welcomeText ||\n    product.configuration?.widgetDescription ||\n    \"Hey, we're here for you.\";\n  const legacyWelcomeLogoUrl = product.configuration?.widget?.welcomeLogoUrl?.trim();\n  const workspaceLogoLight =\n    product.configuration?.portalLogoLight?.trim() ||\n    product.configuration?.portalLogoDark?.trim() ||\n    product.avatarUrl ||\n    \"\";\n  const workspaceLogoDark =\n    product.configuration?.portalLogoDark?.trim() ||\n    product.configuration?.portalLogoLight?.trim() ||\n    product.avatarUrl ||\n    \"\";\n  const welcomeLogoUrlLight =\n    product.configuration?.widget?.welcomeLogoUrlLight?.trim() ||\n    legacyWelcomeLogoUrl ||\n    workspaceLogoLight;\n  const welcomeLogoUrlDark =\n    product.configuration?.widget?.welcomeLogoUrlDark?.trim() ||\n    legacyWelcomeLogoUrl ||\n    workspaceLogoDark;\n  const welcomeLogoUrl = themeMode === \"dark\" ? welcomeLogoUrlDark : welcomeLogoUrlLight;\n  const welcomeLogoHeight = clampWidgetLogoHeight(product.configuration?.widget?.welcomeLogoHeight);\n  const showWelcomeLogo =\n    product.configuration?.widget?.showWelcomeLogo === true && Boolean(welcomeLogoUrl);\n  const configuredHomeLinks = product.configuration?.widget?.homeLinks;\n  const homeSections = product.configuration?.widget?.homeSections;\n  const showHomeSearch = homeSections?.search !== false;\n  const showHomeChat = homeSections?.chat !== false;\n  const showHomeRequests = homeSections?.requests !== false;\n  const showHomeWhatsNew = homeSections?.whatsNew !== false;\n  const widgetCopyOverrides = product.configuration?.widget?.copyOverrides || {};\n  const widgetMenuCopy = {\n    searchPlaceholder: widgetCopyOverrides.searchPlaceholder || HOME_SEARCH_PLACEHOLDER,\n    askAiLabel: widgetCopyOverrides.askAiLabel || \"Ask AI\",\n    chatTitle: widgetCopyOverrides.chatTitle || \"Ask us anything\",\n    chatDescription: widgetCopyOverrides.chatDescription || \"AI agent and our team can help\",\n    requestsTitle: widgetCopyOverrides.requestsTitle || \"Requests\",\n    requestsDescription:\n      widgetCopyOverrides.requestsDescription || \"Have an idea or request? We'd love to hear it.\",\n    whatsNewTitle: widgetCopyOverrides.whatsNewTitle || \"What's new\",\n    messagePlaceholder: widgetCopyOverrides.messagePlaceholder || \"Write a message…\",\n  };\n  const chatMemberIds = product.configuration?.widget?.chatMemberIds || [];\n  const filteredMembers = teamMembers.filter((member) => chatMemberIds.includes(member.id));\n  const visibleTeamMembers = filteredMembers.slice(0, 2);\n  const { data: boardsResponse, isLoading: boardsLoading } = useQuery({\n    queryKey: [\"feedback-boards\", _subscriberCode],\n    queryFn: () => fetchFeedbackBoardList(),\n    staleTime: 1000 * 60 * 5,\n    enabled: activeTab === \"feedback\",\n  });\n\n  const { data: roadmapViewsResponse, isLoading: roadmapViewsLoading } = useQuery({\n    queryKey: [\"roadmap-views\", _subscriberCode],\n    queryFn: () => fetchRoadmapViews(_subscriberCode),\n    staleTime: 1000 * 60 * 5,\n    enabled: activeTab === \"roadmap\",\n  });\n\n  const roadmapViews = React.useMemo(\n    () => roadmapViewsResponse?.data || [],\n    [roadmapViewsResponse],\n  );\n  const defaultRoadmapId = React.useMemo(() => {\n    const defaultRoadmap = roadmapViews.find((rv: any) => rv.isDefault) || roadmapViews[0];\n    return defaultRoadmap?.id || \"\";\n  }, [roadmapViews]);\n  const selectedRoadmapId = activeRoadmapId || defaultRoadmapId;\n\n  useEffect(() => {\n    if (!activeRoadmapId && defaultRoadmapId) {\n      setActiveRoadmapId(defaultRoadmapId);\n    }\n  }, [activeRoadmapId, defaultRoadmapId]);\n\n  const { data: homeAnnouncementsResponse, isLoading: homeAnnouncementsLoading } = useQuery({\n    queryKey: [\"home-announcements\", _subscriberCode],\n    queryFn: () => fetchAnnouncements(4, 0, _subscriberCode),\n    staleTime: 1000 * 60,\n    enabled: showHome && showHomeWhatsNew,\n  });\n\n  const boards = boardsResponse?.data || [];\n  const homeAnnouncements = (homeAnnouncementsResponse?.data || []).slice(0, 4);\n  const homeHeaderRef = useRef<HTMLDivElement>(null);\n  const homeContentRef = useRef<HTMLDivElement>(null);\n  const homeNavigationRef = useRef<HTMLDivElement>(null);\n  const homeFooterRef = useRef<HTMLDivElement>(null);\n  const [homeBottomInset, setHomeBottomInset] = useState(0);\n  const orderedBoards = [\n    {\n      id: \"all\",\n      name: \"All Feedback\",\n      configuration: { color: \"#555\" },\n      meta: { icon: \"\" },\n    },\n    ...boards,\n  ];\n  const shouldExpandWidget =\n    showAnnouncementDetail ||\n    showRoadmapDetail ||\n    showFeedbackDetail ||\n    showArticleDetail ||\n    showCollectionPage;\n  const widgetSizeMode: WidgetSizeMode = shouldExpandWidget\n    ? \"expanded\"\n    : isAskAiOpen\n      ? \"tall\"\n      : \"default\";\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setDebouncedHelpSearchQuery(helpSearchQuery);\n    }, 500);\n\n    return () => clearTimeout(timer);\n  }, [helpSearchQuery]);\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n        e.preventDefault();\n        e.stopPropagation();\n        if (activeTab === \"help\" && helpSearchInputRef.current) {\n          helpSearchInputRef.current.focus();\n          helpSearchInputRef.current.select();\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [activeTab]);\n\n  React.useLayoutEffect(() => {\n    onSizeChange?.(widgetSizeMode);\n  }, [onSizeChange, widgetSizeMode]);\n\n  React.useLayoutEffect(() => {\n    if (!showHome || isMobileSheet) {\n      setHomeBottomInset(0);\n      return;\n    }\n\n    const measure = () =>\n      setHomeBottomInset(\n        (homeNavigationRef.current?.offsetHeight || 0) + (homeFooterRef.current?.offsetHeight || 0),\n      );\n\n    measure();\n\n    if (typeof ResizeObserver === \"undefined\") return;\n\n    const observer = new ResizeObserver(measure);\n    [homeNavigationRef.current, homeFooterRef.current].forEach((element) => {\n      if (element) observer.observe(element);\n    });\n\n    return () => observer.disconnect();\n  }, [isMobileSheet, showHome]);\n\n  React.useLayoutEffect(() => {\n    const isAdaptiveHomeView =\n      showHome && widgetSizeMode === \"default\" && variant === \"floating\" && !isMobileSheet;\n\n    if (!isAdaptiveHomeView) {\n      onPreferredHeightChange?.(null);\n      return;\n    }\n\n    const measure = () => {\n      const height =\n        (homeHeaderRef.current?.offsetHeight || 0) +\n        (homeContentRef.current?.offsetHeight || 0) +\n        (homeNavigationRef.current?.offsetHeight || 0) +\n        (homeFooterRef.current?.offsetHeight || 0);\n\n      onPreferredHeightChange?.(clampWidgetHomeHeight(height));\n    };\n\n    measure();\n\n    if (typeof ResizeObserver === \"undefined\") return;\n\n    const observer = new ResizeObserver(measure);\n    [\n      homeHeaderRef.current,\n      homeContentRef.current,\n      homeNavigationRef.current,\n      homeFooterRef.current,\n    ].forEach((element) => {\n      if (element) observer.observe(element);\n    });\n\n    return () => observer.disconnect();\n  }, [\n    homeAnnouncements.length,\n    configuredHomeLinks?.length,\n    homeTitle,\n    isMobileSheet,\n    onPreferredHeightChange,\n    showHome,\n    showHomeChat,\n    showHomeRequests,\n    showHomeSearch,\n    showHomeWhatsNew,\n    showWelcomeLogo,\n    variant,\n    welcomeLogoHeight,\n    welcomeLogoUrl,\n    widgetSizeMode,\n  ]);\n\n  // ============================================================================\n  // EVENT HANDLERS & NAVIGATION\n  // ============================================================================\n\n  const handleAnnouncementClick = (announcement: Announcement) => {\n    setSelectedAnnouncement(announcement);\n    setShowAnnouncementDetail(true);\n    recordAnnouncementVisit(announcement.id, _subscriberCode).catch((error) => {\n      logger.warn(\"Failed to record announcement visit:\", error);\n    });\n  };\n\n  const handleBackToTimeline = React.useCallback(() => {\n    setShowAnnouncementDetail(false);\n    setTimeout(() => setSelectedAnnouncement(null), TRANSITION_DELAY);\n  }, []);\n\n  const handleRoadmapItemClick = (item: RoadmapViewItem) => {\n    setSelectedRoadmapItem(item);\n    setShowRoadmapDetail(true);\n  };\n\n  const handleBackToRoadmap = React.useCallback(() => {\n    setShowRoadmapDetail(false);\n    setTimeout(() => setSelectedRoadmapItem(null), TRANSITION_DELAY);\n  }, []);\n\n  const handleFeedbackItemClick = (item: FeedbackItem) => {\n    if (!showFeedbackForm) setFeedbackReturnTab(null);\n    setSelectedFeedbackItem(item);\n    setShowFeedbackDetail(true);\n  };\n\n  const handleAnnouncementFeedbackClick = async (item: any) => {\n    setFeedbackReturnTab(activeTab);\n    setActiveTab(\"feedback\");\n    setShowAnnouncementDetail(false);\n    setSelectedFeedbackItem(item);\n    setShowFeedbackDetail(true);\n\n    try {\n      const response = await fetchFeedbackById(item.id, _subscriberCode);\n      if (response?.data) {\n        setSelectedFeedbackItem(response.data);\n      }\n    } catch (error) {\n      logger.warn(\"Failed to load linked feedback:\", error);\n    }\n  };\n\n  const handleAnnouncementArticleClick = (article: any) => {\n    setActiveTab(\"help\");\n    setShowAnnouncementDetail(false);\n    setShowCollectionPage(false);\n    setArticleReturnTab(null);\n    setSelectedArticle(article);\n    setShowArticleDetail(true);\n  };\n\n  const handleAnnouncementTourClick = async (tour: any) => {\n    try {\n      const response = await fetchTourById(tour.id, _subscriberCode);\n      const productTour = response?.data || tour;\n      if (!productTour?.publishedAt) return;\n\n      const { closeWidgetDrawer, triggerTour } = await import(\"../../lib/widget\");\n      await closeWidgetDrawer();\n      await triggerTour(productTour, true);\n    } catch (error) {\n      logger.warn(\"Failed to start linked product tour:\", error);\n    }\n  };\n\n  const handleFeedbackSubmit = (item: FeedbackItem) => {\n    setSelectedFeedbackItem(item);\n    setFeedbackDraft(null);\n    setSupportFeedbackSuggestion(null);\n    setShowFeedbackForm(false);\n    setShowFeedbackDetail(true);\n  };\n\n  const handleBackFromFeedbackDetail = React.useCallback(() => {\n    setShowFeedbackDetail(false);\n    setTimeout(() => setSelectedFeedbackItem(null), TRANSITION_DELAY);\n  }, []);\n\n  const handleFeedbackClick = () => {\n    setFeedbackDraft(null);\n    setSupportFeedbackSuggestion(null);\n    setFeedbackReturnTab(activeTab);\n    setShowFeedbackForm(true);\n  };\n\n  const handleHelpCenterFeedbackClick = () => {\n    setFeedbackDraft(null);\n    setSupportFeedbackSuggestion(null);\n    setFeedbackReturnTab(activeTab);\n    setActiveTab(\"feedback\");\n    setShowFeedbackForm(true);\n  };\n\n  const handleSupportFeedbackRequest = (draft: { title: string; text: string }) => {\n    setFeedbackDraft({\n      title: draft.title,\n      text: draft.text,\n      returnToSupport: true,\n    });\n    openHomeDestination(\"feedback\", { showFeedbackForm: true });\n  };\n\n  const handleAskAiSupportClick = (handoff: SupportHandoff) => {\n    const returnTab = askAiReturnTab || activeTab;\n    setSupportFeedbackSuggestion(null);\n    setSupportHandoff(handoff);\n    setAskAiReturnTab(null);\n    openSupport(undefined, \"chat\", { returnTab });\n  };\n\n  const openAskAi = (initialMessage = \"\") => {\n    setAskAiReturnTab(activeTab);\n    setActiveTab(\"help\");\n    setAskAiInitialMessage(initialMessage);\n    setAskAiAutoSubmitInitialMessage(Boolean(initialMessage));\n    setShowAskAi(isAskAiEnabled);\n    setShowArticleDetail(false);\n    setShowCollectionPage(false);\n  };\n\n  const handleChatWithUsClick = () => {\n    setSupportFeedbackSuggestion(null);\n    const chatAction = product.configuration?.widget?.chatAction;\n    if (chatAction?.actionType === \"script\" && chatAction.value) {\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-implied-eval\n        new Function(chatAction.value)();\n        return;\n      } catch (e) {\n        logger.warn(\"Chat action script error:\", e);\n      }\n    }\n\n    if (chatAction?.actionType === \"support\") {\n      openSupport(undefined, \"chat\", { resumeActiveThread: true });\n      return;\n    }\n\n    openAskAi();\n  };\n\n  const sendHomeMessage = () => {\n    const message = homeMessage.trim();\n    if (!message) return;\n    setSupportFeedbackSuggestion(null);\n    setHomeMessage(\"\");\n    const chatAction = product.configuration?.widget?.chatAction;\n    if (chatAction?.actionType === \"support\" || !isAskAiEnabled) {\n      setSupportInitialMessage(message);\n      openSupport(undefined, \"chat\");\n      return;\n    }\n    openAskAi(message);\n  };\n\n  const handleBackFromFeedback = () => {\n    const returnToSupport = feedbackDraft?.returnToSupport;\n    const returnTab = feedbackReturnTab;\n    setShowFeedbackForm(false);\n    setFeedbackDraft(null);\n    setFeedbackReturnTab(null);\n    if (returnToSupport) {\n      openSupport(undefined, \"chat\", { returnTab: \"support\" });\n      return;\n    }\n    if (returnTab && returnTab !== \"feedback\") {\n      if (returnTab === \"support\" && isStandaloneSupportWidget) {\n        setShowSupportLanding(true);\n      }\n      openHomeDestination(returnTab);\n      return;\n    }\n    if (isStandaloneSupportWidget) {\n      setShowSupportLanding(true);\n      openHomeDestination(\"support\");\n    }\n  };\n\n  const handleBackFromAskAi = () => {\n    const returnTab = askAiReturnTab;\n    setShowAskAi(false);\n    setAskAiReturnTab(null);\n    if (returnTab && returnTab !== \"help\") {\n      setActiveTab(returnTab);\n      sessionStore.set(SESSION_STORAGE_KEYS.ACTIVE_TAB, returnTab);\n    }\n  };\n\n  const handleArticleClick = (article: any) => {\n    setSelectedArticle(article);\n    setShowArticleDetail(true);\n    setShowCollectionPage(false);\n  };\n\n  const openArticleById = React.useCallback(\n    async (articleId: string, returnTab: \"support\" | null = null) => {\n      if (!isHelpCenterLive) return false;\n      setActiveTab(\"help\");\n      setShowCollectionPage(false);\n      setArticleReturnTab(returnTab);\n      setSelectedArticle({ id: articleId });\n      setShowArticleDetail(true);\n      try {\n        const response = await fetchArticleById(articleId, _subscriberCode, widgetLocale);\n        if (response?.data) {\n          setSelectedArticle(response.data);\n          return true;\n        }\n      } catch (error) {\n        logger.error(\"Failed to load article:\", error);\n      }\n      setShowArticleDetail(false);\n      setSelectedArticle(null);\n      return false;\n    },\n    [isHelpCenterLive, _subscriberCode, widgetLocale],\n  );\n\n  const handleSupportArticleOpen = React.useCallback(\n    (article: SupportArticleLink, threadId: string | null) => {\n      if (article.id && isHelpCenterLive) {\n        setSupportInitialThreadId(threadId);\n        void openArticleById(article.id, \"support\").then((opened) => {\n          if (!opened) {\n            setArticleReturnTab(null);\n            window.open(article.url, \"_blank\");\n          }\n        });\n      } else {\n        window.open(article.url, \"_blank\");\n      }\n    },\n    [isHelpCenterLive, openArticleById],\n  );\n\n  const handleSupportResourceOpen = React.useCallback(\n    async (resource: SupportMessageResource, threadId: string | null) => {\n      if (resource.type === \"article\") {\n        handleSupportArticleOpen({ id: resource.id, url: resource.url || \"\" }, threadId);\n        return;\n      }\n      if (resource.type === \"feedback\") {\n        setSupportInitialThreadId(threadId);\n        setFeedbackReturnTab(\"support\");\n        setActiveTab(\"feedback\");\n        try {\n          const response = await fetchFeedbackById(resource.id, _subscriberCode);\n          if (response?.data) {\n            setSelectedFeedbackItem(response.data);\n            setShowFeedbackDetail(true);\n          }\n        } catch (error) {\n          logger.warn(\"Failed to load shared feedback:\", error);\n        }\n        return;\n      }\n      if (resource.type === \"announcement\") {\n        setSupportInitialThreadId(threadId);\n        setActiveTab(\"updates\");\n        try {\n          const response = await fetchAnnouncementById(resource.id, _subscriberCode);\n          if (response?.data) handleAnnouncementClick(response.data);\n        } catch (error) {\n          logger.warn(\"Failed to load shared announcement:\", error);\n        }\n        return;\n      }\n      if (resource.type === \"tour\") {\n        await handleAnnouncementTourClick(resource);\n        return;\n      }\n\n      const {\n        closeWidgetDrawer,\n        findChecklistById,\n        findSurveyById,\n        shouldShowChecklistForCurrentUrl,\n        triggerChecklist,\n        triggerSurvey,\n      } = await import(\"../../lib/widget\");\n      const checklist = resource.type === \"checklist\" ? findChecklistById(resource.id) : null;\n      const survey = resource.type === \"survey\" ? findSurveyById(resource.id) : null;\n      const experience = checklist || survey;\n      if (\n        !experience ||\n        !(await canAutomaticallyLaunchExperience(\n          experience,\n          Config.getInstance().get()?.personState?.data,\n        ))\n      ) {\n        throw new Error(\n          `This ${resource.type} is not available for you right now. Please ask support for help.`,\n        );\n      }\n      if (checklist) {\n        if (!shouldShowChecklistForCurrentUrl(checklist)) {\n          throw new Error(\n            \"This checklist is not available on this page. Please ask support where to open it.\",\n          );\n        }\n        await closeWidgetDrawer();\n        await triggerChecklist(checklist, true);\n      } else if (survey) {\n        await closeWidgetDrawer();\n        await triggerSurvey(survey, true);\n      }\n    },\n    [\n      _subscriberCode,\n      handleAnnouncementClick,\n      handleAnnouncementTourClick,\n      handleSupportArticleOpen,\n    ],\n  );\n\n  const handleCollectionClick = (collection: any) => {\n    setSelectedCollection(collection);\n    setShowCollectionPage(true);\n    setShowArticleDetail(false);\n  };\n\n  const handleBackFromArticle = React.useCallback(() => {\n    setShowArticleDetail(false);\n    if (articleReturnTab) {\n      setActiveTab(articleReturnTab);\n      setArticleReturnTab(null);\n    }\n    if (showCollectionPage) {\n      setShowCollectionPage(true);\n    }\n    setTimeout(() => {\n      if (!showCollectionPage) {\n        setSelectedArticle(null);\n      }\n    }, TRANSITION_DELAY);\n  }, [articleReturnTab, showCollectionPage]);\n\n  const handleBackFromCollection = React.useCallback(() => {\n    setShowCollectionPage(false);\n    setTimeout(() => setSelectedCollection(null), TRANSITION_DELAY);\n  }, []);\n\n  const onBack = (type: TabType) => {\n    switch (type) {\n      case \"feedback\":\n        handleBackFromFeedbackDetail();\n        handleBackFromFeedback();\n        break;\n      case \"roadmap\":\n        handleBackToRoadmap();\n        break;\n      case \"updates\":\n        handleBackToTimeline();\n        break;\n      case \"help\":\n        if (showArticleDetail) {\n          handleBackFromArticle();\n        } else if (showCollectionPage) {\n          handleBackFromCollection();\n        }\n        break;\n      default:\n        handleBackFromFeedback();\n        break;\n    }\n  };\n\n  const handleTabChange = (tabValue: TabType) => {\n    if (tabValue === \"help\" && !isHelpCenterLive) {\n      return;\n    }\n    if (tabValue === \"support\") {\n      setSupportMode(\"messages\");\n      setSupportInitialThreadId(null);\n      setSupportResumeActiveThread(false);\n      setSupportHandoff(null);\n      setIsSupportThreadView(false);\n      setShowSupportLanding(isStandaloneSupportWidget);\n    }\n    setAskAiReturnTab(null);\n    setFeedbackReturnTab(null);\n    setSupportReturnTab(null);\n    setActiveTab(tabValue);\n    sessionStore.set(SESSION_STORAGE_KEYS.ACTIVE_TAB, tabValue);\n    if (tabValue === \"help\") {\n      window.setTimeout(() => helpSearchInputRef.current?.focus(), 0);\n    }\n  };\n\n  const handleBoardChange = (boardId: string) => {\n    setActiveBoardId(boardId);\n  };\n\n  // ============================================================================\n  // EFFECTS\n  // ============================================================================\n\n  // Handle keyboard navigation (Cmd/Ctrl + Left Arrow)\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      // Check if Cmd (Mac) or Ctrl (Windows/Linux) + Left Arrow is pressed\n      if ((event.metaKey || event.ctrlKey) && event.key === \"ArrowLeft\") {\n        // Only handle if we're on a details page, but NOT on feedback form\n        if (\n          showAnnouncementDetail ||\n          showRoadmapDetail ||\n          showFeedbackDetail ||\n          showArticleDetail ||\n          showCollectionPage\n        ) {\n          event.preventDefault();\n          if (showAnnouncementDetail) {\n            handleBackToTimeline();\n          } else if (showRoadmapDetail) {\n            handleBackToRoadmap();\n          } else if (showFeedbackDetail) {\n            handleBackFromFeedbackDetail();\n            handleBackFromFeedback();\n          } else if (showArticleDetail) {\n            handleBackFromArticle();\n          } else if (showCollectionPage) {\n            handleBackFromCollection();\n          }\n        }\n        // Don't handle Cmd+Left when feedback form is open to prevent going back to list\n      }\n    };\n\n    // Add event listener\n    document.addEventListener(\"keydown\", handleKeyDown);\n\n    // Cleanup\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [\n    showAnnouncementDetail,\n    showRoadmapDetail,\n    showFeedbackDetail,\n    showArticleDetail,\n    showCollectionPage,\n    handleBackFromArticle,\n    handleBackFromCollection,\n    handleBackFromFeedback,\n    handleBackFromFeedbackDetail,\n    handleBackToRoadmap,\n    handleBackToTimeline,\n  ]);\n\n  // Apply tab selection from open options whenever the host reopens the widget.\n  React.useEffect(() => {\n    const initializeTab = () => {\n      // Skip tab initialization if we have navigation options (articleId, etc.) - let item navigation handle it\n      if (\n        openOptions?.articleId ||\n        openOptions?.announcementId ||\n        openOptions?.roadmapId ||\n        openOptions?.topicId ||\n        openOptions?.supportThreadId\n      ) {\n        return;\n      }\n\n      if (openOptions?.tab && VALID_TABS.includes(openOptions.tab)) {\n        const tab = openOptions.tab;\n\n        if (openOptions.activeTabs && !openOptions.activeTabs.includes(tab)) {\n          if (openOptions.activeTabs.length > 0) {\n            setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n            return;\n          }\n        }\n\n        if (tab === \"help\" && !isHelpCenterLive) {\n          setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n        } else {\n          setActiveTab(tab);\n          if (tab === \"help\" && openOptions.askAi && isAskAiEnabled) {\n            setShowArticleDetail(false);\n            setShowCollectionPage(false);\n            setAskAiReturnTab(null);\n            setShowAskAi(true);\n            setAskAiInitialMessage(openOptions.initialMessage || \"\");\n            setAskAiAutoSubmitInitialMessage(Boolean(openOptions.autoSubmitInitialMessage));\n          }\n        }\n        sessionStore.remove(SESSION_STORAGE_KEYS.WIDGET_OPEN_OPTIONS);\n        if (openedFromNotification && onNotificationHandled) {\n          onNotificationHandled();\n        }\n        return;\n      }\n\n      if (openedFromNotification && !openOptions?.tab) {\n        setActiveTab(\"updates\");\n        if (onNotificationHandled) {\n          onNotificationHandled();\n        }\n        return;\n      }\n\n      if (variant === \"floating\" || variant === \"drawer\") {\n        const nextDefaultTab = getDefaultTab(activeTabs, isHelpCenterLive, defaultTab);\n        setActiveTab(nextDefaultTab);\n        sessionStore.set(SESSION_STORAGE_KEYS.ACTIVE_TAB, nextDefaultTab);\n        return;\n      }\n\n      const storedOptions = sessionStore.get(SESSION_STORAGE_KEYS.WIDGET_OPEN_OPTIONS);\n      if (storedOptions) {\n        try {\n          const parsedOptions: OpenWidgetOptions = JSON.parse(storedOptions);\n          // Skip if we have navigation options\n          if (\n            parsedOptions.articleId ||\n            parsedOptions.announcementId ||\n            parsedOptions.roadmapId ||\n            parsedOptions.topicId ||\n            parsedOptions.supportThreadId\n          ) {\n            return;\n          }\n          if (parsedOptions.tab && VALID_TABS.includes(parsedOptions.tab)) {\n            const tab = parsedOptions.tab;\n\n            if (parsedOptions.activeTabs && !parsedOptions.activeTabs.includes(tab)) {\n              if (parsedOptions.activeTabs.length > 0) {\n                setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n                return;\n              }\n            }\n\n            if (tab === \"help\" && !isHelpCenterLive) {\n              setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n            } else {\n              setActiveTab(tab);\n            }\n            sessionStore.remove(SESSION_STORAGE_KEYS.WIDGET_OPEN_OPTIONS);\n            return;\n          }\n        } catch (e) {\n          logger.warn(\"Failed to parse widget open options:\", e);\n        }\n      }\n\n      const savedTab = sessionStore.get(SESSION_STORAGE_KEYS.ACTIVE_TAB);\n      if (savedTab && VALID_TABS.includes(savedTab as TabType)) {\n        const tab = savedTab as TabType;\n        if (activeTabs.includes(tab)) {\n          if (tab === \"help\" && !isHelpCenterLive) {\n            if (activeTabs.includes(\"feedback\")) {\n              setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n            } else {\n              setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n            }\n          } else {\n            setActiveTab(tab);\n          }\n        }\n      }\n    };\n\n    initializeTab();\n  }, [\n    activeTabs,\n    defaultTab,\n    isHelpCenterLive,\n    onNotificationHandled,\n    openOptions,\n    openedFromNotification,\n    variant,\n  ]);\n\n  React.useEffect(() => {\n    if (!isHelpCenterLive && activeTab === \"help\") {\n      setActiveTab(getFirstAvailableTab(activeTabs, isHelpCenterLive));\n    }\n  }, [activeTabs, isHelpCenterLive, activeTab]);\n\n  // Handle specific item navigation from openOptions\n  React.useEffect(() => {\n    const handleItemNavigation = async (options: OpenWidgetOptions) => {\n      const roadmapItemId = options.roadmapId ?? options.topicId;\n\n      try {\n        if (options.supportThreadId && activeTabs.includes(\"support\")) {\n          setActiveTab(\"support\");\n          setSupportMode(\"messages\");\n          setSupportInitialThreadId(options.supportThreadId);\n          setSupportResumeActiveThread(false);\n          setSupportHandoff(null);\n          setIsSupportThreadView(true);\n          setShowSupportLanding(false);\n        } else if (options.showFeedbackForm || options.modal) {\n          setActiveTab(\"feedback\");\n          setFeedbackReturnTab(null);\n          setShowFeedbackForm(true);\n        } else if (options.announcementId) {\n          setActiveTab(\"updates\");\n          const response = await fetchAnnouncementById(options.announcementId, _subscriberCode);\n          if (response?.data) {\n            setSelectedAnnouncement(response.data);\n            setShowAnnouncementDetail(true);\n            recordAnnouncementVisit(options.announcementId, _subscriberCode).catch((error) => {\n              logger.warn(\"Failed to record announcement visit:\", error);\n            });\n          }\n        } else if (roadmapItemId) {\n          setActiveTab(\"roadmap\");\n          const response = await fetchRoadmapItem(roadmapItemId, _subscriberCode);\n          if (response?.data) {\n            setSelectedRoadmapItem(response.data);\n            setShowRoadmapDetail(true);\n          }\n        } else if (options.articleId && isHelpCenterLive) {\n          await openArticleById(options.articleId);\n        }\n      } catch (error) {\n        logger.error(\"Failed to load item data:\", error);\n      }\n    };\n\n    const hasNavigationOptions = (options: OpenWidgetOptions) =>\n      options.showFeedbackForm ||\n      options.modal ||\n      options.announcementId ||\n      options.roadmapId ||\n      options.topicId ||\n      options.supportThreadId ||\n      (options.articleId && isHelpCenterLive);\n\n    if (openOptions && hasNavigationOptions(openOptions)) {\n      const navigationKey = JSON.stringify({\n        announcementId: openOptions.announcementId,\n        articleId: openOptions.articleId,\n        modal: openOptions.modal,\n        roadmapId: openOptions.roadmapId,\n        showFeedbackForm: openOptions.showFeedbackForm,\n        supportThreadId: openOptions.supportThreadId,\n        topicId: openOptions.topicId,\n      });\n      if (processedNavigationKeyRef.current === navigationKey) return;\n      processedNavigationKeyRef.current = navigationKey;\n      void handleItemNavigation(openOptions);\n      return;\n    }\n\n    processedNavigationKeyRef.current = null;\n\n    const storedOptions = sessionStore.get(SESSION_STORAGE_KEYS.WIDGET_OPEN_OPTIONS);\n    if (storedOptions) {\n      try {\n        const parsedOptions: OpenWidgetOptions = JSON.parse(storedOptions);\n        if (hasNavigationOptions(parsedOptions)) {\n          void handleItemNavigation(parsedOptions);\n          sessionStore.remove(SESSION_STORAGE_KEYS.WIDGET_OPEN_OPTIONS);\n        }\n      } catch (e) {\n        logger.warn(\"Failed to parse widget open options for item navigation:\", e);\n      }\n    }\n  }, [\n    openOptions,\n    onSizeChange,\n    _subscriberCode,\n    isHelpCenterLive,\n    isAskAiEnabled,\n    widgetLocale,\n    openArticleById,\n    activeTabs,\n  ]);\n\n  React.useEffect(() => {\n    if (openOptions?.supportThreadId) return;\n\n    setSupportInitialThreadId(null);\n    setIsSupportThreadView(false);\n    setSupportMode(\"messages\");\n    setShowSupportLanding(isStandaloneSupportWidget);\n  }, [isStandaloneSupportWidget, openOptions]);\n\n  // ============================================================================\n  // RENDER HELPERS\n  // ============================================================================\n\n  const getPositionClasses = () => {\n    const baseClasses = `${isMobileSheet ? \"max-h-full\" : \"h-full\"} bg-[#f7f8f9] dark:bg-gray-900 ${isStandaloneSupportWidget ? \"rounded-3xl\" : \"rounded-xl\"} shadow-2xl transition-all duration-300 overflow-hidden`;\n    return `${baseClasses} w-full`;\n  };\n\n  const isCompact = openOptions?.compact || false;\n\n  const renderStandaloneSupportLanding = () => {\n    const greeting = product.configuration?.widget?.welcomeText || \"Hey there\\nHow can we help?\";\n    const menuRowClass =\n      \"group flex w-full select-none flex-row items-center justify-between gap-2 bg-transparent px-5 py-5 text-left text-neutral-900 outline-none transition hover:bg-neutral-100 active:bg-neutral-200/70 dark:text-neutral-200 dark:hover:bg-neutral-700/30 dark:active:bg-neutral-700/50\";\n    const menuTitleClass = \"h-[1.3rem] text-md font-medium text-neutral-950 dark:text-neutral-100\";\n    const menuDescriptionClass = \"truncate text-sm text-neutral-500 dark:text-neutral-400\";\n    const menuChevron = (\n      <ChevronRight className=\"h-4 w-4 min-w-4 text-neutral-500 transition group-hover:text-neutral-900 dark:text-neutral-400 dark:group-hover:text-neutral-200\" />\n    );\n\n    return (\n      <div className=\"relative flex h-full flex-col overflow-hidden bg-white text-[#09090b] dark:bg-gray-900 dark:text-[#f4f4f5]\">\n        <div\n          className=\"relative min-h-[276px] shrink-0 px-8 pb-10 pt-16\"\n          style={{\n            background:\n              themeMode === \"dark\"\n                ? `linear-gradient(180deg, #111827 0%, color-mix(in srgb, ${primaryColor} 14%, #111827) 100%)`\n                : `linear-gradient(180deg, #ffffff 0%, color-mix(in srgb, ${primaryColor} 14%, #ffffff) 100%)`,\n          }}\n        >\n          <button\n            type=\"button\"\n            aria-label=\"Close\"\n            className=\"absolute right-6 top-6 flex size-8 items-center justify-center rounded-lg text-[#171719] transition hover:bg-black/[0.05] active:scale-[0.96] dark:text-[#f4f4f5] dark:hover:bg-white/[0.08]\"\n            onClick={onClose}\n          >\n            <IconX className=\"size-5\" />\n          </button>\n          {showWelcomeLogo && welcomeLogoUrl ? (\n            <div\n              className=\"flex items-start justify-start\"\n              style={{ minHeight: welcomeLogoHeight }}\n            >\n              <img\n                src={welcomeLogoUrl}\n                alt={product.name ? `${product.name} logo` : \"Workspace logo\"}\n                className=\"w-auto max-w-[180px] object-contain object-left\"\n                style={{ height: welcomeLogoHeight }}\n              />\n            </div>\n          ) : (\n            <div\n              className=\"flex size-16 items-center justify-center overflow-hidden rounded-2xl text-[24px] font-semibold\"\n              style={{ backgroundColor: primaryColor, color: primaryForegroundColor }}\n            >\n              {product.avatarUrl ? (\n                <img\n                  src={product.avatarUrl}\n                  alt={product.name ? `${product.name} logo` : \"Workspace logo\"}\n                  className=\"h-full w-full object-contain\"\n                />\n              ) : (\n                (product.name || \"U\").slice(0, 1).toUpperCase()\n              )}\n            </div>\n          )}\n          <h1 className=\"m-0 mt-8 whitespace-pre-line text-[32px] font-semibold leading-[1.2] tracking-[-0.025em] text-[#09090b] dark:text-white\">\n            {greeting}\n          </h1>\n        </div>\n\n        <div className=\"relative min-h-0 flex-1 overflow-y-auto rounded-t-[32px] bg-white pb-10 dark:bg-gray-900\">\n          <div className=\"border-b border-solid border-neutral-100 dark:border-neutral-800\">\n            <button type=\"button\" className={menuRowClass} onClick={handleChatWithUsClick}>\n              <div className=\"flex min-w-0 flex-row items-center gap-3\">\n                {visibleTeamMembers.length > 0 ? (\n                  <div className=\"isolate flex shrink-0 items-center\">\n                    {visibleTeamMembers.map((member, index) => (\n                      <span\n                        key={member.id}\n                        className=\"relative inline-flex h-10 w-10 flex-none items-center justify-center overflow-hidden rounded-full bg-neutral-100 text-xs font-semibold text-neutral-500 dark:bg-neutral-800 dark:text-neutral-300\"\n                        style={{\n                          zIndex: visibleTeamMembers.length - index,\n                          marginLeft: index === 0 ? 0 : -10,\n                        }}\n                      >\n                        {member.avatarUrl ? (\n                          <img\n                            className=\"h-full w-full object-cover\"\n                            alt={member.name || member.email || \"Team member\"}\n                            src={member.avatarUrl}\n                          />\n                        ) : (\n                          <span>\n                            {(member.name || member.email || \"?\").slice(0, 1).toUpperCase()}\n                          </span>\n                        )}\n                      </span>\n                    ))}\n                  </div>\n                ) : null}\n                <div className=\"flex min-w-0 cursor-default select-none flex-col\">\n                  <div className={menuTitleClass}>{widgetMenuCopy.chatTitle}</div>\n                  <div className={menuDescriptionClass}>{widgetMenuCopy.chatDescription}</div>\n                </div>\n              </div>\n              {menuChevron}\n            </button>\n          </div>\n\n          <div className=\"border-b border-solid border-neutral-100 dark:border-neutral-800\">\n            <button\n              type=\"button\"\n              className={menuRowClass}\n              onClick={() => openHomeDestination(\"feedback\", { showFeedbackForm: true })}\n            >\n              <div className=\"flex min-w-0 flex-col items-start\">\n                <div className={menuTitleClass}>{widgetMenuCopy.requestsTitle}</div>\n                <div className={menuDescriptionClass}>{widgetMenuCopy.requestsDescription}</div>\n              </div>\n              {menuChevron}\n            </button>\n          </div>\n\n          <div className=\"border-b border-solid border-neutral-100 dark:border-neutral-800\">\n            <button\n              type=\"button\"\n              className={menuRowClass}\n              onClick={() => setShowSupportLanding(false)}\n            >\n              <div className=\"flex min-w-0 flex-col items-start\">\n                <div className={menuTitleClass}>View messages</div>\n                <div className={menuDescriptionClass}>See and continue your conversations.</div>\n              </div>\n              {menuChevron}\n            </button>\n          </div>\n        </div>\n      </div>\n    );\n  };\n\n  const renderErrorState = () => (\n    <div className=\"py-10 text-center text-red-500 dark:text-red-400\">\n      <p>Error: {error}</p>\n    </div>\n  );\n\n  const renderLoadingState = () => (\n    <div className=\"py-10 text-center text-gray-500 dark:text-neutral-400\">\n      <DetailPageLoader />\n    </div>\n  );\n\n  const renderAnnouncementDetail = () => {\n    if (!collections || !selectedAnnouncement) {\n      return renderLoadingState();\n    }\n\n    return (\n      <AnnouncementDetail\n        announcement={selectedAnnouncement}\n        subscriberCode={_subscriberCode}\n        collections={collections}\n        onBack={handleBackToTimeline}\n        teamMembers={teamMembers}\n        product={product}\n        onClose={onClose}\n        onFeedbackClick={handleAnnouncementFeedbackClick}\n        onArticleClick={isHelpCenterLive ? handleAnnouncementArticleClick : undefined}\n        onTourClick={handleAnnouncementTourClick}\n        showPoweredByFooter={shouldShowPoweredBy(\n          product.plan,\n          product.configuration?.showPoweredBy,\n        )}\n      />\n    );\n  };\n\n  const renderRoadmapDetail = () => {\n    if (!selectedRoadmapItem) {\n      return renderLoadingState();\n    }\n\n    return (\n      <RoadmapDetail\n        item={selectedRoadmapItem}\n        subscriberCode={_subscriberCode}\n        onBack={handleBackToRoadmap}\n      />\n    );\n  };\n\n  const renderFeedbackDetail = () => {\n    if (!selectedFeedbackItem) {\n      return renderLoadingState();\n    }\n\n    return (\n      <FeedbackDetail feedback={selectedFeedbackItem as any} subscriberCode={_subscriberCode} />\n    );\n  };\n\n  const renderFeedbackForm = () => {\n    return (\n      <FeedbackForm\n        primaryColor={primaryColor}\n        primaryButtonBackgroundColor={primaryButtonBackgroundColor}\n        primaryButtonTextColor={primaryButtonTextColor}\n        onBack={handleBackFromFeedback}\n        product={product}\n        openOptions={openOptions}\n        subscriberCode={_subscriberCode}\n        handleFeedbackItemClick={handleFeedbackItemClick}\n        onSubmit={handleFeedbackSubmit}\n        initialTitle={feedbackDraft?.title}\n        initialText={feedbackDraft?.text}\n        onPanelHiddenChange={onPanelHiddenChange}\n        onElementPickingChange={onElementPickingChange}\n      />\n    );\n  };\n\n  const renderHelpCenterDetail = () => {\n    if (showArticleDetail && selectedArticle) {\n      return (\n        <HelpCenterArticle\n          articleId={selectedArticle.id}\n          subscriberCode={_subscriberCode}\n          subdomain={product.subdomain}\n          onArticleClick={handleArticleClick}\n          primaryColor={primaryColor}\n          language={widgetLocale}\n        />\n      );\n    }\n    if (showCollectionPage && selectedCollection) {\n      return (\n        <HelpCenterCollection\n          collectionId={selectedCollection.id}\n          subscriberCode={_subscriberCode}\n          onArticleClick={handleArticleClick}\n          onBack={handleBackFromCollection}\n          language={widgetLocale}\n        />\n      );\n    }\n    return null;\n  };\n\n  const renderTabContent = () => {\n    if (error) return renderErrorState();\n    if (showAnnouncementDetail) return renderAnnouncementDetail();\n    if (showRoadmapDetail) return renderRoadmapDetail();\n    if (showFeedbackDetail) return renderFeedbackDetail();\n    if (showFeedbackForm) return renderFeedbackForm();\n    if (activeTab === \"help\" && (showArticleDetail || showCollectionPage)) {\n      return renderHelpCenterDetail();\n    }\n\n    return null;\n  };\n\n  const openHomeDestination = (\n    tab: TabType,\n    options?: { showFeedbackForm?: boolean; focusSearch?: boolean },\n  ) => {\n    if (options?.showFeedbackForm) {\n      setFeedbackReturnTab(activeTab);\n    }\n    setActiveTab(tab);\n    setShowAnnouncementDetail(false);\n    setShowRoadmapDetail(false);\n    setShowFeedbackDetail(false);\n    setShowArticleDetail(false);\n    setShowCollectionPage(false);\n    setShowAskAi(false);\n    setArticleReturnTab(null);\n    setSelectedAnnouncement(null);\n    setSelectedRoadmapItem(null);\n    setSelectedFeedbackItem(null);\n    setSelectedArticle(null);\n    setSelectedCollection(null);\n    setShowFeedbackForm(Boolean(options?.showFeedbackForm));\n    if (tab !== \"support\") setIsSupportThreadView(false);\n    sessionStore.set(SESSION_STORAGE_KEYS.ACTIVE_TAB, tab);\n\n    if (options?.focusSearch) {\n      window.setTimeout(() => helpSearchInputRef.current?.focus(), 0);\n    }\n  };\n\n  const openSupport = (\n    threadId?: string,\n    mode: \"messages\" | \"chat\" = \"messages\",\n    options?: { resumeActiveThread?: boolean; returnTab?: TabType | null },\n  ) => {\n    setSupportReturnTab(options?.returnTab === undefined ? activeTab : options.returnTab);\n    setShowSupportLanding(false);\n    setSupportMode(mode);\n    setSupportInitialThreadId(threadId ?? null);\n    setSupportResumeActiveThread(Boolean(options?.resumeActiveThread));\n    setIsSupportThreadView(Boolean(threadId));\n    openHomeDestination(\"support\");\n  };\n\n  const handleBackFromSupport = () => {\n    const returnToMessages = supportMode === \"chat\";\n    const returnTab = supportReturnTab;\n    setSupportMode(\"messages\");\n    setSupportInitialThreadId(null);\n    setSupportResumeActiveThread(false);\n    setSupportHandoff(null);\n    setIsSupportThreadView(false);\n    setSupportReturnTab(null);\n    if (returnToMessages) {\n      setShowSupportLanding(false);\n      openHomeDestination(\"support\");\n      return;\n    }\n    if (returnTab && returnTab !== \"support\") {\n      openHomeDestination(returnTab);\n      return;\n    }\n    setShowSupportLanding(isStandaloneSupportWidget);\n    openHomeDestination(\"support\");\n  };\n\n  const getDetailBackTab = (): TabType => {\n    if (showAnnouncementDetail) return \"updates\";\n    if (showRoadmapDetail) return \"roadmap\";\n    if (showFeedbackDetail || showFeedbackForm) return \"feedback\";\n    return \"help\";\n  };\n\n  const getDetailResourceTitle = () => {\n    if (showAnnouncementDetail) return \"Announcements\";\n    if (showRoadmapDetail) return \"Roadmap\";\n    if (showFeedbackDetail || showFeedbackForm) return \"Feedback\";\n    return \"Help Center\";\n  };\n\n  const getTabTitle = () => {\n    const isDetailView =\n      showAnnouncementDetail ||\n      showRoadmapDetail ||\n      showFeedbackDetail ||\n      showFeedbackForm ||\n      showArticleDetail ||\n      showCollectionPage;\n\n    if (isDetailView) {\n      return (\n        <div className=\"flex items-center gap-2\">\n          {!isCompact && (\n            <Button\n              variant=\"plain\"\n              className=\"cursor-pointer bg-transparent text-neutral-600 transition-colors hover:bg-neutral-100 dark:text-neutral-400 dark:hover:bg-neutral-800\"\n              onClick={() => onBack(getDetailBackTab())}\n              iconOnly={<ChevronLeft className=\"h-5 w-5 text-neutral-600 dark:text-neutral-400\" />}\n              accessibilityLabel=\"Back\"\n              tooltip=\"Back\"\n            />\n          )}\n          {!showAnnouncementDetail && <span>{getDetailResourceTitle()}</span>}\n        </div>\n      );\n    }\n\n    if (activeTab === \"feedback\" && !boardsLoading && orderedBoards.length > 0) {\n      return (\n        <ColorDotDropdown\n          compact\n          label={isCompact && activeBoardId === \"all\" ? \"Feedbacks\" : undefined}\n          options={orderedBoards.map((board) => ({\n            id: board.id,\n            name: board.name,\n            color: board.configuration?.color,\n          }))}\n          activeId={activeBoardId}\n          onSelect={(id) => {\n            if (id) setActiveBoardId(String(id));\n          }}\n          className={isCompact ? \"max-w-[150px]\" : undefined}\n          buttonClassName={\n            isCompact\n              ? \"max-w-full overflow-hidden text-base text-neutral-800 dark:text-neutral-200\"\n              : \"text-neutral-800 dark:text-neutral-200\"\n          }\n          chevronClassName={`text-neutral-600 dark:text-neutral-400 ${isCompact ? \"size-4 shrink-0\" : \"\"}`}\n        />\n      );\n    }\n\n    if (activeTab === \"roadmap\" && !roadmapViewsLoading && roadmapViews.length > 1) {\n      return (\n        <ColorDotDropdown\n          compact\n          options={roadmapViews.map((rv: any) => ({\n            id: rv.id,\n            name: rv.name,\n            color: rv.color || \"#64748b\",\n          }))}\n          activeId={selectedRoadmapId}\n          onSelect={(id) => {\n            if (id) setActiveRoadmapId(String(id));\n          }}\n          buttonClassName=\"text-neutral-800 dark:text-neutral-200\"\n          chevronClassName=\"text-neutral-600 dark:text-neutral-400\"\n        />\n      );\n    }\n\n    const tabTitles: Record<TabType, string> = {\n      home: \"Home\",\n      feedback: \"Feedback\",\n      support: \"Messages\",\n      roadmap: \"Roadmap\",\n      updates: \"Changelog\",\n      help: \"Help Center\",\n    };\n\n    return tabTitles[activeTab] || \"Feedback\";\n  };\n\n  // ============================================================================\n  // JSX COMPONENTS\n  // ============================================================================\n\n  const renderHeader = () => {\n    if (activeTab === \"support\") return null;\n\n    const isHelpMainView =\n      activeTab === \"help\" && !showArticleDetail && !showCollectionPage && !isAskAiOpen;\n    const headerIconButtonClassName =\n      \"group/toggle relative flex size-10 cursor-pointer select-none items-center justify-center rounded-lg border-0 bg-transparent p-0 text-neutral-600 outline-none transition-colors hover:bg-gray-100 hover:text-neutral-950 active:scale-[0.96] dark:text-neutral-300 dark:hover:bg-neutral-700 dark:hover:text-white\";\n    const renderCloseButton = () => (\n      <button\n        type=\"button\"\n        aria-label=\"Close\"\n        className={headerIconButtonClassName}\n        onClick={() => onClose()}\n        title=\"Close\"\n      >\n        <div className=\"text-current\">\n          <div className=\"flex items-center justify-center\">\n            <IconX size=\"18px\" className=\"z-20 size-4\" />\n          </div>\n        </div>\n      </button>\n    );\n\n    if (isAskAiOpen) {\n      return (\n        <div className=\"sticky top-0 z-10 flex h-14 w-full flex-shrink-0 select-none items-center rounded-b-none rounded-t-xl bg-white dark:bg-gray-900\">\n          <div className=\"flex w-full items-center justify-between px-3\">\n            <div className=\"flex min-w-0 items-center gap-2\">\n              <Button\n                variant=\"plain\"\n                className=\"min-h-10 min-w-10 cursor-pointer bg-transparent text-neutral-600 transition-colors hover:bg-neutral-100 active:scale-[0.96] dark:text-neutral-400 dark:hover:bg-neutral-700\"\n                onClick={handleBackFromAskAi}\n                iconOnly={<ArrowLeft className=\"h-4 w-4 text-neutral-600 dark:text-neutral-400\" />}\n                accessibilityLabel=\"Back\"\n                tooltip=\"Back\"\n              />\n              <h2 className=\"m-0 truncate text-[16px] font-semibold leading-5 text-[#242127] dark:text-[#f4f2f7]\">\n                {widgetMenuCopy.chatTitle}\n              </h2>\n            </div>\n            <div className=\"flex items-center gap-1\">\n              <span\n                className=\"flex size-10 items-center justify-center text-neutral-500 dark:text-neutral-400\"\n                aria-hidden=\"true\"\n              >\n                <MoreHorizontal className=\"size-[18px]\" />\n              </span>\n              {renderCloseButton()}\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    const isDetailView =\n      showAnnouncementDetail ||\n      showRoadmapDetail ||\n      showFeedbackDetail ||\n      showFeedbackForm ||\n      showArticleDetail ||\n      showCollectionPage;\n\n    if (showHome && !isDetailView) {\n      return (\n        <div\n          ref={homeHeaderRef}\n          className=\"sticky top-0 z-10 flex w-full flex-shrink-0 select-none items-center justify-between gap-[12px] rounded-t-xl bg-uo-surface-0 pb-[4px] pl-[26px] pr-[12px] pt-[12px]\"\n        >\n          {showWelcomeLogo ? (\n            <img\n              src={welcomeLogoUrl}\n              alt={product.name ? `${product.name} logo` : \"Workspace logo\"}\n              className=\"w-auto max-w-[160px] object-contain object-left\"\n              style={{ height: welcomeLogoHeight }}\n            />\n          ) : (\n            <span aria-hidden=\"true\" />\n          )}\n          {renderCloseButton()}\n        </div>\n      );\n    }\n\n    if (isHelpMainView && !isDetailView) {\n      return (\n        <div className=\"sticky top-0 z-10 flex w-full flex-col justify-center rounded-t-xl bg-neutral-50 dark:bg-gray-800\">\n          <div className=\"overflow-visible px-5 pb-4 pt-6\">\n            <div className=\"flex h-7 select-none items-center justify-between overflow-visible\">\n              <h2 className=\"select-none text-balance text-lg font-semibold text-neutral-950 dark:text-neutral-100\">\n                Help Center\n              </h2>\n              {renderCloseButton()}\n            </div>\n            <div className=\"mt-3 flex w-full flex-row items-center gap-2 overflow-visible\">\n              <div className=\"flex flex-1 flex-col\">\n                <div className=\"relative flex-1\">\n                  <Search className=\"pointer-events-none absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-neutral-500 dark:text-neutral-400\" />\n                  <input\n                    ref={helpSearchInputRef}\n                    className=\"text-md flex h-8 w-full rounded-lg border-none bg-white px-2 indent-[1.35rem] text-neutral-900 ring-1 ring-black/15 transition placeholder:text-neutral-500 focus:outline-none focus:ring-black/30 dark:bg-neutral-800 dark:text-neutral-100 dark:ring-white/15 dark:placeholder:text-neutral-400 dark:focus:ring-white/30\"\n                    id={HOME_SEARCH_PLACEHOLDER}\n                    autoComplete=\"off\"\n                    placeholder={widgetMenuCopy.searchPlaceholder}\n                    type=\"text\"\n                    value={helpSearchQuery}\n                    onChange={(event) => setHelpSearchQuery(event.target.value)}\n                  />\n                </div>\n              </div>\n              {isAskAiEnabled && isHelpCenterLive && (\n                <button\n                  type=\"button\"\n                  onClick={() => openAskAi()}\n                  className=\"relative z-10 flex h-8 flex-none items-center gap-3 rounded-lg border-none bg-white px-3 text-sm font-medium text-neutral-900 shadow-sm ring-1 ring-black/10 transition hover:bg-neutral-100 dark:bg-neutral-700/70 dark:text-neutral-200 dark:ring-white/20 dark:hover:bg-neutral-700\"\n                >\n                  <span className=\"flex items-center truncate\">\n                    <IconSparkle className=\"h-4 w-4\" />\n                    <span className=\"pl-2\">{widgetMenuCopy.askAiLabel}</span>\n                  </span>\n                </button>\n              )}\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    const textColorClass = \"text-neutral-800 dark:text-neutral-200\";\n    const showOpenExternalButton =\n      !(isCompact && showFeedbackForm) &&\n      !(activeTab === \"feedback\" && activeBoardId === \"all\" && !isDetailView);\n\n    return (\n      <div\n        className={`sticky top-0 z-10 flex w-full flex-col justify-center rounded-t-xl ${showFeedbackForm ? \"bg-uo-surface-0\" : \"bg-white dark:bg-gray-900\"} ${textColorClass}`}\n      >\n        <div className=\"flex min-h-14 items-center justify-between px-4 py-3 pl-5\">\n          <div className=\"flex w-full items-center justify-between\">\n            <div className=\"flex flex-1 items-center gap-2\">\n              <div className={`m-0 text-lg font-semibold ${textColorClass}`}>{getTabTitle()}</div>\n            </div>\n            <div className=\"flex items-center gap-2\">\n              {activeTab === \"feedback\" && !isDetailView && (\n                <button\n                  type=\"button\"\n                  aria-label=\"New feedback\"\n                  className=\"relative z-10 flex h-8 w-8 flex-none items-center justify-center rounded-lg border-none bg-white text-sm font-medium text-neutral-900 shadow-sm ring-1 ring-black/10 transition hover:bg-neutral-100 dark:bg-neutral-700/70 dark:text-neutral-200 dark:ring-white/20 dark:hover:bg-neutral-700 md:w-auto md:gap-3 md:px-3\"\n                  onClick={handleFeedbackClick}\n                >\n                  <span className=\"flex min-w-0 items-center truncate\">\n                    <IconNewFeedback className=\"h-4 w-4 shrink-0\" />\n                    <span className=\"hidden pl-2 md:inline\">New feedback</span>\n                  </span>\n                </button>\n              )}\n              {showOpenExternalButton && (\n                <button\n                  type=\"button\"\n                  aria-label=\"Open in new tab\"\n                  title=\"Open in new tab\"\n                  className={headerIconButtonClassName}\n                  onClick={() => {\n                    const feedback = showFeedbackDetail ? selectedFeedbackItem : null;\n                    const isHelpCenter =\n                      !feedback &&\n                      (activeTab === \"help\" || showArticleDetail || showCollectionPage);\n                    const fallbackDomain = isHelpCenter ? \"userorbit.help\" : \"userorbit.com\";\n                    const configuredHelpCenterUrl =\n                      product.configuration?.helpCenter?.publicUrl?.trim();\n                    const baseUrl =\n                      isHelpCenter && configuredHelpCenterUrl\n                        ? normalizeExternalUrl(configuredHelpCenterUrl)\n                        : `https://${product.subdomain}.${fallbackDomain}`;\n                    const toPath = (value?: string | null) =>\n                      value ? `/${value.replace(/^\\/+/, \"\")}` : \"\";\n                    const contentPath = feedback\n                      ? `/feedback${toPath(feedback.url || feedback.urlId || feedback.id)}`\n                      : showAnnouncementDetail && selectedAnnouncement\n                        ? toPath(selectedAnnouncement.url || selectedAnnouncement.id)\n                        : showRoadmapDetail && selectedRoadmapItem\n                          ? `/feedback${toPath(selectedRoadmapItem.url || selectedRoadmapItem.urlId || selectedRoadmapItem.id)}`\n                          : \"\";\n                    window.open(`${baseUrl}${contentPath}`, \"_blank\");\n                  }}\n                >\n                  <IconArrowUpRight size={17} />\n                </button>\n              )}\n              {renderCloseButton()}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  };\n\n  const renderHomeGreeting = () => (\n    <div className=\"flex flex-col gap-[12px] pb-[4px]\">\n      <h2 className=\"m-0 select-none text-balance px-[14px] text-[20px] font-semibold leading-[26px] tracking-[-0.015em] text-uo-text-primary\">\n        {homeTitle}\n      </h2>\n      {showHomeSearch && (\n        <div className=\"relative\">\n          <Search className=\"pointer-events-none absolute left-[12px] top-1/2 h-4 w-4 -translate-y-1/2 text-uo-text-tertiary\" />\n          <input\n            ref={helpSearchInputRef}\n            className=\"flex h-[36px] w-full rounded-uo-control border border-solid border-uo-border-subtle bg-uo-surface-1 pl-[36px] pr-[12px] font-sans text-[13px] text-uo-text-primary outline-none transition-[box-shadow] placeholder:text-uo-text-tertiary focus:shadow-[0_0_0_3px_var(--uo-color-fill-active)]\"\n            id={HOME_SEARCH_PLACEHOLDER}\n            autoComplete=\"off\"\n            placeholder={widgetMenuCopy.searchPlaceholder}\n            type=\"text\"\n            value={helpSearchQuery}\n            onChange={(event) => setHelpSearchQuery(event.target.value)}\n            onKeyDown={(event) => {\n              if (event.key === \"Enter\") {\n                openHomeDestination(\"help\", { focusSearch: true });\n              }\n            }}\n          />\n        </div>\n      )}\n    </div>\n  );\n\n  const homeRowClassName =\n    \"group flex w-full cursor-pointer items-center gap-[12px] rounded-[12px] border-0 bg-transparent px-[12px] py-[10px] text-left font-sans text-uo-text-primary no-underline outline-none transition-colors hover:bg-uo-fill-hover focus-visible:bg-uo-fill-hover\";\n\n  const renderHomeMessageCard = () => {\n    const acceptsMessage = product.configuration?.widget?.chatAction?.actionType !== \"script\";\n\n    return (\n      <div className={`${widgetCardClassName} flex flex-col gap-[12px] p-[14px]`}>\n        <button\n          type=\"button\"\n          onClick={handleChatWithUsClick}\n          className=\"group flex w-full cursor-pointer items-center gap-[12px] border-0 bg-transparent p-0 text-left font-sans outline-none\"\n        >\n          <div className=\"flex min-w-0 flex-1 flex-col gap-[2px]\">\n            <span className=\"text-[14px] font-semibold leading-[20px] text-uo-text-primary\">\n              {widgetMenuCopy.chatTitle}\n            </span>\n            <span className=\"text-[13px] leading-[18px] text-uo-text-tertiary\">\n              {widgetMenuCopy.chatDescription}\n            </span>\n          </div>\n          {visibleTeamMembers.length > 0 && (\n            <div className=\"isolate flex shrink-0 items-center\">\n              {visibleTeamMembers.map((member, index) => (\n                <span\n                  key={member.id}\n                  className=\"relative inline-flex h-[32px] w-[32px] flex-none items-center justify-center overflow-hidden rounded-full bg-uo-surface-3 text-[12px] font-semibold text-uo-text-secondary shadow-[0_0_0_2px_var(--uo-color-surface-1)]\"\n                  style={{\n                    zIndex: visibleTeamMembers.length - index,\n                    marginLeft: index > 0 ? -8 : 0,\n                  }}\n                >\n                  {member.avatarUrl ? (\n                    <img\n                      className=\"h-full w-full object-cover\"\n                      alt={member.name || member.email || \"Team member\"}\n                      src={member.avatarUrl}\n                    />\n                  ) : (\n                    <span>{(member.name || member.email || \"?\").slice(0, 1).toUpperCase()}</span>\n                  )}\n                </span>\n              ))}\n            </div>\n          )}\n          {!acceptsMessage && (\n            <IconChevronRight\n              size={16}\n              className=\"shrink-0 text-uo-text-tertiary transition-colors group-hover:text-uo-text-primary\"\n            />\n          )}\n        </button>\n        {acceptsMessage && (\n          <form\n            className=\"relative\"\n            onSubmit={(event) => {\n              event.preventDefault();\n              sendHomeMessage();\n            }}\n          >\n            <input\n              type=\"text\"\n              aria-label={widgetMenuCopy.chatTitle}\n              placeholder={widgetMenuCopy.messagePlaceholder}\n              autoComplete=\"off\"\n              value={homeMessage}\n              onChange={(event) => setHomeMessage(event.target.value)}\n              className={`${widgetFieldClassName} h-[40px] pl-[12px] pr-[44px]`}\n            />\n            <button\n              type=\"submit\"\n              aria-label=\"Send message\"\n              disabled={!homeMessage.trim()}\n              className=\"absolute right-[4px] top-[4px] flex h-[32px] w-[32px] cursor-pointer items-center justify-center rounded-full border-0 p-0 transition-[opacity,transform] active:scale-[0.94] disabled:cursor-default disabled:opacity-40\"\n              style={{\n                backgroundColor: primaryButtonBackgroundColor,\n                color: primaryButtonTextColor,\n              }}\n            >\n              <IconArrowUp size={16} stroke={2.25} />\n            </button>\n          </form>\n        )}\n      </div>\n    );\n  };\n\n  const renderHomeLinkIcon = (iconName?: string) => {\n    const LinkIcon = (iconName ? getIconByName(iconName) : null) || IconFolder;\n    return <LinkIcon size={18} stroke={1.75} className=\"shrink-0 text-uo-text-secondary\" />;\n  };\n\n  const renderHomeNavigationCard = () => {\n    const homeLinks = configuredHomeLinks || [];\n    if (!showHomeRequests && homeLinks.length === 0) return null;\n\n    return (\n      <nav className={`${widgetCardClassName} flex flex-col p-[4px]`}>\n        {showHomeRequests && (\n          <button\n            type=\"button\"\n            onClick={() => openHomeDestination(\"feedback\", { showFeedbackForm: true })}\n            className={homeRowClassName}\n          >\n            <IconBulb size={18} stroke={1.75} className=\"shrink-0 text-uo-text-secondary\" />\n            <span className=\"flex min-w-0 flex-1 flex-col gap-[1px]\">\n              <span className=\"text-[13px] font-medium leading-[18px]\">\n                {widgetMenuCopy.requestsTitle}\n              </span>\n              <span className=\"truncate text-[12px] leading-[16px] text-uo-text-tertiary\">\n                {widgetMenuCopy.requestsDescription}\n              </span>\n            </span>\n            <IconChevronRight\n              size={16}\n              className=\"shrink-0 text-uo-text-tertiary transition-colors group-hover:text-uo-text-primary\"\n            />\n          </button>\n        )}\n        {homeLinks.map((link) => {\n          const linkKey = `${link.actionType}:${link.value}:${link.label}`;\n          const label = (\n            <span className=\"flex min-w-0 flex-1 flex-col gap-[1px]\">\n              <span className=\"truncate text-[13px] font-medium leading-[18px]\">{link.label}</span>\n              {link.description?.trim() && (\n                <span className=\"truncate text-[12px] leading-[16px] text-uo-text-tertiary\">\n                  {link.description}\n                </span>\n              )}\n            </span>\n          );\n\n          if (link.actionType === \"script\") {\n            return (\n              <button\n                key={linkKey}\n                type=\"button\"\n                onClick={() => {\n                  try {\n                    // eslint-disable-next-line @typescript-eslint/no-implied-eval\n                    new Function(link.value)();\n                  } catch (e) {\n                    logger.warn(\"Widget link script error:\", e);\n                  }\n                }}\n                className={homeRowClassName}\n              >\n                {renderHomeLinkIcon(link.icon)}\n                {label}\n                <IconChevronRight\n                  size={16}\n                  className=\"shrink-0 text-uo-text-tertiary transition-colors group-hover:text-uo-text-primary\"\n                />\n              </button>\n            );\n          }\n\n          return (\n            <a\n              key={linkKey}\n              className={homeRowClassName}\n              href={link.value}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              {renderHomeLinkIcon(link.icon)}\n              {label}\n              <IconArrowUpRight\n                size={15}\n                className=\"shrink-0 text-uo-text-tertiary transition-colors group-hover:text-uo-text-primary\"\n              />\n            </a>\n          );\n        })}\n      </nav>\n    );\n  };\n\n  const renderHomeWhatsNewCard = () => {\n    if (!showHomeWhatsNew) return null;\n    if (homeAnnouncementsLoading) {\n      return (\n        <div className={widgetCardClassName}>\n          <HomeAnnouncementsSkeleton title={widgetMenuCopy.whatsNewTitle} />\n        </div>\n      );\n    }\n    if (homeAnnouncements.length === 0) return null;\n\n    return (\n      <div className={`${widgetCardClassName} flex flex-col p-[4px]`}>\n        <button\n          type=\"button\"\n          onClick={() => openHomeDestination(\"updates\")}\n          className=\"group flex w-fit cursor-pointer items-center gap-[2px] border-0 bg-transparent px-[12px] pb-[4px] pt-[8px] font-sans text-[12px] font-medium leading-[16px] text-uo-text-tertiary outline-none transition-colors hover:text-uo-text-primary\"\n        >\n          {widgetMenuCopy.whatsNewTitle}\n          <IconChevronRight size={14} />\n        </button>\n        <ul className=\"relative m-0 list-none p-0\">\n          <span\n            aria-hidden=\"true\"\n            className=\"absolute bottom-[18px] left-[17px] top-[18px] w-px bg-uo-border-default\"\n          />\n          {homeAnnouncements.map((announcement, index) => (\n            <li key={announcement.id}>\n              <button\n                type=\"button\"\n                onClick={() => handleAnnouncementClick(announcement)}\n                className={`${homeRowClassName} py-[8px]`}\n              >\n                <span className=\"relative z-10 flex h-[11px] w-[11px] shrink-0 items-center justify-center\">\n                  {index === 0 ? (\n                    <>\n                      <span\n                        className=\"absolute inline-flex h-full w-full animate-ping rounded-full\"\n                        style={{ backgroundColor: primaryColor }}\n                      />\n                      <span\n                        className=\"relative inline-flex h-[11px] w-[11px] rounded-full\"\n                        style={{ backgroundColor: primaryColor }}\n                      />\n                    </>\n                  ) : (\n                    <span className=\"relative inline-flex h-[11px] w-[11px] rounded-full bg-uo-surface-1 shadow-[inset_0_0_0_1.5px_var(--uo-color-border-strong)]\" />\n                  )}\n                </span>\n                <span className=\"min-w-0 flex-1 truncate text-[13px] leading-[18px]\">\n                  {announcement.title}\n                </span>\n              </button>\n            </li>\n          ))}\n        </ul>\n      </div>\n    );\n  };\n\n  const renderMainContent = ({ isCompact }: { isCompact: boolean }) => {\n    const isSupportView = activeTab === \"support\";\n    const isSupportChatView = isSupportView && supportMode === \"chat\";\n    const isSupportConversationView = isSupportChatView || (isSupportView && isSupportThreadView);\n    const isStandaloneSupportLanding =\n      isSupportView && isStandaloneSupportWidget && showSupportLanding;\n    const isNavigationHidden =\n      isAskAiOpen || isSupportConversationView || (hasExplicitActiveTabs && activeTabs.length <= 1);\n    const showPoweredBy = shouldShowPoweredBy(product.plan, product.configuration?.showPoweredBy);\n    const footerOffset = showPoweredBy ? 27 : 0;\n    const isAskAiView =\n      activeTab === \"help\" && isAskAiOpen && !showArticleDetail && !showCollectionPage;\n    const isHelpCenterListView =\n      activeTab === \"help\" && !isAskAiOpen && !showArticleDetail && !showCollectionPage;\n    const isFixedHeightHomeView =\n      showHome && !isMobileSheet && !(variant === \"floating\" && widgetSizeMode === \"default\");\n    const isFullHeightView =\n      isAskAiView ||\n      isSupportConversationView ||\n      isStandaloneSupportLanding ||\n      isFixedHeightHomeView;\n\n    const maxHeight = variant === \"floating\" && isNavigationHidden ? \"550px\" : \"750px\";\n    const availableHeight = panelHeight\n      ? `min(80vh, ${maxHeight}, ${panelHeight}px)`\n      : `min(80vh, ${maxHeight})`;\n    const containerHeight =\n      showHome && variant === \"floating\" && widgetSizeMode === \"default\" && !isMobileSheet\n        ? \"auto\"\n        : isMobileSheet\n          ? isSupportConversationView\n            ? \"min(68dvh, 580px)\"\n            : isSupportView && !isStandaloneSupportLanding\n              ? \"min(48dvh, 400px)\"\n              : \"auto\"\n          : isFullHeightView\n            ? \"100%\"\n            : variant === \"drawer\"\n              ? isNavigationHidden\n                ? isHelpCenterListView\n                  ? `calc(100vh - ${50 + footerOffset}px)`\n                  : footerOffset\n                    ? `calc(100vh - ${footerOffset}px)`\n                    : \"100vh\"\n                : `calc(100vh - ${94 + footerOffset}px)`\n              : isNavigationHidden\n                ? `calc(${availableHeight} - ${8 + footerOffset}px)`\n                : `calc(${availableHeight} - ${(isCompact ? 61 : 73) + footerOffset}px)`;\n\n    const isDetailView =\n      showAnnouncementDetail ||\n      showRoadmapDetail ||\n      showFeedbackDetail ||\n      showFeedbackForm ||\n      showArticleDetail ||\n      showCollectionPage;\n\n    return (\n      <div\n        className={`min-h-0 flex-1 ${showHome && !isDetailView ? \"bg-uo-surface-0\" : \"bg-white dark:bg-gray-900\"} ${isFullHeightView ? \"overflow-hidden\" : \"overflow-y-auto\"}`}\n        style={{ \"--container-height\": containerHeight } as React.CSSProperties}\n      >\n        {isDetailView ? (\n          <div className=\"h-full px-0 py-0 pb-0 transition-all duration-300\">\n            <AnimatePresence mode=\"wait\">{renderTabContent()}</AnimatePresence>\n          </div>\n        ) : (\n          <Tabs\n            value={activeTab}\n            onValueChange={handleTabChange}\n            className={isFullHeightView && !isMobileSheet ? \"h-full gap-0\" : undefined}\n          >\n            <div\n              className={`px-0 py-0 ${isFullHeightView && !isMobileSheet ? \"h-full\" : \"\"} ${variant === \"drawer\" && !isMobileSheet ? (showPoweredBy ? \"max-h-[calc(100vh-70px)]\" : \"max-h-[calc(100vh-50px)]\") : \"\"} ${variant === \"floating\" || isSupportView ? \"\" : \"pb-5\"}`}\n            >\n              <TabsContents\n                className={\n                  isFullHeightView && !isMobileSheet\n                    ? \"h-full [&>div>div]:h-full [&>div]:h-full\"\n                    : undefined\n                }\n                transition={supportHandoff ? { duration: 0 } : undefined}\n              >\n                {(variant === \"floating\" || variant === \"drawer\") && (\n                  <TabsContent value=\"home\">\n                    {showHome && (\n                      <div className=\"h-full overflow-hidden bg-uo-surface-0\">\n                        <div\n                          className=\"h-[var(--container-height)] overflow-y-auto\"\n                          style={{ paddingBottom: homeBottomInset }}\n                        >\n                          <div\n                            ref={homeContentRef}\n                            className=\"flex flex-col gap-[8px] px-[12px] pb-[12px] pt-[4px]\"\n                          >\n                            {renderHomeGreeting()}\n                            {showHomeChat && renderHomeMessageCard()}\n                            {renderHomeNavigationCard()}\n                            {renderHomeWhatsNewCard()}\n                          </div>\n                        </div>\n                      </div>\n                    )}\n                  </TabsContent>\n                )}\n\n                <TabsContent value=\"feedback\">\n                  {activeTab === \"feedback\" && (\n                    <FeedbackContent\n                      primaryColor={primaryColor}\n                      product={product}\n                      onItemClick={handleFeedbackItemClick}\n                      subscriberCode={_subscriberCode}\n                      onCreateFeedback={handleFeedbackClick}\n                      onClose={onClose}\n                      activeBoardId={activeBoardId}\n                      onBoardChange={handleBoardChange}\n                    />\n                  )}\n                </TabsContent>\n\n                <TabsContent value=\"support\">\n                  {activeTab === \"support\" &&\n                    (isStandaloneSupportLanding ? (\n                      renderStandaloneSupportLanding()\n                    ) : (\n                      <SupportContent\n                        subscriberCode={_subscriberCode}\n                        primaryButtonBackgroundColor={primaryButtonBackgroundColor}\n                        primaryButtonTextColor={primaryButtonTextColor}\n                        mode={supportMode}\n                        chatTitle={widgetMenuCopy.chatTitle}\n                        product={product}\n                        onArticleOpen={handleSupportArticleOpen}\n                        onResourceOpen={handleSupportResourceOpen}\n                        initialThreadId={supportInitialThreadId}\n                        resumeActiveThread={supportResumeActiveThread}\n                        handoff={supportHandoff}\n                        initialMessage={supportInitialMessage}\n                        onInitialMessageConsumed={() => setSupportInitialMessage(\"\")}\n                        chatMembers={visibleTeamMembers}\n                        onHandoffConsumed={() => setSupportHandoff(null)}\n                        feedbackSuggestion={supportFeedbackSuggestion}\n                        onFeedbackSuggestionChange={setSupportFeedbackSuggestion}\n                        onFeedbackRequest={handleSupportFeedbackRequest}\n                        onStartChat={() => {\n                          setSupportFeedbackSuggestion(null);\n                          openSupport(undefined, \"chat\");\n                        }}\n                        onThreadViewChange={setIsSupportThreadView}\n                        onBack={\n                          supportMode === \"chat\" || isStandaloneSupportWidget\n                            ? handleBackFromSupport\n                            : undefined\n                        }\n                        onClose={onClose}\n                        showPoweredByFooter={showPoweredBy && !isMobileSheet && isFullHeightView}\n                        requireAuthentication={requireAuthentication}\n                        initialEmail={initialEmail}\n                        initialName={initialName}\n                        emailHash={emailHash}\n                      />\n                    ))}\n                </TabsContent>\n\n                <TabsContent value=\"roadmap\">\n                  {activeTab === \"roadmap\" && (\n                    <RoadmapContent\n                      primaryColor={primaryColor}\n                      onItemClick={handleRoadmapItemClick}\n                      subscriberCode={_subscriberCode}\n                      activeRoadmapId={selectedRoadmapId}\n                      isLoading={roadmapViewsLoading}\n                      isCompact={isCompact}\n                    />\n                  )}\n                </TabsContent>\n\n                <TabsContent value=\"updates\">\n                  {activeTab === \"updates\" && (\n                    <UpdateTimeline\n                      onAnnouncementClick={handleAnnouncementClick}\n                      product={product}\n                      collections={collections}\n                      subscriberCode={_subscriberCode}\n                      teamMembers={teamMembers}\n                    />\n                  )}\n                </TabsContent>\n\n                {isHelpCenterLive && (\n                  <TabsContent value=\"help\">\n                    <AnimatePresence mode=\"popLayout\">\n                      {activeTab === \"help\" &&\n                        isAskAiOpen &&\n                        !showArticleDetail &&\n                        !showCollectionPage && (\n                          <motion.div\n                            key=\"ask-ai\"\n                            initial={{ x: \"40%\" }}\n                            animate={{ x: 0 }}\n                            exit={{ x: \"40%\", opacity: 0 }}\n                            transition={{ type: \"spring\", stiffness: 300, damping: 30, mass: 0.8 }}\n                            className={isMobileSheet ? \"h-auto\" : \"h-full\"}\n                          >\n                            <AskAiContent\n                              subscriberCode={_subscriberCode}\n                              primaryColor={primaryColor}\n                              primaryButtonBackgroundColor={primaryButtonBackgroundColor}\n                              primaryButtonTextColor={primaryButtonTextColor}\n                              currentUrl={\n                                typeof window === \"undefined\" ? undefined : window.location.pathname\n                              }\n                              language={widgetLocale}\n                              onArticleClick={(article) => {\n                                setShowAskAi(false);\n                                handleArticleClick(article);\n                              }}\n                              onFeatureClick={(feature) => {\n                                setShowAskAi(false);\n                                handleFeedbackItemClick(feature);\n                              }}\n                              onFeedbackClick={handleHelpCenterFeedbackClick}\n                              onSupportClick={\n                                isSupportHandoffAvailable ? handleAskAiSupportClick : undefined\n                              }\n                              onClose={onClose}\n                              teamName={product?.name}\n                              initialMessage={askAiInitialMessage}\n                              autoSubmitInitialMessage={askAiAutoSubmitInitialMessage}\n                              showPoweredByFooter={showPoweredBy && !isMobileSheet}\n                              isMobileSheet={isMobileSheet}\n                            />\n                          </motion.div>\n                        )}\n                      {activeTab === \"help\" &&\n                        !isAskAiOpen &&\n                        !showArticleDetail &&\n                        !showCollectionPage && (\n                          <motion.div\n                            key=\"help-center\"\n                            initial={{ x: \"-40%\" }}\n                            animate={{ x: 0 }}\n                            exit={{ x: \"-40%\", opacity: 0 }}\n                            transition={{ type: \"spring\", stiffness: 300, damping: 30, mass: 0.8 }}\n                            className=\"h-full\"\n                          >\n                            <HelpCenterContent\n                              subscriberCode={_subscriberCode}\n                              primaryButtonBackgroundColor={primaryButtonBackgroundColor}\n                              primaryButtonTextColor={primaryButtonTextColor}\n                              onArticleClick={handleArticleClick}\n                              onCollectionClick={handleCollectionClick}\n                              onFeedbackClick={handleHelpCenterFeedbackClick}\n                              onClose={onClose}\n                              searchQuery={debouncedHelpSearchQuery}\n                              language={widgetLocale}\n                            />\n                          </motion.div>\n                        )}\n                    </AnimatePresence>\n                  </TabsContent>\n                )}\n              </TabsContents>\n            </div>\n\n            {!isNavigationHidden && renderTabNavigation({ isCompact })}\n          </Tabs>\n        )}\n      </div>\n    );\n  };\n\n  const renderTabNavigation = ({ isCompact }: { isCompact: boolean }) => {\n    const showPoweredBy = shouldShowPoweredBy(product.plan, product.configuration?.showPoweredBy);\n    const bottomPosition = isMobileSheet\n      ? \"relative\"\n      : showPoweredBy\n        ? \"absolute bottom-[24px]\"\n        : \"absolute bottom-0\";\n    const tabItems: Record<TabType, { label: string; icon: React.ReactNode }> = {\n      home: { label: \"Home\", icon: <IconHome size={17} /> },\n      updates: { label: \"Changelog\", icon: <IconUpdates size={17} /> },\n      feedback: { label: \"Feedback\", icon: <IconFeedback size={17} /> },\n      support: { label: \"Messages\", icon: <IconMessages size={17} /> },\n      help: { label: \"Help\", icon: <IconHelp size={17} /> },\n      roadmap: { label: \"Roadmap\", icon: <IconRoadmap size={17} /> },\n    };\n    const visibleTabs = orderedNavigationTabs.filter(\n      (tab) =>\n        (variant === \"floating\" || variant === \"drawer\" || tab !== \"home\") &&\n        (tab !== \"help\" || isHelpCenterLive),\n    );\n\n    return (\n      <div\n        ref={homeNavigationRef}\n        className={`${isCompact ? \"\" : \"px-4 pb-1.5 pt-1.5\"} ${bottomPosition} left-0 right-0 ${showPoweredBy || isMobileSheet ? \"\" : \"rounded-b-xl\"} rounded-t-none border-t border-solid border-neutral-200/60 bg-white dark:border-neutral-700/60 dark:bg-gray-900`}\n        style={{ \"--color-primary\": primaryColor } as React.CSSProperties}\n      >\n        <TabsList>\n          {visibleTabs.map((tab) => {\n            const item = tabItems[tab];\n\n            return (\n              <TabsTrigger key={tab} isCompact={isCompact} value={tab} icon={item.icon}>\n                {item.label}\n              </TabsTrigger>\n            );\n          })}\n        </TabsList>\n      </div>\n    );\n  };\n\n  const renderFooter = () => {\n    const showPoweredBy = shouldShowPoweredBy(product.plan, product.configuration?.showPoweredBy);\n    if (!showPoweredBy) return null;\n\n    if (isStandaloneSupportWidget && showSupportLanding) {\n      return (\n        <div\n          ref={homeFooterRef}\n          className={`${isMobileSheet ? \"relative\" : \"absolute bottom-0\"} left-0 right-0 z-30 flex h-10 items-center justify-center bg-white dark:bg-gray-900`}\n        >\n          <a\n            href=\"https://userorbit.com?utm_source=userorbit-widget\"\n            target=\"_blank\"\n            className=\"text-[13px] text-neutral-500 no-underline transition hover:text-neutral-800 dark:text-neutral-400 dark:hover:text-neutral-100\"\n            rel=\"noreferrer\"\n          >\n            Powered by <span className=\"font-semibold\">Userorbit</span>\n          </a>\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={homeFooterRef}\n        className={`${isMobileSheet ? \"relative\" : \"absolute bottom-0\"} left-0 right-0 border-t border-solid border-neutral-200/60 bg-neutral-100 px-3 py-1 text-center dark:border-neutral-700/60 dark:bg-neutral-900`}\n      >\n        <a\n          href=\"https://userorbit.com?utm_source=userorbit-widget\"\n          target=\"_blank\"\n          className=\"m-0 block cursor-pointer font-sans text-[11px] text-neutral-400 no-underline transition hover:text-neutral-700 dark:text-neutral-500 dark:hover:text-neutral-200\"\n          rel=\"noreferrer\"\n        >\n          Powered by Userorbit\n        </a>\n      </div>\n    );\n  };\n\n  // ============================================================================\n  // MAIN RENDER\n  // ============================================================================\n\n  return (\n    <div\n      className={`${getPositionClasses()} flex flex-col font-sans ${variant === \"floating\" && !isMobileSheet ? \"h-full\" : \"\"} relative`}\n      style={\n        {\n          \"--color-primary\": primaryColor,\n          \"--color-primary-foreground\": primaryForegroundColor,\n        } as React.CSSProperties\n      }\n    >\n      {renderHeader()}\n      {renderMainContent({ isCompact })}\n      {renderFooter()}\n    </div>\n  );\n};\n\nconst WidgetContent: React.FC<WidgetContentProps> = (props) => {\n  return (\n    <FeedbackQueryProvider>\n      <WidgetContentInner {...props} />\n    </FeedbackQueryProvider>\n  );\n};\n\nexport default WidgetContent;\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { useResolvedThemeMode } from \"@userorbit/ui/src/shared/hooks/use-resolved-theme-mode\";\nimport type { ThemeModeSetting } from \"@userorbit/ui/src/shared/lib/theme\";\nimport {\n  clampWidgetHomeHeight,\n  getFloatingWidgetSize,\n  WIDGET_EXPANDED_MAX_HEIGHT,\n  WIDGET_TALL_MAX_HEIGHT,\n  type WidgetSizeMode,\n} from \"@userorbit/ui/src/shared/lib/widget-sizing\";\nimport * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport NotificationButton from \"./notification-button\";\nimport { useRageClick } from \"./use-rage-click\";\nimport { useWidgetData } from \"./use-widget-data\";\nimport WidgetContent from \"./widget-content\";\n\ntype WidgetNavigationTab = \"home\" | \"feedback\" | \"roadmap\" | \"updates\" | \"help\" | \"support\";\n\nconst VALID_WIDGET_TABS: WidgetNavigationTab[] = [\n  \"home\",\n  \"feedback\",\n  \"roadmap\",\n  \"updates\",\n  \"help\",\n  \"support\",\n];\nconst EDITABLE_WIDGET_TARGET_SELECTOR =\n  'input, textarea, select, [contenteditable=\"\"], [contenteditable=\"true\"], [contenteditable=\"plaintext-only\"]';\nconst MOBILE_WIDGET_MEDIA_QUERY = \"(max-width: 640px)\";\n\nconst useMediaQuery = (query: string) => {\n  const [matches, setMatches] = useState(\n    () => typeof window !== \"undefined\" && window.matchMedia(query).matches,\n  );\n\n  useEffect(() => {\n    const mediaQuery = window.matchMedia(query);\n    const updateMatch = () => setMatches(mediaQuery.matches);\n\n    updateMatch();\n    mediaQuery.addEventListener(\"change\", updateMatch);\n    return () => mediaQuery.removeEventListener(\"change\", updateMatch);\n  }, [query]);\n\n  return matches;\n};\n\nconst isEditableWidgetTarget = (target: EventTarget | null) => {\n  if (!(target instanceof Element)) return false;\n  return Boolean(target.closest(EDITABLE_WIDGET_TARGET_SELECTOR));\n};\n\nconst stopEditableWidgetEvent = (event: React.SyntheticEvent) => {\n  if (!isEditableWidgetTarget(event.target)) return;\n  event.stopPropagation();\n};\n\nconst editableWidgetEventBoundaryProps = {\n  onBeforeInput: stopEditableWidgetEvent,\n  onInput: stopEditableWidgetEvent,\n  onKeyDown: stopEditableWidgetEvent,\n  onKeyPress: stopEditableWidgetEvent,\n  onKeyUp: stopEditableWidgetEvent,\n  onCompositionStart: stopEditableWidgetEvent,\n  onCompositionUpdate: stopEditableWidgetEvent,\n  onCompositionEnd: stopEditableWidgetEvent,\n  onPaste: stopEditableWidgetEvent,\n  onCut: stopEditableWidgetEvent,\n} satisfies React.DOMAttributes<HTMLDivElement>;\n\nconst normalizeLocale = (locale?: unknown): string | null => {\n  if (typeof locale !== \"string\") return null;\n  const trimmed = locale.trim();\n  return trimmed || null;\n};\n\nconst normalizeWidgetString = (value: unknown): string | undefined => {\n  if (typeof value !== \"string\") return undefined;\n  const trimmed = value.trim();\n  return trimmed || undefined;\n};\n\nconst matchSupportedLocale = (locale: string, supportedLocales: string[]): string | null => {\n  const exact = supportedLocales.find((supported) => supported === locale);\n  if (exact) return exact;\n\n  const normalized = locale.toLowerCase();\n  const caseInsensitive = supportedLocales.find(\n    (supported) => supported.toLowerCase() === normalized,\n  );\n  if (caseInsensitive) return caseInsensitive;\n\n  const baseLocale = normalized.split(\"-\")[0];\n  return supportedLocales.find((supported) => supported.toLowerCase() === baseLocale) || null;\n};\n\nconst resolveWidgetLocale = (product: FloatingWidgetProps[\"product\"], config: any): string => {\n  const helpCenterConfig = product.configuration?.helpCenter || {};\n  const defaultLocale = normalizeLocale((helpCenterConfig as any).defaultLanguage) || \"en\";\n  const supportedLocales = Array.from(\n    new Set([\n      defaultLocale,\n      ...(((helpCenterConfig as any).supportedLanguages || []) as string[]).filter(Boolean),\n    ]),\n  );\n  const configuredLocale =\n    normalizeLocale(config.openOptions?.locale) ||\n    normalizeLocale(config.openOptions?.language) ||\n    normalizeLocale(config.locale) ||\n    normalizeLocale(config.language) ||\n    normalizeLocale(config.widget?.locale) ||\n    normalizeLocale(config.widget?.language);\n\n  if (!configuredLocale || configuredLocale === \"default\") {\n    return defaultLocale;\n  }\n\n  if (configuredLocale === \"auto\" && typeof navigator !== \"undefined\") {\n    const browserLocales = [navigator.language, ...(navigator.languages || [])].filter(Boolean);\n    for (const browserLocale of browserLocales) {\n      const supported = matchSupportedLocale(browserLocale, supportedLocales);\n      if (supported) return supported;\n    }\n    return defaultLocale;\n  }\n\n  return matchSupportedLocale(configuredLocale, supportedLocales) || defaultLocale;\n};\n\nconst resolveTeamData = (\n  product: FloatingWidgetProps[\"product\"],\n  team: FloatingWidgetProps[\"product\"] | null,\n): FloatingWidgetProps[\"product\"] => {\n  if (!team) return product;\n\n  return {\n    ...product,\n    ...team,\n    configuration: {\n      ...product.configuration,\n      ...team.configuration,\n      widget: {\n        ...product.configuration?.widget,\n        ...team.configuration?.widget,\n      },\n    },\n  };\n};\n\nexport interface FloatingWidgetProps {\n  product: {\n    theme: any;\n    name?: string;\n    avatarUrl?: string;\n    configuration?: {\n      widgetDescription?: string;\n      portalLogoLight?: string;\n      portalLogoDark?: string;\n      helpCenter?: {\n        isLive?: boolean;\n        defaultLanguage?: string;\n        supportedLanguages?: string[];\n        showInbox?: boolean | null;\n      };\n      aiAssistant?: {\n        enabled?: boolean | null;\n      };\n      feedback?: {\n        enableVoiceFeedback?: boolean;\n        enableReplayEvidence?: boolean;\n        enableScreenRecording?: boolean;\n      };\n      widget?: {\n        primaryColor?: string;\n        primaryColorLight?: string;\n        primaryColorDark?: string;\n        primaryButtonBackgroundColorLight?: string;\n        primaryButtonBackgroundColorDark?: string;\n        primaryButtonTextColorLight?: string;\n        primaryButtonTextColorDark?: string;\n        welcomeText?: string;\n        showWelcomeLogo?: boolean;\n        welcomeLogoUrl?: string;\n        welcomeLogoUrlLight?: string;\n        welcomeLogoUrlDark?: string;\n        welcomeLogoHeight?: number;\n        launcherText?: string | null;\n        launcherIconSvg?: string | null;\n        launcherOpenIconSvg?: string | null;\n        launcherBackgroundColorLight?: string | null;\n        launcherIconColorLight?: string | null;\n        launcherBackgroundColorDark?: string | null;\n        launcherIconColorDark?: string | null;\n        activeTabs?: WidgetNavigationTab[];\n        tabOrder?: WidgetNavigationTab[];\n        defaultTab?: WidgetNavigationTab;\n        copyOverrides?: Record<string, string>;\n        homeSections?: {\n          search?: boolean;\n          chat?: boolean;\n          requests?: boolean;\n          whatsNew?: boolean;\n        };\n        chatMemberIds?: string[];\n        homeLinks?: Array<{\n          label: string;\n          description?: string;\n          icon?: string;\n          actionType: \"url\" | \"script\";\n          value: string;\n        }>;\n      };\n    };\n  };\n  attributes: any;\n  config: any;\n  position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n  variant?: \"floating\" | \"drawer\" | \"modal\" | \"popover\";\n  anchorElement?: HTMLElement | null;\n  onClose?: () => void;\n}\n\ntype PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nconst computePopoverPlacement = (\n  anchor: HTMLElement,\n  widgetWidth: number,\n  widgetHeight: number,\n): PopoverPlacement => {\n  const rect = anchor.getBoundingClientRect();\n  const viewportW = window.innerWidth;\n  const viewportH = window.innerHeight;\n  const gap = 8;\n\n  const spaceBelow = viewportH - rect.bottom - gap;\n  const spaceAbove = rect.top - gap;\n  const spaceRight = viewportW - rect.right - gap;\n  const spaceLeft = rect.left - gap;\n\n  if (spaceBelow >= widgetHeight) return \"bottom\";\n  if (spaceRight >= widgetWidth) return \"right\";\n  if (spaceLeft >= widgetWidth) return \"left\";\n  if (spaceAbove >= widgetHeight) return \"top\";\n\n  const maxSpace = Math.max(spaceBelow, spaceRight, spaceLeft, spaceAbove);\n  if (maxSpace === spaceBelow) return \"bottom\";\n  if (maxSpace === spaceRight) return \"right\";\n  if (maxSpace === spaceLeft) return \"left\";\n  return \"top\";\n};\n\nconst computePopoverStyle = (\n  anchor: HTMLElement,\n  placement: PopoverPlacement,\n  widgetWidth: number,\n  widgetHeight: number,\n): React.CSSProperties => {\n  const rect = anchor.getBoundingClientRect();\n  const gap = 8;\n  const style: React.CSSProperties = { position: \"fixed\" };\n\n  switch (placement) {\n    case \"bottom\": {\n      style.top = Math.max(8, Math.min(rect.bottom + gap, window.innerHeight - widgetHeight - 8));\n      style.left = Math.max(8, Math.min(rect.left, window.innerWidth - widgetWidth - 8));\n      break;\n    }\n    case \"top\": {\n      style.bottom = Math.max(\n        8,\n        Math.min(window.innerHeight - rect.top + gap, window.innerHeight - widgetHeight - 8),\n      );\n      style.left = Math.max(8, Math.min(rect.left, window.innerWidth - widgetWidth - 8));\n      break;\n    }\n    case \"right\": {\n      style.top = Math.max(8, Math.min(rect.top, window.innerHeight - widgetHeight - 8));\n      style.left = rect.right + gap;\n      break;\n    }\n    case \"left\": {\n      style.top = Math.max(8, Math.min(rect.top, window.innerHeight - widgetHeight - 8));\n      style.right = window.innerWidth - rect.left + gap;\n      break;\n    }\n  }\n\n  return style;\n};\n\nconst FloatingWidget = ({\n  product,\n  attributes,\n  config,\n  position = \"bottom-right\",\n  variant = \"floating\",\n  anchorElement,\n  onClose,\n}: FloatingWidgetProps): any => {\n  const [widgetPosition, setWidgetPosition] = useState(config.openOptions?.position || position);\n  const [themeSetting, setThemeSetting] = useState<ThemeModeSetting>(\n    config.theme || config.widget?.theme || \"light\",\n  );\n  const themeMode = useResolvedThemeMode(themeSetting);\n  const [isOpen, setIsOpen] = useState(\n    ((variant === \"drawer\" || variant === \"popover\") && config.isOpen) || config.forceOpen || false,\n  );\n  const [isExternalDrawerOpen, setIsExternalDrawerOpen] = useState(false);\n  const [isWidgetExiting, setIsWidgetExiting] = useState(false);\n  const [widgetSizeMode, setWidgetSizeMode] = useState<WidgetSizeMode>(\"default\");\n  const [preferredWidgetHeight, setPreferredWidgetHeight] = useState<number | null>(null);\n  const [isPanelHidden, setIsPanelHidden] = useState(false);\n  const [isElementPickingActive, setIsElementPickingActive] = useState(false);\n  const [openedFromNotification, setOpenedFromNotification] = useState(false);\n  const [popoverPlacement, setPopoverPlacement] = useState<PopoverPlacement>(\"bottom\");\n  const [popoverStyle, setPopoverStyle] = useState<React.CSSProperties>({});\n  const widgetRef = React.useRef<HTMLDivElement>(null);\n  const rageDetected = useRageClick();\n  const isMobileViewport = useMediaQuery(MOBILE_WIDGET_MEDIA_QUERY);\n  const isMobileSheet = (variant === \"floating\" || variant === \"drawer\") && isMobileViewport;\n  let panelAnimationDuration = 0.25;\n  if (variant === \"floating\") {\n    panelAnimationDuration = 0.18;\n  } else if (variant === \"drawer\" && !isMobileSheet) {\n    panelAnimationDuration = 0.4;\n  }\n\n  // Listen for dynamic config updates (position, theme)\n  useEffect(() => {\n    const handler = (e: Event) => {\n      const detail = (e as CustomEvent).detail;\n      if (detail?.position) setWidgetPosition(detail.position);\n      if (detail?.theme) setThemeSetting(detail.theme);\n    };\n    window.addEventListener(\"uojs-config-update\", handler);\n    return () => window.removeEventListener(\"uojs-config-update\", handler);\n  }, []);\n\n  useEffect(() => {\n    const handleDrawerOpened = () => setIsExternalDrawerOpen(true);\n    const handleDrawerClosed = () => setIsExternalDrawerOpen(false);\n\n    window.addEventListener(\"uojs-widget-drawer-opened\", handleDrawerOpened);\n    window.addEventListener(\"uojs-widget-drawer-closed\", handleDrawerClosed);\n    return () => {\n      window.removeEventListener(\"uojs-widget-drawer-opened\", handleDrawerOpened);\n      window.removeEventListener(\"uojs-widget-drawer-closed\", handleDrawerClosed);\n    };\n  }, []);\n\n  // Get subscriber code from attributes\n  const subscriberCode = attributes?.code || attributes?.token;\n\n  // Fetch basic widget data (team and collections only)\n  const { team, collections, teamMembers, loading, error } = useWidgetData(subscriberCode);\n\n  const teamData = resolveTeamData(product, team);\n  const widgetLocale = resolveWidgetLocale(teamData, config);\n  const configuredWidget =\n    teamData.configuration && \"widget\" in teamData.configuration\n      ? teamData.configuration.widget\n      : undefined;\n  const configuredActiveTabs = React.useMemo(() => {\n    const tabs = configuredWidget?.activeTabs;\n    if (!Array.isArray(tabs)) return undefined;\n\n    const validTabs = tabs.filter((tab): tab is WidgetNavigationTab =>\n      VALID_WIDGET_TABS.includes(tab as WidgetNavigationTab),\n    );\n\n    return validTabs.length > 0 ? validTabs : undefined;\n  }, [configuredWidget?.activeTabs]);\n  const configuredTabOrder = React.useMemo(() => {\n    const tabs = configuredWidget?.tabOrder;\n    if (!Array.isArray(tabs)) return undefined;\n\n    const validTabs = tabs.filter((tab): tab is WidgetNavigationTab =>\n      VALID_WIDGET_TABS.includes(tab as WidgetNavigationTab),\n    );\n\n    return validTabs.length > 0 ? validTabs : undefined;\n  }, [configuredWidget?.tabOrder]);\n  const configuredDefaultTab = React.useMemo(() => {\n    const tab = configuredWidget?.defaultTab;\n    return VALID_WIDGET_TABS.includes(tab as WidgetNavigationTab)\n      ? (tab as WidgetNavigationTab)\n      : undefined;\n  }, [configuredWidget?.defaultTab]);\n  const launcherText = normalizeWidgetString(configuredWidget?.launcherText);\n  const launcherIconSvg = normalizeWidgetString(configuredWidget?.launcherIconSvg);\n  const launcherOpenIconSvg = normalizeWidgetString(configuredWidget?.launcherOpenIconSvg);\n  const launcherBackgroundColor =\n    themeMode === \"dark\"\n      ? normalizeWidgetString(configuredWidget?.launcherBackgroundColorDark) || \"#ffffff\"\n      : normalizeWidgetString(configuredWidget?.launcherBackgroundColorLight) || \"#000000\";\n  const launcherIconColor =\n    themeMode === \"dark\"\n      ? normalizeWidgetString(configuredWidget?.launcherIconColorDark) || \"#000000\"\n      : normalizeWidgetString(configuredWidget?.launcherIconColorLight) || \"#ffffff\";\n  const openOptions = React.useMemo(() => {\n    if (!configuredActiveTabs && !configuredTabOrder && !configuredDefaultTab) {\n      return config.openOptions;\n    }\n\n    return {\n      ...(configuredActiveTabs ? { activeTabs: configuredActiveTabs } : {}),\n      ...(configuredTabOrder ? { tabOrder: configuredTabOrder } : {}),\n      ...(configuredDefaultTab ? { defaultTab: configuredDefaultTab } : {}),\n      ...config.openOptions,\n    };\n  }, [config.openOptions, configuredActiveTabs, configuredDefaultTab, configuredTabOrder]);\n\n  const isTallWidget = widgetSizeMode !== \"default\";\n  const activeTabCount =\n    Array.isArray(openOptions?.activeTabs) && openOptions.activeTabs.length\n      ? openOptions.activeTabs.length\n      : 5;\n  const isStandaloneSupportWidget =\n    activeTabCount === 1 && openOptions?.activeTabs?.[0] === \"support\";\n  const isWideWidget = widgetSizeMode === \"expanded\";\n  const { width: widgetWidth, height: widgetHeight } = getFloatingWidgetSize({\n    mode: widgetSizeMode,\n    activeTabCount,\n    viewportHeight: typeof window !== \"undefined\" ? window.innerHeight : 678,\n    standaloneSupport: isStandaloneSupportWidget,\n  });\n  const defaultWidgetHeight = isStandaloneSupportWidget ? widgetHeight : 597.5;\n  const canUsePreferredWidgetHeight =\n    !isMobileSheet &&\n    !config.openOptions?.compact &&\n    (variant === \"floating\" || variant === \"popover\");\n  const resolvedDefaultWidgetHeight =\n    canUsePreferredWidgetHeight && preferredWidgetHeight\n      ? clampWidgetHomeHeight(preferredWidgetHeight, defaultWidgetHeight)\n      : defaultWidgetHeight;\n  const tallWidgetMaxHeight = `min(calc(100dvh - 80px), ${\n    isWideWidget ? WIDGET_EXPANDED_MAX_HEIGHT : WIDGET_TALL_MAX_HEIGHT\n  }px)`;\n  const popoverAnimatedSize = {\n    height: isTallWidget ? widgetHeight : resolvedDefaultWidgetHeight,\n    width: widgetWidth,\n  };\n  const animatedShellSize = {\n    height: isMobileSheet\n      ? \"auto\"\n      : config.openOptions?.compact\n        ? defaultWidgetHeight\n        : variant === \"drawer\"\n          ? \"calc(100vh - 1rem)\"\n          : isTallWidget\n            ? widgetHeight\n            : resolvedDefaultWidgetHeight,\n    width: isMobileSheet\n      ? \"calc(100dvw - 16px)\"\n      : config.openOptions?.compact\n        ? 370\n        : variant === \"drawer\"\n          ? isWideWidget\n            ? 540\n            : 430\n          : variant === \"modal\"\n            ? 640\n            : widgetWidth,\n  };\n\n  useEffect(() => {\n    if (!isOpen) setPreferredWidgetHeight(null);\n  }, [isOpen]);\n\n  useEffect(() => {\n    if (!isOpen || !isMobileSheet) return;\n\n    const previousDocumentOverflow = document.documentElement.style.overflow;\n    const previousDocumentOverscroll = document.documentElement.style.overscrollBehavior;\n    const previousBodyOverflow = document.body.style.overflow;\n    const previousBodyOverscroll = document.body.style.overscrollBehavior;\n\n    document.documentElement.style.overflow = \"hidden\";\n    document.documentElement.style.overscrollBehavior = \"none\";\n    document.body.style.overflow = \"hidden\";\n    document.body.style.overscrollBehavior = \"none\";\n\n    return () => {\n      document.documentElement.style.overflow = previousDocumentOverflow;\n      document.documentElement.style.overscrollBehavior = previousDocumentOverscroll;\n      document.body.style.overflow = previousBodyOverflow;\n      document.body.style.overscrollBehavior = previousBodyOverscroll;\n    };\n  }, [isMobileSheet, isOpen]);\n\n  // Recompute popover position when open, on scroll/resize\n  useEffect(() => {\n    if (variant !== \"popover\" || !isOpen || !anchorElement) return;\n\n    const update = () => {\n      const placement = computePopoverPlacement(\n        anchorElement,\n        widgetWidth,\n        popoverAnimatedSize.height,\n      );\n      setPopoverPlacement(placement);\n      setPopoverStyle(\n        computePopoverStyle(anchorElement, placement, widgetWidth, popoverAnimatedSize.height),\n      );\n    };\n\n    update();\n    window.addEventListener(\"scroll\", update, true);\n    window.addEventListener(\"resize\", update);\n    return () => {\n      window.removeEventListener(\"scroll\", update, true);\n      window.removeEventListener(\"resize\", update);\n    };\n  }, [variant, isOpen, anchorElement, widgetWidth, popoverAnimatedSize.height]);\n\n  // Handle forceOpen configuration changes\n  useEffect(() => {\n    if (config.forceOpen) {\n      setIsWidgetExiting(false);\n      setIsOpen(true);\n    }\n  }, [config.forceOpen]);\n\n  // Listen for programmatic close\n  useEffect(() => {\n    const closeHandler = () => handleClose();\n    window.addEventListener(\"uojs-close-widget\", closeHandler as any);\n    return () => {\n      window.removeEventListener(\"uojs-close-widget\", closeHandler as any);\n    };\n  }, []);\n\n  // Handle escape key to close widget\n  useEffect(() => {\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\" && isOpen) {\n        handleClose();\n      }\n    };\n\n    if (isOpen && (variant === \"floating\" || variant === \"popover\")) {\n      document.addEventListener(\"keydown\", handleEscape);\n    }\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleEscape);\n    };\n  }, [isOpen, variant]);\n\n  // Outside click to close for popover variant\n  useEffect(() => {\n    if (variant !== \"popover\" || !isOpen) return;\n\n    const handleOutsideClick = (e: MouseEvent) => {\n      const target = e.target as Node;\n      if (anchorElement?.contains(target)) return;\n      if (widgetRef.current?.contains(target)) return;\n\n      // Also check inside shadow DOM — the widget renders in a shadow root\n      const path = e.composedPath();\n      for (const el of path) {\n        if (el === widgetRef.current || el === anchorElement) return;\n      }\n\n      handleClose();\n    };\n\n    // Use capture + setTimeout to avoid closing from the same click that opened it\n    const timer = setTimeout(() => {\n      document.addEventListener(\"mousedown\", handleOutsideClick, true);\n    }, 0);\n\n    return () => {\n      clearTimeout(timer);\n      document.removeEventListener(\"mousedown\", handleOutsideClick, true);\n    };\n  }, [variant, isOpen, anchorElement]);\n\n  const handleToggle = () => {\n    if (isOpen) {\n      handleClose();\n      return;\n    }\n\n    setIsWidgetExiting(false);\n    setIsOpen(true);\n  };\n\n  const handleNotificationHandled = useCallback(() => {\n    setOpenedFromNotification(false);\n  }, []);\n\n  const handlePanelHiddenChange = useCallback((hidden: boolean) => {\n    setIsPanelHidden(hidden);\n    setIsWidgetExiting(false);\n    setIsOpen(!hidden);\n  }, []);\n\n  const handleClose = () => {\n    if (isPanelHidden) {\n      setIsOpen(false);\n      return;\n    }\n    if (isMobileSheet) setIsWidgetExiting(true);\n    setIsOpen(false);\n    setOpenedFromNotification(false);\n    if (onClose) {\n      setTimeout(() => {\n        onClose();\n      }, panelAnimationDuration * 1000);\n    }\n  };\n\n  const getPositionClasses = () => {\n    const baseClasses = \"absolute\";\n\n    if (isMobileSheet) {\n      return cn(baseClasses, \"inset-0\");\n    }\n\n    if (variant === \"drawer\") {\n      return cn(baseClasses, \"top-0 right-0\");\n    }\n    if (variant === \"modal\") {\n      return cn(baseClasses, \"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\");\n    }\n\n    switch (widgetPosition) {\n      case \"bottom-right\":\n        return cn(baseClasses, \"bottom-5 right-5\");\n      case \"bottom-left\":\n        return cn(baseClasses, \"bottom-5 left-5\");\n      case \"top-right\":\n        return cn(baseClasses, \"top-5 right-5\");\n      case \"top-left\":\n        return cn(baseClasses, \"top-5 left-5\");\n      default:\n        return cn(baseClasses, \"bottom-5 right-5\");\n    }\n  };\n\n  const popoverTransformOrigin = (() => {\n    switch (popoverPlacement) {\n      case \"bottom\":\n        return \"top left\";\n      case \"top\":\n        return \"bottom left\";\n      case \"right\":\n        return \"top left\";\n      case \"left\":\n        return \"top right\";\n      default:\n        return \"top left\";\n    }\n  })();\n\n  const popoverInitialY = popoverPlacement === \"bottom\" ? -8 : popoverPlacement === \"top\" ? 8 : 0;\n  const popoverInitialX = popoverPlacement === \"right\" ? -8 : popoverPlacement === \"left\" ? 8 : 0;\n\n  if (variant === \"popover\") {\n    return (\n      <div id=\"uojs\" ref={widgetRef} {...editableWidgetEventBoundaryProps}>\n        <div className={cn(\"floating-widget-root z-[2147483647]\", themeMode)}>\n          <AnimatePresence mode=\"wait\">\n            {(isOpen || isPanelHidden) && (\n              <motion.div\n                style={{\n                  ...popoverStyle,\n                  ...(isStandaloneSupportWidget\n                    ? {\n                        boxShadow:\n                          \"0 2px 16px rgba(32, 39, 44, 0.08), 0 1px 4px rgba(32, 39, 44, 0.16), 0 0 0 1px rgba(32, 39, 44, 0.06)\",\n                      }\n                    : {}),\n                  maxHeight: isTallWidget\n                    ? tallWidgetMaxHeight\n                    : `min(calc(100dvh - 80px), ${defaultWidgetHeight}px)`,\n                  maxWidth: \"calc(100dvw - 16px)\",\n                  willChange: \"transform, opacity\",\n                  transformOrigin: popoverTransformOrigin,\n                  zIndex: 2147483647,\n                }}\n                initial={{\n                  ...popoverAnimatedSize,\n                  opacity: 0,\n                  scale: 0.9,\n                  y: popoverInitialY,\n                  x: popoverInitialX,\n                }}\n                animate={\n                  isOpen\n                    ? { ...popoverAnimatedSize, opacity: 1, scale: 1, y: 0, x: 0 }\n                    : {\n                        ...popoverAnimatedSize,\n                        opacity: 0,\n                        scale: 0.95,\n                        y: popoverInitialY / 2,\n                        x: popoverInitialX / 2,\n                      }\n                }\n                exit={{ opacity: 0, scale: 0.95, y: popoverInitialY / 2, x: popoverInitialX / 2 }}\n                transition={{ type: \"tween\", ease: [0.25, 0.46, 0.45, 0.94], duration: 0.2 }}\n                className={cn(\n                  \"floating-widget overflow-hidden bg-white text-md shadow-xl ring-1 ring-black/15 dark:bg-gray-900 dark:shadow-black/70 dark:ring-white/10\",\n                  isStandaloneSupportWidget ? \"rounded-3xl\" : \"rounded-xl\",\n                  !isOpen && \"pointer-events-none\",\n                )}\n                aria-hidden={!isOpen}\n              >\n                <WidgetContent\n                  product={teamData}\n                  _subscriberCode={subscriberCode}\n                  onClose={handleClose}\n                  collections={collections}\n                  loading={loading}\n                  error={error}\n                  onSizeChange={setWidgetSizeMode}\n                  onPreferredHeightChange={setPreferredWidgetHeight}\n                  onPanelHiddenChange={handlePanelHiddenChange}\n                  onElementPickingChange={setIsElementPickingActive}\n                  variant=\"floating\"\n                  panelHeight={popoverAnimatedSize.height}\n                  teamMembers={teamMembers}\n                  openOptions={\n                    openedFromNotification && !openOptions?.tab\n                      ? { ...openOptions, tab: \"updates\" }\n                      : openOptions\n                  }\n                  openedFromNotification={openedFromNotification}\n                  onNotificationHandled={handleNotificationHandled}\n                  themeMode={themeMode}\n                  widgetLocale={widgetLocale}\n                  requireAuthentication={config.requireAuthentication === true}\n                  initialEmail={config.email}\n                  initialName={config.name}\n                  emailHash={config.emailHash}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div id=\"uojs\" {...editableWidgetEventBoundaryProps}>\n      <div\n        className={cn(\n          \"floating-widget-root pointer-events-none fixed inset-0 z-[2147483647]\",\n          themeMode,\n        )}\n      >\n        <div\n          className={cn(\n            getPositionClasses(),\n            isOpen ? \"pointer-events-auto\" : \"pointer-events-none\",\n          )}\n        >\n          {/* Backdrop overlay */}\n          <React.Fragment>\n            {isOpen && !isElementPickingActive && (\n              <motion.div\n                className=\"pointer-events-auto fixed inset-0 -z-10 cursor-pointer bg-black/40 dark:bg-black\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 0.4 }}\n                exit={{ opacity: 0 }}\n                transition={{\n                  type: \"tween\",\n                  ease: variant === \"drawer\" ? [0.4, 0, 0.2, 1] : [0.25, 0.46, 0.45, 0.94],\n                  duration: variant === \"drawer\" ? 0.2 : panelAnimationDuration,\n                }}\n                onClick={handleClose}\n              />\n            )}\n          </React.Fragment>\n\n          {/* Widget content */}\n          <AnimatePresence mode=\"wait\" onExitComplete={() => setIsWidgetExiting(false)}>\n            {(isOpen || isPanelHidden) && (\n              <motion.div\n                style={{\n                  marginTop: isMobileSheet\n                    ? 0\n                    : variant === \"drawer\"\n                      ? \"0.5rem\"\n                      : variant === \"modal\"\n                        ? 0\n                        : \".5rem\",\n                  marginRight: isMobileSheet ? 0 : variant === \"drawer\" ? \"0.5rem\" : \"0\",\n                  ...(isStandaloneSupportWidget && !isMobileSheet\n                    ? {\n                        boxShadow:\n                          \"0 2px 16px rgba(32, 39, 44, 0.08), 0 1px 4px rgba(32, 39, 44, 0.16), 0 0 0 1px rgba(32, 39, 44, 0.06)\",\n                      }\n                    : {}),\n                  maxHeight: isMobileSheet\n                    ? \"calc(100dvh - 16px)\"\n                    : config.openOptions?.compact\n                      ? \"calc(100dvh - 80px)\"\n                      : variant === \"drawer\"\n                        ? \"calc(100vh - 1rem)\"\n                        : isTallWidget\n                          ? tallWidgetMaxHeight\n                          : `min(calc(100dvh - 80px), ${resolvedDefaultWidgetHeight}px)`,\n                  maxWidth: isMobileSheet ? \"calc(100dvw - 16px)\" : \"calc(100dvw - 22.5px)\",\n                  boxSizing: isMobileSheet ? \"border-box\" : undefined,\n                  paddingTop: isMobileSheet ? \"env(safe-area-inset-top)\" : undefined,\n                  paddingRight: isMobileSheet ? \"env(safe-area-inset-right)\" : undefined,\n                  paddingBottom: isMobileSheet ? \"env(safe-area-inset-bottom)\" : undefined,\n                  paddingLeft: isMobileSheet ? \"env(safe-area-inset-left)\" : undefined,\n                  willChange: \"transform, opacity\",\n                  transformOrigin: isMobileSheet\n                    ? \"bottom center\"\n                    : variant === \"drawer\"\n                      ? \"top right\"\n                      : variant === \"modal\"\n                        ? \"center\"\n                        : widgetPosition.includes(\"right\")\n                          ? \"bottom right\"\n                          : \"bottom left\",\n                }}\n                initial={{\n                  ...animatedShellSize,\n                  opacity: 0,\n                  scale: isMobileSheet || variant === \"drawer\" ? 1 : 0.85,\n                  y: isMobileSheet ? 12 : variant === \"drawer\" ? 0 : variant === \"modal\" ? 0 : 10,\n                  x: isMobileSheet ? 0 : variant === \"drawer\" ? \"100%\" : 0,\n                }}\n                animate={\n                  isOpen\n                    ? {\n                        ...animatedShellSize,\n                        opacity: 1,\n                        scale: 1,\n                        y: 0,\n                        x: 0,\n                      }\n                    : {\n                        ...animatedShellSize,\n                        opacity: 0,\n                        scale: isMobileSheet || variant === \"drawer\" ? 1 : 0.9,\n                        y: isMobileSheet ? 12 : variant === \"drawer\" || variant === \"modal\" ? 0 : 8,\n                        x: isMobileSheet ? 0 : variant === \"drawer\" ? \"100%\" : 0,\n                      }\n                }\n                exit={{\n                  opacity: 0,\n                  scale: isMobileSheet || variant === \"drawer\" ? 1 : 0.9,\n                  y: isMobileSheet ? 12 : variant === \"drawer\" ? 0 : variant === \"modal\" ? 0 : 8,\n                  x: isMobileSheet ? 0 : variant === \"drawer\" ? \"100%\" : 0,\n                }}\n                transition={{\n                  type: \"tween\",\n                  ease: isMobileSheet\n                    ? [0.25, 0.46, 0.45, 0.94]\n                    : variant === \"drawer\"\n                      ? [0.4, 0, 0.2, 1]\n                      : variant === \"modal\"\n                        ? [0.25, 0.46, 0.45, 0.94]\n                        : [0.25, 0.46, 0.45, 0.94],\n                  duration: panelAnimationDuration,\n                }}\n                className={cn(\n                  \"floating-widget absolute overflow-hidden bg-white text-md dark:bg-gray-900\",\n                  isMobileSheet\n                    ? \"bottom-2 left-2 right-2 rounded-[22px] shadow-xl ring-1 ring-black/15 dark:shadow-black/70 dark:ring-white/10\"\n                    : cn(\n                        \"shadow-xl ring-1 ring-black/15 dark:shadow-black/70 dark:ring-white/10\",\n                        isStandaloneSupportWidget ? \"rounded-3xl\" : \"rounded-xl\",\n                      ),\n                  isMobileSheet\n                    ? \"\"\n                    : variant === \"drawer\"\n                      ? \"right-0 top-0\"\n                      : variant === \"modal\"\n                        ? \"\"\n                        : cn(\n                            \"bottom-[58px]\",\n                            widgetPosition.includes(\"right\") ? \"right-0\" : \"left-0\",\n                          ),\n                  !isOpen && \"pointer-events-none\",\n                )}\n                aria-hidden={!isOpen}\n              >\n                <WidgetContent\n                  product={teamData}\n                  _subscriberCode={subscriberCode}\n                  onClose={handleClose}\n                  collections={collections}\n                  loading={loading}\n                  error={error}\n                  onSizeChange={setWidgetSizeMode}\n                  onPreferredHeightChange={setPreferredWidgetHeight}\n                  onPanelHiddenChange={handlePanelHiddenChange}\n                  onElementPickingChange={setIsElementPickingActive}\n                  variant={variant === \"modal\" ? \"floating\" : variant}\n                  panelHeight={\n                    typeof animatedShellSize.height === \"number\"\n                      ? animatedShellSize.height\n                      : undefined\n                  }\n                  teamMembers={teamMembers}\n                  openOptions={\n                    openedFromNotification && !openOptions?.tab\n                      ? { ...openOptions, tab: \"updates\" }\n                      : openOptions\n                  }\n                  openedFromNotification={openedFromNotification}\n                  onNotificationHandled={handleNotificationHandled}\n                  themeMode={themeMode}\n                  isMobileSheet={isMobileSheet}\n                  widgetLocale={widgetLocale}\n                  requireAuthentication={config.requireAuthentication === true}\n                  initialEmail={config.email}\n                  initialName={config.name}\n                  emailHash={config.emailHash}\n                />\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          {/* Notification button - only show for floating variant */}\n          {variant === \"floating\" && (\n            <div\n              className={cn(\n                \"widget-launcher-container pointer-events-auto absolute bottom-0\",\n                widgetPosition.includes(\"right\") ? \"right-0\" : \"left-0\",\n                isMobileViewport && (isOpen || isWidgetExiting || isExternalDrawerOpen) && \"hidden\",\n              )}\n            >\n              <NotificationButton\n                isOpen={isOpen}\n                badgeCount={0}\n                onClick={handleToggle}\n                themeMode={themeMode}\n                shimmer={rageDetected}\n                launcherText={launcherText}\n                launcherIconSvg={launcherIconSvg}\n                launcherOpenIconSvg={launcherOpenIconSvg}\n                launcherBackgroundColor={launcherBackgroundColor}\n                launcherIconColor={launcherIconColor}\n              />\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default FloatingWidget;\n","// ABOUTME: Widget that anchors to a mount selector element with a notification dot.\n// ABOUTME: Opens a popover-style floating widget on click, positioned relative to the anchor.\n\nimport { useEffect, useRef, useState } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { markUserorbitOwnedHost } from \"../../lib/domOwnership\";\nimport {\n  addCustomCssToShadowDom,\n  addCustomThemeToShadowDom,\n  addStylesToShadowDom,\n} from \"../../lib/styles\";\nimport NotificationButton from \"../drawer/notification-button\";\nimport FloatingWidget from \"../floating-widget\";\n\ntype Props = any;\n\nconst AnchoredWidget = (props: Props) => {\n  const { config, product, attributes, parent } = props;\n  const [active, setActive] = useState(false);\n  const handleClick = () => {\n    setActive(!active);\n  };\n\n  useEffect(() => {\n    const openHandler = () => setActive(true);\n    const closeHandler = () => setActive(false);\n    window.addEventListener(\"uojs-open-anchored\", openHandler as any);\n    window.addEventListener(\"uojs-close-widget\", closeHandler as any);\n    return () => {\n      window.removeEventListener(\"uojs-open-anchored\", openHandler as any);\n      window.removeEventListener(\"uojs-close-widget\", closeHandler as any);\n    };\n  }, []);\n\n  return (\n    <>\n      <AnchoredPortalWidget\n        subscriberCode={attributes?.code}\n        config={config}\n        active={active}\n        team={product}\n        anchorElement={parent}\n        close={() => setActive(false)}\n      />\n      <NotificationButton\n        active={true}\n        onClick={handleClick}\n        dotPosition={config?.dotPosition}\n        hideDot={config?.hideNotificationDot}\n      />\n    </>\n  );\n};\n\nexport default AnchoredWidget;\n\nconst AnchoredPortalWidget = (props: any): any => {\n  const { active, close, config, team, subscriberCode, anchorElement } = props;\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const shadowRootRef = useRef<ShadowRoot | null>(null);\n\n  useEffect(() => {\n    const container = markUserorbitOwnedHost(document.createElement(\"div\"));\n    container.id = \"uojs-anchored-shadow-container\";\n    document.body.appendChild(container);\n    containerRef.current = container;\n\n    const shadowRoot = container.attachShadow({ mode: \"open\" });\n    shadowRootRef.current = shadowRoot;\n\n    addStylesToShadowDom(shadowRoot);\n    addCustomThemeToShadowDom({ styling: team?.theme, shadowRoot });\n    addCustomCssToShadowDom({ css: team?.configuration?.widget?.customCss, shadowRoot });\n\n    return () => {\n      if (container?.parentNode) {\n        container.parentNode.removeChild(container);\n        containerRef.current = null;\n        shadowRootRef.current = null;\n      }\n    };\n  }, [team?.theme]);\n\n  if (!shadowRootRef.current) {\n    return null;\n  }\n\n  return ReactDOM.createPortal(\n    <div id=\"uojs\">\n      {active && (\n        <FloatingWidget\n          product={team}\n          attributes={{ code: subscriberCode }}\n          config={{ ...config, isOpen: true }}\n          variant=\"popover\"\n          anchorElement={anchorElement}\n          onClose={close}\n        />\n      )}\n    </div>,\n    shadowRootRef.current,\n  );\n};\n","type AttributeValue = string | number | boolean | null | undefined;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n  Object.prototype.toString.call(value) === \"[object Object]\";\n\nconst hasOwn = (record: Record<string, unknown>, key: string) =>\n  Object.prototype.hasOwnProperty.call(record, key);\n\nconst getValueByPath = (record: Record<string, unknown>, path: string[]): unknown => {\n  let current: unknown = record;\n  for (const segment of path) {\n    if (!isRecord(current) || !hasOwn(current, segment)) {\n      return undefined;\n    }\n    current = current[segment];\n  }\n  return current;\n};\n\nconst getCandidateKeys = (rawKey: string) => {\n  const key = rawKey.trim();\n  const candidates = [key];\n  if (key.startsWith(\"user.\")) candidates.push(key.slice(5));\n  if (key.startsWith(\"subscriber.\")) candidates.push(key.slice(11));\n  if (key.startsWith(\"attributes.\")) candidates.push(key.slice(11));\n  return candidates;\n};\n\nconst parseToken = (rawToken: string) => {\n  const token = rawToken.trim();\n  if (!token) return { key: \"\", fallback: undefined as string | undefined };\n  const pipeIndex = token.indexOf(\"|\");\n  const fallbackIndex = pipeIndex !== -1 ? pipeIndex : token.indexOf(\":\");\n  if (fallbackIndex === -1) {\n    return { key: token, fallback: undefined };\n  }\n  return {\n    key: token.slice(0, fallbackIndex).trim(),\n    fallback: token.slice(fallbackIndex + 1).trim(),\n  };\n};\n\nconst resolveAttributeValue = (\n  key: string,\n  attributes?: Record<string, unknown> | null,\n): AttributeValue => {\n  if (!key || !isRecord(attributes)) return undefined;\n\n  const attributeMap = isRecord(attributes.attributes) ? attributes.attributes : undefined;\n  const sources = attributeMap ? [attributeMap, attributes] : [attributes];\n  const candidates = getCandidateKeys(key);\n\n  for (const candidate of candidates) {\n    for (const source of sources) {\n      if (hasOwn(source, candidate)) {\n        const value = source[candidate];\n        if (value !== null && value !== undefined) {\n          return value as AttributeValue;\n        }\n      }\n      if (candidate.includes(\".\")) {\n        const value = getValueByPath(source, candidate.split(\".\").filter(Boolean));\n        if (value !== undefined && value !== null) {\n          return value as AttributeValue;\n        }\n      }\n    }\n  }\n\n  return undefined;\n};\n\nconst resolveVariableSpans = (content: string, attributes?: Record<string, unknown> | null) => {\n  if (typeof DOMParser === \"undefined\") return content;\n  try {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(content, \"text/html\");\n    const nodes = Array.from(\n      doc.querySelectorAll('span[data-type=\"subscriber-variable\"][data-name]'),\n    );\n    if (!nodes.length) return content;\n    nodes.forEach((node) => {\n      const name = node.getAttribute(\"data-name\") || \"\";\n      const fallback = node.getAttribute(\"data-fallback\");\n      const value = resolveAttributeValue(name, attributes);\n      if (value === undefined || value === null) {\n        if (fallback && fallback.length > 0) {\n          node.replaceWith(doc.createTextNode(fallback));\n          return;\n        }\n        node.remove();\n        return;\n      }\n      node.replaceWith(doc.createTextNode(String(value)));\n    });\n    return doc.body.innerHTML;\n  } catch {\n    return content;\n  }\n};\n\nexport const resolveSubscriberProperties = (\n  content: string | null | undefined,\n  attributes?: Record<string, unknown> | null,\n) => {\n  if (typeof content !== \"string\") return \"\";\n  const resolvedHtml = resolveVariableSpans(content, attributes);\n  return resolvedHtml.replace(/\\{\\{([^}]+)\\}\\}/g, (_match, rawToken: string) => {\n    const { key, fallback } = parseToken(rawToken);\n    if (!key) return \"\";\n    const value = resolveAttributeValue(key, attributes);\n    if (value === undefined || value === null) return fallback ?? \"\";\n    return String(value);\n  });\n};\n\nexport const resolveSubscriberPropertiesDeep = (\n  value: unknown,\n  attributes?: Record<string, unknown> | null,\n): unknown => {\n  if (typeof value === \"string\") {\n    return resolveSubscriberProperties(value, attributes);\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => resolveSubscriberPropertiesDeep(item, attributes));\n  }\n  if (isPlainObject(value)) {\n    return Object.fromEntries(\n      Object.entries(value).map(([key, item]) => [\n        key,\n        resolveSubscriberPropertiesDeep(item, attributes),\n      ]),\n    );\n  }\n  return value;\n};\n","// packages/react/slot/src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n  const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n  const Slot2 = React.forwardRef((props, forwardedRef) => {\n    const { children, ...slotProps } = props;\n    const childrenArray = React.Children.toArray(children);\n    const slottable = childrenArray.find(isSlottable);\n    if (slottable) {\n      const newElement = slottable.props.children;\n      const newChildren = childrenArray.map((child) => {\n        if (child === slottable) {\n          if (React.Children.count(newElement) > 1) return React.Children.only(null);\n          return React.isValidElement(newElement) ? newElement.props.children : null;\n        } else {\n          return child;\n        }\n      });\n      return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n    }\n    return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n  });\n  Slot2.displayName = `${ownerName}.Slot`;\n  return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n  const SlotClone = React.forwardRef((props, forwardedRef) => {\n    const { children, ...slotProps } = props;\n    if (React.isValidElement(children)) {\n      const childrenRef = getElementRef(children);\n      const props2 = mergeProps(slotProps, children.props);\n      if (children.type !== React.Fragment) {\n        props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n      }\n      return React.cloneElement(children, props2);\n    }\n    return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n  });\n  SlotClone.displayName = `${ownerName}.SlotClone`;\n  return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n  const Slottable2 = ({ children }) => {\n    return /* @__PURE__ */ jsx(Fragment2, { children });\n  };\n  Slottable2.displayName = `${ownerName}.Slottable`;\n  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n  return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n  return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n  const overrideProps = { ...childProps };\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args) => {\n          childPropValue(...args);\n          slotPropValue(...args);\n        };\n      } else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    } else if (propName === \"style\") {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === \"className\") {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n    }\n  }\n  return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nexport {\n  Slot as Root,\n  Slot,\n  Slottable,\n  createSlot,\n  createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-solid cursor-pointer border-input hover:underline-none\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-brand text-white hover:text-white/90 border-0\",\n        destructive:\n          \"bg-background text-destructive border-destructive hover:text-white hover:bg-destructive/90\",\n        outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n        secondary: \"bg-white border border-input text-secondary-foreground hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-primary\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2\",\n        sm: \"h-7 rounded-md px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : \"button\";\n    return (\n      <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n    );\n  },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","export async function completeBeforeNavigation(\n  complete: () => Promise<unknown>,\n  navigate: () => void,\n) {\n  try {\n    await complete();\n  } finally {\n    // Preserve the configured navigation even if the completion request fails.\n    navigate();\n  }\n}\n\nexport function trackChecklistCompletionOnce(\n  reference: { current: boolean },\n  track: () => unknown,\n) {\n  if (reference.current) return;\n  reference.current = true;\n  track();\n}\n","import { getUserorbit } from \"../../../lib/analytics\";\nimport { Dispatch, SetStateAction, useCallback, useEffect } from \"react\";\nimport { ChecklistSubscriberInterface, TaskType } from \"../../../types\";\nimport { Config } from \"../../../lib/config\";\nimport { TourProps, renderTour } from \"../../../modules/portal\";\nimport request from \"../../../utils/api\";\nimport { resolveSubscriberProperties } from \"../../../utils/subscriber-properties\";\nimport { Button } from \"../../ui/button\";\nimport { TOGGLESTATE } from \"../checklist-preview\";\nimport { completeBeforeNavigation } from \"../completion-lifecycle\";\nimport { executeScript } from \"./../../../lib/utils\";\n\nconst config = Config.getInstance();\n\ninterface ChecklistDesign {\n  nextButtonColor?: string;\n  nextButtonTextColor?: string;\n  nextButtonBorderColor?: string;\n  nextButtonHoverColor?: string;\n  textColor?: string;\n}\n\nconst ChecklistAction = ({\n  step,\n  brandColor,\n  design,\n  account,\n  checklist,\n  completedTasks,\n  setcheckList,\n  idx,\n  setIsOpen,\n  onCompleted,\n  ...rest\n}: {\n  step: TaskType;\n  brandColor: string;\n  design?: ChecklistDesign;\n  account?: string;\n  checklist: ChecklistSubscriberInterface;\n  setcheckList: Dispatch<SetStateAction<ChecklistSubscriberInterface>>;\n  completedTasks: string[];\n  idx: number;\n  setIsOpen: Dispatch<SetStateAction<string>>;\n  onCompleted?: (analytics: ReturnType<typeof getUserorbit>) => void;\n} & Omit<TourProps, \"tour\" | \"account\">) => {\n  const handleStepAction = useCallback(async () => {\n    switch (step?.type) {\n      case \"script\":\n        return executeScript({ script: step?.configuration?.script ?? \"\" });\n      case \"tour\": {\n        if (!step?.configuration?.tourId) return;\n        const tour = await request(`public/tours.info?id=${step?.configuration?.tourId}`, {\n          id: step?.configuration?.tourId,\n          account,\n          token: rest.attributes?.code,\n        });\n        if (!tour?.ok) return;\n        return renderTour({\n          ...rest,\n          tour: tour?.data,\n          account: account ?? \"\",\n          onTourComplete: () => {\n            markStepAsCompleted();\n          },\n        });\n      }\n    }\n  }, [step]);\n\n  useEffect(() => {\n    document.addEventListener(\"checklist_task_triggers\", (data: Event) => {\n      const customEvent = data as CustomEvent;\n      if (customEvent.detail?.task.id === step.id) {\n        markStepAsCompleted();\n      }\n    });\n  }, []);\n\n  const markStepAsCompleted = async () => {\n    if (completedTasks.includes(step.id)) return;\n    const updatedCompletedTasks = [...completedTasks, step.id];\n    const analytics = getUserorbit();\n    const data = await request(\"public/checklist-subscribers.update\", {\n      token: rest.attributes.code,\n      account: account,\n      checklistId: checklist.id,\n      completedTasks: JSON.stringify([...new Set(updatedCompletedTasks)]),\n      isLastTask: checklist?.tasks?.length == updatedCompletedTasks?.length,\n      browserLifecycleEvents:\n        analytics && onCompleted && checklist?.tasks?.length == updatedCompletedTasks?.length\n          ? [\"$uo_checklist_completed\"]\n          : undefined,\n    });\n\n    if (data.ok) {\n      if (data.data.state === \"CO\" && analytics && onCompleted) {\n        try {\n          onCompleted(analytics);\n        } catch {\n          console.error(\"Failed to track checklist completion\");\n        }\n      }\n      config.update({\n        ...config.get(),\n        personState: {\n          ...config.get().personState,\n          data: {\n            ...config.get().personState.data,\n            checklists: config\n              .get()\n              .personState.data.checklists.map((checklist: any) =>\n                checklist.id === data.data.checklistId\n                  ? { ...checklist, checklistSubscriber: data.data }\n                  : checklist,\n              ),\n          },\n        },\n      });\n\n      const updatedChecklist: ChecklistSubscriberInterface = {\n        ...checklist,\n        checklistSubscriber: {\n          ...checklist.checklistSubscriber,\n          ...data.data,\n          completedTasks: JSON.stringify([...new Set(updatedCompletedTasks)]),\n        },\n      };\n      setcheckList(updatedChecklist);\n    } else {\n      console.error(\"Error when marking as completed\");\n    }\n  };\n\n  const getPrimaryButtonText = () => {\n    const baseLabel = step.configuration?.progressButtonText\n      ? step.configuration.progressButtonText\n      : step?.type === \"tour\"\n        ? \"Let's do it\"\n        : step?.type === \"page\"\n          ? \"Go to page\"\n          : step?.type === \"script\"\n            ? \"Run\"\n            : \"Let's do it\";\n    return resolveSubscriberProperties(baseLabel, rest.attributes);\n  };\n\n  const handlePrimaryAction = async () => {\n    switch (step?.type) {\n      case \"tour\":\n        if (!step?.configuration?.resolveManually) markStepAsCompleted();\n        setIsOpen(TOGGLESTATE.CLOSED);\n        handleStepAction();\n        break;\n      case \"page\": {\n        const url = step?.configuration?.redirectionURL;\n        // Open synchronously to retain browser user activation for new tabs.\n        const opened =\n          url && step?.configuration?.newWindow ? window.open(\"about:blank\", \"_blank\") : null;\n        await completeBeforeNavigation(markStepAsCompleted, () => {\n          if (!url) return;\n          if (step?.configuration?.newWindow) {\n            if (opened) opened.location.href = url;\n          } else {\n            window.location.href = url;\n          }\n        });\n        break;\n      }\n      case \"script\":\n        handleStepAction();\n        setIsOpen(TOGGLESTATE.CLOSED);\n        markStepAsCompleted();\n        break;\n      default:\n        markStepAsCompleted();\n    }\n  };\n\n  const buttonStyle = {\n    backgroundColor: design?.nextButtonColor || brandColor,\n    borderColor: design?.nextButtonBorderColor || brandColor,\n    color: design?.nextButtonTextColor || \"#FFF\",\n  };\n\n  return (\n    <div className=\"flex items-center gap-3\" id={`userorbit-cta-${idx}`}>\n      <Button\n        style={buttonStyle}\n        onClick={handlePrimaryAction}\n        size=\"sm\"\n        className=\"uo-checklist-task__primary-btn h-9 rounded-lg px-4 text-sm font-medium\"\n      >\n        {getPrimaryButtonText()}\n      </Button>\n      <button\n        type=\"button\"\n        onClick={markStepAsCompleted}\n        className=\"uo-checklist-task__skip-btn cursor-pointer border-0 bg-transparent text-sm font-medium text-[var(--text-color)] opacity-70 hover:opacity-100\"\n      >\n        Skip\n      </button>\n    </div>\n  );\n};\n\nexport default ChecklistAction;\n","import { IconCircleCheckFilled } from \"@tabler/icons-react\";\nimport { useResolvedThemeMode } from \"@userorbit/ui/src/shared/hooks/use-resolved-theme-mode\";\nimport { resolveModeAwareTheme, type ThemeModeSetting } from \"@userorbit/ui/src/shared/lib/theme\";\nimport { motion } from \"framer-motion\";\nimport { CheckCircle, Circle, ChevronDown } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { isPoweredByRequiredPlan } from \"../floating-widget/branding\";\nimport { getUserorbit } from \"../../lib/analytics\";\nimport { Config } from \"../../lib/config\";\nimport { clearActiveChecklist, unregisterActiveChecklist } from \"../../lib/widget\";\nimport { ChecklistPreviewProps, ChecklistSubscriberInterface } from \"../../types\";\nimport request from \"../../utils/api\";\nimport { resolveSubscriberProperties } from \"../../utils/subscriber-properties\";\nimport { Button } from \"../ui/button\";\nimport ChecklistAction from \"./actions\";\nimport { trackChecklistCompletionOnce } from \"./completion-lifecycle\";\n\nconst config = Config.getInstance();\n\nexport const TOGGLESTATE = {\n  OPEN: \"open\",\n  CLOSED: \"closed\",\n};\n\nexport const LAYOUTSTATE = {\n  HORIZONTAL: \"horizontal\",\n  VERTICAL: \"vertical\",\n};\n\nexport default function ChecklistPreview({\n  checklist,\n  activeTask,\n  setActiveTask,\n  account,\n  onShown,\n  onRequestClose,\n  ...rest\n}: ChecklistPreviewProps & {\n  onShown?: () => void | Promise<boolean>;\n  onRequestClose?: (reason: string) => void;\n}) {\n  const resolveText = (value?: string | null) =>\n    typeof value === \"string\" ? resolveSubscriberProperties(value, rest.attributes) : value;\n  const toggleTask = (idx: number) => {\n    setActiveTask?.(idx);\n  };\n\n  const { initialState = TOGGLESTATE.OPEN, layout = LAYOUTSTATE.VERTICAL } =\n    checklist.configuration?.design || {};\n  const [isOpen, setIsOpen] = useState(initialState || TOGGLESTATE.OPEN);\n  const [isDismissed, setisDismissed] = useState(false);\n  const [themeSetting, setThemeSetting] = useState<ThemeModeSetting>(\n    config.get()?.theme || config.get()?.widget?.theme || \"light\",\n  );\n  const [checkList, setCheckList] = useState<ChecklistSubscriberInterface>({\n    ...checklist,\n  });\n  const resolvedThemeMode = useResolvedThemeMode(themeSetting);\n  const design = resolveModeAwareTheme(\n    checklist.configuration?.design,\n    resolvedThemeMode,\n  ) as NonNullable<ChecklistPreviewProps[\"checklist\"][\"configuration\"]>[\"design\"];\n  const completedTasks: string[] = JSON.parse(\n    checkList?.checklistSubscriber?.completedTasks || \"[]\",\n  );\n  const {\n    brandColor = \"#3912e2\",\n    widgetPlacement = \"bottom-right\",\n    embedSelector,\n    embedToggle = true,\n    allTasksOpen = false,\n    stickyMode = false,\n    compactMode = false,\n  } = design || {};\n  const showPoweredBy = isPoweredByRequiredPlan(rest.product?.plan);\n\n  const themeStyle: Record<string, string> = {\n    \"--unh-brand\": brandColor,\n    \"--background-color\": design?.backgroundColor || \"#FFF\",\n    \"--text-color\": design?.textColor || \"#111\",\n    \"--color-primary\": brandColor,\n    \"--border-color\": design?.borderColor || \"#e8e8e8\",\n    \"--border-radius\": `${design?.borderRadius || 12}px`,\n    \"--box-shadow\":\n      design?.boxShadow ||\n      \"0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1)\",\n    \"--next-button-bg-color\": design?.nextButtonColor || brandColor,\n    \"--next-button-text-color\": design?.nextButtonTextColor || \"#FFF\",\n    \"--next-button-hover-color\": design?.nextButtonHoverColor || \"#281386\",\n    \"--next-button-border-color\": design?.nextButtonBorderColor || brandColor,\n    \"--progress-bg-color\": design?.progressBgColor || \"#e5e5e5\",\n    \"--progress-color\": design?.progressColor || brandColor,\n  };\n\n  const widgetWidth = design?.width ? `${design.width}px` : \"340px\";\n  const embedded = embedSelector !== undefined;\n  const totalTasks = checkList.tasks?.length || 0;\n  const canToggle = layout === LAYOUTSTATE.VERTICAL && embedToggle;\n\n  const handleHeaderKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === \"Enter\" || e.key === \" \") {\n      e.preventDefault();\n      if (!canToggle) return;\n      toggleState();\n    }\n  };\n\n  useEffect(() => {\n    if (completedTasks?.length !== totalTasks) {\n      const pendingTaskIdx = checkList.tasks?.findIndex(\n        (task) => !completedTasks.includes(task.id),\n      );\n      setActiveTask?.(pendingTaskIdx);\n    }\n  }, [checkList]);\n\n  useEffect(() => {\n    setIsOpen(checklist.configuration?.design?.initialState || TOGGLESTATE.OPEN);\n  }, [checklist.configuration?.design?.initialState]);\n\n  useEffect(() => {\n    const handler = (event: Event) => {\n      const detail = (event as CustomEvent).detail;\n      if (detail?.theme) setThemeSetting(detail.theme);\n    };\n\n    window.addEventListener(\"uojs-config-update\", handler);\n    return () => window.removeEventListener(\"uojs-config-update\", handler);\n  }, []);\n\n  const hasTrackedViewRef = useRef(false);\n  const hasTrackedCompletionRef = useRef(false);\n  const trackCompletion = (analytics = getUserorbit()) => {\n    trackChecklistCompletionOnce(hasTrackedCompletionRef, () => {\n      analytics?.track(\"$uo_checklist_completed\", {\n        checklist_id: checklist.id,\n        checklist_title: checklist.title,\n      });\n    });\n  };\n\n  useEffect(() => {\n    if (!hasTrackedViewRef.current) {\n      hasTrackedViewRef.current = true;\n      void onShown?.();\n      getUserorbit()?.track(\"$uo_checklist_view\", {\n        checklist_id: checklist.id,\n        checklist_name: checklist.label,\n      });\n    }\n  }, [checklist.id, onShown]);\n\n  useEffect(() => {\n    if (isDismissed) onRequestClose?.(\"closed\");\n  }, [isDismissed, onRequestClose]);\n\n  useEffect(() => {\n    if (checkList?.checklistSubscriber?.state === \"CO\") {\n      trackCompletion();\n      if (!checkList?.configuration?.design?.keepChecklistAlive) {\n        unregisterActiveChecklist(checklist.id);\n      }\n    }\n  }, [checkList?.checklistSubscriber?.state, checklist.id]);\n\n  const toggleState = () => {\n    setIsOpen((prevState) =>\n      prevState === TOGGLESTATE.OPEN ? TOGGLESTATE.CLOSED : TOGGLESTATE.OPEN,\n    );\n  };\n\n  const dismissChecklist = async () => {\n    getUserorbit()?.track(\"$uo_checklist_dismissed\", { checklist_id: checkList.id });\n\n    const data = await request(\"public/checklist-subscribers.update\", {\n      token: rest.attributes.code,\n      account: account,\n      checklistId: checkList.id,\n      completedTasks: JSON.stringify(completedTasks),\n      isDismissed: true,\n    });\n\n    if (data.ok) {\n      config.update({\n        ...config.get(),\n        personState: {\n          ...config.get().personState,\n          data: {\n            ...config.get().personState.data,\n            checklists: config\n              .get()\n              .personState.data.checklists.map((cl: any) =>\n                cl.id === data.data.checklistId ? { ...cl, checklistSubscriber: data.data } : cl,\n              ),\n          },\n        },\n      });\n      setisDismissed(true);\n      clearActiveChecklist(checkList.id);\n    }\n  };\n\n  return (\n    <>\n      {!isDismissed && (\n        <div style={themeStyle}>\n          <motion.div\n            animate={{\n              opacity: 1,\n              borderRadius:\n                isOpen === TOGGLESTATE.OPEN\n                  ? \"var(--border-radius)\"\n                  : stickyMode && isOpen === TOGGLESTATE.CLOSED\n                    ? \"var(--border-radius) var(--border-radius) 0 0\"\n                    : \"var(--border-radius)\",\n            }}\n            transition={{\n              opacity: { duration: 0.2 },\n              borderRadius: { duration: 0.3, ease: \"easeInOut\" },\n            }}\n            style={{\n              width: embedded ? \"100%\" : widgetWidth,\n              maxWidth: embedded ? \"100%\" : \"380px\",\n            }}\n            className={`${embedded ? \"relative h-full min-w-[210px]\" : stickyMode && isOpen === TOGGLESTATE.CLOSED ? \"fixed bottom-0\" : \"fixed bottom-6\"} ${!embedded && layout === LAYOUTSTATE.HORIZONTAL ? \"left-0 right-0 w-full\" : !embedded ? `${widgetPlacement === \"bottom-left\" ? \"left-5\" : \"right-5\"}` : \"\"} z-[2147483646] min-w-[240px] overflow-hidden bg-[var(--background-color)] text-sm shadow-lg`}\n          >\n            {design?.customCss && <style>{` ${design.customCss} `}</style>}\n\n            {checkList?.checklistSubscriber?.state === \"CO\" &&\n            !checkList?.configuration?.design?.keepChecklistAlive ? (\n              <div className=\"flex min-h-[400px] min-w-[300px] items-center justify-center bg-[var(--background-color)] px-4\">\n                <div className=\"my-12 text-center\">\n                  <CheckCircle className=\"mb-2 h-10 w-10 stroke-2 text-green-500\" />\n                  <div className=\"flex items-center gap-2\">\n                    <h1 className=\"m-0 text-xl font-semibold text-[var(--text-color)]\">\n                      Congrats! You're done\n                      <span role=\"img\" aria-label=\"celebration\">\n                        &nbsp;🎉\n                      </span>\n                    </h1>\n                  </div>\n                  <p className=\"mx-auto mb-6 mt-1 max-w-md text-base text-[var(--text-color)] opacity-80\">\n                    You're all set - start exploring!\n                  </p>\n                  <div className=\"mx-auto my-2 block\">\n                    <Button\n                      onClick={() => {\n                        setisDismissed(true);\n                      }}\n                    >\n                      Dismiss Checklist\n                    </Button>\n                  </div>\n                </div>\n              </div>\n            ) : (\n              <div>\n                <div\n                  className={`${embedded ? \"px-4 py-3\" : \"px-5 py-3\"} cursor-pointer`}\n                  style={{ backgroundColor: brandColor }}\n                  onClick={() => canToggle && toggleState()}\n                >\n                  <div\n                    className={`flex items-start focus-visible:outline-none w-full ${canToggle ? \"cursor-pointer\" : \"\"}`}\n                    onKeyDown={handleHeaderKeyDown}\n                    tabIndex={canToggle ? 0 : -1}\n                    role={canToggle ? \"button\" : undefined}\n                  >\n                    {isOpen === TOGGLESTATE.OPEN ? (\n                      <div className=\"flex-1\">\n                        <div className=\"flex items-center gap-1 justify-between\">\n                          <h3 className=\"m-0 text-base font-medium text-white\">\n                            {resolveText(checkList.label)}\n                          </h3>\n                          {layout === LAYOUTSTATE.VERTICAL && canToggle && (\n                            <ChevronDown\n                              className={`size-4 text-white/70 transition-transform ${isOpen === TOGGLESTATE.CLOSED ? \"rotate-180\" : \"\"}`}\n                            />\n                          )}\n                        </div>\n                        {!embedded && checkList.subheader && (\n                          <p className=\"m-0 text-[12px] text-white/70\">\n                            {resolveText(checkList.subheader)}\n                          </p>\n                        )}\n                      </div>\n                    ) : (\n                      <div className=\"flex flex-col w-full\">\n                        <div className=\"flex items-center gap-2 flex-1 justify-between\">\n                          <h3 className=\"m-0 text-sm font-semibold text-white\">\n                            {resolveText(checkList.label)}\n                          </h3>\n                          {layout === LAYOUTSTATE.VERTICAL && canToggle && (\n                            <ChevronDown className=\"size-4 rotate-180 text-white/70 transition-transform\" />\n                          )}\n                        </div>\n                        {!compactMode && !isOpen && (\n                          <span className=\"text-[12px] text-white/60\">\n                            {Math.round((completedTasks?.length / totalTasks) * 100)}% complete\n                          </span>\n                        )}\n                      </div>\n                    )}\n                  </div>\n                </div>\n                <motion.div\n                  initial={{ height: 0, filter: \"blur(10px)\" }}\n                  exit={{ height: 0, filter: \"blur(10px)\" }}\n                  animate={{\n                    height:\n                      layout === LAYOUTSTATE.HORIZONTAL || isOpen === TOGGLESTATE.OPEN ? \"auto\" : 0,\n                    filter:\n                      layout === LAYOUTSTATE.HORIZONTAL || isOpen === TOGGLESTATE.OPEN\n                        ? \"blur(0px)\"\n                        : \"blur(10px)\",\n                  }}\n                  transition={{\n                    height: { duration: 0.3, ease: \"easeInOut\" },\n                    filter: { duration: 0.2, ease: \"easeInOut\" },\n                  }}\n                  className=\"overflow-hidden\"\n                >\n                  <div\n                    className={`${embedded ? \"relative flex h-[calc(var(--parent-height)-104px)] flex-col overflow-auto\" : \"\"}`}\n                  >\n                    <div className={embedded ? \"px-4 py-3\" : \"py-2\"}>\n                      <div className=\"flex flex-col border-solid border-b border-[var(--border-color)] pb-2 px-3\">\n                        {checkList.configuration?.design?.showAuthor &&\n                          checklist.creator?.avatarUrl && (\n                            <div className=\"mb-3 flex items-center gap-3\">\n                              <img\n                                src={checklist.creator?.avatarUrl}\n                                alt=\"Profile\"\n                                className=\"size-6 rounded-full object-cover\"\n                              />\n                              <span className=\"text-sm font-medium text-[var(--text-color)] opacity-70\">\n                                {checklist.creator?.name}\n                              </span>\n                            </div>\n                          )}\n\n                        {checkList.configuration?.design?.showProgress && (\n                          <div className=\"flex items-center gap-2\">\n                            <span className=\"text-sm font-medium text-[var(--text-color)] opacity-70\">\n                              {completedTasks?.length}/{totalTasks}\n                            </span>\n                            <div className=\"flex h-2 flex-1 overflow-hidden rounded-full bg-[var(--progress-bg-color)]\">\n                              <div\n                                className=\"h-full rounded-full transition-all duration-300\"\n                                style={{\n                                  width: `${(completedTasks?.length / totalTasks) * 100}%`,\n                                  backgroundColor: \"var(--progress-color)\",\n                                }}\n                              />\n                            </div>\n                          </div>\n                        )}\n                      </div>\n\n                      <div\n                        className={`${embedded ? \"flex-1 overflow-auto\" : \"overflow-auto\"} ${\n                          layout === LAYOUTSTATE.HORIZONTAL\n                            ? \"flex max-h-[200px] gap-3\"\n                            : embedded\n                              ? \"\"\n                              : \"max-h-[340px]\"\n                        }`}\n                      >\n                        {checkList?.tasks?.map((step, idx) => {\n                          const isCompleted = completedTasks.includes(step.id);\n                          const isActive = idx === activeTask;\n                          const isLastTask = idx === (checkList?.tasks?.length || 0) - 1;\n\n                          return (\n                            <div\n                              key={`checkList-task-${idx}`}\n                              className={`uo-checklist-task ${isCompleted ? \"uo-checklist-task--completed\" : \"\"} ${isActive ? \"uo-checklist-task--active\" : \"\"} ${layout === LAYOUTSTATE.HORIZONTAL ? \"w-[200px] flex-shrink-0 rounded-lg border border-[var(--border-color)] p-3\" : \"px-3\"} ${layout !== LAYOUTSTATE.HORIZONTAL && !isLastTask ? \"border-0 border-b border-solid border-[var(--border-color)]\" : \"\"}`}\n                            >\n                              <div\n                                className={`flex items-start gap-3 pt-3 pb-2 ${!allTasksOpen ? \"cursor-pointer\" : \"\"}`}\n                                onClick={() => {\n                                  if (\n                                    layout !== LAYOUTSTATE.HORIZONTAL &&\n                                    !allTasksOpen\n                                    // !compactMode\n                                  ) {\n                                    toggleTask(idx);\n                                  }\n                                }}\n                              >\n                                {!compactMode && (\n                                  <div className=\"uo-checklist-task__icon mt-0.5 flex-shrink-0\">\n                                    {isCompleted ? (\n                                      <IconCircleCheckFilled\n                                        style={{ color: brandColor }}\n                                        size={22}\n                                      />\n                                    ) : (\n                                      <Circle\n                                        size={22}\n                                        className=\"text-[var(--border-color)]\"\n                                        strokeWidth={1.5}\n                                      />\n                                    )}\n                                  </div>\n                                )}\n                                <div className=\"flex-1 min-w-0\">\n                                  <span className=\"uo-checklist-task__title block text-[14px] mt-0.5 font-semibold text-[var(--text-color)]\">\n                                    {resolveText(step.title)}\n                                  </span>\n                                  {(layout === LAYOUTSTATE.HORIZONTAL ||\n                                    allTasksOpen ||\n                                    isActive) &&\n                                    step.subheader && (\n                                      <p className=\"uo-checklist-task__description m-0 mt-0 text-[12px] text-[var(--text-color)] opacity-70\">\n                                        {resolveText(step.subheader)}\n                                      </p>\n                                    )}\n                                  {(layout === LAYOUTSTATE.HORIZONTAL ||\n                                    allTasksOpen ||\n                                    isActive) && (\n                                    <div className=\"uo-checklist-task__actions mt-3\">\n                                      <ChecklistAction\n                                        checklist={checkList}\n                                        brandColor={brandColor}\n                                        design={design}\n                                        step={step}\n                                        setcheckList={setCheckList}\n                                        completedTasks={completedTasks}\n                                        account={account}\n                                        idx={idx}\n                                        {...rest}\n                                        onCompleted={trackCompletion}\n                                        setIsOpen={setIsOpen}\n                                      />\n                                    </div>\n                                  )}\n                                </div>\n                              </div>\n                            </div>\n                          );\n                        })}\n                      </div>\n                    </div>\n                  </div>\n\n                  <div className=\"flex items-center justify-between rounded-b-2xl bg-neutral-100 border-t border-neutral-200 px-5 py-2.5 border-solid\">\n                    {showPoweredBy ? (\n                      <div className=\"flex items-center gap-1.5 text-[var(--text-color)] opacity-50\">\n                        <svg\n                          width=\"80\"\n                          height=\"80\"\n                          viewBox=\"0 0 80 80\"\n                          fill=\"none\"\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          className=\"h-5 w-5 opacity-60\"\n                        >\n                          <title>userorbit logo</title>\n                          <path\n                            d=\"M6.66675 46.6667C6.66675 37.3323 6.66675 32.6654 8.48331 29.1002C10.0812 25.9641 12.6309 23.4144 15.7669 21.8166C19.3321 20 23.9992 20 33.3334 20H46.6667C56.0011 20 60.6681 20 64.2334 21.8166C67.3694 23.4144 69.9191 25.9641 71.5167 29.1002C73.3334 32.6654 73.3334 37.3323 73.3334 46.6667C73.3334 56.001 73.3334 60.668 71.5167 64.2333C69.9191 67.3693 67.3694 69.919 64.2334 71.5167C60.6681 73.3333 56.0011 73.3333 46.6667 73.3333H33.3334C23.9992 73.3333 19.3321 73.3333 15.7669 71.5167C12.6309 69.919 10.0812 67.3693 8.48331 64.2333C6.66675 60.668 6.66675 56.001 6.66675 46.6667Z\"\n                            fill=\"currentColor\"\n                          />\n                          <g opacity=\"0.5\">\n                            <path\n                              fillRule=\"evenodd\"\n                              clipRule=\"evenodd\"\n                              d=\"M71.5794 16.6454C70.5014 17.0367 69.3381 17.25 68.125 17.25C62.5711 17.25 58.0619 12.7785 58.0006 7.23924C53.5014 6.66663 47.692 6.66663 40.0001 6.66663C24.2866 6.66663 16.4298 6.66663 11.5483 11.5482C6.66675 16.4297 6.66675 24.2865 6.66675 40H73.3334C73.3334 28.8289 73.3334 21.6287 71.5794 16.6454Z\"\n                              fill=\"currentColor\"\n                            />\n                          </g>\n                          <path\n                            d=\"M68.625 11.25C71.1794 11.25 73.25 9.17931 73.25 6.625C73.25 4.07069 71.1794 2 68.625 2C66.0706 2 64 4.07069 64 6.625C64 9.17931 66.0706 11.25 68.625 11.25Z\"\n                            fill=\"currentColor\"\n                          />\n                          <path\n                            d=\"M51.33 58.354C49.97 59.374 48.6327 59.884 47.318 59.884C46.0033 59.884 44.9607 59.544 44.19 58.864C43.4193 58.184 43.034 57.164 43.034 55.804C43.034 55.4187 43.0453 55.124 43.068 54.92L42.728 54.818C40.484 58.1727 37.4693 59.85 33.684 59.85C30.0347 59.85 28.21 57.9233 28.21 54.07C28.21 52.778 28.3913 51.0667 28.754 48.936C29.1167 46.7827 29.4227 44.9693 29.672 43.496C29.944 42 30.1253 40.98 30.216 40.436L28.414 36.798C29.842 35.982 31.0773 35.37 32.12 34.962C33.1853 34.554 34.2507 34.35 35.316 34.35C36.3813 34.35 37.0953 34.6333 37.458 35.2C37.8433 35.744 38.036 36.4013 38.036 37.172C38.036 37.9427 37.6507 40.4133 36.88 44.584C36.132 48.7547 35.758 51.1913 35.758 51.894C35.758 53.6847 36.37 54.58 37.594 54.58C38.5007 54.58 39.532 54.002 40.688 52.846C41.844 51.69 42.7847 50.1033 43.51 48.086C43.034 46.7033 42.796 45.2753 42.796 43.802C42.796 41.1727 43.442 38.94 44.734 37.104C46.0487 35.268 47.896 34.35 50.276 34.35C51.5907 34.35 52.6447 34.5653 53.438 34.996C53.234 36.22 52.8373 38.4413 52.248 41.66C50.956 48.4827 50.31 52.404 50.31 53.424C50.31 55.6227 50.65 57.266 51.33 58.354Z\"\n                            fill=\"white\"\n                          />\n                        </svg>\n                        <span className=\"text-xs\">Powered by Userorbit</span>\n                      </div>\n                    ) : (\n                      <div />\n                    )}\n                    <button\n                      type=\"button\"\n                      onClick={dismissChecklist}\n                      className=\"cursor-pointer border border-solid border-[var(--border-color)] rounded-md px-3 py-1.5 bg-[var(--background-color)] text-xs font-medium text-[var(--text-color)] opacity-80 hover:opacity-100\"\n                    >\n                      Skip\n                    </button>\n                  </div>\n                </motion.div>\n              </div>\n            )}\n          </motion.div>\n        </div>\n      )}\n    </>\n  );\n}\n","import { useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { ChecklistPreviewProps } from \"../../types\";\nimport ChecklistPreview from \"./checklist-preview\";\n\nconst Checklist = (\n  props: ChecklistPreviewProps & {\n    parent?: Element;\n    onShown?: () => void | Promise<boolean>;\n    onRequestClose?: (reason: string) => void;\n  },\n): any => {\n  const [activeTask, setActiveTask] = useState(0);\n\n  return ReactDOM.createPortal(\n    <div id=\"uojs\">\n      <ChecklistPreview {...props} activeTask={activeTask} setActiveTask={setActiveTask} />\n    </div>,\n    props.parent || document.body,\n  );\n};\n\nexport default Checklist;\n","import { useEffect, useRef, useState } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Logger } from \"../../lib/logger\";\nimport { markUserorbitOwnedHost } from \"../../lib/domOwnership\";\nimport {\n  addCustomCssToShadowDom,\n  addCustomThemeToShadowDom,\n  addStylesToShadowDom,\n} from \"../../lib/styles\";\nimport { sessionStore } from \"../../lib/storage\";\nimport type { OpenWidgetOptions } from \"../../index\";\nimport FloatingWidget from \"../floating-widget\";\nimport NotificationButton from \"./notification-button\";\n\nconst logger = Logger.getInstance();\nconst OPEN_DRAWER_EVENT = \"uojs-open-drawer\";\nconst DRAWER_CLOSED_EVENT = \"uojs-widget-drawer-closed\";\nconst WIDGET_OPEN_OPTIONS_STORAGE_KEY = \"uo-widget-open-options\";\n\ntype DrawerOpenDetail = {\n  openOptions: OpenWidgetOptions | null;\n};\n\ntype Props = any;\n\nconst Drawer = (props: Props) => {\n  const { config, product, attributes } = props;\n  const [active, setActive] = useState(config?.forceOpen || false);\n  const handleClick = () => {\n    setActive((currentlyActive: boolean) => {\n      if (currentlyActive) window.dispatchEvent(new Event(DRAWER_CLOSED_EVENT));\n      return !currentlyActive;\n    });\n  };\n  const close = () => {\n    setActive(false);\n    window.dispatchEvent(new Event(DRAWER_CLOSED_EVENT));\n  };\n\n  // If forceOpen is present, automatically open the drawer on mount\n  useEffect(() => {\n    if (config?.forceOpen) {\n      setActive(true);\n    }\n  }, [config?.forceOpen]);\n\n  useEffect(() => {\n    const openHandler = () => setActive(true);\n    const closeHandler = () => close();\n    window.addEventListener(OPEN_DRAWER_EVENT, openHandler as any);\n    window.addEventListener(\"uojs-close-widget\", closeHandler as any);\n    return () => {\n      window.removeEventListener(OPEN_DRAWER_EVENT, openHandler as any);\n      window.removeEventListener(\"uojs-close-widget\", closeHandler as any);\n    };\n  }, []);\n\n  return (\n    <>\n      <PortalWidget\n        subscriberCode={attributes?.code}\n        config={config}\n        active={active}\n        team={product}\n        close={close}\n        handleClick={handleClick}\n      />\n      {/* Only show notification button if not force opening */}\n      {!config?.forceOpen && <NotificationButton active={true} onClick={handleClick} />}\n    </>\n  );\n};\n\nexport default Drawer;\n\nconst PortalWidget = (props: any): any => {\n  const { active, close, config, team, subscriberCode } = props;\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null);\n\n  // Read openOptions from config props first, then fallback to sessionStorage\n  const [openOptions, setOpenOptions] = useState<OpenWidgetOptions | null>(null);\n\n  const readStoredOpenOptions = (): OpenWidgetOptions | null => {\n    const storedOptions = sessionStore.get(WIDGET_OPEN_OPTIONS_STORAGE_KEY);\n    if (!storedOptions) return null;\n\n    try {\n      const parsedOptions = JSON.parse(storedOptions) as OpenWidgetOptions;\n      sessionStore.remove(WIDGET_OPEN_OPTIONS_STORAGE_KEY);\n      return parsedOptions;\n    } catch (e) {\n      logger.warn(\"Failed to parse widget open options:\", e);\n      return null;\n    }\n  };\n\n  useEffect(() => {\n    // Prioritize config.openOptions from props\n    if (config?.openOptions) {\n      setOpenOptions(config.openOptions);\n      return;\n    }\n\n    setOpenOptions(readStoredOpenOptions());\n  }, [config?.openOptions]);\n\n  useEffect(() => {\n    const handleDrawerOpen = (event: Event) => {\n      const openEvent = event as CustomEvent<DrawerOpenDetail | undefined>;\n\n      if (openEvent.detail && \"openOptions\" in openEvent.detail) {\n        setOpenOptions(openEvent.detail.openOptions ?? null);\n        return;\n      }\n\n      setOpenOptions(readStoredOpenOptions());\n    };\n\n    window.addEventListener(OPEN_DRAWER_EVENT, handleDrawerOpen as EventListener);\n    return () => {\n      window.removeEventListener(OPEN_DRAWER_EVENT, handleDrawerOpen as EventListener);\n    };\n  }, []);\n\n  useEffect(() => {\n    // Create container element only once\n    const container = markUserorbitOwnedHost(document.createElement(\"div\"));\n    container.id = \"uojs-shadow-container\";\n    document.body.appendChild(container);\n    containerRef.current = container;\n\n    // Create shadow root\n    const shadowRoot = container.attachShadow({ mode: \"open\" });\n    setShadowRoot(shadowRoot);\n\n    // Add styles\n    addStylesToShadowDom(shadowRoot);\n    addCustomThemeToShadowDom({ styling: props?.product?.theme, shadowRoot });\n    addCustomCssToShadowDom({ css: team?.configuration?.widget?.customCss, shadowRoot });\n\n    // Cleanup when component unmounts\n    return () => {\n      if (container && container.parentNode) {\n        container.parentNode.removeChild(container);\n        containerRef.current = null;\n      }\n    };\n  }, []); // Empty dependency array - only run once\n\n  // Don't render until shadow root is ready\n  if (!shadowRoot) {\n    return null;\n  }\n\n  return ReactDOM.createPortal(\n    <div className=\"uojs-widget-drawer\" id=\"uojs\">\n      {active && (\n        <FloatingWidget\n          product={team}\n          attributes={{ code: subscriberCode }}\n          config={{ ...config, isOpen: true, openOptions: openOptions || config?.openOptions }}\n          variant={openOptions?.modal || config?.openOptions?.modal ? \"modal\" : \"drawer\"}\n          onClose={close}\n        />\n      )}\n    </div>,\n    shadowRoot,\n  );\n};\n","// ABOUTME: Shared survey branching contract and deterministic evaluator.\n// ABOUTME: Keeps the admin preview and embedded survey runtime on the same navigation rules.\n\nexport type SurveyLogicOperator =\n  | \"equals\"\n  | \"not_equals\"\n  | \"less_than\"\n  | \"less_than_or_equal\"\n  | \"greater_than\"\n  | \"greater_than_or_equal\"\n  | \"between\"\n  | \"contains_any\"\n  | \"contains_all\"\n  | \"contains_none\";\n\nexport type SurveyLogicConditionValue = string | number | string[] | [number, number];\n\nexport type SurveyLogicCondition = {\n  id: string;\n  questionKey: string;\n  operator: SurveyLogicOperator;\n  value: SurveyLogicConditionValue;\n};\n\nexport type SurveyLogicDestination =\n  | { type: \"question\"; key: string }\n  | { type: \"ending\"; key?: string };\n\nexport type SurveyLogicRule = {\n  id: string;\n  combinator: \"and\" | \"or\";\n  conditions: SurveyLogicCondition[];\n  destination: SurveyLogicDestination;\n};\n\nexport type SurveyBranching = {\n  version: 1;\n  rules: SurveyLogicRule[];\n  defaultDestination:\n    | { type: \"next\" }\n    | { type: \"question\"; key: string }\n    | { type: \"ending\"; key?: string };\n};\n\nexport type SurveyLogicChoice = string | { value: string };\n\nexport type SurveyLogicQuestion = {\n  id?: string;\n  order?: number;\n  type: string;\n  configuration?: {\n    logicKey?: string;\n    branching?: SurveyBranching;\n    choices?: SurveyLogicChoice[];\n    buttons?: SurveyLogicChoice[];\n    scaleRange?: string;\n    scaleStart?: 0 | 1;\n  };\n};\n\nexport type SurveyAnswer = string | number | string[] | Record<string, string>;\nexport type SurveyAnswers = Record<string, SurveyAnswer>;\n\nexport type SurveyLogicDecision = {\n  sourceQuestionKey: string;\n  matchedRuleId: string | null;\n  destination: SurveyLogicDestination;\n};\n\nexport type SurveyLogicValidationIssue = {\n  code:\n    | \"duplicate_question_key\"\n    | \"missing_condition_question\"\n    | \"invalid_condition_order\"\n    | \"invalid_condition_question_type\"\n    | \"invalid_condition_operator\"\n    | \"invalid_condition_value\"\n    | \"invalid_destination\"\n    | \"empty_rule\";\n  message: string;\n  questionKey: string;\n  ruleId?: string;\n};\n\nconst branchableQuestionTypes = new Set([\"rating\", \"dropdown\", \"multi-select\", \"buttons\"]);\n\nexport const createSurveyLogicKey = () => crypto.randomUUID();\n\nexport const getSurveyQuestionKey = (question: SurveyLogicQuestion, index: number) =>\n  question.configuration?.logicKey || question.id || `question-${index + 1}`;\n\nexport const isBranchableSurveyQuestion = (question: SurveyLogicQuestion) =>\n  branchableQuestionTypes.has(question.type);\n\nexport const getSurveyChoiceValues = (question: SurveyLogicQuestion) => {\n  const choices =\n    question.type === \"buttons\" ? question.configuration?.buttons : question.configuration?.choices;\n  return (choices || []).map((choice) => (typeof choice === \"string\" ? choice : choice.value));\n};\n\nexport const getOperatorsForSurveyQuestion = (\n  question: SurveyLogicQuestion,\n): SurveyLogicOperator[] => {\n  if (question.type === \"rating\") {\n    return [\n      \"equals\",\n      \"not_equals\",\n      \"less_than\",\n      \"less_than_or_equal\",\n      \"greater_than\",\n      \"greater_than_or_equal\",\n      \"between\",\n    ];\n  }\n\n  if (question.type === \"multi-select\") {\n    return [\"contains_any\", \"contains_all\", \"contains_none\"];\n  }\n\n  return [\"equals\", \"not_equals\"];\n};\n\nconst getRatingBounds = (question: SurveyLogicQuestion) => ({\n  minimum: Number(question.configuration?.scaleStart ?? 1),\n  maximum: Number(question.configuration?.scaleRange || 10),\n});\n\nconst isValidRatingConditionValue = (\n  question: SurveyLogicQuestion,\n  condition: SurveyLogicCondition,\n) => {\n  const { minimum, maximum } = getRatingBounds(question);\n\n  if (condition.operator === \"between\") {\n    if (!Array.isArray(condition.value) || condition.value.length !== 2) return false;\n    const [rangeMinimum, rangeMaximum] = condition.value;\n    return (\n      typeof rangeMinimum === \"number\" &&\n      Number.isFinite(rangeMinimum) &&\n      typeof rangeMaximum === \"number\" &&\n      Number.isFinite(rangeMaximum) &&\n      rangeMinimum >= minimum &&\n      rangeMaximum <= maximum &&\n      rangeMinimum <= rangeMaximum\n    );\n  }\n\n  return (\n    typeof condition.value === \"number\" &&\n    Number.isFinite(condition.value) &&\n    condition.value >= minimum &&\n    condition.value <= maximum\n  );\n};\n\nconst isValidChoiceConditionValue = (\n  question: SurveyLogicQuestion,\n  condition: SurveyLogicCondition,\n) => {\n  const choices = new Set(getSurveyChoiceValues(question));\n  if (question.type === \"multi-select\") {\n    return (\n      Array.isArray(condition.value) &&\n      condition.value.length > 0 &&\n      condition.value.every(\n        (value) => typeof value === \"string\" && value.length > 0 && choices.has(value),\n      )\n    );\n  }\n\n  return (\n    typeof condition.value === \"string\" &&\n    condition.value.length > 0 &&\n    choices.has(condition.value)\n  );\n};\n\nconst asArray = (value: SurveyLogicConditionValue | SurveyAnswer | undefined) =>\n  Array.isArray(value) ? value.map(String) : value === undefined ? [] : [String(value)];\n\nexport const matchesSurveyLogicCondition = (\n  condition: SurveyLogicCondition,\n  answer: SurveyAnswer | undefined,\n) => {\n  if (answer === undefined) return false;\n\n  const numericAnswer = Number(answer);\n  const numericValue = Number(condition.value);\n\n  switch (condition.operator) {\n    case \"equals\":\n      return Array.isArray(answer)\n        ? answer.map(String).includes(String(condition.value))\n        : String(answer) === String(condition.value);\n    case \"not_equals\":\n      return Array.isArray(answer)\n        ? !answer.map(String).includes(String(condition.value))\n        : String(answer) !== String(condition.value);\n    case \"less_than\":\n      return Number.isFinite(numericAnswer) && numericAnswer < numericValue;\n    case \"less_than_or_equal\":\n      return Number.isFinite(numericAnswer) && numericAnswer <= numericValue;\n    case \"greater_than\":\n      return Number.isFinite(numericAnswer) && numericAnswer > numericValue;\n    case \"greater_than_or_equal\":\n      return Number.isFinite(numericAnswer) && numericAnswer >= numericValue;\n    case \"between\": {\n      const [minimum, maximum] = Array.isArray(condition.value)\n        ? condition.value.map(Number)\n        : [Number.NaN, Number.NaN];\n      return Number.isFinite(numericAnswer) && numericAnswer >= minimum && numericAnswer <= maximum;\n    }\n    case \"contains_any\": {\n      const expected = asArray(condition.value);\n      return asArray(answer).some((item) => expected.includes(item));\n    }\n    case \"contains_all\": {\n      const selected = asArray(answer);\n      return asArray(condition.value).every((item) => selected.includes(item));\n    }\n    case \"contains_none\": {\n      const expected = asArray(condition.value);\n      return asArray(answer).every((item) => !expected.includes(item));\n    }\n  }\n};\n\nconst answerForQuestion = (\n  questions: SurveyLogicQuestion[],\n  questionKey: string,\n  answers: SurveyAnswers,\n) => {\n  const questionIndex = questions.findIndex(\n    (question, index) => getSurveyQuestionKey(question, index) === questionKey,\n  );\n  const question = questions[questionIndex];\n  if (!question) return undefined;\n  return answers[question.id || questionKey] ?? answers[questionKey];\n};\n\nconst fallbackDestination = (\n  questions: SurveyLogicQuestion[],\n  currentQuestionIndex: number,\n): SurveyLogicDestination => {\n  const nextQuestion = questions[currentQuestionIndex + 1];\n  return nextQuestion\n    ? { type: \"question\", key: getSurveyQuestionKey(nextQuestion, currentQuestionIndex + 1) }\n    : { type: \"ending\" };\n};\n\nconst resolveDestination = (\n  questions: SurveyLogicQuestion[],\n  sourceIndex: number,\n  destination: SurveyBranching[\"defaultDestination\"] | SurveyLogicDestination | undefined,\n): SurveyLogicDestination => {\n  if (!destination) return fallbackDestination(questions, sourceIndex);\n  if (destination.type === \"ending\") return destination;\n  if (destination.type === \"next\") return fallbackDestination(questions, sourceIndex);\n\n  const destinationIndex = questions.findIndex(\n    (question, index) => getSurveyQuestionKey(question, index) === destination.key,\n  );\n  return destinationIndex > sourceIndex ? destination : fallbackDestination(questions, sourceIndex);\n};\n\nexport const evaluateSurveyNextStep = ({\n  questions,\n  currentQuestionKey,\n  answers,\n}: {\n  questions: SurveyLogicQuestion[];\n  currentQuestionKey: string;\n  answers: SurveyAnswers;\n}): SurveyLogicDecision => {\n  const sourceIndex = questions.findIndex(\n    (question, index) => getSurveyQuestionKey(question, index) === currentQuestionKey,\n  );\n  const sourceQuestion = questions[sourceIndex];\n\n  if (!sourceQuestion || sourceIndex < 0) {\n    return {\n      sourceQuestionKey: currentQuestionKey,\n      matchedRuleId: null,\n      destination: { type: \"ending\" },\n    };\n  }\n\n  const branching = sourceQuestion.configuration?.branching;\n  if (!branching) {\n    return {\n      sourceQuestionKey: currentQuestionKey,\n      matchedRuleId: null,\n      destination: fallbackDestination(questions, sourceIndex),\n    };\n  }\n\n  for (const rule of branching.rules) {\n    if (rule.conditions.length === 0) continue;\n    const matches = rule.conditions.map((condition) =>\n      matchesSurveyLogicCondition(\n        condition,\n        answerForQuestion(questions, condition.questionKey, answers),\n      ),\n    );\n    const ruleMatches = rule.combinator === \"or\" ? matches.some(Boolean) : matches.every(Boolean);\n    if (ruleMatches) {\n      return {\n        sourceQuestionKey: currentQuestionKey,\n        matchedRuleId: rule.id,\n        destination: resolveDestination(questions, sourceIndex, rule.destination),\n      };\n    }\n  }\n\n  return {\n    sourceQuestionKey: currentQuestionKey,\n    matchedRuleId: null,\n    destination: resolveDestination(questions, sourceIndex, branching.defaultDestination),\n  };\n};\n\nexport const validateSurveyBranching = (questions: SurveyLogicQuestion[]) => {\n  const issues: SurveyLogicValidationIssue[] = [];\n  const questionKeys = questions.map(getSurveyQuestionKey);\n  const duplicateKeys = new Set(\n    questionKeys.filter((key, index) => questionKeys.indexOf(key) !== index),\n  );\n\n  duplicateKeys.forEach((questionKey) =>\n    issues.push({\n      code: \"duplicate_question_key\",\n      message: \"Each survey question needs a unique logic key.\",\n      questionKey,\n    }),\n  );\n\n  questions.forEach((question, sourceIndex) => {\n    const questionKey = questionKeys[sourceIndex];\n    question.configuration?.branching?.rules.forEach((rule) => {\n      if (rule.conditions.length === 0) {\n        issues.push({\n          code: \"empty_rule\",\n          message: \"Add at least one condition or remove this rule.\",\n          questionKey,\n          ruleId: rule.id,\n        });\n      }\n\n      rule.conditions.forEach((condition) => {\n        const conditionIndex = questionKeys.indexOf(condition.questionKey);\n        if (conditionIndex < 0) {\n          issues.push({\n            code: \"missing_condition_question\",\n            message: \"A rule references a question that no longer exists.\",\n            questionKey,\n            ruleId: rule.id,\n          });\n        } else if (conditionIndex > sourceIndex) {\n          issues.push({\n            code: \"invalid_condition_order\",\n            message: \"Rules can only use the current or an earlier answer.\",\n            questionKey,\n            ruleId: rule.id,\n          });\n        } else {\n          const conditionQuestion = questions[conditionIndex];\n          if (!isBranchableSurveyQuestion(conditionQuestion)) {\n            issues.push({\n              code: \"invalid_condition_question_type\",\n              message: \"This rule references a question type that does not support branching.\",\n              questionKey,\n              ruleId: rule.id,\n            });\n            return;\n          }\n\n          if (!getOperatorsForSurveyQuestion(conditionQuestion).includes(condition.operator)) {\n            issues.push({\n              code: \"invalid_condition_operator\",\n              message: \"This rule uses an operator that is not supported by its question type.\",\n              questionKey,\n              ruleId: rule.id,\n            });\n            return;\n          }\n\n          const hasValidValue =\n            conditionQuestion.type === \"rating\"\n              ? isValidRatingConditionValue(conditionQuestion, condition)\n              : isValidChoiceConditionValue(conditionQuestion, condition);\n          if (!hasValidValue) {\n            issues.push({\n              code: \"invalid_condition_value\",\n              message:\n                conditionQuestion.type === \"rating\"\n                  ? \"Use rating values within the question's current range, with the lower value first.\"\n                  : conditionQuestion.type === \"multi-select\"\n                    ? \"Select one or more answer choices that still exist on this question.\"\n                    : \"Select an answer choice that still exists on this question.\",\n              questionKey,\n              ruleId: rule.id,\n            });\n          }\n        }\n      });\n\n      if (rule.destination.type === \"question\") {\n        const destinationIndex = questionKeys.indexOf(rule.destination.key);\n        if (destinationIndex <= sourceIndex) {\n          issues.push({\n            code: \"invalid_destination\",\n            message: \"Branch destinations must be a later question.\",\n            questionKey,\n            ruleId: rule.id,\n          });\n        }\n      }\n    });\n\n    const defaultDestination = question.configuration?.branching?.defaultDestination;\n    if (defaultDestination?.type === \"question\") {\n      const destinationIndex = questionKeys.indexOf(defaultDestination.key);\n      if (destinationIndex <= sourceIndex) {\n        issues.push({\n          code: \"invalid_destination\",\n          message: \"The default destination must be a later question.\",\n          questionKey,\n        });\n      }\n    }\n  });\n\n  return issues;\n};\n\nexport const countSurveyBranchingRules = (question: SurveyLogicQuestion) =>\n  question.configuration?.branching?.rules.length || 0;\n","import { motion } from \"framer-motion\";\nimport React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\n\ninterface AnimateChangeInHeightProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const AnimateChangeInHeight: React.FC<AnimateChangeInHeightProps> = ({\n  children,\n  className,\n}) => {\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const [height, setHeight] = useState<number | \"auto\">(\"auto\");\n\n  useEffect(() => {\n    if (containerRef.current) {\n      const resizeObserver = new ResizeObserver((entries) => {\n        // We only have one entry, so we can use entries[0].\n        const observedHeight = entries[0].contentRect.height;\n        setHeight(observedHeight);\n      });\n\n      resizeObserver.observe(containerRef.current);\n\n      return () => {\n        // Cleanup the observer when the component is unmounted\n        resizeObserver.disconnect();\n      };\n    }\n  }, []);\n\n  return (\n    <motion.div\n      className={`${className} overflow-hidden`}\n      style={{ height }}\n      animate={{ height }}\n      transition={{ duration: 0.25 }}\n    >\n      <div ref={containerRef}>{children}</div>\n    </motion.div>\n  );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\ninterface ScrollableContainerProps {\n  children: JSX.Element;\n}\n\nexport const ScrollableContainer = ({ children }: ScrollableContainerProps) => {\n  const [isOverflowHidden, setIsOverflowHidden] = useState(true);\n  const [isAtBottom, setIsAtBottom] = useState(false);\n  const [isAtTop, setIsAtTop] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n  const isSurveyPreview = !!document.getElementById(\"survey-preview\");\n\n  const checkScroll = () => {\n    if (!containerRef.current) return;\n    const { scrollTop, scrollHeight, clientHeight } = containerRef.current;\n\n    setIsAtBottom(Math.round(scrollTop) + clientHeight >= scrollHeight);\n\n    setIsAtTop(scrollTop === 0);\n  };\n\n  const toggleOverflow = (hide: boolean) => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    if (hide) {\n      timeoutRef.current = setTimeout(() => setIsOverflowHidden(true), 1000);\n    } else {\n      setIsOverflowHidden(false);\n      checkScroll();\n    }\n  };\n\n  useEffect(() => {\n    const element = containerRef.current;\n    if (!element) return;\n\n    const handleScroll = () => checkScroll();\n    element.addEventListener(\"scroll\", handleScroll);\n\n    return () => {\n      element.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, []);\n\n  useEffect(() => {\n    checkScroll();\n  }, [children]);\n\n  return (\n    <div className=\"relative\">\n      {!isAtTop && (\n        <div className=\"from-[var(--background-color)] absolute left-0 right-2 top-0 z-10 h-4 bg-gradient-to-b to-transparent\" />\n      )}\n      <div\n        ref={containerRef}\n        style={{\n          scrollbarGutter: \"stable both-edges\",\n          maxHeight: isSurveyPreview ? \"40dvh\" : \"40dvh\",\n        }}\n        className={cn(\"overflow-auto px-1 pb-1\", isOverflowHidden ? \"no-scrollbar\" : \"\")}\n        onMouseEnter={() => toggleOverflow(false)}\n        onMouseLeave={() => toggleOverflow(true)}\n      >\n        {children}\n      </div>\n      {!isAtBottom && (\n        <div className=\"from-[var(--background-color)] absolute -bottom-2 left-0 right-2 h-8 bg-gradient-to-t to-transparent\" />\n      )}\n    </div>\n  );\n};\n","import type { VariantProps } from \"class-variance-authority\";\nimport { Loader2 } from \"lucide-react\";\nimport { type ButtonHTMLAttributes, useCallback } from \"react\";\nimport { Button, type buttonVariants } from \"../../ui/button\";\n\ntype SubmitButtonProps = {\n  buttonLabel: string | undefined;\n  isLastQuestion: boolean;\n  focus?: boolean;\n  loading?: boolean;\n};\n\nexport const SubmitButton = ({\n  buttonLabel,\n  isLastQuestion,\n  tabIndex = 1,\n  focus = false,\n  onClick,\n  disabled,\n  type,\n  loading,\n  ...props\n}: SubmitButtonProps &\n  VariantProps<typeof buttonVariants> &\n  ButtonHTMLAttributes<HTMLButtonElement>) => {\n  const buttonRef = useCallback(\n    (currentButton: HTMLButtonElement | null) => {\n      if (currentButton && focus) {\n        setTimeout(() => {\n          currentButton.focus();\n        }, 200);\n      }\n    },\n    [focus],\n  );\n\n  return (\n    <Button\n      {...props}\n      dir=\"auto\"\n      ref={buttonRef}\n      type={type}\n      tabIndex={tabIndex}\n      autoFocus={focus}\n      onClick={onClick}\n      className=\"text-[var(--next-button-text-color)] border-[var(--next-button-border-color)] hover:bg-[var(--next-button-hover-color)] bg-[var(--next-button-bg-color)]\"\n      disabled={disabled || loading}\n    >\n      {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <></>}\n      {buttonLabel || (isLastQuestion ? \"Finish\" : \"Next\")}\n    </Button>\n  );\n};\n\ninterface BackButtonProps {\n  onClick: () => void;\n  backButtonLabel?: string;\n  tabIndex?: number;\n  disabled?: boolean;\n}\n\nexport const BackButton = ({\n  onClick,\n  backButtonLabel,\n  disabled,\n  tabIndex = 2,\n}: BackButtonProps) => {\n  return (\n    <Button\n      dir=\"auto\"\n      tabIndex={tabIndex}\n      type={\"button\"}\n      variant=\"link\"\n      disabled={disabled}\n      className=\"text-[var(--secondary-button-text-color)] border-[var(--secondary-button-border-color)] hover:bg-[var(--secondary-button-hover-color)] bg-[var(--secondary-button-bg-color)]\"\n      onClick={onClick}\n    >\n      {backButtonLabel || \"Back\"}\n    </Button>\n  );\n};\n","import { useMemo, useRef } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { ButtonChoice, TResponseData } from \"../../../types\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton } from \"./survey-button\";\n\nconst isValidUrl = (url: string) => {\n  try {\n    new URL(url);\n    return true;\n  } catch (e) {\n    return false;\n  }\n};\n\ninterface MultipleChoiceSingleProps {\n  question: any;\n  value?: string[];\n  onChange: (responseData: TResponseData) => void;\n  onSubmit: (data: TResponseData) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: string;\n}\n\nexport const ButtonsQuestion = ({\n  question,\n  value,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  currentQuestionId,\n}: MultipleChoiceSingleProps) => {\n  const choicesContainerRef = useRef<HTMLDivElement | null>(null);\n  const isCurrent = question.id === currentQuestionId;\n\n  const questionChoices = useMemo(() => {\n    if (!question.configuration.buttons) {\n      return [];\n    }\n    return question.configuration.buttons;\n  }, [question.configuration.buttons]);\n\n  console.log(\"questionChoices\", questionChoices);\n\n  return (\n    <form onSubmit={(e) => e.preventDefault()} key={question.id} className=\"w-full\">\n      <ScrollableContainer>\n        <div>\n          <div className=\"mt-4\">\n            <fieldset>\n              <legend className=\"sr-only\">Options</legend>\n              <div className=\"relative space-y-2\" role=\"radiogroup\" ref={choicesContainerRef}>\n                {questionChoices.map((choice: ButtonChoice, idx: number) => {\n                  if (!choice || choice.value === \"other\") return;\n                  return (\n                    <div\n                      dir=\"auto\"\n                      key={`${choice.value}-${idx}`}\n                      tabIndex={isCurrent ? 0 : -1}\n                      className={cn(\n                        Array.isArray(value) && value.indexOf(choice.value) !== -1\n                          ? \"z-10 border-neutral-300 bg-neutral-200\"\n                          : \"border-neutral-200 bg-neutral-100\",\n                        // \"hover:border-emphasis dark:focus:border-emphasis border-input shadow-sm bg-default dark:bg-neutral-900 placeholder:text-muted text-emphasis disabled:hover:border-input disabled:bg-subtle focus:ring-brand-default focus:border-subtle mb-2 block h-9 rounded-md border px-3 py-2 text-sm leading-4 transition focus:outline-none focus:ring-2 disabled:cursor-not-allowed w-full\",\n                        \"relative flex cursor-pointer flex-col rounded-md border border-[var(--input-border-color)] bg-[var(--input-background-color)] p-2 text-[var(--text-color)] hover:opacity-80 focus:outline-none dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\",\n                      )}\n                      onClick={(e) => {\n                        e.preventDefault();\n                        if (choice.linkUrl?.length > 0 && isValidUrl(choice.linkUrl)) {\n                          window.open(choice.linkUrl, choice.linkTarget);\n                          onSubmit({ [question.id]: choice.value });\n                        } else {\n                          onSubmit({ [question.id]: choice.value });\n                        }\n                      }}\n                      // autoFocus={idx === 0}\n                    >\n                      <span className=\"flex items-center text-sm\">\n                        <span id={`${choice.value}-label`} className=\"ml-3 mr-3 grow font-medium\">\n                          {choice.value}\n                        </span>\n                      </span>\n                    </div>\n                  );\n                })}\n              </div>\n            </fieldset>\n          </div>\n        </div>\n      </ScrollableContainer>\n      {!isFirstQuestion && (\n        <div className=\"flex w-full flex-row justify-between py-4 pr-2\">\n          <div>\n            <BackButton\n              tabIndex={isCurrent ? 0 : -1}\n              backButtonLabel={question.backButtonLabel}\n              onClick={() => {\n                onBack();\n              }}\n            />\n          </div>\n        </div>\n      )}\n    </form>\n  );\n};\n","import { Button } from \"@userorbit/ui/src/ui/button\";\nimport type { TResponseDataValue } from \"../../../types\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton, SubmitButton } from \"./survey-button\";\n\ninterface MessageQuestionProps {\n  question: any;\n  value: TResponseDataValue;\n  onChange: (responseData: any) => void;\n  onSubmit: (data: any, dismissSurvey?: boolean) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: any;\n  loading: boolean;\n}\n\nexport const MessageQuestion = ({\n  question,\n  value,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  currentQuestionId,\n  loading,\n}: MessageQuestionProps) => {\n  const isCurrent = question.id === currentQuestionId;\n\n  return (\n    <form\n      key={question.id}\n      onSubmit={(e) => {\n        e.preventDefault();\n      }}\n      className=\"w-full\"\n    >\n      <ScrollableContainer>\n        <div>\n          <div className=\"mt-4\" />\n        </div>\n      </ScrollableContainer>\n      <div className=\"flex flex-row w-full justify-between pt-4\">\n        {!isFirstQuestion && (\n          <BackButton\n            tabIndex={isCurrent ? 0 : -1}\n            backButtonLabel={question.backButtonLabel}\n            onClick={() => {\n              onBack();\n            }}\n            disabled={loading}\n          />\n        )}\n        <Button\n          variant=\"onboarding\"\n          className=\"text-[var(--secondary-button-text-color)] border-[var(--secondary-button-border-color)] hover:bg-[var(--secondary-button-hover-color)] hover:text-[var(--secondary-button-text-color)] bg-[var(--secondary-button-bg-color)]\"\n          tabIndex={isCurrent ? 0 : -1}\n          onClick={() => {\n            onSubmit({ [question.id]: \"\" }, true);\n          }}\n          disabled={loading}\n        >\n          {question.configuration?.dismissCTAText}\n        </Button>\n        <SubmitButton\n          tabIndex={isCurrent ? 0 : -1}\n          buttonLabel={question.configuration?.primaryCTAText}\n          isLastQuestion={isLastQuestion}\n          loading={loading}\n          onClick={(e) => {\n            e.preventDefault();\n            if (question.configuration?.CTALink) {\n              window.open(\n                question.configuration?.CTALink,\n                question.configuration?.isSameSiteCTALink ? \"_self\" : \"_blank\",\n              );\n            }\n            onSubmit({ [question.id]: value });\n          }}\n        />\n      </div>\n    </form>\n  );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { TResponseData } from \"../../../types\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton, SubmitButton } from \"./survey-button\";\n\ninterface MultipleChoiceSingleProps {\n  question: any;\n  value?: string[];\n  onChange: (responseData: TResponseData) => void;\n  onSubmit: (data: TResponseData) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: string;\n  loading: boolean;\n}\n\nexport const MultiChoiceQuestion = ({\n  question,\n  value,\n  onChange,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  loading,\n  currentQuestionId,\n}: MultipleChoiceSingleProps) => {\n  const [otherSelected, setOtherSelected] = useState(false);\n  const otherSpecify = useRef<HTMLInputElement | null>(null);\n  const choicesContainerRef = useRef<HTMLDivElement | null>(null);\n  const isCurrent = question.id === currentQuestionId;\n\n  const questionChoices = useMemo(() => {\n    if (!question.configuration.choices) {\n      return [];\n    }\n    return question.configuration.choices;\n  }, [question.configuration.choices]);\n\n  const otherOption = useMemo(\n    () => question.configuration.choices?.find((choice: string) => choice === \"other\"),\n    [question.configuration.choices],\n  );\n\n  useEffect(() => {\n    // Scroll to the bottom of choices container and focus on 'otherSpecify' input when 'otherSelected' is true\n    if (otherSelected && choicesContainerRef.current && otherSpecify.current) {\n      choicesContainerRef.current.scrollTop = choicesContainerRef.current.scrollHeight;\n      otherSpecify.current.focus();\n    }\n  }, [otherSelected]);\n\n  const addItem = (item: string) => {\n    const isOtherValue = !questionChoices.includes(item);\n    if (Array.isArray(value)) {\n      if (isOtherValue) {\n        const newValue = value.filter((v) => {\n          return questionChoices.includes(v);\n        });\n        return onChange({ [question.id]: [...newValue, item] });\n      }\n      return onChange({ [question.id]: [...value, item] });\n    }\n    return onChange({ [question.id]: [item] }); // if not array, make it an array\n  };\n\n  const removeItem = (item: string) => {\n    if (Array.isArray(value)) {\n      return onChange({ [question.id]: value.filter((i) => i !== item) });\n    }\n    return onChange({ [question.id]: [] }); // if not array, make it an array\n  };\n\n  return (\n    <form onSubmit={(e) => e.preventDefault()} key={question.id} className=\"w-full\">\n      <ScrollableContainer>\n        <div>\n          <div className=\"mt-4\">\n            <fieldset>\n              <legend className=\"sr-only\">Options</legend>\n              <div className=\"relative space-y-2\" role=\"radiogroup\" ref={choicesContainerRef}>\n                {questionChoices.map((choice: string, idx: number) => {\n                  if (!choice || choice === \"other\") return;\n                  return (\n                    <label\n                      dir=\"auto\"\n                      key={choice}\n                      tabIndex={isCurrent ? 0 : -1}\n                      className={cn(\n                        Array.isArray(value) && value.indexOf(choice) !== -1\n                          ? \"z-10 opacity-100\"\n                          : \"opacity-90\",\n                        // \"hover:border-emphasis dark:focus:border-emphasis border-input shadow-sm bg-default dark:bg-neutral-900 placeholder:text-muted text-emphasis disabled:hover:border-input disabled:bg-subtle focus:ring-brand-default focus:border-subtle mb-2 block h-9 rounded-md border px-3 py-2 text-sm leading-4 transition focus:outline-none focus:ring-2 disabled:cursor-not-allowed w-full\",\n                        \"relative flex cursor-pointer flex-col rounded-md border border-[var(--input-border-color)] bg-[var(--input-background-color)] p-4 text-[var(--text-color)] focus:outline-none dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\",\n                      )}\n                      onKeyDown={(e) => {\n                        // Accessibility: if spacebar was pressed pass this down to the input\n                        if (e.key === \" \") {\n                          e.preventDefault();\n                          document.getElementById(choice)?.click();\n                          document.getElementById(choice)?.focus();\n                        }\n                      }}\n                      autoFocus={idx === 0}\n                    >\n                      <span className=\"flex items-center text-sm\">\n                        <input\n                          tabIndex={-1}\n                          type=\"checkbox\"\n                          id={choice}\n                          name={question.id}\n                          value={choice}\n                          dir=\"auto\"\n                          className=\"bg-elevated border-primary h-4 w-4 max-w-xs cursor-pointer rounded border focus:border-blue-500 focus:ring-2 focus:ring-blue-100 focus:ring-offset-0 dark:focus:border-blue-400 dark:focus:ring-blue-600/20\"\n                          aria-labelledby={`${choice}-label`}\n                          onChange={(e) => {\n                            if ((e.target as HTMLInputElement)?.checked) {\n                              addItem(choice);\n                            } else {\n                              removeItem(choice);\n                            }\n                          }}\n                          checked={Array.isArray(value) && value.includes(choice)}\n                          required={\n                            question.configuration?.required && Array.isArray(value) && value.length\n                              ? false\n                              : question.configuration?.required\n                          }\n                        />\n                        <span id={`${choice}-label`} className=\"ml-3 mr-3 grow font-medium\">\n                          {choice}\n                        </span>\n                      </span>\n                    </label>\n                  );\n                })}\n                {otherOption && (\n                  <label\n                    dir=\"auto\"\n                    tabIndex={isCurrent ? 0 : -1}\n                    className={cn(\n                      Array.isArray(value) && value.includes(otherOption)\n                        ? \"z-10 opacity-100\"\n                        : \"opacity-90\",\n                      \"rounded-custom relative flex cursor-pointer flex-col border border-[var(--input-border-color)] bg-[var(--input-background-color)] p-4 text-[var(--text-color)] focus:outline-none dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\",\n                    )}\n                    onKeyDown={(e) => {\n                      // Accessibility: if spacebar was pressed pass this down to the input\n                      if (e.key === \" \") {\n                        if (otherSelected) return;\n                        document.getElementById(otherOption)?.click();\n                        document.getElementById(otherOption)?.focus();\n                      }\n                    }}\n                  >\n                    <span className=\"flex items-center text-sm\">\n                      <input\n                        tabIndex={-1}\n                        dir=\"auto\"\n                        type=\"radio\"\n                        id={otherOption}\n                        name={question.id}\n                        value={otherOption}\n                        className=\"border-brand text-brand h-4 w-4 border focus:ring-0 focus:ring-offset-0\"\n                        aria-labelledby={`${otherOption}-label`}\n                        onChange={() => {\n                          setOtherSelected(!otherSelected);\n                          onChange({ [question.id]: \"\" });\n                        }}\n                        checked={otherSelected}\n                      />\n                      <span\n                        id={`${otherOption}-label`}\n                        className=\"ml-3 mr-3 grow font-medium\"\n                        dir=\"auto\"\n                      >\n                        {otherOption}\n                      </span>\n                    </span>\n                    {otherSelected && (\n                      <input\n                        ref={otherSpecify}\n                        id={`${otherOption}-label`}\n                        dir=\"auto\"\n                        name={question.id}\n                        value={value}\n                        onChange={(e) => {\n                          onChange({ [question.id]: e.currentTarget.value });\n                        }}\n                        className=\"placeholder:text-placeholder focus:ring-focus rounded-custom mt-3 flex h-10 w-full border border-[var(--input-border-color)] bg-[var(--input-background-color)] px-3 py-2 text-sm text-[var(--text-color)] focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\"\n                        placeholder={question.otherOptionPlaceholder ?? \"Please specify\"}\n                        required={question.configuration?.required}\n                        aria-labelledby={`${otherOption}-label`}\n                      />\n                    )}\n                  </label>\n                )}\n              </div>\n            </fieldset>\n          </div>\n        </div>\n      </ScrollableContainer>\n      <div className=\"flex w-full flex-row justify-between py-4\">\n        <div>\n          {!isFirstQuestion && (\n            <BackButton\n              tabIndex={isCurrent ? 0 : -1}\n              backButtonLabel={question.backButtonLabel}\n              disabled={loading}\n              onClick={() => {\n                onBack();\n              }}\n            />\n          )}\n        </div>\n        <SubmitButton\n          tabIndex={isCurrent ? 0 : -1}\n          buttonLabel={question.buttonLabel}\n          isLastQuestion={isLastQuestion}\n          loading={loading}\n          // type=\"button\"\n          onClick={(e) => {\n            e.preventDefault();\n            onSubmit({ [question.id]: value ?? \"\" });\n          }}\n        />\n      </div>\n    </form>\n  );\n};\n","import type { FC, HTMLAttributes } from \"react\";\n\nexport const TiredFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m21.88 23.92c5.102-0.06134 7.273-1.882 8.383-3.346\"\n        />\n        <path\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m46.24 47.56c0-2.592-2.867-7.121-10.25-6.93-6.974 0.1812-10.22 4.518-10.22 7.111s4.271-1.611 10.05-1.492c6.317 0.13 10.43 3.903 10.43 1.311z\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m23.16 28.47c5.215 1.438 5.603 0.9096 8.204 1.207 1.068 0.1221-2.03 2.67-7.282 4.397\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m50.12 23.92c-5.102-0.06134-7.273-1.882-8.383-3.346\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m48.84 28.47c-5.215 1.438-5.603 0.9096-8.204 1.207-1.068 0.1221 2.03 2.67 7.282 4.397\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const WearyFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m22.88 23.92c5.102-0.06134 7.273-1.882 8.383-3.346\"\n        />\n        <path\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m46.24 47.56c0-2.592-2.867-7.121-10.25-6.93-6.974 0.1812-10.22 4.518-10.22 7.111s4.271-1.611 10.05-1.492c6.317 0.13 10.43 3.903 10.43 1.311z\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m49.12 23.92c-5.102-0.06134-7.273-1.882-8.383-3.346\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m48.24 30.51c-6.199 1.47-7.079 1.059-8.868-1.961\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"m23.76 30.51c6.199 1.47 7.079 1.059 8.868-1.961\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const PerseveringFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <line\n          x1=\"44.5361\"\n          x2=\"50.9214\"\n          y1=\"21.4389\"\n          y2=\"24.7158\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n        />\n        <line\n          x1=\"26.9214\"\n          x2=\"20.5361\"\n          y1=\"21.4389\"\n          y2=\"24.7158\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M24,28c2.3334,1.3333,4.6666,2.6667,7,4c-2.3334,1.3333-4.6666,2.6667-7,4\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M48,28c-2.3334,1.3333-4.6666,2.6667-7,4c2.3334,1.3333,4.6666,2.6667,7,4\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M28,51c0.2704-0.3562,1-8,8.4211-8.0038C43,42.9929,43.6499,50.5372,44,51C38.6667,51,33.3333,51,28,51z\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const FrowningFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M26.5,48c1.8768-3.8326,5.8239-6.1965,10-6c3.8343,0.1804,7.2926,2.4926,9,6\"\n        />\n        <path d=\"M30,31c0,1.6568-1.3448,3-3,3c-1.6553,0-3-1.3433-3-3c0-1.6552,1.3447-3,3-3C28.6552,28,30,29.3448,30,31\" />\n        <path d=\"M48,31c0,1.6568-1.3447,3-3,3s-3-1.3433-3-3c0-1.6552,1.3447-3,3-3S48,29.3448,48,31\" />\n      </g>\n    </svg>\n  );\n};\n\nexport const ConfusedFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"m44.7 43.92c-6.328-1.736-11.41-0.906-17.4 1.902\"\n        />\n        <path d=\"M30,31c0,1.6568-1.3448,3-3,3c-1.6553,0-3-1.3433-3-3c0-1.6552,1.3447-3,3-3C28.6552,28,30,29.3448,30,31\" />\n        <path d=\"M48,31c0,1.6568-1.3447,3-3,3s-3-1.3433-3-3c0-1.6552,1.3447-3,3-3S48,29.3448,48,31\" />\n      </g>\n    </svg>\n  );\n};\n\nexport const NeutralFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <line\n          x1=\"27\"\n          x2=\"45\"\n          y1=\"43\"\n          y2=\"43\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n        />\n        <path d=\"M30,31c0,1.6568-1.3448,3-3,3c-1.6553,0-3-1.3433-3-3c0-1.6552,1.3447-3,3-3C28.6552,28,30,29.3448,30,31\" />\n        <path d=\"M48,31c0,1.6568-1.3447,3-3,3s-3-1.3433-3-3c0-1.6552,1.3447-3,3-3S48,29.3448,48,31\" />\n      </g>\n    </svg>\n  );\n};\n\nexport const SlightlySmilingFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M45.8149,44.9293 c-2.8995,1.6362-6.2482,2.5699-9.8149,2.5699s-6.9153-0.9336-9.8149-2.5699\"\n        />\n        <path d=\"M30,31c0,1.6568-1.3448,3-3,3c-1.6553,0-3-1.3433-3-3c0-1.6552,1.3447-3,3-3C28.6552,28,30,29.3448,30,31\" />\n        <path d=\"M48,31c0,1.6568-1.3447,3-3,3s-3-1.3433-3-3c0-1.6552,1.3447-3,3-3S48,29.3448,48,31\" />\n      </g>\n    </svg>\n  );\n};\n\nexport const SmilingFaceWithSmilingEyes: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M45.8147,45.2268a15.4294,15.4294,0,0,1-19.6294,0\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M31.6941,33.4036a4.7262,4.7262,0,0,0-8.6382,0\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M48.9441,33.4036a4.7262,4.7262,0,0,0-8.6382,0\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const GrinningFaceWithSmilingEyes: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M50.595,41.64a11.5554,11.5554,0,0,1-.87,4.49c-12.49,3.03-25.43.34-27.49-.13a11.4347,11.4347,0,0,1-.83-4.36h.11s14.8,3.59,28.89.07Z\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M49.7251,46.13c-1.79,4.27-6.35,7.23-13.69,7.23-7.41,0-12.03-3.03-13.8-7.36C24.2951,46.47,37.235,49.16,49.7251,46.13Z\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M31.6941,32.4036a4.7262,4.7262,0,0,0-8.6382,0\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeMiterlimit=\"10\"\n          strokeWidth=\"2\"\n          d=\"M48.9441,32.4036a4.7262,4.7262,0,0,0-8.6382,0\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const GrinningSquintingFace: FC<HTMLAttributes<SVGCircleElement>> = (props) => {\n  return (\n    <svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\">\n      <g id=\"line\">\n        <circle\n          cx=\"36\"\n          cy=\"36\"\n          r=\"23\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          {...props}\n        />\n        <polyline\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          points=\"25.168 27.413 31.755 31.427 25.168 35.165\"\n        />\n        <polyline\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          points=\"46.832 27.413 40.245 31.427 46.832 35.165\"\n        />\n\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M50.595,41.64a11.5554,11.5554,0,0,1-.87,4.49c-12.49,3.03-25.43.34-27.49-.13a11.4347,11.4347,0,0,1-.83-4.36h.11s14.8,3.59,28.89.07Z\"\n        />\n        <path\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth=\"2\"\n          d=\"M49.7251,46.13c-1.79,4.27-6.35,7.23-13.69,7.23-7.41,0-12.03-3.03-13.8-7.36C24.2951,46.47,37.235,49.16,49.7251,46.13Z\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const icons = [<svg viewBox=\"0 0 72 72\" xmlns=\"http://www.w3.org/2000/svg\"></svg>];\n","import { useEffect, useState } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { TResponseData } from \"../../../types\";\nimport {\n  ConfusedFace,\n  FrowningFace,\n  GrinningFaceWithSmilingEyes,\n  GrinningSquintingFace,\n  NeutralFace,\n  PerseveringFace,\n  SlightlySmilingFace,\n  SmilingFaceWithSmilingEyes,\n  TiredFace,\n  WearyFace,\n} from \"./emojis\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton, SubmitButton } from \"./survey-button\";\n\ninterface RatingQuestionProps {\n  question: any;\n  value?: number;\n  onChange: (responseData: TResponseData) => void;\n  onSubmit: (data: TResponseData) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: string;\n  loading: boolean;\n}\n\nexport const RatingQuestion = ({\n  question,\n  value,\n  onChange,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  currentQuestionId,\n  loading,\n}: RatingQuestionProps) => {\n  const [hoveredNumber, setHoveredNumber] = useState(0);\n  const isCurrent = question.id === currentQuestionId;\n\n  const handleSelect = (number: number) => {\n    onChange({ [question.id]: number });\n    setTimeout(() => {\n      onSubmit({\n        [question.id]: number,\n      });\n    }, 250);\n  };\n\n  const HiddenRadioInput = ({ number, id }: { number: number; id?: string }) => (\n    <input\n      type=\"radio\"\n      id={id}\n      name=\"rating\"\n      value={number}\n      className=\"invisible absolute left-0 h-full w-full cursor-pointer opacity-0\"\n      onClick={() => handleSelect(number)}\n      required={question.configuration?.required}\n      checked={value === number}\n      readOnly\n    />\n  );\n\n  useEffect(() => {\n    setHoveredNumber(0);\n  }, [question.id, setHoveredNumber]);\n\n  const getRatingNumberOptionColor = (range: number, idx: number) => {\n    if (range > 5) {\n      if (range - idx < 2) return \"bg-emerald-100\";\n      if (range - idx < 4) return \"bg-orange-100\";\n      return \"bg-rose-100\";\n    }\n    if (range < 5) {\n      if (range - idx < 1) return \"bg-emerald-100\";\n      if (range - idx < 2) return \"bg-orange-100\";\n      return \"bg-rose-100\";\n    }\n    if (range - idx < 2) return \"bg-emerald-100\";\n    if (range - idx < 3) return \"bg-orange-100\";\n    return \"bg-rose-100\";\n  };\n\n  const scaleStart = question.configuration?.scaleStart ?? 1;\n  const scaleMaximum = Number(question.configuration?.scaleRange) || 10;\n  const ratingValues = Array.from(\n    { length: scaleMaximum - scaleStart + 1 },\n    (_, index) => index + scaleStart,\n  );\n\n  return (\n    <form\n      key={question.id}\n      onSubmit={(e) => {\n        e.preventDefault();\n      }}\n      className=\"w-full\"\n    >\n      <ScrollableContainer>\n        <div>\n          <div className=\"mb-0 mt-4 flex items-center justify-center\">\n            <fieldset className=\"w-full\">\n              <legend className=\"sr-only\">Choices</legend>\n              <div\n                className={cn(\n                  \"flex w-full overflow-hidden rounded-md bg-[var(--input-background-color)]\",\n                  (question.configuration?.scaleType === \"number\" ||\n                    question.configuration?.scaleType === \"star\") &&\n                    \"border border-[var(--input-border-color)]\",\n                )}\n              >\n                {ratingValues.map((number, i, a) => (\n                  <span\n                    key={number}\n                    onFocus={() => setHoveredNumber(number)}\n                    onMouseOver={() => setHoveredNumber(number)}\n                    onMouseLeave={() => setHoveredNumber(0)}\n                    className=\"flex-1 text-center text-sm\"\n                  >\n                    {question.configuration?.scaleType === \"number\" ? (\n                      <label\n                        tabIndex={isCurrent ? 0 : -1}\n                        onKeyDown={(e) => {\n                          // Accessibility: if spacebar was pressed pass this down to the input\n                          if (e.key === \" \") {\n                            e.preventDefault();\n                            document.getElementById(number.toString())?.click();\n                            document.getElementById(number.toString())?.focus();\n                          }\n                        }}\n                        className={cn(\n                          value === number ? \"bg-accent-selected-bg\" : \"bg-transparent\",\n                          value !== number && hoveredNumber === number\n                            ? \"bg-[var(--input-hover-background-color)]\"\n                            : \"\",\n                          i !== 0 ? \"border-l border-[var(--input-border-color)]\" : \"\",\n                          question.configuration?.colorCodeMode ? \"min-h-[47px]\" : \"min-h-[41px]\",\n                          \"focus-visible:ring-brand relative flex w-full cursor-pointer items-center justify-center overflow-hidden text-[var(--text-color)] hover:bg-[var(--input-hover-background-color)] focus-visible:outline-none focus-visible:ring-2\",\n                        )}\n                      >\n                        {question.configuration?.colorCodeMode && (\n                          <div\n                            className={cn(\n                              \"absolute left-0 top-0 h-[6px] w-full\",\n                              getRatingNumberOptionColor(\n                                question.configuration?.scaleRange,\n                                number,\n                              ),\n                              i === 0 ? \"rounded-l-md\" : \"\",\n                              i === a.length - 1 ? \"rounded-r-md\" : \"\",\n                            )}\n                          />\n                        )}\n                        <HiddenRadioInput number={number} id={number.toString()} />\n                        {number}\n                      </label>\n                    ) : question.configuration?.scaleType === \"star\" ? (\n                      <label\n                        tabIndex={isCurrent ? 0 : -1}\n                        onKeyDown={(e) => {\n                          // Accessibility: if spacebar was pressed pass this down to the input\n                          if (e.key === \" \") {\n                            e.preventDefault();\n                            document.getElementById(number.toString())?.click();\n                            document.getElementById(number.toString())?.focus();\n                          }\n                        }}\n                        className={cn(\n                          number <= hoveredNumber || number <= (value as number)\n                            ? \"text-amber-400\"\n                            : \"text-[#8696AC]\",\n                          hoveredNumber === number ? \"text-amber-400\" : \"\",\n                          \"relative flex max-h-16 min-h-9 cursor-pointer justify-center focus:outline-none\",\n                        )}\n                        onFocus={() => setHoveredNumber(number)}\n                        onBlur={() => setHoveredNumber(0)}\n                      >\n                        <HiddenRadioInput number={number} id={number.toString()} />\n                        <div className=\"h-full w-full max-w-[60px] object-contain\">\n                          <svg\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"currentColor\"\n                          >\n                            <title>hidden radio</title>\n                            <path\n                              fillRule=\"evenodd\"\n                              d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"\n                            />\n                          </svg>\n                        </div>\n                      </label>\n                    ) : (\n                      <label\n                        tabIndex={isCurrent ? 0 : -1}\n                        className={cn(\n                          \"relative flex max-h-16 min-h-9 w-full cursor-pointer justify-center\",\n                          value === number || hoveredNumber === number\n                            ? \"stroke-rating-selected text-rating-selected\"\n                            : \"stroke-heading text-heading focus:border-accent-bg focus:border-2 focus:outline-none\",\n                        )}\n                        onKeyDown={(e) => {\n                          // Accessibility: if spacebar was pressed pass this down to the input\n                          if (e.key === \" \") {\n                            e.preventDefault();\n                            document.getElementById(number.toString())?.click();\n                            document.getElementById(number.toString())?.focus();\n                          }\n                        }}\n                        onFocus={() => setHoveredNumber(number)}\n                        onBlur={() => setHoveredNumber(0)}\n                      >\n                        <HiddenRadioInput number={number} id={number.toString()} />\n                        <div className={cn(\"h-full w-full max-w-[60px] object-contain\")}>\n                          <RatingSmiley\n                            active={value === number || hoveredNumber === number}\n                            idx={i}\n                            range={Number(question.configuration?.scaleRange) || 10}\n                            addColors={question.isColorCodingEnabled}\n                          />\n                        </div>\n                      </label>\n                    )}\n                  </span>\n                ))}\n              </div>\n              <div className=\"mt-4 flex justify-between px-1.5 text-xs leading-6 text-[var(--text-color)] opacity-70\">\n                <p className=\"w-1/2 text-left\" dir=\"auto\">\n                  {question.configuration?.lowerBoundLabel}\n                </p>\n                <p className=\"w-1/2 text-right\" dir=\"auto\">\n                  {question.configuration?.upperBoundLabel}\n                </p>\n              </div>\n            </fieldset>\n          </div>\n        </div>\n      </ScrollableContainer>\n      {!isFirstQuestion ||\n        (!question.configuration?.required && (\n          <div className=\"flex w-full flex-row justify-between px-6 pr-4\">\n            <div>\n              {!isFirstQuestion && (\n                <BackButton\n                  disabled={loading}\n                  tabIndex={isCurrent ? 0 : -1}\n                  backButtonLabel={question.backButtonLabel}\n                  onClick={() => {\n                    onBack();\n                  }}\n                />\n              )}\n            </div>\n            {!question.configuration?.required && (\n              <SubmitButton\n                tabIndex={isCurrent ? 0 : -1}\n                buttonLabel={question.buttonLabel}\n                isLastQuestion={isLastQuestion}\n                loading={loading}\n                onClick={(e) => {\n                  e.preventDefault();\n                  onSubmit({ [question.id]: value ?? \"\" });\n                }}\n              />\n            )}\n          </div>\n        ))}\n    </form>\n  );\n};\n\ninterface RatingSmileyProps {\n  active: boolean;\n  idx: number;\n  range: number;\n  addColors?: boolean;\n}\n\nconst getSmileyColor = (range: number, idx: number) => {\n  if (range > 5) {\n    if (range - idx < 3) return \"fill-emerald-100\";\n    if (range - idx < 5) return \"fill-orange-100\";\n    return \"fill-rose-100\";\n  }\n  if (range < 5) {\n    if (range - idx < 2) return \"fill-emerald-100\";\n    if (range - idx < 3) return \"fill-orange-100\";\n    return \"fill-rose-100\";\n  }\n  if (range - idx < 3) return \"fill-emerald-100\";\n  if (range - idx < 4) return \"fill-orange-100\";\n  return \"fill-rose-100\";\n};\n\nconst getActiveSmileyColor = (range: number, idx: number) => {\n  if (range > 5) {\n    if (range - idx < 3) return \"fill-emerald-300\";\n    if (range - idx < 5) return \"fill-orange-300\";\n    return \"fill-rose-300\";\n  }\n  if (range < 5) {\n    if (range - idx < 2) return \"fill-emerald-300\";\n    if (range - idx < 3) return \"fill-orange-300\";\n    return \"fill-rose-300\";\n  }\n  if (range - idx < 3) return \"fill-emerald-300\";\n  if (range - idx < 4) return \"fill-orange-300\";\n  return \"fill-rose-300\";\n};\n\nconst getSmiley = (\n  iconIdx: number,\n  idx: number,\n  range: number,\n  active: boolean,\n  addColors: boolean,\n) => {\n  const activeColor = addColors ? getActiveSmileyColor(range, idx) : \"fill-rating-fill\";\n  const inactiveColor = addColors ? getSmileyColor(range, idx) : \"fill-none\";\n\n  const icons = [\n    <TiredFace key={0} className={active ? activeColor : inactiveColor} />,\n    <WearyFace key={1} className={active ? activeColor : inactiveColor} />,\n    <PerseveringFace key={2} className={active ? activeColor : inactiveColor} />,\n    <FrowningFace key={3} className={active ? activeColor : inactiveColor} />,\n    <ConfusedFace key={4} className={active ? activeColor : inactiveColor} />,\n    <NeutralFace key={5} className={active ? activeColor : inactiveColor} />,\n    <SlightlySmilingFace key={6} className={active ? activeColor : inactiveColor} />,\n    <SmilingFaceWithSmilingEyes key={7} className={active ? activeColor : inactiveColor} />,\n    <GrinningFaceWithSmilingEyes key={8} className={active ? activeColor : inactiveColor} />,\n    <GrinningSquintingFace key={9} className={active ? activeColor : inactiveColor} />,\n  ];\n  return icons[iconIdx];\n};\n\nexport const RatingSmiley = ({\n  active,\n  idx,\n  range,\n  addColors = false,\n}: RatingSmileyProps): JSX.Element => {\n  let iconsIdx: number[] = [];\n  if (range === 10) iconsIdx = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n  else if (range === 7) iconsIdx = [1, 3, 4, 5, 6, 8, 9];\n  else if (range === 5) iconsIdx = [3, 4, 5, 6, 7];\n  else if (range === 4) iconsIdx = [4, 5, 6, 7];\n  else if (range === 3) iconsIdx = [4, 5, 7];\n\n  return getSmiley(iconsIdx[idx], idx, range, active, addColors);\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { TResponseData } from \"../../../types\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton, SubmitButton } from \"./survey-button\";\n\ninterface MultipleChoiceSingleProps {\n  question: any;\n  value?: string;\n  onChange: (responseData: TResponseData) => void;\n  onSubmit: (data: TResponseData) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: string;\n  loading: boolean;\n}\n\nexport const SingleChoiceQuestion = ({\n  question,\n  value,\n  onChange,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  currentQuestionId,\n  loading,\n}: MultipleChoiceSingleProps) => {\n  const [otherSelected, setOtherSelected] = useState(false);\n  const otherSpecify = useRef<HTMLInputElement | null>(null);\n  const choicesContainerRef = useRef<HTMLDivElement | null>(null);\n  const isCurrent = question.id === currentQuestionId;\n\n  const questionChoices = useMemo(() => {\n    if (!question.configuration.choices) {\n      return [];\n    }\n    return question.configuration.choices;\n  }, [question.configuration.choices]);\n\n  const otherOption = useMemo(\n    () =>\n      question.configuration.choices?.find((choice: { value: string }) => choice.value === \"other\"),\n    [question.configuration.choices],\n  );\n\n  useEffect(() => {\n    // Scroll to the bottom of choices container and focus on 'otherSpecify' input when 'otherSelected' is true\n    if (otherSelected && choicesContainerRef.current && otherSpecify.current) {\n      choicesContainerRef.current.scrollTop = choicesContainerRef.current.scrollHeight;\n      otherSpecify.current.focus();\n    }\n  }, [otherSelected]);\n\n  return (\n    <form onSubmit={(e) => e.preventDefault()} key={question.id} className=\"w-full\">\n      <ScrollableContainer>\n        <div>\n          <div className=\"mt-4\">\n            <fieldset>\n              <legend className=\"sr-only\">Options</legend>\n              <div className=\"relative space-y-2\" role=\"radiogroup\" ref={choicesContainerRef}>\n                {questionChoices.map((choice: { value: string }, idx: number) => {\n                  if (!choice.value || choice.value === \"other\") return;\n                  return (\n                    <label\n                      dir=\"auto\"\n                      key={choice.value}\n                      tabIndex={isCurrent ? 0 : -1}\n                      className={cn(\n                        value === choice.value ? \"z-10 opacity-100\" : \"opacity-90\",\n                        \"relative flex cursor-pointer flex-col rounded-md border border-[var(--input-border-color)] bg-[var(--input-background-color)] p-4 text-[var(--text-color)] focus:outline-none dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\",\n                      )}\n                      onKeyDown={(e) => {\n                        // Accessibility: if spacebar was pressed pass this down to the input\n                        if (e.key === \" \") {\n                          e.preventDefault();\n                          document.getElementById(choice.value)?.click();\n                          document.getElementById(choice.value)?.focus();\n                        }\n                      }}\n                      autoFocus={idx === 0}\n                    >\n                      <span className=\"flex items-center text-sm\">\n                        <input\n                          tabIndex={-1}\n                          type=\"radio\"\n                          id={choice.value}\n                          name={question.id}\n                          value={choice.value}\n                          dir=\"auto\"\n                          className=\"h-4 w-4 appearance-none rounded-full border border-neutral-200 text-indigo-400 checked:appearance-auto focus:ring-0 focus:ring-offset-0\"\n                          aria-labelledby={`${choice.value}-label`}\n                          onChange={() => {\n                            setOtherSelected(false);\n                            onChange({ [question.id]: choice.value });\n                          }}\n                          checked={value === choice.value}\n                          required={question.configuration?.required && idx === 0}\n                        />\n                        <span id={`${choice.value}-label`} className=\"ml-3 mr-3 grow font-medium\">\n                          {choice.value}\n                        </span>\n                      </span>\n                    </label>\n                  );\n                })}\n                {otherOption && (\n                  <label\n                    dir=\"auto\"\n                    tabIndex={isCurrent ? 0 : -1}\n                    className={cn(\n                      value === otherOption.value ? \"z-10 opacity-100\" : \"opacity-90\",\n                      \"rounded-custom relative flex cursor-pointer flex-col border border-[var(--input-border-color)] bg-[var(--input-background-color)] p-4 text-[var(--text-color)] focus:outline-none dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\",\n                    )}\n                    onKeyDown={(e) => {\n                      // Accessibility: if spacebar was pressed pass this down to the input\n                      if (e.key === \" \") {\n                        if (otherSelected) return;\n                        document.getElementById(otherOption.value)?.click();\n                        document.getElementById(otherOption.value)?.focus();\n                      }\n                    }}\n                  >\n                    <span className=\"flex items-center text-sm\">\n                      <input\n                        tabIndex={-1}\n                        dir=\"auto\"\n                        type=\"radio\"\n                        id={otherOption.value}\n                        name={question.id}\n                        value={otherOption.value}\n                        className=\"border-brand text-brand h-4 w-4 border focus:ring-0 focus:ring-offset-0\"\n                        aria-labelledby={`${otherOption.value}-label`}\n                        onChange={() => {\n                          setOtherSelected(!otherSelected);\n                          onChange({ [question.id]: \"\" });\n                        }}\n                        checked={otherSelected}\n                      />\n                      <span\n                        id={`${otherOption.value}-label`}\n                        className=\"ml-3 mr-3 grow font-medium\"\n                        dir=\"auto\"\n                      >\n                        {otherOption.value}\n                      </span>\n                    </span>\n                    {otherSelected && (\n                      <input\n                        ref={otherSpecify}\n                        id={`${otherOption.value}-label`}\n                        dir=\"auto\"\n                        name={question.id}\n                        value={value}\n                        onChange={(e) => {\n                          onChange({ [question.id]: e.currentTarget.value });\n                        }}\n                        className=\"placeholder:text-placeholder border-border text-heading focus:ring-focus rounded-custom mt-3 flex h-10 w-full border bg-neutral-50 px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n                        placeholder={question.otherOptionPlaceholder ?? \"Please specify\"}\n                        required={question.configuration?.required}\n                        aria-labelledby={`${otherOption.value}-label`}\n                      />\n                    )}\n                  </label>\n                )}\n              </div>\n            </fieldset>\n          </div>\n        </div>\n      </ScrollableContainer>\n      {/* {!isFirstQuestion && !question.configuration?.required && ( */}\n      <div className=\"flex w-full flex-row justify-between py-4\">\n        <div>\n          {!isFirstQuestion && (\n            <BackButton\n              tabIndex={isCurrent ? 0 : -1}\n              backButtonLabel={question.backButtonLabel}\n              onClick={() => {\n                onBack();\n              }}\n              disabled={loading}\n            />\n          )}\n        </div>\n        <SubmitButton\n          tabIndex={isCurrent ? 0 : -1}\n          buttonLabel={question.buttonLabel}\n          isLastQuestion={isLastQuestion}\n          loading={loading}\n          // type=\"button\"\n          onClick={(e) => {\n            e.preventDefault();\n            onSubmit({ [question.id]: value ?? \"\" });\n          }}\n        />\n      </div>\n      {/* )} */}\n    </form>\n  );\n};\n","\"use client\";\nimport * as React from \"react\";\nimport { useImperativeHandle } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface UseAutosizeTextAreaProps {\n  textAreaRef: HTMLTextAreaElement | null;\n  minHeight?: number;\n  maxHeight?: number;\n  triggerAutoSize: string;\n}\n\nexport const useAutosizeTextArea = ({\n  textAreaRef,\n  triggerAutoSize,\n  maxHeight = Number.MAX_SAFE_INTEGER,\n  minHeight = 0,\n}: UseAutosizeTextAreaProps) => {\n  const [init, setInit] = React.useState(true);\n  React.useEffect(() => {\n    // We need to reset the height momentarily to get the correct scrollHeight for the textarea\n    const offsetBorder = 2;\n    if (textAreaRef) {\n      if (init) {\n        textAreaRef.style.minHeight = `${minHeight + offsetBorder}px`;\n        if (maxHeight > minHeight) {\n          textAreaRef.style.maxHeight = `${maxHeight}px`;\n        }\n        setInit(false);\n      }\n      textAreaRef.style.height = `${minHeight + offsetBorder}px`;\n      const scrollHeight = textAreaRef.scrollHeight;\n      // We then set the height directly, outside of the render loop\n      // Trying to set this with state or a ref will product an incorrect value.\n      if (scrollHeight > maxHeight) {\n        textAreaRef.style.height = `${maxHeight}px`;\n      } else {\n        textAreaRef.style.height = `${scrollHeight + offsetBorder}px`;\n      }\n    }\n  }, [textAreaRef, triggerAutoSize]);\n};\n\nexport type AutosizeTextAreaRef = {\n  textArea: HTMLTextAreaElement;\n  maxHeight: number;\n  minHeight: number;\n};\n\ntype AutosizeTextAreaProps = {\n  maxHeight?: number;\n  minHeight?: number;\n} & React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const AutosizeTextarea = React.forwardRef<AutosizeTextAreaRef, AutosizeTextAreaProps>(\n  (\n    {\n      maxHeight = Number.MAX_SAFE_INTEGER,\n      minHeight = 64,\n      className,\n      onChange,\n      value,\n      ...props\n    }: AutosizeTextAreaProps,\n    ref: React.Ref<AutosizeTextAreaRef>,\n  ) => {\n    const textAreaRef = React.useRef<HTMLTextAreaElement | null>(null);\n    const [triggerAutoSize, setTriggerAutoSize] = React.useState(\"\");\n\n    useAutosizeTextArea({\n      textAreaRef: textAreaRef.current,\n      triggerAutoSize: triggerAutoSize,\n      maxHeight,\n      minHeight,\n    });\n\n    useImperativeHandle(ref, () => ({\n      textArea: textAreaRef.current as HTMLTextAreaElement,\n      focus: () => textAreaRef.current?.focus(),\n      maxHeight,\n      minHeight,\n    }));\n\n    React.useEffect(() => {\n      setTriggerAutoSize(value as string);\n    }, [props?.defaultValue, value]);\n\n    return (\n      <textarea\n        {...props}\n        value={value}\n        ref={textAreaRef}\n        className={cn(\n          \"hover:border-emphasis dark:focus:border-emphasis shadow-sm placeholder:text-muted disabled:hover:border-input disabled:bg-subtle focus:ring-brand-default focus:border-subtle mb-2 block h-9 rounded-md border px-3 py-2 text-sm leading-4 transition focus:outline-none focus:ring-2 disabled:cursor-not-allowed w-full\",\n          className,\n        )}\n        onChange={(e) => {\n          setTriggerAutoSize(e.target.value);\n          onChange?.(e);\n        }}\n      />\n    );\n  },\n);\nAutosizeTextarea.displayName = \"AutosizeTextarea\";\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          \"flex h-[32px] w-full rounded-md border border-solid px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50\",\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","import { AutosizeTextarea } from \"../../ui/autosize-textarea\";\nimport { Input } from \"../../ui/input\";\nimport type { TResponseDataValue } from \"../../../types\";\nimport { ScrollableContainer } from \"./scrollable-container\";\nimport { BackButton, SubmitButton } from \"./survey-button\";\n\ninterface TextQuestionProps {\n  question: any;\n  value: TResponseDataValue;\n  onChange: (responseData: any) => void;\n  onSubmit: (data: any) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: any;\n  loading: boolean;\n}\n\nexport const OpenTextQuestion = ({\n  question,\n  value,\n  onChange,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  currentQuestionId,\n  loading,\n}: TextQuestionProps) => {\n  const isCurrent = question.id === currentQuestionId;\n  const isRequiredAnswerMissing =\n    Boolean(question.configuration?.required) &&\n    (typeof value !== \"string\" || value.trim().length === 0);\n\n  const handleInputChange = (inputValue: string) => {\n    onChange({ [question.id]: inputValue });\n  };\n\n  return (\n    <form\n      key={question.id}\n      onSubmit={(e) => {\n        e.preventDefault();\n      }}\n      className=\"w-full\"\n    >\n      <ScrollableContainer>\n        <div>\n          <div className=\"mt-4\">\n            {question.configuration?.isShortText ? (\n              <Input\n                tabIndex={isCurrent ? 0 : -1}\n                name={question.id}\n                id={question.id}\n                placeholder={question.placeholder}\n                required={question.configuration?.required}\n                defaultValue={value ? (value as string) : \"\"}\n                type={question.inputType}\n                className=\"border-[var(--input-border-color)] bg-[var(--input-background-color)] text-[var(--text-color)] dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\"\n                onChange={(e) => handleInputChange(e.target.value)}\n              />\n            ) : (\n              <AutosizeTextarea\n                className=\"border-[var(--input-border-color)] bg-[var(--input-background-color)] text-[var(--text-color)] dark:border-[var(--input-border-color)] dark:bg-[var(--input-background-color)] dark:text-[var(--text-color)]\"\n                rows={3}\n                name={question.id}\n                tabIndex={isCurrent ? 0 : -1}\n                aria-label=\"textarea\"\n                id={question.id}\n                maxHeight={120}\n                placeholder={question.placeholder}\n                required={question.configuration?.required}\n                defaultValue={value as string}\n                onChange={(e) => {\n                  handleInputChange(e.target.value);\n                }}\n              />\n            )}\n          </div>\n        </div>\n      </ScrollableContainer>\n      <div className=\"flex w-full flex-row justify-between pt-4\">\n        {!isFirstQuestion && (\n          <BackButton\n            tabIndex={isCurrent ? 0 : -1}\n            backButtonLabel={question.backButtonLabel}\n            onClick={() => {\n              onBack();\n            }}\n            disabled={loading}\n          />\n        )}\n        <SubmitButton\n          tabIndex={isCurrent ? 0 : -1}\n          buttonLabel={question.buttonLabel}\n          isLastQuestion={isLastQuestion}\n          loading={loading}\n          disabled={isRequiredAnswerMissing}\n          onClick={(e) => {\n            e.preventDefault();\n            if (isRequiredAnswerMissing) return;\n            onSubmit({ [question.id]: value });\n          }}\n        />\n      </div>\n    </form>\n  );\n};\n","import { CircleCheckBig } from \"lucide-react\";\nimport { useEffect } from \"react\";\n\ntype TyType = {\n  question: any;\n  isPreview?: boolean;\n  setDismissed: (t: boolean) => void;\n  hasQuestions?: boolean;\n};\n\nexport const ThankyouBlock = ({ question, setDismissed, hasQuestions }: TyType) => {\n  const closeTimer = question.closeTimer || 5;\n\n  useEffect(() => {\n    // Only enable autoclose if there are questions\n    if (hasQuestions) {\n      setTimeout(() => {\n        setDismissed(true);\n      }, closeTimer * 1000);\n    }\n  }, [setDismissed, closeTimer, hasQuestions]);\n\n  return (\n    <>\n      <div className=\"flex-1 text-center flex flex-col items-center justify-center pt-6 pb-8\">\n        <div className=\"py-4\">\n          <CircleCheckBig className=\"text-[var(--unh-brand)] size-16\" />\n        </div>\n        <div className=\"text-lg font-semibold text-[var(--text-color)] py-1\">{question.title}</div>\n        <div className=\"text-sm font-medium text-[var(--text-color)] opacity-80\">\n          {question.subheader}\n        </div>\n        {/* <Button onClick={() => setDismissed(true)} className=\"mt-4\">\n          Close Survey\n\t\t\t\t\t</Button> */}\n      </div>\n      {hasQuestions && (\n        <div className=\"bg-accent-bg h-[5px] w-full overflow-hidden rounded-full\">\n          <div\n            className=\"bg-brand z-20 h-[5px] rounded-full\"\n            style={{\n              backgroundColor: \"var(--unh-brand)\",\n              animation: `${closeTimer}s linear 0s 1 normal forwards running timer-animation`,\n            }}\n          />\n        </div>\n      )}\n    </>\n  );\n};\n","import type { TResponseDataValue } from \"../../../types\";\nimport { ButtonsQuestion } from \"./buttons\";\nimport { MessageQuestion } from \"./message\";\nimport { MultiChoiceQuestion } from \"./multi-select\";\nimport { RatingQuestion } from \"./rating\";\nimport { SingleChoiceQuestion } from \"./survey-dropdown\";\nimport { OpenTextQuestion } from \"./text\";\nimport { ThankyouBlock } from \"./thankyou\";\n\ntype QTType = {\n  question: any;\n  value?: TResponseDataValue;\n  onChange: (responseData: any) => void;\n  onSubmit: (data: any, dismissSurvey?: boolean) => void;\n  onBack: () => void;\n  isFirstQuestion: boolean;\n  isLastQuestion: boolean;\n  currentQuestionId: any;\n  isPreview?: boolean;\n  loading: boolean;\n  setDismissed: (t: boolean) => void;\n  hasQuestions?: boolean;\n};\n\nconst QuestionTypes = ({\n  question,\n  value = \"\",\n  loading,\n  onChange,\n  onSubmit,\n  onBack,\n  isFirstQuestion,\n  isLastQuestion,\n  currentQuestionId,\n  isPreview,\n  setDismissed,\n  hasQuestions,\n}: QTType) => {\n  return question.type === \"text\" ? (\n    <OpenTextQuestion\n      key={question.id}\n      question={question}\n      value={typeof value === \"string\" ? value : \"\"}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n      loading={loading}\n    />\n  ) : question.type === \"message\" ? (\n    <MessageQuestion\n      key={question.id}\n      question={question}\n      value={typeof value === \"string\" ? value : \"\"}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n      loading={loading}\n    />\n  ) : question.type === \"buttons\" ? (\n    <ButtonsQuestion\n      key={question.id}\n      question={question}\n      value={Array.isArray(value) ? value : [\"\"]}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n    />\n  ) : question.type === \"dropdown\" ? (\n    <SingleChoiceQuestion\n      key={question.id}\n      question={question}\n      value={typeof value === \"string\" ? value : \"\"}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n      loading={loading}\n    />\n  ) : question.type === \"ty\" ? (\n    <ThankyouBlock\n      key={question.id}\n      question={question}\n      isPreview={isPreview}\n      setDismissed={setDismissed}\n      hasQuestions={hasQuestions}\n    />\n  ) : question.type === \"multi-select\" ? (\n    <MultiChoiceQuestion\n      key={question.id}\n      question={question}\n      value={Array.isArray(value) ? value : [\"\"]}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n      loading={loading}\n    />\n  ) : question.type === \"rating\" ? (\n    <RatingQuestion\n      key={question.id}\n      question={question}\n      value={typeof value === \"number\" ? value : undefined}\n      onChange={onChange}\n      onSubmit={onSubmit}\n      onBack={onBack}\n      isFirstQuestion={isFirstQuestion}\n      isLastQuestion={isLastQuestion}\n      currentQuestionId={currentQuestionId}\n      loading={loading}\n    />\n  ) : null;\n};\n\nexport default QuestionTypes;\n","import { cx } from \"class-variance-authority\";\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport {\n  evaluateSurveyNextStep,\n  getSurveyQuestionKey,\n  type SurveyAnswers,\n  type SurveyLogicDecision,\n} from \"@userorbit/utils/survey-logic\";\nimport { useResolvedThemeMode } from \"@userorbit/ui/src/shared/hooks/use-resolved-theme-mode\";\nimport { resolveEngagementTheme, type ThemeModeSetting } from \"@userorbit/ui/src/shared/lib/theme\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { getUserorbit } from \"../../lib/analytics\";\nimport { Config } from \"../../lib/config\";\nimport { Logger } from \"../../lib/logger\";\nimport type { SurveyFormType, TResponseData } from \"../../types\";\nimport request from \"../../utils/api\";\nimport { resolveSubscriberPropertiesDeep } from \"../../utils/subscriber-properties\";\nimport { AnimateChangeInHeight } from \"./AnimateChangeInHeight\";\nimport QuestionTypes from \"./survey-questions\";\nimport { isPoweredByRequiredPlan } from \"../floating-widget/branding\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\n\nconst getSurveyBaseTheme = (\n  product: any,\n  surveyConfiguration: SurveyFormType[\"configuration\"] | undefined | null,\n) => {\n  const themes = product?.configuration?.themes;\n  const themeId = surveyConfiguration?.themeId;\n\n  if (Array.isArray(themes) && themes.length > 0) {\n    return (\n      (themeId ? themes.find((theme: any) => theme?.id === themeId) : undefined) ||\n      themes.find((theme: any) => theme?.id === \"default\") ||\n      themes[0]\n    );\n  }\n\n  return surveyConfiguration?.theme || product?.theme;\n};\n\nexport const resolveSurveyDesign = ({\n  product,\n  surveyConfiguration,\n  mode,\n}: {\n  product: any;\n  surveyConfiguration: SurveyFormType[\"configuration\"] | undefined | null;\n  mode: ThemeModeSetting;\n}) => {\n  const design = resolveEngagementTheme({\n    theme: getSurveyBaseTheme(product, surveyConfiguration),\n    overrideTheme: surveyConfiguration?.design,\n    mode,\n  }) as NonNullable<SurveyFormType[\"configuration\"]>[\"design\"];\n\n  return {\n    ...design,\n    ...(surveyConfiguration?.disableBranding != null\n      ? { disableBranding: surveyConfiguration.disableBranding }\n      : {}),\n  };\n};\n\nexport default function SurveyPreview({\n  survey,\n  activeQuestion,\n  setActiveQuestion,\n  attributes,\n  account,\n  product,\n  config: providedConfig,\n  onShown,\n  onRequestClose,\n}: {\n  survey: SurveyFormType;\n  activeQuestion: number;\n  attributes: any;\n  account: string;\n  product: any;\n  config?: any;\n  setActiveQuestion: (idx: number) => void;\n  onShown?: () => void | Promise<boolean>;\n  onRequestClose?: (reason: string) => void;\n}) {\n  logger.log(\"survey\", survey);\n\n  const initialConfig = providedConfig || config.get();\n  const [themeSetting, setThemeSetting] = useState<ThemeModeSetting>(\n    initialConfig?.theme || initialConfig?.widget?.theme || \"light\",\n  );\n  const [isDismissed, setDismissed] = useState(false);\n  const getQuestionsWithThankYou = () => {\n    const resolveQuestion = (question: any) =>\n      resolveSubscriberPropertiesDeep(question, attributes) as typeof question;\n    const resolvedEnding = survey.configuration?.ending\n      ? (resolveSubscriberPropertiesDeep(survey.configuration.ending, attributes) as any)\n      : survey.configuration?.ending;\n    return [\n      ...(survey.questions.length ? survey.questions.map(resolveQuestion) : []),\n      ...(survey.configuration?.ending?.hideThankYou\n        ? survey.questions.length\n          ? []\n          : [\n              {\n                id: \"ty\",\n                type: \"ty\",\n                ...resolvedEnding,\n              },\n            ]\n        : [\n            {\n              id: \"ty\",\n              type: \"ty\",\n              ...resolvedEnding,\n            },\n          ]),\n    ];\n  };\n  const [questions, setQuestions] = useState(getQuestionsWithThankYou());\n  const [responseData, setResponseData] = useState<TResponseData>({});\n  const firstQuestionKey = survey.questions[0]\n    ? getSurveyQuestionKey(survey.questions[0], 0)\n    : \"ending\";\n  const [questionHistory, setQuestionHistory] = useState<string[]>([firstQuestionKey]);\n  const [logicDecisions, setLogicDecisions] = useState<SurveyLogicDecision[]>([]);\n  const submissionInFlight = useRef(false);\n\n  useEffect(() => {\n    setQuestions(getQuestionsWithThankYou());\n  }, [survey, attributes]);\n\n  useEffect(() => {\n    void onShown?.();\n    getUserorbit()?.track(\"$uo_survey_view\", { survey_id: survey.id, survey_name: survey.title });\n  }, [survey.id, onShown]);\n\n  useEffect(() => {\n    if (isDismissed) onRequestClose?.(\"closed\");\n  }, [isDismissed, onRequestClose]);\n\n  useEffect(() => {\n    const handler = (event: Event) => {\n      const detail = (event as CustomEvent).detail;\n      if (detail?.theme) setThemeSetting(detail.theme);\n    };\n\n    window.addEventListener(\"uojs-config-update\", handler);\n    return () => window.removeEventListener(\"uojs-config-update\", handler);\n  }, []);\n\n  const question = questions[activeQuestion] || questions[0];\n\n  const progress = Math.min((activeQuestion + 1) / Math.max(survey.questions.length, 1), 1);\n\n  // useEffect(() => {\n  //   setQuestionId(survey?.questions[activeQuestion]?.id || survey?.questions[0]?.id)\n  // }, [activeQuestion])\n\n  const onChange = (responseDataUpdate: TResponseData) => {\n    logger.log(\"onChange\", responseData, {\n      ...responseData,\n      ...responseDataUpdate,\n    });\n    const updatedResponseData = { ...responseData, ...responseDataUpdate };\n    setResponseData(updatedResponseData);\n  };\n\n  const [isLoading, setLoadingElement] = useState(false);\n\n  const onSubmit = async (questionResponse: TResponseData, closeSurvey?: boolean) => {\n    if (submissionInFlight.current) return;\n\n    const retainedAnswerIds = new Set(\n      questionHistory.map((historyKey) => {\n        const historyIndex = survey.questions.findIndex(\n          (candidate, index) => getSurveyQuestionKey(candidate, index) === historyKey,\n        );\n        const historyQuestion = survey.questions[historyIndex];\n        return historyQuestion?.id || historyKey;\n      }),\n    );\n    const pathAnswers = Object.fromEntries(\n      Object.entries(responseData).filter(([questionId]) => retainedAnswerIds.has(questionId)),\n    );\n    const updatedResponseData = { ...pathAnswers, ...questionResponse };\n    setResponseData(updatedResponseData);\n\n    submissionInFlight.current = true;\n    setLoadingElement(true);\n\n    try {\n      if (closeSurvey) {\n        await submitSurvey(updatedResponseData, false, true, logicDecisions, questionHistory);\n        setDismissed(true);\n        return;\n      }\n\n      const currentSurveyQuestion = survey.questions[activeQuestion];\n      if (!currentSurveyQuestion) return;\n\n      const currentQuestionKey = getSurveyQuestionKey(currentSurveyQuestion, activeQuestion);\n      const decision = evaluateSurveyNextStep({\n        questions: survey.questions,\n        currentQuestionKey,\n        answers: updatedResponseData as SurveyAnswers,\n      });\n      const nextDecisions = [...logicDecisions, decision];\n      const nextQuestionIndex =\n        decision.destination.type === \"ending\"\n          ? questions.findIndex((candidate) => candidate.type === \"ty\")\n          : survey.questions.findIndex(\n              (candidate, index) =>\n                getSurveyQuestionKey(candidate, index) === decision.destination.key,\n            );\n      const nextKey = decision.destination.type === \"ending\" ? \"ending\" : decision.destination.key;\n      const nextHistory = [...questionHistory, nextKey];\n      const isLastQuestion = decision.destination.type === \"ending\";\n\n      await submitSurvey(updatedResponseData, isLastQuestion, false, nextDecisions, nextHistory);\n\n      setLogicDecisions(nextDecisions);\n      setQuestionHistory(nextHistory);\n      if (nextQuestionIndex >= 0) {\n        setActiveQuestion(nextQuestionIndex);\n      } else if (isLastQuestion) {\n        setDismissed(true);\n      }\n    } catch (error) {\n      logger.error(\"Failed to save survey response\", error);\n    } finally {\n      submissionInFlight.current = false;\n      setLoadingElement(false);\n    }\n  };\n\n  const submitSurvey = async (\n    responseData: TResponseData,\n    isLastQuestion: boolean,\n    dismissSurvey?: boolean,\n    decisions: SurveyLogicDecision[] = logicDecisions,\n    history: string[] = questionHistory,\n  ) => {\n    logger.log(\"questionResponse\", responseData);\n\n    const userorbit = getUserorbit();\n    const data = await request(\"public/survey-subscribers.update\", {\n      token: attributes.code,\n      account: account,\n      surveyId: survey.id,\n      completedQuestions: JSON.stringify(responseData),\n      responseContext: {\n        version: 1,\n        visitedQuestionIds: history\n          .map((historyKey) => {\n            const historyIndex = survey.questions.findIndex(\n              (candidate, index) => getSurveyQuestionKey(candidate, index) === historyKey,\n            );\n            return survey.questions[historyIndex]?.id;\n          })\n          .filter((questionId): questionId is string => Boolean(questionId)),\n        decisions,\n      },\n      isLastQuestion,\n      isDismissed: !!dismissSurvey,\n      browserLifecycleEvents:\n        userorbit && isLastQuestion && !dismissSurvey ? [\"$uo_survey_completed\"] : undefined,\n    });\n    if (!data?.data) {\n      throw new Error(\"Survey response update returned no subscriber data\");\n    }\n\n    try {\n      config.update({\n        ...config.get(),\n        personState: {\n          ...config.get().personState,\n          data: {\n            ...config.get().personState.data,\n            surveys: config\n              .get()\n              .personState.data.surveys.map((survey: any) =>\n                survey.id === data.data.surveyId\n                  ? { ...survey, surveySubscriber: data.data }\n                  : survey,\n              ),\n          },\n        },\n      });\n    } catch (error) {\n      logger.error(\"Failed to update the cached survey subscriber\", error);\n    }\n\n    if (dismissSurvey) {\n      userorbit?.track(\"$uo_survey_dismissed\", { survey_id: survey.id });\n    } else if (isLastQuestion) {\n      userorbit?.track(\"$uo_survey_completed\", {\n        survey_id: survey.id,\n        survey_title: survey.title,\n      });\n    }\n  };\n\n  const onBack = (): void => {\n    if (questionHistory.length <= 1) return;\n    const nextHistory = questionHistory.slice(0, -1);\n    const previousKey = nextHistory[nextHistory.length - 1];\n    const previousIndex =\n      previousKey === \"ending\"\n        ? questions.findIndex((candidate) => candidate.type === \"ty\")\n        : survey.questions.findIndex(\n            (candidate, index) => getSurveyQuestionKey(candidate, index) === previousKey,\n          );\n    if (previousIndex >= 0) {\n      setQuestionHistory(nextHistory);\n      setLogicDecisions((decisions) => decisions.slice(0, -1));\n      setActiveQuestion(previousIndex);\n    }\n  };\n\n  const resolvedThemeMode = useResolvedThemeMode(themeSetting);\n  const design = resolveSurveyDesign({\n    product,\n    surveyConfiguration: survey.configuration,\n    mode: resolvedThemeMode,\n  });\n\n  if (isDismissed) return null;\n\n  const style: any = {\n    \"--unh-brand\": design?.brandColor || \"#3912e2\",\n    \"--input-color\": design?.inputColor || \"#fff\",\n    \"--input-background-color\": design?.inputBackgroundColor || design?.backgroundColor || \"#fff\",\n    \"--input-border-color\": design?.inputBorderColor || design?.borderColor || \"#e2e8f0\",\n    \"--input-hover-background-color\": \"color-mix(in srgb, var(--text-color) 8%, transparent)\",\n    \"--background-color\": design?.backgroundColor || \"#FFF\",\n    \"--text-color\": design?.textColor || \"#111\",\n    \"--color-primary\": design?.brandColor || \"#3912e2\",\n    \"--border-color\": design?.borderColor || \"#e8e8e8\",\n    \"--border-width\": design?.borderWidth || \"1px\",\n    \"--next-button-bg-color\": design?.nextButtonColor || \"#3912e2\",\n    \"--next-button-text-color\": design?.nextButtonTextColor || \"#FFF\",\n    \"--next-button-border-color\": design?.nextButtonBorderColor || \"#3912e2\",\n    \"--next-button-hover-color\": design?.nextButtonHoverColor || \"#281386\",\n    \"--secondary-button-bg-color\": design?.secondaryButtonColor || \"#fff\",\n    \"--secondary-button-text-color\": design?.secondaryButtonTextColor || \"#111\",\n    \"--secondary-button-border-color\": design?.secondaryButtonBorderColor || \"#fff\",\n    \"--secondary-button-hover-color\": design?.secondaryButtonHoverColor || \"#fff\",\n    \"--progress-bg-color\": design?.progressBgColor || \"#eee\",\n    \"--progress-color\": design?.progressColor || \"#3912e2\",\n    \"--overlay-color\": design?.overlayColor || \"#FFF\",\n    \"--overlay-opacity\": design?.overlayColorOpacity || \"100\",\n    \"--border-radius\": `${design?.borderRadius || 8}px`,\n    \"--box-shadow\":\n      design?.boxShadow ||\n      \"0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1)\",\n  };\n\n  const disableBranding =\n    Boolean(product?.plan) &&\n    !isPoweredByRequiredPlan(product.plan) &&\n    design?.disableBranding !== false;\n\n  return (\n    <div style={style}>\n      <motion.div\n        initial={{ x: \"40px\", opacity: 0 }}\n        animate={{ x: \"0px\", opacity: 1 }}\n        exit={{ x: \"-40px\", opacity: 0 }}\n        transition={{\n          type: \"spring\",\n          duration: \"0.5s\",\n        }}\n        className={cx(\n          \"fixed bottom-5 right-5 z-[2147483646] flex list-none items-end overflow-hidden rounded-lg border shadow-xl\",\n          \"border-[var(--border-color)]] bg-[var(--background-color)]\",\n          design?.width ? `w-[${design.width}px]` : \"w-[400px]\",\n        )}\n      >\n        <>\n          {isDismissed ? null : (\n            <motion.div\n              key={survey.id}\n              className=\"w-full\"\n              style={{\n                width: design?.width ? `${design.width}px` : \"400px\",\n              }}\n            >\n              <div className=\"flex min-h-40 w-full flex-col\">\n                <button\n                  type=\"button\"\n                  className=\"hover:opacity absolute right-4 top-4 flex cursor-pointer items-center gap-2 rounded-sm border border-[var(--border-color)] bg-transparent p-1.5 text-xs font-medium opacity-50 transition-all\"\n                  disabled={isLoading}\n                  onClick={() => {\n                    if (question?.type === \"ty\") {\n                      setDismissed(true);\n                    } else {\n                      void onSubmit({}, true);\n                    }\n                  }}\n                >\n                  <X className=\"size-4 text-[var(--text-color)] hover:opacity-80\" />\n                </button>\n                {question?.id && (\n                  <div className=\"flex-grow px-4 py-4\">\n                    <AnimateChangeInHeight>\n                      <div className={isLoading ? \"opacity-50\" : \"\"}>\n                        {question.type !== \"ty\" && (\n                          <>\n                            <div className=\"pr-8 text-base font-semibold text-[var(--text-color)]\">\n                              {question.title}\n                            </div>\n                            {question.subheader && (\n                              <div className=\"whitespace-pre-wrap pr-5 pt-3 text-sm text-[var(--text-color)] opacity-80\">\n                                {question.subheader}\n                              </div>\n                            )}\n                          </>\n                        )}\n                        <QuestionTypes\n                          question={question}\n                          isPreview\n                          value={question?.id && responseData[question?.id]}\n                          onChange={onChange}\n                          onSubmit={onSubmit}\n                          onBack={onBack}\n                          isFirstQuestion={questionHistory.length <= 1}\n                          isLastQuestion={\n                            question.id === survey.questions[survey.questions.length - 1]?.id\n                          }\n                          loading={isLoading}\n                          currentQuestionId={question.id}\n                          setDismissed={setDismissed}\n                          hasQuestions={survey.questions.length > 0}\n                        />\n                      </div>\n                    </AnimateChangeInHeight>\n                  </div>\n                )}\n                <div className=\"w-full\">\n                  {design?.showProgress && activeQuestion !== questions.length - 1 && (\n                    <div className={disableBranding ? \"\" : \"px-4\"}>\n                      <div className=\"h-[5px] w-full overflow-hidden rounded-full bg-[var(--progress-bg-color)]\">\n                        <div\n                          className=\"transition-width z-20 h-[5px] rounded-full duration-500\"\n                          style={{\n                            backgroundColor: \"var(--progress-color)\",\n                            width: `${Math.floor(progress * 100)}%`,\n                          }}\n                        />\n                      </div>\n                    </div>\n                  )}\n                  {!disableBranding && <UserorbitBranding />}\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </>\n      </motion.div>\n    </div>\n  );\n}\n\nexport const UserorbitBranding = () => {\n  return (\n    <div className=\"flex justify-between py-1\">\n      <div className=\"flex items-center gap-2 px-4 text-xs font-medium leading-8 text-[var(--text-color)] opacity-50\">\n        <svg\n          width=\"80\"\n          height=\"80\"\n          viewBox=\"0 0 80 80\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          className=\"h-5 w-5 grayscale\"\n        >\n          <title>logo</title>\n          <path\n            d=\"M6.66675 46.6667C6.66675 37.3323 6.66675 32.6654 8.48331 29.1002C10.0812 25.9641 12.6309 23.4144 15.7669 21.8166C19.3321 20 23.9992 20 33.3334 20H46.6667C56.0011 20 60.6681 20 64.2334 21.8166C67.3694 23.4144 69.9191 25.9641 71.5167 29.1002C73.3334 32.6654 73.3334 37.3323 73.3334 46.6667C73.3334 56.001 73.3334 60.668 71.5167 64.2333C69.9191 67.3693 67.3694 69.919 64.2334 71.5167C60.6681 73.3333 56.0011 73.3333 46.6667 73.3333H33.3334C23.9992 73.3333 19.3321 73.3333 15.7669 71.5167C12.6309 69.919 10.0812 67.3693 8.48331 64.2333C6.66675 60.668 6.66675 56.001 6.66675 46.6667Z\"\n            fill=\"#3912E4\"\n            stroke=\"#3912E4\"\n            strokeWidth=\"5\"\n          />\n          <g opacity=\"0.5\">\n            <path\n              fillRule=\"evenodd\"\n              clipRule=\"evenodd\"\n              d=\"M71.5794 16.6454C70.5014 17.0367 69.3381 17.25 68.125 17.25C62.5711 17.25 58.0619 12.7785 58.0006 7.23924C53.5014 6.66663 47.692 6.66663 40.0001 6.66663C24.2866 6.66663 16.4298 6.66663 11.5483 11.5482C6.66675 16.4297 6.66675 24.2865 6.66675 40H73.3334C73.3334 28.8289 73.3334 21.6287 71.5794 16.6454Z\"\n              fill=\"#3912E4\"\n            />\n            <path\n              d=\"M71.5794 16.6454L73.9376 15.8154L73.0995 13.4343L70.7265 14.2954L71.5794 16.6454ZM58.0006 7.23924L60.5005 7.2116L60.4764 5.03416L58.3163 4.75924L58.0006 7.23924ZM11.5483 11.5482L13.3161 13.316L13.3161 13.316L11.5483 11.5482ZM6.66675 40H4.16675V42.5H6.66675V40ZM73.3334 40V42.5H75.8334V40H73.3334ZM68.125 19.75C69.6332 19.75 71.0848 19.4845 72.4323 18.9955L70.7265 14.2954C69.918 14.5888 69.0431 14.75 68.125 14.75V19.75ZM55.5008 7.26688C55.5771 14.1744 61.1996 19.75 68.125 19.75V14.75C63.9426 14.75 60.5466 11.3825 60.5005 7.2116L55.5008 7.26688ZM40.0001 9.16663C47.7581 9.16663 53.3802 9.17137 57.685 9.71924L58.3163 4.75924C53.6226 4.16189 47.6259 4.16663 40.0001 4.16663V9.16663ZM13.3161 13.316C15.2149 11.4171 17.784 10.3275 22.0453 9.75453C26.3786 9.17194 32.0727 9.16663 40.0001 9.16663V4.16663C32.214 4.16663 26.123 4.16132 21.3791 4.79911C16.5633 5.44658 12.7632 6.79772 9.78054 9.78043L13.3161 13.316ZM9.16675 40C9.16675 32.0725 9.17206 26.3785 9.75465 22.0452C10.3276 17.7839 11.4172 15.2148 13.3161 13.316L9.78055 9.78042C6.79784 12.7631 5.4467 16.5632 4.79924 21.379C4.16144 26.1228 4.16675 32.2139 4.16675 40H9.16675ZM73.3334 37.5H6.66675V42.5H73.3334V37.5ZM69.2212 17.4755C69.9818 19.6365 70.4036 22.4066 70.6183 26.1456C70.8325 29.8775 70.8334 34.3894 70.8334 40H75.8334C75.8334 34.4395 75.8343 29.7657 75.6101 25.859C75.3862 21.9593 74.931 18.6377 73.9376 15.8154L69.2212 17.4755Z\"\n              fill=\"#3912E4\"\n            />\n          </g>\n          <path\n            d=\"M68.625 11.25C71.1794 11.25 73.25 9.17931 73.25 6.625C73.25 4.07069 71.1794 2 68.625 2C66.0706 2 64 4.07069 64 6.625C64 9.17931 66.0706 11.25 68.625 11.25Z\"\n            fill=\"#3912E4\"\n          />\n          <path\n            d=\"M51.33 58.354C49.97 59.374 48.6327 59.884 47.318 59.884C46.0033 59.884 44.9607 59.544 44.19 58.864C43.4193 58.184 43.034 57.164 43.034 55.804C43.034 55.4187 43.0453 55.124 43.068 54.92L42.728 54.818C40.484 58.1727 37.4693 59.85 33.684 59.85C30.0347 59.85 28.21 57.9233 28.21 54.07C28.21 52.778 28.3913 51.0667 28.754 48.936C29.1167 46.7827 29.4227 44.9693 29.672 43.496C29.944 42 30.1253 40.98 30.216 40.436L28.414 36.798C29.842 35.982 31.0773 35.37 32.12 34.962C33.1853 34.554 34.2507 34.35 35.316 34.35C36.3813 34.35 37.0953 34.6333 37.458 35.2C37.8433 35.744 38.036 36.4013 38.036 37.172C38.036 37.9427 37.6507 40.4133 36.88 44.584C36.132 48.7547 35.758 51.1913 35.758 51.894C35.758 53.6847 36.37 54.58 37.594 54.58C38.5007 54.58 39.532 54.002 40.688 52.846C41.844 51.69 42.7847 50.1033 43.51 48.086C43.034 46.7033 42.796 45.2753 42.796 43.802C42.796 41.1727 43.442 38.94 44.734 37.104C46.0487 35.268 47.896 34.35 50.276 34.35C51.5907 34.35 52.6447 34.5653 53.438 34.996C53.234 36.22 52.8373 38.4413 52.248 41.66C50.956 48.4827 50.31 52.404 50.31 53.424C50.31 55.6227 50.65 57.266 51.33 58.354Z\"\n            fill=\"white\"\n          />\n        </svg>\n        Made with Userorbit\n      </div>\n    </div>\n  );\n};\n","import { useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport type { SurveyPreviewProps } from \"../../types\";\nimport SurveyPreview from \"./survey-preview\";\n\nconst Survey = (\n  props: SurveyPreviewProps & {\n    parent?: Element;\n    onShown?: () => void | Promise<boolean>;\n    onRequestClose?: (reason: string) => void;\n  },\n): any => {\n  const [activeQuestion, setActiveQuestion] = useState(0);\n\n  return ReactDOM.createPortal(\n    <div id=\"uojs\">\n      <SurveyPreview\n        {...props}\n        activeQuestion={activeQuestion}\n        setActiveQuestion={setActiveQuestion}\n      />\n    </div>,\n    props.parent || document.body,\n  );\n};\n\nexport default Survey;\n","import {\n  ButtonWidgetTarget,\n  StepInterface,\n  TourInterface,\n  TourPreviewProps,\n} from \"@userorbit/types/tour\";\nimport StepPreview from \"@userorbit/ui/src/components/step-preview/step-preview\";\nimport type { StepTargetResolutionReport } from \"@userorbit/ui/src/components/guide\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ThemeModeSetting } from \"@userorbit/ui/src/shared/lib/theme\";\nimport { getUserorbit } from \"../../lib/analytics\";\nimport { Config } from \"../../lib/config\";\nimport { Logger } from \"../../lib/logger\";\nimport { getSessionId } from \"../../lib/sessionTracking\";\nimport { endTourLaunch, markTourLaunchShown } from \"../../lib/tourLaunch\";\nimport {\n  findSurveyById,\n  findTourById,\n  openWidgetDrawer,\n  triggerSurvey,\n  triggerTour,\n} from \"../../lib/widget\";\nimport request from \"../../utils/api\";\nimport { resolveSubscriberProperties } from \"../../utils/subscriber-properties\";\nimport {\n  filterByCompletedStepsAndPath,\n  isTourSnoozeActive,\n  scheduleTourSnoozeExpiry,\n} from \"../../utils/tour\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nconst reportedTourSteps = new Set<string>();\nconst targetHealthStates = new Map<string, \"healthy\" | \"missing\">();\n\nfunction compareSteps(a: StepInterface, b: StepInterface) {\n  const orderDifference = (Number(a.order) || 0) - (Number(b.order) || 0);\n  if (orderDifference !== 0) return orderDifference;\n\n  const aCreatedAt = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n  const bCreatedAt = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n  if (aCreatedAt !== bCreatedAt) return aCreatedAt - bCreatedAt;\n\n  return String(a.id || \"\").localeCompare(String(b.id || \"\"));\n}\n\nconst getSubscriberCompletedStepId = (subscriber: any, tour: TourInterface) => {\n  const activeTour = subscriber.tours.find(\n    (subscriberTour: TourInterface) => subscriberTour.id === tour.id,\n  );\n\n  if (activeTour) {\n    const frequency = tour?.configuration?.targeting?.frequency;\n    const subscriberState = activeTour.tourSubscriber?.state;\n\n    if (subscriberState === \"SN\") {\n      return null;\n    }\n\n    const overrideDismissed = tour?.configuration?.targeting?.overrideDismissed;\n    if (\n      (frequency === \"repeat\" || frequency === \"n_times\") &&\n      (subscriberState === \"CO\" || (subscriberState === \"DM\" && overrideDismissed))\n    ) {\n      return null;\n    }\n\n    return activeTour.tourSubscriber?.completedStepId || null;\n  }\n\n  return null;\n};\n\ninterface PreviewWrapperProps {\n  closePreview?: () => void;\n  tour: any;\n  token?: string;\n  account?: string;\n  subscriber?: any;\n  isRestartedTour: boolean;\n  onTourComplete?: () => void;\n  onShown?: () => void | Promise<boolean>;\n  onRenderFailed?: (reason: string) => void;\n}\n\nconst PreviewWrapper = (props: PreviewWrapperProps) => {\n  if (!props) return null;\n  const { isRestartedTour } = props;\n  const activeTour = props.subscriber?.tours?.find(\n    (tour: TourInterface) => tour.id === props.tour.id,\n  );\n  const activeTourCompletedStepId = activeTour?.tourSubscriber?.completedStepId;\n  const steps = useMemo(\n    () => (props.tour.steps ? props.tour.steps.slice().sort(compareSteps) : props.tour.steps),\n    [props.tour.steps],\n  );\n  const [filteredSteps, setFilteredSteps] = useState<StepInterface[]>([]);\n  const [themeSetting, setThemeSetting] = useState<ThemeModeSetting>(\n    config.get()?.theme || config.get()?.widget?.theme || \"light\",\n  );\n  const [completedTillStepId, setCompletedTillStepId] = useState(\n    isRestartedTour\n      ? null\n      : props.subscriber\n        ? getSubscriberCompletedStepId(props.subscriber, props.tour)\n        : props.subscriber\n          ? props.subscriber.completedStepId\n          : null,\n  );\n\n  const hasIncrementedViewRef = useRef<boolean>(false);\n  const initialCompletedStepIdRef = useRef<string | null>(\n    isRestartedTour\n      ? null\n      : props.subscriber\n        ? getSubscriberCompletedStepId(props.subscriber, props.tour)\n        : props.subscriber\n          ? props.subscriber.completedStepId\n          : null,\n  );\n\n  const hasPerformedInitialFilterRef = useRef<boolean>(false);\n\n  const isAnnouncementTour =\n    props.tour.configuration && props.tour.configuration.type === \"announcement\";\n  const announcementId =\n    isAnnouncementTour && props.tour.configuration ? props.tour.configuration.announcementId : null;\n\n  const processedSteps = useMemo(() => {\n    if (!isAnnouncementTour || !steps) return steps;\n    return steps.map((step: StepInterface) => {\n      const config = step.configuration;\n      if (config && config.primaryButton && config.primaryButton.action === \"custom\") {\n        return {\n          ...step,\n          configuration: {\n            ...config,\n            primaryButton: { ...config.primaryButton, action: \"next\" as const },\n          },\n        };\n      }\n      return step;\n    });\n  }, [steps, isAnnouncementTour]);\n\n  const trackTourProgress = async (\n    suspendTour: boolean,\n    stepId?: string | number | null,\n    options?: { snooze?: boolean },\n  ) => {\n    const snoozeTour = options?.snooze === true;\n    try {\n      setCompletedTillStepId(stepId);\n      config.update({\n        ...config.get(),\n        personState: {\n          ...config.get().personState,\n          data: {\n            ...config.get().personState.data,\n            tours: config\n              .get()\n              .personState.data.tours.map((tour: any) =>\n                tour.id === props.tour.id\n                  ? { ...tour, tourSubscriber: { ...tour.tourSubscriber, completedStepId: stepId } }\n                  : tour,\n              ),\n          },\n        },\n      });\n\n      const isLastStep = steps[steps.length - 1].id === stepId;\n      const stepIndex = steps.findIndex((s: StepInterface) => s.id === stepId);\n      if (isLastStep || suspendTour || snoozeTour) endTourLaunch(props.tour.id);\n\n      if (isAnnouncementTour && announcementId && isLastStep && !suspendTour && !snoozeTour) {\n        void openWidgetDrawer({ tab: \"updates\", announcementId });\n      }\n\n      const userorbit = getUserorbit();\n      if (snoozeTour) {\n        userorbit?.track(\"$uo_tour_snoozed\", { tour_id: props.tour.id, step_id: stepId });\n      } else if (suspendTour) {\n        userorbit?.track(\"$uo_tour_dismissed\", { tour_id: props.tour.id, step_id: stepId });\n      } else if (isLastStep) {\n        userorbit?.track(\"$uo_tour_completed\", {\n          tour_id: props.tour.id,\n          tour_title: props.tour.title,\n        });\n      } else {\n        userorbit?.track(\"$uo_tour_step_completed\", {\n          tour_id: props.tour.id,\n          step_id: stepId,\n          step_index: stepIndex,\n        });\n      }\n\n      const data = await request(\"public/tour-subscribers.update\", {\n        token: props.token,\n        account: props.account,\n        tourId: props.tour.id,\n        suspendTour,\n        snoozeTour,\n        stepId,\n        isLastStep,\n        browserLifecycleEvents:\n          userorbit && isLastStep && !suspendTour && !snoozeTour\n            ? [\"$uo_tour_completed\"]\n            : undefined,\n      });\n\n      if (data?.data) {\n        const updatedTours = config\n          .get()\n          .personState.data.tours.map((tour: any) =>\n            tour.id === data.data.tourId ? { ...tour, tourSubscriber: data.data } : tour,\n          );\n        config.update({\n          ...config.get(),\n          personState: {\n            ...config.get().personState,\n            data: {\n              ...config.get().personState.data,\n              tours: updatedTours,\n            },\n          },\n        });\n\n        if (snoozeTour) {\n          scheduleTourSnoozeExpiry(data.data.tourId, data.data.snoozedUntil, async () => {\n            const resumedTour = findTourById(data.data.tourId);\n            if (!resumedTour || isTourSnoozeActive(resumedTour.tourSubscriber)) return;\n            const subscriberState = resumedTour.tourSubscriber?.state;\n            const overrideDismissed = resumedTour.configuration?.targeting?.overrideDismissed;\n            if (subscriberState === \"CO\" || (subscriberState === \"DM\" && !overrideDismissed)) {\n              return;\n            }\n            const completedStepId =\n              subscriberState === \"SN\"\n                ? null\n                : (resumedTour.tourSubscriber?.completedStepId ?? null);\n            if (\n              filterByCompletedStepsAndPath(resumedTour.steps || [], completedStepId).length === 0\n            ) {\n              return;\n            }\n\n            const latestTours = config.get()?.personState?.data?.tours ?? [];\n            await triggerTour(resumedTour, false, {\n              source: \"resume\",\n              bypassCaps: true,\n              serverOrder: latestTours.findIndex(\n                (tour: TourInterface) => tour.id === resumedTour.id,\n              ),\n            });\n          });\n        }\n      }\n    } catch (error) {\n      logger.error(\"Failed to track tour progress:\", error);\n    }\n  };\n\n  const hasReportedShownRef = useRef(false);\n\n  const reportShown = () => {\n    if (hasReportedShownRef.current) return;\n    hasReportedShownRef.current = true;\n    markTourLaunchShown(props.tour.id);\n    void props.onShown?.();\n  };\n\n  const handleTargetResolution = (report: StepTargetResolutionReport) => {\n    const tourVersion = props.tour.updatedAt\n      ? new Date(props.tour.updatedAt).toISOString()\n      : \"unknown\";\n    const targetKey = [\n      getSessionId() || \"session\",\n      window.location.href,\n      props.tour.id,\n      tourVersion,\n      report.stepId,\n    ].join(\"|\");\n    const eventProperties = {\n      tour_id: props.tour.id,\n      tour_version: tourVersion,\n      step_id: report.stepId,\n      phase: report.phase,\n      resolution_via: report.via,\n      matched_selector: report.matchedSelector,\n    };\n\n    if (report.status === \"resolved\") {\n      reportShown();\n      if (targetHealthStates.get(targetKey) === \"missing\") {\n        targetHealthStates.set(targetKey, \"healthy\");\n        getUserorbit()?.track(\"$uo_tour_target_recovered\", eventProperties);\n      }\n      if (!reportedTourSteps.has(targetKey)) {\n        reportedTourSteps.add(targetKey);\n        getUserorbit()?.track(\"$uo_tour_step_seen\", eventProperties);\n      }\n      return;\n    }\n\n    if (\n      !hasReportedShownRef.current &&\n      ((report.status === \"failed\" && !report.willRetry) || report.status === \"interrupted\")\n    ) {\n      props.onRenderFailed?.(\"target_missing\");\n    }\n\n    const isTerminalFailure =\n      (report.status === \"failed\" && !report.willRetry) ||\n      report.status === \"skipped\" ||\n      report.status === \"interrupted\";\n    if (isTerminalFailure && targetHealthStates.get(targetKey) !== \"missing\") {\n      targetHealthStates.set(targetKey, \"missing\");\n      getUserorbit()?.track(\"$uo_tour_target_missing\", {\n        ...eventProperties,\n        terminal_status: report.status,\n      });\n      return;\n    }\n\n    if (report.status === \"recovered\" && targetHealthStates.get(targetKey) === \"missing\") {\n      targetHealthStates.set(targetKey, \"healthy\");\n      getUserorbit()?.track(\"$uo_tour_target_recovered\", eventProperties);\n    }\n  };\n\n  const handleTrackEvent = (eventName: string) => {\n    getUserorbit()?.track(eventName, { tour_id: props.tour.id });\n  };\n\n  const handleOpenWidget = async (target: ButtonWidgetTarget) => {\n    if (!target.id) return;\n\n    if (target.type === \"survey\") {\n      const survey = findSurveyById(target.id);\n      if (!survey) {\n        logger.warn(`Survey with id \"${target.id}\" not found.`);\n        return;\n      }\n      await triggerSurvey(survey, true);\n      return;\n    }\n\n    if (target.type === \"tour\") {\n      const tour = findTourById(target.id);\n      if (!tour) {\n        logger.warn(`Tour with id \"${target.id}\" not found.`);\n        return;\n      }\n      await triggerTour(tour, true);\n      return;\n    }\n\n    await openWidgetDrawer(\n      target.type === \"announcement\"\n        ? { tab: \"updates\", announcementId: target.id }\n        : { tab: \"help\", articleId: target.id },\n    );\n  };\n\n  useEffect(() => {\n    const stepsToProcess = processedSteps || steps;\n    if (stepsToProcess) {\n      let filteredSteps: StepInterface[];\n\n      if (isRestartedTour) {\n        filteredSteps = stepsToProcess;\n        hasPerformedInitialFilterRef.current = true;\n      } else {\n        // Filter by completion ONLY on initial mount\n        // After that, only re-filter for URL changes (not completion changes)\n        if (!hasPerformedInitialFilterRef.current) {\n          filteredSteps = filterByCompletedStepsAndPath(\n            stepsToProcess,\n            initialCompletedStepIdRef.current,\n          ) as typeof filteredSteps;\n          hasPerformedInitialFilterRef.current = true;\n        } else {\n          // Subsequent renders (URL changes): filter by path only, not by completion\n          filteredSteps = filterByCompletedStepsAndPath(\n            stepsToProcess,\n            null,\n          ) as typeof filteredSteps;\n        }\n      }\n\n      if (filteredSteps.length === 0) {\n        props?.closePreview?.();\n        props?.onTourComplete?.();\n        return;\n      }\n      const resolvedSteps = filteredSteps.map((step) => {\n        const resolvedDescription =\n          typeof step.description === \"string\"\n            ? resolveSubscriberProperties(step.description, props.subscriber)\n            : step.description;\n        const resolvedConfiguration = step.configuration\n          ? {\n              ...step.configuration,\n              customHintText:\n                typeof step.configuration.customHintText === \"string\"\n                  ? resolveSubscriberProperties(step.configuration.customHintText, props.subscriber)\n                  : step.configuration.customHintText,\n              progressButtonText:\n                typeof step.configuration.progressButtonText === \"string\"\n                  ? resolveSubscriberProperties(\n                      step.configuration.progressButtonText,\n                      props.subscriber,\n                    )\n                  : step.configuration.progressButtonText,\n            }\n          : step.configuration;\n\n        return {\n          ...step,\n          description: resolvedDescription,\n          configuration: resolvedConfiguration,\n        };\n      });\n\n      setFilteredSteps(resolvedSteps as StepInterface[]);\n      if (!resolvedSteps[0]?.pivotSelector) reportShown();\n    }\n  }, [steps, processedSteps, isRestartedTour]);\n\n  useEffect(() => {\n    const handler = (event: Event) => {\n      const detail = (event as CustomEvent).detail;\n      if (detail?.theme) setThemeSetting(detail.theme);\n    };\n\n    window.addEventListener(\"uojs-config-update\", handler);\n    return () => window.removeEventListener(\"uojs-config-update\", handler);\n  }, []);\n\n  useEffect(() => {\n    const hasIncremented = hasIncrementedViewRef.current;\n    if (steps && !hasIncremented) {\n      const beaconGated =\n        props.tour?.steps[0].configuration?.type === \"pointer\" &&\n        props.tour?.steps[0].configuration?.beacon?.show;\n      if (props.tour?.configuration?.targeting?.frequency === \"n_times\") {\n        if (beaconGated) {\n          return;\n        }\n        hasIncrementedViewRef.current = true;\n        void request(\"public/tour-subscribers.update\", {\n          token: props.token,\n          account: props.account,\n          tourId: props.tour.id,\n          stepId: steps[0].id,\n          incrementViewCount: true,\n        });\n      } else if (!beaconGated) {\n        hasIncrementedViewRef.current = true;\n        void request(\"public/tours.viewed\", {\n          token: props.token,\n          account: props.account,\n          tourId: props.tour.id,\n        });\n      }\n    }\n    getUserorbit()?.track(\"$uo_tour_view\", { tour_id: props.tour.id, tour_name: props.tour.name });\n  }, []);\n\n  useEffect(() => {\n    if (\n      activeTourCompletedStepId &&\n      steps &&\n      !isRestartedTour &&\n      props.tour.configuration?.targeting?.frequency === \"once\"\n    ) {\n      void trackTourProgress(\n        false,\n        completedTillStepId ? completedTillStepId : activeTourCompletedStepId,\n      );\n      setCompletedTillStepId(completedTillStepId ? completedTillStepId : activeTourCompletedStepId);\n    } else {\n      setCompletedTillStepId(completedTillStepId ? completedTillStepId : null);\n    }\n  }, [props.tour, steps, activeTourCompletedStepId, isRestartedTour, completedTillStepId]);\n\n  return (\n    <>\n      {steps && filteredSteps.length ? (\n        <StepPreview\n          filteredSteps={filteredSteps}\n          progressSteps={(processedSteps || steps).slice().sort(compareSteps)}\n          closePreview={props.closePreview}\n          trackTourProgress={trackTourProgress}\n          onOpenWidget={handleOpenWidget}\n          onTrackEvent={handleTrackEvent}\n          tour={props.tour}\n          themeMode={themeSetting}\n          onTargetResolution={handleTargetResolution}\n        />\n      ) : null}\n    </>\n  );\n};\n\nconst TourPreview = ({\n  subscriberCode,\n  account,\n  tour,\n  restart,\n  subscriber,\n  onTourComplete,\n  onShown,\n  onRequestClose,\n}: TourPreviewProps & {\n  onShown?: () => void | Promise<boolean>;\n  onRequestClose?: (reason: string) => void;\n}) => {\n  const [showPreview, setShowPreview] = useState(true);\n  const isRestartedTour = restart || false;\n\n  logger.log(\"TourPreview\", { tour, showPreview });\n  return (\n    <>\n      {tour && showPreview ? (\n        <PreviewWrapper\n          key={tour.id}\n          subscriber={subscriber}\n          tour={tour}\n          closePreview={() => {\n            setShowPreview(false);\n            onRequestClose?.(\"closed\");\n          }}\n          token={subscriberCode}\n          isRestartedTour={isRestartedTour}\n          account={account}\n          onTourComplete={onTourComplete}\n          onShown={onShown}\n          onRenderFailed={(reason) => onRequestClose?.(reason)}\n        />\n      ) : null}\n    </>\n  );\n};\n\nexport default TourPreview;\n\nexport { PreviewWrapper };\n","import ReactDOM from \"react-dom\";\nimport type { TourPreviewProps } from \"../../types\";\nimport TourPreview from \"./tour-preview\";\n\nconst Tour = (\n  props: TourPreviewProps & {\n    currentRoute?: string;\n    parent?: Element;\n    onShown?: () => void | Promise<boolean>;\n    onRequestClose?: (reason: string) => void;\n  },\n): any => {\n  return ReactDOM.createPortal(\n    <div id=\"uojs\">\n      <TourPreview {...props} />\n    </div>,\n    props.parent || document.body,\n  );\n};\n\nexport default Tour;\n","import { privacyGeneration, privacyAllowed } from \"../lib/privacyPreferences\";\nimport { registerWidgetPrivacyRoot, widgetGenerationAllowed } from \"../lib/widgetPrivacy\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { watchAwaitSelector } from \"@userorbit/ui/src/shared/lib/dom\";\nimport { useResolvedThemeMode } from \"@userorbit/ui/src/shared/hooks/use-resolved-theme-mode\";\nimport { resolveThemeMode, type ThemeModeSetting } from \"@userorbit/ui/src/shared/lib/theme\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport AnchoredWidget from \"../components/anchored-widget\";\nimport Checklist from \"../components/checklist\";\nimport Drawer from \"../components/drawer\";\nimport FloatingWidget from \"../components/floating-widget\";\nimport FeedbackForm from \"../components/floating-widget/feedback-form\";\nimport Survey from \"../components/survey\";\nimport Tour from \"../components/tour\";\nimport { Logger } from \"../lib/logger\";\nimport {\n  addCustomCssToShadowDom,\n  addCustomThemeToShadowDom,\n  addStylesToShadowDom,\n} from \"../lib/styles\";\nimport { hasActiveTourBuilderSession } from \"../lib/tourBuilder\";\nimport {\n  hasRenderedRoot,\n  markRenderedRootShown,\n  registerRenderedRoot,\n  unmountRenderedRoot,\n  type RenderedRootLifecycle,\n} from \"../lib/rendered-roots\";\nimport type { ChecklistSubscriberInterface, SurveyPreviewProps } from \"../types\";\nimport { markUserorbitOwnedHost } from \"../lib/domOwnership\";\n\nconst logger = Logger.getInstance();\n\nconst getThemeSetting = (config: any): ThemeModeSetting =>\n  config?.theme || config?.widget?.theme || \"light\";\n\nconst applyThemeAttributes = (element: HTMLElement, config: any) => {\n  const themeSetting = getThemeSetting(config);\n  const resolvedTheme = resolveThemeMode(themeSetting);\n  element.classList.remove(\"light\", \"dark\");\n  element.classList.add(resolvedTheme);\n  element.setAttribute(\"data-theme\", resolvedTheme);\n  element.setAttribute(\"data-theme-setting\", themeSetting);\n};\n\nconst FeedbackModalHeader: React.FC<{ onClose: () => void }> = ({ onClose }) => (\n  <div className=\"flex h-[52px] w-full flex-shrink-0 select-none items-center gap-[4px] pl-[18px] pr-[10px]\">\n    <h2 className=\"m-0 flex-1 text-[15px] font-semibold leading-[20px] text-uo-text-primary\">\n      New feedback\n    </h2>\n    <button\n      type=\"button\"\n      aria-label=\"Close\"\n      className=\"flex h-[32px] w-[32px] cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-uo-text-secondary transition-colors hover:bg-uo-fill-hover hover:text-uo-text-primary active:scale-[0.96]\"\n      onClick={onClose}\n    >\n      <IconX size={16} />\n    </button>\n  </div>\n);\n\ntype SurveyModalProps = {\n  product: {\n    theme: any;\n    configuration?: any;\n  };\n  attributes: any;\n  config: any;\n};\n\nexport type TourProps = {\n  product: any;\n  attributes: any;\n  tour: any;\n  account: string;\n  restart?: boolean;\n  closePreview?: () => void;\n  onTourComplete?: () => void;\n  lifecycle?: RenderedRootLifecycle;\n};\n\ntype ChecklistProps = {\n  product: any;\n  attributes: any;\n  checklist: ChecklistSubscriberInterface;\n  account?: string;\n  restart?: boolean;\n  closePreview?: () => void;\n  lifecycle?: RenderedRootLifecycle;\n};\n\nexport const renderTour = (props: TourProps) => {\n  if (\n    hasActiveTourBuilderSession() ||\n    !props.tour?.id ||\n    (hasRenderedRoot(\"tour\", props.tour.id) && !props.restart)\n  ) {\n    return false;\n  }\n\n  const parent: HTMLElement = document.body;\n\n  const currentChecklistNode = document.querySelector(`#tour-${props.tour.id}`);\n  if (currentChecklistNode) {\n    if (!unmountRenderedRoot(\"tour\", props.tour.id, \"replaced\")) {\n      currentChecklistNode.remove();\n    }\n  }\n\n  const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n\n  element.id = `tour-${props.tour.id}`;\n  parent.style.position = \"relative\";\n  parent.appendChild(element);\n\n  const shadowRoot = element.attachShadow({ mode: \"open\" });\n  addStylesToShadowDom(shadowRoot);\n  addCustomThemeToShadowDom({ styling: props.product.theme, shadowRoot });\n\n  const shadowContainer = document.createElement(\"div\");\n  shadowRoot.appendChild(shadowContainer);\n\n  const reactRoot = document.createElement(\"div\");\n  shadowRoot.appendChild(reactRoot);\n\n  const root = createRoot(reactRoot);\n  registerRenderedRoot({\n    kind: \"tour\",\n    id: props.tour.id,\n    host: element,\n    root,\n    lifecycle: props.lifecycle,\n  });\n\n  root.render(\n    <Tour\n      restart={props.restart}\n      parent={shadowContainer}\n      account={props.account}\n      subscriber={props.attributes}\n      subscriberCode={props.attributes.code}\n      tour={props.tour}\n      onTourComplete={props?.onTourComplete}\n      team={props.product}\n      onShown={() => markRenderedRootShown(\"tour\", props.tour.id)}\n      onRequestClose={(reason: string) => unmountRenderedRoot(\"tour\", props.tour.id, reason)}\n    />,\n  );\n\n  return true;\n};\n\nexport const renderChecklist = (props: ChecklistProps) => {\n  const parentSelector = props.checklist.configuration?.design?.embedSelector || \"body\";\n\n  const setupChecklist = () => {\n    const parent: HTMLElement | null =\n      document.querySelector(parentSelector) || (parentSelector === \"body\" ? document.body : null);\n    if (!parent) return false;\n\n    const currentChecklistNode = document.querySelector(`#checklist-${props.checklist.id}`);\n    if (currentChecklistNode) {\n      if (!unmountRenderedRoot(\"checklist\", props.checklist.id, \"replaced\")) {\n        currentChecklistNode.remove();\n      }\n    }\n\n    const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n    element.id = `checklist-${props.checklist.id}`;\n    if (parentSelector !== \"body\") {\n      parent.style.position = \"relative\";\n      parent.style.display = \"flex\";\n      parent.style.height = \"100%\";\n      const parentHeight = parent.getBoundingClientRect().height;\n      element.style.height = `${parentHeight}px`;\n      element.style.setProperty(\"--parent-height\", `${parentHeight}px`);\n      element.style.overflow = \"auto\";\n      element.style.display = \"flex\";\n      element.style.alignItems = \"flex-end\";\n      element.style.width = \"100%\";\n    }\n\n    const shadowRoot = element.attachShadow({ mode: \"open\" });\n    addStylesToShadowDom(shadowRoot);\n    addCustomThemeToShadowDom({ styling: props.product.theme, shadowRoot });\n    parent.appendChild(element);\n\n    const shadowContainer = document.createElement(\"div\");\n    shadowContainer.style.width = \"100%\";\n    shadowRoot.appendChild(shadowContainer);\n\n    const reactRoot = document.createElement(\"div\");\n    shadowRoot.appendChild(reactRoot);\n\n    const root = createRoot(reactRoot);\n    registerRenderedRoot({\n      kind: \"checklist\",\n      id: props.checklist.id,\n      host: element,\n      root,\n      lifecycle: props.lifecycle,\n    });\n    root.render(\n      <Checklist\n        parent={shadowContainer}\n        {...props}\n        onShown={() => markRenderedRootShown(\"checklist\", props.checklist.id)}\n        onRequestClose={(reason: string) =>\n          unmountRenderedRoot(\"checklist\", props.checklist.id, reason)\n        }\n      />,\n    );\n    return true;\n  };\n\n  if (parentSelector === \"body\") {\n    return setupChecklist();\n  } else if (props.lifecycle) {\n    try {\n      if (!document.querySelector(parentSelector)) return false;\n      return setupChecklist();\n    } catch {\n      return false;\n    }\n  } else {\n    watchAwaitSelector(setupChecklist, parentSelector);\n  }\n\n  return true;\n};\n\nexport const renderSurvey = (\n  props: SurveyPreviewProps & { preview?: boolean; lifecycle?: RenderedRootLifecycle },\n) => {\n  const parent: HTMLElement = document.body;\n\n  const currentChecklistNode = document.querySelector(`#survey-${props.survey.id}`);\n  if (currentChecklistNode) {\n    if (!unmountRenderedRoot(\"survey\", props.survey.id, \"replaced\")) {\n      currentChecklistNode.remove();\n    }\n  }\n\n  const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n  element.id = `survey-${props.survey.id}`;\n  parent.style.position = \"relative\";\n\n  const shadowRoot = element.attachShadow({ mode: \"open\" });\n  addStylesToShadowDom(shadowRoot);\n  addCustomThemeToShadowDom({ styling: props.product.theme, shadowRoot });\n  parent.appendChild(element);\n\n  const shadowContainer = document.createElement(\"div\");\n  shadowRoot.appendChild(shadowContainer);\n\n  const reactRoot = document.createElement(\"div\");\n  shadowRoot.appendChild(reactRoot);\n\n  const root = createRoot(reactRoot);\n  registerRenderedRoot({\n    kind: \"survey\",\n    id: props.survey.id,\n    host: element,\n    root,\n    lifecycle: props.lifecycle,\n  });\n  root.render(\n    <Survey\n      parent={shadowContainer}\n      {...props}\n      onShown={() => markRenderedRootShown(\"survey\", props.survey.id)}\n      onRequestClose={(reason: string) => unmountRenderedRoot(\"survey\", props.survey.id, reason)}\n    />,\n  );\n\n  return true;\n};\n\nexport const renderFloatingWidget = (props: SurveyModalProps) => {\n  if (!privacyAllowed(\"widget\")) return null;\n  const privacyEpoch = privacyGeneration(\"widget\");\n  const existingWidget = document.querySelector(\"#floating-widget-container\");\n  if (existingWidget) {\n    return null;\n  }\n\n  const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n  element.id = \"floating-widget-container\";\n  document.body.appendChild(element);\n\n  const shadowRoot = element.attachShadow({ mode: \"open\" });\n  addStylesToShadowDom(shadowRoot);\n  addCustomThemeToShadowDom({ styling: props.product.theme, shadowRoot });\n  addCustomCssToShadowDom({ css: props.product.configuration?.widget?.customCss, shadowRoot });\n\n  const shadowContainer = document.createElement(\"div\");\n  shadowRoot.appendChild(shadowContainer);\n\n  const root = createRoot(shadowContainer);\n  if (!registerWidgetPrivacyRoot(root, element, privacyEpoch)) return null;\n  root.render(<FloatingWidget {...props} config={props.config} />);\n\n  return null;\n};\n\nexport const renderAnchoredWidget = (props: SurveyModalProps) => {\n  if (!privacyAllowed(\"widget\")) return null;\n  const privacyEpoch = privacyGeneration(\"widget\");\n  const { config } = props;\n  const selector = config.widgetMountSelector;\n\n  const setup = () => {\n    if (!widgetGenerationAllowed(privacyEpoch)) return;\n    const parents = Array.from(document.querySelectorAll<HTMLElement>(selector));\n    const parent = parents.find((element) => element.getClientRects().length > 0) || parents[0];\n    if (!parent) return;\n\n    const current = parent.querySelector(\".unh-anchored-widget\");\n    if (current) {\n      const evt = new Event(\"uojs-open-anchored\");\n      window.dispatchEvent(evt);\n      return;\n    }\n\n    const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n    element.classList.add(\"unh-anchored-widget\");\n    parent.style.position = \"relative\";\n    parent.appendChild(element);\n\n    const root = createRoot(element);\n    if (!registerWidgetPrivacyRoot(root, element, privacyEpoch)) return null;\n    root.render(<AnchoredWidget {...props} parent={parent} />);\n  };\n\n  watchAwaitSelector(setup, selector);\n\n  return null;\n};\n\nexport const renderUserorbitDrawer = (props: SurveyModalProps) => {\n  if (!privacyAllowed(\"widget\")) return null;\n  const privacyEpoch = privacyGeneration(\"widget\");\n  const { config } = props;\n  // logger.debug(`renderUserorbitDrawer ${JSON.stringify({ config })}`);\n  logger.log(\"config\", config, props);\n\n  const setupWidgetMount = () => {\n    if (!widgetGenerationAllowed(privacyEpoch)) return;\n    let parent: HTMLElement;\n    // Handle special case for \"body\" selector\n    if (config.widgetMountSelector === \"body\") {\n      parent = document.body;\n    } else {\n      parent = document.querySelector(config.widgetMountSelector);\n    }\n\n    const current: HTMLElement | null = document.querySelector(\"#uojs.unh-widget\");\n\n    if (parent) {\n      if (!current) {\n        // Clean up any existing drawer instances\n        const oldWidgetDrawer = document.querySelector(\".uojs-widget-drawer\");\n        if (oldWidgetDrawer) {\n          oldWidgetDrawer.remove();\n        }\n\n        // Also clean up any shadow containers that might exist\n        const existingShadowContainer = document.querySelector(\"#uojs-shadow-container\");\n        if (existingShadowContainer) {\n          existingShadowContainer.remove();\n        }\n\n        const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n        parent.style.position = \"relative\";\n        element.id = \"uojs\";\n        element.classList.add(\"unh-widget\");\n        applyThemeAttributes(element, config);\n\n        parent.appendChild(element);\n        const root = createRoot(element);\n        if (!registerWidgetPrivacyRoot(root, element, privacyEpoch)) return null;\n        root.render(<Drawer {...props} parent={parent} />);\n      } else {\n        const evt = new CustomEvent(\"uojs-open-drawer\", {\n          detail: { openOptions: config.openOptions ?? null },\n        });\n        window.dispatchEvent(evt);\n      }\n    }\n  };\n\n  if (\n    config?.widgetMountSelector &&\n    config.widgetMountSelector !== \"body\" &&\n    config?.floatingWidget\n  ) {\n    renderAnchoredWidget(props);\n  } else if (config?.widgetMountSelector === \"body\") {\n    // Body is always available, so we can call setupWidgetMount directly\n    if (document.body) {\n      setupWidgetMount();\n    } else {\n      logger.error(\"document.body not available yet, waiting for DOM ready\");\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", setupWidgetMount);\n      } else {\n        setTimeout(setupWidgetMount, 0);\n      }\n    }\n  } else if (config?.widgetMountSelector) {\n    watchAwaitSelector(setupWidgetMount, config.widgetMountSelector);\n  } else if (config?.floatingWidget) {\n    renderFloatingWidget(props);\n  } else {\n    // Default to drawer mode with body as mount point\n    if (document.body) {\n      setupWidgetMount();\n    } else {\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", setupWidgetMount);\n      } else {\n        setTimeout(setupWidgetMount, 0);\n      }\n    }\n  }\n\n  return null;\n};\n\nexport const renderFeedbackForm = (props: SurveyModalProps) => {\n  if (!privacyAllowed(\"widget\")) return null;\n  const privacyEpoch = privacyGeneration(\"widget\");\n  logger.log(\"renderFeedbackForm called with props:\", props);\n  const isCompact = props.config?.openOptions?.compact;\n\n  // Clean up any existing standalone feedback form (check for data attribute to avoid removing widget drawer)\n  const existingStandaloneForm = document.querySelector(\"#uojs[data-standalone-feedback]\");\n  if (existingStandaloneForm) {\n    existingStandaloneForm.remove();\n  }\n\n  // Also check if there's a widget drawer and don't remove it\n  const existingWidgetDrawer = document.querySelector(\"#uojs:not([data-standalone-feedback])\");\n  if (existingWidgetDrawer) {\n    logger.log(\"Widget drawer exists, keeping it and creating standalone feedback form\");\n  }\n\n  const element = markUserorbitOwnedHost(document.createElement(\"div\"));\n  element.id = \"uojs\";\n  element.setAttribute(\"data-standalone-feedback\", \"true\");\n  element.style.position = \"fixed\";\n  element.style.top = \"0\";\n  element.style.left = \"0\";\n  element.style.width = \"100%\";\n  element.style.height = \"100%\";\n  element.style.pointerEvents = \"none\";\n  element.style.zIndex = \"2147483647\";\n\n  if (!isCompact) {\n    element.style.transform = \"translateY(100%)\";\n    element.style.transition = \"transform 0.3s ease-out\";\n  }\n\n  // Add theme class\n  applyThemeAttributes(element, props.config);\n\n  document.body.appendChild(element);\n\n  logger.log(\"Standalone feedback form element created and appended to body:\", element);\n\n  // Trigger slide-in animation (only for non-compact mode)\n  if (!isCompact) {\n    requestAnimationFrame(() => {\n      element.style.transform = \"translateY(0)\";\n    });\n  }\n\n  const shadowRoot = element.attachShadow({ mode: \"open\" });\n  addStylesToShadowDom(shadowRoot);\n  addCustomThemeToShadowDom({ styling: props.product.theme, shadowRoot });\n  addCustomCssToShadowDom({ css: props.product.configuration?.widget?.customCss, shadowRoot });\n\n  const shadowContainer = document.createElement(\"div\");\n  shadowRoot.appendChild(shadowContainer);\n\n  const root = createRoot(shadowContainer);\n  if (!registerWidgetPrivacyRoot(root, element, privacyEpoch)) return null;\n\n  // Create a proper wrapper component for the feedback form\n  const FeedbackFormWrapper = () => {\n    const [isOpen, setIsOpen] = React.useState(true);\n    const [isPanelHidden, setIsPanelHidden] = React.useState(false);\n    const handlePanelHiddenChange = React.useCallback((hidden: boolean) => {\n      setIsPanelHidden(hidden);\n    }, []);\n    const isCompact = props.config?.openOptions?.compact;\n    const themeMode = useResolvedThemeMode(getThemeSetting(props.config));\n\n    logger.log(\"FeedbackFormWrapper rendering, isCompact:\", isCompact, \"props:\", props);\n\n    const handleClose = () => {\n      setIsOpen(false);\n      // Trigger slide-out animation (only for non-compact mode)\n      if (!isCompact) {\n        element.style.transform = \"translateY(100%)\";\n        setTimeout(() => {\n          element.remove();\n        }, 300);\n      } else {\n        element.remove();\n      }\n    };\n\n    const handleBack = () => {\n      handleClose();\n    };\n\n    if (!isOpen) return null;\n    return (\n      <div\n        id=\"uojs\"\n        className={`floating-widget ${themeMode} pointer-events-none z-[2147483647] ${isCompact ? \"fixed bottom-0 right-0\" : \"fixed inset-0\"}`}\n        style={{ pointerEvents: \"none\" }}\n      >\n        {isCompact ? (\n          <div\n            className=\"pointer-events-auto fixed bottom-5 right-5 z-50\"\n            style={{ visibility: isPanelHidden ? \"hidden\" : \"visible\", pointerEvents: \"auto\" }}\n          >\n            <div\n              className=\"relative overflow-hidden rounded-uo-panel bg-uo-surface-0 shadow-uo-3\"\n              style={{\n                maxHeight: \"70vh\",\n                height: \"calc(max(380px,65vh))\",\n                width: \"350px\",\n                willChange: \"transform, opacity\",\n                transformOrigin: \"bottom right\",\n              }}\n            >\n              <div className=\"h-full relative flex flex-col font-sans\">\n                <FeedbackModalHeader onClose={handleClose} />\n\n                {/* Main Content */}\n                <div\n                  className=\"min-h-0 flex-1 overflow-y-auto\"\n                  style={\n                    { \"--container-height\": \"calc(min(80vh, 750px) - 45px)\" } as React.CSSProperties\n                  }\n                >\n                  <div className=\"h-full px-0 py-0 pb-0 transition-all duration-300\">\n                    <FeedbackForm\n                      primaryColor={props.product.theme?.primaryColor || \"#3912e4\"}\n                      onBack={handleBack}\n                      onClose={handleClose}\n                      onPanelHiddenChange={handlePanelHiddenChange}\n                      isCompact={isCompact}\n                      product={{\n                        name: (props.product as any).name,\n                        avatarUrl: (props.product as any).avatarUrl,\n                        plan: (props.product as any).plan,\n                        configuration: (props.product as any).configuration,\n                      }}\n                      openOptions={props.config.openOptions}\n                      subscriberCode={props.attributes?.code || props.attributes?.token}\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        ) : (\n          <div\n            className=\"pointer-events-auto absolute bottom-5 right-5\"\n            style={{ visibility: isPanelHidden ? \"hidden\" : \"visible\", pointerEvents: \"auto\" }}\n          >\n            <div\n              className=\"absolute bottom-[60px] right-0 overflow-hidden rounded-uo-panel bg-uo-surface-0 shadow-uo-3\"\n              style={{\n                maxHeight: \"700px\",\n                height: \"auto\",\n                width: \"400px\",\n                willChange: \"transform, opacity\",\n                transformOrigin: \"bottom right\",\n              }}\n            >\n              <div className=\"h-full relative flex flex-col font-sans\">\n                <FeedbackModalHeader onClose={handleClose} />\n\n                {/* Main Content */}\n                <div\n                  className=\"min-h-0 flex-1 overflow-y-auto\"\n                  style={\n                    { \"--container-height\": \"calc(min(80vh, 750px) - 45px)\" } as React.CSSProperties\n                  }\n                >\n                  <div className=\"h-full px-0 py-0 pb-0 transition-all duration-300\">\n                    <FeedbackForm\n                      primaryColor={props.product?.theme?.primaryColor || \"#3912e4\"}\n                      onBack={handleBack}\n                      onClose={handleClose}\n                      onPanelHiddenChange={handlePanelHiddenChange}\n                      product={{\n                        name: (props.product as any)?.name,\n                        avatarUrl: (props.product as any)?.avatarUrl,\n                        plan: (props.product as any)?.plan,\n                        configuration: (props.product as any)?.configuration,\n                      }}\n                      openOptions={props.config?.openOptions}\n                      subscriberCode={props.attributes?.code || props.attributes?.token}\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  root.render(<FeedbackFormWrapper />);\n\n  return null;\n};\n","import { privacyAllowed } from \"./privacyPreferences\";\nimport type { TJsConfigInput } from \"@userorbit/types/js\";\nimport { localizeTourContent, resolveTourLanguage } from \"@userorbit/types\";\nimport type { OpenWidgetOptions } from \"../index\";\nimport {\n  renderChecklist,\n  renderFeedbackForm,\n  renderFloatingWidget,\n  renderSurvey,\n  renderTour,\n  renderUserorbitDrawer,\n} from \"../modules/portal\";\nimport type { ChecklistSubscriberInterface, SurveyFormType, TourInterface } from \"../types\";\nimport { matchesAudienceTargeting } from \"./audience-targeting\";\nimport { Config } from \"./config\";\nimport { CONTAINER_ID } from \"./constants\";\nimport { markUserorbitOwnedHost } from \"./domOwnership\";\nimport { Logger } from \"./logger\";\nimport { localStore, sessionStore } from \"./storage\";\nimport { handleUrlFilters } from \"./utils\";\nimport { canAutomaticallyLaunchExperience } from \"./automatic-targeting\";\nimport { hasVersionedDeliveryPolicy, scheduleDelivery } from \"./delivery-scheduler\";\nimport type { DeliverySource } from \"./delivery\";\nimport type { RenderedRootLifecycle } from \"./rendered-roots\";\nimport { unmountRenderedRoot } from \"./rendered-roots\";\nimport { isTourSnoozeActive } from \"../utils/tour\";\nimport { isWidgetRuntimeFeatureEnabled } from \"./widget-features\";\nimport request from \"../utils/api\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nconst EXPERIENCE_FEATURES = {\n  tour: \"tours\",\n  checklist: \"checklists\",\n  survey: \"surveys\",\n} as const;\n\nlet isSurveyRunning: string | null = null;\nlet isTourRunning: string | null = null;\nlet isChecklistRunning: string | null = null;\nlet tourLocation: string | null = null;\nlet rteButtonHandlerInstalled = false;\nconst pendingTourRenderKeys = new Set<string>();\nconst activeChecklists = new Map<\n  string,\n  {\n    checklist: ChecklistSubscriberInterface;\n    product: any;\n    attributes: any;\n    account: string;\n    restart?: boolean;\n  }\n>();\n\ntype TriggerDeliveryOptions = {\n  serverOrder?: number;\n  bypassCaps?: boolean;\n} & (\n  | {\n      source: \"workflow\";\n      workflowAssignmentId: string;\n    }\n  | {\n      source?: Exclude<DeliverySource, \"workflow\">;\n      workflowAssignmentId?: never;\n    }\n);\n\nconst resolveTriggerDeliverySource = (\n  options: TriggerDeliveryOptions,\n  fallback: Exclude<DeliverySource, \"workflow\">,\n) =>\n  options.source === \"workflow\"\n    ? { source: options.source, workflowAssignmentId: options.workflowAssignmentId }\n    : { source: options.source || fallback };\n// let setIsError = (_: boolean) => {};\n// let setIsResponseSendingFinished = (_: boolean) => {};\n\nconst normalizeEmail = (email: unknown) =>\n  typeof email === \"string\" && email.trim() ? email.trim().toLowerCase() : undefined;\n\nexport const getWidgetTargetingData = (currentConfig: any) => {\n  const personData = currentConfig.personState?.data ?? {};\n  const email = normalizeEmail(personData.email) || normalizeEmail(currentConfig.email);\n  const name =\n    typeof personData.name === \"string\" && personData.name ? personData.name : currentConfig.name;\n\n  return {\n    ...personData,\n    ...(email ? { email } : {}),\n    ...(name ? { name } : {}),\n    attributes: {\n      ...personData.attributes,\n      ...currentConfig.attributes,\n    },\n  };\n};\n\nexport const setIsSurveyRunning = (value: string | null) => {\n  isSurveyRunning = value;\n};\n\nconst getServerOrder = (kind: \"tour\" | \"checklist\" | \"survey\", id: string) => {\n  const person = config.get()?.personState?.data;\n  let collection;\n  if (kind === \"tour\") collection = person?.tours;\n  else if (kind === \"checklist\") collection = person?.checklists;\n  else collection = person?.surveys;\n  const index = collection?.findIndex((experience: any) => experience.id === id) ?? -1;\n  return index < 0 ? Number.MAX_SAFE_INTEGER : index;\n};\n\nconst isStillAutomaticallyEligible = async (\n  kind: \"tour\" | \"checklist\" | \"survey\",\n  experience: any,\n) => {\n  const current = config.get();\n  if (!current || current.inApp?.enabled === false) return false;\n  const feature = EXPERIENCE_FEATURES[kind];\n  if (!isWidgetRuntimeFeatureEnabled(current.environmentState?.data?.product, feature)) {\n    return false;\n  }\n  const collection =\n    current.personState?.data?.[\n      kind === \"tour\" ? \"tours\" : kind === \"checklist\" ? \"checklists\" : \"surveys\"\n    ];\n  const currentExperience = collection?.find((candidate: any) => candidate.id === experience.id);\n  if (!currentExperience) return false;\n  if (!(await canAutomaticallyLaunchExperience(currentExperience, current.personState?.data))) {\n    return false;\n  }\n\n  if (kind === \"tour\") {\n    if (isTourSnoozeActive(currentExperience.tourSubscriber)) return false;\n    const frequency = currentExperience.configuration?.targeting?.frequency;\n    const state = currentExperience.tourSubscriber?.state;\n    if (frequency === \"repeat\") {\n      return currentExperience.configuration?.targeting?.overrideDismissed || state !== \"DM\";\n    }\n    if (frequency === \"n_times\") {\n      return (\n        (currentExperience.configuration?.targeting?.overrideDismissed || state !== \"DM\") &&\n        (currentExperience.tourSubscriber?.viewCount || 0) <\n          (currentExperience.configuration?.targeting?.frequencyCount ?? 1)\n      );\n    }\n    return !currentExperience.tourSubscriber || (state !== \"CO\" && state !== \"DM\");\n  }\n\n  if (kind === \"checklist\") {\n    if (!shouldShowChecklistForCurrentUrl(currentExperience)) return false;\n    const state = currentExperience.checklistSubscriber?.state;\n    return (\n      (currentExperience.configuration?.targeting?.frequency === \"repeat\" && state !== \"DM\") ||\n      (state !== \"CO\" && state !== \"DM\") ||\n      !currentExperience.checklistSubscriber\n    );\n  }\n\n  const state = currentExperience.surveySubscriber?.state;\n  return state !== \"CO\" && state !== \"DM\";\n};\n\nconst wrapLifecycle = (\n  kind: \"tour\" | \"checklist\" | \"survey\",\n  id: string,\n  lifecycle: RenderedRootLifecycle,\n  workflowAssignmentId?: string,\n): RenderedRootLifecycle => ({\n  async onShown() {\n    const shown = (await lifecycle.onShown?.()) !== false;\n    if (shown && workflowAssignmentId) {\n      const current = config.get();\n      const token = current?.personState?.data?.code;\n      if (token && current?.accountId) {\n        try {\n          await request(\"public/workflow-assignments.outcome\", {\n            token,\n            account: current.accountId,\n            assignmentId: workflowAssignmentId,\n            status: \"shown\",\n          });\n          const latest = config.get();\n          if (latest?.personState) {\n            config.update({\n              ...latest,\n              personState: {\n                ...latest.personState,\n                data: {\n                  ...latest.personState.data,\n                  workflowAssignments: (latest.personState.data.workflowAssignments || []).map(\n                    (assignment: any) =>\n                      assignment.id === workflowAssignmentId\n                        ? { ...assignment, status: \"shown\" }\n                        : assignment,\n                  ),\n                },\n                expiresAt: new Date(0),\n              },\n            });\n          }\n        } catch (error) {\n          logger.warn(\"Failed to record adoption workflow assignment outcome\", error);\n        }\n      }\n    }\n    return shown;\n  },\n  async onClosed(reason) {\n    if (kind === \"tour\") setIsTourRunning(null);\n    if (kind === \"survey\") setIsSurveyRunning(null);\n    if (kind === \"checklist\" && reason !== \"route_changed\") unregisterActiveChecklist(id);\n    await lifecycle.onClosed?.(reason);\n  },\n  async onFailed(reason) {\n    if (kind === \"tour\") setIsTourRunning(null);\n    if (kind === \"survey\") setIsSurveyRunning(null);\n    if (kind === \"checklist\" && reason !== \"route_changed\") unregisterActiveChecklist(id);\n    await lifecycle.onFailed?.(reason);\n  },\n});\n\nexport const triggerSurvey = async (\n  survey: SurveyFormType,\n  restart?: boolean,\n  options: TriggerDeliveryOptions = {},\n): Promise<void> => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, skipping survey trigger\");\n    return;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, skipping survey trigger\");\n    return;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"surveys\")) {\n    logger.debug(\"Surveys disabled for this widget, skipping survey trigger\");\n    return;\n  }\n\n  const { product } = currentConfig.environmentState?.data ?? {};\n  const attributes = getWidgetTargetingData(currentConfig);\n\n  const surveyDelay = survey.configuration?.targeting?.delay || 0;\n  if (hasVersionedDeliveryPolicy()) {\n    const deliverySource = resolveTriggerDeliverySource(\n      options,\n      restart ? \"programmatic\" : \"action\",\n    );\n    const source = deliverySource.source;\n    scheduleDelivery({\n      ...deliverySource,\n      kind: \"survey\",\n      id: survey.id,\n      experience: survey,\n      serverOrder: options.serverOrder ?? getServerOrder(\"survey\", survey.id),\n      delayMs: surveyDelay * 1000,\n      bypassCaps: options.bypassCaps ?? (source === \"programmatic\" || source === \"resume\"),\n      revalidate: () =>\n        deliverySource.source === \"workflow\"\n          ? Boolean(\n              config\n                .get()\n                ?.personState?.data?.workflowAssignments?.some(\n                  (assignment: any) => assignment.id === deliverySource.workflowAssignmentId,\n                ),\n            )\n          : source === \"programmatic\" || source === \"resume\"\n            ? Boolean(findSurveyById(survey.id))\n            : isStillAutomaticallyEligible(\"survey\", survey),\n      render(lifecycle) {\n        const latest = config.get();\n        if (!latest) return false;\n        setIsSurveyRunning(survey.id);\n        return renderSurvey({\n          product: latest.environmentState?.data?.product,\n          attributes: getWidgetTargetingData(latest),\n          account: latest.accountId,\n          config: latest,\n          survey,\n          restart,\n          lifecycle: wrapLifecycle(\n            \"survey\",\n            survey.id,\n            lifecycle,\n            deliverySource.source === \"workflow\" ? deliverySource.workflowAssignmentId : undefined,\n          ),\n          closePreview: () => logger.log(\"closePreview\"),\n        });\n      },\n    });\n    return;\n  }\n  if (isSurveyRunning && !restart) {\n    logger.debug(\"A survey is already running. Skipping.\");\n    return;\n  }\n\n  setIsSurveyRunning(survey.id);\n\n  if (surveyDelay) {\n    logger.debug(`Delaying survey \"${survey.title}\" by ${surveyDelay} seconds.`);\n  }\n\n  setTimeout(() => {\n    const latest = config.get();\n    if (!isWidgetRuntimeFeatureEnabled(latest?.environmentState?.data?.product, \"surveys\")) {\n      setIsSurveyRunning(null);\n      return;\n    }\n    renderSurvey({\n      product,\n      attributes,\n      account: currentConfig.accountId,\n      config: currentConfig,\n      survey,\n      restart,\n      closePreview: () => logger.log(\"closePreview\"),\n    });\n  }, surveyDelay * 1000);\n};\n\nexport const setIsTourRunning = (value: string | null) => {\n  isTourRunning = value;\n  tourLocation = window.location.href;\n};\n\nconst getStoredLanguagePreferences = () => {\n  if (typeof window === \"undefined\") return [];\n\n  return [\"userorbit:language\", \"i18nextLng\"].map((key) => localStore.get(key)).filter(Boolean);\n};\n\nexport const getTourRuntimeState = () => ({\n  id: isTourRunning,\n  location: tourLocation,\n});\n\nexport const setIsChecklistRunning = (value: string | null) => {\n  isChecklistRunning = value;\n};\n\nconst getChecklistNode = (id: string) => document.querySelector(`#checklist-${id}`);\n\nexport const shouldShowChecklistForCurrentUrl = (checklist: ChecklistSubscriberInterface) => {\n  const visibility = checklist.configuration?.visibility;\n  const mode = visibility?.mode || \"always\";\n\n  if (mode === \"always\") return true;\n\n  if (mode === \"custom_url\") {\n    const urlFilters = visibility?.urlFilters || [];\n    if (urlFilters.length === 0) return false;\n    return handleUrlFilters(urlFilters);\n  }\n\n  return true;\n};\n\nexport const syncChecklistVisibility = () => {\n  const currentConfig = config.get();\n  if (\n    !isWidgetRuntimeFeatureEnabled(currentConfig?.environmentState?.data?.product, \"checklists\")\n  ) {\n    [...activeChecklists.keys()].forEach(clearActiveChecklist);\n    return;\n  }\n\n  activeChecklists.forEach((activeChecklist, id) => {\n    const shouldShow = shouldShowChecklistForCurrentUrl(activeChecklist.checklist);\n    const checklistNode = getChecklistNode(id);\n\n    if (shouldShow) {\n      if (!checklistNode) {\n        if (hasVersionedDeliveryPolicy()) {\n          void triggerChecklist(activeChecklist.checklist, activeChecklist.restart, {\n            source: \"programmatic\",\n            serverOrder: getServerOrder(\"checklist\", activeChecklist.checklist.id),\n            bypassCaps: true,\n          });\n        } else {\n          renderChecklist({\n            product: activeChecklist.product,\n            attributes: activeChecklist.attributes,\n            account: activeChecklist.account,\n            checklist: activeChecklist.checklist,\n            restart: activeChecklist.restart,\n            closePreview: () => logger.log(\"closePreview\"),\n          });\n        }\n      }\n      return;\n    }\n\n    if (!unmountRenderedRoot(\"checklist\", id, \"route_changed\")) checklistNode?.remove();\n    logger.debug(`Checklist \"${id}\" hidden because it no longer matches visibility rules.`);\n  });\n};\n\nexport const clearActiveChecklist = (id: string) => {\n  activeChecklists.delete(id);\n  if (!unmountRenderedRoot(\"checklist\", id, \"closed\")) getChecklistNode(id)?.remove();\n  if (isChecklistRunning === id) {\n    setIsChecklistRunning(null);\n  }\n};\n\nexport const unregisterActiveChecklist = (id: string) => {\n  activeChecklists.delete(id);\n  if (isChecklistRunning === id) {\n    setIsChecklistRunning(null);\n  }\n};\n\nexport const triggerChecklist = async (\n  checklist: ChecklistSubscriberInterface,\n  restart?: boolean,\n  options: TriggerDeliveryOptions = {},\n): Promise<void> => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, skipping checklist trigger\");\n    return;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, skipping checklist trigger\");\n    return;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"checklists\")) {\n    logger.debug(\"Checklists disabled for this widget, skipping checklist trigger\");\n    return;\n  }\n\n  const { product } = currentConfig.environmentState?.data ?? {};\n  const attributes = getWidgetTargetingData(currentConfig);\n\n  logger.debug(`Triggering checklist \"${checklist.id}\"`);\n  const checklistDelay = checklist.configuration?.targeting?.delay || 0;\n  if (hasVersionedDeliveryPolicy()) {\n    const deliverySource = resolveTriggerDeliverySource(\n      options,\n      restart ? \"programmatic\" : \"action\",\n    );\n    const source = deliverySource.source;\n    scheduleDelivery({\n      ...deliverySource,\n      kind: \"checklist\",\n      id: checklist.id,\n      experience: checklist,\n      serverOrder: options.serverOrder ?? getServerOrder(\"checklist\", checklist.id),\n      delayMs: checklistDelay * 1000,\n      bypassCaps: options.bypassCaps ?? (source === \"programmatic\" || source === \"resume\"),\n      revalidate: () =>\n        deliverySource.source === \"workflow\"\n          ? Boolean(\n              config\n                .get()\n                ?.personState?.data?.workflowAssignments?.some(\n                  (assignment: any) => assignment.id === deliverySource.workflowAssignmentId,\n                ),\n            )\n          : source === \"programmatic\" || source === \"resume\"\n            ? Boolean(findChecklistById(checklist.id)) &&\n              shouldShowChecklistForCurrentUrl(checklist)\n            : isStillAutomaticallyEligible(\"checklist\", checklist),\n      render(lifecycle) {\n        const latest = config.get();\n        if (!latest) return false;\n        const product = latest.environmentState?.data?.product;\n        const attributes = getWidgetTargetingData(latest);\n        setIsChecklistRunning(checklist.id);\n        activeChecklists.set(checklist.id, {\n          checklist,\n          product,\n          attributes,\n          account: latest.accountId,\n          restart,\n        });\n        return renderChecklist({\n          product,\n          attributes,\n          account: latest.accountId,\n          checklist,\n          restart,\n          lifecycle: wrapLifecycle(\n            \"checklist\",\n            checklist.id,\n            lifecycle,\n            deliverySource.source === \"workflow\" ? deliverySource.workflowAssignmentId : undefined,\n          ),\n          closePreview: () => logger.log(\"closePreview\"),\n        });\n      },\n    });\n    return;\n  }\n\n  if (isChecklistRunning && !restart) {\n    logger.debug(\"A checklist is already running. Skipping.\");\n    return;\n  }\n\n  setIsChecklistRunning(checklist.id);\n  activeChecklists.set(checklist.id, {\n    checklist,\n    product,\n    attributes,\n    account: currentConfig.accountId,\n    restart,\n  });\n\n  if (checklistDelay) {\n    logger.debug(\n      `Delaying checklist \"${checklist.label || checklist.title}\" by ${checklistDelay} seconds.`,\n    );\n  }\n\n  setTimeout(() => {\n    const latest = config.get();\n    if (!isWidgetRuntimeFeatureEnabled(latest?.environmentState?.data?.product, \"checklists\")) {\n      clearActiveChecklist(checklist.id);\n      return;\n    }\n    if (!shouldShowChecklistForCurrentUrl(checklist)) {\n      getChecklistNode(checklist.id)?.remove();\n      return;\n    }\n\n    renderChecklist({\n      product,\n      attributes,\n      account: currentConfig.accountId,\n      checklist,\n      restart,\n      closePreview: () => logger.log(\"closePreview\"),\n    });\n  }, checklistDelay * 1000);\n};\n\nexport const triggerTour = async (\n  tour: any,\n  restart?: boolean,\n  options: TriggerDeliveryOptions = {},\n): Promise<void> => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, skipping tour trigger\");\n    return;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, skipping tour trigger\");\n    return;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"tours\")) {\n    logger.debug(\"Tours disabled for this widget, skipping tour trigger\");\n    return;\n  }\n\n  const { product } = currentConfig.environmentState?.data ?? {};\n  const personData = currentConfig.personState?.data ?? {};\n  const attributes = getWidgetTargetingData(currentConfig);\n\n  logger.debug(`Triggering tour \"${tour.id}\"`);\n\n  const tourDelay = tour.configuration?.targeting?.delay || 0;\n  if (hasVersionedDeliveryPolicy()) {\n    const deliverySource = resolveTriggerDeliverySource(\n      options,\n      restart ? \"programmatic\" : \"action\",\n    );\n    const source = deliverySource.source;\n    scheduleDelivery({\n      ...deliverySource,\n      kind: \"tour\",\n      id: tour.id,\n      experience: tour,\n      serverOrder: options.serverOrder ?? getServerOrder(\"tour\", tour.id),\n      delayMs: tourDelay * 1000,\n      bypassCaps: options.bypassCaps ?? (source === \"programmatic\" || source === \"resume\"),\n      revalidate: () =>\n        deliverySource.source === \"workflow\"\n          ? Boolean(\n              config\n                .get()\n                ?.personState?.data?.workflowAssignments?.some(\n                  (assignment: any) => assignment.id === deliverySource.workflowAssignmentId,\n                ),\n            )\n          : source === \"programmatic\" || source === \"resume\"\n            ? Boolean(findTourById(tour.id))\n            : isStillAutomaticallyEligible(\"tour\", tour),\n      render(lifecycle) {\n        const latest = config.get();\n        if (!latest) return false;\n        const product = latest.environmentState?.data?.product;\n        const personData = latest.personState?.data ?? {};\n        const browserLanguages =\n          typeof navigator !== \"undefined\"\n            ? [navigator.language, ...(navigator.languages || [])]\n            : [];\n        const resolvedLanguage = resolveTourLanguage(tour, [\n          latest.locale,\n          latest.language,\n          latest.widget?.locale,\n          latest.widget?.language,\n          personData?.attributes?.locale,\n          personData?.attributes?.language,\n          personData?.locale,\n          personData?.language,\n          ...getStoredLanguagePreferences(),\n          ...browserLanguages,\n        ]);\n        setIsTourRunning(tour.id);\n        return renderTour({\n          product,\n          attributes: getWidgetTargetingData(latest),\n          account: latest.accountId,\n          tour: localizeTourContent(tour, resolvedLanguage),\n          restart,\n          lifecycle: wrapLifecycle(\n            \"tour\",\n            tour.id,\n            lifecycle,\n            deliverySource.source === \"workflow\" ? deliverySource.workflowAssignmentId : undefined,\n          ),\n          closePreview: () => logger.log(\"closePreview\"),\n        });\n      },\n    });\n    return;\n  }\n  const pendingTourRenderKey = `${tour.id}:${window.location.href}`;\n  if (pendingTourRenderKeys.has(pendingTourRenderKey)) {\n    logger.debug(\"This tour render is already pending on the current page. Skipping.\");\n    return;\n  }\n  pendingTourRenderKeys.add(pendingTourRenderKey);\n\n  setIsTourRunning(tour.id);\n\n  if (tourDelay) {\n    logger.debug(`Delaying tour \"${tour.title}\" by ${tourDelay} seconds.`);\n  }\n\n  logger.debug(`Starting tour \"${tour.id}\"`);\n\n  setTimeout(() => {\n    try {\n      const latest = config.get();\n      if (!isWidgetRuntimeFeatureEnabled(latest?.environmentState?.data?.product, \"tours\")) {\n        setIsTourRunning(null);\n        return;\n      }\n      const browserLanguages =\n        typeof navigator !== \"undefined\"\n          ? [navigator.language, ...(navigator.languages || [])]\n          : [];\n      const storedLanguages = getStoredLanguagePreferences();\n      const resolvedLanguage = resolveTourLanguage(tour, [\n        currentConfig.locale,\n        currentConfig.language,\n        currentConfig.widget?.locale,\n        currentConfig.widget?.language,\n        personData?.attributes?.locale,\n        personData?.attributes?.language,\n        personData?.locale,\n        personData?.language,\n        ...storedLanguages,\n        ...browserLanguages,\n      ]);\n\n      renderTour({\n        product,\n        attributes,\n        account: currentConfig.accountId,\n        tour: localizeTourContent(tour, resolvedLanguage),\n        restart,\n        closePreview: () => logger.log(\"closePreview\"),\n      });\n    } catch (error) {\n      logger.error(`Failed to render tour \"${tour.id}\":`, error);\n    } finally {\n      pendingTourRenderKeys.delete(pendingTourRenderKey);\n    }\n  }, tourDelay * 1000);\n};\n\nexport const renderWidget = async (configInput: TJsConfigInput) => {\n  if (!privacyAllowed(\"widget\")) return;\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, skipping widget render\");\n    return;\n  }\n\n  if (\n    configInput.widget?.enabled === false ||\n    currentConfig.widget?.enabled === false ||\n    configInput.widget?.autoMount === false ||\n    currentConfig.widget?.autoMount === false\n  ) {\n    logger.debug(\"Widget UI disabled by configuration, skipping widget render\");\n    return;\n  }\n\n  const { product } = currentConfig.environmentState?.data ?? {};\n  const attributes = getWidgetTargetingData(currentConfig);\n\n  if (!configInput.widget?.preview && !shouldShowWidget(product, attributes)) {\n    removeRenderedWidget();\n    logger.debug(\"Widget hidden because it does not match targeting or visibility rules.\");\n    return;\n  }\n\n  renderUserorbitDrawer({\n    product,\n    attributes,\n    config: configInput,\n  });\n};\n\nconst removeRenderedWidget = () => {\n  document.querySelector(\"#floating-widget-container\")?.remove();\n  document.querySelector(\"#uojs.unh-widget\")?.remove();\n  document.querySelector(\".unh-anchored-widget\")?.remove();\n  document.querySelector(\".uojs-widget-drawer\")?.remove();\n  document.querySelector(\"#uojs-shadow-container\")?.remove();\n};\n\nexport const shouldShowWidgetForCurrentUrl = (product: any) => {\n  const visibility = product?.configuration?.widget?.visibility;\n  const mode = visibility?.mode || \"always\";\n\n  if (mode === \"always\") return true;\n\n  if (mode === \"custom_url\") {\n    const urlFilters = visibility?.urlFilters || [];\n    if (urlFilters.length === 0) return false;\n    return handleUrlFilters(urlFilters);\n  }\n\n  return true;\n};\n\nexport const shouldShowWidgetForUser = (product: any, personData: any) => {\n  return matchesAudienceTargeting(product?.configuration?.widget?.targeting, personData, {\n    missingSegmentMatches: true,\n  });\n};\n\nexport const shouldShowWidget = (product: any, personData: any) =>\n  shouldShowWidgetForUser(product, personData) && shouldShowWidgetForCurrentUrl(product);\n\nexport const openWidgetDrawer = async (options?: OpenWidgetOptions) => {\n  if (!privacyAllowed(\"widget\")) return;\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, skipping widget drawer open\");\n    return;\n  }\n\n  const { product } = currentConfig.environmentState?.data ?? {};\n  const attributes = getWidgetTargetingData(currentConfig);\n\n  // Auto-set position to bottom-right when compact=true and showFeedbackForm=true\n  const processedOptions = options ? { ...options } : {};\n  if (processedOptions.compact && processedOptions.showFeedbackForm && !processedOptions.position) {\n    processedOptions.position = \"bottom-right\";\n  }\n\n  // If compact mode with feedback form, render standalone feedback form instead of widget drawer\n  if (processedOptions?.compact && processedOptions?.showFeedbackForm) {\n    const feedbackFormConfig = {\n      theme: currentConfig.theme,\n      widget: currentConfig.widget,\n      locale: currentConfig.locale,\n      language: currentConfig.language,\n      email: currentConfig.email,\n      emailHash: currentConfig.emailHash,\n      name: currentConfig.name,\n      requireAuthentication: currentConfig.requireAuthentication,\n      openOptions: processedOptions,\n    };\n\n    logger.log(\"Opening compact feedback form with config:\", feedbackFormConfig);\n\n    renderFeedbackForm({\n      product,\n      attributes,\n      config: feedbackFormConfig,\n    });\n    return;\n  }\n\n  // Store the widget opening options in sessionStorage so the widget can pick them up\n  if (processedOptions) {\n    sessionStore.set(\"uo-widget-open-options\", JSON.stringify(processedOptions));\n  }\n\n  if (processedOptions?.modal) {\n    const modalConfig = {\n      theme: currentConfig.theme,\n      floatingWidget: true,\n      forceOpen: true,\n      openOptions: processedOptions,\n      widget: currentConfig.widget,\n      locale: currentConfig.locale,\n      language: currentConfig.language,\n      email: currentConfig.email,\n      emailHash: currentConfig.emailHash,\n      name: currentConfig.name,\n      requireAuthentication: currentConfig.requireAuthentication,\n    };\n\n    logger.log(\"Opening widget modal with config:\", modalConfig);\n\n    // Reuse floating renderer (centers when variant is modal)\n    renderFloatingWidget({\n      product,\n      attributes,\n      config: modalConfig,\n      variant: processedOptions?.modal ? \"modal\" : \"floating\",\n    } as any);\n  } else {\n    // Force the widget to open as a drawer\n    const drawerConfig = {\n      // Only include essential config properties to avoid conflicts\n      theme: currentConfig.theme,\n      floatingWidget: false,\n      forceOpen: true,\n      openOptions: processedOptions,\n      widget: currentConfig.widget,\n      locale: currentConfig.locale,\n      language: currentConfig.language,\n      email: currentConfig.email,\n      emailHash: currentConfig.emailHash,\n      name: currentConfig.name,\n      requireAuthentication: currentConfig.requireAuthentication,\n      widgetMountSelector: \"body\",\n    };\n\n    logger.log(\"Opening widget drawer with config:\", drawerConfig);\n\n    renderUserorbitDrawer({\n      product,\n      attributes,\n      config: drawerConfig,\n    });\n    window.dispatchEvent(new Event(\"uojs-widget-drawer-opened\"));\n  }\n};\n\nexport const closeWidgetDrawer = async () => {\n  window.dispatchEvent(new Event(\"uojs-close-widget\"));\n};\n\nexport const installRteButtonHandlers = () => {\n  if (rteButtonHandlerInstalled) return;\n  rteButtonHandlerInstalled = true;\n\n  document.addEventListener(\"click\", (event) => {\n    const target = event.target instanceof Element ? event.target : null;\n    const button = target?.closest<HTMLButtonElement>('button[data-type=\"uo-rte-button\"]');\n    if (!button) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const trigger = button.dataset.uoTrigger;\n    const triggerId = button.dataset.uoTriggerId;\n    const link = button.dataset.uoLink;\n\n    if (trigger && trigger !== \"none\" && triggerId) {\n      switch (trigger) {\n        case \"article\":\n          void openWidgetDrawer({ tab: \"help\", articleId: triggerId });\n          return;\n        case \"announcement\":\n          void openWidgetDrawer({ tab: \"updates\", announcementId: triggerId });\n          return;\n        case \"tour\": {\n          const tour = findTourById(triggerId);\n          if (tour) void triggerTour(tour, true);\n          return;\n        }\n        case \"checklist\": {\n          const checklist = findChecklistById(triggerId);\n          if (checklist) void triggerChecklist(checklist, true);\n          return;\n        }\n        case \"survey\": {\n          const survey = findSurveyById(triggerId);\n          if (survey) void triggerSurvey(survey, true);\n          return;\n        }\n      }\n    }\n\n    if (link) {\n      window.open(link, \"_blank\", \"noopener,noreferrer\");\n    }\n  });\n};\n\nexport const addWidgetContainer = (): void => {\n  const containerElement = markUserorbitOwnedHost(document.createElement(\"div\"));\n  containerElement.id = CONTAINER_ID;\n  document.body.appendChild(containerElement);\n};\n\nexport const removeWidgetContainer = (): void => {\n  document.getElementById(CONTAINER_ID)?.remove();\n};\n\nexport const findSurveyById = (id: string): SurveyFormType | null => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, cannot find survey\");\n    return null;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, cannot find survey\");\n    return null;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"surveys\")) {\n    logger.debug(\"Surveys disabled for this widget, cannot find survey\");\n    return null;\n  }\n\n  const personState = currentConfig.personState;\n  if (!personState?.data) {\n    logger.debug(\"PersonState or personState.data is undefined, cannot find survey\");\n    return null;\n  }\n\n  const { surveys } = personState.data;\n  if (!surveys || surveys.length === 0) {\n    logger.debug(\"No surveys available\");\n    return null;\n  }\n\n  const survey = surveys.find((s: SurveyFormType) => s.id === id);\n  if (!survey) {\n    logger.debug(`Survey with id \"${id}\" not found`);\n    return null;\n  }\n\n  return survey;\n};\n\nexport const findTourById = (id: string): TourInterface | null => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, cannot find tour\");\n    return null;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, cannot find tour\");\n    return null;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"tours\")) {\n    logger.debug(\"Tours disabled for this widget, cannot find tour\");\n    return null;\n  }\n\n  const personState = currentConfig.personState;\n  if (!personState?.data) {\n    logger.debug(\"PersonState or personState.data is undefined, cannot find tour\");\n    return null;\n  }\n\n  const { tours } = personState.data;\n  if (!tours || tours.length === 0) {\n    logger.debug(\"No tours available\");\n    return null;\n  }\n\n  const tour = tours.find((t: TourInterface) => t.id === id);\n  if (!tour) {\n    logger.debug(`Tour with id \"${id}\" not found`);\n    return null;\n  }\n\n  return tour;\n};\n\nexport const findChecklistById = (id: string): ChecklistSubscriberInterface | null => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized yet, cannot find checklist\");\n    return null;\n  }\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, cannot find checklist\");\n    return null;\n  }\n  if (!isWidgetRuntimeFeatureEnabled(currentConfig.environmentState?.data?.product, \"checklists\")) {\n    logger.debug(\"Checklists disabled for this widget, cannot find checklist\");\n    return null;\n  }\n\n  const personState = currentConfig.personState;\n  if (!personState?.data) {\n    logger.debug(\"PersonState or personState.data is undefined, cannot find checklist\");\n    return null;\n  }\n\n  const { checklists } = personState.data;\n  if (!checklists || checklists.length === 0) {\n    logger.debug(\"No checklists available\");\n    return null;\n  }\n\n  const checklist = checklists.find((c: ChecklistSubscriberInterface) => c.id === id);\n  if (!checklist) {\n    logger.debug(`Checklist with id \"${id}\" not found`);\n    return null;\n  }\n\n  return checklist;\n};\n","// ABOUTME: Tour launch links: captures `uo_tour` from the URL, keeps the request in session storage\n// ABOUTME: across page loads, and starts the tour once the visitor is identified and on its first step's page.\nimport { TOUR_LAUNCH_PARAM } from \"@userorbit/utils/tour-launch\";\nimport { filterByCompletedStepsAndPath } from \"../utils/tour\";\nimport { meetsTargetingEligibility } from \"./automatic-targeting\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { sessionStore } from \"./storage\";\nimport { findTourById, getTourRuntimeState, triggerTour } from \"./widget\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\n\nconst TOUR_LAUNCH_STORAGE_KEY = \"userorbit:tour-launch\";\nconst TOUR_LAUNCH_TTL_MS = 2 * 60 * 60 * 1000;\nconst TOUR_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;\n\ntype TourLaunch = {\n  tourId: string;\n  accountId: string;\n  identity: string | null;\n  createdAt: number;\n  shownAt: number | null;\n};\n\nconst launchAttemptsInFlight = new Set<string>();\n\nconst readTourLaunch = (): TourLaunch | null => {\n  try {\n    const launch = JSON.parse(sessionStore.get(TOUR_LAUNCH_STORAGE_KEY) || \"null\");\n    if (!launch?.tourId || !launch.accountId) return null;\n    if (Date.now() - launch.createdAt > TOUR_LAUNCH_TTL_MS) {\n      clearTourLaunch();\n      return null;\n    }\n    return launch;\n  } catch {\n    clearTourLaunch();\n    return null;\n  }\n};\n\nconst writeTourLaunch = (launch: TourLaunch) => {\n  sessionStore.set(TOUR_LAUNCH_STORAGE_KEY, JSON.stringify(launch));\n};\n\nexport const clearTourLaunch = () => {\n  sessionStore.remove(TOUR_LAUNCH_STORAGE_KEY);\n};\n\nexport const captureTourLaunchFromUrl = (accountId: string): boolean => {\n  if (typeof window === \"undefined\") return false;\n  const url = new URL(window.location.href);\n  if (!url.searchParams.has(TOUR_LAUNCH_PARAM)) return false;\n  const tourId = url.searchParams.get(TOUR_LAUNCH_PARAM)?.trim() || \"\";\n\n  url.searchParams.delete(TOUR_LAUNCH_PARAM);\n  window.history.replaceState(window.history.state, document.title, url.toString());\n\n  if (!TOUR_ID_PATTERN.test(tourId)) {\n    logger.warn(`Ignoring invalid tour launch link value \"${tourId}\"`);\n    return false;\n  }\n\n  writeTourLaunch({ tourId, accountId, identity: null, createdAt: Date.now(), shownAt: null });\n  return true;\n};\n\nexport const getTourLaunchIdForPerson = (\n  accountId: string,\n  identity: string | null | undefined,\n): string | null => {\n  const launch = readTourLaunch();\n  if (!launch || !identity) return null;\n  if (launch.accountId !== accountId || (launch.identity && launch.identity !== identity)) {\n    clearTourLaunch();\n    return null;\n  }\n  if (!launch.identity) writeTourLaunch({ ...launch, identity });\n  return launch.tourId;\n};\n\nexport const isTourLaunchPending = (tourId: string): boolean => {\n  const launch = readTourLaunch();\n  return launch?.tourId === tourId && !launch.shownAt;\n};\n\nexport const markTourLaunchShown = (tourId: string) => {\n  const launch = readTourLaunch();\n  if (launch?.tourId === tourId && !launch.shownAt) {\n    writeTourLaunch({ ...launch, shownAt: Date.now() });\n  }\n};\n\nexport const endTourLaunch = (tourId: string) => {\n  if (readTourLaunch()?.tourId === tourId) clearTourLaunch();\n};\n\nexport const startPendingTourLaunch = async (): Promise<void> => {\n  const launch = readTourLaunch();\n  if (!launch || launch.shownAt || getTourRuntimeState().id) return;\n\n  const tour = findTourById(launch.tourId);\n  if (!tour) return;\n\n  const steps = Array.isArray(tour.steps) ? tour.steps : [];\n  if (!steps.length) return;\n\n  const isOnFirstStepPage = filterByCompletedStepsAndPath(steps, null)[0]?.id === steps[0].id;\n  if (!isOnFirstStepPage) {\n    logger.debug(`Tour \"${tour.id}\" launch is waiting for its first step's page`);\n    return;\n  }\n\n  const url = window.location.href;\n  const attemptKey = `${tour.id}:${launch.createdAt}:${url}`;\n  if (launchAttemptsInFlight.has(attemptKey)) return;\n  launchAttemptsInFlight.add(attemptKey);\n\n  try {\n    if (!(await meetsTargetingEligibility(tour, config.get()?.personState?.data))) {\n      logger.debug(`Tour \"${tour.id}\" launch is not eligible for this visitor`);\n      return;\n    }\n\n    const currentLaunch = readTourLaunch();\n    if (\n      !currentLaunch ||\n      currentLaunch.tourId !== launch.tourId ||\n      currentLaunch.accountId !== launch.accountId ||\n      currentLaunch.identity !== launch.identity ||\n      currentLaunch.createdAt !== launch.createdAt ||\n      currentLaunch.shownAt ||\n      window.location.href !== url ||\n      getTourRuntimeState().id\n    )\n      return;\n\n    logger.debug(`Starting tour \"${tour.id}\" from launch link`);\n    await triggerTour(tour, true, { source: \"programmatic\", bypassCaps: true });\n  } finally {\n    launchAttemptsInFlight.delete(attemptKey);\n  }\n};\n","import { Config } from \"./config\";\nimport { scheduleDelivery } from \"./delivery-scheduler\";\nimport { Logger } from \"./logger\";\nimport { openWidgetDrawer, triggerChecklist, triggerSurvey, triggerTour } from \"./widget\";\nimport request from \"../utils/api\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nconst DRAWER_CLOSED_EVENT = \"uojs-widget-drawer-closed\";\nconst DRAWER_DELIVERY_MAX_ACTIVE_MS = 30 * 60 * 1000;\nconst RESUMABLE_EXPERIENCE_KINDS = new Set([\"tour\", \"checklist\", \"survey\"]);\n\nexport function shouldTriggerAdoptionWorkflowAssignment(assignment: any) {\n  return (\n    assignment?.status === \"pending\" ||\n    (assignment?.status === \"shown\" && RESUMABLE_EXPERIENCE_KINDS.has(assignment?.experienceKind))\n  );\n}\n\nfunction currentAssignment(assignmentId: string) {\n  return config\n    .get()\n    ?.personState?.data?.workflowAssignments?.find(\n      (assignment: any) => assignment.id === assignmentId && assignment.status === \"pending\",\n    );\n}\n\ntype AssignmentOutcomeStatus = \"shown\" | \"completed\" | \"dismissed\";\n\nasync function markAssignmentOutcome(\n  assignmentId: string,\n  status: AssignmentOutcomeStatus,\n  outcome: Record<string, unknown> = {},\n) {\n  const current = config.get();\n  const token = current?.personState?.data?.code;\n  if (!current?.accountId || !token) return false;\n  await request(\"public/workflow-assignments.outcome\", {\n    token,\n    account: current.accountId,\n    assignmentId,\n    status,\n    outcome,\n  });\n  const latest = config.get();\n  if (latest?.personState) {\n    config.update({\n      ...latest,\n      personState: {\n        ...latest.personState,\n        data: {\n          ...latest.personState.data,\n          workflowAssignments: (latest.personState.data.workflowAssignments || []).map(\n            (assignment: any) =>\n              assignment.id === assignmentId ? { ...assignment, status } : assignment,\n          ),\n        },\n        expiresAt: new Date(0),\n      },\n    });\n  }\n  return true;\n}\n\nfunction scheduleDrawerAssignment(assignment: any, serverOrder: number) {\n  const resource = {\n    ...assignment.resource,\n    configuration: {\n      ...assignment.resource?.configuration,\n      targeting: {\n        ...assignment.resource?.configuration?.targeting,\n        deliveryPolicy: assignment.deliveryPolicy || {},\n      },\n    },\n  };\n  scheduleDelivery({\n    kind: assignment.experienceKind,\n    id: assignment.experienceId,\n    source: \"workflow\",\n    workflowAssignmentId: assignment.id,\n    experience: resource,\n    serverOrder,\n    bypassCaps: false,\n    revalidate: () => Boolean(currentAssignment(assignment.id)),\n    render(lifecycle) {\n      let finished = false;\n      let shownOutcomePromise: Promise<boolean> | null = null;\n      const finish = (reason: string, terminalStatus?: AssignmentOutcomeStatus) => {\n        if (finished) return;\n        finished = true;\n        window.removeEventListener(DRAWER_CLOSED_EVENT, handleDrawerClosed);\n        clearTimeout(activeTimeout);\n        void lifecycle.onClosed?.(reason);\n        if (terminalStatus) {\n          void (shownOutcomePromise || Promise.resolve(true))\n            .catch(() => false)\n            .then(() =>\n              markAssignmentOutcome(assignment.id, terminalStatus, {\n                reason,\n                experienceKind: assignment.experienceKind,\n              }),\n            )\n            .catch((error) => {\n              logger.warn(\"Failed to record adoption workflow drawer outcome\", error);\n            });\n        }\n      };\n      const handleDrawerClosed = () => finish(\"closed\", \"dismissed\");\n      window.addEventListener(DRAWER_CLOSED_EVENT, handleDrawerClosed, { once: true });\n      const activeTimeout = window.setTimeout(\n        () => finish(\"active_window_elapsed\"),\n        DRAWER_DELIVERY_MAX_ACTIVE_MS,\n      );\n      const open = (() => {\n        if (assignment.experienceKind === \"announcement\") {\n          return openWidgetDrawer({ tab: \"updates\", announcementId: assignment.experienceId });\n        }\n        if (assignment.experienceKind === \"article\") {\n          return openWidgetDrawer({ tab: \"help\", articleId: assignment.experienceId });\n        }\n\n        const url = assignment.resource?.publicUrl || assignment.resource?.shareUrl;\n        if (!url) return Promise.reject(new Error(\"demo_url_missing\"));\n        const opened = window.open(\"about:blank\", \"_blank\");\n        if (!opened) return Promise.reject(new Error(\"demo_popup_blocked\"));\n        try {\n          opened.opener = null;\n          opened.location.replace(url);\n        } catch (error) {\n          opened.close();\n          return Promise.reject(error);\n        }\n        return Promise.resolve();\n      })();\n      void open\n        .then(async () => {\n          const accepted = (await lifecycle.onShown?.()) !== false;\n          if (!accepted) {\n            finish(\"shown_rejected\");\n            return;\n          }\n          if (finished) return;\n          if (assignment.experienceKind === \"demo\") {\n            await markAssignmentOutcome(assignment.id, \"completed\", {\n              reason: \"opened\",\n              experienceKind: \"demo\",\n            });\n            finish(\"opened\");\n            return;\n          }\n          shownOutcomePromise = markAssignmentOutcome(assignment.id, \"shown\");\n          await shownOutcomePromise;\n        })\n        .catch(() => {\n          if (finished) return;\n          finished = true;\n          window.removeEventListener(DRAWER_CLOSED_EVENT, handleDrawerClosed);\n          clearTimeout(activeTimeout);\n          void lifecycle.onFailed?.(\"open_failed\");\n        });\n      return true;\n    },\n  });\n}\n\nexport async function triggerAdoptionWorkflowAssignments(currentConfig = config.get()) {\n  if (!currentConfig || currentConfig.inApp?.enabled === false) return;\n  const assignments = Array.isArray(currentConfig.personState?.data?.workflowAssignments)\n    ? currentConfig.personState.data.workflowAssignments.filter(\n        shouldTriggerAdoptionWorkflowAssignment,\n      )\n    : [];\n\n  for (const [index, assignment] of assignments.entries()) {\n    const options = {\n      source: \"workflow\" as const,\n      serverOrder: index,\n      bypassCaps: false,\n      workflowAssignmentId: assignment.id,\n    };\n    if (assignment.experienceKind === \"tour\") {\n      await triggerTour(assignment.resource, true, options);\n    } else if (assignment.experienceKind === \"checklist\") {\n      await triggerChecklist(assignment.resource, true, options);\n    } else if (assignment.experienceKind === \"survey\") {\n      await triggerSurvey(assignment.resource, true, options);\n    } else if ([\"announcement\", \"article\", \"demo\"].includes(assignment.experienceKind)) {\n      scheduleDrawerAssignment(assignment, index);\n    }\n  }\n}\n","import { privacyGeneration } from \"./privacyPreferences\";\nimport type { TJsTrackProperties } from \"@userorbit/types/js\";\nimport { getActionEventHistoryField } from \"@userorbit/types/behavior-history\";\nimport { getUserorbit } from \"./analytics\";\nimport { hasBehaviorEventOccurred } from \"./behavior-history\";\nimport { Config } from \"./config\";\nimport { type InvalidCodeError, type NetworkError, type Result, err, okVoid } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { isTourSnoozeActive } from \"../utils/tour\";\nimport { canAutomaticallyLaunchExperience } from \"./automatic-targeting\";\nimport { isTourLaunchPending } from \"./tourLaunch\";\nimport { triggerChecklist, triggerSurvey, triggerTour } from \"./widget\";\nimport { isWidgetRuntimeFeatureEnabled } from \"./widget-features\";\nimport { triggerAdoptionWorkflowAssignments } from \"./adoption-workflow-assignments\";\n\nconst logger = Logger.getInstance();\nconst config = Config.getInstance();\nconst DEFAULT_PAGE_VIEW_TRIGGER_NAME = \"Automatic\";\nlet observedActionScope = \"\";\nlet observedActionNames = new Set<string>();\n\nfunction recordObservedAction(name: string, currentConfig: any): void {\n  const person = currentConfig.personState?.data;\n  const scope = JSON.stringify([\n    currentConfig.accountId ?? \"\",\n    person?.userId ?? person?.email ?? \"anonymous\",\n  ]);\n  if (scope !== observedActionScope) {\n    observedActionScope = scope;\n    observedActionNames = new Set();\n  }\n  observedActionNames.add(name);\n}\n\nfunction matchesAutoStartEventTriggers(experience: any, currentActionName: string): boolean {\n  const triggers = Array.isArray(experience?.triggers)\n    ? experience.triggers.filter((trigger: any) => trigger?.event)\n    : [];\n  if (!triggers.some((trigger: any) => trigger.event.name === currentActionName)) return false;\n  if (experience.configuration?.targeting?.eventTriggerCombinator !== \"and\") return true;\n\n  return triggers.every((trigger: any) => {\n    const field = getActionEventHistoryField(trigger.event);\n    return (\n      (field !== null && hasBehaviorEventOccurred(field)) ||\n      observedActionNames.has(trigger.event.name)\n    );\n  });\n}\n\nexport const trackAction = async (\n  name: string,\n  alias?: string,\n  properties?: TJsTrackProperties & { restart?: boolean },\n): Promise<Result<void, NetworkError>> => {\n  const aliasName = alias || name;\n\n  logger.debug(`Userorbit: Action \"${aliasName}\" tracked`);\n\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    logger.debug(\"Config not initialized, skipping action tracking\");\n    return okVoid();\n  }\n\n  const personState = currentConfig.personState;\n  if (!personState?.data) {\n    logger.debug(\"PersonState or personState.data is undefined, skipping action tracking\");\n    return okVoid();\n  }\n\n  if (currentConfig.inApp?.enabled === false) {\n    logger.debug(\"In-app functionality disabled, skipping in-app action triggers\");\n    return okVoid();\n  }\n\n  recordObservedAction(name, currentConfig);\n  await triggerAdoptionWorkflowAssignments(currentConfig);\n\n  const { tours, checklists, surveys } = personState.data;\n  const product = currentConfig.environmentState?.data?.product;\n  const toursEnabled = isWidgetRuntimeFeatureEnabled(product, \"tours\");\n  const checklistsEnabled = isWidgetRuntimeFeatureEnabled(product, \"checklists\");\n  const surveysEnabled = isWidgetRuntimeFeatureEnabled(product, \"surveys\");\n\n  if (toursEnabled && tours && tours.length > 0) {\n    for (const tour of tours) {\n      logger.debug(`tours ${JSON.stringify({ name })}`);\n      const frequency = tour.configuration?.targeting?.frequency;\n      const maxViews = tour.configuration?.targeting?.frequencyCount ?? 1;\n      const subscriberState = tour.tourSubscriber?.state;\n      const viewCount = tour.tourSubscriber?.viewCount ?? 0;\n\n      const canTrigger = (() => {\n        if (isTourLaunchPending(tour.id)) {\n          return false;\n        }\n        if (isTourSnoozeActive(tour.tourSubscriber)) {\n          return false;\n        }\n        if (frequency === \"repeat\") {\n          return tour.configuration?.targeting?.overrideDismissed || subscriberState !== \"DM\";\n        }\n        if (frequency === \"n_times\") {\n          return (\n            (tour.configuration?.targeting?.overrideDismissed || subscriberState !== \"DM\") &&\n            viewCount < maxViews\n          );\n        }\n        // default to once\n        return !(subscriberState === \"CO\" || subscriberState === \"DM\") || !tour.tourSubscriber;\n      })();\n\n      if (\n        canTrigger &&\n        (await canAutomaticallyLaunchExperience(tour, currentConfig.personState?.data))\n      ) {\n        logger.debug(`triggering eval tour ${JSON.stringify({ name })}`);\n        if (\n          tour.configuration?.targeting?.trigger === \"auto\" &&\n          matchesAutoStartEventTriggers(tour, name)\n        ) {\n          logger.debug(`confirm trigger`);\n          await triggerTour(tour, properties?.restart, {\n            source: \"action\",\n            serverOrder: tours.indexOf(tour),\n          });\n        }\n      }\n    }\n  } else {\n    logger.debug(\"No active tour to display\");\n  }\n\n  if (checklistsEnabled && checklists && checklists.length > 0) {\n    for (const checklist of checklists) {\n      if (\n        (checklist.configuration?.targeting?.frequency === \"repeat\" &&\n          !(checklist.checklistSubscriber?.state === \"DM\")) ||\n        !(\n          checklist.checklistSubscriber?.state === \"CO\" ||\n          checklist.checklistSubscriber?.state === \"DM\"\n        ) ||\n        !checklist.checklistSubscriber\n      ) {\n        if (!(await canAutomaticallyLaunchExperience(checklist, currentConfig.personState?.data))) {\n          continue;\n        }\n        logger.debug(`triggering eval checklist ${name}`);\n        if (matchesAutoStartEventTriggers(checklist, name)) {\n          await triggerChecklist(checklist, properties?.restart, {\n            source: \"action\",\n            serverOrder: checklists.indexOf(checklist),\n          });\n        }\n        for (const task of checklist.tasks) {\n          if (task.configuration?.triggers) {\n            for (const trigger of task.configuration.triggers) {\n              if (trigger.event.name === name) {\n                const evt = new CustomEvent(\"checklist_task_triggers\", {\n                  detail: {\n                    checklist: checklist,\n                    task: task,\n                  },\n                });\n                setTimeout(() => {\n                  document.dispatchEvent(evt);\n                }, 1000);\n              }\n            }\n          }\n        }\n      }\n    }\n  } else {\n    logger.debug(\"No active checklist to display\");\n  }\n\n  if (surveysEnabled && surveys && surveys.length > 0) {\n    for (const survey of surveys) {\n      if (\n        !(survey.surveySubscriber?.state === \"CO\" || survey.surveySubscriber?.state === \"DM\") &&\n        (await canAutomaticallyLaunchExperience(survey, currentConfig.personState?.data))\n      ) {\n        logger.debug(`triggering eval survey ${JSON.stringify({ name })}`);\n        if (\n          survey.configuration?.targeting?.trigger === \"auto\" &&\n          matchesAutoStartEventTriggers(survey, name)\n        ) {\n          await triggerSurvey(survey, properties?.restart, {\n            source: \"action\",\n            serverOrder: surveys.indexOf(survey),\n          });\n        }\n      }\n    }\n  } else {\n    logger.debug(\"No active surveys to display\");\n  }\n\n  return okVoid();\n};\n\nexport const trackCodeAction = (\n  code: string,\n  properties?: TJsTrackProperties,\n  analyticsGeneration?: number,\n): Promise<Result<void, NetworkError>> | Result<void, InvalidCodeError> => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    return err({\n      code: \"invalid_code\",\n      message: \"Config not initialized\",\n    });\n  }\n\n  const actionClasses = currentConfig.environmentState?.data?.actionClasses ?? [];\n\n  // @ts-ignore\n  const codeActionClasses = actionClasses.filter((action) => action.type === \"code\");\n  // @ts-ignore\n  const action = codeActionClasses.find((action) => action.key === code);\n\n  if (!action) {\n    return err({\n      code: \"invalid_code\",\n      message: `${code} action unknown. Please add this action in Userorbit first in order to use it in your code.`,\n    });\n  }\n\n  if (analyticsGeneration === undefined || analyticsGeneration === privacyGeneration(\"analytics\"))\n    getUserorbit()?.track(code);\n  return trackAction(action.name, code, properties);\n};\n\nexport const trackNoCodeAction = (name: string): Promise<Result<void, NetworkError>> => {\n  logger.debug(`trackNoCodeAction ${name}`);\n  const userorbit = getUserorbit();\n  if (name !== DEFAULT_PAGE_VIEW_TRIGGER_NAME) {\n    userorbit?.track(name);\n  }\n\n  return trackAction(name);\n};\n","import { Config } from \"./config\";\nimport { err } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { getTourBuilderToken } from \"./tourBuilder\";\n\nconst logger = Logger.getInstance();\n\nexport const getApi = () => {\n  const config = Config.getInstance();\n  const configData = config.get();\n\n  if (!configData) {\n    throw new Error(\"userorbit.init() must be called before getApi()\");\n  }\n\n  const { accountId, apiHost } = configData;\n\n  if (!accountId || !apiHost) {\n    throw new Error(\"userorbit.init() must be called before getApi()\");\n  }\n\n  let token: string | null;\n  return async (url: string, body: any) => {\n    token = token || getTourBuilderToken();\n\n    const responseRaw: any = await fetch(`${apiHost}/api/v1/${url}`, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"x-tour-builder-token\": token || \"\",\n      },\n      credentials: token ? \"omit\" : \"include\",\n      body: JSON.stringify(body),\n    });\n\n    if (!responseRaw.ok) {\n      const jsonRes = await responseRaw.json();\n\n      const error = err({\n        code: \"network_error\",\n        status: responseRaw.status,\n        message: \"Error syncing with backend\",\n        url: `${apiHost}/api/v1/${url}`,\n        responseMessage: jsonRes.message,\n      });\n\n      throw error;\n    }\n\n    const response = await responseRaw.json();\n\n    if (!response) {\n      logger.error(\"Request Failed.\", response);\n      return null;\n    }\n\n    const hasData = response.data !== null && response.data !== undefined;\n    const responseData = hasData && typeof response.data === \"object\" ? response.data : {};\n\n    return {\n      ...responseData,\n      data: hasData && typeof response.data === \"object\" ? response.data.data : null,\n      ...(response.code ? { code: response.code } : {}),\n      pagination: hasData && typeof response.data === \"object\" ? response.data.pagination : null,\n    };\n  };\n};\n","import { getApi } from \"./api\";\nimport { SDK_CAPABILITIES } from \"./capabilities\";\nimport { Config } from \"./config\";\nimport { MissingPersonError, NetworkError, Result, err, ok, okVoid } from \"./errors\";\nimport { Logger } from \"./logger\";\n\ntype TAttributes = Record<string, unknown>;\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\n\nexport const updateAttribute = async (\n  key: string,\n  value: string | number,\n): Promise<\n  Result<\n    {\n      changed: boolean;\n      message: string;\n    },\n    Error | NetworkError\n  >\n> => {\n  const configData = config.get();\n  if (!configData) {\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"Config not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"Config is null\",\n    });\n  }\n  const { apiHost, accountId } = configData;\n  const personState = configData.personState;\n  if (!personState?.data) {\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"PersonState not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"PersonState data is undefined\",\n    });\n  }\n  const userId = personState.data.userId;\n\n  if (!userId) {\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"Missing userId\",\n      url: `${apiHost}/api/v1/client/${accountId}/people/${userId}/attributes`,\n      responseMessage: \"Missing userId\",\n    });\n  }\n\n  const api = getApi();\n\n  const res = await api(`client/${accountId}/environment`, {\n    capabilities: SDK_CAPABILITIES,\n    method: \"POST\",\n    body: JSON.stringify({\n      capabilities: SDK_CAPABILITIES,\n      userId,\n      attributes: { [key]: value },\n    }),\n  });\n\n  if (!res.ok) {\n    // @ts-ignore\n    if (res.error.details?.ignore) {\n      // @ts-ignore\n      logger.error(res.error.message ?? `Error updating person with userId ${userId}`);\n      return {\n        ok: true,\n        value: {\n          changed: false,\n          // @ts-ignore\n          message: res.error.message,\n        },\n      };\n    }\n    return err({\n      code: \"network_error\",\n      // @ts-ignore\n      status: res.error.status ?? 500,\n      // @ts-ignore\n      message: res.error.message ?? `Error updating person with userId ${userId}`,\n      url: `${apiHost}/api/v1/client/${accountId}/people/${userId}/attributes`,\n      // @ts-ignore\n      responseMessage: res.error.message,\n    });\n  }\n  // @ts-ignore\n  if (res.data.changed) {\n    logger.debug(\"Attribute updated in Userorbit\");\n    return {\n      ok: true,\n      value: {\n        changed: true,\n        message: \"Attribute updated in Userorbit\",\n      },\n    };\n  }\n\n  return {\n    ok: true,\n    value: {\n      changed: false,\n      message: \"Attribute not updated in Userorbit\",\n    },\n  };\n};\n\nexport const updateAttributes = async (\n  apiHost: string,\n  accountId: string,\n  userId: string,\n  attributes: TAttributes,\n  email?: string,\n  name?: string,\n): Promise<Result<TAttributes, NetworkError>> => {\n  const configData = config.get();\n  let finalEmail = email;\n  let finalName = name;\n\n  if (configData) {\n    finalEmail = finalEmail || configData.email;\n    finalName = finalName || configData.name;\n  }\n\n  const existingPerson = configData?.personState?.data;\n  const nextEmail = typeof finalEmail === \"string\" ? finalEmail.trim().toLowerCase() : undefined;\n  const nextName = typeof finalName === \"string\" ? finalName.trim() : undefined;\n  const hasIdentityUpdate =\n    (!!nextEmail && existingPerson?.email !== nextEmail) ||\n    (!!nextName && existingPerson?.name !== nextName) ||\n    Boolean(nextEmail && configData?.emailHash);\n\n  // clean attributes and remove existing attributes if config already exists\n  const updatedAttributes = { ...attributes };\n  if (config) {\n    try {\n      const existingAttributes = existingPerson?.attributes;\n\n      if (existingAttributes) {\n        for (const [key, value] of Object.entries(existingAttributes)) {\n          if (updatedAttributes[key] === value) {\n            delete updatedAttributes[key];\n          }\n        }\n      }\n    } catch {\n      logger.debug(\"config not set; sending all attributes to backend\");\n    }\n  }\n\n  // send to backend if updatedAttributes is not empty\n  if (Object.keys(updatedAttributes).length === 0 && !hasIdentityUpdate) {\n    logger.debug(\"No attributes or identity fields to update. Skipping update.\");\n    return ok(updatedAttributes);\n  }\n\n  logger.debug(\"Updating attributes: \" + JSON.stringify(updatedAttributes));\n\n  const api = getApi();\n\n  const res = await api(`client/${accountId}/identify/contact/${userId}`, {\n    capabilities: SDK_CAPABILITIES,\n    skipBehaviorHistory: true,\n    email: nextEmail,\n    ...(configData?.emailHash && { emailHash: configData.emailHash }),\n    name: nextName || (nextEmail ? nextEmail.replace(/@.*$/, \"\") : undefined),\n    attributes: { ...updatedAttributes },\n  });\n\n  if (res) {\n    logger.log(\"res\", res);\n    return ok(res);\n  } else {\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: `Error updating person with userId ${userId}`,\n      url: `${apiHost}/api/public/subscriber.identify`,\n      // // @ts-ignore\n      responseMessage: res,\n    });\n  }\n};\n\nexport const isExistingAttribute = (key: string, value: string): boolean => {\n  const configData = config.get();\n  if (!configData) {\n    return false;\n  }\n  const personState = configData.personState;\n  if (!personState?.data?.attributes) {\n    return false;\n  }\n\n  if (personState.data.attributes[key] === value) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const setAttributeInApp = async (\n  key: string,\n  value: any,\n): Promise<Result<void, NetworkError | MissingPersonError>> => {\n  if (key === \"userId\") {\n    logger.error(\n      \"Setting userId is no longer supported. Please set the userId in the init call instead.\",\n    );\n    return okVoid();\n  }\n\n  const configData = config.get();\n  if (!configData) {\n    logger.error(\"Config not initialized, cannot set attribute\");\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"Config not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"Config is null\",\n    });\n  }\n  const personState = configData.personState;\n  if (!personState?.data) {\n    logger.error(\"PersonState not initialized, cannot set attribute\");\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"PersonState not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"PersonState data is undefined\",\n    });\n  }\n  const userId = personState.data.userId;\n\n  logger.debug(\"Setting attribute: \" + key + \" to value: \" + value);\n  // check if attribute already exists with this value\n  if (isExistingAttribute(key, value.toString())) {\n    logger.debug(\"Attribute already set to this value. Skipping update.\");\n    return okVoid();\n  }\n\n  if (!userId) {\n    logger.error(\n      \"UserId not provided, please provide a userId in the init method before setting attributes.\",\n    );\n    return okVoid();\n  }\n\n  const result = await updateAttribute(key, value.toString());\n\n  if (result.ok) {\n    return okVoid();\n  }\n\n  return err((result as any).error as NetworkError);\n};\n","import { config } from \"./config\";\nimport { initializeAnalytics, withdrawAnalytics } from \"./analytics\";\nimport { initializeSessionReplay } from \"./replay\";\nimport { renderWidget } from \"./widget\";\nimport {\n  getPrivacyPreferences,\n  privacyAllowed,\n  privacyGeneration,\n  updatePrivacyPreferences,\n  type PrivacyPreferences,\n} from \"./privacyPreferences\";\n\nexport async function setPrivacyPreferences(choices: PrivacyPreferences): Promise<void> {\n  await applyPrivacyPreferences(choices, true);\n}\n\nexport async function applyPrivacyPreferences(\n  choices: PrivacyPreferences,\n  renderOnGrant: boolean,\n): Promise<void> {\n  updatePrivacyPreferences(choices);\n  if (Object.keys(choices).length === 0) return;\n  const current = config.get();\n  if (current) {\n    const updates: Record<string, unknown> = {};\n    for (const purpose of [\"analytics\", \"sessionReplay\", \"widget\"] as const) {\n      if (choices[purpose] !== undefined)\n        updates[purpose] = { ...current[purpose], enabled: choices[purpose] };\n    }\n    config.update(updates, false);\n  }\n  if (!privacyAllowed(\"analytics\")) withdrawAnalytics();\n  else if (current?.environmentState && current?.personState) {\n    initializeAnalytics(config.get(), current.environmentState, current.personState);\n  }\n  const widgetEpoch = privacyGeneration(\"widget\");\n  const replay = initializeSessionReplay(getPrivacyPreferences().sessionReplay);\n  if (\n    renderOnGrant &&\n    choices.widget === true &&\n    current?.environmentState?.data?.product &&\n    privacyAllowed(\"widget\") &&\n    widgetEpoch === privacyGeneration(\"widget\")\n  )\n    renderWidget(config.get());\n  await replay;\n}\nexport { getPrivacyPreferences } from \"./privacyPreferences\";\nexport type { PrivacyPreferences } from \"./privacyPreferences\";\n","import type { TourInterface } from \"../types\";\nimport {\n  clearTourSnoozeExpiry,\n  filterByCompletedStepsAndPath,\n  isTourSnoozeActive,\n  scheduleTourSnoozeExpiry,\n} from \"../utils/tour\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { isTourLaunchPending } from \"./tourLaunch\";\nimport { getTourRuntimeState, triggerTour } from \"./widget\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\n\nlet lastResumeUrl: string | null = null;\nconst resumedTourKeys = new Map<string, string>();\n\nexport const getResumableTourStepsForCurrentPage = (tour: TourInterface) => {\n  const completedStepId = tour?.tourSubscriber?.completedStepId ?? null;\n\n  if (!Array.isArray(tour?.steps) || tour.steps.length === 0) {\n    return [];\n  }\n\n  const subscriberState = tour.tourSubscriber?.state;\n  const overrideDismissed = tour.configuration?.targeting?.overrideDismissed;\n\n  if (subscriberState === \"CO\" || (subscriberState === \"DM\" && !overrideDismissed)) {\n    return [];\n  }\n\n  if (isTourSnoozeActive(tour.tourSubscriber)) {\n    return [];\n  }\n\n  if (subscriberState === \"SN\") {\n    return filterByCompletedStepsAndPath(tour.steps, null);\n  }\n\n  return completedStepId ? filterByCompletedStepsAndPath(tour.steps, completedStepId) : [];\n};\n\nexport const shouldResumeTourForCurrentPage = (tour: TourInterface) =>\n  getResumableTourStepsForCurrentPage(tour).length > 0;\n\nexport const resumeToursForCurrentPage = async (): Promise<void> => {\n  const currentConfig = config.get();\n  if (!currentConfig) {\n    return;\n  }\n\n  const currentUrl = window.location.href;\n  if (lastResumeUrl !== currentUrl) {\n    resumedTourKeys.clear();\n    lastResumeUrl = currentUrl;\n  }\n\n  const tours = currentConfig.personState?.data?.tours ?? [];\n\n  for (const tour of tours) {\n    if (isTourSnoozeActive(tour.tourSubscriber)) {\n      scheduleTourSnoozeExpiry(tour.id, tour.tourSubscriber?.snoozedUntil, () =>\n        resumeToursForCurrentPage(),\n      );\n      continue;\n    }\n    clearTourSnoozeExpiry(tour.id);\n\n    if (!shouldResumeTourForCurrentPage(tour) || isTourLaunchPending(tour.id)) {\n      continue;\n    }\n\n    const resumeKey = `${tour.id}:${tour.tourSubscriber?.completedStepId}:${currentUrl}`;\n    if (resumedTourKeys.get(tour.id) === resumeKey) {\n      continue;\n    }\n\n    const runtimeState = getTourRuntimeState();\n    if (runtimeState.id === tour.id && runtimeState.location === currentUrl) {\n      resumedTourKeys.set(tour.id, resumeKey);\n      continue;\n    }\n\n    logger.debug(`Resuming tour \"${tour.id}\" from step \"${tour.tourSubscriber?.completedStepId}\"`);\n    resumedTourKeys.set(tour.id, resumeKey);\n    await triggerTour(tour, false, {\n      source: \"resume\",\n      bypassCaps: true,\n      serverOrder: tours.indexOf(tour),\n    });\n  }\n};\n","import type { TActionClass } from \"@userorbit/types/action-classes\";\nimport { trackNoCodeAction } from \"./actions\";\nimport { getUserorbit } from \"./analytics\";\nimport { Config } from \"./config\";\nimport { ErrorHandler, NetworkError, Result, err, match, okVoid } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { startPendingTourLaunch } from \"./tourLaunch\";\nimport { resumeToursForCurrentPage } from \"./tourResume\";\nimport { evaluateNoCodeConfigClick, handleUrlFilters } from \"./utils\";\nimport { syncChecklistVisibility } from \"./widget\";\nimport { handleDeliveryRouteChange } from \"./delivery-scheduler\";\n\n// This module handles automatic tracking of user interactions:\n// - Page views: Tracks when users navigate to new pages\n// - Click events: Automatically tracks clicks on links, buttons, and interactive elements\n// - Exit intent: Tracks when users are about to leave the page\n// - Scroll depth: Tracks when users scroll to 50% of the page\n// - Custom actions: Tracks configured no-code actions based on CSS selectors and URL filters\n\nconst appConfig = Config.getInstance();\nconst logger = Logger.getInstance();\nconst errorHandler = ErrorHandler.getInstance();\n\n// Event types for various listeners\nconst events = [\"hashchange\", \"popstate\", \"pushstate\", \"replacestate\"];\n\n// Page URL Event Handlers\nlet arePageUrlEventListenersAdded = false;\n\nexport const checkPageUrl = async (): Promise<Result<void, NetworkError>> => {\n  logger.debug(`Checking page url: ${window.location.href}`);\n  handleDeliveryRouteChange(window.location.href);\n  const config = appConfig.get();\n  if (!config) return okVoid();\n  const actionClasses = config.environmentState?.data?.actionClasses ?? [];\n  // const actionClasses: any = [\n  //   {\n  //     name: \"on all pages\",\n  //     description: \"on all pages\",\n  //     type: \"noCode\",\n  //     noCodeConfig: { type: \"pageView\", urlFilters: [] },\n  //   },\n  // ];\n\n  const userorbit = getUserorbit();\n  userorbit?.track(\"$uo_web_page_view\", {\n    url: window.location.href,\n    title: document.title,\n    referrer: document.referrer,\n    path: window.location.pathname,\n  });\n\n  syncChecklistVisibility();\n\n  const noCodePageViewActionClasses = actionClasses.filter(\n    // @ts-ignore\n    (action) =>\n      (action.type === \"noCode\" && action.noCodeConfig?.type === \"pageView\") ||\n      (action.type === \"automatic\" && action.noCodeConfig?.type === \"pageView\"),\n  );\n\n  for (const event of noCodePageViewActionClasses) {\n    const urlFilters = event.noCodeConfig?.urlFilters ?? [];\n    const isValidUrl = handleUrlFilters(\n      urlFilters,\n      window.location.href,\n      event.noCodeConfig?.urlFilterCombinator ?? \"or\",\n    );\n\n    if (!isValidUrl) continue;\n\n    const trackResult = await trackNoCodeAction(event.name);\n    if (trackResult.ok !== true) return err(trackResult.error);\n  }\n\n  await resumeToursForCurrentPage();\n  await startPendingTourLaunch();\n\n  return okVoid();\n};\n\nconst checkPageUrlWrapper = () => checkPageUrl();\n\nexport const addPageUrlEventListeners = (): void => {\n  if (typeof window === \"undefined\" || arePageUrlEventListenersAdded) return;\n  events.forEach((event) => window.addEventListener(event, checkPageUrlWrapper));\n  arePageUrlEventListenersAdded = true;\n};\n\nexport const removePageUrlEventListeners = (): void => {\n  if (typeof window === \"undefined\" || !arePageUrlEventListenersAdded) return;\n  events.forEach((event) => window.removeEventListener(event, checkPageUrlWrapper));\n  arePageUrlEventListenersAdded = false;\n};\n\n// Click Event Handlers\nlet isClickEventListenerAdded = false;\n\nconst shouldTrackClick = (element: HTMLElement): boolean => {\n  // Check if element is a link or button\n  const tagName = element.tagName.toLowerCase();\n  if (tagName === \"a\" || tagName === \"button\") {\n    return true;\n  }\n\n  // Check if element has click-related roles or attributes\n  const role = element.getAttribute(\"role\");\n  if (role === \"button\" || role === \"link\") {\n    return true;\n  }\n\n  // Check if element is clickable (has onclick or is inside a clickable parent)\n  if (element.onclick || element.getAttribute(\"onclick\")) {\n    return true;\n  }\n\n  // Check if element is a form submit input\n  if (tagName === \"input\" && (element as HTMLInputElement).type === \"submit\") {\n    return true;\n  }\n\n  // Check if element has cursor pointer style (indicating it's clickable)\n  const computedStyle = window.getComputedStyle(element);\n  if (computedStyle.cursor === \"pointer\") {\n    return true;\n  }\n\n  return false;\n};\n\nconst getTrackableClickElement = (element: HTMLElement): HTMLElement => {\n  return (\n    element.closest<HTMLElement>(\n      'a, button, input[type=\"submit\"], [role=\"button\"], [role=\"link\"]',\n    ) || element\n  );\n};\n\nconst getElementText = (element: HTMLElement): string => {\n  const tagName = element.tagName.toLowerCase();\n  const inputValue = tagName === \"input\" ? ((element as HTMLInputElement).value || \"\").trim() : \"\";\n  const text =\n    inputValue ||\n    element.textContent?.replace(/\\s+/g, \" \").trim() ||\n    element.getAttribute(\"aria-label\")?.trim() ||\n    element.getAttribute(\"title\")?.trim() ||\n    element.getAttribute(\"alt\")?.trim() ||\n    \"\";\n\n  return text.slice(0, 300);\n};\n\nconst getClickTrackingData = (element: HTMLElement, url: string) => {\n  const tagName = element.tagName.toLowerCase();\n  const elementText = getElementText(element);\n  let path = \"\";\n  try {\n    path = new URL(url).pathname;\n  } catch {\n    path = window.location.pathname;\n  }\n  const clickData: Record<string, any> = {\n    element_tag: tagName,\n    element_text: elementText,\n    element_role: element.getAttribute(\"role\") || \"\",\n    element_label: element.getAttribute(\"aria-label\") || element.getAttribute(\"title\") || \"\",\n    element_id: element.id || \"\",\n    element_class: element.className || \"\",\n    url,\n    path,\n    timestamp: Date.now(),\n  };\n\n  // Add specific data for different element types\n  if (tagName === \"a\") {\n    const href = (element as HTMLAnchorElement).href;\n    clickData.link_url = href;\n    clickData.link_text = elementText;\n    clickData.is_external = href && !href.startsWith(window.location.origin);\n  } else if (tagName === \"button\" || element.getAttribute(\"role\") === \"button\") {\n    clickData.button_type = (element as HTMLButtonElement).type || \"button\";\n    clickData.button_text = elementText;\n  } else if (tagName === \"input\" && (element as HTMLInputElement).type === \"submit\") {\n    clickData.button_type = \"submit\";\n    clickData.button_text = elementText;\n  }\n\n  // Add parent form data if element is inside a form\n  const parentForm = element.closest(\"form\");\n  if (parentForm) {\n    clickData.form_id = parentForm.id || \"\";\n    clickData.form_name = parentForm.getAttribute(\"name\") || \"\";\n  }\n\n  return clickData;\n};\n\nconst evaluateClick = (targetElement: HTMLElement, clickUrl: string) => {\n  const config = appConfig.get();\n  if (!config) return;\n\n  const { environmentState } = config;\n  if (!environmentState) return;\n\n  const { actionClasses = [] } = environmentState?.data ?? {};\n\n  const noCodeClickActionClasses = actionClasses.filter(\n    // @ts-ignore\n    (action) => action.type === \"noCode\" && action.noCodeConfig?.type === \"click\",\n  );\n\n  const trackableElement = getTrackableClickElement(targetElement);\n\n  // Track automatic clicks for links and buttons (similar to page view tracking)\n  const userorbit = getUserorbit();\n  if (userorbit && shouldTrackClick(trackableElement)) {\n    const clickData = getClickTrackingData(trackableElement, clickUrl);\n    logger.debug(\n      `Tracking click on ${trackableElement.tagName.toLowerCase()}: ${JSON.stringify(clickData)}`,\n    );\n    userorbit.track(\"$uo_web_click\", clickData);\n  }\n\n  noCodeClickActionClasses.forEach((action: TActionClass) => {\n    const matchesClickTarget = evaluateNoCodeConfigClick(targetElement, action, clickUrl);\n    const matchesTrackableAncestor =\n      !matchesClickTarget &&\n      trackableElement !== targetElement &&\n      evaluateNoCodeConfigClick(trackableElement, action, clickUrl);\n\n    if (matchesClickTarget || matchesTrackableAncestor) {\n      void trackNoCodeAction(action.name).then((res) => {\n        match(\n          res,\n          (_value: unknown) => {},\n          (err: any) => errorHandler.handle(err),\n        );\n      });\n    }\n  });\n};\n\nconst checkClickMatch = (event: MouseEvent) => {\n  const targetElement = event.target as HTMLElement;\n  if (!targetElement) return;\n  const clickUrl = window.location.href;\n  setTimeout(() => evaluateClick(targetElement, clickUrl), 0);\n};\n\nconst checkClickMatchWrapper = (e: MouseEvent) => checkClickMatch(e);\n\nexport const addClickEventListener = (): void => {\n  if (typeof window === \"undefined\" || isClickEventListenerAdded) return;\n  document.addEventListener(\"click\", checkClickMatchWrapper, { capture: true, passive: true });\n  isClickEventListenerAdded = true;\n};\n\nexport const removeClickEventListener = (): void => {\n  if (!isClickEventListenerAdded) return;\n  document.removeEventListener(\"click\", checkClickMatchWrapper, { capture: true });\n  isClickEventListenerAdded = false;\n};\n\n// Exit Intent Handlers\nlet isExitIntentListenerAdded = false;\nlet exitIntentTarget: HTMLElement | null = null;\n\nconst checkExitIntent = async (e: MouseEvent) => {\n  const config = appConfig.get();\n  if (!config) return;\n\n  const { environmentState } = config;\n  const { actionClasses = [] } = environmentState?.data ?? {};\n\n  const noCodeExitIntentActionClasses = actionClasses.filter(\n    // @ts-ignore\n    (action) => action.type === \"noCode\" && action.noCodeConfig?.type === \"exitIntent\",\n  );\n\n  if (e.clientY <= 0 && noCodeExitIntentActionClasses.length > 0) {\n    for (const event of noCodeExitIntentActionClasses) {\n      const urlFilters = event.noCodeConfig?.urlFilters ?? [];\n      const isValidUrl = handleUrlFilters(\n        urlFilters,\n        window.location.href,\n        event.noCodeConfig?.urlFilterCombinator ?? \"or\",\n      );\n\n      if (!isValidUrl) continue;\n\n      const trackResult = await trackNoCodeAction(event.name);\n      if (trackResult.ok !== true) return err(trackResult.error);\n    }\n  }\n};\n\nconst checkExitIntentWrapper = (e: MouseEvent) => checkExitIntent(e);\n\nexport const addExitIntentListener = (): void => {\n  if (typeof document !== \"undefined\" && !isExitIntentListenerAdded) {\n    exitIntentTarget = document.querySelector(\"body\");\n    exitIntentTarget?.addEventListener(\"mouseleave\", checkExitIntentWrapper);\n    isExitIntentListenerAdded = exitIntentTarget !== null;\n  }\n};\n\nexport const removeExitIntentListener = (): void => {\n  if (isExitIntentListenerAdded) {\n    exitIntentTarget?.removeEventListener(\"mouseleave\", checkExitIntentWrapper);\n    exitIntentTarget = null;\n    isExitIntentListenerAdded = false;\n  }\n};\n\n// Scroll Depth Handlers\nlet scrollDepthListenerAdded = false;\nlet scrollDepthTriggered = false;\nlet scrollLoadListenerAdded = false;\n\nconst checkScrollDepth = async () => {\n  const scrollPosition = window.scrollY;\n  const windowSize = window.innerHeight;\n  const bodyHeight = document.documentElement.scrollHeight;\n\n  if (scrollPosition === 0) {\n    scrollDepthTriggered = false;\n  }\n\n  if (!scrollDepthTriggered && scrollPosition / (bodyHeight - windowSize) >= 0.5) {\n    scrollDepthTriggered = true;\n\n    const config = appConfig.get();\n    if (!config) return okVoid();\n\n    const { environmentState } = config;\n    const { actionClasses = [] } = environmentState?.data ?? {};\n\n    const noCodefiftyPercentScrollActionClasses = actionClasses.filter(\n      // @ts-ignore\n      (action) => action.type === \"noCode\" && action.noCodeConfig?.type === \"fiftyPercentScroll\",\n    );\n\n    for (const event of noCodefiftyPercentScrollActionClasses) {\n      const urlFilters = event.noCodeConfig?.urlFilters ?? [];\n      const isValidUrl = handleUrlFilters(\n        urlFilters,\n        window.location.href,\n        event.noCodeConfig?.urlFilterCombinator ?? \"or\",\n      );\n\n      if (!isValidUrl) continue;\n\n      const trackResult = await trackNoCodeAction(event.name);\n      if (trackResult.ok !== true) return err(trackResult.error);\n    }\n  }\n\n  return okVoid();\n};\n\nconst checkScrollDepthWrapper = () => checkScrollDepth();\nconst addScrollListenerAfterLoad = () => {\n  scrollLoadListenerAdded = false;\n  if (!scrollDepthListenerAdded) return;\n  window.addEventListener(\"scroll\", checkScrollDepthWrapper);\n};\n\nexport const addScrollDepthListener = (): void => {\n  if (typeof window !== \"undefined\" && !scrollDepthListenerAdded) {\n    if (document.readyState === \"complete\") {\n      window.addEventListener(\"scroll\", checkScrollDepthWrapper);\n    } else {\n      window.addEventListener(\"load\", addScrollListenerAfterLoad);\n      scrollLoadListenerAdded = true;\n    }\n    scrollDepthListenerAdded = true;\n  }\n};\n\nexport const removeScrollDepthListener = (): void => {\n  if (scrollDepthListenerAdded) {\n    window.removeEventListener(\"scroll\", checkScrollDepthWrapper);\n    if (scrollLoadListenerAdded) {\n      window.removeEventListener(\"load\", addScrollListenerAfterLoad);\n      scrollLoadListenerAdded = false;\n    }\n    scrollDepthListenerAdded = false;\n  }\n};\n","import type { TJsPersonState, TJsPersonSyncParams } from \"@userorbit/types/js\";\nimport { Config } from \"./config\";\nimport {\n  getCurrentSessionInsertIds,\n  setCurrentBehaviorHistorySnapshot,\n  transitionCurrentSessionBehaviorScope,\n} from \"./behavior-history\";\nimport { reconcileDeliveryPersonState } from \"./delivery-scheduler\";\nimport { SDK_CAPABILITIES } from \"./capabilities\";\nimport { CACHE_EXPIRY } from \"./constants\";\nimport { err } from \"./errors\";\nimport { Logger } from \"./logger\";\nimport { getTourLaunchIdForPerson } from \"./tourLaunch\";\nimport { getIsDebug } from \"./utils\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\nlet personStateSyncIntervalId: number | null = null;\n\nexport const DEFAULT_PERSON_STATE_NO_USER_ID: TJsPersonState = {\n  expiresAt: null,\n  data: {\n    userId: null,\n    segments: [],\n    displays: [],\n    responses: [],\n    attributes: {},\n    lastDisplayAt: null,\n  },\n} as const;\n\n/**\n * Fetch the person state from the backend\n * @param apiHost - The API host\n * @param accountId - The environment ID\n * @param userId - The user ID\n * @param noCache - Whether to skip the cache\n * @returns The person state\n * @throws NetworkError\n */\nexport const fetchPersonState = async (\n  {\n    apiHost,\n    accountId,\n    widgetKey,\n    userId,\n    email,\n    emailHash,\n    analyticsProjectId,\n    behaviorHistoryIdentityTransition,\n  }: TJsPersonSyncParams,\n  noCache = false,\n): Promise<TJsPersonState> => {\n  const fetchOptions: RequestInit = {};\n\n  if (noCache || getIsDebug()) {\n    fetchOptions.cache = \"no-cache\";\n    logger.debug(\"No cache option set for sync\");\n  }\n\n  const url = `${apiHost}/api/v1/client/${accountId}/identify/contact/${userId || email || \"\"}`;\n  const launchTourId = getTourLaunchIdForPerson(\n    accountId,\n    userId || (typeof email === \"string\" ? email.trim().toLowerCase() : null),\n  );\n\n  const response = await fetch(url, {\n    ...fetchOptions,\n    method: \"POST\",\n    headers: { \"content-type\": \"application/json\" },\n    body: JSON.stringify({\n      capabilities: SDK_CAPABILITIES,\n      ...(widgetKey ? { widgetKey } : {}),\n      ...(analyticsProjectId ? { analyticsProjectId } : {}),\n      ...(behaviorHistoryIdentityTransition ? { behaviorHistoryIdentityTransition: true } : {}),\n      ...(analyticsProjectId && (userId || email)\n        ? {\n            behaviorHistoryExcludeInsertIds: getCurrentSessionInsertIds(\n              analyticsProjectId,\n              userId || email || \"\",\n            ),\n          }\n        : {}),\n      ...(launchTourId ? { launchTourId } : {}),\n      userId,\n      email,\n      ...(emailHash && { emailHash }),\n    }),\n  });\n\n  if (!response.ok) {\n    const jsonRes = await response.json();\n\n    const error = err({\n      code: \"network_error\",\n      status: response.status,\n      message: \"Error syncing with backend\",\n      url: url,\n      responseMessage: jsonRes.message,\n    });\n\n    throw error;\n  }\n\n  const data = await response.json();\n\n  const { data: state } = data;\n  const normalizedEmail = typeof email === \"string\" ? email.trim().toLowerCase() : undefined;\n  const distinctId = userId || normalizedEmail;\n  transitionCurrentSessionBehaviorScope(analyticsProjectId || null, distinctId || null);\n  if (analyticsProjectId && distinctId) {\n    setCurrentBehaviorHistorySnapshot(\n      analyticsProjectId,\n      distinctId,\n      state.behaviorHistory || null,\n    );\n  }\n\n  const defaultPersonState: TJsPersonState = {\n    expiresAt: new Date(new Date().getTime() + 1000 * 60 * 30), // 30 minutes\n    data: {\n      userId: userId || \"\",\n      ...(normalizedEmail ? { email: normalizedEmail } : {}),\n      segments: [],\n      displays: [],\n      responses: [],\n      attributes: {},\n      lastDisplayAt: null,\n    },\n  };\n\n  if (!Object.keys(state).length) {\n    return defaultPersonState;\n  }\n\n  return {\n    data: { ...(state as TJsPersonState[\"data\"]) },\n    expiresAt: new Date(new Date().getTime() + CACHE_EXPIRY),\n  };\n};\n\n/**\n * Add a listener to check if the person state has expired with a certain interval\n * @param config - The configuration for the SDK\n */\nexport const addPersonStateExpiryCheckListener = (): void => {\n  const updateInterval = 1000 * 60; // every 60 seconds\n\n  if (typeof window !== \"undefined\" && personStateSyncIntervalId === null) {\n    personStateSyncIntervalId = window.setInterval(async () => {\n      const currentConfig = config.get();\n      if (!currentConfig) return;\n\n      const personState = currentConfig.personState;\n      if (!personState?.data) {\n        return;\n      }\n\n      const userId = personState.data.userId;\n\n      if (!userId) {\n        return;\n      }\n\n      const expiresAt = personState.expiresAt;\n      if (expiresAt && new Date(expiresAt) >= new Date()) {\n        return;\n      }\n\n      try {\n        const nextPersonState = await fetchPersonState(\n          {\n            apiHost: currentConfig.apiHost,\n            accountId: currentConfig.accountId,\n            widgetKey: currentConfig.widgetKey,\n            userId,\n            email: personState.data.email || currentConfig.email,\n            emailHash: currentConfig.emailHash,\n            analyticsProjectId: currentConfig.environmentState?.data.analyticsProjectId,\n          },\n          true,\n        );\n\n        config.update({\n          ...currentConfig,\n          personState: nextPersonState,\n        });\n        reconcileDeliveryPersonState(nextPersonState);\n\n        const { initializeSessionReplay } = await import(\"./replay\");\n        await initializeSessionReplay();\n\n        const { trackNoCodeAction } = await import(\"./actions\");\n        await trackNoCodeAction(\"Automatic\");\n      } catch (e) {\n        logger.error(`Error during person state expiry check: ${e}`);\n        config.update({\n          ...currentConfig,\n          personState: {\n            ...currentConfig.personState,\n            expiresAt: new Date(new Date().getTime() + CACHE_EXPIRY),\n          },\n        });\n      }\n    }, updateInterval);\n  }\n};\n\n/**\n * Clear the person state expiry check listener\n */\nexport const clearPersonStateExpiryCheckListener = (): void => {\n  if (personStateSyncIntervalId) {\n    clearInterval(personStateSyncIntervalId);\n    personStateSyncIntervalId = null;\n  }\n};\n","import { Logger } from \"./logger\";\n\nconst logger = Logger.getInstance();\n\nlet isRouteChangeDetectionInitialized = false;\nlet lastUrl = \"\";\nlet routeChangeCallback: (() => void | Promise<void>) | null = null;\nlet mutationObserver: MutationObserver | null = null;\nlet nextJsCleanup: (() => void) | null = null;\nlet originalPushState: typeof History.prototype.pushState | null = null;\nlet originalReplaceState: typeof History.prototype.replaceState | null = null;\nlet mutationObserverReadyHandler: (() => void) | null = null;\nconst pendingTimeouts = new Set<ReturnType<typeof setTimeout>>();\n\nconst schedule = (callback: () => void, delay: number) => {\n  const timeout = setTimeout(() => {\n    pendingTimeouts.delete(timeout);\n    callback();\n  }, delay);\n  pendingTimeouts.add(timeout);\n};\n\nconst scheduleRouteCheck = () => schedule(detectRouteChange, 0);\n\nconst detectRouteChange = () => {\n  const currentUrl = window.location.href;\n\n  if (currentUrl !== lastUrl) {\n    logger.debug(`Route change detected: ${lastUrl} -> ${currentUrl}`);\n    lastUrl = currentUrl;\n\n    if (routeChangeCallback) {\n      const result = routeChangeCallback();\n      if (result instanceof Promise) {\n        result.catch((error) => {\n          logger.debug(`Error in route change callback: ${error}`);\n        });\n      }\n    }\n  }\n};\n\nconst setupHistoryInterception = () => {\n  if (typeof window === \"undefined\" || !window.history) return;\n\n  originalPushState = window.history.pushState.bind(window.history);\n  originalReplaceState = window.history.replaceState.bind(window.history);\n\n  window.history.pushState = (...args) => {\n    originalPushState!.apply(window.history, args);\n    scheduleRouteCheck();\n  };\n\n  window.history.replaceState = (...args) => {\n    originalReplaceState!.apply(window.history, args);\n    scheduleRouteCheck();\n  };\n\n  logger.debug(\"History API interception set up\");\n};\n\nconst setupNextJsAppRouterDetection = () => {\n  if (typeof window === \"undefined\") return;\n\n  const nextJsIndicator =\n    document.querySelector(\"[data-nextjs-router]\") ||\n    document.querySelector('script[src*=\"next\"]') ||\n    (window as any).__NEXT_DATA__;\n\n  if (!nextJsIndicator) return;\n\n  logger.debug(\"Next.js detected, setting up detection\");\n\n  const cleanupFunctions: (() => void)[] = [];\n\n  if ((window as any).next?.router) {\n    const router = (window as any).next.router;\n    const originalPush = router.push;\n    const originalReplace = router.replace;\n\n    if (originalPush) {\n      router.push = (...args: any[]) => {\n        const result = originalPush.apply(router, args);\n        setTimeout(detectRouteChange, 0);\n        return result;\n      };\n      cleanupFunctions.push(() => {\n        router.push = originalPush;\n      });\n    }\n\n    if (originalReplace) {\n      router.replace = (...args: any[]) => {\n        const result = originalReplace.apply(router, args);\n        setTimeout(detectRouteChange, 0);\n        return result;\n      };\n      cleanupFunctions.push(() => {\n        router.replace = originalReplace;\n      });\n    }\n  }\n\n  const observer = new MutationObserver((mutations) => {\n    let shouldCheck = false;\n    for (const mutation of mutations) {\n      if (mutation.type === \"childList\" && mutation.addedNodes.length > 0) {\n        for (const node of Array.from(mutation.addedNodes)) {\n          if (node.nodeType === Node.ELEMENT_NODE) {\n            const element = node as Element;\n            if (\n              element.querySelector(\"[data-nextjs-scroll-focus-boundary]\") ||\n              element.hasAttribute(\"data-nextjs-scroll-focus-boundary\")\n            ) {\n              shouldCheck = true;\n              break;\n            }\n          }\n        }\n      }\n      if (shouldCheck) break;\n    }\n    if (shouldCheck) {\n      schedule(detectRouteChange, 100);\n    }\n  });\n\n  if (document.body) {\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true,\n    });\n    cleanupFunctions.push(() => observer.disconnect());\n  }\n\n  return () => {\n    cleanupFunctions.forEach((fn) => fn());\n  };\n};\n\nconst setupNextJsPagesRouterDetection = () => {\n  if (typeof window === \"undefined\" || !(window as any).next) return;\n\n  const router = (window as any).next?.router;\n  if (!router || !router.events) return;\n\n  logger.debug(\"Next.js Pages Router detected, setting up detection\");\n\n  const handleRouteChange = () => {\n    scheduleRouteCheck();\n  };\n\n  router.events.on(\"routeChangeStart\", handleRouteChange);\n  router.events.on(\"routeChangeComplete\", handleRouteChange);\n\n  return () => {\n    if (router.events) {\n      router.events.off(\"routeChangeStart\", handleRouteChange);\n      router.events.off(\"routeChangeComplete\", handleRouteChange);\n    }\n  };\n};\n\nconst setupReactRouterDetection = () => {\n  if (typeof window === \"undefined\") return;\n\n  const reactRouterIndicator =\n    window.__REACT_ROUTER__ || document.querySelector(\"[data-react-router]\");\n\n  if (!reactRouterIndicator) return;\n\n  logger.debug(\"React Router detected, setting up detection\");\n\n  const checkForReactRouter = () => {\n    const reactRouterVersion = (window as any).ReactRouter?.version;\n    if (reactRouterVersion) {\n      logger.debug(`React Router ${reactRouterVersion} detected`);\n    }\n  };\n\n  schedule(checkForReactRouter, 1000);\n};\n\nconst setupVueRouterDetection = () => {\n  if (typeof window === \"undefined\") return;\n\n  const vueApp =\n    document.querySelector(\"[data-v-app]\") || document.querySelector(\"#app[data-v-app]\");\n\n  if (!vueApp) return;\n\n  logger.debug(\"Vue Router detected, setting up detection\");\n\n  const checkForVueRouter = () => {\n    const vueInstance = (window as any).__VUE__;\n    if (vueInstance) {\n      logger.debug(\"Vue instance detected\");\n    }\n  };\n\n  schedule(checkForVueRouter, 1000);\n};\n\nconst setupHashChangeListener = () => {\n  if (typeof window === \"undefined\") return;\n\n  window.addEventListener(\"hashchange\", scheduleRouteCheck);\n\n  logger.debug(\"Hash change listener set up\");\n};\n\nconst setupPopStateListener = () => {\n  if (typeof window === \"undefined\") return;\n\n  window.addEventListener(\"popstate\", scheduleRouteCheck);\n\n  logger.debug(\"Popstate listener set up\");\n};\n\nexport const initializeRouteChangeDetection = (callback: () => void | Promise<void>): void => {\n  if (isRouteChangeDetectionInitialized) {\n    logger.debug(\"Route change detection already initialized\");\n    return;\n  }\n\n  if (typeof window === \"undefined\") {\n    logger.debug(\"Window is undefined, skipping route change detection\");\n    return;\n  }\n\n  routeChangeCallback = callback;\n  lastUrl = window.location.href;\n\n  setupHistoryInterception();\n  setupHashChangeListener();\n  setupPopStateListener();\n\n  const nextJsCleanupFn = setupNextJsAppRouterDetection();\n  if (nextJsCleanupFn) {\n    nextJsCleanup = nextJsCleanupFn;\n  }\n\n  const nextJsPagesCleanup = setupNextJsPagesRouterDetection();\n  if (nextJsPagesCleanup) {\n    const existingCleanup = nextJsCleanup;\n    nextJsCleanup = () => {\n      if (existingCleanup) existingCleanup();\n      nextJsPagesCleanup();\n    };\n  }\n\n  setupReactRouterDetection();\n  setupVueRouterDetection();\n\n  const setupMutationObserver = () => {\n    if (document.body && !mutationObserver) {\n      mutationObserver = new MutationObserver(() => {\n        detectRouteChange();\n      });\n\n      mutationObserver.observe(document.body, {\n        childList: true,\n        subtree: false,\n      });\n    }\n  };\n\n  if (document.readyState === \"loading\") {\n    mutationObserverReadyHandler = setupMutationObserver;\n    document.addEventListener(\"DOMContentLoaded\", mutationObserverReadyHandler);\n  } else {\n    setupMutationObserver();\n  }\n\n  isRouteChangeDetectionInitialized = true;\n  logger.debug(\"Route change detection initialized\");\n};\n\nexport const removeRouteChangeDetection = (): void => {\n  if (!isRouteChangeDetectionInitialized) return;\n\n  if (nextJsCleanup) {\n    nextJsCleanup();\n    nextJsCleanup = null;\n  }\n\n  if (mutationObserver) {\n    mutationObserver.disconnect();\n    mutationObserver = null;\n  }\n  if (mutationObserverReadyHandler) {\n    document.removeEventListener(\"DOMContentLoaded\", mutationObserverReadyHandler);\n    mutationObserverReadyHandler = null;\n  }\n  if (typeof window !== \"undefined\") {\n    window.removeEventListener(\"hashchange\", scheduleRouteCheck);\n    window.removeEventListener(\"popstate\", scheduleRouteCheck);\n  }\n  pendingTimeouts.forEach((timeout) => clearTimeout(timeout));\n  pendingTimeouts.clear();\n\n  if (originalPushState && typeof window !== \"undefined\" && window.history) {\n    window.history.pushState = originalPushState;\n    originalPushState = null;\n  }\n\n  if (originalReplaceState && typeof window !== \"undefined\" && window.history) {\n    window.history.replaceState = originalReplaceState;\n    originalReplaceState = null;\n  }\n\n  routeChangeCallback = null;\n  isRouteChangeDetectionInitialized = false;\n  logger.debug(\"Route change detection removed\");\n};\n","import { Config } from \"./config\";\nimport {\n  addEnvironmentStateExpiryCheckListener,\n  clearEnvironmentStateExpiryCheckListener,\n} from \"./environmentState\";\nimport {\n  addClickEventListener,\n  addExitIntentListener,\n  addPageUrlEventListeners,\n  addScrollDepthListener,\n  removeClickEventListener,\n  removeExitIntentListener,\n  removePageUrlEventListeners,\n  removeScrollDepthListener,\n} from \"./noCodeActions\";\nimport {\n  addPersonStateExpiryCheckListener,\n  clearPersonStateExpiryCheckListener,\n} from \"./personState\";\nimport { removeRouteChangeDetection } from \"./routeChangeDetection\";\n\nlet areRemoveEventListenersAdded = false;\nlet areEventListenersAdded = false;\nconst resetConfigBeforeUnload = () => {\n  void Config.getInstance().resetConfig();\n};\nconst cleanupBeforeUnload = () => {\n  clearEnvironmentStateExpiryCheckListener();\n  clearPersonStateExpiryCheckListener();\n  removePageUrlEventListeners();\n  removeClickEventListener();\n  removeExitIntentListener();\n  removeScrollDepthListener();\n};\n\nexport const addEventListeners = (): void => {\n  if (areEventListenersAdded) return;\n  window.addEventListener(\"beforeunload\", resetConfigBeforeUnload);\n\n  addEnvironmentStateExpiryCheckListener();\n  addPersonStateExpiryCheckListener();\n  addPageUrlEventListeners();\n  addClickEventListener();\n  addExitIntentListener();\n  addScrollDepthListener();\n  areEventListenersAdded = true;\n};\n\nexport const addCleanupEventListeners = (): void => {\n  if (areRemoveEventListenersAdded) return;\n  window.addEventListener(\"beforeunload\", cleanupBeforeUnload);\n  areRemoveEventListenersAdded = true;\n};\n\nexport const removeCleanupEventListeners = (): void => {\n  if (!areRemoveEventListenersAdded) return;\n  window.removeEventListener(\"beforeunload\", cleanupBeforeUnload);\n  areRemoveEventListenersAdded = false;\n};\n\nexport const removeAllEventListeners = (): void => {\n  if (areEventListenersAdded) {\n    window.removeEventListener(\"beforeunload\", resetConfigBeforeUnload);\n    areEventListenersAdded = false;\n  }\n  clearEnvironmentStateExpiryCheckListener();\n  clearPersonStateExpiryCheckListener();\n  removePageUrlEventListeners();\n  removeClickEventListener();\n  removeExitIntentListener();\n  removeScrollDepthListener();\n  removeRouteChangeDetection();\n  removeCleanupEventListeners();\n};\n","import {\n  isNewNoCodeActionConfig,\n  type TActionClass,\n  type TActionElementTarget,\n  type TActionSignalNoCodeConfig,\n} from \"@userorbit/types/action-classes\";\nimport { observeAccessibleDom, resolveObservedElement } from \"@userorbit/ui\";\nimport { trackNoCodeAction } from \"./actions\";\nimport {\n  retainActivityDocument,\n  subscribeToActivitySignals,\n  type ActivitySignal,\n} from \"./activity\";\nimport { Config } from \"./config\";\nimport { eventTouchesUserorbitOwnedHost, isUserorbitOwnedNode } from \"./domOwnership\";\nimport { ErrorHandler, match } from \"./errors\";\nimport { subscribeToEnvironmentState } from \"./environmentState\";\nimport { handleUrlFilters } from \"./utils\";\n\ntype SignalConfig = TActionSignalNoCodeConfig;\n\ntype SignalAction = Extract<TActionClass, { type: \"noCode\" }> & {\n  noCodeConfig: SignalConfig;\n};\n\ntype SignalState = {\n  action: SignalAction;\n  signature: string;\n  routeEpoch: number;\n  firedThisRoute: boolean;\n  lastElement: Element | null;\n  lastMatch: boolean;\n  lastValue?: string;\n  hoveredElement: Element | null;\n  hoverDueAt?: number;\n  hoverCompleted: boolean;\n  delayDueAt?: number;\n  inactivityDueAt?: number;\n  inactivityRemainingMs?: number;\n};\n\nconst DOM_SIGNAL_TYPES = new Set([\"element\", \"input\", \"hover\"]);\nconst config = Config.getInstance();\nconst errorHandler = ErrorHandler.getInstance();\n\nlet started = false;\nlet ownerDocument: Document | null = null;\nlet routeEpoch = 0;\nlet states = new Map<string, SignalState>();\nlet timer: ReturnType<typeof setTimeout> | null = null;\nlet disposeDomObserver: (() => void) | null = null;\nlet domObserverKey = \"\";\nlet disposeEnvironmentSubscription: (() => void) | null = null;\nlet disposeActivitySubscription: (() => void) | null = null;\nlet releaseRootActivityDocument: (() => void) | null = null;\nlet domEvaluationQueued = false;\nlet cancelDomEvaluation: (() => void) | null = null;\nlet lifecycleGeneration = 0;\n\nconst getSignalActions = (environmentState?: any): SignalAction[] => {\n  const actionClasses =\n    environmentState?.data?.actionClasses ??\n    config.get()?.environmentState?.data?.actionClasses ??\n    [];\n\n  return actionClasses.filter(\n    (action: TActionClass): action is SignalAction =>\n      action?.type === \"noCode\" && isNewNoCodeActionConfig(action.noCodeConfig),\n  );\n};\n\nconst getSignature = (action: SignalAction) =>\n  JSON.stringify({ name: action.name, noCodeConfig: action.noCodeConfig });\n\nconst matchesCurrentUrl = (action: SignalAction) => {\n  try {\n    return handleUrlFilters(\n      action.noCodeConfig.urlFilters,\n      window.location.href,\n      action.noCodeConfig.urlFilterCombinator ?? \"or\",\n    );\n  } catch {\n    return false;\n  }\n};\n\nconst createState = (action: SignalAction, now: number): SignalState => {\n  const state: SignalState = {\n    action,\n    signature: getSignature(action),\n    routeEpoch,\n    firedThisRoute: false,\n    lastElement: null,\n    lastMatch: false,\n    hoveredElement: null,\n    hoverCompleted: false,\n  };\n  armRouteDeadlines(state, now);\n  return state;\n};\n\nconst armRouteDeadlines = (state: SignalState, now: number) => {\n  if (!matchesCurrentUrl(state.action)) return;\n  const actionConfig = state.action.noCodeConfig;\n  if (actionConfig.type === \"delay\") state.delayDueAt = now + actionConfig.delayMs;\n  if (actionConfig.type === \"inactivity\") {\n    state.inactivityDueAt = now + actionConfig.idleMs;\n    state.inactivityRemainingMs = undefined;\n  }\n};\n\nconst resetStateForRoute = (state: SignalState, now: number) => {\n  state.routeEpoch = routeEpoch;\n  state.firedThisRoute = false;\n  state.lastElement = null;\n  state.lastMatch = false;\n  state.lastValue = undefined;\n  state.hoveredElement = null;\n  state.hoverDueAt = undefined;\n  state.hoverCompleted = false;\n  state.delayDueAt = undefined;\n  state.inactivityDueAt = undefined;\n  state.inactivityRemainingMs = undefined;\n  armRouteDeadlines(state, now);\n};\n\nconst reconcileActions = (environmentState?: any, routeChanged = false) => {\n  if (!started || !ownerDocument) return;\n  const now = Date.now();\n  if (routeChanged) routeEpoch += 1;\n\n  const nextStates = new Map<string, SignalState>();\n  for (const action of getSignalActions(environmentState)) {\n    const existing = states.get(action.id);\n    const signature = getSignature(action);\n    const state =\n      existing && existing.signature === signature ? existing : createState(action, now);\n    state.action = action;\n    state.signature = signature;\n    if (routeChanged) resetStateForRoute(state, now);\n    nextStates.set(action.id, state);\n  }\n  states = nextStates;\n\n  reconcileResources();\n  queueDomEvaluation();\n  scheduleTimer();\n};\n\nconst getObserverKey = () => {\n  const types = new Set(\n    [...states.values()].filter(isActiveDomSignal).map((state) => state.action.noCodeConfig.type),\n  );\n  const eventNames = [\n    types.has(\"input\") ? \"input-change\" : \"\",\n    types.has(\"hover\") ? \"pointer\" : \"\",\n    hasInactivitySignals() ? \"activity\" : \"\",\n  ].filter(Boolean);\n  return eventNames.join(\"|\");\n};\n\nconst isActiveDomSignal = (state: SignalState) => {\n  const actionConfig = state.action.noCodeConfig;\n  return (\n    DOM_SIGNAL_TYPES.has(actionConfig.type) &&\n    !(state.firedThisRoute && actionConfig.recurrence === \"oncePerRoute\")\n  );\n};\n\nconst hasDomSignals = () => [...states.values()].some(isActiveDomSignal);\n\nconst hasInactivitySignals = () =>\n  [...states.values()].some((state) => state.action.noCodeConfig.type === \"inactivity\");\n\nconst reconcileResources = () => {\n  if (!ownerDocument) return;\n  const needsDomObserver = hasDomSignals();\n  const needsInactivity = hasInactivitySignals();\n  const nextObserverKey = needsDomObserver ? getObserverKey() : \"\";\n\n  if (!needsDomObserver || nextObserverKey !== domObserverKey) {\n    disposeDomObserver?.();\n    disposeDomObserver = null;\n    domObserverKey = \"\";\n  }\n\n  if (needsDomObserver && !disposeDomObserver) {\n    const documentEvents = [] as Array<{\n      name: string;\n      listener: EventListener;\n      capture?: boolean;\n    }>;\n    if (\n      [...states.values()].some(\n        (state) => isActiveDomSignal(state) && state.action.noCodeConfig.type === \"input\",\n      )\n    ) {\n      documentEvents.push(\n        { name: \"input\", listener: handleInputEvent, capture: true },\n        { name: \"change\", listener: handleInputEvent, capture: true },\n      );\n    }\n    if (\n      [...states.values()].some(\n        (state) => isActiveDomSignal(state) && state.action.noCodeConfig.type === \"hover\",\n      )\n    ) {\n      documentEvents.push(\n        { name: \"pointerover\", listener: handlePointerOver, capture: true },\n        { name: \"pointerout\", listener: handlePointerOut, capture: true },\n      );\n    }\n\n    disposeDomObserver = observeAccessibleDom({\n      ownerDocument,\n      documentEvents,\n      onMutation: queueDomEvaluation,\n      onDocument: needsInactivity ? retainActivityDocument : undefined,\n    });\n    domObserverKey = nextObserverKey;\n  }\n\n  if (needsInactivity && !disposeActivitySubscription) {\n    disposeActivitySubscription = subscribeToActivitySignals(handleActivitySignal);\n  } else if (!needsInactivity && disposeActivitySubscription) {\n    disposeActivitySubscription();\n    disposeActivitySubscription = null;\n  }\n\n  const activityIsRetainedByObserver = needsInactivity && needsDomObserver;\n  if (needsInactivity && !activityIsRetainedByObserver && !releaseRootActivityDocument) {\n    releaseRootActivityDocument = retainActivityDocument(ownerDocument);\n  } else if ((!needsInactivity || activityIsRetainedByObserver) && releaseRootActivityDocument) {\n    releaseRootActivityDocument();\n    releaseRootActivityDocument = null;\n  }\n};\n\nconst mutationIsUserorbitOwned = (record: MutationRecord) => {\n  if (isUserorbitOwnedNode(record.target)) return true;\n  const changedNodes = [...record.addedNodes, ...record.removedNodes];\n  return changedNodes.length > 0 && changedNodes.every((node) => isUserorbitOwnedNode(node));\n};\n\nconst queueDomEvaluation = (records: readonly MutationRecord[] = []) => {\n  if (!started || domEvaluationQueued || !hasDomSignals()) return;\n  if (records.length > 0 && records.every(mutationIsUserorbitOwned)) return;\n  domEvaluationQueued = true;\n  const generation = lifecycleGeneration;\n  const run = () => {\n    cancelDomEvaluation = null;\n    domEvaluationQueued = false;\n    if (!started || generation !== lifecycleGeneration) return;\n    evaluateDomSignals();\n  };\n  const schedulingWindow = ownerDocument?.defaultView;\n  if (schedulingWindow?.requestAnimationFrame) {\n    const handle = schedulingWindow.requestAnimationFrame(run);\n    cancelDomEvaluation = () => schedulingWindow.cancelAnimationFrame(handle);\n    return;\n  }\n  const handle = setTimeout(run, 0);\n  cancelDomEvaluation = () => clearTimeout(handle);\n};\n\nconst getSelectors = (target: TActionElementTarget) =>\n  Array.from(\n    new Set(\n      [target.cssSelector, ...(target.selectorFallbacks || [])]\n        .filter((selector): selector is string => !!selector)\n        .map((selector) => selector.trim()),\n    ),\n  );\n\nconst resolveActionTarget = (state: SignalState, includeHidden = false) => {\n  if (!ownerDocument) return null;\n  const actionConfig = state.action.noCodeConfig;\n  if (\n    actionConfig.type !== \"element\" &&\n    actionConfig.type !== \"input\" &&\n    actionConfig.type !== \"hover\"\n  ) {\n    return null;\n  }\n\n  return resolveObservedElement(\n    ownerDocument,\n    getSelectors(actionConfig.elementSelector),\n    actionConfig.elementSelector.selectorFingerprint,\n    { includeHidden, excludeElement: (element) => isUserorbitOwnedNode(element) },\n  );\n};\n\nconst evaluateDomSignals = () => {\n  for (const state of states.values()) {\n    if (!isActiveDomSignal(state)) continue;\n    const actionConfig = state.action.noCodeConfig;\n    if (!matchesCurrentUrl(state.action)) {\n      state.lastElement = null;\n      state.lastMatch = false;\n      state.lastValue = undefined;\n      continue;\n    }\n\n    if (actionConfig.type === \"element\") evaluateElementState(state);\n    if (actionConfig.type === \"input\") evaluateInputState(state);\n  }\n};\n\nconst evaluateElementState = (state: SignalState) => {\n  const actionConfig = state.action.noCodeConfig;\n  if (actionConfig.type !== \"element\") return;\n  const element = resolveActionTarget(state, actionConfig.presence === \"present\");\n  const matches =\n    !!element &&\n    (actionConfig.presence === \"present\" ? element.isConnected : isElementVisible(element));\n  const transitioned = matches && !state.lastMatch;\n  state.lastElement = element;\n  state.lastMatch = matches;\n\n  if (transitioned && (!state.firedThisRoute || actionConfig.recurrence === \"everyTransition\")) {\n    fireState(state);\n  }\n};\n\nconst evaluateInputState = (state: SignalState) => {\n  const actionConfig = state.action.noCodeConfig;\n  if (actionConfig.type !== \"input\") return;\n  const element = resolveActionTarget(state);\n  if (!element) {\n    state.lastElement = null;\n    state.lastValue = undefined;\n    state.lastMatch = false;\n    return;\n  }\n\n  const value = readInputValue(element);\n  if (actionConfig.input.mode === \"changed\") {\n    if (state.lastElement !== element || state.lastValue === undefined) {\n      state.lastElement = element;\n      state.lastValue = value;\n      return;\n    }\n    const changed = value !== state.lastValue;\n    state.lastValue = value;\n    if (changed && (!state.firedThisRoute || actionConfig.recurrence === \"everyTransition\")) {\n      fireState(state);\n    }\n    return;\n  }\n\n  const matches =\n    actionConfig.input.mode === \"filled\"\n      ? value.trim().length > 0\n      : compareInputValue(value, actionConfig.input);\n  const transitioned = matches && !state.lastMatch;\n  state.lastElement = element;\n  state.lastValue = value;\n  state.lastMatch = matches;\n  if (transitioned && (!state.firedThisRoute || actionConfig.recurrence === \"everyTransition\")) {\n    fireState(state);\n  }\n};\n\nconst readInputValue = (element: Element) => {\n  const tagName = element.tagName.toLowerCase();\n  if (tagName === \"input\") {\n    const input = element as HTMLInputElement;\n    if (input.type === \"checkbox\" || input.type === \"radio\") {\n      return input.checked ? input.value || \"on\" : \"\";\n    }\n    return input.value;\n  }\n  if (tagName === \"textarea\" || tagName === \"select\") {\n    return (element as HTMLTextAreaElement | HTMLSelectElement).value;\n  }\n\n  const editable = closestContentEditable(element);\n  return editable ? (editable.innerText || editable.textContent || \"\").replace(/\\u200B/g, \"\") : \"\";\n};\n\nconst closestContentEditable = (element: Element): HTMLElement | null => {\n  let current: Element | null = element;\n  while (current) {\n    if (\n      (current as HTMLElement).isContentEditable ||\n      current.getAttribute(\"contenteditable\") === \"true\"\n    ) {\n      return current as HTMLElement;\n    }\n    current = current.parentElement;\n  }\n  return null;\n};\n\nconst compareInputValue = (\n  actualValue: string,\n  comparison: Extract<Extract<SignalConfig, { type: \"input\" }>[\"input\"], { mode: \"valueMatch\" }>,\n) => {\n  let actual = comparison.trim ? actualValue.trim() : actualValue;\n  let expected = comparison.trim ? comparison.value.trim() : comparison.value;\n  if (!comparison.caseSensitive) {\n    actual = actual.toLocaleLowerCase();\n    expected = expected.toLocaleLowerCase();\n  }\n\n  switch (comparison.operator) {\n    case \"contains\":\n      return actual.includes(expected);\n    case \"startsWith\":\n      return actual.startsWith(expected);\n    case \"endsWith\":\n      return actual.endsWith(expected);\n    case \"equals\":\n    default:\n      return actual === expected;\n  }\n};\n\nconst isElementVisible = (element: Element): boolean => {\n  if (!element.isConnected || isUserorbitOwnedNode(element)) return false;\n  let current: Element | null = element;\n  while (current) {\n    if (current.hasAttribute(\"hidden\") || current.getAttribute(\"aria-hidden\") === \"true\")\n      return false;\n    const currentWindow = current.ownerDocument.defaultView;\n    if (currentWindow) {\n      const style = currentWindow.getComputedStyle(current);\n      if (\n        style.display === \"none\" ||\n        style.visibility === \"hidden\" ||\n        style.visibility === \"collapse\" ||\n        style.opacity === \"0\"\n      ) {\n        return false;\n      }\n    }\n\n    try {\n      current = current.ownerDocument.defaultView?.frameElement;\n    } catch {\n      return false;\n    }\n  }\n\n  const ownerWindow = element.ownerDocument.defaultView;\n  if (ownerWindow && !/jsdom/i.test(ownerWindow.navigator.userAgent)) {\n    const rect = element.getBoundingClientRect();\n    if (rect.width <= 0 && rect.height <= 0 && element.getClientRects().length === 0) return false;\n  }\n  return true;\n};\n\nconst handleInputEvent: EventListener = (event) => {\n  if (eventTouchesUserorbitOwnedHost(event)) return;\n  evaluateDomSignals();\n};\n\nconst handlePointerOver: EventListener = (event) => {\n  if (eventTouchesUserorbitOwnedHost(event)) return;\n  const pointerEvent = event as PointerEvent;\n  for (const state of states.values()) {\n    const actionConfig = state.action.noCodeConfig;\n    if (actionConfig.type !== \"hover\" || !matchesCurrentUrl(state.action)) continue;\n    if (state.firedThisRoute && actionConfig.recurrence === \"oncePerRoute\") continue;\n\n    const element = resolveActionTarget(state);\n    if (!element || !eventPathContains(event, element)) continue;\n    if (isNode(pointerEvent.relatedTarget) && element.contains(pointerEvent.relatedTarget))\n      continue;\n    if (state.hoveredElement === element && !state.hoverCompleted) continue;\n\n    state.hoveredElement = element;\n    state.hoverCompleted = false;\n    state.hoverDueAt = Date.now() + actionConfig.dwellMs;\n  }\n  scheduleTimer();\n};\n\nconst handlePointerOut: EventListener = (event) => {\n  const pointerEvent = event as PointerEvent;\n  for (const state of states.values()) {\n    if (state.action.noCodeConfig.type !== \"hover\" || !state.hoveredElement) continue;\n    if (\n      isNode(pointerEvent.relatedTarget) &&\n      state.hoveredElement.contains(pointerEvent.relatedTarget)\n    ) {\n      continue;\n    }\n    if (!eventPathContains(event, state.hoveredElement)) continue;\n    state.hoveredElement = null;\n    state.hoverDueAt = undefined;\n    state.hoverCompleted = false;\n  }\n  scheduleTimer();\n};\n\nconst eventPathContains = (event: Event, element: Element) => {\n  const path = typeof event.composedPath === \"function\" ? event.composedPath() : [event.target];\n  return (\n    path.includes(element) ||\n    (isNode(event.target) && (event.target === element || element.contains(event.target)))\n  );\n};\n\nconst isNode = (value: unknown): value is Node =>\n  !!value && typeof value === \"object\" && \"nodeType\" in value && \"getRootNode\" in value;\n\nconst handleActivitySignal = (signal: ActivitySignal) => {\n  if (!ownerDocument || !hasInactivitySignals()) return;\n  if (signal.type === \"visibility\") {\n    if (signal.document !== ownerDocument) return;\n    if (signal.hidden) pauseInactivity(signal.timestamp);\n    else resumeInactivity(signal.timestamp);\n    return;\n  }\n  if (ownerDocument.visibilityState === \"hidden\") return;\n\n  for (const state of states.values()) {\n    const actionConfig = state.action.noCodeConfig;\n    if (actionConfig.type !== \"inactivity\" || !matchesCurrentUrl(state.action)) continue;\n    if (state.firedThisRoute && actionConfig.recurrence === \"oncePerRoute\") continue;\n    state.inactivityRemainingMs = undefined;\n    state.inactivityDueAt = signal.timestamp + actionConfig.idleMs;\n  }\n  scheduleTimer();\n};\n\nconst pauseInactivity = (now: number) => {\n  for (const state of states.values()) {\n    if (state.action.noCodeConfig.type !== \"inactivity\" || state.inactivityDueAt === undefined) {\n      continue;\n    }\n    state.inactivityRemainingMs = Math.max(0, state.inactivityDueAt - now);\n    state.inactivityDueAt = undefined;\n  }\n  scheduleTimer();\n};\n\nconst resumeInactivity = (now: number) => {\n  for (const state of states.values()) {\n    if (\n      state.action.noCodeConfig.type !== \"inactivity\" ||\n      state.inactivityRemainingMs === undefined\n    ) {\n      continue;\n    }\n    state.inactivityDueAt = now + state.inactivityRemainingMs;\n    state.inactivityRemainingMs = undefined;\n  }\n  scheduleTimer();\n};\n\nconst scheduleTimer = () => {\n  if (timer) clearTimeout(timer);\n  timer = null;\n  if (!started) return;\n\n  const deadlines = [...states.values()].flatMap((state) =>\n    [state.delayDueAt, state.hoverDueAt, state.inactivityDueAt].filter(\n      (deadline): deadline is number => deadline !== undefined,\n    ),\n  );\n  if (deadlines.length === 0) return;\n\n  const nextDeadline = Math.min(...deadlines);\n  const generation = lifecycleGeneration;\n  timer = setTimeout(\n    () => {\n      timer = null;\n      if (!started || generation !== lifecycleGeneration) return;\n      processDeadlines(Date.now());\n    },\n    Math.max(0, nextDeadline - Date.now()),\n  );\n};\n\nconst processDeadlines = (now: number) => {\n  for (const state of states.values()) {\n    if (state.delayDueAt !== undefined && state.delayDueAt <= now) {\n      state.delayDueAt = undefined;\n      fireState(state);\n    }\n\n    if (state.hoverDueAt !== undefined && state.hoverDueAt <= now) {\n      state.hoverDueAt = undefined;\n      const element = resolveActionTarget(state);\n      if (element && element === state.hoveredElement && isElementVisible(element)) {\n        state.hoverCompleted = true;\n        fireState(state);\n      }\n    }\n\n    if (state.inactivityDueAt !== undefined && state.inactivityDueAt <= now) {\n      state.inactivityDueAt = undefined;\n      if (ownerDocument?.visibilityState !== \"hidden\") {\n        fireState(state);\n      }\n    }\n  }\n  scheduleTimer();\n};\n\nconst fireState = (state: SignalState) => {\n  const current = states.get(state.action.id);\n  if (current !== state || current.routeEpoch !== routeEpoch) return;\n  const latestAction = getSignalActions().find((action) => action.id === state.action.id);\n  if (\n    !latestAction ||\n    getSignature(latestAction) !== state.signature ||\n    !matchesCurrentUrl(latestAction)\n  ) {\n    return;\n  }\n\n  const actionConfig = state.action.noCodeConfig;\n  if (actionConfig.recurrence === \"oncePerRoute\" && state.firedThisRoute) {\n    return;\n  }\n  if (actionConfig.recurrence === \"oncePerRoute\") state.firedThisRoute = true;\n  if (actionConfig.recurrence === \"oncePerRoute\" && DOM_SIGNAL_TYPES.has(actionConfig.type)) {\n    reconcileResources();\n  }\n\n  void trackNoCodeAction(state.action.name).then((result) => {\n    match(\n      result,\n      () => undefined,\n      (error) => errorHandler.handle(error),\n    );\n  });\n};\n\nexport function startNoCodeSignalEngine(document: Document = globalThis.document) {\n  if (typeof window === \"undefined\" || !document) return;\n  if (started) {\n    reconcileActions();\n    return;\n  }\n\n  started = true;\n  ownerDocument = document;\n  lifecycleGeneration += 1;\n  disposeEnvironmentSubscription = subscribeToEnvironmentState((state) => {\n    reconcileActions(state);\n  });\n  reconcileActions();\n}\n\nexport function reconcileNoCodeSignalsForRoute() {\n  reconcileActions(undefined, true);\n}\n\nexport function stopNoCodeSignalEngine() {\n  if (!started && !disposeEnvironmentSubscription) return;\n  started = false;\n  lifecycleGeneration += 1;\n  domEvaluationQueued = false;\n  cancelDomEvaluation?.();\n  cancelDomEvaluation = null;\n  if (timer) clearTimeout(timer);\n  timer = null;\n  disposeDomObserver?.();\n  disposeDomObserver = null;\n  domObserverKey = \"\";\n  disposeEnvironmentSubscription?.();\n  disposeEnvironmentSubscription = null;\n  disposeActivitySubscription?.();\n  disposeActivitySubscription = null;\n  releaseRootActivityDocument?.();\n  releaseRootActivityDocument = null;\n  states.clear();\n  ownerDocument = null;\n}\n\nexport function getNoCodeSignalEngineSnapshot() {\n  return {\n    started,\n    actionCount: states.size,\n    hasDomObserver: disposeDomObserver !== null,\n    hasTimer: timer !== null,\n    routeEpoch,\n  };\n}\n","import { applyPrivacyPreferences } from \"./privacy\";\nimport { getPrivacyPreferences, privacyPreferencesFromInit } from \"./privacyPreferences\";\nimport type { TJsConfig, TJsConfigInput } from \"@userorbit/types/js\";\nimport { clearAllTourSnoozeExpiries } from \"../utils/tour\";\nimport { trackNoCodeAction } from \"./actions\";\nimport { disposeAnalytics, initializeAnalytics } from \"./analytics\";\nimport { updateAttributes } from \"./attributes\";\nimport {\n  registerCurrentSessionBehaviorTargetingResolver,\n  resetCurrentSessionBehaviorHistory,\n} from \"./behavior-history\";\nimport { Config } from \"./config\";\nimport { addEnvironmentStateExpiryCheckListener, fetchEnvironmentState } from \"./environmentState\";\nimport {\n  ErrorHandler,\n  type MissingFieldError,\n  type MissingPersonError,\n  type NetworkError,\n  type NotInitializedError,\n  type Result,\n  err,\n  okVoid,\n} from \"./errors\";\nimport {\n  addCleanupEventListeners,\n  addEventListeners,\n  removeAllEventListeners,\n} from \"./eventListeners\";\nimport { Logger } from \"./logger\";\nimport { checkPageUrl } from \"./noCodeActions\";\nimport { captureTourLaunchFromUrl } from \"./tourLaunch\";\nimport {\n  reconcileNoCodeSignalsForRoute,\n  startNoCodeSignalEngine,\n  stopNoCodeSignalEngine,\n} from \"./noCodeSignalEngine\";\nimport { DEFAULT_PERSON_STATE_NO_USER_ID, fetchPersonState } from \"./personState\";\nimport { initializeSessionReplay } from \"./replay\";\nimport { initializeRouteChangeDetection, removeRouteChangeDetection } from \"./routeChangeDetection\";\nimport { cleanupSessionTracking, initializeSessionTracking } from \"./sessionTracking\";\nimport { startTourBuilderFromUrl } from \"./tourBuilder\";\nimport {\n  generateRandomUserId,\n  getStoredUserId,\n  getStoredUserIdentity,\n  storeUserId,\n} from \"./userId\";\nimport { getConfigAttributes, getConfigDistinctId } from \"./userProperties\";\nimport { getIsDebug } from \"./utils\";\nimport { installRteButtonHandlers, removeWidgetContainer, renderWidget } from \"./widget\";\nimport { disposeDeliveryScheduler } from \"./delivery-scheduler\";\n\nconst logger = Logger.getInstance();\n\nlet isInitialized = false;\nlet disposeBehaviorTargetingResolver: (() => void) | null = null;\n\nexport const setIsInitialized = (value: boolean) => {\n  isInitialized = value;\n};\n\nexport const assertManualWidgetInitialization = (input: TJsConfigInput): void => {\n  if (input.widget?.autoMount !== false || !isInitialized) return;\n  const current = Config.getInstance().get();\n  if (\n    current?.widget?.autoMount !== false ||\n    current.accountId !== input.accountId ||\n    current.apiHost !== (input.apiHost || \"https://api.userorbit.com\") ||\n    (current.widgetKey || undefined) !== (input.widgetKey || undefined)\n  )\n    throw new Error(\"Manual widget initialization requires a matching manual SDK instance\");\n};\n\nexport const assertManualWidgetInitialized = (input: TJsConfigInput): void => {\n  if (input.widget?.autoMount !== false) return;\n  assertManualWidgetInitialization(input);\n  if (!isInitialized || !Config.getInstance().get()?.environmentState?.data?.product)\n    throw new Error(\"Manual widget initialization did not complete\");\n};\n\nconst hasPersonStateChanges = (\n  personStateData: TJsConfig[\"personState\"][\"data\"] | undefined,\n  configInput: TJsConfigInput,\n  configAttributes: Record<string, unknown>,\n) => {\n  if (!personStateData) return true;\n\n  const nextEmail =\n    typeof configInput.email === \"string\" ? configInput.email.trim().toLowerCase() : undefined;\n  if (nextEmail && personStateData.email !== nextEmail) return true;\n\n  const nextName = typeof configInput.name === \"string\" ? configInput.name.trim() : undefined;\n  if (nextName && personStateData.name !== nextName) return true;\n\n  const existingAttributes = personStateData.attributes || {};\n  return Object.entries(configAttributes).some(([key, value]) => existingAttributes[key] !== value);\n};\n\nexport const initialize = async (\n  configInput: TJsConfigInput,\n  privacyAppliedAtEnqueue = false,\n): Promise<Result<void, MissingFieldError | NetworkError | MissingPersonError>> => {\n  assertManualWidgetInitialization(configInput);\n  if (!privacyAppliedAtEnqueue)\n    await applyPrivacyPreferences(\n      privacyPreferencesFromInit(configInput),\n      configInput.widget?.autoMount !== false,\n    );\n  else await Promise.resolve();\n  const applyCurrentPrivacyChoices = () => {\n    const choices = getPrivacyPreferences();\n    for (const purpose of [\"analytics\", \"sessionReplay\", \"widget\"] as const) {\n      if (choices[purpose] !== undefined)\n        configInput[purpose] = { ...configInput[purpose], enabled: choices[purpose] };\n    }\n  };\n  applyCurrentPrivacyChoices();\n  disposeBehaviorTargetingResolver ??= registerCurrentSessionBehaviorTargetingResolver();\n  const inAppConfig = configInput.inApp ?? { enabled: true };\n  const inAppEnabled = inAppConfig.enabled !== false;\n  const requestedTheme = configInput.theme || configInput.widget?.theme;\n  const isDebug = getIsDebug();\n  if (isDebug) {\n    logger.configure({ logLevel: \"debug\" });\n  }\n  const config = Config.getInstance();\n\n  if (isInitialized) {\n    logger.debug(\"Already initialized, skipping initialization.\");\n    return okVoid();\n  }\n\n  // Handle userId generation and storage\n  const configAttributes = getConfigAttributes(configInput);\n  let userId = getConfigDistinctId(configInput);\n  const storedIdentity = getStoredUserIdentity();\n  const isAnonymousUser = !userId && storedIdentity?.hasIdentified !== true;\n  (configInput as Record<string, unknown>).__userorbitAnonymous = isAnonymousUser;\n  if (!userId) {\n    const storedUserId = getStoredUserId();\n    if (storedUserId) {\n      userId = storedUserId;\n      logger.debug(\"Using stored userId from localStorage\");\n    } else {\n      userId = generateRandomUserId();\n      storeUserId(userId);\n      logger.debug(\"Generated and stored new random userId\");\n    }\n  }\n  configInput.userId = userId;\n\n  let existingConfig: TJsConfig | undefined | null;\n  try {\n    existingConfig = config.get();\n    logger.debug(\"Found existing configuration.\");\n  } catch {\n    logger.debug(\"No existing configuration found.\");\n  }\n\n  ErrorHandler.getInstance().printStatus();\n\n  logger.debug(\"Start initialize\");\n\n  // Styles will be added to shadow DOM by individual components\n  // addStylesToDom(); // Removed to prevent styles being added to host document\n\n  if (!configInput.accountId) {\n    logger.debug(\"No accountId provided\");\n    return err({\n      code: \"missing_field\",\n      field: \"accountId\",\n    });\n  }\n\n  const apiHost = configInput.apiHost || \"https://api.userorbit.com\";\n  configInput.apiHost = apiHost;\n\n  const widgetKey = configInput.widgetKey || undefined;\n  configInput.widgetKey = widgetKey;\n\n  if (\n    existingConfig &&\n    (existingConfig.accountId !== configInput.accountId ||\n      existingConfig.apiHost !== configInput.apiHost ||\n      (existingConfig.widgetKey || undefined) !== widgetKey)\n  ) {\n    logger.debug(\"Stored configuration does not match init parameters. Resetting config.\");\n    resetCurrentSessionBehaviorHistory();\n    await config.resetConfig();\n    existingConfig = undefined;\n  }\n\n  config.update({\n    reportingSource: configInput.reportingSource || \"in_app\",\n    apiHost: configInput.apiHost,\n    accountId: configInput.accountId,\n    widgetKey,\n    ...(configInput.email ? { email: configInput.email } : {}),\n    ...(configInput.emailHash ? { emailHash: configInput.emailHash } : {}),\n    ...(configInput.name ? { name: configInput.name } : {}),\n    requireAuthentication: configInput.requireAuthentication === true,\n    ...(requestedTheme ? { theme: requestedTheme } : {}),\n    widget: configInput.widget,\n    inApp: inAppConfig,\n    ...(configInput.analytics ? { analytics: configInput.analytics } : {}),\n    ...(configInput.sessionReplay ? { sessionReplay: configInput.sessionReplay } : {}),\n    locale: (configInput as any).locale,\n    language: (configInput as any).language,\n  });\n\n  logger.debug(\"Adding widget container to DOM\");\n  // addWidgetContainer();\n\n  const capturedTourLaunch = captureTourLaunchFromUrl(configInput.accountId);\n  let shouldRefreshPersonState = false;\n  if (\n    !isAnonymousUser &&\n    (Object.keys(configAttributes).length > 0 || configInput.email || configInput.name)\n  ) {\n    if (configInput.userId) {\n      shouldRefreshPersonState = hasPersonStateChanges(\n        existingConfig?.personState?.data,\n        configInput,\n        configAttributes,\n      );\n      const res = await updateAttributes(\n        configInput.apiHost,\n        configInput.accountId,\n        configInput.userId,\n        configAttributes,\n        configInput.email,\n        configInput.name,\n      );\n      if (res.ok !== true) {\n        return err(res.error);\n      }\n    }\n  }\n\n  if (capturedTourLaunch) shouldRefreshPersonState = true;\n\n  if (\n    existingConfig?.environmentState &&\n    existingConfig.accountId === configInput.accountId &&\n    existingConfig.apiHost === configInput.apiHost &&\n    (existingConfig.widgetKey || undefined) === widgetKey\n  ) {\n    logger.debug(\"Configuration fits init parameters.\");\n\n    let isEnvironmentStateExpired = false;\n    let isPersonStateExpired = false;\n\n    if (new Date(existingConfig.environmentState.expiresAt) < new Date()) {\n      logger.debug(\"Environment state expired. Syncing.\");\n      isEnvironmentStateExpired = true;\n    }\n\n    // if the config has a userId and the person state has expired, we need to sync the person state\n    if (\n      configInput.userId &&\n      existingConfig.personState?.expiresAt &&\n      new Date(existingConfig.personState?.expiresAt) < new Date()\n    ) {\n      logger.debug(\"Person state expired. Syncing.\");\n      isPersonStateExpired = true;\n    }\n\n    try {\n      // fetch the environment state (if expired)\n      const environmentState = isEnvironmentStateExpired\n        ? await fetchEnvironmentState(\n            {\n              apiHost: configInput.apiHost,\n              accountId: configInput.accountId,\n              widgetKey,\n              userId: configInput.userId,\n              email: configInput.email,\n              attributes: configAttributes,\n              analyticsProjectId: existingConfig.environmentState.data.analyticsProjectId,\n              deferBehaviorHistory:\n                !isAnonymousUser && (isPersonStateExpired || shouldRefreshPersonState),\n            },\n            true,\n          )\n        : existingConfig.environmentState;\n\n      // fetch the person state (if expired)\n      let { personState } = existingConfig;\n\n      if (isPersonStateExpired || shouldRefreshPersonState) {\n        if (configInput.userId && !isAnonymousUser) {\n          personState = await fetchPersonState(\n            {\n              apiHost: configInput.apiHost,\n              accountId: configInput.accountId,\n              widgetKey,\n              userId: configInput.userId,\n              email: configInput.email,\n              ...(configInput.emailHash ? { emailHash: configInput.emailHash } : {}),\n              ...(environmentState.data.analyticsProjectId\n                ? { analyticsProjectId: environmentState.data.analyticsProjectId }\n                : {}),\n              ...((configInput as Record<string, unknown>).__userorbitBehaviorIdentityTransition ===\n              true\n                ? { behaviorHistoryIdentityTransition: true }\n                : {}),\n            },\n            shouldRefreshPersonState,\n          );\n        } else {\n          personState = DEFAULT_PERSON_STATE_NO_USER_ID;\n        }\n      }\n\n      applyCurrentPrivacyChoices();\n      initializeAnalytics(\n        configInput,\n        environmentState,\n        personState,\n        environmentState.data.product.plan === \"free\",\n      );\n\n      // filter the environment state wrt the person state\n      // const filteredSurveys = filterSurveys(environmentState, personState);\n\n      logger.log(\"update\", existingConfig, personState);\n\n      // update the appConfig with the new filtered surveys\n      config.update({\n        ...existingConfig,\n        environmentState,\n        personState,\n        widgetKey,\n        widget: configInput.widget || (existingConfig as any).widget,\n        inApp: inAppConfig,\n        analytics: configInput.analytics || (existingConfig as any).analytics,\n        locale: (configInput as any).locale || (existingConfig as any).locale,\n        language: (configInput as any).language || (existingConfig as any).language,\n        ...environmentState.data,\n        reportingSource: configInput.reportingSource || \"in_app\",\n        tours: environmentState.data.tours,\n        checklists: environmentState.data.checklists,\n        // filteredSurveys,\n      });\n    } catch {\n      // putInErrorState(config);\n      logger.debug(\"Error state\");\n    }\n  } else {\n    logger.debug(\n      \"No valid configuration found or it has been expired. Resetting config and creating new one.\",\n    );\n    void config.resetConfig();\n    logger.debug(\"Syncing.\");\n\n    try {\n      const environmentState = await fetchEnvironmentState(\n        {\n          apiHost: configInput.apiHost,\n          accountId: configInput.accountId,\n          widgetKey,\n          userId: configInput.userId,\n          email: configInput.email,\n          attributes: configAttributes,\n          deferBehaviorHistory: !isAnonymousUser,\n        },\n        false,\n      );\n      const personState =\n        (configInput.userId || configInput.email) && !isAnonymousUser\n          ? await fetchPersonState(\n              {\n                apiHost: configInput.apiHost,\n                accountId: configInput.accountId,\n                widgetKey,\n                userId: configInput.userId,\n                email: configInput.email,\n                ...(configInput.emailHash ? { emailHash: configInput.emailHash } : {}),\n                ...(environmentState.data.analyticsProjectId\n                  ? { analyticsProjectId: environmentState.data.analyticsProjectId }\n                  : {}),\n                ...((configInput as Record<string, unknown>)\n                  .__userorbitBehaviorIdentityTransition === true\n                  ? { behaviorHistoryIdentityTransition: true }\n                  : {}),\n              },\n              false,\n            )\n          : DEFAULT_PERSON_STATE_NO_USER_ID;\n\n      applyCurrentPrivacyChoices();\n      initializeAnalytics(\n        configInput,\n        environmentState,\n        personState,\n        environmentState.data.product.plan === \"free\",\n      );\n\n      config.update({\n        reportingSource: configInput.reportingSource || \"in_app\",\n        apiHost: configInput.apiHost,\n        accountId: configInput.accountId,\n        widgetKey,\n        widgetMountSelector: configInput.widgetMountSelector,\n        ...(configInput.email ? { email: configInput.email } : {}),\n        ...(configInput.emailHash ? { emailHash: configInput.emailHash } : {}),\n        ...(configInput.name ? { name: configInput.name } : {}),\n        requireAuthentication: configInput.requireAuthentication === true,\n        widget: configInput.widget,\n        inApp: inAppConfig,\n        ...(configInput.analytics ? { analytics: configInput.analytics } : {}),\n        ...(configInput.sessionReplay ? { sessionReplay: configInput.sessionReplay } : {}),\n        locale: (configInput as any).locale,\n        language: (configInput as any).language,\n        personState,\n        environmentState,\n        tours: environmentState.tours,\n      });\n    } catch (error) {\n      handleErrorOnFirstInit(error);\n    }\n\n    // and track the new session event\n    if (inAppEnabled) {\n      await trackNoCodeAction(\"New Session\");\n    }\n  }\n\n  applyCurrentPrivacyChoices();\n  const currentConfigForUpdate = config.get();\n  if (currentConfigForUpdate) {\n    const updates: Record<string, any> = { ...currentConfigForUpdate };\n\n    if (requestedTheme) {\n      updates.theme = requestedTheme;\n    }\n\n    if (configInput.widget) {\n      updates.widget = configInput.widget;\n    }\n\n    if (configInput.email) {\n      updates.email = configInput.email;\n    }\n\n    if (configInput.name) {\n      updates.name = configInput.name;\n    }\n\n    updates.inApp = inAppConfig;\n\n    if ((configInput as any).locale) {\n      updates.locale = (configInput as any).locale;\n    }\n\n    if ((configInput as any).language) {\n      updates.language = (configInput as any).language;\n    }\n\n    if (Object.keys(configAttributes).length > 0) {\n      updates.attributes = {\n        ...currentConfigForUpdate.attributes,\n        ...configAttributes,\n      };\n    }\n\n    if (\n      updates.theme ||\n      updates.email !== currentConfigForUpdate.email ||\n      updates.name !== currentConfigForUpdate.name ||\n      updates.attributes !== currentConfigForUpdate.attributes\n    ) {\n      config.update(updates);\n    }\n  }\n\n  if (await startTourBuilderFromUrl(configInput.apiHost)) {\n    setIsInitialized(true);\n    logger.debug(\"Initialized tour builder session\");\n    return okVoid();\n  }\n\n  applyCurrentPrivacyChoices();\n  void renderWidget(configInput);\n  addEnvironmentStateExpiryCheckListener();\n\n  if (inAppEnabled) {\n    logger.debug(\"Adding event listeners\");\n    addEventListeners();\n    addCleanupEventListeners();\n    installRteButtonHandlers();\n\n    logger.debug(\"Initializing route change detection\");\n    initializeRouteChangeDetection(async () => {\n      reconcileNoCodeSignalsForRoute();\n      await checkPageUrl();\n      const currentConfig = config.get();\n      if (currentConfig) {\n        await renderWidget(configInput);\n      }\n    });\n  }\n\n  logger.debug(\"Initializing session tracking\");\n  initializeSessionTracking();\n  if (inAppEnabled) startNoCodeSignalEngine();\n\n  void initializeSessionReplay(configInput.sessionReplay?.enabled);\n\n  setIsInitialized(true);\n  logger.debug(\"Initialized\");\n\n  if (inAppEnabled) {\n    void checkPageUrl();\n  }\n  return okVoid();\n};\n\nexport const handleErrorOnFirstInit = (error?: unknown) => {\n  if (error) {\n    logger.error(\"Could not initialize userorbit\", error);\n    ErrorHandler.getInstance().handle(error);\n  }\n\n  if (getIsDebug()) {\n    logger.debug(\n      \"Not putting userorbit in error state because debug mode is active (no error state)\",\n    );\n    return;\n  }\n\n  throw normalizeInitError(error);\n};\n\nconst normalizeInitError = (error?: unknown): Error => {\n  if (error instanceof Error) {\n    return error;\n  }\n\n  const sdkError = unwrapResultError(error);\n  if (sdkError instanceof Error) {\n    return sdkError;\n  }\n\n  const message = formatInitErrorMessage(sdkError ?? error);\n  const initError = new Error(message || \"Could not initialize userorbit\");\n  if (error) {\n    (initError as Error & { cause?: unknown }).cause = error;\n  }\n  return initError;\n};\n\nconst unwrapResultError = (error: unknown): unknown => {\n  if (\n    error &&\n    typeof error === \"object\" &&\n    \"ok\" in error &&\n    (error as { ok?: unknown }).ok === false\n  ) {\n    return (error as { error?: unknown }).error;\n  }\n\n  return error;\n};\n\nconst formatInitErrorMessage = (error: unknown): string | undefined => {\n  if (!error || typeof error !== \"object\") {\n    return typeof error === \"string\" ? error : undefined;\n  }\n\n  const { code, message, responseMessage, status, url } = error as {\n    code?: string;\n    message?: string;\n    responseMessage?: string;\n    status?: number;\n    url?: string;\n  };\n\n  return [message, responseMessage, code, status ? `status ${status}` : undefined, url]\n    .filter(Boolean)\n    .join(\" - \");\n};\n\nexport const checkInitialized = (): Result<void, NotInitializedError> => {\n  logger.debug(\"Check if initialized\");\n  if (!isInitialized || !ErrorHandler.initialized) {\n    return err({\n      code: \"not_initialized\",\n      message: \"Userorbit not initialized. Call initialize() first.\",\n    });\n  }\n\n  return okVoid();\n};\n\nexport const deinitalize = (): void => {\n  logger.debug(\"Deinitializing\");\n  void disposeAnalytics();\n  disposeBehaviorTargetingResolver?.();\n  disposeBehaviorTargetingResolver = null;\n  clearAllTourSnoozeExpiries();\n  disposeDeliveryScheduler(\"deinitialized\");\n  stopNoCodeSignalEngine();\n  removeWidgetContainer();\n  removeRouteChangeDetection();\n  removeAllEventListeners();\n  cleanupSessionTracking();\n  setIsInitialized(false);\n};\n\nexport const putUserorbitInErrorState = (config: Config): void => {\n  if (getIsDebug()) {\n    logger.debug(\n      \"Not putting userorbit in error state because debug mode is active (no error state)\",\n    );\n    return;\n  }\n\n  logger.debug(\"Putting userorbit in error state\");\n  // change userorbit status to error\n  const configData = config.get();\n  if (!configData) {\n    logger.debug(\"Config is null, cannot put in error state\");\n    return;\n  }\n  config.update({\n    ...configData,\n    status: {\n      value: \"error\",\n      expiresAt: new Date(new Date().getTime() + 10 * 60000), // 10 minutes in the future\n    },\n  });\n  deinitalize();\n};\n","import { wrapThrowsAsync } from \"@userorbit/types/error-handlers\";\nimport { ErrorHandler, Result } from \"./errors\";\nimport { checkInitialized } from \"./initialize\";\n\nexport class CommandQueue {\n  private queue: {\n    command: (args: any) => Promise<Result<void, any>> | Result<void, any> | Promise<void>;\n    checkInitialized: boolean;\n    commandArgs: any[any];\n  }[] = [];\n  private running = false;\n  private resolvePromise: (() => void) | null = null;\n  private commandPromise: Promise<void> | null = null;\n\n  public add<A>(\n    checkInitialized = true,\n    command: (...args: A[]) => Promise<Result<void, any>> | Result<void, any> | Promise<void>,\n    ...args: A[]\n  ) {\n    this.queue.push({ command, checkInitialized, commandArgs: args });\n\n    if (!this.running) {\n      this.commandPromise = new Promise((resolve) => {\n        this.resolvePromise = resolve;\n        this.run();\n      });\n    }\n  }\n\n  public async wait() {\n    if (this.running) {\n      await this.commandPromise;\n    }\n  }\n\n  private async run() {\n    this.running = true;\n    while (this.queue.length > 0) {\n      const errorHandler = ErrorHandler.getInstance();\n      const currentItem = this.queue.shift();\n\n      if (!currentItem) continue;\n\n      // make sure userorbit is initialized\n      if (currentItem.checkInitialized) {\n        // call different function based on package type\n        const initResult = checkInitialized();\n\n        if (initResult && initResult.ok !== true) {\n          errorHandler.handle(initResult.error);\n          continue;\n        }\n      }\n\n      const executeCommand = async () => {\n        return (await currentItem?.command.apply(null, currentItem?.commandArgs)) as Result<\n          void,\n          any\n        >;\n      };\n\n      const result = await wrapThrowsAsync(executeCommand)();\n\n      if (!result) continue;\n\n      if (result.ok) {\n        if (result.data && !result.data.ok) {\n          errorHandler.handle((result.data as any).error);\n        }\n      }\n\n      if (result.ok !== true) {\n        errorHandler.handle((result as any).error);\n      }\n    }\n    this.running = false;\n    if (this.resolvePromise) {\n      this.resolvePromise();\n      this.resolvePromise = null;\n      this.commandPromise = null;\n    }\n  }\n}\n","import { getUserorbit } from \"./analytics\";\nimport { config } from \"./config\";\nimport { getEnvironmentState } from \"./environmentState\";\nimport { Logger } from \"./logger\";\n\nconst logger = Logger.getInstance();\n\ninterface TrackEventOptions {\n  name: string;\n  properties?: Record<string, unknown>;\n}\n\nexport function trackEvent(options: TrackEventOptions): void {\n  const userorbit = getUserorbit(config.get(), getEnvironmentState());\n  if (!userorbit) {\n    logger.debug(`Userorbit not initialized, queuing event: ${options.name}`);\n    return;\n  }\n\n  userorbit.track(options.name, options.properties);\n  logger.debug(`Event tracked: ${options.name}`);\n}\n","import { trackEvent } from \"./trackEvent\";\n\ninterface FeatureExposureProperties {\n  featureName: string;\n  variant?: string;\n  source?: string;\n  context?: Record<string, unknown>;\n}\n\ninterface FeatureInteractionProperties extends FeatureExposureProperties {\n  interactionType: string;\n  duration?: number;\n  depthScore?: number;\n  metadata?: Record<string, unknown>;\n}\n\nfunction trackFeatureExposure(properties: FeatureExposureProperties): void {\n  trackEvent({\n    name: \"feature_exposed\",\n    properties: {\n      feature_name: properties.featureName,\n      variant: properties.variant,\n      source: properties.source,\n      ...properties.context,\n    },\n  });\n}\n\nfunction trackFeatureInteraction(properties: FeatureInteractionProperties): void {\n  trackEvent({\n    name: \"feature_interaction\",\n    properties: {\n      feature_name: properties.featureName,\n      interaction_type: properties.interactionType,\n      variant: properties.variant,\n      source: properties.source,\n      duration_ms: properties.duration,\n      depth_score: properties.depthScore,\n      ...properties.metadata,\n    },\n  });\n}\n\ninterface FeatureSession {\n  featureName: string;\n  variant?: string;\n  startTime: number;\n  interactions: Array<{ type: string; timestamp: number }>;\n}\n\nconst featureSessions = new Map<string, FeatureSession>();\n\nexport function startFeatureSession(featureName: string, variant?: string): void {\n  const session: FeatureSession = {\n    featureName,\n    variant,\n    startTime: Date.now(),\n    interactions: [],\n  };\n  featureSessions.set(featureName, session);\n\n  trackFeatureExposure({ featureName, variant, source: \"session_start\" });\n}\n\nexport function recordFeatureInteraction(featureName: string, interactionType: string): void {\n  const session = featureSessions.get(featureName);\n  if (session) {\n    session.interactions.push({ type: interactionType, timestamp: Date.now() });\n  }\n\n  trackFeatureInteraction({\n    featureName,\n    interactionType,\n    variant: session?.variant,\n  });\n}\n\nexport function endFeatureSession(featureName: string): void {\n  const session = featureSessions.get(featureName);\n  if (!session) return;\n\n  const duration = Date.now() - session.startTime;\n  const interactionCount = session.interactions.length;\n  const uniqueInteractions = new Set(session.interactions.map((i) => i.type)).size;\n  const depthScore = Math.min(100, uniqueInteractions * 20 + Math.min(interactionCount, 5) * 10);\n\n  trackFeatureInteraction({\n    featureName,\n    interactionType: \"session_end\",\n    variant: session.variant,\n    duration,\n    depthScore,\n    metadata: {\n      interaction_count: interactionCount,\n      unique_interactions: uniqueInteractions,\n    },\n  });\n\n  featureSessions.delete(featureName);\n}\n\nexport function getActiveFeatureSessions(): string[] {\n  return Array.from(featureSessions.keys());\n}\n","type ReplayDiagnostic =\n  | { name: string; source: \"window_error\" | \"unhandled_rejection\" | \"sdk_error\" }\n  | { name: string; source: \"sdk_performance\"; durationMs: number };\n\nconst DIAGNOSTIC_EVENT = \"userorbit:replay-diagnostic\";\nconst SDK_ERROR_NAMES = new Map([\n  [\"react_error_boundary\", \"ReactErrorBoundary\"],\n  [\"network_error\", \"NetworkError\"],\n  [\"timeout_error\", \"TimeoutError\"],\n  [\"validation_error\", \"ValidationError\"],\n]);\nconst SDK_ERROR_VALUES = new Set([\"Error\", ...SDK_ERROR_NAMES.values()]);\nconst PERFORMANCE_NAMES = new Set([\"long_task\", \"slow_lcp\", \"slow_navigation\", \"slow_request\"]);\n\nconst ERROR_NAMES = new Set([\n  \"Error\",\n  \"TypeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"RangeError\",\n  \"URIError\",\n  \"EvalError\",\n  \"NetworkError\",\n  \"TimeoutError\",\n  \"AbortError\",\n]);\nconst MAX_PER_MINUTE = 5;\nconst MAX_PER_RECORDING = 30;\n\nfunction dispatchDiagnostic(diagnostic: ReplayDiagnostic) {\n  if (typeof window === \"undefined\" || typeof CustomEvent === \"undefined\") return;\n  try {\n    window.dispatchEvent(new CustomEvent(DIAGNOSTIC_EVENT, { detail: diagnostic }));\n  } catch {\n    // Replay diagnostics must never interrupt the application's error reporting.\n  }\n}\n\nexport function reportReplayError(errorType: string) {\n  const name = SDK_ERROR_NAMES.get(errorType) || \"Error\";\n  dispatchDiagnostic({ name, source: \"sdk_error\" });\n}\n\nexport function reportReplayPerformance(name: string, durationMs: number, unit = \"ms\") {\n  if (\n    !PERFORMANCE_NAMES.has(name) ||\n    unit !== \"ms\" ||\n    !Number.isFinite(durationMs) ||\n    durationMs < 0 ||\n    durationMs > 3_600_000\n  ) {\n    return;\n  }\n  dispatchDiagnostic({ name, source: \"sdk_performance\", durationMs: Math.round(durationMs) });\n}\n\nfunction readSdkDiagnostic(event: Event): ReplayDiagnostic | null {\n  try {\n    if (!(\"detail\" in event) || !event.detail || typeof event.detail !== \"object\") return null;\n    const payload = event.detail as Record<string, unknown>;\n    if (payload.source === \"sdk_error\") {\n      const name = payload.name;\n      if (typeof name === \"string\" && SDK_ERROR_VALUES.has(name)) {\n        return { name, source: \"sdk_error\" };\n      }\n    }\n    if (payload.source === \"sdk_performance\") {\n      const { name, durationMs } = payload;\n      if (\n        typeof name === \"string\" &&\n        PERFORMANCE_NAMES.has(name) &&\n        typeof durationMs === \"number\" &&\n        Number.isFinite(durationMs) &&\n        durationMs >= 0 &&\n        durationMs <= 3_600_000\n      ) {\n        return { name, source: \"sdk_performance\", durationMs: Math.round(durationMs) };\n      }\n    }\n  } catch {\n    // The event is public; ignore malformed payloads and custom getters.\n  }\n  return null;\n}\n\nfunction errorName(value: unknown): string {\n  try {\n    if (value && typeof value === \"object\" && \"name\" in value) {\n      const name = value.name;\n      if (typeof name === \"string\" && ERROR_NAMES.has(name)) return name;\n    }\n  } catch {\n    // Error objects can have custom getters; diagnostic capture must not throw.\n  }\n  return \"Error\";\n}\n\nexport function captureReplayDiagnostics(\n  target: EventTarget,\n  onDiagnostic: (diagnostic: ReplayDiagnostic) => void,\n  onDropped: () => void,\n): () => void {\n  const limits = {\n    error: { minuteStartedAt: Date.now(), minuteCount: 0, totalCount: 0 },\n    performance: { minuteStartedAt: Date.now(), minuteCount: 0, totalCount: 0 },\n  };\n  const recentPerformance = new Map<string, { durationMs: number; capturedAt: number }>();\n  let stopped = false;\n\n  function capture(diagnostic: ReplayDiagnostic) {\n    if (stopped) return;\n    const limit = limits[diagnostic.source === \"sdk_performance\" ? \"performance\" : \"error\"];\n    const now = Date.now();\n    if (diagnostic.source === \"sdk_performance\") {\n      const recent = recentPerformance.get(diagnostic.name);\n      if (recent?.durationMs === diagnostic.durationMs && now - recent.capturedAt <= 100) return;\n    }\n    if (now - limit.minuteStartedAt >= 60_000) {\n      limit.minuteStartedAt = now;\n      limit.minuteCount = 0;\n    }\n    if (limit.minuteCount >= MAX_PER_MINUTE || limit.totalCount >= MAX_PER_RECORDING) {\n      onDropped();\n      return;\n    }\n    limit.minuteCount += 1;\n    limit.totalCount += 1;\n    if (diagnostic.source === \"sdk_performance\") {\n      recentPerformance.set(diagnostic.name, {\n        durationMs: diagnostic.durationMs,\n        capturedAt: now,\n      });\n    }\n    onDiagnostic(diagnostic);\n  }\n\n  const onError = (event: Event) => {\n    if (\"error\" in event) capture({ name: errorName(event.error), source: \"window_error\" });\n  };\n  const onRejection = (event: Event) => {\n    if (\"reason\" in event)\n      capture({ name: errorName(event.reason), source: \"unhandled_rejection\" });\n  };\n  const onSdkDiagnostic = (event: Event) => {\n    const diagnostic = readSdkDiagnostic(event);\n    if (diagnostic) capture(diagnostic);\n  };\n  target.addEventListener(\"error\", onError);\n  target.addEventListener(\"unhandledrejection\", onRejection);\n  target.addEventListener(DIAGNOSTIC_EVENT, onSdkDiagnostic);\n\n  const browser = target as EventTarget & {\n    PerformanceObserver?: typeof PerformanceObserver;\n    performance?: Pick<Performance, \"now\">;\n  };\n  let observer: PerformanceObserver | undefined;\n  if (browser.PerformanceObserver && browser.performance) {\n    const startedAt = browser.performance.now();\n    try {\n      const entryTypes = [\"longtask\", \"largest-contentful-paint\"].filter((entryType) =>\n        browser.PerformanceObserver.supportedEntryTypes?.includes(entryType),\n      );\n      if (entryTypes.length > 0) {\n        observer = new browser.PerformanceObserver((list) => {\n          for (const entry of list.getEntries()) {\n            if (entry.startTime < startedAt) continue;\n            const name = entry.entryType === \"longtask\" ? \"long_task\" : \"slow_lcp\";\n            const durationMs = entry.entryType === \"longtask\" ? entry.duration : entry.startTime;\n            const threshold = entry.entryType === \"longtask\" ? 200 : 3000;\n            if (Number.isFinite(durationMs) && durationMs >= threshold && durationMs <= 3_600_000) {\n              capture({ name, source: \"sdk_performance\", durationMs: Math.round(durationMs) });\n            }\n          }\n        });\n        observer.observe({ entryTypes });\n      }\n    } catch {\n      observer?.disconnect();\n      observer = undefined;\n    }\n  }\n  return () => {\n    stopped = true;\n    observer?.disconnect();\n    target.removeEventListener(\"error\", onError);\n    target.removeEventListener(\"unhandledrejection\", onRejection);\n    target.removeEventListener(DIAGNOSTIC_EVENT, onSdkDiagnostic);\n  };\n}\n","import { trackEvent } from \"./trackEvent\";\nimport { reportReplayError, reportReplayPerformance } from \"./replay-diagnostics\";\n\ninterface ErrorProperties {\n  errorType: string;\n  message: string;\n  stack?: string;\n  componentName?: string;\n  context?: Record<string, unknown>;\n}\n\ninterface PerformanceProperties {\n  metricName: string;\n  value: number;\n  unit?: \"ms\" | \"bytes\" | \"count\";\n  context?: Record<string, unknown>;\n}\n\ninterface PageLoadProperties {\n  url?: string;\n  domContentLoaded?: number;\n  loadComplete?: number;\n  firstContentfulPaint?: number;\n  largestContentfulPaint?: number;\n  timeToInteractive?: number;\n}\n\nexport function trackError(properties: ErrorProperties): void {\n  reportReplayError(properties.errorType);\n  trackErrorEvent(properties);\n}\n\nfunction trackErrorEvent(properties: ErrorProperties): void {\n  trackEvent({\n    name: \"error_occurred\",\n    properties: {\n      error_type: properties.errorType,\n      error_message: properties.message,\n      error_stack: properties.stack ? sanitizeStack(properties.stack) : undefined,\n      component_name: properties.componentName,\n      page_url: typeof window !== \"undefined\" ? window.location.href : undefined,\n      ...properties.context,\n    },\n  });\n}\n\nexport function trackPerformanceIssue(properties: PerformanceProperties): void {\n  reportReplayPerformance(properties.metricName, properties.value, properties.unit);\n  trackEvent({\n    name: \"performance_issue\",\n    properties: {\n      metric_name: properties.metricName,\n      metric_value: properties.value,\n      metric_unit: properties.unit || \"ms\",\n      page_url: typeof window !== \"undefined\" ? window.location.href : undefined,\n      ...properties.context,\n    },\n  });\n}\n\nexport function trackPageLoad(properties?: PageLoadProperties): void {\n  if (typeof window === \"undefined\" || !window.performance) return;\n\n  const timing = window.performance.timing;\n  const loadMetrics: PageLoadProperties = {\n    url: properties?.url || window.location.href,\n    domContentLoaded: timing.domContentLoadedEventEnd - timing.navigationStart,\n    loadComplete: timing.loadEventEnd - timing.navigationStart,\n    ...properties,\n  };\n\n  if (window.performance.getEntriesByType) {\n    const paintEntries = window.performance.getEntriesByType(\"paint\");\n    const fcpEntry = paintEntries.find((e) => e.name === \"first-contentful-paint\");\n    if (fcpEntry) {\n      loadMetrics.firstContentfulPaint = fcpEntry.startTime;\n    }\n  }\n\n  if (loadMetrics.loadComplete > 3000) {\n    reportReplayPerformance(\"slow_navigation\", loadMetrics.loadComplete);\n  }\n\n  trackEvent({\n    name: \"page_load_performance\",\n    properties: {\n      page_url: loadMetrics.url,\n      dom_content_loaded_ms: loadMetrics.domContentLoaded,\n      load_complete_ms: loadMetrics.loadComplete,\n      first_contentful_paint_ms: loadMetrics.firstContentfulPaint,\n      largest_contentful_paint_ms: loadMetrics.largestContentfulPaint,\n      time_to_interactive_ms: loadMetrics.timeToInteractive,\n    },\n  });\n}\n\nfunction sanitizeStack(stack: string): string {\n  const lines = stack.split(\"\\n\").slice(0, 10);\n  return lines\n    .map((line) => {\n      return line.replace(/https?:\\/\\/[^/]+/g, \"[origin]\").replace(/\\?[^\\s)]+/g, \"\");\n    })\n    .join(\"\\n\");\n}\n\nlet isGlobalErrorHandlerInstalled = false;\n\nexport function installGlobalErrorHandler(): void {\n  if (typeof window === \"undefined\" || isGlobalErrorHandlerInstalled) return;\n\n  window.addEventListener(\"error\", (event) => {\n    trackErrorEvent({\n      errorType: \"uncaught_error\",\n      message: event.message,\n      stack: event.error?.stack,\n      context: {\n        filename: event.filename,\n        lineno: event.lineno,\n        colno: event.colno,\n      },\n    });\n  });\n\n  window.addEventListener(\"unhandledrejection\", (event) => {\n    const reason = event.reason;\n    trackErrorEvent({\n      errorType: \"unhandled_promise_rejection\",\n      message: reason?.message || String(reason),\n      stack: reason?.stack,\n    });\n  });\n\n  isGlobalErrorHandlerInstalled = true;\n}\n\nexport function createErrorBoundaryHandler(componentName: string) {\n  return (error: Error, errorInfo?: { componentStack?: string }) => {\n    trackError({\n      errorType: \"react_error_boundary\",\n      message: error.message,\n      stack: error.stack,\n      componentName,\n      context: {\n        component_stack: errorInfo?.componentStack,\n      },\n    });\n  };\n}\n\nlet performanceObserver: PerformanceObserver | null = null;\n\nexport function installPerformanceObserver(options?: { slowThresholdMs?: number }): void {\n  if (typeof window === \"undefined\" || !window.PerformanceObserver) return;\n  if (performanceObserver) return;\n\n  const slowThreshold = options?.slowThresholdMs || 3000;\n\n  performanceObserver = new PerformanceObserver((list) => {\n    for (const entry of list.getEntries()) {\n      if (entry.entryType === \"largest-contentful-paint\") {\n        if (entry.startTime > slowThreshold) {\n          trackPerformanceIssue({\n            metricName: \"slow_lcp\",\n            value: entry.startTime,\n            unit: \"ms\",\n            context: { threshold: slowThreshold },\n          });\n        }\n      }\n\n      if (entry.entryType === \"longtask\" && entry.duration > 50) {\n        trackPerformanceIssue({\n          metricName: \"long_task\",\n          value: entry.duration,\n          unit: \"ms\",\n        });\n      }\n    }\n  });\n\n  try {\n    performanceObserver.observe({ entryTypes: [\"largest-contentful-paint\", \"longtask\"] });\n  } catch {\n    try {\n      performanceObserver.observe({ entryTypes: [\"largest-contentful-paint\"] });\n    } catch {\n      performanceObserver = null;\n    }\n  }\n}\n\nexport function uninstallPerformanceObserver(): void {\n  if (performanceObserver) {\n    performanceObserver.disconnect();\n    performanceObserver = null;\n  }\n}\n","import type { TJsConfigInput } from \"@userorbit/types/js\";\nimport { disposeAnalytics } from \"./analytics\";\nimport {\n  resetCurrentSessionBehaviorHistory,\n  transferAnonymousCurrentSessionBehaviorScope,\n} from \"./behavior-history\";\nimport { Config } from \"./config\";\nimport { NetworkError, Result, err, okVoid } from \"./errors\";\nimport { deinitalize, initialize } from \"./initialize\";\nimport { Logger } from \"./logger\";\nimport { clearTourLaunch } from \"./tourLaunch\";\nimport { getStoredUserIdentity } from \"./userId\";\nimport { normalizeDistinctId } from \"./userProperties\";\n\nconst config = Config.getInstance();\nconst logger = Logger.getInstance();\n\nexport const logoutPerson = async (preserveBehaviorHistory = false): Promise<void> => {\n  await disposeAnalytics();\n  deinitalize();\n  clearTourLaunch();\n  await config.resetConfig();\n  if (!preserveBehaviorHistory) resetCurrentSessionBehaviorHistory();\n};\n\nexport const resetPerson = async (): Promise<Result<void, NetworkError>> => {\n  logger.debug(\"Resetting state & getting new state from backend\");\n\n  const configData = config.get();\n  if (!configData) {\n    logger.error(\"Config not initialized, cannot reset person\");\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"Config not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"Config is null\",\n    });\n  }\n\n  const personState = configData.personState;\n  if (!personState?.data) {\n    logger.error(\"PersonState not initialized, cannot reset person\");\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"PersonState not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"PersonState data is undefined\",\n    });\n  }\n\n  const userId = personState.data.userId;\n\n  const syncParams = {\n    accountId: configData.accountId,\n    apiHost: configData.apiHost,\n    widgetKey: configData.widgetKey,\n    analytics: configData.analytics,\n    inApp: configData.inApp,\n    widget: configData.widget,\n    ...(userId && { userId }),\n    attributes: personState.data.attributes,\n    ...(configData.sessionReplay ? { sessionReplay: configData.sessionReplay } : {}),\n  };\n  await logoutPerson(true);\n  try {\n    await initialize(syncParams);\n    return okVoid();\n  } catch (e) {\n    return err(e as NetworkError);\n  }\n};\n\nexport type IdentifyPersonOptions = Pick<TJsConfigInput, \"email\" | \"name\" | \"attributes\"> &\n  Record<string, unknown>;\n\nexport const identifyPerson = async (\n  userId: string | number,\n  options: IdentifyPersonOptions = {},\n): Promise<Result<void, NetworkError>> => {\n  const configData = config.get();\n  if (!configData) {\n    logger.error(\"Config not initialized, cannot identify person\");\n    return err({\n      code: \"network_error\",\n      status: 500,\n      message: \"Config not initialized\",\n      url: \"about:blank\",\n      responseMessage: \"Config is null\",\n    });\n  }\n\n  const attributes =\n    configData.attributes || options.attributes\n      ? {\n          ...configData.attributes,\n          ...options.attributes,\n        }\n      : undefined;\n\n  const distinctId = normalizeDistinctId(userId);\n  if (!distinctId) {\n    return err({\n      code: \"network_error\",\n      status: 400,\n      message: \"Missing userId\",\n      url: \"about:blank\",\n      responseMessage: \"Missing userId\",\n    });\n  }\n\n  const nextConfig: TJsConfigInput = {\n    accountId: configData.accountId,\n    apiHost: configData.apiHost,\n    widgetKey: configData.widgetKey,\n    widgetMountSelector: configData.widgetMountSelector,\n    hideNotificationDot: configData.hideNotificationDot,\n    dotPosition: configData.dotPosition,\n    floatingWidget: configData.floatingWidget,\n    openOptions: configData.openOptions,\n    locale: configData.locale,\n    language: configData.language,\n    emailHash: configData.emailHash,\n    requireAuthentication: configData.requireAuthentication,\n    theme: configData.theme,\n    analytics: configData.analytics,\n    inApp: configData.inApp,\n    sessionReplay: configData.sessionReplay,\n    widget: configData.widget,\n    ...options,\n    attributes,\n    userId: distinctId,\n  };\n\n  const previousIdentity = getStoredUserIdentity();\n  const analyticsProjectId = configData.environmentState?.data.analyticsProjectId;\n  if (\n    analyticsProjectId &&\n    previousIdentity &&\n    !previousIdentity.hasIdentified &&\n    previousIdentity.distinctId !== distinctId\n  ) {\n    transferAnonymousCurrentSessionBehaviorScope(\n      analyticsProjectId,\n      previousIdentity.distinctId,\n      distinctId,\n    );\n    (nextConfig as Record<string, unknown>).__userorbitBehaviorIdentityTransition = true;\n  }\n\n  await disposeAnalytics();\n  deinitalize();\n  await config.resetConfig();\n\n  try {\n    await initialize(nextConfig);\n    return okVoid();\n  } catch (e) {\n    return err(e as NetworkError);\n  }\n};\n","import { TJsConfigInput, TJsTrackProperties } from \"@userorbit/types/js\";\nimport { trackCodeAction } from \"./lib/actions\";\nimport { getApi } from \"./lib/api\";\nimport { setAttributeInApp } from \"./lib/attributes\";\nimport { CommandQueue } from \"./lib/commandQueue\";\nimport { Config } from \"./lib/config\";\nimport { ErrorHandler } from \"./lib/errors\";\nimport { applyPrivacyPreferences, setPrivacyPreferences } from \"./lib/privacy\";\nimport {\n  privacyAllowed,\n  privacyGeneration,\n  privacyPreferencesFromInit,\n  validatePrivacyPreferences,\n} from \"./lib/privacyPreferences\";\nimport {\n  initialize,\n  assertManualWidgetInitialization,\n  assertManualWidgetInitialized,\n} from \"./lib/initialize\";\nimport { Logger } from \"./lib/logger\";\nimport { checkPageUrl } from \"./lib/noCodeActions\";\nimport {\n  endFeatureSession,\n  recordFeatureInteraction,\n  startFeatureSession,\n} from \"./lib/featureTracking\";\nimport {\n  createErrorBoundaryHandler,\n  installGlobalErrorHandler,\n  installPerformanceObserver,\n  trackError,\n  trackPageLoad,\n  trackPerformanceIssue,\n  uninstallPerformanceObserver,\n} from \"./lib/errorTracking\";\nimport {\n  identifyPerson,\n  type IdentifyPersonOptions,\n  logoutPerson,\n  resetPerson,\n} from \"./lib/person\";\nimport {\n  findChecklistById,\n  findSurveyById,\n  findTourById,\n  closeWidgetDrawer,\n  openWidgetDrawer,\n  renderWidget,\n  triggerChecklist,\n  triggerSurvey as triggerSurveyInternal,\n  triggerTour,\n} from \"./lib/widget\";\nimport { renderSurvey } from \"./modules/portal\";\nimport { SurveyPreviewProps } from \"./types\";\n\ntype ThemeModeSetting = \"light\" | \"dark\" | \"system\";\n\nconst logger = Logger.getInstance();\n\nlogger.debug(\"Create command queue\");\n\nlogger.debug(\"Create command queue\");\nconst queue = new CommandQueue();\nlet systemThemeMediaQuery: MediaQueryList | null = null;\nlet systemThemeMediaQueryHandler: (() => void) | null = null;\n\nconst init = async (initConfig: TJsConfigInput) => {\n  assertManualWidgetInitialization(initConfig);\n  const choices = privacyPreferencesFromInit(initConfig);\n  validatePrivacyPreferences(choices);\n  const privacyTransition = applyPrivacyPreferences(\n    choices,\n    initConfig.widget?.autoMount !== false,\n  );\n  ErrorHandler.init(initConfig.errorHandler);\n  let completed = false;\n  queue.add(false, async () => {\n    const result = await initialize(initConfig, true);\n    completed = result.ok;\n    return result;\n  });\n  await Promise.all([queue.wait(), privacyTransition]);\n  if (initConfig.widget?.autoMount === false) {\n    if (!completed) throw new Error(\"Manual widget initialization did not complete\");\n    assertManualWidgetInitialized(initConfig);\n  }\n};\n\nconst setEmail = async (email: string): Promise<void> => {\n  await setAttribute(\"email\", email);\n  await queue.wait();\n};\n\nconst setAttribute = async (key: string, value: any): Promise<void> => {\n  queue.add(true, setAttributeInApp, key, value);\n  await queue.wait();\n};\n\nconst identify = async (\n  userId: string | number,\n  options?: IdentifyPersonOptions,\n): Promise<void> => {\n  queue.add(true, identifyPerson, userId, options);\n  await queue.wait();\n};\n\nconst logout = async (): Promise<void> => {\n  queue.add(true, logoutPerson);\n  await queue.wait();\n};\n\nconst reset = async (): Promise<void> => {\n  queue.add(true, resetPerson);\n  await queue.wait();\n};\n\nconst track = async (name: string, properties?: TJsTrackProperties): Promise<void> => {\n  const generation = privacyAllowed(\"analytics\") ? privacyGeneration(\"analytics\") : -1;\n  queue.add(true, () => trackCodeAction(name, properties, generation));\n  await queue.wait();\n};\n\nconst registerRouteChange = async (): Promise<void> => {\n  queue.add(true, checkPageUrl);\n  const config = Config.getInstance();\n\n  const initConfig = config.get();\n  if (initConfig) {\n    queue.add(true, () => renderWidget(initConfig));\n  }\n\n  await queue.wait();\n};\n\nconst triggerSurvey = (props: SurveyPreviewProps) => {\n  const config = Config.getInstance();\n\n  return renderSurvey({\n    ...props,\n    config: config.get(),\n    preview: true,\n  });\n};\n\nexport interface OpenWidgetOptions {\n  tab?: \"home\" | \"feedback\" | \"roadmap\" | \"updates\" | \"help\" | \"support\";\n  activeTabs?: (\"home\" | \"feedback\" | \"roadmap\" | \"updates\" | \"help\" | \"support\")[];\n  locale?: string;\n  language?: string;\n  announcementId?: string;\n  roadmapId?: string;\n  /** @deprecated Use roadmapId instead. */\n  topicId?: string;\n  articleId?: string;\n  /** Opens a support conversation owned by the currently identified customer. */\n  supportThreadId?: string;\n  askAi?: boolean;\n  initialMessage?: string;\n  autoSubmitInitialMessage?: boolean;\n  showFeedbackForm?: boolean;\n  modal?: boolean;\n  compact?: boolean;\n  position?: \"bottom-right\" | \"bottom-left\" | \"top-right\";\n}\n\nconst openWidget = async (options?: OpenWidgetOptions): Promise<void> => {\n  if (!privacyAllowed(\"widget\")) return;\n  const generation = privacyGeneration(\"widget\");\n  queue.add(true, () => {\n    if (generation === privacyGeneration(\"widget\") && privacyAllowed(\"widget\"))\n      return openWidgetDrawer(options);\n  });\n  await queue.wait();\n};\n\nconst closeWidget = async (): Promise<void> => {\n  queue.add(true, closeWidgetDrawer);\n  await queue.wait();\n};\n\nexport interface SetConfigOptions {\n  theme?: ThemeModeSetting;\n  position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n  locale?: string;\n  language?: string;\n}\n\nconst setConfig = async (options: SetConfigOptions): Promise<void> => {\n  queue.add(true, async () => {\n    const config = Config.getInstance();\n    const currentConfig = config.get();\n\n    if (!currentConfig) {\n      logger.warn(\"Userorbit not initialized. Call init() first.\");\n      return;\n    }\n\n    if (options.theme) {\n      config.update({ ...currentConfig, theme: options.theme });\n      updateThemeClasses(options.theme);\n      watchSystemThemeClasses(options.theme);\n    }\n\n    if (options.position) {\n      config.update({\n        ...config.get(),\n        openOptions: { ...config.get()?.openOptions, position: options.position },\n      });\n    }\n\n    if (options.locale || options.language) {\n      config.update({\n        ...config.get(),\n        locale: options.locale || config.get()?.locale,\n        language: options.language || config.get()?.language,\n      });\n    }\n\n    window.dispatchEvent(new CustomEvent(\"uojs-config-update\", { detail: options }));\n  });\n  await queue.wait();\n};\n\nconst getResolvedThemeMode = (theme: ThemeModeSetting) => {\n  if (theme !== \"system\") return theme;\n  return window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n};\n\nconst updateThemeClasses = (theme: ThemeModeSetting) => {\n  const resolvedTheme = getResolvedThemeMode(theme);\n  const widgetElements = [\n    document.getElementById(\"uojs\"),\n    document.getElementById(\"floating-widget-container\"),\n    document.getElementById(\"uojs-shadow-container\"),\n    ...document.querySelectorAll('[id^=\"tour-\"]'),\n    ...document.querySelectorAll('[id^=\"checklist-\"]'),\n    ...document.querySelectorAll('[id^=\"survey-\"]'),\n    ...document.querySelectorAll(\".unh-widget\"),\n    ...document.querySelectorAll(\".uojs-widget-drawer\"),\n  ].filter(Boolean) as HTMLElement[];\n\n  widgetElements.forEach((element) => {\n    element.classList.remove(\"light\", \"dark\");\n    element.classList.add(resolvedTheme);\n    element.setAttribute(\"data-theme\", resolvedTheme);\n    element.setAttribute(\"data-theme-setting\", theme);\n  });\n\n  const shadowContainers = document.querySelectorAll(\"#uojs-shadow-container\");\n  shadowContainers.forEach((container) => {\n    const shadowRoot = container.shadowRoot;\n    if (shadowRoot) {\n      const shadowElements = shadowRoot.querySelectorAll(\"*\");\n      shadowElements.forEach((element) => {\n        element.classList.remove(\"light\", \"dark\");\n        element.classList.add(resolvedTheme);\n        element.setAttribute(\"data-theme\", resolvedTheme);\n        element.setAttribute(\"data-theme-setting\", theme);\n      });\n    }\n  });\n};\n\nconst watchSystemThemeClasses = (theme: ThemeModeSetting) => {\n  if (systemThemeMediaQuery && systemThemeMediaQueryHandler) {\n    systemThemeMediaQuery.removeEventListener?.(\"change\", systemThemeMediaQueryHandler);\n  }\n\n  systemThemeMediaQuery = null;\n  systemThemeMediaQueryHandler = null;\n\n  if (theme !== \"system\" || !window.matchMedia) return;\n\n  systemThemeMediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n  systemThemeMediaQueryHandler = () => updateThemeClasses(\"system\");\n  systemThemeMediaQuery.addEventListener?.(\"change\", systemThemeMediaQueryHandler);\n};\n\nconst updateTheme = async (theme: ThemeModeSetting): Promise<void> => {\n  await setConfig({ theme });\n};\n\nconst prepareAudio = async (): Promise<void> => {\n  queue.add(false, async () => {\n    if (typeof window === \"undefined\") return;\n\n    (window as any).__userorbitAudioPrepared = true;\n\n    const AudioContextConstructor = window.AudioContext || (window as any).webkitAudioContext;\n    if (AudioContextConstructor) {\n      try {\n        const context = new AudioContextConstructor();\n        await context.resume?.();\n        await context.close?.();\n      } catch {\n        // Browser support varies; the explicit user gesture is the important part.\n      }\n    }\n\n    window.dispatchEvent(new CustomEvent(\"uojs-audio-prepared\"));\n  });\n  await queue.wait();\n};\n\nconst startSurvey = async (id: string): Promise<void> => {\n  queue.add(true, async () => {\n    const survey = findSurveyById(id);\n    if (!survey) {\n      logger.warn(\n        `Survey with id \"${id}\" not found. Make sure userorbit.init() has been called and the survey exists.`,\n      );\n      return;\n    }\n    await triggerSurveyInternal(survey, true, { source: \"programmatic\", bypassCaps: true });\n  });\n  await queue.wait();\n};\n\nconst startTour = async (id: string): Promise<void> => {\n  queue.add(true, async () => {\n    const tour = findTourById(id);\n    if (!tour) {\n      logger.warn(\n        `Tour with id \"${id}\" not found. Make sure userorbit.init() has been called and the tour exists.`,\n      );\n      return;\n    }\n    await triggerTour(tour, true, { source: \"programmatic\", bypassCaps: true });\n  });\n  await queue.wait();\n};\n\nconst startChecklist = async (id: string): Promise<void> => {\n  queue.add(true, async () => {\n    const checklist = findChecklistById(id);\n    if (!checklist) {\n      logger.warn(\n        `Checklist with id \"${id}\" not found. Make sure userorbit.init() has been called and the checklist exists.`,\n      );\n      return;\n    }\n    await triggerChecklist(checklist, true, { source: \"programmatic\", bypassCaps: true });\n  });\n  await queue.wait();\n};\n\nconst userorbit = {\n  capabilities: Object.freeze({ manualWidget: true as const }),\n  init,\n  setPrivacyPreferences,\n  identify,\n  setEmail,\n  setAttribute,\n  track,\n  logout,\n  reset,\n  registerRouteChange,\n  getApi,\n  triggerSurvey,\n  openWidget,\n  closeWidget,\n  updateTheme,\n  setConfig,\n  prepareAudio,\n  startSurvey,\n  startTour,\n  startChecklist,\n  feature: {\n    startSession: startFeatureSession,\n    recordInteraction: recordFeatureInteraction,\n    endSession: endFeatureSession,\n  },\n  errors: {\n    trackError,\n    trackPerformanceIssue,\n    trackPageLoad,\n    installGlobalHandler: installGlobalErrorHandler,\n    installPerformanceObserver,\n    uninstallPerformanceObserver,\n    createBoundaryHandler: createErrorBoundaryHandler,\n  },\n};\n\nexport type TUserorbitApp = typeof userorbit;\nexport default userorbit as TUserorbitApp;\n"],"ignoreList":[2,3,4,5,6,7,8,9,10,11,20,21,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,205,212,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,536,537,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,580,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,672,679,687,688,699,711,712,732],"mappings":"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CAjxB,IAAS,MACP,+BACAA,IAAS,SACP,8BACAA,IAAS,OACP,+BACA,8BACV,WACE,yEACF,WAAY,oBACd,EACA,UAAWykB,GAAG,GAAI,CAChB,OAAQ,CAACoM,EACT,cAAe,CAAC,CAACA,GAAY,CAAC,CAACh2D,EAC/B,OAAQ,CAAC,CAACg2D,GAAY,CAACh2D,CACzB,CAAC,EACD,iBAAkB,EACN,aACC,cACK,mBAzCpB,SAAA,CA2CGA,EACAg2D,GAAYj7F,EAAC86F,IAAD,CAA4B,UAAW,CAAA,EACpD96F,EAACjsE,GAAD,CACE,MAAO,GACP,OAAQ,EACR,MAAO,CACL,KAAM,UACN,cAAe,MACjB,CACD,CAAA,CACU,GAEL,CAAA,CACJ,CACE,CAAA,CAAA,CAAA,CAElB,yBAjJqBw2J,GAAA,EACMvwF,GAAA,EACYi0F,GAAA,EACgBrvG,EAAA,EACpCmwG,GAAA,EAC8BE,IAAA,MAGhBkM,IAAA,EAD3B,GAAOnnK,GAuJAC,GAAiB+5J,GAC5B,CACE,0JACA,wEACA,sPACA,mLACF,EACA,CACE,SAAU,CACR,QAAS,CACP,KAAM,CACJ,oFACA,kCACA,qBACA,uDACF,EACA,QAAS,CACP,+BACA,kCACA,6BACA,yBACF,EACA,QAAS,CACP,8GACF,EACA,KAAM,CACJ,oFACA,wCACF,EACA,MAAO,CACL,mDACA,mEACA,kEACF,EACA,YAAa,CAAC,aAAc,eAAgB,0BAA0B,EACtE,UAAW,CACT,+BACA,+BACA,uOACA,0BACF,EACA,MAAO,CACL,0EACA,aACA,2BACA,sDACF,EACA,WAAY,CACV,eACA,eACA,iRACA,0OACA,0BACF,EACA,KAAM,CAAC,+CAA+C,EACtD,KAAM,CAAC,8CAA8C,EACrD,KAAM,EACR,EACA,KAAM,CAEJ,GAAI,CAAC,8BAA8B,EACnC,KAAM,CAAC,iCAAiC,EACxC,MAAO,CAAC,2CAA2C,CACrD,EACA,UAAW,CACT,KAAM,eACR,EACA,QAAS,CACP,KAAM,wBACR,EACA,UAAW,CACT,KAAM,kCACR,EACA,MAAO,CACL,KAAM,qDACR,CACF,EACA,gBAAiB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ehwO,EAAY,IAAK,GAAW1d,EAAE,EAAE,EAC/B,iBACA,iBACN,UACX,CAAA,EAGH6uC,EAACu8M,GAAD,CAAa,UAAWsC,EAAY,GAAoB,gBAAiB,CAAA,CAClE,GACN,CAAA,CAET,KC7JA,SAAgBiB,GAAoB,EAA0C,CAC5E,OAAOC,GAAgBlxQ,IAAS,IAClC,CAEA,SAAgBmxQ,GAAwB,EAAsB,CAU5D,OATInxQ,EAAK,WAAW,MAAM,EACjBA,EAQF,OALYA,EAChB,QAAQ,QAAS,GAAG,CAAC,CACrB,QAAQ,QAAU,GAASqrB,EAAK,YAAY,CAAC,CAAC,CAC9C,QAAQ,OAAQ,EAEL,GAChB,CAEA,SAAgB+lP,IACd,EACA,EAAgCC,GACX,CAKrB,OAJKrxQ,GAIEixQ,GAAoBE,GAAwBnxQ,EAAK,KAAK,CAAC,CAAC,GAHtDymC,CAIX,sBAlJO0kB,GAAA,EAIM,GAA2CnX,GAElD,GAAuD,CAC3D,mBACA,cACA,iBACA,iBACA,uBACA,uBACA,wBACA,qBACA,kBACA,eACA,eACA,kBACA,eACA,YACA,YACA,aACA,iBACA,aACA,WACA,gBACA,cACA,iBACA,gBACA,iBACA,gBACA,aACA,mBACA,mBACA,oBACA,iBACA,iBACA,aACA,YACA,eACA,WACA,kBACA,WACA,sBACA,gBACA,YACA,oBACA,gBACA,eACA,YACA,WACA,YACA,aACA,aACA,cACA,cACA,kBACA,YACA,aACA,eACA,sBACA,kBACA,aACA,SAAA2K,GACA,WACA,YACA,gBACA,YACA,iBACA,YACA,cACA,YACA,eACA,kBACA,qBACA,aACA,YACA,aACA,gBACA,YACA,eACA,WACA,cACA,aACA,aACA,aACA,aACA,mBACA,kBACA,sBACA,yBACA,YACA,cACA,cACA,aACA,cACA,gBACA,cACA,oBACA,oBACA,YACA,mBACA,WACA,WACA,gBACA,iBACA,eACA,YACA,aACA,cACA,YACA,aACA,cACA,iBACA,YACA,aACA,QACF,oBCtOwC2yN,GAAA,EAE3B,GAAqB,GAChCF,IAAwB9gO,CAAQ,oBCJSgoE,GAAA,EAChBntD,GAA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"}