scream-code 0.15.2 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-6Hcxs2tP.mjs → app-Bqc3MVGh.mjs} +56 -28
- package/dist/{dispatch-Dur5jHVw.mjs → dispatch-CweYoXh3.mjs} +1 -1
- package/dist/{dispatch-B_ViYZer.mjs → dispatch-DGeogib-.mjs} +131 -38
- package/dist/main.mjs +1 -1
- package/dist/public/assets/{index-BfVIY6UW.css → index-BJaeSGtC.css} +1 -1
- package/dist/public/assets/index-DDVdau1l.js +93 -0
- package/dist/public/assets/index-DDVdau1l.js.map +1 -0
- package/dist/public/index.html +2 -2
- package/package.json +2 -2
- package/dist/public/assets/index-B9I4PIWR.js +0 -93
- package/dist/public/assets/index-B9I4PIWR.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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OACA,KACA,SACA,QACA,SACA,OACA,KACA,SACA,SACA,QACA,SACA,SACA,SACA,OACA,OACA,MACA,QACA,SACA,QACA,SACA,OACA,SACA,SACA,QACA,QACA,QACA,SACA,MACA,QACA,SACA,OACA,SACA,SACA,QACA,OACA,OACA,SACA,MACA,SACA,SACA,QACA,SACA,MACA,OACA,SACA,SACA,SACA,KACA,SACA,QACA,QACA,SACA,SACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,SACA,OACA,OACA,SACA,QACA,OACA,QACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,MACA,OACA,SACA,MACA,MACF,EC3GaC,GAAyB,CACpC,KAAM,IACN,MAAO,IACP,KAAM,IACN,MAAO,IACP,OAAQ,IACR,IAAK,IACL,OAAQ,IACR,KAAM,IACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,MAAO,IACP,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,IAAK,IACL,OAAQ,IACR,KAAM,IACN,KAAM,IACN,MAAO,IACP,MAAO,IACP,KAAM,IACN,OAAQ,IACR,MAAO,IACP,KAAM,IACN,KAAM,IACN,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,MAAO,IACP,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,KAAM,IACN,IAAK,IACL,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,KAAM,IACN,OAAQ,IACR,MAAO,IACP,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,MAAO,IACP,MAAO,IACP,OAAQ,IACR,O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","names":["makeMap","str","map","key","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","cacheStringFunction","fn","cache","camelizeRE","camelize","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","normalizeStyle","res","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","normalizeClass","name","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","normalizeCssVarValue","activeEffectScope","EffectScope","detached","l","scopes","effects","currentEffectScope","current","fromParent","last","getCurrentScope","activeSub","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","e","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","soft","nextSub","prevDep","nextDep","trackStack","pauseTracking","resetTracking","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","depsMap","trigger","newValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","reactiveReadArray","array","raw","toReactive","shallowReadArray","toRaw","toWrapped","isReadonly","toReadonly","isReactive","arrayInstrumentations","iterator","args","x","thisArg","apply","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","isShallow","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","index","wrapInitialAccumulator","acc","isNonTrackableKeys","builtInSymbols","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","readonly","MutableReactiveHandler","isArrayWithIntegerKey","isOldValueReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","proto","rawValue","valueToAdd","get","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","reactive","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","isProxy","markRaw","r","ref","createRef","RefImpl","useDirectValue","unref","ref2","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","onWatcherCleanup","cleanupFn","failSilently","owner","cleanups","watch","source","cb","options","immediate","deep","once","scheduler","augmentJob","call","reactiveGetter","source2","traverse","effect","boundCleanup","forceTrigger","isMultiSource","s","currentEffect","baseGetter","depth","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","seen","callWithErrorHandling","instance","handleError","callWithAsyncErrorHandling","values","throwInDev","contextVNode","errorHandler","throwUnhandledErrorInProduction","cur","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","queueJob","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","flushPreFlushCbs","flushPostFlushCbs","deduped","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","prevStackSize","blockStack","closeBlock","withDirectives","vnode","directives","getComponentPublicInstance","bindings","dir","modifiers","invokeDirectiveHook","prevVNode","oldBindings","binding","hook","provide","currentInstance","provides","parentProvides","inject","defaultValue","treatDefaultAsFactory","getCurrentInstance","currentApp","ssrContextKey","useSSRContext","doWatch","flush","baseWatchOptions","runsImmediately","ssrCleanup","isInSSRComponentSetup","watchStopHandle","isPre","queuePostRenderEffect","isFirstRun","watch$1","instanceWatch","publicThis","createPathGetter","reset","setCurrentInstance","path","segments","pendingMounts","TeleportEndKey","isTeleport","isTeleportDisabled","props","isTeleportDeferred","isTargetSVG","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","optimized","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","parentNode","disabled","dynamicChildren","mount","container2","anchor2","mountToTarget","disabled2","targetAnchor","prepareAnchor","updateCssVars","queuePendingMount","mountJob","mountContainer","placeholder","mainAnchor","pendingMount","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","unmount","hostRemove","doRemove","shapeFlag","children","targetStart","shouldRemove","child","hydrateTeleport","parentAnchor","move","moveType","isReorder","node","nextSibling","hydrateChildren","hydrateAnchor","target2","targetNode","hydrateDisabledTeleport","node2","vnode2","Teleport","isDisabled","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getTransitionRawChildren","findNonCommentChild","createCommentVNode","rawProps","mode","emptyPlaceholder","innerChild","getInnerChild$1","enterHooks","resolveTransitionHooks","hooks","Comment","setTransitionHooks","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","callHook","callAsyncHook","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","hooks2","isKeepAlive","cloneVNode","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","extraOptions","markAsyncBoundary","isTemplateRefKey","refs","desc","pendingSetRefMap","setRef","rawRef","oldRawRef","isUnmount","isAsyncWrapper","refValue","oldRef","setupState","rawSetupState","canSetSetupRef","canSetRef","invalidatePendingSetRef","oldRawRefAtom","_isString","_isRef","doSet","existing","newVal","pendingSetRef","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","warnMissing","Component","selfName","getComponentName","resolve","registry","renderList","renderItem","cached","sourceIsArray","sourceIsReactiveArray","isReadonlySource","keys","renderSlot","fallback","noSlotted","branchKey","slotProps","hasProps","openBlock","createBlock","createVNode","slot","rendered","validSlotContent","ensureValidVNode","slotKey","vnodes","isVNode","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","hasSetupBinding","PublicInstanceProxyHandlers","data","accessCache","appContext","shouldCacheAccess","publicGetter","cssModule","globalProperties","cssModules","descriptor","normalizePropsOrEmits","applyOptions","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","opt","set","createWatcher","registerLifecycleHook","register","_hook","exposed","checkDuplicateProperties","normalizeInject","h","handler","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","hydrate","rootComponent","rootProps","context","installedPlugins","pluginCleanupFns","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","lastApp","getModelModifiers","modelName","emit","event","rawArgs","handlerName","onceHandler","mixinEmitsCache","normalizeEmitsOptions","comp","hasExtends","extendEmits","raw2","normalizedFromExtend","isEmitListener","renderComponentRoot","withProxy","propsOptions","attrs","renderCache","fallthroughAttrs","proxyToUse","thisProxy","normalizeVNode","render2","getFunctionalFallthrough","root","filterModelListeners","shouldUpdateComponent","nextVNode","prevProps","prevChildren","nextProps","nextChildren","patchFlag","emits","hasPropsChanged","dynamicProps","hasPropValueChanged","emitsOptions","nextKeys","nextProp","prevProp","updateHOCHostEl","parent","suspense","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","extendProps","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","queueEffectWithSuspense","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","patch","getNextHostNode","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","customElement","patchElement","vnodeHook","transition","dirs","resolveChildrenNamespace","setScopeId","invokeVNodeHook","needCallTransitionHooks","needTransition","scopeId","isSuspense","parentVNode","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","update","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","scopedInitialVNode","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","j","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","anchorVNode","resolveAsyncComponentPlaceholder","leave","delayLeave","afterLeave","remove2","performLeave","wasLeaving","cacheIndex","memo","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","shouldInvalidateMemo","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","isFlushing","currentNamespace","allowed","ch1","ch2","len","arrI","subComponent","anchorVnode","currentBlock","disableTracking","isBlockTreeEnabled","inVOnce","setupBlock","createElementBlock","createBaseVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","klass","style","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","createTextVNode","text","flag","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","unsetCurrentInstance","setupResult","setupStatefulComponent","setup","setupContext","createSetupContext","isAsyncSetup","resolvedResult","handleSetupResult","finishComponentSetup","skipOptions","attrsProxyHandlers","includeInferred","computed$1","propsOrChildren","policy","tt","unsafeToTrustedHTML","svgNS","mathmlNS","doc","templateContainer","nodeOps","tag","is","selector","content","before","template","wrapper","TRANSITION","ANIMATION","vtcKey","DOMTransitionPropsValidators","TransitionPropsValidators","decorate$1","t","Transition","resolveTransitionProps","h2","hasExplicitCallback","baseProps","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","isCancelled","removeTransitionClass","finishLeave","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","cls","_vtc","endId","expectedType","explicitTimeout","resolveIfNotStale","timeout","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","setDisplay","CSS_VAR_TEXT","useCssVars","updateTeleports","vars","setVarsOnNode","setVars","setVarsOnVNode","ob","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","shouldPreserveTextareaResizeStyle","cssVarText","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","isBoolean","patchDOMProp","attrName","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","optionsModifierEventRE","cachedNow","getNow","initialValue","originalStop","handlers","isNativeOn","patchProp","shouldSetAsProp","shouldSetAsPropForVueCE","camelize$1","positionMap","newPositionMap","moveCbKey","decorate","TransitionGroupImpl","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","cssTransitionProps","getPosition","TransitionGroup","oldPos","newPos","dx","dy","rect","scaleX","scaleY","clone","getModelAssigner","onCompositionStart","onCompositionEnd","assignKey","castValue","trim","number","vModelText","lazy","castToNumber","elValue","rootNode","vModelSelect","selectedVal","o","getValue","setSelected","isMultiple","isArrayValue","option","optionValue","optionType","systemModifiers","modifierGuards","withModifiers","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","ensureRenderer","createApp","containerOrSelector","normalizeContainer","resolveRootNamespace","isCurrentSessionRequest","currentSessionId","currentGeneration","targetSessionId","targetGeneration","canApplySnapshot","input","buildCreateGoalBody","request","buildUpdateGoalBody","acceptJournalEvent","currentEpoch","currentSeq","applyGoalTodoEvent","payload","groupTodosByPhase","todos","groups","indexes","todo","phase","toasts","counter","showToast","message","removeToast","useToast","useThrottledFlush","rafId","API_BASE","HEARTBEAT_TIMEOUT_MS","useScreamWebClient","connectionStatus","messages","olderAvailable","oldestSeq","pendingApprovals","status","goal","goalRequestPending","goalRequestError","promptPending","sessionId","workDir","isBusy","sessions","sessionActive","isArchived","gitStatus","models","sessionPlan","skills","plugins","pluginInfo","mcpServers","mcpStartupMetrics","backgroundTasks","backgroundTaskOutput","config","experimentalFlags","preflightOk","ws","heartbeatTimer","reconnectTimer","snapshotRetryTimer","lastPongAt","seq","epoch","reconnectAttempt","sessionGeneration","connectionGeneration","promptGeneration","liveGeneration","sessionMutationGeneration","goalMutationGeneration","goalAwaitingMutation","goalRequestInFlight","snapshotRetryGoalGeneration","pendingPromptAccepted","disposed","sentMessageIds","turnNumber","turnStartAt","turnFirstTokenAt","activeToolMs","activeToolStarts","wsUrl","setConnectionStatus","send","syncGoalRequestPending","resetGoalRequestState","eventErrorMessage","scheduleSnapshotRetry","goalGeneration","fetchSnapshot","targetSessionGeneration","targetConnectionGeneration","targetPromptGeneration","targetLiveGeneration","snapshot","applySnapshot","pendingAssistantDelta","pendingThinkingDelta","pendingToolProgress","localMsgs","pendingClientId","pendingEntry","pendingLocal","pendingCovered","pendingLost","pendingMessages","generateId","stats","startHeartbeat","ms","stopHeartbeat","scheduleReconnect","delay","connect","handleMessage","msg","hello","resumeEpoch","fetchSessions","fetchGitStatus","activateSession","active","decision","onEvent","pendingIdx","local","streamDisposed","flushStreaming","lastAssistantMessage","thinkingTool","toolCallId","output","tool","streamFlush","goalTodoState","startedAt","llmMs","usage","tokens","turn","reconnectNow","loadOlderMessages","targetSession","cursor","older","socket","sendPrompt","clientMessageId","localMessageId","abort","sendCommand","command","pendingCommands","pendingMsgId","clearMessages","appendSystemMessage","resolveApproval","feedback","gs","fetchModels","like","fetchLike","updateLike","prefs","postSessionSwitch","body","okMessage","requestGeneration","switchModel","alias","switchThinking","level","requestGoal","waitForState","requestError","refineGoal","description","createGoal","updateGoal","runGoalLifecycle","pauseGoal","resumeGoal","cancelGoal","createSession","switchSession","targetId","deleteSession","exportSession","blob","url","fetchSessionStatus","fetchSessionUsage","fetchSessionContext","fetchSessionPlan","clearPlan","postSessionAction","switchPermission","ok","switchPlanMode","enabled","strategy","switchWolfpack","switchRlm","maxDepth","undoHistory","count","compact","instruction","fetchSkills","activateSkill","removeSkill","fetchPlugins","fetchPluginInfo","pid","installPlugin","setPluginEnabled","setPluginMcpServerEnabled","server","removePlugin","reloadPlugins","summary","activatePlugin","deactivatePlugin","injectPlugin","fetchMcpServers","fetchMcpStartupMetrics","addMcpServer","reconnectMcpServer","stopMcpServer","removeMcpServer","fetchBackgroundTasks","activeOnly","limit","q","qs","fetchBackgroundTaskOutput","taskId","stopBackgroundTask","reason","fetchConfig","setConfig","removeProvider","providerId","fetchExperimentalFlags","preflight","handleOnline","handleVisibilityChange","SLASH_COMMANDS","filterSlashCommands","query","resolveCommandName","lower","cmd","slashHelpText","_createElementBlock","_normalizeClass","__props","_renderSlot","_ctx","__emit","minimized","feedbackOpen","feedbackText","busyIds","alive","displayText","act","req","submitFeedback","onKeydown","_openBlock","_hoisted_1","_toDisplayString","_Fragment","_createElementVNode","_hoisted_2","_cache","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","$event","_hoisted_9","Button","_hoisted_10","strokeWidth","fraction","f","percent","radius","circumference","dashOffset","tone","DEFAULT_THINKING_LEVELS","THINKING_LABELS","searchRef","filtered","list","provider","activeModel","thinkingLevels","thinkingLabel","formatContext","displayName","rootRef","onDocMousedown","pick","listRef","rowButtons","focusFirstRow","onListKeydown","rows","idx","_b","_c","pickThinking","_renderList","group","_hoisted_11","_hoisted_12","_withModifiers","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","textareaRef","slashIndex","slashDismissed","slashQuery","slashCommands","slashVisible","pickSlashCommand","chosen","autoResize","pushHistory","resetInput","steerQueue","busy","rest","history","historyIndex","historyStash","historyKey","loadHistory","entry","recallHistory","direction","beforeCursor","afterCursor","draftKey","draftTimer","draft","max","keyboardInset","syncKeyboardInset","vv","diff","sp","queueSteer","insertText","insertToken","token","__expose","openModelPicker","model","permission","contextUsage","inputPlaceholder","pickerOpen","thinkingLevel","modelSwitchable","toggleModelPicker","onApplyModel","onApplyThinking","permissionClass","permissionLabel","_normalizeStyle","_createBlock","SlashMenu","SvgIcon","_createTextVNode","_Transition","ModelPicker","ContextRing","editing","startEdit","commitEdit","statusText","FOCUSABLE_SELECTOR","dialogRef","previouslyFocused","focusables","onGlobalKeydown","items","first","open","_Teleport","$slots","heading","permLabel","boolLabel","present","fmtNum","usagePct","sumTokens","modelRows","hasUsage","Dialog","row","_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","edit","regex","valSource","other","bull","indent","newline","blockCode","fences","hr","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","_tag","_comment","html","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","escape","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","_inlineLabel","reflink","nolink","reflinkSearch","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","escape2","html2","encode","cleanUrl","href","splitCells","tableRow","match","offset","escaped","curr","cells","rtrim","invert","suffLen","findClosingBracket","outputLink","cap","link2","lexer2","rules","title","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","_Tokenizer","options2","__publicField","src","trimmed","lines","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","list2","itemRegex","endsWithBlankLine","endEarly","itemContents","line","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","rawLine","nextLineWithoutTabs","istask","ischecked","lastItem","spacers","hasMultipleLineBreaks","tag2","headers","aligns","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","text2","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","__Lexer","lastParagraphClipped","extTokenizer","cutSrc","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","code","ordered","startAttr","itemBody","checkbox","checked","header","cleanHref","out","_TextRenderer","_Parser","__Parser","anyToken","genericToken","textToken","_Hooks","markdown","Marked","tableToken","listToken","childTokens","tokens2","extensions","pack","opts","ext","prevRenderer","args2","extLevel","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","ret2","walkTokens2","packWalktokens","blockType","origOpt","throwError","parser2","src2","silent","async","markedInstance","marked","something","doClone","cloneArray","cloneObj","mergeObjects","sources","basename","CAPTURING_REGEX_SOURCE","RegexSource","regexSource","captureSource","captureIndices","commandIndex","capture","strcmp","strArrCmp","len1","len2","isValidHexColor","hex","escapeRegExpCharacters","CachedFn","Theme","_colorMap","_root","scopeName","colorMap","parseTheme","resolveParsedThemeRules","scopePath","effectiveRule","_scopePathMatchesParentScopes","StyleAttributes","ScopeStack","_ScopeStack","scopeNames","parentScopes","scopePattern","scopeMustMatch","_matchesScope","fontStyle","foregroundId","backgroundId","settings","resultLen","_scope","lenJ","foreground","background","ParsedThemeRule","FontStyle","FontStyle2","parsedThemeRules","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","ColorMap","defaults","ThemeTrieElement","ThemeTrieElementRule","rule","color","emptyParentScopes","_ThemeTrieElementRule","scopeDepth","_ThemeTrieElement","_mainRule","rulesWithParentScopes","_children","aParentIndex","bParentIndex","parentScopeLengthDiff","dotIndex","EncodedTokenMetadata","_EncodedTokenMetadata","encodedTokenAttributes","languageId","tokenType","containsBalancedBrackets","_languageId","_tokenType","_containsBalancedBracketsBit","_fontStyle","_foreground","_background","createMatchers","matchesName","results","newTokenizer","priority","matcher","parseConjunction","parseOperand","expressionToNegate","matcherInput","expressionInParents","parseInnerExpression","isIdentifier","identifiers","matchers","matcher2","disposeOnigString","TopLevelRuleReference","TopLevelRepositoryRuleReference","ruleName","ExternalReferenceCollector","reference","ScopeDependencyProcessor","repo","initialScopeName","deps","collectReferencesOfReference","baseGrammarScopeName","selfGrammar","baseGrammar","collectExternalReferencesInTopLevelRule","collectExternalReferencesInTopLevelRepositoryRule","injections","injection","collectExternalReferencesInRules","patternRepository","include","parseInclude","newContext","BaseReference","SelfReference","RelativeReference","TopLevelReference","TopLevelRepositoryReference","indexOfSharp","HAS_BACK_REFERENCES","BACK_REFERENCING_END","endRuleId","whileRuleId","Rule","$location","contentName","location","lineText","CaptureRule","retokenizeCapturedWithRuleId","grammar","endRegexSource","allowA","allowG","MatchRule","captures","RegExpSource","RegExpSourceList","IncludeOnlyRule","patterns","pattern","BeginEndRule","begin","beginCaptures","endCaptures","applyEndPatternLast","BeginWhileRule","_while","whileCaptures","RuleFactory","_RuleFactory","helper","repository","maximumCaptureId","captureId","numericCaptureId","ruleId","localIncludedRule","externalGrammarName","externalGrammarInclude","externalGrammar","externalIncludedRule","skipRule","_RegExpSource","regExpSource","lastPushedPos","hasAnchor","pos","nextCh","newSource","capturedValues","g1","A0_G0_result","A0_G1_result","A1_G0_result","A1_G1_result","onigLib","regExps","CompiledRule","string","startPosition","BasicScopeAttributes","BasicScopeAttributesProvider","initialLanguageId","embeddedLanguages","standardTokenType","ScopeMatcher","escapedScopes","TokenizeStringResult","stack","stoppedEarly","_tokenizeString","isFirstLine","linePos","lineTokens","checkWhileConditions","timeLimit","lineLength","STOP","anchorPosition","whileCheckResult","_checkWhileConditions","startTime","scanNext","matchRuleOrInjections","matchedRuleId","hasAdvanced","poppedRule","handleCaptures","popped","_rule","beforePush","nameScopesList","pushedRule","contentNameScopesList","whileRules","nodeRule","whileRule","ruleScanner","findOptions","prepareRuleWhileSearch","matchResult","matchRule","injectionResult","matchInjections","matchResultScore","injectionResultScore","prepareRuleSearch","bestMatchRating","bestMatchCaptureIndices","bestMatchRuleId","bestMatchResultPriority","matchRating","lineTextContent","localStack","maxEnd","captureRule","captureIndex","stackClone","onigSubStr","captureRuleScopeName","captureRuleScopesList","LocalStackElement","endPos","createGrammar","initialLanguage","tokenTypes","balancedBracketSelectors","grammarRepository","Grammar","collectInjections","ruleFactoryHelper","nameMatcher","identifers","lastIndex","identifier","scopesAreMatching","thisScopeName","_rootScopeName","_onigLib","initGrammar","scopeName2","rawInjections","expression","injectionScopeNames","injectionScopeName","injectionGrammar","i1","i2","factory","rawIncludedGrammar","prevState","emitBinaryTokens","StateStackImpl","rawDefaultMetadata","defaultStyle","defaultMetadata","rootScopeName","scopeList","AttributedScopeStack","onigLineText","LineTokens","_AttributedScopeStack","tokenAttributes","namesScopeList","frame","rawRootMetadata","rootStyle","resolvedTokenAttributes","existingTokenAttributes","basicScopeAttributes","styleAttributes","rawMetadata","newPath","scopeThemeMatchResult","metadata","enterPos","anchorPos","beginRuleCapturedEOL","endRule","outIndex","contentNameScopeStack","BalancedBracketSelectors","balancedBracketScopes","unbalancedBracketScopes","excluder","includer","tokenTypeOverrides","endIndex","scopesList","scopes2","SyncRegistry","theme","targetScope","rawGrammar","Registry","configuration","dependencyProcessor","INITIAL","htmlVoidElements","Schema","property","normal","space","merge","definitions","definition","normalize","Info","attribute","powers","boolean","increment","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","checks","types","DefinedInfo","mask","mark","check","create","properties","normals","info","aria","_","caseSensitiveTransform","attributes","caseInsensitiveTransform","svg","xlink","xmlns","xml","dash","valid","find","schema","Type","camelcase","dashes","kebab","$0","htmlBase","svgBase","own","zwitch","one","parameters","defaultSubsetRegex","surrogatePairsRegex","controlCharactersRegex","regexEscapeRegex","subsetToRegexCache","core","charactersToExpressionCached","basic","surrogate","pair","all","character","subset","charactersToExpression","hexadecimalRegex","toHexadecimal","omit","decimalRegex","toDecimal","characterEntitiesLegacy","characterEntitiesHtml4","dangerous","characters","notAlphanumericRegex","toNamed","formatSmart","numeric","named","decimal","stringifyEntities","htmlCommentRegex","bogusCommentEntitySubset","commentEntitySubset","comment","_1","_2","doctype","_3","ccount","stringify","re","whitespace","thing","empty","siblingAfter","siblings","siblingBefore","emptyChildren","sibling","includeWhitespace","omission","closing","headOrColgroupOrCaption","dd","dt","li","optgroup","rubyElement","tbody","tfoot","thead","tr","opening","colgroup","previous","constants","element","selfClosing","parts","serializeAttributes","serializeAttribute","y","quote","commas","spaces","textEntitySubset","handle","invalid","unknown","node_","emptyOptions","emptyCharacterReferences","toHtml","tree","options_","alternative","resolveColorReplacements","replacements","themeName","applyColorReplacements","toArray","normalizeGetter","isPlainLang","isSpecialLang","isNoneTheme","isSpecialTheme","addClassToHast","className","targets","splitLines","preserveEnding","createPositionConverter","indexToPos","posToIndex","DEFAULT_COLOR_LIGHT_DARK","COLOR_KEYS","splitToken","offsets","lastOffset","splitTokens","breakpoints","sorted","breakpointsInToken","flatTokenVariants","variantsOrder","cssVariablePrefix","defaultColor","colorsRendering","getTokenStyleObject","styleKeys","mergedStyles","varKey","keyName","lightIndex","darkIndex","ShikiError$1","lightValue","darkValue","decorations","stringifyTokenStyle","_grammarStateMap","setLastGrammarStateToMap","getLastGrammarStateFromMap","GrammarState","stacksMap","themes","getScopes","visited","pushScope","stack2","getGrammarStack","transformerDecorations","getContext","shiki","normalizePosition","converter","verifyIntersections","codeEl","applyLineSection","decoration","lineEl","applyDecoration","applyLine","transform","lineApplies","foo","bar","isFooHasBarStart","isFooHasBarEnd","isBarHasFooStart","isBarHasFooEnd","builtInTransformers","getTransformers","transformers","sortTransformersByEnforcement","pre","post","transformer","namedColors","findSequence","position","nextEscape","nextClose","parseColor","sequence","colorMode","rgb","parseSequence","commands","codeInt","createAnsiSequenceParser","decorations2","findResult","styleToken","defaultNamedColorsMap","createColorPalette","namedColorsMap","namedColor","rgbColor","colorTable","getColorTable","levels","tableColor","defaultAnsiColors","tokenizeAnsiWithTheme","fileContents","colorReplacements","ansiPalette","themeColor","colorPalette","parser","bgColor","dimColor","hexMatch","alpha","cssVarMatch","codeToTokensBase","internal","_grammar","tokenizeWithTheme","getLastGrammarState","_tokenizeWithTheme","grammarState","tokenizeMaxLineLength","tokenizeTimeLimit","stateStack","actual","final","lineOffset","resultWithScopes","tokensWithScopes","tokensWithScopesIndex","tokensLength","nextStartIndex","themeSettingsSelectors","setting","selectors","tokenWithScopes","tokenWithScopesText","explainThemeScopesNameOnly","explainThemeScopesFull","themeSelectors","explainThemeScope","matchesOne","matches","selectorParentIndex","parentIndex","selectorPieces","codeToTokensWithThemes","themedTokens","syncThemesTokenization","mergedTokens","lineIdx","_token","tokenIdx","mergedToken","themeIdx","__","___","mergedGrammarState","outThemes","outLines","minLength","codeToTokens","bg","fg","themeTokens","themeRegs","themesOrder","themeColorReplacements","mapThemeColors","_theme","cssVar","t2","codeToHast","transformerContext","_code","_options","mergeWhitespaces","mergeSameStyleTokens","mergeWhitespaceTokens","splitWhitespaceTokens","mergeAdjacentStyledTokens","contextSource","tokensToHast","structure","tabindex","preNode","codeNode","lineNodes","lineNode","col","tokenNode","syntheticLines","currentLine","transformedCode","_d","newLine","carryOnContent","firstOffset","couldMerge","leading","trailing","expanded","prevToken","currentStyle","isPrevDecorated","isDecorated","hastToHtml","codeToHtml","VSCODE_FALLBACK_EDITOR_FG","VSCODE_FALLBACK_EDITOR_BG","RESOLVED_KEY","normalizeTheme","rawTheme","globalSetting","replacementCount","replacementMap","getReplacementColor","replaceFg","replaceBg","replacement","_e","resolveLangs","langs","resolveThemes","_emitDeprecation","warnDeprecated","resolveLangAlias","ShikiError","Registry$1","_resolver","_themes","_langs","_alias","textmateTheme","embeddedLazilyBy","grammarConfig","langsGraphArray","missingLangs","dependents","embedded","embeddedLang","Resolver","engine","langIdOrAlias","scopeParts","subScopeName","instancesCount","createShikiInternalSync","isDisposed","resolver","_registry","_lastTheme","resolveLangAlias$1","getLanguage","ensureNotDisposed","_lang","getTheme","setTheme","getLoadedThemes","getLoadedLanguages","loadLanguageSync","langs2","loadLanguage","loadThemeSync","themes2","loadTheme","dispose","createShikiInternal","createHighlighterCore","getHeapMax","_emscripten_get_now","alignUp","multiple","main","init","wasmMemory","buffer","updateGlobalBufferAndViews","buf","_emscripten_memcpy_big","dest","num","emscripten_realloc_buffer","size","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","newSize","UTF8Decoder","UTF8ArrayToString","heapOrArray","maxBytesToRead","endIdx","endPtr","u0","u1","u2","UTF8ToString","ptr","asmLibraryArg","createWasm","exports$1","__defProp","__defNormalProp","onigBinding","throwLastOnigError","onigBinding2","UtfString","utf16Length","utf8Length","computeIndicesMapping","utf16OffsetToUtf8","utf8OffsetToUtf16","utf8Value","i8","i16","charCode","codePoint","wasSurrogatePair","nextCharCode","codepoint","_OnigString","utfString","utf8Offset","utf16Offset","OnigString","OnigScanner","strPtrsArr","strLenArr","strPtrsPtr","strLenPtr","scannerPtr","debugCall","resultPtr","HEAPU32","beg","isInstantiatorOptionsObject","dataOrOptions","isInstantiatorModule","isDataOptionsObject","isResponse","isArrayBuffer","initPromise","loadWasm","_load","_makeResponseStreamingLoader","_makeResponseNonStreamingLoader","_makeArrayBufferLoader","importObject","arrayBuffer","createOnigurumaEngine","effectiveTheme","highlighted","plainHtml","copied","highlighter","loadedLangs","loadingLangs","LANG_ALIASES","ensureHighlighter","githubDark","githubLight","__vitePreload","ensureLang","langName","promise","mod","resolveLang","rawLang","escapeHtml","copy","streaming","wasStreaming","_sfc_main$p","renderContent","nodes","safeContent","trimPartialClosingFences","renderToken","fenceRegex","openFence","openFenceIndex","openFenceLength","fence","renderInline","CodeBlock","renderTable","headerCells","bodyRows","EDIT_TOOL_NAMES","isEditTool","toolStatus","live","aggregateStatus","tools","statuses","statusIcon","userToggled","toggle","paramSummary","formatArgs","formatOutput","outputText","outputLarge","outputExpanded","outputShown","copyOutput","imageSrc","MAX_LCS_LINES","lcsTable","dp","backtrack","parseUnifiedDiff","oldNo","newNo","computeDiff","oldStr","newStr","oldLines","newLines","diffStats","added","removed","OLD_FIELDS","NEW_FIELDS","PATH_FIELDS","extractField","fields","buildEditDiff","editDiff","chip","filePath","diffLines","hasDiff","DiffLines","completedCount","_resolveDynamicComponent","_unref","EditToolCard","GenericToolCard","panelOpen","streamRef","loadingFull","fullLoaded","isTruncated","ensureFull","teaser","openPanel","closePanel","elapsed","timer","stopClock","startClock","fmtMs","fmtTokens","copyTimer","isUser","isAssistant","thinkingTools","realTools","timestamp","canEdit","showThinking","showTools","speaking","speakOnEnd","toggleSpeak","utterance","copyContent","textarea","ThinkingBlock","ToolGroup","MarkdownRenderer","TurnStats","_imports_0","SUGGESTIONS","fmtContext","pct","latestUserId","lastMessageId","lastAssistantId","showTimestampFor","streamLength","forceScroll","showScrollButton","isNearBottom","prefersReducedMotion","scrollToBottom","behavior","finalBehavior","saveScrollRaf","saveScrollPosition","sid","restoreScrollPosition","saved","prependAnchorHeight","loading","delta","onScroll","awayFromBottom","restoredForSession","oldLen","handleScrollButtonClick","showSkeleton","EmptyState","MessageItem","API","cwd","preview","previewError","rawUrl","crumbComponents","label","loadList","firstRoot","openEntry","previewKind","previewFile","fmtSize","_f","FULL_PATH_LIMIT","splitPath","FILE_PREVIEW","STORAGE_KEY","STATUS_LABEL","STATUS_COLOR","showAll","refresh","visibleFiles","files","hiddenCount","syncLabel","ahead","behind","_withDirectives","file","objective","completionCriterion","turnBudget","tokenBudget","timeBudget","timeUnit","localError","refinedHint","connected","baseDisabled","createDisabled","statusLabel","statusHint","resetCreateForm","nextGoalId","previousGoalId","positiveInteger","collectBudgets","turns","time","budgets","refine","refined","nextObjective","representTimeBudget","milliseconds","beginEdit","timeToMilliseconds","unit","saveEdit","nextTurns","nextTokens","nextTime","changedBudgets","budget","changedObjective","action","formatNumber","formatDuration","totalSeconds","hours","minutes","metricPercent","used","formatNoteTime","_hoisted_39","_hoisted_42","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_30","_hoisted_31","_hoisted_32","note","_hoisted_33","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_48","_hoisted_49","saving","confirm","usagePercent","tokenTitle","connectionLabel","completed","inProgress","pending","hint","statusMeta","groupIndex","activeTab","gitDiff","diffRef","openDiff","adds","reduced","$emit","_component_SvgIcon","RunStatusPanel","GitPanel","TodoPanel","LikePanel","GoalPanel","FilesBrowser","composerRef","drawerOpen","infoVisible","infoMode","currentTitle","stored","firstUser","onEditResend","showInfo","onCommand","onRename","retryLastUser","lastUser","loadingOlder","onLoadOlder","onFork","ConversationHeader","MessageList","ApprovalCard","Composer","SessionDrawer","InfoPanel","THEME_OPTIONS","FIELDS","save","logoUrl","focusSearch","filteredSessions","sessionTitle","currentDir","collapsedSpaces","toggleSpace","onSessionClick","confirmDelete","relativeTime","ts","_withKeys","TARGET_LABEL","MODES","isGoalMode","modeHint","ModeSwitch","SIDEBAR_STORAGE_KEY","SIDEBAR_WIDTH_KEY","SIDEBAR_MIN","SIDEBAR_MAX","SIDEBAR_DEFAULT","MODE_STORAGE_KEY","client","view","mobileSidebarOpen","sidebarRef","waitForConnected","timeoutMs","started","onNavigate","onCreateSession","onWorkspaceSend","errorMessageOf","onSwitchSession","sidebarCollapsed","toggleSidebarCollapse","readStoredSidebarWidth","sidebarWidth","resizing","resizePointerId","persistSidebarWidth","onResizePointerDown","onResizePointerMove","onResizePointerUp","resetSidebarWidth","onResizeKeydown","step","readStoredWorkspaceMode","workspaceMode","setWorkspaceMode","Sidebar","WorkspaceHome","ConversationView","SkillsView","SettingsView","icons","_TransitionGroup","THEME_COLORS","applyTheme","prefersDark","effective","meta","themeTimer","colorScheme","WebShell","Toast","App"],"ignoreList":[0,1,2,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"sources":["../../../../../../../node_modules/.pnpm/@vue+shared@3.5.40/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../../../../../node_modules/.pnpm/@vue+reactivity@3.5.40/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../../../../../../node_modules/.pnpm/@vue+runtime-core@3.5.40/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../../../../../../../node_modules/.pnpm/@vue+runtime-dom@3.5.40/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../../src/utils/goalTodoState.ts","../../src/composables/useToast.ts","../../src/composables/useThrottledFlush.ts","../../src/composables/useScreamWebClient.ts","../../src/commands.ts","../../src/components/ui/Button.vue","../../src/components/ApprovalCard.vue","../../src/components/ContextRing.vue","../../src/components/ModelPicker.vue","../../src/components/SlashMenu.vue","../../src/components/ui/SvgIcon.vue","../../src/components/Composer.vue","../../src/components/ConversationHeader.vue","../../src/components/ui/Dialog.vue","../../src/components/InfoPanel.vue","../../../../../../../node_modules/.pnpm/marked@15.0.12/node_modules/marked/lib/marked.esm.js","../../../../../../../node_modules/.pnpm/@shikijs+types@3.23.0/node_modules/@shikijs/types/dist/index.mjs","../../../../../../../node_modules/.pnpm/@shikijs+vscode-textmate@10.0.2/node_modules/@shikijs/vscode-textmate/dist/index.js","../../../../../../../node_modules/.pnpm/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/schema.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/merge.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/normalize.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/info.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/types.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/defined-info.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/create.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/aria.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/html.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/svg.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/xlink.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/xmlns.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/xml.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/lib/find.js","../../../../../../../node_modules/.pnpm/property-information@7.2.0/node_modules/property-information/index.js","../../../../../../../node_modules/.pnpm/zwitch@2.0.4/node_modules/zwitch/index.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-decimal.js","../../../../../../../node_modules/.pnpm/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../../../../../../node_modules/.pnpm/character-entities-html4@2.1.0/node_modules/character-entities-html4/index.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/constant/dangerous.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-named.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-smart.js","../../../../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/comment.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/doctype.js","../../../../../../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../../../../../../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../../../../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../../../../../node_modules/.pnpm/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/omission.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/closing.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/opening.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/text.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/raw.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/index.js","../../../../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.js","../../../../../../../node_modules/.pnpm/@shikijs+core@3.23.0/node_modules/@shikijs/core/dist/index.mjs","../../../../../../../node_modules/.pnpm/@shikijs+engine-oniguruma@3.23.0/node_modules/@shikijs/engine-oniguruma/dist/index.mjs","../../src/components/CodeBlock.vue","../../src/components/MarkdownRenderer.vue","../../src/utils/toolGroup.ts","../../src/components/GenericToolCard.vue","../../src/utils/diff.ts","../../src/components/DiffLines.vue","../../src/components/EditToolCard.vue","../../src/components/ToolGroup.vue","../../src/components/ThinkingBlock.vue","../../src/components/TurnStats.vue","../../src/components/MessageItem.vue","../../../../../../../../../../../icon.ico","../../src/components/EmptyState.vue","../../src/components/MessageList.vue","../../src/components/FilesBrowser.vue","../../src/utils/pathLabel.ts","../../src/components/GitPanel.vue","../../src/components/GoalPanel.vue","../../src/components/LikePanel.vue","../../src/components/RunStatusPanel.vue","../../src/components/TodoPanel.vue","../../src/components/SessionDrawer.vue","../../src/components/ConversationView.vue","../../src/components/SettingsView.vue","../../src/assets/logo-v2.svg","../../src/components/Sidebar.vue","../../src/components/SkillsView.vue","../../src/components/ModeSwitch.vue","../../src/components/WorkspaceHome.vue","../../src/components/WebShell.vue","../../src/components/ui/Toast.vue","../../src/App.vue","../../src/main.ts"],"sourcesContent":["/**\n* @vue/shared v3.5.40\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^(?:-?>)+|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n let prev;\n do {\n prev = src;\n src = src.replace(commentStripRE, \"\");\n } while (src !== prev);\n return src;\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.40\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this._warnOnRun = true;\n this.__v_skip = true;\n if (!detached && activeEffectScope) {\n if (activeEffectScope.active) {\n this.parent = activeEffectScope;\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n } else {\n this._active = false;\n this._warnOnRun = false;\n }\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].resume();\n }\n }\n const effects = this.effects.slice();\n for (i = 0, l = effects.length; i < l; i++) {\n effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && this._warnOnRun) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n if (activeEffectScope === this) {\n activeEffectScope = this.prevScope;\n } else {\n let current = activeEffectScope;\n while (current) {\n if (current.prevScope === this) {\n current.prevScope = this.prevScope;\n break;\n }\n current = current.prevScope;\n }\n }\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope) {\n if (activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n } else {\n this.flags &= -2;\n }\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n let wrappedFn = fn;\n let wrapInitialAccumulator = false;\n if (arr !== self) {\n if (needsWrap) {\n wrapInitialAccumulator = args.length === 0;\n wrappedFn = function(acc, item, index) {\n if (wrapInitialAccumulator) {\n wrapInitialAccumulator = false;\n acc = toWrapped(self, acc);\n }\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n const result = arr[method](wrappedFn, ...args);\n return wrapInitialAccumulator ? toWrapped(self, result) : result;\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver) && result) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n const target = toRaw(this);\n const proto = getProto(target);\n const rawValue = toRaw(value);\n const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value;\n const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue);\n if (!hadKey) {\n target.add(valueToAdd);\n trigger(target, \"add\", valueToAdd, valueToAdd);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n if (target[\"__v_skip\"] || !Object.isExtensible(target)) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = targetTypeMap(toRawType(target));\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, key, _defaultValue) {\n this._object = _object;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._key = isSymbol(key) ? key : String(key);\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || isSymbol(this._key) || !isIntegerKey(this._key)) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n const res = _cb(...args);\n watchHandle();\n return res;\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (immediateFirstRun || deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.40\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, watch as watch$1, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, customRef, shallowReactive, trigger, ReactiveEffect, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, hyphenate, hasChanged, looseToNumber, isModelListener, looseEqual, EMPTY_ARR, toRawType, makeMap, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst setHmrUpdating = (v) => {\n try {\n return isHmrUpdating;\n } finally {\n isHmrUpdating = v;\n }\n};\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n const prevStackSize = blockStack.length;\n let res;\n try {\n res = fn(...args);\n } finally {\n for (let i = blockStack.length; i > prevStackSize; i--) closeBlock();\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentInstance || currentInstance.isMounted) {\n warn$1(`provide() can only be used inside setup().`);\n }\n }\n if (currentInstance) {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = getCurrentInstance();\n if (instance || currentApp) {\n let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(getCurrentInstance() || currentApp);\n}\n\nconst ssrContextKey = /* @__PURE__ */ Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nconst pendingMounts = /* @__PURE__ */ new WeakMap();\nconst TeleportEndKey = /* @__PURE__ */ Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment, parentNode }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n const mount = (vnode, container2, anchor2) => {\n if (vnode.shapeFlag & 16) {\n mountChildren(\n vnode.children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = (vnode = n2) => {\n const disabled2 = isTeleportDisabled(vnode.props);\n const target = vnode.target = resolveTarget(vnode.props, querySelector);\n const targetAnchor = prepareAnchor(target, vnode, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled2) {\n mount(vnode, target, targetAnchor);\n updateCssVars(vnode, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled2) {\n warn$1(\"Invalid Teleport target on mount:\", target, `(${typeof target})`);\n }\n };\n const queuePendingMount = (vnode) => {\n const mountJob = () => {\n if (pendingMounts.get(vnode) !== mountJob) return;\n pendingMounts.delete(vnode);\n if (isTeleportDisabled(vnode.props)) {\n const mountContainer = parentNode(vnode.el) || container;\n mount(vnode, mountContainer, vnode.anchor);\n updateCssVars(vnode, true);\n }\n mountToTarget(vnode);\n };\n pendingMounts.set(vnode, mountJob);\n queuePostRenderEffect(mountJob, parentSuspense);\n };\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n if (isTeleportDeferred(n2.props) || parentSuspense && parentSuspense.pendingBranch) {\n queuePendingMount(n2);\n return;\n }\n if (disabled) {\n mount(n2, container, mainAnchor);\n updateCssVars(n2, true);\n }\n mountToTarget();\n } else {\n n2.el = n1.el;\n const mainAnchor = n2.anchor = n1.anchor;\n const pendingMount = pendingMounts.get(n1);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(n1);\n queuePendingMount(n2);\n return;\n }\n n2.targetStart = n1.targetStart;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = resolveTarget(n2.props, querySelector);\n if (nextTarget) {\n n2.target = nextTarget;\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n const disabled = isTeleportDisabled(props);\n const shouldRemove = doRemove || !disabled;\n const pendingMount = pendingMounts.get(vnode);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(vnode);\n }\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (!pendingMount && (disabled || target) && shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!pendingMounts.has(vnode) && (!isReorder || isTeleportDisabled(props))) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateAnchor(target2, targetNode) {\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target2._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n }\n function hydrateDisabledTeleport(node2, vnode2) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(node, vnode);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(\n target,\n vnode,\n createText,\n insert,\n // if target is the same as the main view, insert anchors before current node\n // to avoid hydrating mismatch\n parentNode(node) === target ? node : null\n );\n }\n } else {\n vnode.anchor = nextSibling(node);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode);\n vnode.targetStart = node;\n vnode.targetAnchor = nextSibling(node);\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert, anchor = null) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target, anchor);\n insert(targetAnchor, target, anchor);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = /* @__PURE__ */ Symbol(\"_leaveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n const child = children && children.length ? findNonCommentChild(children) : (\n // Keep explicit default-slot conditionals on the same transition path\n // as regular v-if branches, which render a comment placeholder.\n instance.subTree ? createCommentVNode() : void 0\n );\n if (!child) {\n return;\n }\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return;\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n const done = el[enterCbKey].bind(null, false);\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n const done = el[leaveCbKey].bind(null, false);\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n if (!!(process.env.NODE_ENV !== \"production\") && isTemplateRefKey(refs, key)) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\nfunction isTemplateRefKey(refs, key) {\n let desc;\n return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable);\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n if (isTemplateRefKey(refs, key)) {\n return false;\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2, key) => {\n if (!!(process.env.NODE_ENV !== \"production\") && knownTemplateRefs.has(ref2)) {\n return false;\n }\n if (key && isTemplateRefKey(refs, key)) {\n return false;\n }\n return true;\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n const oldRawRefAtom = oldRawRef;\n if (canSetRef(oldRef, oldRawRefAtom.k)) {\n oldRef.value = null;\n }\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref, rawRef.k)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref, rawRef.k)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const {\n type,\n dynamicProps,\n props,\n patchFlag,\n shapeFlag,\n dirs,\n transition\n } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n const hasDynamicProps = !!dynamicProps;\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || hasDynamicProps || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && !isMismatchAllowed(el, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n logMismatchError();\n }\n while (next) {\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n const { textContent } = el;\n if (textContent !== clientText && // innerHTML normalize \\r\\n or \\r into a single \\n in the DOM\n textContent !== clientText.replace(/\\r\\n|\\r/g, \"\\n\")) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${textContent}\n - expected on client: ${clientText}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || hasDynamicProps || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n const namespace = el.namespaceURI.includes(\"svg\") ? \"svg\" : el.namespaceURI.includes(\"MathML\") ? \"mathml\" : void 0;\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement && !isReservedProp(key) || dynamicProps && dynamicProps.includes(key)) {\n patchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasCheckedMismatch = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!hasCheckedMismatch) {\n hasCheckedMismatch = true;\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n logMismatchError();\n }\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isNodeMismatchAllowed(node, vnode)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n return isMismatchAllowedByAttr(\n el && el.getAttribute(allowMismatchAttr),\n allowedType\n );\n}\nfunction isMismatchAllowedByAttr(allowedAttr, allowedType) {\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\nfunction isNodeMismatchAllowed(node, vnode) {\n return isMismatchAllowed(node.parentElement, 1 /* CHILDREN */) || isMismatchAllowedByNode(node) || isMismatchAllowedByVNode(vnode);\n}\nfunction isMismatchAllowedByNode(node) {\n return node.nodeType === 1 && isMismatchAllowedByAttr(\n node.getAttribute(allowMismatchAttr),\n 1 /* CHILDREN */\n );\n}\nfunction isMismatchAllowedByVNode({ props }) {\n const allowedAttr = props && props[allowMismatchAttr];\n return typeof allowedAttr === \"string\" && isMismatchAllowedByAttr(allowedAttr, 1 /* CHILDREN */);\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n const wasConnected = el.isConnected;\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n if (!el.parentNode || wasConnected && !el.isConnected) return;\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n let timeoutTimer;\n let delayTimer;\n onUnmounted(() => {\n if (timeoutTimer != null) clearTimeout(timeoutTimer);\n if (delayTimer != null) clearTimeout(delayTimer);\n });\n if (delay) {\n delayTimer = setTimeout(() => {\n if (instance.isUnmounted) return;\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n timeoutTimer = setTimeout(() => {\n if (instance.isUnmounted) return;\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n if (instance.isUnmounted) return;\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n if (instance.isUnmounted) {\n pendingRequest = null;\n return;\n }\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createInnerComp(\n loadingComponent,\n instance\n );\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type\n );\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && (!Number.isInteger(source) || source < 0)) {\n warn$1(\n `The v-for range expects a positive integer value but got ${source}.`\n );\n ret = [];\n } else {\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted, branchKey) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const slotProps = branchKey != null && props.key == null ? extend({}, props, { key: branchKey }) : props;\n const hasProps = Object.keys(slotProps).length > 0;\n if (name !== \"default\") slotProps.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", slotProps, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n const prevStackSize = blockStack.length;\n openBlock();\n let rendered;\n try {\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || branchKey || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n } catch (err) {\n for (let i = blockStack.length; i > prevStackSize; i--) closeBlock();\n throw err;\n } finally {\n if (slot && slot._c) {\n slot._d = true;\n }\n }\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (hasOwn(props, key)) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n } else if (hasOwn(instance.props, key)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === \"$\" && key.slice(1) in instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n );\n return false;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n } else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({\n _: { data, setupState, accessCache, ctx, appContext, props, type }\n }, key) {\n let cssModules;\n return !!(accessCache[key] || __VUE_OPTIONS_API__ && data !== EMPTY_OBJ && key[0] !== \"$\" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n target._.accessCache[key] = 0;\n } else if (hasOwn(descriptor, \"value\")) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn$1(\n `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n );\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== \"_\" && !isGloballyAllowed(key);\n if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} should not start with _ which is a reserved prefix for Vue internals.`\n );\n }\n return has;\n }\n});\nfunction createDevRenderContext(instance) {\n const target = {};\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n Object.keys(publicPropertiesMap).forEach((key) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n const {\n ctx,\n propsOptions: [propsOptions]\n } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach((key) => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach((key) => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn$1(\n `setup() return property ${JSON.stringify(\n key\n )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n );\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nconst warnRuntimeUsage = (method) => warn$1(\n `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\nfunction defineEmits() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\nfunction defineExpose(exposed) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\nfunction defineOptions(options) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineOptions`);\n }\n}\nfunction defineSlots() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineSlots`);\n }\n return null;\n}\nfunction defineModel() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(\"defineModel\");\n }\n}\nfunction withDefaults(props, defaults) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext(\"useSlots\").slots;\n}\nfunction useAttrs() {\n return getContext(\"useAttrs\").attrs;\n}\nfunction getContext(calledFunctionName) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`${calledFunctionName}() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n return isArray(props) ? props.reduce(\n (normalized, p) => (normalized[p] = null, normalized),\n {}\n ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n const props = normalizePropsOrEmits(raw);\n for (const key in defaults) {\n if (key.startsWith(\"__skip\")) continue;\n let opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n opt = props[key] = { type: opt, default: defaults[key] };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n opt = props[key] = { default: defaults[key] };\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`props default key \"${key}\" has no corresponding declaration.`);\n }\n if (opt && defaults[`__skip_${key}`]) {\n opt.skipFactory = true;\n }\n }\n return props;\n}\nfunction mergeModels(a, b) {\n if (!a || !b) return a || b;\n if (isArray(a) && isArray(b)) return a.concat(b);\n return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n const inSSRSetup = isInSSRComponentSetup;\n if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n warn$1(\n `withAsyncContext called without active current instance. This is likely a bug.`\n );\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (inSSRSetup) {\n setInSSRSetupState(false);\n }\n const restore = () => {\n setCurrentInstance(ctx);\n if (inSSRSetup) {\n setInSSRSetupState(true);\n }\n };\n const cleanup = () => {\n if (getCurrentInstance() !== ctx) ctx.scope.off();\n unsetCurrentInstance();\n if (inSSRSetup) {\n setInSSRSetupState(false);\n }\n };\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch((e) => {\n restore();\n Promise.resolve().then(() => Promise.resolve().then(cleanup));\n throw e;\n });\n }\n return [\n awaitable,\n () => {\n restore();\n Promise.resolve().then(cleanup);\n }\n ];\n}\n\nfunction createDuplicateChecker() {\n const cache = /* @__PURE__ */ Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn$1(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n } else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n shouldCacheAccess = false;\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\");\n }\n const {\n // state\n data: dataOptions,\n computed: computedOptions,\n methods,\n watch: watchOptions,\n provide: provideOptions,\n inject: injectOptions,\n // lifecycle\n created,\n beforeMount,\n mounted,\n beforeUpdate,\n updated,\n activated,\n deactivated,\n beforeDestroy,\n beforeUnmount,\n destroyed,\n unmounted,\n render,\n renderTracked,\n renderTriggered,\n errorCaptured,\n serverPrefetch,\n // public API\n expose,\n inheritAttrs,\n // assets\n components,\n directives,\n filters\n } = options;\n const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\n }\n }\n }\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n );\n }\n }\n }\n if (dataOptions) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n warn$1(\n `The data option must be a function. Plain object usage is no longer supported.`\n );\n }\n const data = dataOptions.call(publicThis, publicThis);\n if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n warn$1(\n `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n );\n }\n if (!isObject(data)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`data() should return an object.`);\n } else {\n instance.data = reactive(data);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* DATA */, key);\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n warn$1(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$1(\n `Write operation failed: computed property \"${key}\" is readonly.`\n );\n } : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: (v) => c.value = v\n });\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n Reflect.ownKeys(provides).forEach((key) => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\");\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach((_hook) => register(_hook.bind(publicThis)));\n } else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach((key) => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: (val) => publicThis[key] = val,\n enumerable: true\n });\n });\n } else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n if (components) instance.components = components;\n if (directives) instance.directives = directives;\n if (serverPrefetch) {\n markAsyncBoundary(instance);\n }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if (\"default\" in opt) {\n injected = inject(\n opt.from || key,\n opt.default,\n true\n );\n } else {\n injected = inject(opt.from || key);\n }\n } else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: (v) => injected.value = v\n });\n } else {\n ctx[key] = injected;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(\n isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n instance,\n type\n );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n {\n watch(getter, handler);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n } else if (isFunction(raw)) {\n {\n watch(getter, raw.bind(publicThis));\n }\n } else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n } else {\n const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch option: \"${key}\"`, raw);\n }\n}\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const {\n mixins: globalMixins,\n optionsCache: cache,\n config: { optionMergeStrategies }\n } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n } else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n } else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(\n (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n );\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach(\n (m) => mergeOptions(to, m, strats, true)\n );\n }\n for (const key in from) {\n if (asMixin && key === \"expose\") {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n );\n } else {\n const strat = internalOptionMergeStrats[key] || strats && strats[key];\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeEmitsOrPropsOptions,\n emits: mergeEmitsOrPropsOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(\n isFunction(to) ? to.call(this, this) : to,\n isFunction(from) ? from.call(this, this) : from\n );\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n if (to) {\n if (isArray(to) && isArray(from)) {\n return [.../* @__PURE__ */ new Set([...to, ...from])];\n }\n return extend(\n /* @__PURE__ */ Object.create(null),\n normalizePropsOrEmits(to),\n normalizePropsOrEmits(from != null ? from : {})\n );\n } else {\n return from;\n }\n}\nfunction mergeWatchOptions(to, from) {\n if (!to) return from;\n if (!from) return to;\n const merged = extend(/* @__PURE__ */ Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const pluginCleanupFns = [];\n let isMounted = false;\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, namespace) {\n if (!isMounted) {\n if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n warn$1(\n `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n );\n }\n const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n vnode.appContext = context;\n if (namespace === true) {\n namespace = \"svg\";\n } else if (namespace === false) {\n namespace = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n context.reload = () => {\n const cloned = cloneVNode(vnode);\n cloned.el = null;\n render(cloned, rootContainer, namespace);\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n } else {\n render(vnode, rootContainer, namespace);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getComponentPublicInstance(vnode.component);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n );\n }\n },\n onUnmount(cleanupFn) {\n if (!!(process.env.NODE_ENV !== \"production\") && typeof cleanupFn !== \"function\") {\n warn$1(\n `Expected function as first argument to app.onUnmount(), but got ${typeof cleanupFn}`\n );\n }\n pluginCleanupFns.push(cleanupFn);\n },\n unmount() {\n if (isMounted) {\n callWithAsyncErrorHandling(\n pluginCleanupFns,\n app._instance,\n 16\n );\n render(null, app._container);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n if (hasOwn(context.provides, key)) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n } else {\n warn$1(\n `App already provides property with key \"${String(key)}\" inherited from its parent element. It will be overwritten with the new value.`\n );\n }\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useModel() called without active instance.`);\n return ref();\n }\n const camelizedName = camelize(name);\n if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][camelizedName]) {\n warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n return ref();\n }\n const hyphenatedName = hyphenate(name);\n const modifiers = getModelModifiers(props, camelizedName);\n const res = customRef((track, trigger) => {\n let localValue;\n let prevSetValue = EMPTY_OBJ;\n let prevEmittedValue;\n watchSyncEffect(() => {\n const propValue = props[camelizedName];\n if (hasChanged(localValue, propValue)) {\n localValue = propValue;\n trigger();\n }\n });\n return {\n get() {\n track();\n return options.get ? options.get(localValue) : localValue;\n },\n set(value) {\n const emittedValue = options.set ? options.set(value) : value;\n if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n return;\n }\n const rawProps = i.vnode.props;\n const hasVModel = !!(rawProps && // check if parent has passed v-model\n (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps));\n if (!hasVModel) {\n localValue = value;\n trigger();\n }\n i.emit(`update:${name}`, emittedValue);\n if (hasChanged(value, prevSetValue) && (hasChanged(value, emittedValue) && !hasChanged(emittedValue, prevEmittedValue) || // #13524: browsers differ in when they flush microtasks between\n // event listeners. If a v-model listener emits an intermediate value\n // and a following listener restores the model to its previous prop\n // value before parent updates are flushed, the parent render can be\n // deduped as having no prop change. Force a local update so DOM state\n // such as an input's value is synchronized back to the current model.\n hasVModel && prevSetValue !== EMPTY_OBJ && !hasChanged(emittedValue, localValue))) {\n trigger();\n }\n prevSetValue = value;\n prevEmittedValue = emittedValue;\n }\n };\n });\n res[Symbol.iterator] = () => {\n let i2 = 0;\n return {\n next() {\n if (i2 < 2) {\n return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n } else {\n return { done: true };\n }\n }\n };\n };\n return res;\n}\nconst getModelModifiers = (props, modelName) => {\n return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted) return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(camelize(event)) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(event))}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n if (modifiers) {\n if (modifiers.trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (modifiers.number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nconst mixinEmitsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinEmitsCache : appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2);\n key = key === \"Once\" ? key : key.replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside <Transition> renders non-element root node that cannot be animated.`\n );\n }\n setTransitionHooks(root, vnode.transition);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction hasPropValueChanged(nextProps, prevProps, key) {\n const nextProp = nextProps[key];\n const prevProp = prevProps[key];\n if (key === \"style\" && isObject(nextProp) && isObject(prevProp)) {\n return !looseEqual(nextProp, prevProp);\n }\n return nextProp !== prevProp;\n}\nfunction updateHOCHostEl({ vnode, parent, suspense }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.suspense.vnode.el = root.el = el;\n vnode = root;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n if (suspense && suspense.activeBranch === vnode) {\n suspense.vnode.el = el;\n }\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n const props = {};\n const attrs = createInternalObject();\n instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = void 0;\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n instance.props = isSSR ? props : shallowReactive(props);\n } else {\n if (!instance.type.props) {\n instance.props = attrs;\n } else {\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId) return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const {\n props,\n attrs,\n vnode: { patchFlag }\n } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n ) {\n if (patchFlag & 8) {\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n const value = rawProps[key];\n if (options) {\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n } else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(\n options,\n rawCurrentProps,\n camelizedKey,\n value,\n instance,\n false\n );\n }\n } else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n } else {\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps || // for camelCase\n !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n if (options) {\n if (rawPrevProps && // for camelCase\n (rawPrevProps[key] !== void 0 || // for kebab-case\n rawPrevProps[kebabKey] !== void 0)) {\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n void 0,\n instance,\n true\n );\n }\n } else {\n delete props[key];\n }\n }\n }\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps || !hasOwn(rawProps, key) && true) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (hasAttrsChanged) {\n trigger(instance.attrs, \"set\", \"\");\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n let camelKey;\n if (options && hasOwn(options, camelKey = camelize(key))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n } else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n } else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n castValues[key],\n instance,\n !hasOwn(castValues, key)\n );\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, \"default\");\n if (hasDefault && value === void 0) {\n const defaultValue = opt.default;\n if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n } else {\n const reset = setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(\n null,\n props\n );\n reset();\n }\n } else {\n value = defaultValue;\n }\n if (instance.ce) {\n instance.ce._setProp(key, value);\n }\n }\n if (opt[0 /* shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw2) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n extend(normalized, props);\n if (keys) needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n warn$1(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n } else if (raw) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n warn$1(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n const propType = prop.type;\n let shouldCast = false;\n let shouldCastTrue = true;\n if (isArray(propType)) {\n for (let index = 0; index < propType.length; ++index) {\n const type = propType[index];\n const typeName = isFunction(type) && type.name;\n if (typeName === \"Boolean\") {\n shouldCast = true;\n break;\n } else if (typeName === \"String\") {\n shouldCastTrue = false;\n }\n }\n } else {\n shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n }\n prop[0 /* shouldCast */] = shouldCast;\n prop[1 /* shouldCastTrue */] = shouldCastTrue;\n if (shouldCast || hasOwn(prop, \"default\")) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== \"$\" && !isReservedProp(key)) {\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\nfunction getType(ctor) {\n if (ctor === null) {\n return \"null\";\n }\n if (typeof ctor === \"function\") {\n return ctor.name || \"\";\n } else if (typeof ctor === \"object\") {\n const name = ctor.constructor && ctor.constructor.name;\n return name || \"\";\n }\n return \"\";\n}\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n const camelizePropsKey = Object.keys(rawProps).map((key) => camelize(key));\n for (const key in options) {\n let opt = options[key];\n if (opt == null) continue;\n validateProp(\n key,\n resolvedValues[key],\n opt,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n !camelizePropsKey.includes(key)\n );\n }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n const { type, required, validator, skipCheck } = prop;\n if (required && isAbsent) {\n warn$1('Missing required prop: \"' + name + '\"');\n return;\n }\n if (value == null && !required) {\n return;\n }\n if (type != null && type !== true && !skipCheck) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || \"\");\n isValid = valid;\n }\n if (!isValid) {\n warn$1(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n if (validator && !validator(value, props)) {\n warn$1('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (expectedType === \"null\") {\n valid = value === null;\n } else if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n if (expectedTypes.length === 0) {\n return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n }\n let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n if (expectedTypes.length === 1 && isExplicable(expectedType) && isCoercible(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (isSymbol(value)) {\n return value.toString();\n } else if (type === \"String\") {\n return `\"${value}\"`;\n } else if (type === \"Number\") {\n return `${Number(value)}`;\n } else {\n return `${value}`;\n }\n}\nfunction isExplicable(type) {\n const explicitTypes = [\"string\", \"number\", \"boolean\"];\n return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isCoercible(...args) {\n return args.every((elem) => {\n const value = elem.toLowerCase();\n return value !== \"boolean\" && value !== \"symbol\";\n });\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if (!!(process.env.NODE_ENV !== \"production\") && currentInstance && !(ctx === null && currentRenderingInstance) && !(ctx && ctx.root !== currentInstance.root)) {\n warn$1(\n `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n );\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key)) continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n } else if (value != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n warn$1(\n `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n warn$1(\n `Non-function value encountered for default slot. Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n for (const key in children) {\n if (optimized || !isInternalKey(key)) {\n slots[key] = children[key];\n }\n }\n};\nconst initSlots = (instance, children, optimized) => {\n const slots = instance.slots = createInternalObject();\n if (instance.vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n assignSlots(slots, children, optimized);\n if (optimized) {\n def(slots, \"_\", type, true);\n }\n } else {\n normalizeObjectSlots(children, slots);\n }\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n }\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n assignSlots(slots, children, optimized);\n trigger(instance, \"set\", \"$slots\");\n } else if (optimized && type === 1) {\n needDeletionCheck = false;\n } else {\n assignSlots(slots, children, optimized);\n }\n } else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n delete slots[key];\n }\n }\n }\n};\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n const measureName = `<${formatComponentName(instance, instance.type)}> ${type}`;\n perf.mark(endTag);\n perf.measure(measureName, startTag, endTag);\n perf.clearMeasures(measureName);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== void 0) {\n return supported;\n }\n if (typeof window !== \"undefined\" && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n return supported;\n}\n\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = false;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(\n `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n );\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const {\n insert: hostInsert,\n remove: hostRemove,\n patchProp: hostPatchProp,\n createElement: hostCreateElement,\n createText: hostCreateText,\n createComment: hostCreateComment,\n setText: hostSetText,\n setElementText: hostSetElementText,\n parentNode: hostParentNode,\n nextSibling: hostNextSibling,\n setScopeId: hostSetScopeId = NOOP,\n insertStaticContent: hostInsertStaticContent\n } = options;\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, namespace);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n patchStaticNode(n1, n2, container, namespace);\n }\n break;\n case Fragment:\n processFragment(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n break;\n default:\n if (shapeFlag & 1) {\n processElement(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 6) {\n processComponent(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 64) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (shapeFlag & 128) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid VNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n } else if (ref == null && n1 && n1.ref != null) {\n setRef(n1.ref, null, parentSuspense, n1, true);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateText(n2.children),\n container,\n anchor\n );\n } else {\n const el = n2.el = n1.el;\n if (n2.children !== n1.children) {\n hostSetText(el, n2.children);\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateComment(n2.children || \"\"),\n container,\n anchor\n );\n } else {\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, namespace) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace,\n n2.el,\n n2.anchor\n );\n };\n const patchStaticNode = (n1, n2, container, namespace) => {\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace\n );\n } else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n if (n2.type === \"svg\") {\n namespace = \"svg\";\n } else if (n2.type === \"math\") {\n namespace = \"mathml\";\n }\n if (n1 == null) {\n mountElement(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n const customElement = n1.el && n1.el._isVueCE ? n1.el : null;\n try {\n if (customElement) {\n customElement._beginPatch();\n }\n patchElement(\n n1,\n n2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } finally {\n if (customElement) {\n customElement._endPatch();\n }\n }\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(\n vnode.type,\n namespace,\n props && props.is,\n props\n );\n if (shapeFlag & 8) {\n hostSetElementText(el, vnode.children);\n } else if (shapeFlag & 16) {\n mountChildren(\n vnode.children,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(vnode, namespace),\n slotScopeIds,\n optimized\n );\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if (props) {\n for (const key in props) {\n if (key !== \"value\" && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n if (\"value\" in props) {\n hostPatchProp(el, \"value\", null, props.value, namespace);\n }\n if (vnodeHook = props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(el, \"__vnode\", vnode, true);\n def(el, \"__vueParentComponent\", parentComponent, true);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n const needCallTransitionHooks = needTransition(parentSuspense, transition);\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n const isHmr = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating;\n queuePostRenderEffect(() => {\n let prev;\n if (!!(process.env.NODE_ENV !== \"production\")) prev = setHmrUpdating(isHmr);\n try {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\")) setHmrUpdating(prev);\n }\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n subTree = filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n const parentVNode = parentComponent.vnode;\n setScopeId(\n el,\n parentVNode,\n parentVNode.scopeId,\n parentVNode.slotScopeIds,\n parentComponent.parent\n );\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n patch(\n null,\n child,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const el = n2.el = n1.el;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n el.__vnode = n2;\n }\n let { patchFlag, dynamicChildren, dirs } = n2;\n patchFlag |= n1.patchFlag & 16;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n parentComponent && toggleRecurse(parentComponent, false);\n if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if (\n // HMR updated, force full diff\n !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating || // #6385 the old vnode may be a user-wrapped non-isomorphic block\n // Force full diff when block metadata is unstable.\n dynamicChildren && (!n1.dynamicChildren || n1.dynamicChildren.length !== dynamicChildren.length)\n ) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n hostSetElementText(el, \"\");\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n el,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n }\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds,\n false\n );\n }\n if (patchFlag > 0) {\n if (patchFlag & 16) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n } else {\n if (patchFlag & 2) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, \"class\", null, newProps.class, namespace);\n }\n }\n if (patchFlag & 4) {\n hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n }\n if (patchFlag & 8) {\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n if (next !== prev || key === \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n }\n }\n if (patchFlag & 1) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n } else if (!optimized && dynamicChildren == null) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n }, parentSuspense);\n }\n };\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n const container = (\n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer\n )\n );\n patch(\n oldVNode,\n newVNode,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n true\n );\n }\n };\n const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(\n el,\n key,\n oldProps[key],\n null,\n namespace,\n parentComponent\n );\n }\n }\n }\n for (const key in newProps) {\n if (isReservedProp(key)) continue;\n const next = newProps[key];\n const prev = oldProps[key];\n if (next !== prev && key !== \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n if (\"value\" in newProps) {\n hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048)) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n mountChildren(\n // #10007\n // such fragment like `<></>` will be compiled into\n // a fragment which doesn't have a children.\n // In this case fallback to an empty array\n n2.children || [],\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n container,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n } else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null || parentComponent && n2 === parentComponent.subTree\n ) {\n traverseStaticChildren(\n n1,\n n2,\n true\n /* shallow */\n );\n }\n } else {\n patchChildren(\n n1,\n n2,\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512) {\n parentComponent.ctx.activate(\n n2,\n container,\n anchor,\n namespace,\n optimized\n );\n } else {\n mountComponent(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n optimized\n );\n }\n } else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(\n initialVNode,\n parentComponent,\n parentSuspense\n ));\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance, false, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `init`);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) initialVNode.el = null;\n if (instance.asyncDep) {\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n if (!initialVNode.el) {\n const placeholder = instance.subTree = createVNode(Comment);\n processCommentNode(null, placeholder, container, anchor);\n initialVNode.placeholder = placeholder.el;\n }\n } else {\n setupRenderEffect(\n instance,\n initialVNode,\n container,\n anchor,\n parentSuspense,\n namespace,\n optimized\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = n2.component = n1.component;\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep && !instance.asyncResolved) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n return;\n } else {\n instance.next = n2;\n instance.update();\n }\n } else {\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent, root, type } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n if (bm) {\n invokeArrayFns(bm);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n const hydrateSubTree = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(\n el,\n instance.subTree,\n instance,\n parentSuspense,\n null\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode && type.__asyncHydrate) {\n type.__asyncHydrate(\n el,\n instance,\n hydrateSubTree\n );\n } else {\n hydrateSubTree();\n }\n } else {\n if (root.ce && root.ce._hasShadowRoot()) {\n root.ce._injectChildStyle(\n type,\n instance.parent ? instance.parent.type : void 0\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const subTree = instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n null,\n subTree,\n container,\n anchor,\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n parentSuspense\n );\n }\n if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n initialVNode = container = anchor = null;\n } else {\n let { next, bu, u, parent, vnode } = instance;\n {\n const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n if (nonHydratedAsyncRoot) {\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n nonHydratedAsyncRoot.asyncDep.then(() => {\n queuePostRenderEffect(() => {\n if (!instance.isUnmounted) update();\n }, parentSuspense);\n });\n return;\n }\n }\n let originNext = next;\n let vnodeHook;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(next || instance.vnode);\n }\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n } else {\n next = vnode;\n }\n if (bu) {\n invokeArrayFns(bu);\n }\n if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n prevTree,\n nextTree,\n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el),\n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree),\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n updateHOCHostEl(instance, nextTree.el);\n }\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n parentSuspense\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n }\n };\n instance.scope.on();\n const effect = instance.effect = new ReactiveEffect(componentUpdateFn);\n instance.scope.off();\n const update = instance.update = effect.run.bind(effect);\n const job = instance.job = effect.runIfDirty.bind(effect);\n job.i = instance;\n job.id = instance.uid;\n effect.scheduler = () => queueJob(job);\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n flushPreFlushCbs(instance);\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n if (patchFlag > 0) {\n if (patchFlag & 128) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n } else if (patchFlag & 256) {\n patchUnkeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n }\n }\n if (shapeFlag & 8) {\n if (prevShapeFlag & 16) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n } else {\n if (prevShapeFlag & 16) {\n if (shapeFlag & 16) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n } else {\n if (prevShapeFlag & 8) {\n hostSetElementText(container, \"\");\n }\n if (shapeFlag & 16) {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n patch(\n c1[i],\n nextChild,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n if (oldLength > newLength) {\n unmountChildren(\n c1,\n parentComponent,\n parentSuspense,\n true,\n false,\n commonLength\n );\n } else {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n commonLength\n );\n }\n };\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1;\n let e2 = l2 - 1;\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n i++;\n }\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n e1--;\n e2--;\n }\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(\n null,\n c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n i++;\n }\n }\n } else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n } else {\n const s1 = i;\n const s2 = i;\n const keyToNewIndexMap = /* @__PURE__ */ new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (nextChild.key != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n warn$1(\n `Duplicate keys found during update:`,\n JSON.stringify(nextChild.key),\n `Make sure keys are unique.`\n );\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n let maxNewIndexSoFar = 0;\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n } else {\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === void 0) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n } else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patch(\n prevChild,\n c2[newIndex],\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n patched++;\n }\n }\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchorVNode = c2[nextIndex + 1];\n const anchor = nextIndex + 1 < l2 ? (\n // #13559, #14173 fallback to el placeholder for unresolved async component\n anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode)\n ) : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n patch(\n null,\n nextChild,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2);\n } else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n if (needTransition2) {\n if (moveType === 0) {\n if (transition.persisted && !el[leaveCbKey]) {\n hostInsert(el, container, anchor);\n } else {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n }\n } else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove2 = () => {\n if (vnode.ctx.isUnmounted) {\n hostRemove(el);\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const performLeave = () => {\n const wasLeaving = el._isLeaving || !!el[leaveCbKey];\n if (el._isLeaving) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n if (transition.persisted && !wasLeaving) {\n remove2();\n } else {\n leave(el, () => {\n remove2();\n afterLeave && afterLeave();\n });\n }\n };\n if (delayLeave) {\n delayLeave(el, remove2, performLeave);\n } else {\n performLeave();\n }\n }\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const {\n type,\n props,\n ref,\n children,\n dynamicChildren,\n shapeFlag,\n patchFlag,\n dirs,\n cacheIndex,\n memo\n } = vnode;\n if (patchFlag === -2) {\n optimized = false;\n }\n if (ref != null) {\n pauseTracking();\n setRef(ref, null, parentSuspense, vnode, true);\n resetTracking();\n }\n if (cacheIndex != null) {\n parentComponent.renderCache[cacheIndex] = void 0;\n }\n if (shapeFlag & 256) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n } else {\n if (shapeFlag & 128) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n }\n if (shapeFlag & 64) {\n vnode.type.remove(\n vnode,\n parentComponent,\n parentSuspense,\n internals,\n doRemove\n );\n } else if (dynamicChildren && // #5154\n // when v-once is used inside a block, setBlockTracking(-1) marks the\n // parent block with hasOnce: true\n // so that it doesn't take the fast path during unmount - otherwise\n // components nested in v-once are never unmounted.\n !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n unmountChildren(\n dynamicChildren,\n parentComponent,\n parentSuspense,\n false,\n true\n );\n } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n const shouldInvalidateMemo = memo != null && cacheIndex == null;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs || shouldInvalidateMemo) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n if (shouldInvalidateMemo) {\n vnode.el = null;\n }\n }, parentSuspense);\n }\n };\n const remove = (vnode) => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n vnode.children.forEach((child) => {\n if (child.type === Comment) {\n hostRemove(child.el);\n } else {\n remove(child);\n }\n });\n } else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n } else {\n performLeave();\n }\n } else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, job, subTree, um, m, a } = instance;\n invalidateMount(m);\n invalidateMount(a);\n if (bum) {\n invokeArrayFns(bum);\n }\n scope.stop();\n if (job) {\n job.flags |= 8;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = (vnode) => {\n if (vnode.shapeFlag & 6) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128) {\n return vnode.suspense.next();\n }\n const el = hostNextSibling(vnode.anchor || vnode.el);\n const teleportEnd = el && el[TeleportEndKey];\n return teleportEnd ? hostNextSibling(teleportEnd) : el;\n };\n let isFlushing = false;\n const render = (vnode, container, namespace) => {\n let instance;\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n instance = container._vnode.component;\n }\n } else {\n patch(\n container._vnode || null,\n vnode,\n container,\n null,\n null,\n null,\n namespace\n );\n }\n container._vnode = vnode;\n if (!isFlushing) {\n isFlushing = true;\n flushPreFlushCbs(instance);\n flushPostFlushCbs();\n isFlushing = false;\n }\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(\n internals\n );\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n if (allowed) {\n effect.flags |= 32;\n job.flags |= 4;\n } else {\n effect.flags &= -33;\n job.flags &= -5;\n }\n}\nfunction needTransition(parentSuspense, transition) {\n return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow && c2.patchFlag !== -2)\n traverseStaticChildren(c1, c2);\n }\n if (c2.type === Text) {\n if (c2.patchFlag === -1) {\n c2 = ch2[i] = cloneIfMounted(c2);\n }\n c2.el = c1.el;\n }\n if (c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n c2.el && (c2.el.__vnode = c2);\n }\n }\n }\n}\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = u + v >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n const subComponent = instance.subTree.component;\n if (subComponent) {\n if (subComponent.asyncDep && !subComponent.asyncResolved) {\n return subComponent;\n } else {\n return locateNonHydratedAsyncRoot(subComponent);\n }\n }\n}\nfunction invalidateMount(hooks) {\n if (hooks) {\n for (let i = 0; i < hooks.length; i++)\n hooks[i].flags |= 8;\n }\n}\nfunction resolveAsyncComponentPlaceholder(anchorVnode) {\n if (anchorVnode.placeholder) {\n return anchorVnode.placeholder;\n }\n const instance = anchorVnode.component;\n if (instance) {\n return resolveAsyncComponentPlaceholder(instance.subTree);\n }\n return null;\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(pendingBranch, newBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n `<Suspense> is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n isFallbackMountPending: false,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2,\n isInFallback\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n let hasUpdatedAnchor = false;\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor && !hasUpdatedAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n if (isInFallback && vnode2.ssFallback) {\n vnode2.ssFallback.el = null;\n }\n }\n };\n }\n if (activeBranch && !suspense.isFallbackMountPending) {\n if (parentNode(activeBranch.el) === container2) {\n anchor = next(activeBranch);\n hasUpdatedAnchor = true;\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n if (!delayEnter && isInFallback && vnode2.ssFallback) {\n queuePostRenderEffect(() => vnode2.ssFallback.el = null, suspense);\n }\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n suspense.isFallbackMountPending = false;\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n suspense.isFallbackMountPending = false;\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n suspense.isFallbackMountPending = true;\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect, optimized2) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n unsetCurrentInstance();\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized2\n );\n if (placeholder) {\n vnode2.placeholder = null;\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = /* @__PURE__ */ Symbol.for(\"v-fgt\");\nconst Text = /* @__PURE__ */ Symbol.for(\"v-txt\");\nconst Comment = /* @__PURE__ */ Symbol.for(\"v-cmt\");\nconst Static = /* @__PURE__ */ Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n isBlockTreeEnabled += value;\n if (value < 0 && currentBlock && inVOnce) {\n currentBlock.hasOnce = true;\n }\n}\nfunction setupBlock(vnode) {\n vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n closeBlock();\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(\n createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n true\n )\n );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(\n createVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n true\n )\n );\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && n1.component) {\n const dirtyInstances = hmrDirtyComponents.get(n2.type);\n if (dirtyInstances && dirtyInstances.has(n1.component)) {\n n1.shapeFlag &= -257;\n n2.shapeFlag &= -513;\n return false;\n }\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(\n ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n );\n};\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n ref,\n ref_key,\n ref_for\n}) => {\n if (typeof ref === \"number\") {\n ref = \"\" + ref;\n }\n return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetStart: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n if (shapeFlag & 128) {\n type.normalize(vnode);\n }\n } else if (children) {\n vnode.shapeFlag |= isString(children) ? 8 : 16;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n !isBlockNode && // has current parent block\n currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n warn$1(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n const cloned = cloneVNode(\n type,\n props,\n true\n /* mergeRef: true */\n );\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n } else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag = -2;\n return cloned;\n }\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n if (props) {\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n type = toRaw(type);\n warn$1(\n `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n `\nComponent that was made reactive: `,\n type\n );\n }\n return createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n isBlockNode,\n true\n );\n}\nfunction guardReactiveProps(props) {\n if (!props) return null;\n return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n const { props, ref, patchFlag, children, transition } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref ? (\n // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n ) : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n target: vnode.target,\n targetStart: vnode.targetStart,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n placeholder: vnode.placeholder,\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx,\n ce: vnode.ce\n };\n if (transition && cloneTransition) {\n setTransitionHooks(\n cloned,\n transition.clone(cloned)\n );\n }\n return cloned;\n}\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === \"boolean\") {\n return createVNode(Comment);\n } else if (isArray(child)) {\n return createVNode(\n Fragment,\n null,\n // #3666, avoid reference pollution when reusing vnode\n child.slice()\n );\n } else if (isVNode(child)) {\n return cloneIfMounted(child);\n } else {\n return createVNode(Text, null, String(child));\n }\n}\nfunction cloneIfMounted(child) {\n return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n } else if (isArray(children)) {\n type = 16;\n } else if (typeof children === \"object\") {\n if (shapeFlag & (1 | 64)) {\n const slot = children.default;\n if (slot) {\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n } else {\n type = 32;\n const slotFlag = children._;\n if (!slotFlag && !isInternalObject(children)) {\n children._ctx = currentRenderingInstance;\n } else if (slotFlag === 3 && currentRenderingInstance) {\n if (currentRenderingInstance.slots._ === 1) {\n children._ = 1;\n } else {\n children._ = 2;\n vnode.patchFlag |= 1024;\n }\n }\n }\n } else if (isFunction(children)) {\n if (shapeFlag & (1 | 64)) {\n normalizeChildren(vnode, { default: children });\n return;\n }\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32;\n } else {\n children = String(children);\n if (shapeFlag & 64) {\n type = 16;\n children = [createTextVNode(children)];\n } else {\n type = 8;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === \"class\") {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n } else if (key === \"style\") {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n } else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing ? [].concat(existing, incoming) : incoming;\n } else if (incoming == null && existing == null && // mergeProps({ 'onUpdate:modelValue': undefined }) should not retain\n // the model listener.\n !isModelListener(key)) {\n ret[key] = incoming;\n }\n } else if (key !== \"\") {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n // to be immediately set\n next: null,\n subTree: null,\n // will be set synchronously right after creation\n effect: null,\n update: null,\n // will be set synchronously right after creation\n job: null,\n scope: new EffectScope(\n true\n /* detached */\n ),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n ids: parent ? parent.ids : [\"\", 0, 0],\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n // to be set immediately\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ctx = createDevRenderContext(instance);\n } else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit.bind(null, instance);\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n const g = getGlobalThis();\n const registerGlobalSetter = (key, setter) => {\n let setters;\n if (!(setters = g[key])) setters = g[key] = [];\n setters.push(setter);\n return (v) => {\n if (setters.length > 1) setters.forEach((set) => set(v));\n else setters[0](v);\n };\n };\n internalSetCurrentInstance = registerGlobalSetter(\n `__VUE_INSTANCE_SETTERS__`,\n (v) => currentInstance = v\n );\n setInSSRSetupState = registerGlobalSetter(\n `__VUE_SSR_SETTERS__`,\n (v) => isInSSRComponentSetup = v\n );\n}\nconst setCurrentInstance = (instance) => {\n const prev = currentInstance;\n internalSetCurrentInstance(instance);\n instance.scope.on();\n return () => {\n instance.scope.off();\n internalSetCurrentInstance(prev);\n };\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n if (isBuiltInTag(name) || isNativeTag(name)) {\n warn$1(\n \"Do not use built-in or reserved HTML elements as component id: \" + name\n );\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n isSSR && setInSSRSetupState(isSSR);\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children, optimized || isSSR);\n const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n isSSR && setInSSRSetupState(false);\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n const Component = instance.type;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn$1(\n `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n );\n }\n }\n instance.accessCache = /* @__PURE__ */ Object.create(null);\n instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposePropsOnRenderContext(instance);\n }\n const { setup } = Component;\n if (setup) {\n pauseTracking();\n const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n const reset = setCurrentInstance(instance);\n const setupResult = callWithErrorHandling(\n setup,\n instance,\n 0,\n [\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n setupContext\n ]\n );\n const isAsyncSetup = isPromise(setupResult);\n resetTracking();\n reset();\n if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n markAsyncBoundary(instance);\n }\n if (isAsyncSetup) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n return setupResult.then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n }).catch((e) => {\n handleError(e, instance, 0);\n });\n } else {\n instance.asyncDep = setupResult;\n if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n const name = formatComponentName(instance, Component);\n warn$1(\n `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n );\n }\n }\n } else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n } else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n if (instance.type.__ssrInlineRender) {\n instance.ssrRender = setupResult;\n } else {\n instance.render = setupResult;\n }\n } else if (isObject(setupResult)) {\n if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n warn$1(\n `setup() should not return VNodes directly - return a render function instead.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposeSetupStateOnRenderContext(instance);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n warn$1(\n `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n );\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = (i) => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n if (!instance.render) {\n if (!isSSR && compile && !Component.render) {\n const template = Component.template || __VUE_OPTIONS_API__ && resolveMergedOptions(instance).template;\n if (template) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(\n extend(\n {\n isCustomElement,\n delimiters\n },\n compilerOptions\n ),\n componentCompilerOptions\n );\n Component.render = compile(template, finalCompilerOptions);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = Component.render || NOOP;\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n if (__VUE_OPTIONS_API__ && true) {\n const reset = setCurrentInstance(instance);\n pauseTracking();\n try {\n applyOptions(instance);\n } finally {\n resetTracking();\n reset();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n if (!compile && Component.template) {\n warn$1(\n `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n } else {\n warn$1(`Component is missing template or render function: `, Component);\n }\n }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n get(target, key) {\n markAttrsAccessed();\n track(target, \"get\", \"\");\n return target[key];\n },\n set() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n }\n} : {\n get(target, key) {\n track(target, \"get\", \"\");\n return target[key];\n }\n};\nfunction getSlotsProxy(instance) {\n return new Proxy(instance.slots, {\n get(target, key) {\n track(instance, \"get\", \"$slots\");\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = (exposed) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (instance.exposed) {\n warn$1(`expose() should be called only once per setup().`);\n }\n if (exposed != null) {\n let exposedType = typeof exposed;\n if (exposedType === \"object\") {\n if (isArray(exposed)) {\n exposedType = \"array\";\n } else if (isRef(exposed)) {\n exposedType = \"ref\";\n }\n }\n if (exposedType !== \"object\") {\n warn$1(\n `expose() should be passed a plain object, received ${exposedType}.`\n );\n }\n }\n }\n instance.exposed = exposed || {};\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n let attrsProxy;\n let slotsProxy;\n return Object.freeze({\n get attrs() {\n return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n },\n get slots() {\n return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n } else {\n return {\n attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getComponentPublicInstance(instance) {\n if (instance.exposed) {\n return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n } else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n }));\n } else {\n return instance.proxy;\n }\n}\nconst classifyRE = /(?:^|[-_])\\w/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance) {\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(\n instance.parent.type.components\n ) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const i = getCurrentInstance();\n if (i && i.appContext.config.warnRecursiveComputed) {\n c._warnRecursive = true;\n }\n }\n return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n try {\n setBlockTracking(-1);\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n return createVNode(type, propsOrChildren);\n } else {\n return createVNode(type, null, propsOrChildren);\n }\n } else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n } else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n } finally {\n setBlockTracking(1);\n }\n}\n\nfunction initCustomFormatter() {\n if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n return;\n }\n const vueStyle = { style: \"color:#3ba776\" };\n const numberStyle = { style: \"color:#1677ff\" };\n const stringStyle = { style: \"color:#f5222d\" };\n const keywordStyle = { style: \"color:#eb2f96\" };\n const formatter = {\n __vue_custom_formatter: true,\n header(obj) {\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return [\"div\", vueStyle, `VueInstance`];\n } else if (isRef(obj)) {\n pauseTracking();\n const value = obj.value;\n resetTracking();\n return [\n \"div\",\n {},\n [\"span\", vueStyle, genRefFlag(obj)],\n \"<\",\n formatValue(value),\n `>`\n ];\n } else if (isReactive(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n \"<\",\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n } else if (isReadonly(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n \"<\",\n formatValue(obj),\n \">\"\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n \"div\",\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n }\n const computed = extractKeys(instance, \"computed\");\n if (computed) {\n blocks.push(createInstanceBlock(\"computed\", computed));\n }\n const injected = extractKeys(instance, \"inject\");\n if (injected) {\n blocks.push(createInstanceBlock(\"injected\", injected));\n }\n blocks.push([\n \"div\",\n {},\n [\n \"span\",\n {\n style: keywordStyle.style + \";opacity:0.66\"\n },\n \"$ (internal): \"\n ],\n [\"object\", { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return [\"span\", {}];\n }\n return [\n \"div\",\n { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n [\n \"div\",\n {\n style: \"color:#476582\"\n },\n type\n ],\n [\n \"div\",\n {\n style: \"padding-left:1.25em\"\n },\n ...Object.keys(target).map((key) => {\n return [\n \"div\",\n {},\n [\"span\", keywordStyle, key + \": \"],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === \"number\") {\n return [\"span\", numberStyle, v];\n } else if (typeof v === \"string\") {\n return [\"span\", stringStyle, JSON.stringify(v)];\n } else if (typeof v === \"boolean\") {\n return [\"span\", keywordStyle, v];\n } else if (isObject(v)) {\n return [\"object\", { object: asRaw ? toRaw(v) : v }];\n } else {\n return [\"span\", stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n } else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n ret.memo = memo.slice();\n ret.cacheIndex = index;\n return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\nconst version = \"3.5.40\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode: isVNode,\n normalizeVNode,\n getComponentPublicInstance,\n ensureValidVNode,\n pushWarningContext,\n popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useId, useModel, useSSRContext, useSlots, useTemplateRef, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","/**\n* @vue/runtime-dom v3.5.40\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { warn, BaseTransitionPropsValidators, h, BaseTransition, assertNumber, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, nextTick, unref, createVNode, defineComponent, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, createRenderer, isRuntimeOnly, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, normalizeCssVarValue, isString, hyphenate, capitalize, includeBooleanAttr, isSymbol, isSpecialBooleanAttr, isFunction, isOn, isModelListener, camelize as camelize$1, hasOwn, isPlainObject, EMPTY_OBJ, looseIndexOf, isSet, looseEqual, looseToNumber, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n createHTML: (val) => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: (child) => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: (text) => doc.createTextNode(text),\n createComment: (text) => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: (node) => node.parentNode,\n nextSibling: (node) => node.nextSibling,\n querySelector: (selector) => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(\n namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n );\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = /* @__PURE__ */ Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ extend(\n {},\n BaseTransitionPropsValidators,\n DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach((h2) => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = (hook) => {\n return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow(el);\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow(el);\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \"<transition> explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(?:transform|all)(?:,|$)/.test(\n getStyleProperties(`${TRANSITION}Property`).toString()\n );\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow(el) {\n const targetDocument = el ? el.ownerDocument : document;\n return targetDocument.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\n\nconst vShowOriginalDisplay = /* @__PURE__ */ Symbol(\"_vod\");\nconst vShowHidden = /* @__PURE__ */ Symbol(\"_vsh\");\nconst vShow = {\n // used for prop mismatch check during hydration\n name: \"show\",\n beforeMount(el, { value }, { transition }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: \"none\" } };\n }\n };\n}\n\nconst CSS_VAR_TEXT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(\n document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n ).forEach((node) => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, { flush: \"post\" });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n const value = normalizeCssVarValue(vars[key]);\n style.setProperty(`--${key}`, value);\n cssText += `--${key}: ${value};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\n\nconst displayRE = /(?:^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n const value = next[key];\n if (value != null) {\n if (!shouldPreserveTextareaResizeStyle(\n el,\n key,\n !isString(prev) && prev ? prev[key] : void 0,\n value\n )) {\n setStyle(style, key, value);\n }\n } else {\n setStyle(style, key, \"\");\n }\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach((v) => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(\n `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n );\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(\n hyphenate(prefixed),\n val.replace(importantRE, \"\"),\n \"important\"\n );\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\nfunction shouldPreserveTextareaResizeStyle(el, key, prev, next) {\n return el.tagName === \"TEXTAREA\" && (key === \"width\" || key === \"height\") && isString(next) && prev === next;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(\n key,\n isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n );\n }\n }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ? (\n // #11647: value should be set as empty string for null and undefined,\n // but <input type=\"checkbox\"> should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\"\n ) : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(\n `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n e\n );\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = /* @__PURE__ */ Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(\n !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n instance\n );\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(Once|Passive|Capture)$/;\nconst optionsModifierEventRE = /^on:?(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n let m;\n while ((m = name.match(optionsModifierRE)) && !optionsModifierEventRE.test(name)) {\n if (!options) options = {};\n name = name.slice(0, name.length - m[1].length);\n options[m[1].toLowerCase()] = true;\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n const value = invoker.value;\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n const handlers = value.slice();\n const args = [e];\n for (let i = 0; i < handlers.length; i++) {\n if (e._stopped) {\n break;\n }\n const handler = handlers[i];\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 5,\n args\n );\n }\n }\n } else {\n callWithAsyncErrorHandling(\n value,\n instance,\n 5,\n [e]\n );\n }\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(\n `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n );\n return NOOP;\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && // #12408 check if it's declared prop or it's async custom element\n (shouldSetAsPropForVueCE(el, key) || // @ts-expect-error _def is private\n el._def.__asyncLoader && (/[A-Z]/.test(key) || !isString(nextValue)))\n ) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n return false;\n }\n if (key === \"sandbox\" && el.tagName === \"IFRAME\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\nfunction shouldSetAsPropForVueCE(el, key) {\n const props = (\n // @ts-expect-error _def is private\n el._def.props\n );\n if (!props) {\n return false;\n }\n const camelKey = camelize$1(key);\n return Array.isArray(props) ? props.some((prop) => camelize$1(prop) === camelKey) : Object.keys(props).some((prop) => camelize$1(prop) === camelKey);\n}\n\nconst REMOVAL = {};\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n let Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) Comp = extend({}, Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\nconst defineSSRCustomElement = (/* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n});\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\n * @internal\n */\n this._instance = null;\n /**\n * @internal\n */\n this._app = null;\n /**\n * @internal\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._patching = false;\n this._dirty = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */ new WeakSet();\n this._styleAnchors = /* @__PURE__ */ new WeakMap();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(\n `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n );\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow(\n extend({}, _def.shadowRootOptions, {\n mode: \"open\"\n })\n );\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot && !this._resolved) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && // #12479 should check assignedSlot first to get correct parent\n (parent.assignedSlot || parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._mount(this._def);\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._inheritParentContext(parent);\n }\n }\n _inheritParentContext(parent = this._parent) {\n if (parent && this._app) {\n Object.setPrototypeOf(\n this._app._context.provides,\n parent._instance.provides\n );\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n if (this._teleportTargets) {\n this._teleportTargets.clear();\n this._teleportTargets = void 0;\n }\n }\n });\n }\n _processMutations(mutations) {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver(this._processMutations.bind(this));\n this._ob.observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const { props, styles } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n this._resolveProps(def);\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\n \"Custom element style injection is not supported when using shadowRoot: false\"\n );\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then((def) => {\n def.configureApp = this._def.configureApp;\n resolve(this._def = def, true);\n });\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n this._inheritParentContext();\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, !this._patching);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n this._dirty = true;\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n if (ob) {\n this._processMutations(ob.takeRecords());\n ob.disconnect();\n }\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, { attributes: true });\n }\n }\n }\n _update() {\n const vnode = this._createVNode();\n if (this._app) vnode.appContext = this._app._context;\n render(vnode, this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = (instance) => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = (newStyles) => {\n if (this._styles) {\n this._styles.forEach((s) => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._styleAnchors.delete(this._def);\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(\n new CustomEvent(\n event,\n isPlainObject(args[0]) ? extend({ detail: args }, args[0]) : { detail: args }\n )\n );\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner, parentComp) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n const root = this.shadowRoot;\n const insertionAnchor = parentComp ? this._getStyleAnchor(parentComp) || this._getStyleAnchor(this._def) : this._getRootStyleInsertionAnchor(root);\n let last = null;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n root.insertBefore(s, last || insertionAnchor);\n last = s;\n if (i === 0) {\n if (!parentComp) this._styleAnchors.set(this._def, s);\n if (owner) this._styleAnchors.set(owner, s);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */ new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n _getStyleAnchor(comp) {\n if (!comp) {\n return null;\n }\n const anchor = this._styleAnchors.get(comp);\n if (anchor && anchor.parentNode === this.shadowRoot) {\n return anchor;\n }\n if (anchor) {\n this._styleAnchors.delete(comp);\n }\n return null;\n }\n _getRootStyleInsertionAnchor(root) {\n for (let i = 0; i < root.childNodes.length; i++) {\n const node = root.childNodes[i];\n if (!(node instanceof HTMLStyleElement)) {\n return node;\n }\n }\n return null;\n }\n /**\n * Only called when shadowRoot is false\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _renderSlots() {\n const outlets = this._getSlots();\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\n * @internal\n */\n _getSlots() {\n const roots = [this];\n if (this._teleportTargets) {\n roots.push(...this._teleportTargets);\n }\n const slots = /* @__PURE__ */ new Set();\n for (const root of roots) {\n const found = root.querySelectorAll(\"slot\");\n for (let i = 0; i < found.length; i++) {\n slots.add(found[i]);\n }\n }\n return Array.from(slots);\n }\n /**\n * @internal\n */\n _injectChildStyle(comp, parentComp) {\n this._applyStyles(comp.styles, comp, parentComp);\n }\n /**\n * @internal\n */\n _beginPatch() {\n this._patching = true;\n this._dirty = false;\n }\n /**\n * @internal\n */\n _endPatch() {\n this._patching = false;\n if (this._dirty && this._instance) {\n this._update();\n }\n }\n /**\n * @internal\n */\n _hasShadowRoot() {\n return this._def.shadowRoot !== false;\n }\n /**\n * @internal\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n this._styleAnchors.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach((s) => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(\n `${caller || \"useHost\"} called without an active component instance.`\n );\n } else {\n warn(\n `${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`\n );\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = /* @__PURE__ */ Symbol(\"_moveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nconst decorate = (t) => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(\n prevChildren[0].el,\n instance.vnode.el,\n moveClass\n )) {\n prevChildren = [];\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow(instance.vnode.el);\n movedChildren.forEach((c) => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || e.propertyName.endsWith(\"transform\")) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n prevChildren = [];\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element && // Hidden v-show nodes have no previous layout box to animate from.\n !child.el[vShowHidden]) {\n prevChildren.push(child);\n setTransitionHooks(\n child,\n resolveTransitionHooks(\n child,\n cssTransitionProps,\n state,\n instance\n )\n );\n positionMap.set(child, getPosition(child.el));\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(\n child,\n resolveTransitionHooks(child, cssTransitionProps, state, instance)\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, getPosition(c.el));\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const el = c.el;\n const s = el.style;\n const rect = el.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n if (el.offsetWidth) scaleX = rect.width / el.offsetWidth;\n if (el.offsetHeight) scaleY = rect.height / el.offsetHeight;\n if (!Number.isFinite(scaleX) || scaleX === 0) scaleX = 1;\n if (!Number.isFinite(scaleY) || scaleY === 0) scaleY = 1;\n if (Math.abs(scaleX - 1) < 0.01) scaleX = 1;\n if (Math.abs(scaleY - 1) < 0.01) scaleY = 1;\n s.transform = s.webkitTransform = `translate(${dx / scaleX}px,${dy / scaleY}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction getPosition(el) {\n const rect = el.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top\n };\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach((cls) => {\n cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = /* @__PURE__ */ Symbol(\"_assign\");\nfunction castValue(value, trim, number) {\n if (trim) value = value.trim();\n if (number) value = looseToNumber(value);\n return value;\n}\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n if (e.target.composing) return;\n el[assignKey](castValue(el.value, trim, castToNumber));\n });\n if (trim || castToNumber) {\n addEventListener(el, \"change\", () => {\n el.value = castValue(el.value, trim, castToNumber);\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n const rootNode = el.getRootNode();\n if ((rootNode instanceof Document || rootNode instanceof ShadowRoot) && rootNode.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n el._modelValue = value;\n addEventListener(el, \"change\", () => {\n const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n );\n el[assignKey](\n el.multiple ? isSet(el._modelValue) ? new Set(selectedVal) : selectedVal : selectedVal[0]\n );\n el._assigning = true;\n nextTick(() => {\n el._assigning = false;\n });\n });\n el[assignKey] = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, { value }, vnode) {\n el._modelValue = value;\n el[assignKey] = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n if (!el._assigning) {\n setSelected(el, value);\n }\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n const isArrayValue = isArray(value);\n if (isMultiple && !isArrayValue && !isSet(value)) {\n !!(process.env.NODE_ENV !== \"production\") && warn(\n `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n );\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArrayValue) {\n const optionType = typeof optionValue;\n if (optionType === \"string\" || optionType === \"number\") {\n option.selected = value.some((v) => String(v) === String(optionValue));\n } else {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n } else {\n option.selected = value.has(optionValue);\n }\n } else if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) el.selectedIndex = i;\n return;\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\nfunction getValue(el) {\n return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n const key = checked ? \"_trueValue\" : \"_falseValue\";\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"created\");\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"mounted\");\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"updated\");\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case \"SELECT\":\n return vModelSelect;\n case \"TEXTAREA\":\n return vModelText;\n default:\n switch (type) {\n case \"checkbox\":\n return vModelCheckbox;\n case \"radio\":\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(\n el.tagName,\n vnode.props && vnode.props.type\n );\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n } else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n } else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== \"string\") {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(),\n vnode.props && vnode.props.type\n );\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n stop: (e) => e.stopPropagation(),\n prevent: (e) => e.preventDefault(),\n self: (e) => e.target !== e.currentTarget,\n ctrl: (e) => !e.ctrlKey,\n shift: (e) => !e.shiftKey,\n alt: (e) => !e.altKey,\n meta: (e) => !e.metaKey,\n left: (e) => \"button\" in e && e.button !== 0,\n middle: (e) => \"button\" in e && e.button !== 1,\n right: (e) => \"button\" in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n if (!fn) return fn;\n const cache = fn._withMods || (fn._withMods = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers)) return;\n }\n return fn(event, ...args);\n }));\n};\nconst keyNames = {\n esc: \"escape\",\n space: \" \",\n up: \"arrow-up\",\n left: \"arrow-left\",\n right: \"arrow-right\",\n down: \"arrow-down\",\n delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n const cache = fn._withKeys || (fn._withKeys = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event) => {\n if (!(\"key\" in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(\n (k) => k === eventKey || keyNames[k] === eventKey\n )) {\n return fn(event);\n }\n }));\n};\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\nconst render = ((...args) => {\n ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n const app = ensureRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container) return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n component.template = container.innerHTML;\n }\n if (container.nodeType === 1) {\n container.textContent = \"\";\n }\n const proxy = mount(container, false, resolveRootNamespace(container));\n if (container instanceof Element) {\n container.removeAttribute(\"v-cloak\");\n container.setAttribute(\"data-v-app\", \"\");\n }\n return proxy;\n };\n return app;\n});\nconst createSSRApp = ((...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, resolveRootNamespace(container));\n }\n };\n return app;\n});\nfunction resolveRootNamespace(container) {\n if (container instanceof SVGElement) {\n return \"svg\";\n }\n if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n return \"mathml\";\n }\n}\nfunction injectNativeTagCheck(app) {\n Object.defineProperty(app.config, \"isNativeTag\", {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n writable: false\n });\n}\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, \"isCustomElement\", {\n get() {\n return isCustomElement;\n },\n set() {\n warn(\n `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n );\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n Object.defineProperty(app.config, \"compilerOptions\", {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n warn(\n `Failed to mount app: mount target selector \"${container}\" returned null.`\n );\n }\n return res;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n warn(\n `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n );\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, nodeOps, patchProp, render, useCssModule, useCssVars, useHost, useShadowRoot, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","import type {\n CreateGoalRequest,\n GoalSnapshot,\n JournalEvent,\n SessionSnapshot,\n TodoItem,\n UpdateGoalRequest,\n} from '../types';\n\nexport interface GoalTodoState {\n goal: GoalSnapshot | null;\n todos: TodoItem[];\n}\n\nexport interface GoalUpdatedPayload {\n type: 'goal.updated';\n snapshot: GoalSnapshot | null;\n}\n\nexport interface TodoUpdatedPayload {\n type: 'todo.updated';\n todos: TodoItem[];\n}\n\nexport interface TodoGroup {\n phase: string | null;\n items: TodoItem[];\n}\n\nexport function isCurrentSessionRequest(\n currentSessionId: string | null,\n currentGeneration: number,\n targetSessionId: string,\n targetGeneration: number,\n): boolean {\n return currentSessionId === targetSessionId && currentGeneration === targetGeneration;\n}\n\nexport function canApplySnapshot(input: {\n snapshot: SessionSnapshot;\n targetSessionId: string;\n currentSessionId: string | null;\n targetSessionGeneration: number;\n currentSessionGeneration: number;\n targetConnectionGeneration: number;\n currentConnectionGeneration: number;\n targetPromptGeneration: number;\n currentPromptGeneration: number;\n targetLiveGeneration: number;\n currentLiveGeneration: number;\n currentEpoch: number;\n currentSeq: number;\n}): boolean {\n return input.currentSessionId === input.targetSessionId\n && input.snapshot.sessionId === input.targetSessionId\n && input.currentSessionGeneration === input.targetSessionGeneration\n && input.currentConnectionGeneration === input.targetConnectionGeneration\n && input.currentPromptGeneration === input.targetPromptGeneration\n && input.currentLiveGeneration === input.targetLiveGeneration\n && (input.currentEpoch === 0 || input.snapshot.epoch === input.currentEpoch)\n && (input.snapshot.epoch !== input.currentEpoch || input.snapshot.seq >= input.currentSeq);\n}\n\nexport function buildCreateGoalBody(request: CreateGoalRequest): Record<string, unknown> {\n return {\n objective: request.objective,\n completionCriterion: request.completionCriterion,\n replace: request.replace,\n budgets: request.budgets,\n };\n}\n\nexport function buildUpdateGoalBody(request: UpdateGoalRequest): Record<string, unknown> {\n return {\n objective: request.objective,\n budgets: request.budgets,\n };\n}\n\nexport function acceptJournalEvent(currentEpoch: number, currentSeq: number, event: JournalEvent): 'apply' | 'duplicate' | 'resync' {\n if (currentEpoch !== 0 && event.epoch !== currentEpoch) return 'resync';\n return event.seq <= currentSeq ? 'duplicate' : 'apply';\n}\n\nexport function applyGoalTodoEvent(\n state: GoalTodoState,\n payload: { type: string; [key: string]: unknown },\n): GoalTodoState {\n if (payload.type === 'goal.updated') {\n return { ...state, goal: (payload as unknown as GoalUpdatedPayload).snapshot };\n }\n if (payload.type === 'todo.updated') {\n return { ...state, todos: (payload as unknown as TodoUpdatedPayload).todos };\n }\n return state;\n}\n\n/** Groups by phase in first-appearance order and preserves item order in each group. */\nexport function groupTodosByPhase(todos: readonly TodoItem[]): TodoGroup[] {\n const groups: TodoGroup[] = [];\n const indexes = new Map<string | null, number>();\n for (const todo of todos) {\n const phase = todo.phase ?? null;\n let index = indexes.get(phase);\n if (index === undefined) {\n index = groups.length;\n indexes.set(phase, index);\n groups.push({ phase, items: [] });\n }\n groups[index]!.items.push(todo);\n }\n return groups;\n}\n","import { ref } from 'vue';\n\nexport interface ToastItem {\n id: string;\n type: 'info' | 'success' | 'error' | 'warning';\n message: string;\n}\n\nconst toasts = ref<ToastItem[]>([]);\n\nlet counter = 0;\n\nfunction showToast(\n message: string,\n type: ToastItem['type'] = 'info',\n duration = 3500,\n): void {\n const id = `toast_${++counter}`;\n toasts.value = [...toasts.value, { id, type, message }];\n if (duration > 0) {\n window.setTimeout(() => removeToast(id), duration);\n }\n}\n\nfunction removeToast(id: string): void {\n toasts.value = toasts.value.filter((t) => t.id !== id);\n}\n\nexport function useToast() {\n return { toasts, showToast, removeToast };\n}\n","/**\n * Coalesces rapid mutations into a single flush per animation frame.\n *\n * WebSocket stream chunks arrive as separate macrotasks; without coalescing\n * each chunk triggers a full Vue render flush (Vue's microtask batching\n * cannot span macrotasks). rAF coalescing bounds streaming updates to at most\n * one flush per frame while staying perfectly smooth.\n */\nexport function useThrottledFlush(flush: () => void): {\n /** Schedule a flush on the next animation frame (coalesced). */\n schedule: () => void;\n /** Cancel any pending frame and flush immediately (used at turn end). */\n flushNow: () => void;\n /** Cancel any pending frame without flushing (used on unmount). */\n dispose: () => void;\n} {\n let rafId: number | null = null;\n\n const schedule = (): void => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n flush();\n });\n };\n\n const flushNow = (): void => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n flush();\n };\n\n const dispose = (): void => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n\n return { schedule, flushNow, dispose };\n}\n","import { ref, computed, onBeforeUnmount, type Ref } from 'vue';\nimport type {\n ApprovalRequest,\n ChatMessage,\n CreateGoalRequest,\n GitStatus,\n GoalSnapshot,\n LikePreferences,\n ModelInfo,\n ModelsResponse,\n SessionListItem,\n SessionSnapshot,\n SessionStatus,\n SessionUsage,\n TodoItem,\n UpdateGoalRequest,\n WsMessage,\n AgentContextData,\n BackgroundTaskInfo,\n ExperimentalFlagMap,\n McpServerInfo,\n McpStartupMetrics,\n PlanInfo,\n PluginInfo,\n PluginSummary,\n ReloadSummary,\n ScreamConfig,\n ScreamConfigPatch,\n SessionPlan,\n SkillSummary,\n} from '../types';\nimport {\n acceptJournalEvent,\n applyGoalTodoEvent,\n buildCreateGoalBody,\n buildUpdateGoalBody,\n canApplySnapshot,\n isCurrentSessionRequest,\n} from '../utils/goalTodoState';\nimport { useToast } from './useToast';\nimport { useThrottledFlush } from './useThrottledFlush';\n\nexport type ConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected' | 'idle';\n\nconst API_BASE = '/api/v1';\nconst HEARTBEAT_TIMEOUT_MS = 2 * 30000;\n\nexport interface UseScreamWebClientReturn {\n connectionStatus: Ref<ConnectionStatus>;\n messages: Ref<ChatMessage[]>;\n /** Older history exists beyond the loaded window. */\n olderAvailable: Ref<boolean>;\n /** Seq cursor of the oldest loaded message (before-cursor for older pages). */\n oldestSeq: Ref<number | undefined>;\n loadOlderMessages: () => Promise<number>;\n pendingApprovals: Ref<ApprovalRequest[]>;\n status: Ref<SessionStatus>;\n goal: Ref<GoalSnapshot | null>;\n todos: Ref<TodoItem[]>;\n goalRequestPending: Ref<boolean>;\n goalRequestError: Ref<string | null>;\n error: Ref<string | null>;\n sessionId: Ref<string | null>;\n workDir: Ref<string | null>;\n isBusy: Ref<boolean>;\n isArchived: Ref<boolean>;\n sessions: Ref<SessionListItem[]>;\n currentSessionId: Ref<string | null>;\n gitStatus: Ref<GitStatus | null>;\n models: Ref<ModelInfo[]>;\n like: Ref<LikePreferences>;\n fetchLike: () => Promise<void>;\n updateLike: (prefs: LikePreferences) => Promise<boolean>;\n sendPrompt: (text: string) => void;\n sendCommand: (command: string, args?: string) => void;\n clearMessages: () => void;\n appendSystemMessage: (text: string) => void;\n abort: () => void;\n resolveApproval: (id: string, decision: 'approved' | 'rejected', feedback?: string, scope?: 'once' | 'session') => void;\n fetchSessions: () => Promise<void>;\n fetchGitStatus: () => Promise<void>;\n fetchModels: () => Promise<void>;\n reconnectNow: () => void;\n switchModel: (alias: string) => Promise<void>;\n switchThinking: (level: string) => Promise<void>;\n refineGoal: (description: string) => Promise<string | null>;\n createGoal: (request: CreateGoalRequest) => Promise<boolean>;\n updateGoal: (request: UpdateGoalRequest) => Promise<boolean>;\n pauseGoal: () => Promise<boolean>;\n resumeGoal: () => Promise<boolean>;\n cancelGoal: () => Promise<boolean>;\n createSession: () => Promise<void>;\n switchSession: (sessionId: string) => Promise<void>;\n deleteSession: (sessionId: string) => Promise<void>;\n exportSession: (sessionId: string) => Promise<void>;\n fetchSnapshot: () => Promise<void>;\n // ── Session-control / resource / global REST methods (server.ts exposure) ──\n fetchSessionStatus: () => Promise<void>;\n fetchSessionUsage: () => Promise<void>;\n fetchSessionContext: () => Promise<void>;\n fetchSessionPlan: () => Promise<void>;\n sessionPlan: Ref<SessionPlan | null>;\n clearPlan: () => Promise<boolean>;\n switchPermission: (mode: string) => Promise<boolean>;\n switchPlanMode: (enabled: boolean, strategy?: 'normal' | 'fusion') => Promise<boolean>;\n switchWolfpack: (enabled: boolean) => Promise<boolean>;\n switchRlm: (enabled: boolean, maxDepth?: number) => Promise<boolean>;\n undoHistory: (count?: number) => Promise<boolean>;\n compact: (instruction?: string) => Promise<boolean>;\n skills: Ref<SkillSummary[]>;\n fetchSkills: () => Promise<void>;\n activateSkill: (name: string, args?: string) => Promise<boolean>;\n removeSkill: (name: string) => Promise<boolean>;\n plugins: Ref<PluginSummary[]>;\n pluginInfo: Ref<PluginInfo | null>;\n fetchPlugins: () => Promise<void>;\n fetchPluginInfo: (id: string) => Promise<void>;\n installPlugin: (source: string) => Promise<PluginSummary | null>;\n setPluginEnabled: (id: string, enabled: boolean) => Promise<boolean>;\n setPluginMcpServerEnabled: (id: string, server: string, enabled: boolean) => Promise<boolean>;\n removePlugin: (id: string) => Promise<boolean>;\n reloadPlugins: () => Promise<ReloadSummary | null>;\n activatePlugin: (id: string) => Promise<boolean>;\n deactivatePlugin: (id: string) => Promise<boolean>;\n injectPlugin: (id: string) => Promise<boolean>;\n mcpServers: Ref<McpServerInfo[]>;\n mcpStartupMetrics: Ref<McpStartupMetrics | null>;\n fetchMcpServers: () => Promise<void>;\n fetchMcpStartupMetrics: () => Promise<void>;\n addMcpServer: (name: string, config: Record<string, unknown>) => Promise<boolean>;\n reconnectMcpServer: (name: string) => Promise<boolean>;\n stopMcpServer: (name: string) => Promise<boolean>;\n removeMcpServer: (name: string) => Promise<boolean>;\n backgroundTasks: Ref<BackgroundTaskInfo[]>;\n backgroundTaskOutput: Ref<string>;\n fetchBackgroundTasks: (activeOnly?: boolean, limit?: number) => Promise<void>;\n fetchBackgroundTaskOutput: (taskId: string, tail?: number) => Promise<void>;\n stopBackgroundTask: (taskId: string, reason?: string) => Promise<boolean>;\n config: Ref<ScreamConfig | null>;\n fetchConfig: () => Promise<void>;\n setConfig: (patch: ScreamConfigPatch) => Promise<boolean>;\n removeProvider: (providerId: string) => Promise<boolean>;\n experimentalFlags: Ref<ExperimentalFlagMap | null>;\n fetchExperimentalFlags: () => Promise<void>;\n preflightOk: Ref<boolean>;\n preflight: () => Promise<void>;\n}\n\nexport function useScreamWebClient(): UseScreamWebClientReturn {\n const { showToast } = useToast();\n const connectionStatus = ref<ConnectionStatus>('connecting');\n const messages = ref<ChatMessage[]>([]);\n const olderAvailable = ref(false);\n const oldestSeq = ref<number | undefined>(undefined);\n const pendingApprovals = ref<ApprovalRequest[]>([]);\n const status = ref<SessionStatus>({ busy: false });\n const goal = ref<GoalSnapshot | null>(null);\n const todos = ref<TodoItem[]>([]);\n const goalRequestPending = ref(false);\n const goalRequestError = ref<string | null>(null);\n const promptPending = ref(false);\n const error = ref<string | null>(null);\n const sessionId = ref<string | null>(null);\n const workDir = ref<string | null>(null);\n const isBusy = computed(() => status.value.busy || promptPending.value);\n const sessions = ref<SessionListItem[]>([]);\n const currentSessionId = ref<string | null>(null);\n const sessionActive = ref(false);\n const isArchived = computed(() => sessionId.value !== null && !sessionActive.value);\n const gitStatus = ref<GitStatus | null>(null);\n const models = ref<ModelInfo[]>([]);\n // Session-control / resource / global state mirrors (server.ts exposure).\n const sessionPlan = ref<SessionPlan | null>(null);\n const skills = ref<SkillSummary[]>([]);\n const plugins = ref<PluginSummary[]>([]);\n const pluginInfo = ref<PluginInfo | null>(null);\n const mcpServers = ref<McpServerInfo[]>([]);\n const mcpStartupMetrics = ref<McpStartupMetrics | null>(null);\n const backgroundTasks = ref<BackgroundTaskInfo[]>([]);\n const backgroundTaskOutput = ref<string>('');\n const config = ref<ScreamConfig | null>(null);\n const experimentalFlags = ref<ExperimentalFlagMap | null>(null);\n const preflightOk = ref(false);\n\n let ws: WebSocket | null = null;\n let heartbeatTimer: number | null = null;\n let reconnectTimer: number | null = null;\n let snapshotRetryTimer: number | null = null;\n let lastPongAt = Date.now();\n let seq = 0;\n let epoch = 0;\n let reconnectAttempt = 0;\n let sessionGeneration = 0;\n let connectionGeneration = 0;\n let promptGeneration = 0;\n let liveGeneration = 0;\n let sessionMutationGeneration = 0;\n let goalMutationGeneration = 0;\n let goalAwaitingMutation: { generation: number } | null = null;\n let goalRequestInFlight = false;\n let snapshotRetryGoalGeneration: number | null = null;\n let pendingPromptAccepted = false;\n let disposed = false;\n const sentMessageIds = new Map<string, { messageId: string; connectionGeneration: number }>();\n\n // ── Per-turn runtime stats ───────────────────────────────────────────────\n let turnNumber = 0;\n let turnStartAt = 0;\n let turnFirstTokenAt: number | null = null;\n let activeToolMs = 0;\n const activeToolStarts = new Map<string, number>();\n\n function wsUrl(): string {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const base = `${protocol}//${window.location.host}/api/v1/ws`;\n if (currentSessionId.value) {\n return `${base}?sessionId=${encodeURIComponent(currentSessionId.value)}`;\n }\n return base;\n }\n\n function setConnectionStatus(s: ConnectionStatus) {\n connectionStatus.value = s;\n }\n\n function send(obj: Record<string, unknown>) {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(obj));\n }\n }\n\n function syncGoalRequestPending(): void {\n goalRequestPending.value = goalRequestInFlight || goalAwaitingMutation !== null;\n }\n\n function resetGoalRequestState(): void {\n goalMutationGeneration++;\n goalAwaitingMutation = null;\n goalRequestInFlight = false;\n snapshotRetryGoalGeneration = null;\n goalRequestPending.value = false;\n goalRequestError.value = null;\n }\n\n function eventErrorMessage(value: unknown, fallback: string): string {\n if (value !== null && typeof value === 'object') {\n const message = (value as Record<string, unknown>)['message'];\n if (typeof message === 'string') return message;\n }\n return fallback;\n }\n\n function scheduleSnapshotRetry(): void {\n if (disposed || snapshotRetryTimer !== null) return;\n snapshotRetryTimer = window.setTimeout(() => {\n snapshotRetryTimer = null;\n const goalGeneration = snapshotRetryGoalGeneration;\n snapshotRetryGoalGeneration = null;\n void fetchSnapshot(goalGeneration ?? undefined);\n }, 250);\n }\n\n async function fetchSnapshot(goalGeneration?: number): Promise<void> {\n const targetSessionId = sessionId.value;\n if (!targetSessionId) return;\n // First paint: request a tail-window snapshot so very long sessions do not\n // ship the whole journal. Reconnects (messages already in memory) keep the\n // full snapshot to avoid dropping history.\n const tail = messages.value.length === 0 ? 100 : undefined;\n const targetSessionGeneration = sessionGeneration;\n const targetConnectionGeneration = connectionGeneration;\n const targetPromptGeneration = promptGeneration;\n const targetLiveGeneration = liveGeneration;\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetSessionId}/snapshot${tail ? `?tail=${tail}` : ''}`);\n if (!res.ok) {\n if (goalGeneration !== undefined && goalAwaitingMutation?.generation === goalGeneration) {\n snapshotRetryGoalGeneration = goalGeneration;\n scheduleSnapshotRetry();\n }\n return;\n }\n const snapshot: SessionSnapshot = await res.json();\n if (!canApplySnapshot({\n snapshot,\n targetSessionId,\n currentSessionId: sessionId.value,\n targetSessionGeneration,\n currentSessionGeneration: sessionGeneration,\n targetConnectionGeneration,\n currentConnectionGeneration: connectionGeneration,\n targetPromptGeneration,\n currentPromptGeneration: promptGeneration,\n targetLiveGeneration,\n currentLiveGeneration: liveGeneration,\n currentEpoch: epoch,\n currentSeq: seq,\n })) {\n if (goalGeneration !== undefined) snapshotRetryGoalGeneration = goalGeneration;\n scheduleSnapshotRetry();\n return;\n }\n applySnapshot(snapshot, goalGeneration);\n } catch {\n if (goalGeneration !== undefined && goalAwaitingMutation?.generation === goalGeneration) {\n snapshotRetryGoalGeneration = goalGeneration;\n scheduleSnapshotRetry();\n }\n }\n }\n\n function applySnapshot(snapshot: SessionSnapshot, goalGeneration?: number): void {\n // The snapshot is authoritative (server journal includes volatile deltas):\n // drop any locally buffered stream chunks so they cannot be re-appended\n // to the new snapshot's last message (background-tab + reconnect case).\n pendingAssistantDelta = '';\n pendingThinkingDelta = '';\n pendingToolProgress.clear();\n // Preserve local-only messages (command results, system notices) that are\n // not in the server journal. Without this, applySnapshot's full replace\n // would drop them - the \"闪一下\" bug.\n const localMsgs = messages.value.filter((m) => m.local);\n const pendingClientId = sentMessageIds.keys().next().value;\n const pendingEntry = pendingClientId ? sentMessageIds.get(pendingClientId) : undefined;\n const pendingLocal = pendingEntry\n ? messages.value.find((m) => m.id === pendingEntry.messageId)\n : undefined;\n const pendingCovered = Boolean(\n pendingClientId && snapshot.messages.some((m) => m.clientMessageId === pendingClientId),\n );\n const pendingLost = Boolean(\n pendingEntry && !pendingCovered && pendingEntry.connectionGeneration < connectionGeneration,\n );\n if (pendingLost && pendingLocal) pendingLocal.isError = true;\n const pendingMessages = pendingLocal && !pendingCovered ? [pendingLocal] : [];\n messages.value = [\n ...snapshot.messages.map((m) => ({ ...m, id: m.id ?? generateId() })),\n ...localMsgs,\n ...pendingMessages,\n ];\n // Re-anchor the per-turn counter to the latest snapshotted turn so a new\n // session (or restored history) does not keep counting up across sessions.\n for (let i = messages.value.length - 1; i >= 0; i--) {\n const stats = messages.value[i]?.turnStats;\n if (stats && typeof stats.turn === 'number' && stats.turn > 0) {\n turnNumber = stats.turn;\n break;\n }\n }\n pendingApprovals.value = snapshot.pendingApprovals;\n status.value = { ...snapshot.status, busy: snapshot.busy };\n olderAvailable.value = Boolean(snapshot.olderAvailable);\n oldestSeq.value = snapshot.oldestSeq;\n goal.value = snapshot.goal;\n todos.value = snapshot.todos;\n if (\n goalGeneration !== undefined &&\n goalAwaitingMutation !== null &&\n goalAwaitingMutation.generation === goalGeneration &&\n goalMutationGeneration === goalGeneration\n ) {\n goalAwaitingMutation = null;\n syncGoalRequestPending();\n }\n if (pendingCovered || pendingLost) {\n promptPending.value = false;\n pendingPromptAccepted = false;\n sentMessageIds.clear();\n if (pendingLost) showToast('消息未送达,已恢复连接。', 'error');\n }\n seq = snapshot.seq;\n epoch = snapshot.epoch;\n workDir.value = snapshot.workDir;\n }\n\n function generateId(): string {\n return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n }\n\n function startHeartbeat(ms: number): void {\n stopHeartbeat();\n lastPongAt = Date.now();\n heartbeatTimer = window.setInterval(() => {\n if (Date.now() - lastPongAt > HEARTBEAT_TIMEOUT_MS) {\n ws?.close();\n return;\n }\n send({ type: 'ping' });\n }, ms);\n }\n\n function stopHeartbeat(): void {\n if (heartbeatTimer !== null) {\n clearInterval(heartbeatTimer);\n heartbeatTimer = null;\n }\n }\n\n function scheduleReconnect(): void {\n if (disposed || reconnectTimer !== null) return;\n setConnectionStatus('reconnecting');\n reconnectAttempt++;\n const delay = Math.min(1000 * 2 ** reconnectAttempt, 30000);\n reconnectTimer = window.setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, delay);\n }\n\n function handleMessage(msg: WsMessage): void {\n switch (msg.type) {\n case 'server_hello': {\n const hello = msg;\n sessionId.value = hello.sessionId;\n workDir.value = hello.workDir;\n currentSessionId.value = hello.sessionId;\n sessionActive.value = hello.active;\n const resumeEpoch = epoch;\n epoch = hello.epoch;\n startHeartbeat(hello.heartbeat_ms);\n send({ type: 'client_hello', lastSeq: seq, epoch: resumeEpoch });\n if (resumeEpoch !== 0 && resumeEpoch !== hello.epoch) seq = 0;\n setConnectionStatus('connected');\n reconnectAttempt = 0;\n // Only activate archived sessions; skip if already active to avoid extra reconnect.\n if (!hello.active) {\n void activateSession(hello.sessionId).then((active) => {\n if (active && sessionId.value === hello.sessionId) sessionActive.value = true;\n void fetchSnapshot();\n void fetchSessions();\n void fetchGitStatus();\n });\n } else {\n void fetchSnapshot();\n void fetchSessions();\n void fetchGitStatus();\n }\n break;\n }\n case 'event': {\n const decision = acceptJournalEvent(epoch, seq, msg);\n if (decision === 'resync') {\n epoch = msg.epoch;\n seq = 0;\n void fetchSnapshot();\n break;\n }\n if (decision === 'duplicate') break;\n seq = msg.seq;\n epoch = msg.epoch;\n liveGeneration++;\n onEvent(msg.payload);\n break;\n }\n case 'user_message': {\n liveGeneration++;\n if (msg.clientMessageId && sentMessageIds.has(msg.clientMessageId)) {\n pendingPromptAccepted = true;\n break;\n }\n messages.value.push({\n id: generateId(),\n role: 'user',\n content: msg.text,\n clientMessageId: msg.clientMessageId,\n tools: [],\n ts: Date.now(),\n });\n break;\n }\n case 'approval_request': {\n liveGeneration++;\n pendingApprovals.value = [...pendingApprovals.value, { id: msg.id, toolName: msg.toolName, action: msg.action, display: msg.display }];\n break;\n }\n case 'approval_resolved': {\n liveGeneration++;\n pendingApprovals.value = pendingApprovals.value.filter((a) => a.id !== msg.id);\n break;\n }\n case 'command_result': {\n // Update pending message if it exists, otherwise add new message.\n const pendingIdx = msg.pendingMsgId\n ? messages.value.findIndex((m) => m.id === msg.pendingMsgId)\n : -1;\n if (pendingIdx >= 0) {\n const existing = messages.value[pendingIdx];\n messages.value[pendingIdx] = {\n ...existing,\n content: msg.message,\n isError: !msg.ok,\n pending: false,\n };\n } else {\n messages.value.push({\n id: generateId(),\n role: 'system',\n content: msg.message,\n tools: [],\n isError: !msg.ok,\n ts: Date.now(),\n local: true,\n });\n }\n // fork/title change the session list - refresh the sidebar.\n if (msg.command === 'fork' || msg.command === 'title') {\n void fetchSessions();\n }\n // compact changes message history - refresh snapshot to get the\n // compacted messages. Local messages (command results etc.) are\n // preserved by applySnapshot, so no manual save/restore needed.\n if (msg.ok && msg.command === 'compact') {\n void fetchSnapshot();\n }\n break;\n }\n case 'resync_required': {\n seq = 0;\n void fetchSnapshot();\n break;\n }\n case 'status': {\n liveGeneration++;\n // Server-pushed status sync (e.g. model/thinking switched from another tab).\n status.value = { ...status.value, ...msg.status };\n break;\n }\n case 'error': {\n error.value = msg.message;\n if (msg.clientMessageId) {\n const pendingEntry = sentMessageIds.get(msg.clientMessageId);\n if (pendingEntry) {\n sentMessageIds.delete(msg.clientMessageId);\n promptPending.value = false;\n pendingPromptAccepted = false;\n const local = messages.value.find((m) => m.id === pendingEntry.messageId);\n if (local) local.isError = true;\n showToast(`消息未发送:${msg.message}`, 'error');\n }\n }\n break;\n }\n case 'server_empty': {\n // Server has no session yet; stay idle instead of reconnect-looping.\n setConnectionStatus('idle');\n break;\n }\n case 'pong':\n break;\n }\n }\n\n // ── Streaming coalescing ──────────────────────────────────────────────\n // Stream chunks arrive as separate macrotasks; coalesce content deltas and\n // tool progress into at most one state flush per animation frame so the\n // renderer does not run O(chunks) full passes.\n let pendingAssistantDelta = '';\n let pendingThinkingDelta = '';\n const pendingToolProgress = new Map<string, string>();\n let streamDisposed = false;\n\n function flushStreaming(): void {\n if (streamDisposed) return;\n const last = lastAssistantMessage();\n if (!last) {\n pendingAssistantDelta = '';\n pendingThinkingDelta = '';\n pendingToolProgress.clear();\n return;\n }\n if (pendingAssistantDelta) {\n last.content += pendingAssistantDelta;\n pendingAssistantDelta = '';\n }\n if (pendingThinkingDelta) {\n const thinkingTool = last.tools.find((t) => t.name === 'thinking');\n if (thinkingTool) {\n thinkingTool.output = (thinkingTool.output ?? '') + pendingThinkingDelta;\n } else {\n last.tools.push({ toolCallId: 'thinking', name: 'thinking', output: pendingThinkingDelta });\n }\n pendingThinkingDelta = '';\n }\n if (pendingToolProgress.size > 0) {\n for (const [toolCallId, output] of pendingToolProgress) {\n const tool = last.tools.find((t) => t.toolCallId === toolCallId);\n if (tool) tool.output = output;\n }\n pendingToolProgress.clear();\n }\n }\n\n const streamFlush = useThrottledFlush(flushStreaming);\n\n function onEvent(payload: { type: string; [key: string]: unknown }): void {\n const goalTodoState = applyGoalTodoEvent({ goal: goal.value, todos: todos.value }, payload);\n goal.value = goalTodoState.goal;\n todos.value = goalTodoState.todos;\n if (\n payload.type === 'goal.updated' &&\n goalAwaitingMutation !== null &&\n goalAwaitingMutation.generation === goalMutationGeneration\n ) {\n goalAwaitingMutation = null;\n snapshotRetryGoalGeneration = null;\n syncGoalRequestPending();\n }\n\n switch (payload.type) {\n case 'turn.started': {\n if (pendingPromptAccepted) {\n promptPending.value = false;\n pendingPromptAccepted = false;\n sentMessageIds.clear();\n }\n streamFlush.flushNow();\n status.value = { ...status.value, busy: true };\n turnNumber += 1;\n turnStartAt = Date.now();\n turnFirstTokenAt = null;\n activeToolMs = 0;\n activeToolStarts.clear();\n messages.value.push({\n id: generateId(),\n role: 'assistant',\n content: '',\n tools: [],\n ts: Date.now(),\n model: status.value.model,\n turnStats: {\n turn: turnNumber,\n step: 0,\n status: 'running',\n firstTokenMs: null,\n llmMs: 0,\n toolMs: 0,\n tokens: null,\n tokensPerSec: null,\n },\n });\n break;\n }\n case 'assistant.delta': {\n if (turnFirstTokenAt === null) turnFirstTokenAt = Date.now();\n pendingAssistantDelta += String(payload.delta);\n streamFlush.schedule();\n break;\n }\n case 'thinking.delta': {\n if (turnFirstTokenAt === null) turnFirstTokenAt = Date.now();\n pendingThinkingDelta += String(payload.delta);\n streamFlush.schedule();\n break;\n }\n case 'tool.call.started': {\n const last = lastAssistantMessage();\n if (last) {\n last.tools.push({ toolCallId: String(payload.toolCallId), name: String(payload.name), args: payload.args });\n if (last.turnStats) last.turnStats.step += 1;\n }\n activeToolStarts.set(String(payload.toolCallId), Date.now());\n break;\n }\n case 'tool.result': {\n // Clear any buffered progress for this tool so a stale progress frame\n // cannot overwrite the authoritative result at the next flush.\n pendingToolProgress.delete(String(payload.toolCallId));\n const startedAt = activeToolStarts.get(String(payload.toolCallId));\n if (startedAt !== undefined) {\n activeToolMs += Date.now() - startedAt;\n activeToolStarts.delete(String(payload.toolCallId));\n }\n const last = lastAssistantMessage();\n if (last) {\n const tool = last.tools.find((t) => t.toolCallId === payload.toolCallId);\n if (tool) {\n tool.output = String(payload.output);\n tool.isError = Boolean(payload.isError);\n }\n }\n break;\n }\n case 'tool.progress': {\n // Progress is overwrite-semantics: keep only the latest text per tool.\n pendingToolProgress.set(String(payload.toolCallId), String(payload.message ?? payload.output));\n streamFlush.schedule();\n break;\n }\n case 'turn.ended': {\n streamFlush.flushNow();\n status.value = { ...status.value, busy: false };\n if (payload.reason === 'failed') {\n const last = lastAssistantMessage();\n if (last) last.isError = true;\n error.value = eventErrorMessage(payload.error, 'Turn failed');\n }\n const last = lastAssistantMessage();\n const llmMs = Date.now() - turnStartAt;\n const usage = status.value.usage?.currentTurn;\n const tokens = usage\n ? usage.inputOther + usage.output + usage.inputCacheRead + usage.inputCacheCreation\n : null;\n if (last && last.turnStats) {\n last.turnStats.status = 'done';\n last.turnStats.llmMs = llmMs;\n last.turnStats.toolMs = activeToolMs;\n last.turnStats.firstTokenMs = turnFirstTokenAt !== null ? turnFirstTokenAt - turnStartAt : null;\n last.turnStats.tokens = tokens;\n last.turnStats.tokensPerSec =\n tokens !== null && llmMs > 0 ? Math.round((tokens / llmMs) * 1000) : null;\n }\n void fetchSessions();\n void fetchGitStatus();\n break;\n }\n case 'session.meta.updated': {\n const patch: Partial<SessionStatus> = {};\n if (payload.model !== undefined) patch.model = payload.model as string;\n if (payload.contextTokens !== undefined) patch.contextTokens = payload.contextTokens as number;\n if (payload.maxContextTokens !== undefined) patch.maxContextTokens = payload.maxContextTokens as number;\n if (payload.contextUsage !== undefined) patch.contextUsage = payload.contextUsage as number;\n status.value = { ...status.value, ...patch };\n break;\n }\n case 'agent.status.updated': {\n const patch: Partial<SessionStatus> = {};\n if (payload.model !== undefined) patch.model = payload.model as string;\n if (payload.thinkingLevel !== undefined) patch.thinkingLevel = payload.thinkingLevel as string;\n if (payload.contextTokens !== undefined) patch.contextTokens = payload.contextTokens as number;\n if (payload.maxContextTokens !== undefined) patch.maxContextTokens = payload.maxContextTokens as number;\n if (payload.contextUsage !== undefined) patch.contextUsage = payload.contextUsage as number;\n if (payload.usage !== undefined) {\n patch.usage = payload.usage as SessionUsage;\n // Late-arriving token usage: backfill the last settled assistant turn\n // so the stats row shows tokens even when usage lands after turn.ended.\n const turn = payload.usage as SessionUsage | undefined;\n if (turn?.currentTurn) {\n const last = lastAssistantMessage();\n const tokens = turn.currentTurn.inputOther + turn.currentTurn.output + turn.currentTurn.inputCacheRead + turn.currentTurn.inputCacheCreation;\n if (last?.turnStats && last.turnStats.status === 'done' && last.turnStats.tokens === null) {\n last.turnStats.tokens = tokens;\n last.turnStats.tokensPerSec = last.turnStats.llmMs ? Math.round((tokens / last.turnStats.llmMs) * 1000) : null;\n }\n }\n }\n status.value = { ...status.value, ...patch };\n break;\n }\n case 'error': {\n error.value = eventErrorMessage(payload.error, 'Unknown error');\n break;\n }\n }\n }\n\n function lastAssistantMessage(): ChatMessage | null {\n for (let i = messages.value.length - 1; i >= 0; i--) {\n if (messages.value[i].role === 'assistant') return messages.value[i];\n }\n return null;\n }\n\n /** Force an immediate reconnect (connection banner \"retry\" button). */\n function reconnectNow(): void {\n if (disposed) return;\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (ws !== null) {\n try {\n ws.close();\n } catch {\n // already closed\n }\n ws = null;\n }\n reconnectAttempt = 0;\n connect();\n }\n\n /** Fetch and prepend an older history page. Returns the number of messages added. */\n async function loadOlderMessages(): Promise<number> {\n const targetSession = sessionId.value;\n const cursor = oldestSeq.value;\n if (!targetSession || cursor === undefined) return 0;\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetSession}/messages?before=${cursor}&tail=50`);\n if (!res.ok) return 0;\n const data = (await res.json()) as { messages: ChatMessage[]; hasMore: boolean };\n if (data.messages.length === 0) return 0;\n const older = data.messages.map((m) => ({ ...m, id: m.id ?? generateId() }));\n messages.value = [...older, ...messages.value];\n oldestSeq.value = older[0]?.seq ?? cursor;\n olderAvailable.value = data.hasMore;\n return older.length;\n } catch {\n return 0;\n }\n }\n\n function connect(): void {\n if (disposed || (ws && (ws.readyState === WebSocket.CONNECTING || ws.readyState === WebSocket.OPEN))) return; setConnectionStatus('connecting');\n error.value = null;\n resetGoalRequestState();\n connectionGeneration++;\n const socket = new WebSocket(wsUrl());\n ws = socket;\n\n socket.onclose = (event) => {\n if (ws !== socket) return;\n ws = null;\n stopHeartbeat();\n if (connectionStatus.value === 'idle') return;\n // 1008 = server rejected the session (deleted or unknown): go idle\n // instead of reconnect-looping; the user picks another session.\n if (event.code === 1008) {\n sessionGeneration++;\n resetGoalRequestState();\n sessionId.value = null;\n currentSessionId.value = null;\n sessionActive.value = false;\n goal.value = null;\n todos.value = [];\n setConnectionStatus('idle');\n return;\n }\n setConnectionStatus('disconnected');\n scheduleReconnect();\n };\n\n socket.onerror = () => {\n if (ws === socket) setConnectionStatus('reconnecting');\n };\n\n socket.onmessage = (e) => {\n if (ws !== socket) return;\n lastPongAt = Date.now();\n let msg: WsMessage;\n try {\n msg = JSON.parse(e.data) as WsMessage;\n } catch {\n return;\n }\n handleMessage(msg);\n };\n }\n\n function sendPrompt(text: string): void {\n if (!text || isBusy.value) return;\n if (connectionStatus.value === 'idle') {\n showToast('暂无会话,请先新建会话。', 'warning');\n return;\n }\n if (connectionStatus.value !== 'connected') {\n showToast('连接已断开,正在尝试重连...', 'error');\n connect();\n return;\n }\n const clientMessageId = `client_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const localMessageId = generateId();\n sentMessageIds.set(clientMessageId, { messageId: localMessageId, connectionGeneration });\n promptGeneration++;\n pendingPromptAccepted = false;\n promptPending.value = true;\n messages.value.push({ id: localMessageId, role: 'user', content: text, clientMessageId, tools: [], ts: Date.now() });\n send({ type: 'prompt', text, clientMessageId });\n }\n\n function abort(): void {\n send({ type: 'abort' });\n }\n\n // ── Slash commands / local message ops ──────────────────────────────────\n\n function sendCommand(command: string, args?: string): void {\n if (connectionStatus.value === 'idle') {\n showToast('暂无会话,请先新建会话。', 'warning');\n return;\n }\n if (connectionStatus.value !== 'connected') {\n showToast('连接已断开,命令未发送。', 'error');\n connect();\n return;\n }\n // Side questions are designed to run during an active turn; other commands\n // mutate session state and must wait until the turn settles.\n if (isBusy.value && command !== 'btw') {\n showToast(`会话忙碌中,无法执行 /${command},请稍后再试。`, 'warning');\n return;\n }\n // Show pending feedback for commands that take time.\n const pendingCommands = ['compact', 'plan', 'auto', 'yes', 'fork', 'title'];\n let pendingMsgId: string | null = null;\n if (pendingCommands.includes(command)) {\n pendingMsgId = generateId();\n messages.value.push({\n id: pendingMsgId,\n role: 'system',\n content: `正在执行 /${command}${args ? ` ${args}` : ''}...`,\n tools: [],\n pending: true,\n ts: Date.now(),\n local: true,\n });\n }\n send({ type: 'command', command, ...(args ? { args } : {}), ...(pendingMsgId ? { pendingMsgId } : {}) });\n }\n\n function clearMessages(): void {\n messages.value = [];\n pendingApprovals.value = [];\n }\n\n function appendSystemMessage(text: string): void {\n messages.value.push({\n id: generateId(),\n role: 'system',\n content: text,\n tools: [],\n ts: Date.now(),\n local: true,\n });\n }\n\n function resolveApproval(id: string, decision: 'approved' | 'rejected', feedback?: string, scope?: 'once' | 'session'): void {\n if (connectionStatus.value !== 'connected') {\n showToast('连接已断开,审批结果未发送。', 'error');\n connect();\n return;\n }\n pendingApprovals.value = pendingApprovals.value.filter((a) => a.id !== id);\n send({ type: 'approval_response', id, decision, ...(feedback ? { feedback } : {}), ...(scope ? { scope } : {}) });\n }\n\n // ── Session management ──────────────────────────────────────────────────\n\n async function fetchSessions(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/sessions`);\n if (!res.ok) return;\n sessions.value = await res.json();\n } catch {\n // Best-effort\n }\n }\n\n async function activateSession(targetSessionId: string): Promise<boolean> {\n const targetSessionGeneration = sessionGeneration;\n const targetConnectionGeneration = connectionGeneration;\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetSessionId}/activate`, { method: 'POST' });\n return res.ok && connectionGeneration === targetConnectionGeneration && isCurrentSessionRequest(\n sessionId.value,\n sessionGeneration,\n targetSessionId,\n targetSessionGeneration,\n );\n } catch {\n // Best-effort — archived sessions may already be active or unknown.\n return false;\n }\n }\n\n async function fetchGitStatus(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/git/status`);\n if (!res.ok) return;\n const gs: GitStatus = await res.json();\n gitStatus.value = gs.isRepo ? gs : null;\n } catch {\n // Best-effort — git status is optional chrome.\n }\n }\n\n // ── Model / thinking switching (TUI /model parity) ────────────────────────\n\n async function fetchModels(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/models`);\n if (!res.ok) return;\n const data: ModelsResponse = await res.json();\n models.value = data.models;\n } catch {\n // Best-effort — model picker stays hidden when unavailable.\n }\n }\n\n // ── Like preferences (TUI /like parity) ──────────────────────────────────\n\n const like = ref<LikePreferences>({});\n\n async function fetchLike(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/like`);\n if (!res.ok) return;\n like.value = (await res.json()) as LikePreferences;\n } catch {\n // Best-effort — like panel stays empty when unavailable.\n }\n }\n\n async function updateLike(prefs: LikePreferences): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE}/like`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(prefs),\n });\n if (!res.ok) return false;\n like.value = prefs;\n return true;\n } catch {\n return false;\n }\n }\n\n /** POST a session mutation and apply the returned status / surface errors. */\n async function postSessionSwitch(path: string, body: Record<string, unknown>, okMessage: string): Promise<void> {\n const targetSessionId = sessionId.value;\n if (!targetSessionId) return;\n const targetSessionGeneration = sessionGeneration;\n const targetConnectionGeneration = connectionGeneration;\n const requestGeneration = ++sessionMutationGeneration;\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetSessionId}/${path}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n const data = (await res.json()) as { status?: SessionStatus; message?: string };\n if (\n sessionId.value !== targetSessionId ||\n sessionGeneration !== targetSessionGeneration ||\n connectionGeneration !== targetConnectionGeneration ||\n sessionMutationGeneration !== requestGeneration\n ) return;\n if (!res.ok) {\n showToast(data.message ?? `请求失败(HTTP ${res.status})`, 'error');\n return;\n }\n if (data.status) {\n status.value = { ...status.value, ...data.status };\n }\n appendSystemMessage(okMessage);\n } catch (error) {\n if (\n sessionId.value !== targetSessionId ||\n sessionGeneration !== targetSessionGeneration ||\n connectionGeneration !== targetConnectionGeneration ||\n sessionMutationGeneration !== requestGeneration\n ) return;\n showToast(`请求失败:${error instanceof Error ? error.message : String(error)}`, 'error');\n }\n }\n\n async function switchModel(alias: string): Promise<void> {\n if (alias === status.value.model) return;\n await postSessionSwitch('model', { model: alias }, `已切换模型:${alias}`);\n }\n\n async function switchThinking(level: string): Promise<void> {\n if (level === status.value.thinkingLevel) return;\n await postSessionSwitch('thinking', { level }, `思考强度已切换为 ${level}`);\n }\n\n async function requestGoal(\n path: string,\n method: 'POST' | 'PATCH',\n body: Record<string, unknown>,\n waitForState: boolean,\n ): Promise<Record<string, unknown> | null> {\n const targetSessionId = sessionId.value;\n if (!targetSessionId) {\n goalRequestError.value = '暂无可操作的会话。';\n return null;\n }\n if (connectionStatus.value !== 'connected') {\n goalRequestError.value = '连接已断开,请等待重连后再试。';\n return null;\n }\n if (isArchived.value) {\n goalRequestError.value = '当前会话已归档,无法修改 Goal。';\n return null;\n }\n if (goalRequestInFlight) {\n goalRequestError.value = '正在处理上一个请求,请稍候。';\n return null;\n }\n if (goalAwaitingMutation !== null) {\n // Stale guard: if waiting too long, clear and allow retry.\n goalAwaitingMutation = null;\n syncGoalRequestPending();\n }\n\n const targetSessionGeneration = sessionGeneration;\n const requestGeneration = ++goalMutationGeneration;\n goalRequestInFlight = true;\n syncGoalRequestPending();\n goalRequestError.value = null;\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetSessionId}/goal${path}`, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n const data = await res.json().catch(() => ({})) as Record<string, unknown>;\n if (\n !isCurrentSessionRequest(\n sessionId.value,\n sessionGeneration,\n targetSessionId,\n targetSessionGeneration,\n ) || goalMutationGeneration !== requestGeneration\n ) return null;\n if (!res.ok) {\n goalRequestError.value = typeof data['message'] === 'string'\n ? data['message']\n : `请求失败(HTTP ${res.status})`;\n return null;\n }\n if (waitForState) {\n goalAwaitingMutation = { generation: requestGeneration };\n snapshotRetryGoalGeneration = requestGeneration;\n }\n return data;\n } catch (requestError) {\n if (\n isCurrentSessionRequest(\n sessionId.value,\n sessionGeneration,\n targetSessionId,\n targetSessionGeneration,\n ) && goalMutationGeneration === requestGeneration\n ) {\n goalRequestError.value = `请求失败:${requestError instanceof Error ? requestError.message : String(requestError)}`;\n }\n return null;\n } finally {\n if (\n isCurrentSessionRequest(\n sessionId.value,\n sessionGeneration,\n targetSessionId,\n targetSessionGeneration,\n ) && goalMutationGeneration === requestGeneration\n ) {\n goalRequestInFlight = false;\n syncGoalRequestPending();\n }\n }\n }\n\n async function refineGoal(description: string): Promise<string | null> {\n const data = await requestGoal('/refine', 'POST', { description }, false);\n return typeof data?.['objective'] === 'string' ? data['objective'] : null;\n }\n\n async function createGoal(request: CreateGoalRequest): Promise<boolean> {\n const data = await requestGoal('', 'POST', buildCreateGoalBody(request), true);\n if (data === null) return false;\n if (goalAwaitingMutation !== null) void fetchSnapshot(goalAwaitingMutation.generation);\n return true;\n }\n\n async function updateGoal(request: UpdateGoalRequest): Promise<boolean> {\n const data = await requestGoal('', 'PATCH', buildUpdateGoalBody(request), true);\n if (data === null) return false;\n if (goalAwaitingMutation !== null) void fetchSnapshot(goalAwaitingMutation.generation);\n return true;\n }\n\n async function runGoalLifecycle(path: '/pause' | '/resume' | '/cancel'): Promise<boolean> {\n const data = await requestGoal(path, 'POST', {}, true);\n if (data === null) return false;\n if (goalAwaitingMutation !== null) void fetchSnapshot(goalAwaitingMutation.generation);\n return true;\n }\n\n function pauseGoal(): Promise<boolean> {\n return runGoalLifecycle('/pause');\n }\n\n function resumeGoal(): Promise<boolean> {\n return runGoalLifecycle('/resume');\n }\n\n function cancelGoal(): Promise<boolean> {\n return runGoalLifecycle('/cancel');\n }\n\n async function createSession(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/sessions`, { method: 'POST' });\n if (!res.ok) {\n showToast(`新建会话失败(HTTP ${res.status})`, 'error');\n return;\n }\n const item: SessionListItem = await res.json();\n sessions.value = [item, ...sessions.value];\n await switchSession(item.sessionId);\n } catch (error) {\n showToast(`新建会话失败:${error instanceof Error ? error.message : String(error)}`, 'error');\n }\n }\n\n async function switchSession(targetId: string): Promise<void> {\n if (currentSessionId.value === targetId && connectionStatus.value === 'connected') return;\n currentSessionId.value = targetId;\n sessionId.value = targetId;\n sessionGeneration++;\n resetGoalRequestState();\n seq = 0;\n epoch = 0;\n messages.value = [];\n pendingApprovals.value = [];\n status.value = { busy: false };\n goal.value = null;\n todos.value = [];\n sessionPlan.value = null;\n skills.value = [];\n plugins.value = [];\n pluginInfo.value = null;\n mcpServers.value = [];\n mcpStartupMetrics.value = null;\n backgroundTasks.value = [];\n backgroundTaskOutput.value = '';\n sessionActive.value = false;\n promptPending.value = false;\n pendingPromptAccepted = false;\n sentMessageIds.clear();\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (snapshotRetryTimer !== null) {\n clearTimeout(snapshotRetryTimer);\n snapshotRetryTimer = null;\n }\n // Close existing connection and reconnect to the new session.\n if (ws) {\n ws.onclose = null;\n ws.close();\n ws = null;\n }\n stopHeartbeat();\n connect();\n }\n\n async function deleteSession(targetId: string): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetId}`, { method: 'DELETE' });\n if (!res.ok) {\n showToast(`删除会话失败(HTTP ${res.status})`, 'error');\n return;\n }\n sessions.value = sessions.value.filter((s) => s.sessionId !== targetId);\n // If we deleted the current session, switch to the first remaining.\n if (currentSessionId.value === targetId) {\n const next = sessions.value[0];\n if (next) {\n await switchSession(next.sessionId);\n } else {\n // No sessions left: go idle instead of silently creating one.\n sessionGeneration++;\n resetGoalRequestState();\n sessionId.value = null;\n currentSessionId.value = null;\n sessionActive.value = false;\n seq = 0;\n epoch = 0;\n messages.value = [];\n pendingApprovals.value = [];\n status.value = { busy: false };\n goal.value = null;\n todos.value = [];\n sessionPlan.value = null;\n skills.value = [];\n plugins.value = [];\n pluginInfo.value = null;\n mcpServers.value = [];\n mcpStartupMetrics.value = null;\n backgroundTasks.value = [];\n backgroundTaskOutput.value = '';\n promptPending.value = false;\n pendingPromptAccepted = false;\n sentMessageIds.clear();\n if (ws) {\n ws.onclose = null;\n ws.close();\n ws = null;\n }\n stopHeartbeat();\n setConnectionStatus('idle');\n }\n }\n } catch (error) {\n showToast(`删除会话失败:${error instanceof Error ? error.message : String(error)}`, 'error');\n }\n }\n\n async function exportSession(targetId: string): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/sessions/${targetId}/export`);\n if (!res.ok) {\n showToast(`导出会话失败(HTTP ${res.status})`, 'error');\n return;\n }\n const blob = await res.blob();\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${targetId}.md`;\n a.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n showToast(`导出会话失败:${error instanceof Error ? error.message : String(error)}`, 'error');\n }\n }\n\n // ── Session-control / resource / global REST methods ────────────────────\n // These mirror the endpoints exposed in server.ts (see apps/scream-code/src/web/README.md).\n\n /** Read-only session-scoped fetches, best-effort (no toast on failure). */\n async function fetchSessionStatus(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/status`);\n if (!res.ok) return;\n const data: SessionStatus = await res.json();\n status.value = { ...status.value, ...data };\n } catch { /* best-effort */ }\n }\n\n async function fetchSessionUsage(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/usage`);\n if (!res.ok) return;\n const usage = (await res.json()) as SessionUsage;\n status.value = { ...status.value, usage };\n } catch { /* best-effort */ }\n }\n\n async function fetchSessionContext(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/context`);\n if (!res.ok) return;\n const ctx = (await res.json()) as AgentContextData;\n if (ctx.tokenCount !== undefined) status.value = { ...status.value, contextTokens: ctx.tokenCount };\n } catch { /* best-effort */ }\n }\n\n async function fetchSessionPlan(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plan`);\n if (!res.ok) return;\n sessionPlan.value = (await res.json()) as SessionPlan;\n } catch { /* best-effort */ }\n }\n\n async function clearPlan(): Promise<boolean> {\n const id = sessionId.value;\n if (!id) return false;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plan/clear`, { method: 'POST' });\n if (!res.ok) return false;\n sessionPlan.value = null;\n return true;\n } catch {\n return false;\n }\n }\n\n /** POST a session-scoped mutation with a boolean result (mode toggles etc). */\n async function postSessionAction(path: string, body?: Record<string, unknown>): Promise<boolean> {\n const id = sessionId.value;\n if (!id) return false;\n if (connectionStatus.value !== 'connected') {\n showToast('连接已断开,操作未发送。', 'error');\n connect();\n return false;\n }\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/${path}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body ?? {}),\n });\n if (!res.ok) {\n const data = (await res.json().catch(() => ({}))) as { message?: string };\n showToast(data.message ?? `操作失败(HTTP ${res.status})`, 'error');\n return false;\n }\n return true;\n } catch (error) {\n showToast(`操作失败:${error instanceof Error ? error.message : String(error)}`, 'error');\n return false;\n }\n }\n\n async function switchPermission(mode: string): Promise<boolean> {\n const ok = await postSessionAction('permission', { mode });\n if (ok) await fetchSessionStatus();\n return ok;\n }\n\n async function switchPlanMode(enabled: boolean, strategy?: 'normal' | 'fusion'): Promise<boolean> {\n const ok = await postSessionAction('plan', { enabled, ...(strategy ? { strategy } : {}) });\n if (ok) await fetchSessionStatus();\n return ok;\n }\n\n async function switchWolfpack(enabled: boolean): Promise<boolean> {\n const ok = await postSessionAction('wolfpack', { enabled });\n if (ok) await fetchSessionStatus();\n return ok;\n }\n\n async function switchRlm(enabled: boolean, maxDepth?: number): Promise<boolean> {\n const ok = await postSessionAction('rlm', { enabled, ...(maxDepth !== undefined ? { maxDepth } : {}) });\n if (ok) await fetchSessionStatus();\n return ok;\n }\n\n async function undoHistory(count = 1): Promise<boolean> {\n return postSessionAction('undo', { count });\n }\n\n async function compact(instruction?: string): Promise<boolean> {\n return postSessionAction('compact', (instruction ? { instruction } : {}));\n }\n\n async function fetchSkills(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/skills`);\n if (!res.ok) return;\n skills.value = (await res.json()) as SkillSummary[];\n } catch { /* best-effort */ }\n }\n\n async function activateSkill(name: string, args?: string): Promise<boolean> {\n return postSessionAction(`skills/${encodeURIComponent(name)}/activate`, (args ? { args } : {}));\n }\n\n async function removeSkill(name: string): Promise<boolean> {\n const id = sessionId.value;\n if (!id) return false;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/skills/${encodeURIComponent(name)}`, { method: 'DELETE' });\n if (!res.ok) return false;\n skills.value = skills.value.filter((s) => s.name !== name);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchPlugins(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plugins`);\n if (!res.ok) return;\n plugins.value = (await res.json()) as PluginSummary[];\n } catch { /* best-effort */ }\n }\n\n async function fetchPluginInfo(pid: string): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plugins/${encodeURIComponent(pid)}`);\n if (!res.ok) return;\n pluginInfo.value = (await res.json()) as PluginInfo;\n } catch { /* best-effort */ }\n }\n\n async function installPlugin(source: string): Promise<PluginSummary | null> {\n const id = sessionId.value;\n if (!id) return null;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plugins/install`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ source }),\n });\n if (!res.ok) return null;\n const plugin = (await res.json()) as PluginSummary;\n await fetchPlugins();\n return plugin;\n } catch {\n return null;\n }\n }\n\n async function setPluginEnabled(pid: string, enabled: boolean): Promise<boolean> {\n return postSessionAction(`plugins/${encodeURIComponent(pid)}/enable`, { enabled });\n }\n\n async function setPluginMcpServerEnabled(pid: string, server: string, enabled: boolean): Promise<boolean> {\n return postSessionAction(`plugins/${encodeURIComponent(pid)}/mcp/${encodeURIComponent(server)}/enable`, { enabled });\n }\n\n async function removePlugin(pid: string): Promise<boolean> {\n const id = sessionId.value;\n if (!id) return false;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plugins/${encodeURIComponent(pid)}`, { method: 'DELETE' });\n if (!res.ok) return false;\n plugins.value = plugins.value.filter((p) => p.id !== pid);\n return true;\n } catch {\n return false;\n }\n }\n\n async function reloadPlugins(): Promise<ReloadSummary | null> {\n const id = sessionId.value;\n if (!id) return null;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/plugins/reload`, { method: 'POST' });\n if (!res.ok) return null;\n const summary = (await res.json()) as ReloadSummary;\n await fetchPlugins();\n return summary;\n } catch {\n return null;\n }\n }\n\n async function activatePlugin(pid: string): Promise<boolean> {\n return postSessionAction(`plugins/${encodeURIComponent(pid)}/activate`);\n }\n\n async function deactivatePlugin(pid: string): Promise<boolean> {\n return postSessionAction(`plugins/${encodeURIComponent(pid)}/deactivate`);\n }\n\n async function injectPlugin(pid: string): Promise<boolean> {\n return postSessionAction(`plugins/${encodeURIComponent(pid)}/inject`);\n }\n\n async function fetchMcpServers(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/mcp`);\n if (!res.ok) return;\n mcpServers.value = (await res.json()) as McpServerInfo[];\n } catch { /* best-effort */ }\n }\n\n async function fetchMcpStartupMetrics(): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/mcp/startup-metrics`);\n if (!res.ok) return;\n mcpStartupMetrics.value = (await res.json()) as McpStartupMetrics;\n } catch { /* best-effort */ }\n }\n\n async function addMcpServer(name: string, config: Record<string, unknown>): Promise<boolean> {\n return postSessionAction('mcp/add', { name, config });\n }\n\n async function reconnectMcpServer(name: string): Promise<boolean> {\n return postSessionAction(`mcp/${encodeURIComponent(name)}/reconnect`);\n }\n\n async function stopMcpServer(name: string): Promise<boolean> {\n return postSessionAction(`mcp/${encodeURIComponent(name)}/stop`);\n }\n\n async function removeMcpServer(name: string): Promise<boolean> {\n const id = sessionId.value;\n if (!id) return false;\n try {\n const res = await fetch(`${API_BASE}/sessions/${id}/mcp/${encodeURIComponent(name)}`, { method: 'DELETE' });\n if (!res.ok) return false;\n mcpServers.value = mcpServers.value.filter((m) => m.name !== name);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchBackgroundTasks(activeOnly?: boolean, limit?: number): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const q = new URLSearchParams();\n if (activeOnly !== undefined) q.set('activeOnly', String(activeOnly));\n if (limit !== undefined) q.set('limit', String(limit));\n const qs = q.toString();\n const res = await fetch(`${API_BASE}/sessions/${id}/tasks${qs ? `?${qs}` : ''}`);\n if (!res.ok) return;\n backgroundTasks.value = (await res.json()) as BackgroundTaskInfo[];\n } catch { /* best-effort */ }\n }\n\n async function fetchBackgroundTaskOutput(taskId: string, tail?: number): Promise<void> {\n const id = sessionId.value;\n if (!id) return;\n try {\n const qs = tail !== undefined ? `?tail=${tail}` : '';\n const res = await fetch(`${API_BASE}/sessions/${id}/tasks/${encodeURIComponent(taskId)}/output${qs}`);\n if (!res.ok) return;\n const data = (await res.json()) as { output: string };\n backgroundTaskOutput.value = data.output;\n } catch { /* best-effort */ }\n }\n\n async function stopBackgroundTask(taskId: string, reason?: string): Promise<boolean> {\n return postSessionAction(`tasks/${encodeURIComponent(taskId)}/stop`, (reason ? { reason } : {}));\n }\n\n // Global (harness-scoped) methods, no session needed.\n async function fetchConfig(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/config`);\n if (!res.ok) return;\n config.value = (await res.json()) as ScreamConfig;\n } catch { /* best-effort */ }\n }\n\n async function setConfig(patch: ScreamConfigPatch): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE}/config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ patch }),\n });\n if (!res.ok) return false;\n config.value = (await res.json()) as ScreamConfig;\n return true;\n } catch {\n return false;\n }\n }\n\n async function removeProvider(providerId: string): Promise<boolean> {\n try {\n const res = await fetch(`${API_BASE}/config/providers/${encodeURIComponent(providerId)}`, { method: 'DELETE' });\n if (!res.ok) return false;\n await fetchConfig();\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchExperimentalFlags(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/experimental-flags`);\n if (!res.ok) return;\n experimentalFlags.value = (await res.json()) as ExperimentalFlagMap;\n } catch { /* best-effort */ }\n }\n\n async function preflight(): Promise<void> {\n try {\n const res = await fetch(`${API_BASE}/preflight`);\n if (!res.ok) return;\n preflightOk.value = true;\n } catch { /* best-effort */ }\n }\n\n // Initial connection.\n connect();\n void fetchSessions();\n void fetchModels();\n\n const handleOnline = () => {\n connect();\n };\n const handleVisibilityChange = () => {\n if (!document.hidden && connectionStatus.value !== 'connected') connect();\n };\n window.addEventListener('online', handleOnline);\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n onBeforeUnmount(() => {\n disposed = true;\n streamDisposed = true;\n streamFlush.dispose();\n window.removeEventListener('online', handleOnline);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n stopHeartbeat();\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (snapshotRetryTimer !== null) {\n clearTimeout(snapshotRetryTimer);\n snapshotRetryTimer = null;\n }\n if (ws) {\n ws.onclose = null;\n ws.close();\n ws = null;\n }\n });\n\n return {\n connectionStatus,\n messages,\n pendingApprovals,\n status,\n goal,\n todos,\n goalRequestPending,\n goalRequestError,\n error,\n sessionId,\n workDir,\n isBusy,\n isArchived,\n sessions,\n currentSessionId,\n gitStatus,\n models,\n like,\n fetchLike,\n updateLike,\n sendPrompt,\n sendCommand,\n clearMessages,\n appendSystemMessage,\n abort,\n resolveApproval,\n fetchSessions,\n fetchGitStatus,\n fetchModels,\n reconnectNow,\n olderAvailable,\n oldestSeq,\n loadOlderMessages,\n switchModel,\n switchThinking,\n refineGoal,\n createGoal,\n updateGoal,\n pauseGoal,\n resumeGoal,\n cancelGoal,\n createSession,\n switchSession,\n deleteSession,\n exportSession,\n fetchSnapshot,\n // Session-control / resource / global exposure (server.ts REST endpoints).\n fetchSessionStatus,\n fetchSessionUsage,\n fetchSessionContext,\n fetchSessionPlan,\n sessionPlan,\n clearPlan,\n switchPermission,\n switchPlanMode,\n switchWolfpack,\n switchRlm,\n undoHistory,\n compact,\n skills,\n fetchSkills,\n activateSkill,\n removeSkill,\n plugins,\n pluginInfo,\n fetchPlugins,\n fetchPluginInfo,\n installPlugin,\n setPluginEnabled,\n setPluginMcpServerEnabled,\n removePlugin,\n reloadPlugins,\n activatePlugin,\n deactivatePlugin,\n injectPlugin,\n mcpServers,\n mcpStartupMetrics,\n fetchMcpServers,\n fetchMcpStartupMetrics,\n addMcpServer,\n reconnectMcpServer,\n stopMcpServer,\n removeMcpServer,\n backgroundTasks,\n backgroundTaskOutput,\n fetchBackgroundTasks,\n fetchBackgroundTaskOutput,\n stopBackgroundTask,\n config,\n fetchConfig,\n setConfig,\n removeProvider,\n experimentalFlags,\n fetchExperimentalFlags,\n preflightOk,\n preflight,\n };\n}\n","/**\n * Slash command definitions shared by Composer (menu) and ChatView (dispatch).\n * Mirrors the TUI equivalents (/compact, /model, /clear, /new, /help) and\n * extends the web with permission/plan/fork/title/status/usage/btw.\n */\n\nexport interface SlashCommand {\n /** Command name without the leading slash. */\n readonly name: string;\n /** Short description shown in the menu. */\n readonly description: string;\n /** Where the command is executed. */\n readonly target: 'backend' | 'local';\n /** Alternative triggers (without the leading slash). */\n readonly aliases?: readonly string[];\n /** Whether the command takes free-form input after the name (e.g. `/title x`). */\n readonly acceptsInput?: boolean;\n}\n\nexport const SLASH_COMMANDS: readonly SlashCommand[] = [\n { name: 'compact', description: '压缩会话上下文', target: 'backend' },\n { name: 'model', description: '切换模型 / 思考强度', target: 'local' },\n { name: 'clear', description: '清空本地消息列表', target: 'local' },\n { name: 'new', description: '新建会话', target: 'local' },\n { name: 'help', description: '显示可用命令', target: 'local' },\n { name: 'auto', description: '切换为 auto 权限模式', target: 'backend' },\n { name: 'yes', description: '切换为 yolo 权限模式', target: 'backend', aliases: ['yolo'] },\n { name: 'plan', description: '切换计划模式', target: 'backend' },\n { name: 'fork', description: '复制当前会话为新分支', target: 'backend' },\n { name: 'title', description: '重命名当前会话', target: 'backend', aliases: ['rename'], acceptsInput: true },\n { name: 'status', description: '查看会话状态', target: 'local' },\n { name: 'usage', description: '查看 Token 用量', target: 'local' },\n { name: 'btw', description: '快速侧问(不打断当前回合)', target: 'backend', acceptsInput: true },\n];\n\nexport function filterSlashCommands(query: string): SlashCommand[] {\n const q = query.toLowerCase();\n return SLASH_COMMANDS.filter(\n (c) => c.name.startsWith(q) || c.aliases?.some((a) => a.startsWith(q)),\n );\n}\n\n/** Resolve a typed token (name or alias) to its canonical command name. */\nexport function resolveCommandName(input: string): string {\n const lower = input.toLowerCase();\n const cmd = SLASH_COMMANDS.find((c) => c.name === lower || c.aliases?.includes(lower));\n return cmd?.name ?? lower;\n}\n\nexport function slashHelpText(): string {\n const lines = SLASH_COMMANDS.map((c) => {\n const names = c.aliases?.length\n ? [c.name, ...c.aliases].map((n) => `/${n}`).join(', ')\n : `/${c.name}`;\n return `${names} - ${c.description}`;\n });\n return ['可用命令:', ...lines].join('\\n');\n}\n","<!-- Reusable button with semantic variants. Replaces ad-hoc .btn classes\n scattered across Composer, ApprovalCard, SessionSidebar, etc. -->\n<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n variant?: 'primary' | 'danger' | 'ghost' | 'secondary';\n size?: 'sm' | 'md';\n disabled?: boolean;\n type?: 'button' | 'submit' | 'reset';\n }>(),\n { variant: 'primary', size: 'md', type: 'button' },\n);\n</script>\n\n<template>\n <button\n class=\"ui-btn\"\n :class=\"[`ui-btn--${variant}`, `ui-btn--${size}`]\"\n :type=\"type\"\n :disabled=\"disabled\"\n >\n <slot />\n </button>\n</template>\n\n<style scoped>\n.ui-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n border: 1px solid transparent;\n border-radius: var(--radius-md);\n font-family: inherit;\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n white-space: nowrap;\n transition:\n background var(--dur-fast) var(--ease-out),\n border-color var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out),\n transform var(--dur-fast) var(--ease-out),\n filter var(--dur-fast) var(--ease-out);\n}\n.ui-btn:focus-visible {\n outline: none;\n box-shadow: var(--glow-focus);\n}\n.ui-btn:not(:disabled):active {\n transform: scale(0.97);\n}\n.ui-btn:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* Sizes */\n.ui-btn--sm {\n padding: var(--space-1) var(--space-3);\n font-size: var(--font-size-sm);\n border-radius: var(--radius-sm);\n}\n.ui-btn--md {\n padding: var(--space-2) var(--space-4);\n font-size: var(--font-size-sm);\n}\n\n/* Variants */\n.ui-btn--primary {\n background: var(--gradient-accent);\n color: var(--color-on-accent);\n border-color: transparent;\n box-shadow: var(--shadow-xs);\n}\n.ui-btn--primary:not(:disabled):hover {\n box-shadow: var(--shadow-sm), var(--glow-accent);\n transform: translateY(-1px);\n}\n.ui-btn--primary:not(:disabled):active {\n transform: translateY(0) scale(0.97);\n box-shadow: var(--shadow-xs);\n}\n\n.ui-btn--danger {\n background: var(--color-danger);\n color: #fff;\n border-color: var(--color-danger);\n box-shadow: var(--shadow-xs);\n}\n.ui-btn--danger:not(:disabled):hover {\n filter: brightness(1.1);\n box-shadow: var(--shadow-sm), 0 0 12px var(--color-danger-soft);\n}\n.ui-btn--danger:not(:disabled):active {\n transform: translateY(0) scale(0.97);\n}\n\n.ui-btn--secondary {\n background: var(--color-surface);\n color: var(--color-accent);\n border-color: var(--color-accent-bd);\n}\n.ui-btn--secondary:not(:disabled):hover {\n background: var(--color-accent-soft);\n border-color: var(--color-accent);\n color: var(--color-accent-hover);\n}\n.ui-btn--secondary:not(:disabled):active {\n transform: translateY(0) scale(0.97);\n}\n\n.ui-btn--ghost {\n background: transparent;\n color: var(--color-text-muted);\n border-color: transparent;\n}\n.ui-btn--ghost:not(:disabled):hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.ui-btn--ghost:not(:disabled):active {\n transform: translateY(0) scale(0.97);\n}\n\n/* Mobile: comfortable touch targets */\n@media (max-width: 640px) {\n .ui-btn--sm,\n .ui-btn--md {\n min-height: 44px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onBeforeUnmount } from 'vue';\nimport type { ApprovalRequest } from '../types';\nimport Button from './ui/Button.vue';\n\nconst props = defineProps<{\n approvals: ApprovalRequest[];\n}>();\n\nconst emit = defineEmits<{\n (e: 'resolve', id: string, decision: 'approved' | 'rejected', feedback?: string, scope?: 'once' | 'session'): void;\n}>();\n\nconst minimized = ref(false);\nconst feedbackOpen = ref(false);\nconst feedbackText = ref('');\n/** Ids the user just acted on, kept until the server confirms removal. */\nconst busyIds = ref<Set<string>>(new Set());\n\nconst current = computed(() => props.approvals[0]);\n\n// Reset per-request UI state when the current request changes; drop resolved busy flags.\nwatch(\n () => props.approvals.map((a) => a.id).join(','),\n () => {\n feedbackOpen.value = false;\n feedbackText.value = '';\n const alive = new Set(props.approvals.map((a) => a.id));\n busyIds.value = new Set([...busyIds.value].filter((id) => alive.has(id)));\n },\n);\n\nfunction displayText(a: ApprovalRequest): string {\n if (typeof a.display === 'string') return a.display;\n if (a.display && typeof a.display === 'object' && 'description' in a.display) {\n return String((a.display as { description?: unknown }).description ?? '');\n }\n return a.action ?? '执行该操作';\n}\n\nfunction isBusy(id: string): boolean {\n return busyIds.value.has(id);\n}\n\nfunction act(decision: 'approved' | 'rejected', feedback?: string, scope?: 'once' | 'session') {\n const req = current.value;\n if (!req || isBusy(req.id)) return;\n busyIds.value = new Set([...busyIds.value, req.id]);\n emit('resolve', req.id, decision, feedback, scope);\n}\n\nfunction submitFeedback() {\n const text = feedbackText.value.trim();\n if (!text) return;\n act('rejected', text);\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n const req = current.value;\n if (!req || minimized.value) return;\n const target = e.target as HTMLElement | null;\n const inField = target && (target.tagName === 'TEXTAREA' || target.tagName === 'INPUT');\n if (inField) {\n // Inside the feedback box, Enter submits; other keys type normally.\n if (feedbackOpen.value && e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submitFeedback();\n }\n return;\n }\n switch (e.key) {\n case '1':\n e.preventDefault();\n act('approved', undefined, 'once');\n break;\n case '2':\n e.preventDefault();\n act('approved', undefined, 'session');\n break;\n case '3':\n e.preventDefault();\n act('rejected');\n break;\n case '4':\n e.preventDefault();\n feedbackOpen.value = !feedbackOpen.value;\n break;\n }\n}\n\nonMounted(() => window.addEventListener('keydown', onKeydown));\nonBeforeUnmount(() => window.removeEventListener('keydown', onKeydown));\n</script>\n\n<template>\n <div v-if=\"approvals.length\" class=\"approval-card\">\n <button v-if=\"minimized\" class=\"approval-minibar\" @click=\"minimized = false\">\n ⚠ {{ approvals.length }} 个待审批请求 — 点击展开\n </button>\n\n <template v-else-if=\"current\">\n <div class=\"approval-header\">\n <span class=\"approval-icon\">⚠</span>\n <span class=\"approval-title\">\n <span class=\"tool-name\">{{ current.toolName }}</span>\n <span class=\"action-summary\">{{ displayText(current) }}</span>\n </span>\n <span v-if=\"approvals.length > 1\" class=\"approval-count\">+{{ approvals.length - 1 }}</span>\n <button class=\"icon-btn\" title=\"最小化\" aria-label=\"最小化\" @click=\"minimized = true\">—</button>\n </div>\n\n <pre class=\"approval-action\">{{ displayText(current) }}</pre>\n\n <div v-if=\"feedbackOpen\" class=\"feedback-area\">\n <textarea\n v-model=\"feedbackText\"\n class=\"feedback-input\"\n rows=\"2\"\n name=\"approval-feedback\"\n aria-label=\"拒绝反馈\"\n placeholder=\"输入反馈,Enter 提交(将作为拒绝原因反馈给 Agent)\"\n />\n </div>\n\n <div class=\"approval-buttons\">\n <Button\n variant=\"primary\"\n :disabled=\"isBusy(current.id)\"\n @click=\"act('approved', undefined, 'once')\"\n >\n <kbd>1</kbd> 批准\n </Button>\n <Button\n variant=\"secondary\"\n :disabled=\"isBusy(current.id)\"\n @click=\"act('approved', undefined, 'session')\"\n >\n <kbd>2</kbd> 会话批准\n </Button>\n <Button\n variant=\"danger\"\n :disabled=\"isBusy(current.id)\"\n @click=\"act('rejected')\"\n >\n <kbd>3</kbd> 拒绝\n </Button>\n <Button\n variant=\"secondary\"\n :class=\"{ 'feedback-active': feedbackOpen }\"\n :disabled=\"isBusy(current.id)\"\n @click=\"feedbackOpen = !feedbackOpen\"\n >\n <kbd>4</kbd> 反馈\n </Button>\n <span v-if=\"isBusy(current.id)\" class=\"busy-indicator\" aria-label=\"处理中\">\n <span class=\"spinner\" /> 处理中…\n </span>\n </div>\n </template>\n </div>\n</template>\n\n<style scoped>\n.approval-card {\n border: 1px solid color-mix(in srgb, var(--color-warning) 45%, var(--color-line));\n border-radius: var(--radius-lg);\n background: var(--color-surface-raised);\n box-shadow: var(--shadow-md);\n overflow: hidden;\n animation: rise-in var(--dur-msg-assistant) var(--ease-out) both;\n}\n@media (prefers-reduced-motion: reduce) {\n .approval-card { animation: none; }\n}\n\n.approval-minibar {\n width: 100%;\n min-height: 44px;\n padding: var(--space-2) var(--space-4);\n background: var(--color-warning-soft);\n color: var(--color-warning);\n border: none;\n font-size: var(--font-size-sm);\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n transition: background var(--dur-fast) var(--ease-out);\n}\n.approval-minibar:hover { background: var(--color-hover); }\n.approval-minibar:active { background: var(--color-selected); }\n\n.approval-header {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n background: var(--color-warning-soft);\n border-bottom: 1px solid color-mix(in srgb, var(--color-warning) 25%, var(--color-line));\n}\n.approval-icon {\n color: var(--color-warning);\n flex-shrink: 0;\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .approval-icon { animation: none; }\n}\n.approval-title {\n display: flex;\n align-items: baseline;\n gap: var(--space-2);\n flex: 1;\n min-width: 0;\n}\n.tool-name {\n font-family: var(--font-mono);\n font-weight: 700;\n font-size: var(--font-size-sm);\n color: var(--color-text);\n flex-shrink: 0;\n}\n.action-summary {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.approval-count {\n flex-shrink: 0;\n font-size: var(--font-size-xs);\n font-weight: 700;\n color: var(--color-warning);\n background: var(--color-warning-soft);\n border: 1px solid color-mix(in srgb, var(--color-warning) 45%, var(--color-line));\n border-radius: var(--radius-full);\n padding: 0 var(--space-2);\n}\n.icon-btn {\n flex-shrink: 0;\n min-height: 44px;\n background: transparent;\n border: none;\n color: var(--color-text-muted);\n cursor: pointer;\n padding: 0 var(--space-2);\n border-radius: var(--radius-sm);\n font-size: var(--font-size-sm);\n line-height: 1.6;\n transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);\n}\n.icon-btn:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.icon-btn:active {\n background: var(--color-selected);\n}\n\n.approval-action {\n margin: var(--space-3);\n margin-bottom: 0;\n padding: var(--space-2) var(--space-3);\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n color: var(--color-text);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.feedback-area {\n padding: var(--space-2) var(--space-3) 0;\n}\n.feedback-input {\n width: 100%;\n background: var(--color-bg);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n padding: var(--space-2) var(--space-3);\n color: var(--color-text);\n font-family: inherit;\n font-size: var(--font-size-sm);\n resize: vertical;\n transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);\n}\n.feedback-input:focus {\n outline: none;\n border-color: var(--color-warning);\n box-shadow: var(--glow-focus);\n}\n\n.approval-buttons {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-3);\n flex-wrap: wrap;\n}\n.approval-buttons kbd {\n font-family: var(--font-mono);\n font-size: 10px;\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-xs);\n padding: 0 var(--space-1);\n margin-right: var(--space-1);\n}\n/* 批准主按钮:渐变 + 光晕(安全关键操作,需被注意到) */\n.approval-buttons :deep(.ui-btn--primary) {\n background: var(--gradient-accent);\n color: var(--color-on-accent);\n border-color: transparent;\n box-shadow: var(--glow-accent);\n}\n.approval-buttons :deep(.ui-btn--primary:not(:disabled):hover) {\n filter: brightness(1.06);\n}\n.approval-buttons :deep(.ui-btn--primary:not(:disabled):active) {\n filter: brightness(0.96);\n transform: translateY(1px);\n}\n.approval-buttons :deep(.ui-btn--primary kbd) {\n background: rgba(0, 0, 0, 0.15);\n border-color: transparent;\n}\n/* 拒绝按钮:danger 语义描边样式 */\n.approval-buttons :deep(.ui-btn--danger) {\n background: transparent;\n color: var(--color-danger);\n border: 1px solid var(--color-danger);\n}\n.approval-buttons :deep(.ui-btn--danger:not(:disabled):hover) {\n background: var(--color-danger-soft);\n}\n.approval-buttons :deep(.ui-btn--danger:not(:disabled):active) {\n background: color-mix(in srgb, var(--color-danger-soft) 60%, var(--color-danger) 12%);\n transform: translateY(1px);\n}\n.feedback-active {\n border-color: var(--color-warning) !important;\n background: var(--color-warning-soft) !important;\n}\n\n.busy-indicator {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n margin-left: auto;\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.spinner {\n width: 12px;\n height: 12px;\n border: 2px solid var(--color-line-strong);\n border-top-color: var(--color-warning);\n border-radius: var(--radius-full);\n animation: spin 0.8s linear infinite;\n}\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n@media (prefers-reduced-motion: reduce) {\n .spinner { animation-duration: 1.6s; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n /** Context usage: fraction 0..1 or percent 0..100. */\n usage?: number;\n size?: number;\n }>(),\n { usage: undefined, size: 16 },\n);\n\nconst fraction = computed(() => {\n if (props.usage === undefined || Number.isNaN(props.usage)) return 0;\n const f = props.usage > 1 ? props.usage / 100 : props.usage;\n return Math.min(1, Math.max(0, f));\n});\n\nconst percent = computed(() => Math.round(fraction.value * 100));\n\nconst strokeWidth = 2;\nconst radius = computed(() => (props.size - strokeWidth) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\nconst dashOffset = computed(() => circumference.value * (1 - fraction.value));\n\nconst tone = computed(() => {\n if (fraction.value >= 0.9) return 'var(--color-danger)';\n if (fraction.value >= 0.7) return 'var(--color-warning)';\n return 'var(--color-accent)';\n});\n</script>\n\n<template>\n <span\n class=\"context-ring\"\n role=\"img\"\n :title=\"`上下文占用 ${percent}%`\"\n :aria-label=\"`上下文占用 ${percent}%`\"\n >\n <svg :width=\"size\" :height=\"size\" :viewBox=\"`0 0 ${size} ${size}`\">\n <circle\n class=\"ring-track\"\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n fill=\"none\"\n />\n <circle\n class=\"ring-value\"\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n fill=\"none\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"dashOffset\"\n :transform=\"`rotate(-90 ${size / 2} ${size / 2})`\"\n />\n </svg>\n </span>\n</template>\n\n<style scoped>\n.context-ring {\n display: inline-flex;\n align-items: center;\n line-height: 0;\n flex-shrink: 0;\n}\n.ring-track {\n stroke: var(--color-line);\n}\n.ring-value {\n stroke: v-bind(tone);\n transition: stroke-dashoffset var(--dur-slow) var(--ease-out), stroke var(--dur-base);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue';\nimport type { ModelInfo } from '../types';\n\n/**\n * Model + thinking-level picker (TUI `/model` selector parity).\n * Opens upward from the composer model pill; grouped by provider, searchable.\n */\nconst props = defineProps<{\n models: ModelInfo[];\n currentModel?: string | undefined;\n currentThinking?: string | undefined;\n}>();\n\nconst emit = defineEmits<{\n (e: 'apply-model', alias: string): void;\n (e: 'apply-thinking', level: string): void;\n (e: 'close'): void;\n}>();\n\nconst DEFAULT_THINKING_LEVELS = ['off', 'low', 'medium', 'high'] as const;\n\nconst THINKING_LABELS: Record<string, string> = {\n off: '关闭',\n low: '低',\n medium: '中',\n high: '高',\n xhigh: '超高',\n max: '最大',\n};\n\nconst query = ref('');\nconst searchRef = ref<HTMLInputElement | null>(null);\n\nonMounted(() => {\n searchRef.value?.focus();\n});\n\nconst filtered = computed(() => {\n const q = query.value.trim().toLowerCase();\n if (!q) return props.models;\n return props.models.filter(\n (m) =>\n m.alias.toLowerCase().includes(q) ||\n m.provider.toLowerCase().includes(q) ||\n (m.displayName ?? '').toLowerCase().includes(q),\n );\n});\n\n/** Group filtered models by provider, preserving config order. */\nconst groups = computed(() => {\n const map = new Map<string, ModelInfo[]>();\n for (const m of filtered.value) {\n const list = map.get(m.provider) ?? [];\n list.push(m);\n map.set(m.provider, list);\n }\n return [...map.entries()].map(([provider, models]) => ({ provider, models }));\n});\n\nconst activeModel = computed(() => props.models.find((m) => m.alias === props.currentModel));\n\nconst thinkingLevels = computed<readonly string[]>(\n () => activeModel.value?.thinkingLevels ?? DEFAULT_THINKING_LEVELS,\n);\n\nfunction thinkingLabel(level: string): string {\n return THINKING_LABELS[level] ?? level;\n}\n\nfunction formatContext(tokens: number): string {\n return tokens >= 1000 ? `${Math.round(tokens / 1000)}k` : String(tokens);\n}\n\nfunction displayName(m: ModelInfo): string {\n return m.displayName ?? m.model;\n}\n\nconst rootRef = ref<HTMLElement | null>(null);\n\nfunction onDocMousedown(e: MouseEvent): void {\n if (rootRef.value && !rootRef.value.contains(e.target as Node)) emit('close');\n}\n\nonMounted(() => document.addEventListener('mousedown', onDocMousedown, true));\nonBeforeUnmount(() => document.removeEventListener('mousedown', onDocMousedown, true));\n\nfunction pick(alias: string) {\n if (alias !== props.currentModel) emit('apply-model', alias);\n emit('close');\n}\n\n/** Keyboard navigation: search ↓ focuses the first row; ↑/↓ cycles row focus. */\nconst listRef = ref<HTMLElement | null>(null);\n\nfunction rowButtons(): HTMLButtonElement[] {\n const root = listRef.value;\n if (!root) return [];\n return Array.from(root.querySelectorAll<HTMLButtonElement>('.picker-row'));\n}\n\nfunction focusFirstRow(): void {\n rowButtons()[0]?.focus();\n}\n\nfunction onListKeydown(e: KeyboardEvent): void {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return;\n const rows = rowButtons();\n if (rows.length === 0) return;\n const idx = rows.indexOf(document.activeElement as HTMLButtonElement);\n e.preventDefault();\n if (idx === -1) {\n rows[0]?.focus();\n } else if (e.key === 'ArrowDown') {\n rows[(idx + 1) % rows.length]?.focus();\n } else {\n rows[(idx - 1 + rows.length) % rows.length]?.focus();\n }\n}\n\nfunction pickThinking(level: string) {\n if (level !== props.currentThinking) emit('apply-thinking', level);\n}\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"model-picker\" role=\"dialog\" aria-label=\"模型选择\" @keydown.esc.stop=\"emit('close')\">\n <input\n ref=\"searchRef\"\n v-model=\"query\"\n class=\"picker-search\"\n type=\"text\"\n placeholder=\"搜索模型…\"\n id=\"model-search-input\"\n name=\"model-search\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n @keydown.arrow-down.prevent=\"focusFirstRow\"\n />\n\n <div ref=\"listRef\" class=\"picker-list\" @keydown=\"onListKeydown\">\n <div v-if=\"groups.length === 0\" class=\"picker-empty\">无匹配模型</div>\n <div v-for=\"group in groups\" :key=\"group.provider\" class=\"picker-group\">\n <div class=\"picker-group-title\">{{ group.provider }}</div>\n <button\n v-for=\"m in group.models\"\n :key=\"m.alias\"\n :class=\"['picker-row', { active: m.alias === currentModel }]\"\n @click=\"pick(m.alias)\"\n >\n <span class=\"row-main\">\n <span class=\"row-name\">{{ displayName(m) }}</span>\n <span class=\"row-alias\">{{ m.alias }}</span>\n </span>\n <span class=\"row-meta\">{{ formatContext(m.maxContextSize) }}</span>\n <span v-if=\"m.alias === currentModel\" class=\"row-check\">✓</span>\n </button>\n </div>\n </div>\n\n <div class=\"picker-thinking\">\n <span class=\"thinking-label\">思考强度</span>\n <div class=\"thinking-options\">\n <button\n v-for=\"level in thinkingLevels\"\n :key=\"level\"\n :class=\"['thinking-btn', { active: level === currentThinking }]\"\n @click=\"pickThinking(level)\"\n >\n {{ thinkingLabel(level) }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.model-picker {\n position: absolute;\n bottom: 100%;\n right: 0;\n margin-bottom: var(--space-2);\n z-index: var(--z-overlay);\n display: flex;\n flex-direction: column;\n width: 320px;\n max-width: calc(100vw - var(--space-8));\n max-height: 60vh;\n background: var(--color-surface-raised);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-xl);\n overflow: hidden;\n animation: rise-in var(--dur-slower) var(--ease-spring);\n}\n\n.picker-search {\n margin: var(--space-2);\n padding: var(--space-2) var(--space-3);\n background: var(--color-bg);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n color: var(--color-text);\n font-size: var(--font-size-sm);\n font-family: inherit;\n transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);\n}\n.picker-search:focus {\n outline: none;\n border-color: var(--color-accent-bd);\n box-shadow: var(--glow-focus);\n}\n.picker-search::placeholder {\n color: var(--color-text-faint);\n}\n\n.picker-list {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n padding: 0 var(--space-2) var(--space-2);\n}\n\n.picker-empty {\n padding: var(--space-4);\n text-align: center;\n color: var(--color-text-faint);\n font-size: var(--font-size-sm);\n}\n\n.picker-group-title {\n padding: var(--space-2) var(--space-2) var(--space-1);\n font-size: var(--font-size-xs);\n font-weight: 600;\n color: var(--color-text-faint);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.picker-row {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n width: 100%;\n padding: var(--space-2);\n border: 1px solid transparent;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text);\n font-size: var(--font-size-sm);\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n transition:\n background var(--dur-fast),\n border-color var(--dur-fast);\n}\n.picker-row:hover {\n background: var(--color-hover);\n}\n.picker-row.active {\n background: var(--color-selected);\n border-color: var(--color-accent-bd);\n}\n.picker-row.active .row-name {\n color: var(--color-accent);\n}\n\n.row-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.row-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.row-alias {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.row-meta {\n flex-shrink: 0;\n font-size: var(--font-size-xs);\n color: var(--color-text-faint);\n}\n.row-check {\n flex-shrink: 0;\n color: var(--color-accent);\n font-weight: 700;\n}\n\n.picker-thinking {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n padding: var(--space-2) var(--space-3);\n border-top: 1px solid var(--color-line);\n background: var(--color-surface);\n}\n.thinking-label {\n flex-shrink: 0;\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.thinking-options {\n display: flex;\n gap: var(--space-1);\n flex-wrap: wrap;\n}\n.thinking-btn {\n padding: 2px 10px;\n border: 1px solid var(--color-line);\n border-radius: var(--radius-full);\n background: var(--color-surface-raised);\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n font-family: inherit;\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n border-color var(--dur-fast) var(--ease-out);\n}\n.thinking-btn:hover {\n border-color: var(--color-line-strong);\n color: var(--color-text);\n background: var(--color-hover);\n}\n.thinking-btn.active {\n background: var(--color-selected);\n border-color: var(--color-accent-bd);\n color: var(--color-accent);\n font-weight: 600;\n}\n\n@media (max-width: 640px) {\n .model-picker {\n left: var(--space-2);\n right: var(--space-2);\n width: auto;\n max-width: calc(100vw - 32px);\n max-height: 70vh;\n }\n .picker-row,\n .thinking-btn {\n min-height: 44px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { SlashCommand } from '../commands';\n\ndefineProps<{\n commands: SlashCommand[];\n activeIndex: number;\n}>();\n\nconst emit = defineEmits<{\n (e: 'select', command: SlashCommand): void;\n (e: 'hover', index: number): void;\n}>();\n</script>\n\n<template>\n <div class=\"slash-menu\" role=\"listbox\" aria-label=\"斜杠命令\">\n <button\n v-for=\"(cmd, i) in commands\"\n :key=\"cmd.name\"\n :class=\"['slash-item', { active: i === activeIndex }]\"\n role=\"option\"\n :aria-selected=\"i === activeIndex\"\n @mousedown.prevent=\"emit('select', cmd)\"\n @mouseenter=\"emit('hover', i)\"\n >\n <span class=\"slash-name\">/{{ cmd.name }}<span v-if=\"cmd.aliases?.length\" class=\"slash-aliases\">{{ cmd.aliases.map((a) => `/${a}`).join(' ') }}</span></span>\n <span class=\"slash-desc\">{{ cmd.description }}</span>\n <span v-if=\"cmd.acceptsInput\" class=\"slash-badge slash-badge-input\">输入参数</span>\n <span v-if=\"cmd.target === 'backend'\" class=\"slash-badge\">服务端</span>\n </button>\n <div class=\"slash-hint\">↑↓ 选择 · Enter/Tab 执行 · Esc 关闭</div>\n </div>\n</template>\n\n<style scoped>\n.slash-menu {\n position: absolute;\n bottom: calc(100% + var(--space-2));\n left: var(--space-4);\n right: var(--space-4);\n max-width: 480px;\n background: var(--color-surface-raised);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-md);\n padding: var(--space-1);\n z-index: var(--z-overlay);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom center;\n animation: rise-in var(--dur-fast) var(--ease-out);\n}\n@media (prefers-reduced-motion: reduce) {\n .slash-menu { animation: none; }\n}\n\n.slash-item {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n width: 100%;\n min-height: 36px;\n padding: var(--space-2) var(--space-3);\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n text-align: left;\n font-size: var(--font-size-sm);\n color: var(--color-text);\n transition: background var(--dur-fast) var(--ease-out);\n}\n.slash-item.active,\n.slash-item:hover {\n background: var(--color-hover);\n}\n.slash-item:active {\n background: var(--color-selected);\n}\n.slash-name {\n font-family: var(--font-mono);\n font-weight: 600;\n color: var(--color-accent);\n flex-shrink: 0;\n}\n.slash-aliases {\n font-weight: 400;\n color: var(--color-text-faint);\n margin-left: var(--space-2);\n font-size: var(--font-size-xs);\n}\n.slash-desc {\n flex: 1;\n color: var(--color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.slash-badge {\n font-size: var(--font-size-xs);\n color: var(--color-info);\n border: 1px solid var(--color-info);\n border-radius: var(--radius-full);\n padding: 0 var(--space-2);\n flex-shrink: 0;\n}\n.slash-badge-input {\n color: var(--color-accent);\n border-color: var(--color-accent-bd);\n background: var(--color-accent-soft);\n}\n.slash-hint {\n padding: var(--space-1) var(--space-3) var(--space-2);\n font-size: var(--font-size-xs);\n color: var(--color-text-faint);\n border-top: 1px solid var(--color-line);\n margin-top: var(--space-1);\n}\n@media (max-width: 640px) {\n .slash-item { min-height: 44px; }\n .slash-desc { white-space: normal; }\n}\n</style>\n","<script setup lang=\"ts\">\nwithDefaults(defineProps<{ name: string; size?: number }>(), { size: 20 });\n</script>\n\n<template>\n <svg\n class=\"svg-icon\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <template v-if=\"name === 'menu'\"><path d=\"M4 7h16M4 12h16M4 17h16\" /></template>\n <template v-else-if=\"name === 'plus'\"><path d=\"M12 5v14M5 12h14\" /></template>\n <template v-else-if=\"name === 'panel-left'\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><path d=\"M9 4v16\" /></template>\n <template v-else-if=\"name === 'panel-right'\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><path d=\"M15 4v16\" /></template>\n <template v-else-if=\"name === 'search'\"><circle cx=\"11\" cy=\"11\" r=\"7\" /><path d=\"m20 20-4-4\" /></template>\n <template v-else-if=\"name === 'filter'\"><path d=\"M4 6h16M7 12h10M10 18h4\" /></template>\n <template v-else-if=\"name === 'download'\"><path d=\"M12 3v12m0 0 4-4m-4 4-4-4M5 20h14\" /></template>\n <template v-else-if=\"name === 'trash'\"><path d=\"M4 7h16M9 7V4h6v3m3 0-1 13H7L6 7m4 4v5m4-5v5\" /></template>\n <template v-else-if=\"name === 'activity'\"><path d=\"M3 12h4l2-7 4 14 2-7h6\" /></template>\n <template v-else-if=\"name === 'help'\"><circle cx=\"12\" cy=\"12\" r=\"9\" /><path d=\"M9.7 9a2.5 2.5 0 1 1 3.5 2.3c-.8.4-1.2 1-1.2 1.7M12 17h.01\" /></template>\n <template v-else-if=\"name === 'chevron-left'\"><path d=\"m15 18-6-6 6-6\" /></template>\n <template v-else-if=\"name === 'chevron-right'\"><path d=\"m9 18 6-6-6-6\" /></template>\n <template v-else-if=\"name === 'chevron-down'\"><path d=\"m6 9 6 6 6-6\" /></template>\n <template v-else-if=\"name === 'bot'\"><rect x=\"4\" y=\"7\" width=\"16\" height=\"12\" rx=\"3\" /><path d=\"M12 3v4M8 12h.01M16 12h.01M9 16h6\" /></template>\n <template v-else-if=\"name === 'git-branch'\"><circle cx=\"6\" cy=\"5\" r=\"2\" /><circle cx=\"18\" cy=\"7\" r=\"2\" /><circle cx=\"6\" cy=\"19\" r=\"2\" /><path d=\"M6 7v10M8 10c5 0 3-3 8-3\" /></template>\n <template v-else-if=\"name === 'sun'\"><circle cx=\"12\" cy=\"12\" r=\"4\" /><path d=\"M12 2v2M12 20v2M4.93 4.93l1.42 1.42m11.3 11.3 1.42 1.42M2 12h2m16 0h2M4.93 19.07l1.42-1.42m11.3-11.3 1.42-1.42\" /></template>\n <template v-else-if=\"name === 'moon'\"><path d=\"M20 15.5A8.5 8.5 0 0 1 8.5 4 8.5 8.5 0 1 0 20 15.5Z\" /></template>\n <template v-else-if=\"name === 'monitor'\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"13\" rx=\"2\" /><path d=\"M8 21h8M12 17v4\" /></template>\n <template v-else-if=\"name === 'wifi'\"><path d=\"M5 9a11 11 0 0 1 14 0M8.5 12.5a6 6 0 0 1 7 0M12 17h.01\" /></template>\n <template v-else-if=\"name === 'edit'\"><path d=\"M12 20h9M16.5 3.5a2.1 2.1 0 0 1 3 3L8 18l-4 1 1-4Z\" /></template>\n <template v-else-if=\"name === 'upload'\"><path d=\"M12 16V4m0 0-4 4m4-4 4 4M5 20h14\" /></template>\n <template v-else-if=\"name === 'broom'\"><path d=\"m15 4 5 5M17.5 6.5 10 14m-2-2 4 4-3 4H3l1-6Z\" /></template>\n <template v-else-if=\"name === 'command'\"><path d=\"M9 6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3Z\" /></template>\n <template v-else-if=\"name === 'at'\"><circle cx=\"12\" cy=\"12\" r=\"4\" /><path d=\"M16 12v1.5a2.5 2.5 0 0 0 5 0V12a9 9 0 1 0-3.5 7\" /></template>\n <template v-else-if=\"name === 'send'\"><path d=\"m22 2-7 20-4-9-9-4ZM22 2 11 13\" /></template>\n <template v-else-if=\"name === 'stop'\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" /></template>\n <template v-else-if=\"name === 'compact'\"><path d=\"m8 3 4 4 4-4M8 21l4-4 4 4M12 7v10\" /></template>\n <template v-else-if=\"name === 'brain'\"><path d=\"M9.5 4.5A3 3 0 0 0 5 7a3 3 0 0 0 .5 5.5A3 3 0 0 0 9 17v2a2 2 0 0 0 4 0V5a2.5 2.5 0 0 0-3.5-.5ZM13 6a3 3 0 0 1 5 2 3 3 0 0 1 .5 5.5A3 3 0 0 1 15 18\" /></template>\n <template v-else-if=\"name === 'clipboard'\"><rect x=\"5\" y=\"4\" width=\"14\" height=\"17\" rx=\"2\" /><path d=\"M9 4V2h6v2M9 10h6M9 14h6\" /></template>\n <template v-else-if=\"name === 'fork'\"><circle cx=\"6\" cy=\"4\" r=\"2\" /><circle cx=\"18\" cy=\"6\" r=\"2\" /><circle cx=\"6\" cy=\"20\" r=\"2\" /><path d=\"M6 6v12M8 10c6 0 4-4 8-4\" /></template>\n <template v-else-if=\"name === 'message-circle'\"><path d=\"M21 12a8 8 0 0 1-9 8 9 9 0 0 1-4-.9L3 21l1.7-4A9 9 0 1 1 21 12Z\" /></template>\n <template v-else-if=\"name === 'tag'\"><path d=\"M20 13 13 20l-9-9V4h7ZM8.5 8.5h.01\" /></template>\n <template v-else-if=\"name === 'sparkles'\"><path d=\"m12 3 1.3 3.7L17 8l-3.7 1.3L12 13l-1.3-3.7L7 8l3.7-1.3ZM5 15l.8 2.2L8 18l-2.2.8L5 21l-.8-2.2L2 18l2.2-.8ZM19 14l.7 1.8 1.8.7-1.8.7L19 19l-.7-1.8-1.8-.7 1.8-.7Z\" /></template>\n <template v-else-if=\"name === 'terminal'\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><path d=\"m7 9 3 3-3 3m5 0h5\" /></template>\n <template v-else-if=\"name === 'folder'\"><path d=\"M3 6h7l2 2h9v11H3Z\" /></template>\n <template v-else-if=\"name === 'check'\"><path d=\"m5 12 4 4L19 6\" /></template>\n <template v-else-if=\"name === 'speaker'\"><path d=\"M11 5 6 9H3v6h3l5 4V5z\" /><path d=\"M15.5 8.5a5 5 0 0 1 0 7\" /><path d=\"M18 6a8.5 8.5 0 0 1 0 12\" /></template>\n <template v-else-if=\"name === 'speaker-off'\"><path d=\"M11 5 6 9H3v6h3l5 4V5z\" /><path d=\"m16 9 5 6M21 9l-5 6\" /></template>\n <template v-else-if=\"name === 'copy'\"><rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" /><path d=\"M16 8V4H4v12h4\" /></template>\n <template v-else-if=\"name === 'refresh'\"><path d=\"M21 12a9 9 0 1 1-2.6-6.4M21 3v6h-6\" /></template>\n <template v-else-if=\"name === 'target'\"><circle cx=\"12\" cy=\"12\" r=\"9\" /><circle cx=\"12\" cy=\"12\" r=\"5\" /><circle cx=\"12\" cy=\"12\" r=\"1\" /></template>\n <template v-else-if=\"name === 'settings'\"><circle cx=\"12\" cy=\"12\" r=\"3\" /><path d=\"M19.4 15a1.7 1.7 0 0 0 .34 1.87l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.7 1.7 0 0 0-1.87-.34 1.7 1.7 0 0 0-1 1.55V21a2 2 0 1 1-4 0v-.09a1.7 1.7 0 0 0-1-1.55 1.7 1.7 0 0 0-1.87.34l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.7 1.7 0 0 0 .34-1.87 1.7 1.7 0 0 0-1.55-1H3a2 2 0 1 1 0-4h.09a1.7 1.7 0 0 0 1.55-1 1.7 1.7 0 0 0-.34-1.87l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.7 1.7 0 0 0 1.87.34h.09a1.7 1.7 0 0 0 1-1.55V3a2 2 0 1 1 4 0v.09a1.7 1.7 0 0 0 1 1.55 1.7 1.7 0 0 0 1.87-.34l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.7 1.7 0 0 0-.34 1.87v.09a1.7 1.7 0 0 0 1.55 1H21a2 2 0 1 1 0 4h-.09a1.7 1.7 0 0 0-1.55 1Z\" /></template>\n <template v-else-if=\"name === 'home'\"><path d=\"M3 10.5 12 3l9 7.5\" /><path d=\"M5 9.5V21h14V9.5\" /></template>\n <template v-else-if=\"name === 'bell'\"><path d=\"M6 9a6 6 0 1 1 12 0c0 5 2 6 2 6H4s2-1 2-6\" /><path d=\"M10 19a2 2 0 0 0 4 0\" /></template>\n <template v-else-if=\"name === 'book'\"><path d=\"M4 5a2 2 0 0 1 2-2h13v18H6a2 2 0 0 0-2 2Z\" /><path d=\"M6 3v18\" /></template>\n <template v-else-if=\"name === 'layers'\"><path d=\"m12 3 9 5-9 5-9-5Z\" /><path d=\"m3 13 9 5 9-5\" /></template>\n <template v-else-if=\"name === 'wrench'\"><path d=\"M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18l3 3 6.3-6.3a4 4 0 0 0 5.4-5.4l-2.5 2.5-3-3Z\" /></template>\n <template v-else-if=\"name === 'arrow-up'\"><path d=\"M12 19V5m0 0-6 6m6-6 6 6\" /></template>\n <template v-else-if=\"name === 'x'\"><path d=\"M18 6 6 18M6 6l12 12\" /></template>\n <template v-else-if=\"name === 'file'\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" /><path d=\"M14 2v6h6\" /></template>\n </svg>\n</template>\n\n<style scoped>\n.svg-icon { display: block; flex: 0 0 auto; }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type { ModelInfo, SessionStatus } from '../types';\nimport { filterSlashCommands, resolveCommandName, type SlashCommand } from '../commands';\nimport ContextRing from './ContextRing.vue';\nimport ModelPicker from './ModelPicker.vue';\nimport SlashMenu from './SlashMenu.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(\n defineProps<{\n busy: boolean;\n status?: SessionStatus;\n sessionId?: string | null;\n models?: ModelInfo[];\n /** 'chat' shows model name + @ 提及; 'home' (workspace central card) shows 通用智能体 + 技能. */\n variant?: 'chat' | 'home';\n placeholder?: string;\n }>(),\n { status: undefined, sessionId: null, models: () => [], variant: 'chat', placeholder: undefined },\n);\n\nconst emit = defineEmits<{\n (e: 'send', text: string): void;\n (e: 'abort'): void;\n (e: 'command', name: string, args?: string): void;\n (e: 'switch-model', alias: string): void;\n (e: 'switch-thinking', level: string): void;\n}>();\n\nconst text = ref('');\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\n/* ── Slash command menu ──────────────────────────────────────────────────── */\nconst slashIndex = ref(0);\n/** Set when the user dismisses the menu with Esc; reset on next input change. */\nconst slashDismissed = ref(false);\n\nconst slashQuery = computed(() => {\n const t = text.value;\n if (!t.startsWith('/') || t.includes('\\n') || /\\s/.test(t.slice(1))) return null;\n return t.slice(1);\n});\n\nconst slashCommands = computed<SlashCommand[]>(() =>\n slashQuery.value === null ? [] : filterSlashCommands(slashQuery.value),\n);\n\nconst slashVisible = computed(\n () => slashQuery.value !== null && slashCommands.value.length > 0 && !slashDismissed.value,\n);\n\nwatch(slashQuery, () => {\n slashIndex.value = 0;\n slashDismissed.value = false;\n});\n\nfunction pickSlashCommand(cmd?: SlashCommand) {\n const chosen = cmd ?? slashCommands.value[slashIndex.value];\n if (!chosen) return;\n if (chosen.acceptsInput) {\n // Keep the command prefix so the user can type arguments, then send.\n // History is recorded when the full `/cmd args` is sent.\n text.value = `/${chosen.name} `;\n slashDismissed.value = true;\n nextTick(() => {\n textareaRef.value?.focus();\n autoResize();\n });\n return;\n }\n pushHistory(`/${chosen.name}`);\n resetInput();\n emit('command', chosen.name);\n}\n\n/* ── Steer queue (messages queued while a turn is running) ───────────────── */\nconst steerQueue = ref<string[]>([]);\n\n// Clear steer queue when switching sessions to prevent cross-session sends.\nwatch(\n () => props.sessionId,\n () => {\n steerQueue.value = [];\n },\n);\n\nwatch(\n () => props.busy,\n (busy) => {\n if (!busy && steerQueue.value.length > 0) {\n const [head, ...rest] = steerQueue.value;\n steerQueue.value = rest;\n if (head) emit('send', head);\n }\n },\n);\n\n/* ── History recall (↑↓, shell-style) ────────────────────────────────────── */\nconst HISTORY_LIMIT = 50;\nconst history = ref<string[]>([]);\nconst historyIndex = ref(-1);\nconst historyStash = ref('');\n\nfunction historyKey(): string {\n return `scream-history:${props.sessionId ?? 'default'}`;\n}\n\nfunction loadHistory() {\n try {\n const raw = localStorage.getItem(historyKey());\n history.value = raw ? (JSON.parse(raw) as string[]) : [];\n } catch {\n history.value = [];\n }\n historyIndex.value = -1;\n}\n\nfunction pushHistory(entry: string) {\n if (history.value.at(-1) !== entry) {\n history.value = [...history.value, entry].slice(-HISTORY_LIMIT);\n try {\n localStorage.setItem(historyKey(), JSON.stringify(history.value));\n } catch {\n // Storage full / unavailable — history is best-effort.\n }\n }\n historyIndex.value = -1;\n historyStash.value = '';\n}\n\nfunction recallHistory(direction: 1 | -1, e: KeyboardEvent) {\n const el = textareaRef.value;\n if (!el) return;\n // Only hijack ↑ on the first line and ↓ on the last line.\n const beforeCursor = el.value.slice(0, el.selectionStart ?? 0);\n const afterCursor = el.value.slice(el.selectionEnd ?? 0);\n if (direction === -1 && beforeCursor.includes('\\n')) return;\n if (direction === 1 && afterCursor.includes('\\n')) return;\n\n if (direction === -1) {\n if (history.value.length === 0) return;\n e.preventDefault();\n if (historyIndex.value === -1) {\n historyStash.value = text.value;\n historyIndex.value = history.value.length - 1;\n } else if (historyIndex.value > 0) {\n historyIndex.value--;\n }\n text.value = history.value[historyIndex.value] ?? '';\n } else {\n if (historyIndex.value === -1) return;\n e.preventDefault();\n if (historyIndex.value < history.value.length - 1) {\n historyIndex.value++;\n text.value = history.value[historyIndex.value] ?? '';\n } else {\n historyIndex.value = -1;\n text.value = historyStash.value;\n }\n }\n nextTick(() => {\n el.selectionStart = el.selectionEnd = el.value.length;\n });\n}\n\n/* ── Draft persistence (per session) ─────────────────────────────────────── */\nfunction draftKey(): string {\n return `scream-draft:${props.sessionId ?? 'default'}`;\n}\n\nlet draftTimer: ReturnType<typeof setTimeout> | undefined;\n\nwatch(text, () => {\n autoResize();\n // Debounce draft persistence so keystrokes do not hit localStorage on every\n // input event.\n clearTimeout(draftTimer);\n draftTimer = setTimeout(() => {\n try {\n if (text.value) localStorage.setItem(draftKey(), text.value);\n else localStorage.removeItem(draftKey());\n } catch {\n // Best-effort.\n }\n }, 300);\n});\n\nwatch(\n () => props.sessionId,\n () => {\n // Drop any pending draft write from the previous session so a stale\n // timer cannot persist the old text under the new session's key.\n clearTimeout(draftTimer);\n loadHistory();\n let draft = '';\n try {\n draft = localStorage.getItem(draftKey()) ?? '';\n } catch {\n draft = '';\n }\n text.value = draft;\n nextTick(autoResize);\n },\n { immediate: true },\n);\n\n/* ── Auto-resize ─────────────────────────────────────────────────────────── */\nfunction autoResize() {\n const el = textareaRef.value;\n if (!el) return;\n el.style.height = 'auto';\n const max = Math.round(window.innerHeight * 0.25);\n el.style.height = `${Math.min(Math.max(el.scrollHeight, 36), max)}px`;\n}\n\n/* ── Mobile keyboard avoidance (visualViewport) ──────────────────────────── */\n// When the on-screen keyboard shrinks the visual viewport, lift the composer\n// by the height difference so it stays reachable above the keyboard.\n// Conservative: guarded by a 'visualViewport' in window check, ignores small\n// viewport shifts (e.g. mobile URL bar collapses), and restores on unmount.\nconst keyboardInset = ref(0);\n\nfunction syncKeyboardInset(): void {\n const vv = window.visualViewport;\n if (!vv) return;\n const diff = Math.round(window.innerHeight - vv.height - vv.offsetTop);\n // Only the keyboard produces a large sustained shrink; smaller diffs are\n // transient chrome changes and are treated as \"no keyboard\".\n keyboardInset.value = diff > 120 ? diff : 0;\n}\n\nif ('visualViewport' in window) {\n onMounted(() => {\n window.visualViewport?.addEventListener('resize', syncKeyboardInset);\n syncKeyboardInset();\n });\n onBeforeUnmount(() => {\n window.visualViewport?.removeEventListener('resize', syncKeyboardInset);\n keyboardInset.value = 0;\n });\n}\n\n/* ── Send / queue / abort ────────────────────────────────────────────────── */\nfunction resetInput() {\n text.value = '';\n nextTick(() => {\n if (textareaRef.value) textareaRef.value.style.height = 'auto';\n });\n}\n\nfunction send() {\n const t = text.value.trim();\n if (!t) return;\n if (t.startsWith('/')) {\n const sp = t.indexOf(' ');\n const raw = (sp === -1 ? t.slice(1) : t.slice(1, sp)).toLowerCase();\n const name = resolveCommandName(raw);\n const args = sp === -1 ? '' : t.slice(sp + 1).trim();\n pushHistory(t);\n emit('command', name, args);\n resetInput();\n return;\n }\n if (props.busy) {\n queueSteer();\n return;\n }\n pushHistory(t);\n emit('send', t);\n resetInput();\n}\n\nfunction queueSteer() {\n const t = text.value.trim();\n if (!t) return;\n steerQueue.value = [...steerQueue.value, t];\n resetInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (slashVisible.value) {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n slashIndex.value = (slashIndex.value - 1 + slashCommands.value.length) % slashCommands.value.length;\n return;\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n slashIndex.value = (slashIndex.value + 1) % slashCommands.value.length;\n return;\n }\n if (e.key === 'Tab' || (e.key === 'Enter' && !e.shiftKey)) {\n if (e.key === 'Enter' && e.isComposing) return;\n e.preventDefault();\n pickSlashCommand();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n slashDismissed.value = true;\n return;\n }\n }\n if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') {\n e.preventDefault();\n queueSteer();\n return;\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n if (e.isComposing) return;\n e.preventDefault();\n send();\n return;\n }\n if (e.key === 'ArrowUp') recallHistory(-1, e);\n else if (e.key === 'ArrowDown') recallHistory(1, e);\n}\n\nfunction abort() {\n steerQueue.value = [];\n emit('abort');\n}\n\n/* ── Edit & resend entry point ───────────────────────────────────────────── */\nfunction insertText(content: string) {\n text.value = content;\n nextTick(() => {\n autoResize();\n textareaRef.value?.focus();\n });\n}\n\n/** Append a trigger token (@ /) and refocus — used by quick-action chips. */\nfunction insertToken(token: string) {\n text.value += token;\n nextTick(() => {\n autoResize();\n textareaRef.value?.focus();\n });\n}\n\ndefineExpose({ insertText, openModelPicker });\n\n/* ── Status pills ────────────────────────────────────────────────────────── */\nconst model = computed(() => props.status?.model);\nconst permission = computed(() => props.status?.permission);\nconst contextUsage = computed(() => props.status?.contextUsage);\n\nconst inputPlaceholder = computed(\n () =>\n props.placeholder ??\n (props.busy\n ? '回合进行中:Enter/Ctrl+S 排队消息,随下一轮注入'\n : '输入消息,@ 提及,/ 触发指令'),\n);\n\n/* ── Model picker (TUI /model parity) ────────────────────────────────────── */\nconst pickerOpen = ref(false);\n\nconst THINKING_LABELS: Record<string, string> = {\n off: '关闭',\n low: '低',\n medium: '中',\n high: '高',\n xhigh: '超高',\n max: '最大',\n};\n\nconst thinkingLevel = computed(() => props.status?.thinkingLevel);\nconst thinkingLabel = computed(() => {\n const level = thinkingLevel.value;\n if (!level || level === 'none') return '';\n return THINKING_LABELS[level] ?? level;\n});\n\n/** Whether the model pill is clickable (models list available from backend). */\nconst modelSwitchable = computed(() => props.models.length > 0);\n\n/** Open the model picker; returns false when no models are configured. */\nfunction openModelPicker(): boolean {\n if (!modelSwitchable.value) return false;\n pickerOpen.value = true;\n return true;\n}\n\nfunction toggleModelPicker() {\n if (!modelSwitchable.value) return;\n pickerOpen.value = !pickerOpen.value;\n}\n\nfunction onApplyModel(alias: string) {\n emit('switch-model', alias);\n}\n\nfunction onApplyThinking(level: string) {\n emit('switch-thinking', level);\n}\n\nconst permissionClass = computed(() => {\n switch (permission.value) {\n case 'auto': return 'perm-auto';\n case 'yolo': return 'perm-yolo';\n default: return 'perm-manual';\n }\n});\n\nconst permissionLabel = computed(() => {\n switch (permission.value) {\n case 'auto': return '自动';\n case 'yolo': return 'YOLO';\n default: return '手动';\n }\n});\n</script>\n\n<template>\n <div class=\"composer\" :style=\"keyboardInset ? { paddingBottom: keyboardInset + 'px' } : undefined\">\n <SlashMenu\n v-if=\"slashVisible\"\n :commands=\"slashCommands\"\n :active-index=\"slashIndex\"\n @select=\"pickSlashCommand\"\n @hover=\"(i) => (slashIndex = i)\"\n />\n <textarea\n ref=\"textareaRef\"\n v-model=\"text\"\n id=\"composer-input\"\n name=\"message\"\n class=\"composer-input\"\n rows=\"1\"\n :placeholder=\"inputPlaceholder\"\n @keydown=\"onKeydown\"\n />\n\n <div class=\"composer-footer\">\n <div class=\"composer-quick-actions\">\n <template v-if=\"variant === 'home'\">\n <button class=\"quick-action\" title=\"插入 / 触发指令\" @click=\"insertToken('/')\"><SvgIcon name=\"command\" :size=\"15\" /><span>技能</span></button>\n </template>\n <template v-else>\n <button class=\"quick-action\" title=\"插入 @ 提及\" @click=\"insertToken('@')\"><SvgIcon name=\"at\" :size=\"15\" /><span>提及</span></button>\n <button class=\"quick-action\" title=\"插入 / 触发指令\" @click=\"insertToken('/')\"><SvgIcon name=\"command\" :size=\"15\" /><span>指令</span></button>\n </template>\n <span v-if=\"permission\" :class=\"['permission-label', permissionClass]\" :title=\"`权限模式:${permission}`\">{{ permissionLabel }}</span>\n <span v-if=\"steerQueue.length\" class=\"queue-label\" title=\"运行结束后自动发送\">已排队 {{ steerQueue.length }} 条</span>\n </div>\n\n <div class=\"composer-actions\">\n <button v-if=\"model\" :class=\"['model-select', { clickable: modelSwitchable }]\" :disabled=\"!modelSwitchable\" :title=\"variant === 'home' ? `当前模型:${model}` : `当前模型:${model}`\" @click=\"toggleModelPicker\">\n <SvgIcon name=\"brain\" :size=\"15\" /><span>{{ variant === 'home' ? '通用智能体' : model }}</span><template v-if=\"variant !== 'home' && thinkingLabel\"> · {{ thinkingLabel }}</template><SvgIcon v-if=\"modelSwitchable\" name=\"chevron-down\" :size=\"12\" />\n </button>\n <Transition name=\"picker\">\n <ModelPicker\n v-if=\"pickerOpen\"\n :models=\"models\"\n :current-model=\"model\"\n :current-thinking=\"thinkingLevel\"\n @apply-model=\"onApplyModel\"\n @apply-thinking=\"onApplyThinking\"\n @close=\"pickerOpen = false\"\n />\n </Transition>\n <span v-if=\"contextUsage !== undefined\" class=\"context-label\" title=\"上下文使用率\"><ContextRing :usage=\"contextUsage\" :size=\"15\" /></span>\n <button v-if=\"busy\" class=\"stop-btn\" title=\"停止当前回合\" @click=\"abort\"><SvgIcon name=\"stop\" :size=\"14\" /><span>停止</span></button>\n <button v-else class=\"send-btn\" :disabled=\"!text.trim()\" title=\"发送 (Enter)\" aria-label=\"发送\" @click=\"send\"><SvgIcon name=\"arrow-up\" :size=\"16\" /></button>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* One bordered surface per region. Everything inside the card is a FLAT\n control (32px tall, radius-md, no border, no fill until hover) so the card\n never contains a second layer of boxes. */\n.composer {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--space-3);\n background: var(--color-surface);\n border: 1px solid var(--color-line-strong);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-xs);\n transition:\n border-color var(--dur-base) var(--ease-out),\n box-shadow var(--dur-base) var(--ease-out);\n}\n.composer:focus-within {\n border-color: var(--color-accent);\n box-shadow: var(--glow-focus);\n}\n\n.composer-input {\n width: 100%;\n min-height: 44px;\n max-height: 25vh;\n padding: 0;\n background: transparent;\n border: none;\n color: var(--color-text);\n font-size: var(--font-size-base);\n font-family: inherit;\n line-height: 1.65;\n resize: none;\n}\n.composer-input:focus {\n outline: none;\n}\n.composer-input::placeholder {\n color: var(--color-text-faint);\n opacity: 0.8;\n}\n\n.composer-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n min-width: 0;\n}\n\n/* Model picker transition */\n.picker-enter-active,\n.picker-leave-active {\n transition:\n opacity var(--dur-base) var(--ease-out),\n transform var(--dur-base) var(--ease-out);\n}\n.picker-enter-from,\n.picker-leave-to {\n opacity: 0;\n transform: translateY(6px);\n}\n\n.composer-quick-actions,\n.composer-actions {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--space-1);\n min-width: 0;\n}\n/* Shared control cell: every footer control is the same box metric —\n 32px tall, radius-md, borderless, transparent until hover. Only buttons and\n status spans; the .model-picker popover must keep its own size. */\n.composer-quick-actions > button,\n.composer-quick-actions > span,\n.composer-actions > button,\n.composer-actions > span {\n height: 32px;\n border-radius: var(--radius-md);\n}\n.composer-quick-actions {\n flex: 1;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.composer-quick-actions::-webkit-scrollbar {\n display: none;\n}\n\n.quick-action {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 0 var(--space-2);\n flex-shrink: 0;\n border: 0;\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n cursor: pointer;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.quick-action:hover {\n color: var(--color-accent);\n background: var(--color-hover);\n}\n.quick-action:active {\n transform: translateY(1px);\n}\n\n/* Status chips: same cell as the buttons, distinguished by tint only — no\n second border layer inside the card. */\n.permission-label,\n.queue-label {\n display: inline-flex;\n align-items: center;\n padding: 0 var(--space-2);\n border: 0;\n color: var(--color-text-muted);\n background: var(--color-accent-soft);\n font-size: var(--font-size-xs);\n white-space: nowrap;\n flex-shrink: 0;\n}\n.permission-label.perm-manual {\n color: var(--color-text-muted);\n background: var(--color-hover);\n}\n.permission-label.perm-auto {\n color: var(--color-success);\n background: var(--color-success-soft);\n}\n.permission-label.perm-yolo {\n color: var(--color-danger);\n background: var(--color-danger-soft);\n}\n\n.model-select {\n max-width: 230px;\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 0 var(--space-2);\n border: 0;\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n white-space: nowrap;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.model-select span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.model-select.clickable {\n cursor: pointer;\n}\n.model-select.clickable:hover {\n color: var(--color-accent);\n background: var(--color-hover);\n}\n.model-select.clickable:active {\n transform: translateY(1px);\n}\n.model-select:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n.context-label {\n display: grid;\n place-items: center;\n flex-shrink: 0;\n}\n\n.send-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n flex-shrink: 0;\n border: none;\n background: var(--color-accent);\n color: var(--color-on-accent);\n cursor: pointer;\n box-shadow: var(--shadow-xs);\n transition:\n box-shadow var(--dur-base) var(--ease-out),\n transform var(--dur-base) var(--ease-out),\n filter var(--dur-base) var(--ease-out),\n opacity var(--dur-base) var(--ease-out);\n}\n.send-btn:hover:not(:disabled) {\n box-shadow: var(--glow-accent), var(--shadow-xs);\n transform: translateY(-1px);\n filter: brightness(1.04);\n}\n.send-btn:active:not(:disabled) {\n transform: translateY(1px);\n box-shadow: var(--shadow-xs);\n filter: brightness(0.97);\n}\n.send-btn:disabled {\n opacity: 0.45;\n cursor: default;\n}\n\n.stop-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 0 var(--space-2);\n flex-shrink: 0;\n border: 0;\n background: var(--color-danger-soft);\n color: var(--color-danger);\n font-size: var(--font-size-xs);\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out);\n}\n.stop-btn:hover {\n background: var(--color-danger);\n color: var(--color-on-accent);\n box-shadow: var(--shadow-xs);\n}\n.stop-btn:active {\n transform: translateY(1px);\n}\n\n@media (max-width: 640px) {\n /* Touch targets grow to 40px; the selector must match the shared 32px rule's\n specificity, otherwise the desktop metric wins and taps stay 32px. */\n .composer-quick-actions > button,\n .composer-quick-actions > span,\n .composer-actions > button,\n .composer-actions > span {\n height: 40px;\n }\n .quick-action span,\n .permission-label,\n .context-label { display: none; }\n .quick-action { min-width: 40px; justify-content: center; }\n .model-select { max-width: 145px; }\n .send-btn { width: 40px; }\n .stop-btn span { display: none; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(\n defineProps<{\n title: string | null;\n busy: boolean;\n drawerOpen: boolean;\n }>(),\n { title: null, busy: false, drawerOpen: false },\n);\n\nconst emit = defineEmits<{\n (e: 'home'): void;\n (e: 'rename', title: string): void;\n (e: 'export'): void;\n (e: 'clear'): void;\n (e: 'toggle-drawer'): void;\n}>();\n\nconst editing = ref(false);\nconst draft = ref('');\n\nfunction startEdit() {\n draft.value = props.title ?? '';\n editing.value = true;\n}\n\nfunction commitEdit() {\n const t = draft.value.trim();\n editing.value = false;\n if (t && t !== props.title) emit('rename', t);\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === 'Enter') {\n e.preventDefault();\n commitEdit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n editing.value = false;\n }\n}\n\nconst statusText = computed(() => (props.busy ? '运行中' : '就绪'));\n</script>\n\n<template>\n <header class=\"conv-bar\">\n <div class=\"conv-bar-left\">\n <button class=\"ghost-btn back-btn\" title=\"返回工作台\" aria-label=\"返回工作台\" @click=\"emit('home')\">\n <SvgIcon name=\"chevron-left\" :size=\"20\" />\n </button>\n <span class=\"status-dot\" :class=\"{ busy }\" :title=\"statusText\" aria-hidden=\"true\" />\n <button\n class=\"title-btn\"\n :title=\"editing ? '' : '点击重命名'\"\n @click=\"startEdit\"\n >\n <template v-if=\"editing\">\n <input\n v-model=\"draft\"\n class=\"title-input\"\n aria-label=\"会话标题\"\n @keydown=\"onKeydown\"\n @blur=\"commitEdit\"\n @click.stop\n />\n </template>\n <template v-else>\n <span class=\"title-text\">{{ title || '新会话' }}</span>\n </template>\n </button>\n </div>\n <div class=\"conv-bar-right\">\n <button class=\"ghost-btn\" title=\"导出 Markdown\" aria-label=\"导出 Markdown\" @click=\"emit('export')\">\n <SvgIcon name=\"download\" :size=\"18\" />\n </button>\n <button class=\"ghost-btn\" title=\"清空本地消息\" aria-label=\"清空本地消息\" @click=\"emit('clear')\">\n <SvgIcon name=\"broom\" :size=\"18\" />\n </button>\n <button\n class=\"ghost-btn\"\n :title=\"drawerOpen ? '收起详情' : '会话详情'\"\n :aria-label=\"drawerOpen ? '收起详情' : '会话详情'\"\n :class=\"{ active: drawerOpen }\"\n @click=\"emit('toggle-drawer')\"\n >\n <SvgIcon name=\"panel-right\" :size=\"18\" />\n </button>\n </div>\n </header>\n</template>\n\n<style scoped>\n.conv-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-2) var(--space-4);\n border-bottom: 1px solid var(--color-line);\n background: transparent;\n min-height: 56px;\n}\n.conv-bar-left,\n.conv-bar-right {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.ghost-btn {\n width: 36px;\n height: 36px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-muted);\n cursor: pointer;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n flex-shrink: 0;\n}\n.ghost-btn:hover {\n color: var(--color-text);\n background: var(--color-hover);\n}\n.ghost-btn.active {\n color: var(--color-accent);\n background: var(--color-accent-soft);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--color-success);\n flex-shrink: 0;\n}\n.status-dot.busy {\n background: var(--color-accent);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n\n.title-btn {\n min-width: 0;\n max-width: min(480px, 55vw);\n height: 36px;\n padding: 0 var(--space-2);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text);\n font-size: var(--font-size-base);\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n transition: background var(--dur-fast) var(--ease-out);\n}\n.title-btn:hover {\n background: var(--color-hover);\n}\n.title-text {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.title-input {\n width: 100%;\n min-width: 160px;\n height: 30px;\n padding: 0 var(--space-2);\n border: 1px solid var(--color-accent-bd);\n border-radius: var(--radius-sm);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-base);\n font-weight: 600;\n font-family: inherit;\n}\n.title-input:focus {\n outline: none;\n box-shadow: var(--glow-focus);\n}\n\n@media (max-width: 640px) {\n .conv-bar {\n min-height: 52px;\n }\n .ghost-btn {\n width: 44px;\n height: 44px;\n }\n .title-btn {\n max-width: 40vw;\n }\n}\n</style>\n","<!-- Reusable modal dialog with Teleport. Replaces ad-hoc overlay patterns\n in TopBar (diff modal) and InfoPanel. -->\n<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n open: boolean;\n title?: string;\n closable?: boolean;\n maxWidth?: string;\n }>(),\n { title: undefined, closable: true, maxWidth: undefined },\n);\n\nconst emit = defineEmits<{ (e: 'close'): void }>();\n\nconst dialogRef = ref<HTMLElement | null>(null);\nlet previouslyFocused: HTMLElement | null = null;\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusables(): HTMLElement[] {\n const root = dialogRef.value;\n if (!root) return [];\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement,\n );\n}\n\nfunction onGlobalKeydown(e: KeyboardEvent) {\n if (!props.open) return;\n if (e.key === 'Escape' && props.closable !== false) {\n e.stopPropagation();\n emit('close');\n return;\n }\n if (e.key !== 'Tab') return;\n // Focus trap: keep Tab cycling inside the dialog while it is open.\n const items = focusables();\n if (items.length === 0) {\n e.preventDefault();\n dialogRef.value?.focus();\n return;\n }\n const first = items[0]!;\n const last = items[items.length - 1]!;\n const active = document.activeElement;\n if (e.shiftKey) {\n if (active === first || !dialogRef.value?.contains(active)) {\n e.preventDefault();\n last.focus();\n }\n } else if (active === last || !dialogRef.value?.contains(active)) {\n e.preventDefault();\n first.focus();\n }\n}\n\nwatch(\n () => props.open,\n (open) => {\n if (open) {\n previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n void nextTick(() => {\n const target = focusables()[0] ?? dialogRef.value;\n target?.focus();\n });\n } else if (previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n },\n { immediate: false },\n);\n\nonMounted(() => window.addEventListener('keydown', onGlobalKeydown, true));\nonBeforeUnmount(() => window.removeEventListener('keydown', onGlobalKeydown, true));\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"dialog\">\n <div v-if=\"open\" class=\"ui-dialog-overlay\" @click.self=\"closable !== false && emit('close')\">\n <div ref=\"dialogRef\" class=\"ui-dialog\" :style=\"maxWidth ? { maxWidth } : undefined\" role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\">\n <div v-if=\"title || $slots.header\" class=\"ui-dialog-header\">\n <slot name=\"header\">\n <span class=\"ui-dialog-title\">{{ title }}</span>\n </slot>\n <button\n v-if=\"closable !== false\"\n class=\"ui-dialog-close\"\n aria-label=\"关闭\"\n @click=\"emit('close')\"\n >✕</button>\n </div>\n <div class=\"ui-dialog-body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"ui-dialog-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style scoped>\n.ui-dialog-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-overlay);\n padding: var(--space-4);\n}\n.ui-dialog {\n width: 100%;\n max-width: 480px;\n max-height: 80vh;\n overflow: auto;\n background: var(--color-surface-raised);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-xl, 0 12px 40px rgba(0, 0, 0, 0.25));\n display: flex;\n flex-direction: column;\n}\n.ui-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--color-line);\n flex-shrink: 0;\n}\n.ui-dialog-title {\n font-size: var(--font-size-base);\n font-weight: 600;\n color: var(--color-text);\n}\n.ui-dialog-close {\n border: none;\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n cursor: pointer;\n padding: var(--space-1);\n border-radius: var(--radius-md);\n line-height: 1;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n transform var(--dur-fast) var(--ease-out);\n}\n.ui-dialog-close:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.ui-dialog-close:not(:disabled):active {\n transform: scale(0.9);\n}\n.ui-dialog-body {\n padding: var(--space-2) var(--space-4) var(--space-4);\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n}\n.ui-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-top: 1px solid var(--color-line);\n flex-shrink: 0;\n}\n\n/* Transition: entrance = rise-in (slower + spring); exit = quiet fade.\n Mirrors the global rise-in primitive: opacity 0→1 + translateY(6px)→0. */\n.dialog-enter-active {\n transition: opacity var(--dur-slower) var(--ease-spring);\n}\n.dialog-leave-active {\n transition: opacity var(--dur-base) var(--ease-out);\n}\n.dialog-enter-active .ui-dialog {\n transition: transform var(--dur-slower) var(--ease-spring), opacity var(--dur-slower) var(--ease-spring);\n}\n.dialog-leave-active .ui-dialog {\n transition: transform var(--dur-base) var(--ease-out), opacity var(--dur-base) var(--ease-out);\n}\n.dialog-enter-from,\n.dialog-leave-to {\n opacity: 0;\n}\n.dialog-enter-from .ui-dialog,\n.dialog-leave-to .ui-dialog {\n transform: translateY(6px);\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { SessionStatus, SessionUsage, TokenUsage } from '../types';\nimport Dialog from './ui/Dialog.vue';\n\nconst props = defineProps<{\n mode: 'status' | 'usage';\n status: SessionStatus;\n sessionId: string | null;\n workDir: string | null;\n}>();\n\nconst emit = defineEmits<{ (e: 'close'): void }>();\n\nconst heading = computed(() => (props.mode === 'status' ? '会话状态' : 'Token 用量'));\n\nfunction permLabel(p?: string): string {\n switch (p) {\n case 'auto': return '自动 (auto)';\n case 'yolo': return 'YOLO';\n case 'manual': return '手动 (manual)';\n default: return p ?? '-';\n }\n}\nfunction boolLabel(v?: boolean): string {\n return v ? '开启' : '关闭';\n}\nfunction present(v: unknown): boolean {\n return v !== undefined && v !== null;\n}\nfunction fmtNum(n?: number): string {\n return typeof n === 'number' ? n.toLocaleString() : '-';\n}\nfunction usagePct(v?: number): string {\n if (typeof v !== 'number') return '-';\n const p = v > 1 ? v : v * 100;\n return `${p.toFixed(1)}%`;\n}\nfunction sumTokens(u?: TokenUsage): number {\n if (!u) return 0;\n return u.inputOther + u.output + u.inputCacheRead + u.inputCacheCreation;\n}\ninterface ModelRow { model: string; tokens: number; output: number; cacheRead: number; }\nfunction modelRows(u?: SessionUsage): ModelRow[] {\n if (!u?.byModel) return [];\n return Object.entries(u.byModel).map(([model, t]) => ({\n model,\n tokens: sumTokens(t),\n output: t.output,\n cacheRead: t.inputCacheRead,\n }));\n}\nconst hasUsage = computed(() => present(props.status.usage) || present(props.status.contextTokens));\n</script>\n\n<template>\n <Dialog :open=\"true\" :title=\"heading\" @close=\"emit('close')\">\n <template v-if=\"mode === 'status'\">\n <div class=\"info-row\"><span class=\"info-key\">会话 ID</span><span class=\"info-val mono\">{{ sessionId ?? '-' }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">工作目录</span><span class=\"info-val mono\">{{ workDir ?? '-' }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">模型</span><span class=\"info-val\">{{ status.model ?? '-' }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">权限模式</span><span class=\"info-val\">{{ permLabel(status.permission) }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">思考级别</span><span class=\"info-val\">{{ status.thinkingLevel ?? '-' }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">计划模式</span><span class=\"info-val\">{{ boolLabel(status.planMode) }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">WolfPack 模式</span><span class=\"info-val\">{{ boolLabel(status.wolfpackMode) }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">上下文</span><span class=\"info-val\">{{ fmtNum(status.contextTokens) }} / {{ fmtNum(status.maxContextTokens) }} ({{ usagePct(status.contextUsage) }})</span></div>\n </template>\n <template v-else>\n <div class=\"info-row\"><span class=\"info-key\">上下文 Token</span><span class=\"info-val\">{{ fmtNum(status.contextTokens) }} / {{ fmtNum(status.maxContextTokens) }}</span></div>\n <div class=\"info-row\"><span class=\"info-key\">上下文占比</span><span class=\"info-val\">{{ usagePct(status.contextUsage) }}</span></div>\n <div v-if=\"status.usage?.total\" class=\"info-row\"><span class=\"info-key\">累计 Token</span><span class=\"info-val\">{{ fmtNum(sumTokens(status.usage.total)) }}</span></div>\n <div v-if=\"status.usage?.currentTurn\" class=\"info-row\"><span class=\"info-key\">当前回合</span><span class=\"info-val\">{{ fmtNum(sumTokens(status.usage.currentTurn)) }}</span></div>\n <template v-if=\"modelRows(status.usage).length\">\n <div class=\"info-subhead\">按模型</div>\n <div v-for=\"row in modelRows(status.usage)\" :key=\"row.model\" class=\"info-row info-row-model\">\n <span class=\"info-val mono\">{{ row.model }}</span>\n <span class=\"info-val\">{{ fmtNum(row.tokens) }}(输出 {{ fmtNum(row.output) }} · 缓存读 {{ fmtNum(row.cacheRead) }})</span>\n </div>\n </template>\n <div v-if=\"!hasUsage\" class=\"info-empty\">暂无用量数据</div>\n </template>\n </Dialog>\n</template>\n\n<style scoped>\n.info-row {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--color-line);\n font-size: var(--font-size-sm);\n}\n.info-row:last-child {\n border-bottom: none;\n}\n.info-row-model {\n justify-content: flex-start;\n flex-direction: column;\n gap: var(--space-1);\n}\n.info-key {\n color: var(--color-text-muted);\n flex-shrink: 0;\n}\n.info-val {\n color: var(--color-text);\n text-align: right;\n word-break: break-all;\n font-variant-numeric: tabular-nums;\n}\n.info-row-model .info-val {\n text-align: left;\n}\n.mono {\n font-family: var(--font-mono);\n}\n.info-subhead {\n margin-top: var(--space-2);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.info-empty {\n padding: var(--space-4);\n text-align: center;\n color: var(--color-text-faint);\n font-size: var(--font-size-sm);\n}\n</style>\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n\n// src/defaults.ts\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = { exec: () => null };\nfunction edit(regex, opt = \"\") {\n let source = typeof regex === \"string\" ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === \"string\" ? val : val.source;\n valSource = valSource.replace(other.caret, \"$1\");\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nvar other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nvar html = edit(\n \"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\n \"i\"\n).replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\nvar gfmTable = edit(\n \"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"\n).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n ...blockNormal,\n html: edit(\n `^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`\n ).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\nvar _punctuation = /[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nvar punctuation = edit(/^((?![*_])punctSpace)/, \"u\").replace(/punctSpace/g, _punctuationOrSpace).getRegex();\nvar _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\nvar blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\n \"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\n \"gu\"\n).replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\n \"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\"\n).replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n _backpedal: noopTest,\n // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\nvar inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\nvar inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace(\"{2,}\", \"*\").getRegex(),\n text: edit(inlineGfm.text).replace(\"\\\\b_\", \"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g, \"*\").getRegex()\n};\nvar block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic\n};\nvar inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic\n};\n\n// src/helpers.ts\nvar escapeReplacements = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n};\nvar getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n if (encode) {\n if (other.escapeTest.test(html2)) {\n return html2.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html2)) {\n return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html2;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, \"%\");\n } catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n if (escaped) {\n return \"|\";\n } else {\n return \" |\";\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push(\"\");\n }\n }\n for (; i < cells.length; i++) {\n cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n }\n return cells;\n}\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return \"\";\n }\n let suffLen = 0;\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n const href = link2.href;\n const title = link2.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n lexer2.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n raw,\n href,\n title,\n text,\n tokens: lexer2.inlineTokens(text)\n };\n lexer2.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text.split(\"\\n\").map((node) => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n options;\n rules;\n // set by the lexer\n lexer;\n // set by the lexer\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: \"space\",\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n return {\n type: \"code\",\n raw: cap[0],\n codeBlockStyle: \"indented\",\n text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n return {\n type: \"code\",\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, \"#\");\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n text = trimmed.trim();\n }\n }\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: \"hr\",\n raw: rtrim(cap[0], \"\\n\")\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n let raw = \"\";\n let text = \"\";\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join(\"\\n\");\n const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n text = text ? `${text}\n${currentText}` : currentText;\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"code\") {\n break;\n } else if (lastToken?.type === \"blockquote\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === \"list\") {\n const oldToken = lastToken;\n const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n continue;\n }\n }\n return {\n type: \"blockquote\",\n raw,\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list2 = {\n type: \"list\",\n raw: \"\",\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : \"\",\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : \"[*+-]\";\n }\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n while (src) {\n let endEarly = false;\n let raw = \"\";\n let itemContents = \"\";\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) {\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, (t) => \" \".repeat(3 * t.length));\n let nextLine = src.split(\"\\n\", 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar);\n indent = indent > 4 ? 1 : indent;\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n raw += nextLine + \"\\n\";\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n while (src) {\n const rawLine = src.split(\"\\n\", 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \" \");\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \" \");\n }\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n } else {\n if (blankLine) {\n break;\n }\n if (line.replace(this.rules.other.tabCharGlobal, \" \").search(this.rules.other.nonSpaceChar) >= 4) {\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += \"\\n\" + nextLine;\n }\n if (!blankLine && !nextLine.trim()) {\n blankLine = true;\n }\n raw += rawLine + \"\\n\";\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list2.loose) {\n if (endsWithBlankLine) {\n list2.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== \"[ ] \";\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n }\n }\n list2.items.push({\n type: \"list_item\",\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list2.raw += raw;\n }\n const lastItem = list2.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n return;\n }\n list2.raw = list2.raw.trimEnd();\n for (let i = 0; i < list2.items.length; i++) {\n this.lexer.state.top = false;\n list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n if (!list2.loose) {\n const spacers = list2.items[i].tokens.filter((t) => t.type === \"space\");\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t) => this.rules.other.anyLine.test(t.raw));\n list2.loose = hasMultipleLineBreaks;\n }\n }\n if (list2.loose) {\n for (let i = 0; i < list2.items.length; i++) {\n list2.items[i].loose = true;\n }\n }\n return list2;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: \"html\",\n block: true,\n raw: cap[0],\n pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n return {\n type: \"def\",\n tag: tag2,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n const item = {\n type: \"table\",\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push(\"right\");\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push(\"center\");\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push(\"left\");\n } else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i]\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i]\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: \"heading\",\n raw: cap[0],\n depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n return {\n type: \"paragraph\",\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: \"escape\",\n raw: cap[0],\n text: cap[1]\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: \"html\",\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n return;\n }\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n const lastParenIndex = findClosingBracket(cap[2], \"()\");\n if (lastParenIndex === -2) {\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = \"\";\n }\n }\n let href = cap[2];\n let title = \"\";\n if (this.options.pedantic) {\n const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n if (link2) {\n href = link2[1];\n title = link2[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : \"\";\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n const link2 = links[linkString.toLowerCase()];\n if (!link2) {\n const text = cap[0].charAt(0);\n return {\n type: \"text\",\n raw: text,\n text\n };\n }\n return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = \"\") {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n const nextChar = match[1] || match[2] || \"\";\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue;\n rLength = [...rDelim].length;\n if (match[3] || match[4]) {\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue;\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0) continue;\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n if (Math.min(lLength, rLength) % 2) {\n const text2 = raw.slice(1, -1);\n return {\n type: \"em\",\n raw,\n text: text2,\n tokens: this.lexer.inlineTokens(text2)\n };\n }\n const text = raw.slice(2, -2);\n return {\n type: \"strong\",\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: \"codespan\",\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: \"br\",\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: \"del\",\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[1];\n href = \"mailto:\" + text;\n } else {\n text = cap[1];\n href = text;\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === \"@\") {\n text = cap[0];\n href = \"mailto:\" + text;\n } else {\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === \"www.\") {\n href = \"http://\" + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: \"link\",\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: \"text\",\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: \"text\",\n raw: cap[0],\n text: cap[0],\n escaped\n };\n }\n }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options2) {\n this.tokens = [];\n this.tokens.links = /* @__PURE__ */ Object.create(null);\n this.options = options2 || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options2) {\n const lexer2 = new __Lexer(options2);\n return lexer2.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, \"\\n\");\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, \" \").replace(other.spaceLine, \"\");\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== void 0) {\n lastToken.raw += \"\\n\";\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += \"\\n\" + token.raw;\n lastToken.text += \"\\n\" + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let maskedSrc = src;\n let match = null;\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = \"\";\n while (src) {\n if (!keepPrevChar) {\n prevChar = \"\";\n }\n keepPrevChar = false;\n let token;\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === \"text\" && lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === \"number\" && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== \"_\") {\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === \"text\") {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n options;\n parser;\n // set by the parser\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n space(token) {\n return \"\";\n }\n code({ text, lang, escaped }) {\n const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n if (!langString) {\n return \"<pre><code>\" + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n return '<pre><code class=\"language-' + escape2(langString) + '\">' + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `<blockquote>\n${body}</blockquote>\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\n`;\n }\n hr(token) {\n return \"<hr>\\n\";\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = \"\";\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? \"ol\" : \"ul\";\n const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n return \"<\" + type + startAttr + \">\\n\" + body + \"</\" + type + \">\\n\";\n }\n listitem(item) {\n let itemBody = \"\";\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === \"paragraph\") {\n item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: \"text\",\n raw: checkbox + \" \",\n text: checkbox + \" \",\n escaped: true\n });\n }\n } else {\n itemBody += checkbox + \" \";\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `<li>${itemBody}</li>\n`;\n }\n checkbox({ checked }) {\n return \"<input \" + (checked ? 'checked=\"\" ' : \"\") + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph({ tokens }) {\n return `<p>${this.parser.parseInline(tokens)}</p>\n`;\n }\n table(token) {\n let header = \"\";\n let cell = \"\";\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = \"\";\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = \"\";\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n return \"<table>\\n<thead>\\n\" + header + \"</thead>\\n\" + body + \"</table>\\n\";\n }\n tablerow({ text }) {\n return `<tr>\n${text}</tr>\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? \"th\" : \"td\";\n const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n return tag2 + content + `</${type}>\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n em({ tokens }) {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n codespan({ text }) {\n return `<code>${escape2(text, true)}</code>`;\n }\n br(token) {\n return \"<br>\";\n }\n del({ tokens }) {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + escape2(title) + '\"';\n }\n out += \">\" + text + \"</a>\";\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape2(text);\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape2(title)}\"`;\n }\n out += \">\";\n return out;\n }\n text(token) {\n return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return \"\" + text;\n }\n image({ text }) {\n return \"\" + text;\n }\n br() {\n return \"\";\n }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n options;\n renderer;\n textRenderer;\n constructor(options2) {\n this.options = options2 || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options2) {\n const parser2 = new __Parser(options2);\n return parser2.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"space\": {\n out += this.renderer.space(token);\n continue;\n }\n case \"hr\": {\n out += this.renderer.hr(token);\n continue;\n }\n case \"heading\": {\n out += this.renderer.heading(token);\n continue;\n }\n case \"code\": {\n out += this.renderer.code(token);\n continue;\n }\n case \"table\": {\n out += this.renderer.table(token);\n continue;\n }\n case \"blockquote\": {\n out += this.renderer.blockquote(token);\n continue;\n }\n case \"list\": {\n out += this.renderer.list(token);\n continue;\n }\n case \"html\": {\n out += this.renderer.html(token);\n continue;\n }\n case \"paragraph\": {\n out += this.renderer.paragraph(token);\n continue;\n }\n case \"text\": {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n textToken = tokens[++i];\n body += \"\\n\" + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: \"paragraph\",\n raw: body,\n text: body,\n tokens: [{ type: \"text\", raw: body, text: body, escaped: true }]\n });\n } else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = \"\";\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n out += ret || \"\";\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case \"escape\": {\n out += renderer.text(token);\n break;\n }\n case \"html\": {\n out += renderer.html(token);\n break;\n }\n case \"link\": {\n out += renderer.link(token);\n break;\n }\n case \"image\": {\n out += renderer.image(token);\n break;\n }\n case \"strong\": {\n out += renderer.strong(token);\n break;\n }\n case \"em\": {\n out += renderer.em(token);\n break;\n }\n case \"codespan\": {\n out += renderer.codespan(token);\n break;\n }\n case \"br\": {\n out += renderer.br(token);\n break;\n }\n case \"del\": {\n out += renderer.del(token);\n break;\n }\n case \"text\": {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return \"\";\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\n// src/Hooks.ts\nvar _Hooks = class {\n options;\n block;\n constructor(options2) {\n this.options = options2 || _defaults;\n }\n static passThroughHooks = /* @__PURE__ */ new Set([\n \"preprocess\",\n \"postprocess\",\n \"processAllTokens\"\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html2) {\n return html2;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n};\n\n// src/Instance.ts\nvar Marked = class {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case \"table\": {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case \"list\": {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens2 = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens2, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n const opts = { ...pack };\n opts.async = this.defaults.async || opts.async || false;\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error(\"extension name required\");\n }\n if (\"renderer\" in ext) {\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n extensions.renderers[ext.name] = function(...args2) {\n let ret = ext.renderer.apply(this, args2);\n if (ret === false) {\n ret = prevRenderer.apply(this, args2);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (\"tokenizer\" in ext) {\n if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) {\n if (ext.level === \"block\") {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === \"inline\") {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (\"childTokens\" in ext && ext.childTokens) {\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if ([\"options\", \"parser\"].includes(prop)) {\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n renderer[rendererProp] = (...args2) => {\n let ret = rendererFunc.apply(renderer, args2);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args2);\n }\n return ret || \"\";\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n tokenizer[tokenizerProp] = (...args2) => {\n let ret = tokenizerFunc.apply(tokenizer, args2);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args2);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if ([\"options\", \"block\"].includes(prop)) {\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => {\n return prevHook.call(hooks, ret2);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n hooks[hooksProp] = (...args2) => {\n let ret = hooksFunc.apply(hooks, args2);\n if (ret === false) {\n ret = prevHook.apply(hooks, args2);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n if (pack.walkTokens) {\n const walkTokens2 = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens2) {\n values = values.concat(walkTokens2.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options2) {\n return _Lexer.lex(src, options2 ?? this.defaults);\n }\n parser(tokens, options2) {\n return _Parser.parse(tokens, options2 ?? this.defaults);\n }\n parseMarkdown(blockType) {\n const parse2 = (src, options2) => {\n const origOpt = { ...options2 };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n }\n if (typeof src === \"undefined\" || src === null) {\n return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n }\n if (typeof src !== \"string\") {\n return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer2(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html2 = parser2(tokens, opt);\n if (opt.hooks) {\n html2 = opt.hooks.postprocess(html2);\n }\n return html2;\n } catch (e) {\n return throwError(e);\n }\n };\n return parse2;\n }\n onError(silent, async) {\n return (e) => {\n e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n if (silent) {\n const msg = \"<p>An error occurred:</p><pre>\" + escape2(e.message + \"\", true) + \"</pre>\";\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function(options2) {\n markedInstance.setOptions(options2);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function(...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\nmarked.walkTokens = function(tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport {\n _Hooks as Hooks,\n _Lexer as Lexer,\n Marked,\n _Parser as Parser,\n _Renderer as Renderer,\n _TextRenderer as TextRenderer,\n _Tokenizer as Tokenizer,\n _defaults as defaults,\n _getDefaults as getDefaults,\n lexer,\n marked,\n options,\n parse,\n parseInline,\n parser,\n setOptions,\n use,\n walkTokens\n};\n//# sourceMappingURL=marked.esm.js.map\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nexport { ShikiError };\n","// src/utils.ts\nfunction clone(something) {\n return doClone(something);\n}\nfunction doClone(something) {\n if (Array.isArray(something)) {\n return cloneArray(something);\n }\n if (something instanceof RegExp) {\n return something;\n }\n if (typeof something === \"object\") {\n return cloneObj(something);\n }\n return something;\n}\nfunction cloneArray(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = doClone(arr[i]);\n }\n return r;\n}\nfunction cloneObj(obj) {\n let r = {};\n for (let key in obj) {\n r[key] = doClone(obj[key]);\n }\n return r;\n}\nfunction mergeObjects(target, ...sources) {\n sources.forEach((source) => {\n for (let key in source) {\n target[key] = source[key];\n }\n });\n return target;\n}\nfunction basename(path) {\n const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n if (idx === 0) {\n return path;\n } else if (~idx === path.length - 1) {\n return basename(path.substring(0, path.length - 1));\n } else {\n return path.substr(~idx + 1);\n }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n static hasCaptures(regexSource) {\n if (regexSource === null) {\n return false;\n }\n CAPTURING_REGEX_SOURCE.lastIndex = 0;\n return CAPTURING_REGEX_SOURCE.test(regexSource);\n }\n static replaceCaptures(regexSource, captureSource, captureIndices) {\n return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n let capture = captureIndices[parseInt(index || commandIndex, 10)];\n if (capture) {\n let result = captureSource.substring(capture.start, capture.end);\n while (result[0] === \".\") {\n result = result.substring(1);\n }\n switch (command) {\n case \"downcase\":\n return result.toLowerCase();\n case \"upcase\":\n return result.toUpperCase();\n default:\n return result;\n }\n } else {\n return match;\n }\n });\n }\n};\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nfunction strArrCmp(a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (!a) {\n return -1;\n }\n if (!b) {\n return 1;\n }\n let len1 = a.length;\n let len2 = b.length;\n if (len1 === len2) {\n for (let i = 0; i < len1; i++) {\n let res = strcmp(a[i], b[i]);\n if (res !== 0) {\n return res;\n }\n }\n return 0;\n }\n return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{8}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{3}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{4}$/i.test(hex)) {\n return true;\n }\n return false;\n}\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n constructor(fn) {\n this.fn = fn;\n }\n cache = /* @__PURE__ */ new Map();\n get(key) {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n const value = this.fn(key);\n this.cache.set(key, value);\n return value;\n }\n};\n\n// src/theme.ts\nvar Theme = class {\n constructor(_colorMap, _defaults, _root) {\n this._colorMap = _colorMap;\n this._defaults = _defaults;\n this._root = _root;\n }\n static createFromRawTheme(source, colorMap) {\n return this.createFromParsedTheme(parseTheme(source), colorMap);\n }\n static createFromParsedTheme(source, colorMap) {\n return resolveParsedThemeRules(source, colorMap);\n }\n _cachedMatchRoot = new CachedFn(\n (scopeName) => this._root.match(scopeName)\n );\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n getDefaults() {\n return this._defaults;\n }\n match(scopePath) {\n if (scopePath === null) {\n return this._defaults;\n }\n const scopeName = scopePath.scopeName;\n const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n const effectiveRule = matchingTrieElements.find(\n (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n );\n if (!effectiveRule) {\n return null;\n }\n return new StyleAttributes(\n effectiveRule.fontStyle,\n effectiveRule.foreground,\n effectiveRule.background\n );\n }\n};\nvar ScopeStack = class _ScopeStack {\n constructor(parent, scopeName) {\n this.parent = parent;\n this.scopeName = scopeName;\n }\n static push(path, scopeNames) {\n for (const name of scopeNames) {\n path = new _ScopeStack(path, name);\n }\n return path;\n }\n static from(...segments) {\n let result = null;\n for (let i = 0; i < segments.length; i++) {\n result = new _ScopeStack(result, segments[i]);\n }\n return result;\n }\n push(scopeName) {\n return new _ScopeStack(this, scopeName);\n }\n getSegments() {\n let item = this;\n const result = [];\n while (item) {\n result.push(item.scopeName);\n item = item.parent;\n }\n result.reverse();\n return result;\n }\n toString() {\n return this.getSegments().join(\" \");\n }\n extends(other) {\n if (this === other) {\n return true;\n }\n if (this.parent === null) {\n return false;\n }\n return this.parent.extends(other);\n }\n getExtensionIfDefined(base) {\n const result = [];\n let item = this;\n while (item && item !== base) {\n result.push(item.scopeName);\n item = item.parent;\n }\n return item === base ? result.reverse() : void 0;\n }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n if (parentScopes.length === 0) {\n return true;\n }\n for (let index = 0; index < parentScopes.length; index++) {\n let scopePattern = parentScopes[index];\n let scopeMustMatch = false;\n if (scopePattern === \">\") {\n if (index === parentScopes.length - 1) {\n return false;\n }\n scopePattern = parentScopes[++index];\n scopeMustMatch = true;\n }\n while (scopePath) {\n if (_matchesScope(scopePath.scopeName, scopePattern)) {\n break;\n }\n if (scopeMustMatch) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n if (!scopePath) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n constructor(fontStyle, foregroundId, backgroundId) {\n this.fontStyle = fontStyle;\n this.foregroundId = foregroundId;\n this.backgroundId = backgroundId;\n }\n};\nfunction parseTheme(source) {\n if (!source) {\n return [];\n }\n if (!source.settings || !Array.isArray(source.settings)) {\n return [];\n }\n let settings = source.settings;\n let result = [], resultLen = 0;\n for (let i = 0, len = settings.length; i < len; i++) {\n let entry = settings[i];\n if (!entry.settings) {\n continue;\n }\n let scopes;\n if (typeof entry.scope === \"string\") {\n let _scope = entry.scope;\n _scope = _scope.replace(/^[,]+/, \"\");\n _scope = _scope.replace(/[,]+$/, \"\");\n scopes = _scope.split(\",\");\n } else if (Array.isArray(entry.scope)) {\n scopes = entry.scope;\n } else {\n scopes = [\"\"];\n }\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.settings.fontStyle === \"string\") {\n fontStyle = 0 /* None */;\n let segments = entry.settings.fontStyle.split(\" \");\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case \"italic\":\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case \"bold\":\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case \"underline\":\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n case \"strikethrough\":\n fontStyle = fontStyle | 8 /* Strikethrough */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n foreground = entry.settings.foreground;\n }\n let background = null;\n if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n background = entry.settings.background;\n }\n for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n let _scope = scopes[j].trim();\n let segments = _scope.split(\" \");\n let scope = segments[segments.length - 1];\n let parentScopes = null;\n if (segments.length > 1) {\n parentScopes = segments.slice(0, segments.length - 1);\n parentScopes.reverse();\n }\n result[resultLen++] = new ParsedThemeRule(\n scope,\n parentScopes,\n i,\n fontStyle,\n foreground,\n background\n );\n }\n }\n return result;\n}\nvar ParsedThemeRule = class {\n constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n this.scope = scope;\n this.parentScopes = parentScopes;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.scope, b.scope);\n if (r !== 0) {\n return r;\n }\n r = strArrCmp(a.parentScopes, b.parentScopes);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = \"#000000\";\n let defaultBackground = \"#ffffff\";\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap(_colorMap);\n let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n _isFrozen;\n _lastColorId;\n _id2color;\n _color2id;\n constructor(_colorMap) {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = /* @__PURE__ */ Object.create(null);\n if (Array.isArray(_colorMap)) {\n this._isFrozen = true;\n for (let i = 0, len = _colorMap.length; i < len; i++) {\n this._color2id[_colorMap[i]] = i;\n this._id2color[i] = _colorMap[i];\n }\n } else {\n this._isFrozen = false;\n }\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n color = color.toUpperCase();\n let value = this._color2id[color];\n if (value) {\n return value;\n }\n if (this._isFrozen) {\n throw new Error(`Missing color in color map - ${color}`);\n }\n value = ++this._lastColorId;\n this._color2id[color] = value;\n this._id2color[value] = color;\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n scopeDepth;\n parentScopes;\n fontStyle;\n foreground;\n background;\n constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n this.scopeDepth = scopeDepth;\n this.parentScopes = parentScopes || emptyParentScopes;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n clone() {\n return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n }\n static cloneArr(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = arr[i].clone();\n }\n return r;\n }\n acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n if (this.scopeDepth > scopeDepth) {\n console.log(\"how did this happen?\");\n } else {\n this.scopeDepth = scopeDepth;\n }\n if (fontStyle !== -1 /* NotSet */) {\n this.fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n this.foreground = foreground;\n }\n if (background !== 0) {\n this.background = background;\n }\n }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n this._mainRule = _mainRule;\n this._children = _children;\n this._rulesWithParentScopes = rulesWithParentScopes;\n }\n _rulesWithParentScopes;\n static _cmpBySpecificity(a, b) {\n if (a.scopeDepth !== b.scopeDepth) {\n return b.scopeDepth - a.scopeDepth;\n }\n let aParentIndex = 0;\n let bParentIndex = 0;\n while (true) {\n if (a.parentScopes[aParentIndex] === \">\") {\n aParentIndex++;\n }\n if (b.parentScopes[bParentIndex] === \">\") {\n bParentIndex++;\n }\n if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n break;\n }\n const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n if (parentScopeLengthDiff !== 0) {\n return parentScopeLengthDiff;\n }\n aParentIndex++;\n bParentIndex++;\n }\n return b.parentScopes.length - a.parentScopes.length;\n }\n match(scope) {\n if (scope !== \"\") {\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n if (this._children.hasOwnProperty(head)) {\n return this._children[head].match(tail);\n }\n }\n const rules = this._rulesWithParentScopes.concat(this._mainRule);\n rules.sort(_ThemeTrieElement._cmpBySpecificity);\n return rules;\n }\n insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n if (scope === \"\") {\n this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n return;\n }\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n let child;\n if (this._children.hasOwnProperty(head)) {\n child = this._children[head];\n } else {\n child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n this._children[head] = child;\n }\n child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n }\n _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n if (parentScopes === null) {\n this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n let rule = this._rulesWithParentScopes[i];\n if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n }\n if (fontStyle === -1 /* NotSet */) {\n fontStyle = this._mainRule.fontStyle;\n }\n if (foreground === 0) {\n foreground = this._mainRule.foreground;\n }\n if (background === 0) {\n background = this._mainRule.background;\n }\n this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n static toBinaryStr(encodedTokenAttributes) {\n return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n }\n static print(encodedTokenAttributes) {\n const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n console.log({\n languageId,\n tokenType,\n fontStyle,\n foreground,\n background\n });\n }\n static getLanguageId(encodedTokenAttributes) {\n return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(encodedTokenAttributes) {\n return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static containsBalancedBrackets(encodedTokenAttributes) {\n return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n }\n static getFontStyle(encodedTokenAttributes) {\n return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n }\n static getBackground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n }\n /**\n * Updates the fields in `metadata`.\n * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n */\n static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n if (languageId !== 0) {\n _languageId = languageId;\n }\n if (tokenType !== 8 /* NotSet */) {\n _tokenType = fromOptionalTokenType(tokenType);\n }\n if (containsBalancedBrackets !== null) {\n _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n }\n if (fontStyle !== -1 /* NotSet */) {\n _fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n _foreground = foreground;\n }\n if (background !== 0) {\n _background = background;\n }\n return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n }\n};\nfunction toOptionalTokenType(standardType) {\n return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n const results = [];\n const tokenizer = newTokenizer(selector);\n let token = tokenizer.next();\n while (token !== null) {\n let priority = 0;\n if (token.length === 2 && token.charAt(1) === \":\") {\n switch (token.charAt(0)) {\n case \"R\":\n priority = 1;\n break;\n case \"L\":\n priority = -1;\n break;\n default:\n console.log(`Unknown priority ${token} in scope selector`);\n }\n token = tokenizer.next();\n }\n let matcher = parseConjunction();\n results.push({ matcher, priority });\n if (token !== \",\") {\n break;\n }\n token = tokenizer.next();\n }\n return results;\n function parseOperand() {\n if (token === \"-\") {\n token = tokenizer.next();\n const expressionToNegate = parseOperand();\n return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n }\n if (token === \"(\") {\n token = tokenizer.next();\n const expressionInParents = parseInnerExpression();\n if (token === \")\") {\n token = tokenizer.next();\n }\n return expressionInParents;\n }\n if (isIdentifier(token)) {\n const identifiers = [];\n do {\n identifiers.push(token);\n token = tokenizer.next();\n } while (isIdentifier(token));\n return (matcherInput) => matchesName(identifiers, matcherInput);\n }\n return null;\n }\n function parseConjunction() {\n const matchers = [];\n let matcher = parseOperand();\n while (matcher) {\n matchers.push(matcher);\n matcher = parseOperand();\n }\n return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n }\n function parseInnerExpression() {\n const matchers = [];\n let matcher = parseConjunction();\n while (matcher) {\n matchers.push(matcher);\n if (token === \"|\" || token === \",\") {\n do {\n token = tokenizer.next();\n } while (token === \"|\" || token === \",\");\n } else {\n break;\n }\n matcher = parseConjunction();\n }\n return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n }\n}\nfunction isIdentifier(token) {\n return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n let match = regex.exec(input);\n return {\n next: () => {\n if (!match) {\n return null;\n }\n const res = match[0];\n match = regex.exec(input);\n return res;\n }\n };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n if (typeof str.dispose === \"function\") {\n str.dispose();\n }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n toKey() {\n return this.scopeName;\n }\n};\nvar TopLevelRepositoryRuleReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n toKey() {\n return `${this.scopeName}#${this.ruleName}`;\n }\n};\nvar ExternalReferenceCollector = class {\n _references = [];\n _seenReferenceKeys = /* @__PURE__ */ new Set();\n get references() {\n return this._references;\n }\n visitedRule = /* @__PURE__ */ new Set();\n add(reference) {\n const key = reference.toKey();\n if (this._seenReferenceKeys.has(key)) {\n return;\n }\n this._seenReferenceKeys.add(key);\n this._references.push(reference);\n }\n};\nvar ScopeDependencyProcessor = class {\n constructor(repo, initialScopeName) {\n this.repo = repo;\n this.initialScopeName = initialScopeName;\n this.seenFullScopeRequests.add(this.initialScopeName);\n this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n }\n seenFullScopeRequests = /* @__PURE__ */ new Set();\n seenPartialScopeRequests = /* @__PURE__ */ new Set();\n Q;\n processQueue() {\n const q = this.Q;\n this.Q = [];\n const deps = new ExternalReferenceCollector();\n for (const dep of q) {\n collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n }\n for (const dep of deps.references) {\n if (dep instanceof TopLevelRuleReference) {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n this.seenFullScopeRequests.add(dep.scopeName);\n this.Q.push(dep);\n } else {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n if (this.seenPartialScopeRequests.has(dep.toKey())) {\n continue;\n }\n this.seenPartialScopeRequests.add(dep.toKey());\n this.Q.push(dep);\n }\n }\n }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n const selfGrammar = repo.lookup(reference.scopeName);\n if (!selfGrammar) {\n if (reference.scopeName === baseGrammarScopeName) {\n throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n }\n return;\n }\n const baseGrammar = repo.lookup(baseGrammarScopeName);\n if (reference instanceof TopLevelRuleReference) {\n collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n } else {\n collectExternalReferencesInTopLevelRepositoryRule(\n reference.ruleName,\n { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n result\n );\n }\n const injections = repo.injections(reference.scopeName);\n if (injections) {\n for (const injection of injections) {\n result.add(new TopLevelRuleReference(injection));\n }\n }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n if (context.repository && context.repository[ruleName]) {\n const rule = context.repository[ruleName];\n collectExternalReferencesInRules([rule], context, result);\n }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n collectExternalReferencesInRules(\n context.selfGrammar.patterns,\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n if (context.selfGrammar.injections) {\n collectExternalReferencesInRules(\n Object.values(context.selfGrammar.injections),\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n for (const rule of rules) {\n if (result.visitedRule.has(rule)) {\n continue;\n }\n result.visitedRule.add(rule);\n const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n if (Array.isArray(rule.patterns)) {\n collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n }\n const include = rule.include;\n if (!include) {\n continue;\n }\n const reference = parseInclude(include);\n switch (reference.kind) {\n case 0 /* Base */:\n collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n break;\n case 1 /* Self */:\n collectExternalReferencesInTopLevelRule(context, result);\n break;\n case 2 /* RelativeReference */:\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n if (selfGrammar) {\n const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n } else {\n collectExternalReferencesInTopLevelRule(newContext, result);\n }\n } else {\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n } else {\n result.add(new TopLevelRuleReference(reference.scopeName));\n }\n }\n break;\n }\n }\n}\nvar BaseReference = class {\n kind = 0 /* Base */;\n};\nvar SelfReference = class {\n kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n constructor(ruleName) {\n this.ruleName = ruleName;\n }\n kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n if (include === \"$base\") {\n return new BaseReference();\n } else if (include === \"$self\") {\n return new SelfReference();\n }\n const indexOfSharp = include.indexOf(\"#\");\n if (indexOfSharp === -1) {\n return new TopLevelReference(include);\n } else if (indexOfSharp === 0) {\n return new RelativeReference(include.substring(1));\n } else {\n const scopeName = include.substring(0, indexOfSharp);\n const ruleName = include.substring(indexOfSharp + 1);\n return new TopLevelRepositoryReference(scopeName, ruleName);\n }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n return id;\n}\nfunction ruleIdToNumber(id) {\n return id;\n}\nvar Rule = class {\n $location;\n id;\n _nameIsCapturing;\n _name;\n _contentNameIsCapturing;\n _contentName;\n constructor($location, id, name, contentName) {\n this.$location = $location;\n this.id = id;\n this._name = name || null;\n this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n this._contentName = contentName || null;\n this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n }\n get debugName() {\n const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n return `${this.constructor.name}#${this.id} @ ${location}`;\n }\n getName(lineText, captureIndices) {\n if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n return this._name;\n }\n return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n }\n getContentName(lineText, captureIndices) {\n if (!this._contentNameIsCapturing || this._contentName === null) {\n return this._contentName;\n }\n return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n }\n};\nvar CaptureRule = class extends Rule {\n retokenizeCapturedWithRuleId;\n constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n super($location, id, name, contentName);\n this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n }\n dispose() {\n }\n collectPatterns(grammar, out) {\n throw new Error(\"Not supported!\");\n }\n compile(grammar, endRegexSource) {\n throw new Error(\"Not supported!\");\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n throw new Error(\"Not supported!\");\n }\n};\nvar MatchRule = class extends Rule {\n _match;\n captures;\n _cachedCompiledPatterns;\n constructor($location, id, name, match, captures) {\n super($location, id, name, null);\n this._match = new RegExpSource(match, this.id);\n this.captures = captures;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugMatchRegExp() {\n return `${this._match.source}`;\n }\n collectPatterns(grammar, out) {\n out.push(this._match);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar IncludeOnlyRule = class extends Rule {\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, patterns) {\n super($location, id, name, contentName);\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n collectPatterns(grammar, out) {\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, out);\n }\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginEndRule = class extends Rule {\n _begin;\n beginCaptures;\n _end;\n endHasBackReferences;\n endCaptures;\n applyEndPatternLast;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n this.endHasBackReferences = this._end.hasBackReferences;\n this.endCaptures = endCaptures;\n this.applyEndPatternLast = applyEndPatternLast || false;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugEndRegExp() {\n return `${this._end.source}`;\n }\n getEndWithResolvedBackReferences(lineText, captureIndices) {\n return this._end.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n } else {\n this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n }\n }\n if (this._end.hasBackReferences) {\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n } else {\n this._cachedCompiledPatterns.setSource(0, endRegexSource);\n }\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginWhileRule = class extends Rule {\n _begin;\n beginCaptures;\n whileCaptures;\n _while;\n whileHasBackReferences;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n _cachedCompiledWhilePatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this.whileCaptures = whileCaptures;\n this._while = new RegExpSource(_while, whileRuleId);\n this.whileHasBackReferences = this._while.hasBackReferences;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n this._cachedCompiledWhilePatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n if (this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns.dispose();\n this._cachedCompiledWhilePatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugWhileRegExp() {\n return `${this._while.source}`;\n }\n getWhileWithResolvedBackReferences(lineText, captureIndices) {\n return this._while.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n }\n return this._cachedCompiledPatterns;\n }\n compileWhile(grammar, endRegexSource) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n }\n compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns = new RegExpSourceList();\n this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n }\n if (this._while.hasBackReferences) {\n this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n }\n return this._cachedCompiledWhilePatterns;\n }\n};\nvar RuleFactory = class _RuleFactory {\n static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n return helper.registerRule((id) => {\n return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n });\n }\n static getCompiledRuleId(desc, helper, repository) {\n if (!desc.id) {\n helper.registerRule((id) => {\n desc.id = id;\n if (desc.match) {\n return new MatchRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.match,\n _RuleFactory._compileCaptures(desc.captures, helper, repository)\n );\n }\n if (typeof desc.begin === \"undefined\") {\n if (desc.repository) {\n repository = mergeObjects({}, repository, desc.repository);\n }\n let patterns = desc.patterns;\n if (typeof patterns === \"undefined\" && desc.include) {\n patterns = [{ include: desc.include }];\n }\n return new IncludeOnlyRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n _RuleFactory._compilePatterns(patterns, helper, repository)\n );\n }\n if (desc.while) {\n return new BeginWhileRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.while,\n _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n }\n return new BeginEndRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.end,\n _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n desc.applyEndPatternLast,\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n });\n }\n return desc.id;\n }\n static _compileCaptures(captures, helper, repository) {\n let r = [];\n if (captures) {\n let maximumCaptureId = 0;\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n if (numericCaptureId > maximumCaptureId) {\n maximumCaptureId = numericCaptureId;\n }\n }\n for (let i = 0; i <= maximumCaptureId; i++) {\n r[i] = null;\n }\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n let retokenizeCapturedWithRuleId = 0;\n if (captures[captureId].patterns) {\n retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n }\n r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n }\n }\n return r;\n }\n static _compilePatterns(patterns, helper, repository) {\n let r = [];\n if (patterns) {\n for (let i = 0, len = patterns.length; i < len; i++) {\n const pattern = patterns[i];\n let ruleId = -1;\n if (pattern.include) {\n const reference = parseInclude(pattern.include);\n switch (reference.kind) {\n case 0 /* Base */:\n case 1 /* Self */:\n ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n break;\n case 2 /* RelativeReference */:\n let localIncludedRule = repository[reference.ruleName];\n if (localIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n } else {\n }\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const externalGrammarName = reference.scopeName;\n const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n if (externalGrammar) {\n if (externalGrammarInclude) {\n let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n if (externalIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n } else {\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n }\n } else {\n }\n break;\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n }\n if (ruleId !== -1) {\n const rule = helper.getRule(ruleId);\n let skipRule = false;\n if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n skipRule = true;\n }\n }\n if (skipRule) {\n continue;\n }\n r.push(ruleId);\n }\n }\n }\n return {\n patterns: r,\n hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n };\n }\n};\nvar RegExpSource = class _RegExpSource {\n source;\n ruleId;\n hasAnchor;\n hasBackReferences;\n _anchorCache;\n constructor(regExpSource, ruleId) {\n if (regExpSource && typeof regExpSource === \"string\") {\n const len = regExpSource.length;\n let lastPushedPos = 0;\n let output = [];\n let hasAnchor = false;\n for (let pos = 0; pos < len; pos++) {\n const ch = regExpSource.charAt(pos);\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n const nextCh = regExpSource.charAt(pos + 1);\n if (nextCh === \"z\") {\n output.push(regExpSource.substring(lastPushedPos, pos));\n output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n lastPushedPos = pos + 2;\n } else if (nextCh === \"A\" || nextCh === \"G\") {\n hasAnchor = true;\n }\n pos++;\n }\n }\n }\n this.hasAnchor = hasAnchor;\n if (lastPushedPos === 0) {\n this.source = regExpSource;\n } else {\n output.push(regExpSource.substring(lastPushedPos, len));\n this.source = output.join(\"\");\n }\n } else {\n this.hasAnchor = false;\n this.source = regExpSource;\n }\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n } else {\n this._anchorCache = null;\n }\n this.ruleId = ruleId;\n if (typeof this.source === \"string\") {\n this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n } else {\n this.hasBackReferences = false;\n }\n }\n clone() {\n return new _RegExpSource(this.source, this.ruleId);\n }\n setSource(newSource) {\n if (this.source === newSource) {\n return;\n }\n this.source = newSource;\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n }\n }\n resolveBackReferences(lineText, captureIndices) {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let capturedValues = captureIndices.map((capture) => {\n return lineText.substring(capture.start, capture.end);\n });\n BACK_REFERENCING_END.lastIndex = 0;\n return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n });\n }\n _buildAnchorCache() {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let A0_G0_result = [];\n let A0_G1_result = [];\n let A1_G0_result = [];\n let A1_G1_result = [];\n let pos, len, ch, nextCh;\n for (pos = 0, len = this.source.length; pos < len; pos++) {\n ch = this.source.charAt(pos);\n A0_G0_result[pos] = ch;\n A0_G1_result[pos] = ch;\n A1_G0_result[pos] = ch;\n A1_G1_result[pos] = ch;\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n nextCh = this.source.charAt(pos + 1);\n if (nextCh === \"A\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"\\uFFFF\";\n A1_G0_result[pos + 1] = \"A\";\n A1_G1_result[pos + 1] = \"A\";\n } else if (nextCh === \"G\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"G\";\n A1_G0_result[pos + 1] = \"\\uFFFF\";\n A1_G1_result[pos + 1] = \"G\";\n } else {\n A0_G0_result[pos + 1] = nextCh;\n A0_G1_result[pos + 1] = nextCh;\n A1_G0_result[pos + 1] = nextCh;\n A1_G1_result[pos + 1] = nextCh;\n }\n pos++;\n }\n }\n }\n return {\n A0_G0: A0_G0_result.join(\"\"),\n A0_G1: A0_G1_result.join(\"\"),\n A1_G0: A1_G0_result.join(\"\"),\n A1_G1: A1_G1_result.join(\"\")\n };\n }\n resolveAnchors(allowA, allowG) {\n if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n return this.source;\n }\n if (allowA) {\n if (allowG) {\n return this._anchorCache.A1_G1;\n } else {\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n return this._anchorCache.A0_G1;\n } else {\n return this._anchorCache.A0_G0;\n }\n }\n }\n};\nvar RegExpSourceList = class {\n _items;\n _hasAnchors;\n _cached;\n _anchorCache;\n constructor() {\n this._items = [];\n this._hasAnchors = false;\n this._cached = null;\n this._anchorCache = {\n A0_G0: null,\n A0_G1: null,\n A1_G0: null,\n A1_G1: null\n };\n }\n dispose() {\n this._disposeCaches();\n }\n _disposeCaches() {\n if (this._cached) {\n this._cached.dispose();\n this._cached = null;\n }\n if (this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0.dispose();\n this._anchorCache.A0_G0 = null;\n }\n if (this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1.dispose();\n this._anchorCache.A0_G1 = null;\n }\n if (this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0.dispose();\n this._anchorCache.A1_G0 = null;\n }\n if (this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1.dispose();\n this._anchorCache.A1_G1 = null;\n }\n }\n push(item) {\n this._items.push(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n unshift(item) {\n this._items.unshift(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n length() {\n return this._items.length;\n }\n setSource(index, newSource) {\n if (this._items[index].source !== newSource) {\n this._disposeCaches();\n this._items[index].setSource(newSource);\n }\n }\n compile(onigLib) {\n if (!this._cached) {\n let regExps = this._items.map((e) => e.source);\n this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n return this._cached;\n }\n compileAG(onigLib, allowA, allowG) {\n if (!this._hasAnchors) {\n return this.compile(onigLib);\n } else {\n if (allowA) {\n if (allowG) {\n if (!this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G1;\n } else {\n if (!this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n if (!this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G1;\n } else {\n if (!this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G0;\n }\n }\n }\n }\n _resolveAnchors(onigLib, allowA, allowG) {\n let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n};\nvar CompiledRule = class {\n constructor(onigLib, regExps, rules) {\n this.regExps = regExps;\n this.rules = rules;\n this.scanner = onigLib.createOnigScanner(regExps);\n }\n scanner;\n dispose() {\n if (typeof this.scanner.dispose === \"function\") {\n this.scanner.dispose();\n }\n }\n toString() {\n const r = [];\n for (let i = 0, len = this.rules.length; i < len; i++) {\n r.push(\" - \" + this.rules[i] + \": \" + this.regExps[i]);\n }\n return r.join(\"\\n\");\n }\n findNextMatchSync(string, startPosition, options) {\n const result = this.scanner.findNextMatchSync(string, startPosition, options);\n if (!result) {\n return null;\n }\n return {\n ruleId: this.rules[result.index],\n captureIndices: result.captureIndices\n };\n }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n constructor(languageId, tokenType) {\n this.languageId = languageId;\n this.tokenType = tokenType;\n }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n _defaultAttributes;\n _embeddedLanguagesMatcher;\n constructor(initialLanguageId, embeddedLanguages) {\n this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n }\n getDefaultAttributes() {\n return this._defaultAttributes;\n }\n getBasicScopeAttributes(scopeName) {\n if (scopeName === null) {\n return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n }\n return this._getBasicScopeAttributes.get(scopeName);\n }\n static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n _getBasicScopeAttributes = new CachedFn((scopeName) => {\n const languageId = this._scopeToLanguage(scopeName);\n const standardTokenType = this._toStandardTokenType(scopeName);\n return new BasicScopeAttributes(languageId, standardTokenType);\n });\n /**\n * Given a produced TM scope, return the language that token describes or null if unknown.\n * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n */\n _scopeToLanguage(scope) {\n return this._embeddedLanguagesMatcher.match(scope) || 0;\n }\n _toStandardTokenType(scopeName) {\n const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 8 /* NotSet */;\n }\n switch (m[1]) {\n case \"comment\":\n return 1 /* Comment */;\n case \"string\":\n return 2 /* String */;\n case \"regex\":\n return 3 /* RegEx */;\n case \"meta.embedded\":\n return 0 /* Other */;\n }\n throw new Error(\"Unexpected match for standard token type!\");\n }\n static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n values;\n scopesRegExp;\n constructor(values) {\n if (values.length === 0) {\n this.values = null;\n this.scopesRegExp = null;\n } else {\n this.values = new Map(values);\n const escapedScopes = values.map(\n ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n );\n escapedScopes.sort();\n escapedScopes.reverse();\n this.scopesRegExp = new RegExp(\n `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n \"\"\n );\n }\n }\n match(scope) {\n if (!this.scopesRegExp) {\n return void 0;\n }\n const m = scope.match(this.scopesRegExp);\n if (!m) {\n return void 0;\n }\n return this.values.get(m[1]);\n }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n constructor(stack, stoppedEarly) {\n this.stack = stack;\n this.stoppedEarly = stoppedEarly;\n }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n const lineLength = lineText.content.length;\n let STOP = false;\n let anchorPosition = -1;\n if (checkWhileConditions) {\n const whileCheckResult = _checkWhileConditions(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n lineTokens\n );\n stack = whileCheckResult.stack;\n linePos = whileCheckResult.linePos;\n isFirstLine = whileCheckResult.isFirstLine;\n anchorPosition = whileCheckResult.anchorPosition;\n }\n const startTime = Date.now();\n while (!STOP) {\n if (timeLimit !== 0) {\n const elapsedTime = Date.now() - startTime;\n if (elapsedTime > timeLimit) {\n return new TokenizeStringResult(stack, true);\n }\n }\n scanNext();\n }\n return new TokenizeStringResult(stack, false);\n function scanNext() {\n if (false) {\n console.log(\"\");\n console.log(\n `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n );\n }\n const r = matchRuleOrInjections(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n anchorPosition\n );\n if (!r) {\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n const captureIndices = r.captureIndices;\n const matchedRuleId = r.matchedRuleId;\n const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n if (matchedRuleId === endRuleId) {\n const poppedRule = stack.getRule(grammar);\n if (false) {\n console.log(\n \" popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n );\n }\n lineTokens.produce(stack, captureIndices[0].start);\n stack = stack.withContentNameScopesList(stack.nameScopesList);\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n poppedRule.endCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n const popped = stack;\n stack = stack.parent;\n anchorPosition = popped.getAnchorPos();\n if (!hasAdvanced && popped.getEnterPos() === linePos) {\n if (false) {\n console.error(\n \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n );\n }\n stack = popped;\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const _rule = grammar.getRule(matchedRuleId);\n lineTokens.produce(stack, captureIndices[0].start);\n const beforePush = stack;\n const scopeName = _rule.getName(lineText.content, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(\n scopeName,\n grammar\n );\n stack = stack.push(\n matchedRuleId,\n linePos,\n anchorPosition,\n captureIndices[0].end === lineLength,\n null,\n nameScopesList,\n nameScopesList\n );\n if (_rule instanceof BeginEndRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\n \" pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.endHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getEndWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else if (_rule instanceof BeginWhileRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\" pushing \" + pushedRule.debugName);\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.whileHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getWhileWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const matchingRule = _rule;\n if (false) {\n console.log(\n \" matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n matchingRule.captures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n stack = stack.pop();\n if (!hasAdvanced) {\n if (false) {\n console.error(\n \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n );\n }\n stack = stack.safePop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n }\n }\n if (captureIndices[0].end > linePos) {\n linePos = captureIndices[0].end;\n isFirstLine = false;\n }\n }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n const whileRules = [];\n for (let node = stack; node; node = node.pop()) {\n const nodeRule = node.getRule(grammar);\n if (nodeRule instanceof BeginWhileRule) {\n whileRules.push({\n rule: nodeRule,\n stack: node\n });\n }\n }\n for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (false) {\n console.log(\" scanning for while rule\");\n console.log(ruleScanner.toString());\n }\n if (r) {\n const matchedRuleId = r.ruleId;\n if (matchedRuleId !== whileRuleId) {\n stack = whileRule.stack.pop();\n break;\n }\n if (r.captureIndices && r.captureIndices.length) {\n lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n anchorPosition = r.captureIndices[0].end;\n if (r.captureIndices[0].end > linePos) {\n linePos = r.captureIndices[0].end;\n isFirstLine = false;\n }\n }\n } else {\n if (false) {\n console.log(\" popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n }\n stack = whileRule.stack.pop();\n break;\n }\n }\n return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n const injections = grammar.getInjections();\n if (injections.length === 0) {\n return matchResult;\n }\n const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n if (!injectionResult) {\n return matchResult;\n }\n if (!matchResult) {\n return injectionResult;\n }\n const matchResultScore = matchResult.captureIndices[0].start;\n const injectionResultScore = injectionResult.captureIndices[0].start;\n if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n return injectionResult;\n }\n return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const rule = stack.getRule(grammar);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (r) {\n return {\n captureIndices: r.captureIndices,\n matchedRuleId: r.ruleId\n };\n }\n return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n let bestMatchRating = Number.MAX_VALUE;\n let bestMatchCaptureIndices = null;\n let bestMatchRuleId;\n let bestMatchResultPriority = 0;\n const scopes = stack.contentNameScopesList.getScopeNames();\n for (let i = 0, len = injections.length; i < len; i++) {\n const injection = injections[i];\n if (!injection.matcher(scopes)) {\n continue;\n }\n const rule = grammar.getRule(injection.ruleId);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (!matchResult) {\n continue;\n }\n if (false) {\n console.log(` matched injection: ${injection.debugSelector}`);\n console.log(ruleScanner.toString());\n }\n const matchRating = matchResult.captureIndices[0].start;\n if (matchRating >= bestMatchRating) {\n continue;\n }\n bestMatchRating = matchRating;\n bestMatchCaptureIndices = matchResult.captureIndices;\n bestMatchRuleId = matchResult.ruleId;\n bestMatchResultPriority = injection.priority;\n if (bestMatchRating === linePos) {\n break;\n }\n }\n if (bestMatchCaptureIndices) {\n return {\n priorityMatch: bestMatchResultPriority === -1,\n captureIndices: bestMatchCaptureIndices,\n matchedRuleId: bestMatchRuleId\n };\n }\n return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n let options = 0 /* None */;\n if (!allowA) {\n options |= 1 /* NotBeginString */;\n }\n if (!allowG) {\n options |= 4 /* NotBeginPosition */;\n }\n return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n if (captures.length === 0) {\n return;\n }\n const lineTextContent = lineText.content;\n const len = Math.min(captures.length, captureIndices.length);\n const localStack = [];\n const maxEnd = captureIndices[0].end;\n for (let i = 0; i < len; i++) {\n const captureRule = captures[i];\n if (captureRule === null) {\n continue;\n }\n const captureIndex = captureIndices[i];\n if (captureIndex.length === 0) {\n continue;\n }\n if (captureIndex.start > maxEnd) {\n break;\n }\n while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n if (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n } else {\n lineTokens.produce(stack, captureIndex.start);\n }\n if (captureRule.retokenizeCapturedWithRuleId) {\n const scopeName = captureRule.getName(lineTextContent, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n _tokenizeString(\n grammar,\n onigSubStr,\n isFirstLine && captureIndex.start === 0,\n captureIndex.start,\n stackClone,\n lineTokens,\n false,\n /* no time limit */\n 0\n );\n disposeOnigString(onigSubStr);\n continue;\n }\n const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n if (captureRuleScopeName !== null) {\n const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n }\n }\n while (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n}\nvar LocalStackElement = class {\n scopes;\n endPos;\n constructor(scopes, endPos) {\n this.scopes = scopes;\n this.endPos = endPos;\n }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n return new Grammar(\n scopeName,\n grammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n grammarRepository,\n onigLib\n );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n const matchers = createMatchers(selector, nameMatcher);\n const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n for (const matcher of matchers) {\n result.push({\n debugSelector: selector,\n matcher: matcher.matcher,\n ruleId,\n grammar,\n priority: matcher.priority\n });\n }\n}\nfunction nameMatcher(identifers, scopes) {\n if (scopes.length < identifers.length) {\n return false;\n }\n let lastIndex = 0;\n return identifers.every((identifier) => {\n for (let i = lastIndex; i < scopes.length; i++) {\n if (scopesAreMatching(scopes[i], identifier)) {\n lastIndex = i + 1;\n return true;\n }\n }\n return false;\n });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n if (!thisScopeName) {\n return false;\n }\n if (thisScopeName === scopeName) {\n return true;\n }\n const len = scopeName.length;\n return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n this._rootScopeName = _rootScopeName;\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._onigLib = _onigLib;\n this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n initialLanguage,\n embeddedLanguages\n );\n this._rootId = -1;\n this._lastRuleId = 0;\n this._ruleId2desc = [null];\n this._includedGrammars = {};\n this._grammarRepository = grammarRepository;\n this._grammar = initGrammar(grammar, null);\n this._injections = null;\n this._tokenTypeMatchers = [];\n if (tokenTypes) {\n for (const selector of Object.keys(tokenTypes)) {\n const matchers = createMatchers(selector, nameMatcher);\n for (const matcher of matchers) {\n this._tokenTypeMatchers.push({\n matcher: matcher.matcher,\n type: tokenTypes[selector]\n });\n }\n }\n }\n }\n _rootId;\n _lastRuleId;\n _ruleId2desc;\n _includedGrammars;\n _grammarRepository;\n _grammar;\n _injections;\n _basicScopeAttributesProvider;\n _tokenTypeMatchers;\n get themeProvider() {\n return this._grammarRepository;\n }\n dispose() {\n for (const rule of this._ruleId2desc) {\n if (rule) {\n rule.dispose();\n }\n }\n }\n createOnigScanner(sources) {\n return this._onigLib.createOnigScanner(sources);\n }\n createOnigString(sources) {\n return this._onigLib.createOnigString(sources);\n }\n getMetadataForScope(scope) {\n return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n }\n _collectInjections() {\n const grammarRepository = {\n lookup: (scopeName2) => {\n if (scopeName2 === this._rootScopeName) {\n return this._grammar;\n }\n return this.getExternalGrammar(scopeName2);\n },\n injections: (scopeName2) => {\n return this._grammarRepository.injections(scopeName2);\n }\n };\n const result = [];\n const scopeName = this._rootScopeName;\n const grammar = grammarRepository.lookup(scopeName);\n if (grammar) {\n const rawInjections = grammar.injections;\n if (rawInjections) {\n for (let expression in rawInjections) {\n collectInjections(\n result,\n expression,\n rawInjections[expression],\n this,\n grammar\n );\n }\n }\n const injectionScopeNames = this._grammarRepository.injections(scopeName);\n if (injectionScopeNames) {\n injectionScopeNames.forEach((injectionScopeName) => {\n const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n if (injectionGrammar) {\n const selector = injectionGrammar.injectionSelector;\n if (selector) {\n collectInjections(\n result,\n selector,\n injectionGrammar,\n this,\n injectionGrammar\n );\n }\n }\n });\n }\n }\n result.sort((i1, i2) => i1.priority - i2.priority);\n return result;\n }\n getInjections() {\n if (this._injections === null) {\n this._injections = this._collectInjections();\n }\n return this._injections;\n }\n registerRule(factory) {\n const id = ++this._lastRuleId;\n const result = factory(ruleIdFromNumber(id));\n this._ruleId2desc[id] = result;\n return result;\n }\n getRule(ruleId) {\n return this._ruleId2desc[ruleIdToNumber(ruleId)];\n }\n getExternalGrammar(scopeName, repository) {\n if (this._includedGrammars[scopeName]) {\n return this._includedGrammars[scopeName];\n } else if (this._grammarRepository) {\n const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n if (rawIncludedGrammar) {\n this._includedGrammars[scopeName] = initGrammar(\n rawIncludedGrammar,\n repository && repository.$base\n );\n return this._includedGrammars[scopeName];\n }\n }\n return void 0;\n }\n tokenizeLine(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, false, timeLimit);\n return {\n tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n tokenizeLine2(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, true, timeLimit);\n return {\n tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n if (this._rootId === -1) {\n this._rootId = RuleFactory.getCompiledRuleId(\n this._grammar.repository.$self,\n this,\n this._grammar.repository\n );\n this.getInjections();\n }\n let isFirstLine;\n if (!prevState || prevState === StateStackImpl.NULL) {\n isFirstLine = true;\n const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n const defaultStyle = this.themeProvider.getDefaults();\n const defaultMetadata = EncodedTokenMetadata.set(\n 0,\n rawDefaultMetadata.languageId,\n rawDefaultMetadata.tokenType,\n null,\n defaultStyle.fontStyle,\n defaultStyle.foregroundId,\n defaultStyle.backgroundId\n );\n const rootScopeName = this.getRule(this._rootId).getName(\n null,\n null\n );\n let scopeList;\n if (rootScopeName) {\n scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n rootScopeName,\n defaultMetadata,\n this\n );\n } else {\n scopeList = AttributedScopeStack.createRoot(\n \"unknown\",\n defaultMetadata\n );\n }\n prevState = new StateStackImpl(\n null,\n this._rootId,\n -1,\n -1,\n false,\n null,\n scopeList,\n scopeList\n );\n } else {\n isFirstLine = false;\n prevState.reset();\n }\n lineText = lineText + \"\\n\";\n const onigLineText = this.createOnigString(lineText);\n const lineLength = onigLineText.content.length;\n const lineTokens = new LineTokens(\n emitBinaryTokens,\n lineText,\n this._tokenTypeMatchers,\n this.balancedBracketSelectors\n );\n const r = _tokenizeString(\n this,\n onigLineText,\n isFirstLine,\n 0,\n prevState,\n lineTokens,\n true,\n timeLimit\n );\n disposeOnigString(onigLineText);\n return {\n lineLength,\n lineTokens,\n ruleStack: r.stack,\n stoppedEarly: r.stoppedEarly\n };\n }\n};\nfunction initGrammar(grammar, base) {\n grammar = clone(grammar);\n grammar.repository = grammar.repository || {};\n grammar.repository.$self = {\n $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n patterns: grammar.patterns,\n name: grammar.scopeName\n };\n grammar.repository.$base = base || grammar.repository.$self;\n return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n /**\n * Invariant:\n * ```\n * if (parent && !scopePath.extends(parent.scopePath)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, scopePath, tokenAttributes) {\n this.parent = parent;\n this.scopePath = scopePath;\n this.tokenAttributes = tokenAttributes;\n }\n static fromExtension(namesScopeList, contentNameScopesList) {\n let current = namesScopeList;\n let scopeNames = namesScopeList?.scopePath ?? null;\n for (const frame of contentNameScopesList) {\n scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n }\n return current;\n }\n static createRoot(scopeName, tokenAttributes) {\n return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n }\n static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n const scopePath = new ScopeStack(null, scopeName);\n const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n tokenAttributes,\n rawRootMetadata,\n rootStyle\n );\n return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n }\n get scopeName() {\n return this.scopePath.scopeName;\n }\n toString() {\n return this.getScopeNames().join(\" \");\n }\n equals(other) {\n return _AttributedScopeStack.equals(this, other);\n }\n static equals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n let fontStyle = -1 /* NotSet */;\n let foreground = 0;\n let background = 0;\n if (styleAttributes !== null) {\n fontStyle = styleAttributes.fontStyle;\n foreground = styleAttributes.foregroundId;\n background = styleAttributes.backgroundId;\n }\n return EncodedTokenMetadata.set(\n existingTokenAttributes,\n basicScopeAttributes.languageId,\n basicScopeAttributes.tokenType,\n null,\n fontStyle,\n foreground,\n background\n );\n }\n pushAttributed(scopePath, grammar) {\n if (scopePath === null) {\n return this;\n }\n if (scopePath.indexOf(\" \") === -1) {\n return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n }\n const scopes = scopePath.split(/ /g);\n let result = this;\n for (const scope of scopes) {\n result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n }\n return result;\n }\n static _pushAttributed(target, scopeName, grammar) {\n const rawMetadata = grammar.getMetadataForScope(scopeName);\n const newPath = target.scopePath.push(scopeName);\n const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n const metadata = _AttributedScopeStack.mergeAttributes(\n target.tokenAttributes,\n rawMetadata,\n scopeThemeMatchResult\n );\n return new _AttributedScopeStack(target, newPath, metadata);\n }\n getScopeNames() {\n return this.scopePath.getSegments();\n }\n getExtensionIfDefined(base) {\n const result = [];\n let self = this;\n while (self && self !== base) {\n result.push({\n encodedTokenAttributes: self.tokenAttributes,\n scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n });\n self = self.parent;\n }\n return self === base ? result.reverse() : void 0;\n }\n};\nvar StateStackImpl = class _StateStackImpl {\n /**\n * Invariant:\n * ```\n * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n * \tthrow new Error();\n * }\n * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n this.parent = parent;\n this.ruleId = ruleId;\n this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n this.endRule = endRule;\n this.nameScopesList = nameScopesList;\n this.contentNameScopesList = contentNameScopesList;\n this.depth = this.parent ? this.parent.depth + 1 : 1;\n this._enterPos = enterPos;\n this._anchorPos = anchorPos;\n }\n _stackElementBrand = void 0;\n // TODO remove me\n static NULL = new _StateStackImpl(\n null,\n 0,\n 0,\n 0,\n false,\n null,\n null,\n null\n );\n /**\n * The position on the current line where this state was pushed.\n * This is relevant only while tokenizing a line, to detect endless loops.\n * Its value is meaningless across lines.\n */\n _enterPos;\n /**\n * The captured anchor position when this stack element was pushed.\n * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n * Its value is meaningless across lines.\n */\n _anchorPos;\n /**\n * The depth of the stack.\n */\n depth;\n equals(other) {\n if (other === null) {\n return false;\n }\n return _StateStackImpl._equals(this, other);\n }\n static _equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!this._structuralEquals(a, b)) {\n return false;\n }\n return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n }\n /**\n * A structural equals check. Does not take into account `scopes`.\n */\n static _structuralEquals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n clone() {\n return this;\n }\n static _reset(el) {\n while (el) {\n el._enterPos = -1;\n el._anchorPos = -1;\n el = el.parent;\n }\n }\n reset() {\n _StateStackImpl._reset(this);\n }\n pop() {\n return this.parent;\n }\n safePop() {\n if (this.parent) {\n return this.parent;\n }\n return this;\n }\n push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n return new _StateStackImpl(\n this,\n ruleId,\n enterPos,\n anchorPos,\n beginRuleCapturedEOL,\n endRule,\n nameScopesList,\n contentNameScopesList\n );\n }\n getEnterPos() {\n return this._enterPos;\n }\n getAnchorPos() {\n return this._anchorPos;\n }\n getRule(grammar) {\n return grammar.getRule(this.ruleId);\n }\n toString() {\n const r = [];\n this._writeString(r, 0);\n return \"[\" + r.join(\",\") + \"]\";\n }\n _writeString(res, outIndex) {\n if (this.parent) {\n outIndex = this.parent._writeString(res, outIndex);\n }\n res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n return outIndex;\n }\n withContentNameScopesList(contentNameScopeStack) {\n if (this.contentNameScopesList === contentNameScopeStack) {\n return this;\n }\n return this.parent.push(\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n this.endRule,\n this.nameScopesList,\n contentNameScopeStack\n );\n }\n withEndRule(endRule) {\n if (this.endRule === endRule) {\n return this;\n }\n return new _StateStackImpl(\n this.parent,\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n endRule,\n this.nameScopesList,\n this.contentNameScopesList\n );\n }\n // Used to warn of endless loops\n hasSameRuleAs(other) {\n let el = this;\n while (el && el._enterPos === other._enterPos) {\n if (el.ruleId === other.ruleId) {\n return true;\n }\n el = el.parent;\n }\n return false;\n }\n toStateStackFrame() {\n return {\n ruleId: ruleIdToNumber(this.ruleId),\n beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n endRule: this.endRule,\n nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n };\n }\n static pushFrame(self, frame) {\n const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n return new _StateStackImpl(\n self,\n ruleIdFromNumber(frame.ruleId),\n frame.enterPos ?? -1,\n frame.anchorPos ?? -1,\n frame.beginRuleCapturedEOL,\n frame.endRule,\n namesScopeList,\n AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n );\n }\n};\nvar BalancedBracketSelectors = class {\n balancedBracketScopes;\n unbalancedBracketScopes;\n allowAny = false;\n constructor(balancedBracketScopes, unbalancedBracketScopes) {\n this.balancedBracketScopes = balancedBracketScopes.flatMap(\n (selector) => {\n if (selector === \"*\") {\n this.allowAny = true;\n return [];\n }\n return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n }\n );\n this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n );\n }\n get matchesAlways() {\n return this.allowAny && this.unbalancedBracketScopes.length === 0;\n }\n get matchesNever() {\n return this.balancedBracketScopes.length === 0 && !this.allowAny;\n }\n match(scopes) {\n for (const excluder of this.unbalancedBracketScopes) {\n if (excluder(scopes)) {\n return false;\n }\n }\n for (const includer of this.balancedBracketScopes) {\n if (includer(scopes)) {\n return true;\n }\n }\n return this.allowAny;\n }\n};\nvar LineTokens = class {\n constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._emitBinaryTokens = emitBinaryTokens;\n this._tokenTypeOverrides = tokenTypeOverrides;\n if (false) {\n this._lineText = lineText;\n } else {\n this._lineText = null;\n }\n this._tokens = [];\n this._binaryTokens = [];\n this._lastTokenEndIndex = 0;\n }\n _emitBinaryTokens;\n /**\n * defined only if `false`.\n */\n _lineText;\n /**\n * used only if `_emitBinaryTokens` is false.\n */\n _tokens;\n /**\n * used only if `_emitBinaryTokens` is true.\n */\n _binaryTokens;\n _lastTokenEndIndex;\n _tokenTypeOverrides;\n produce(stack, endIndex) {\n this.produceFromScopes(stack.contentNameScopesList, endIndex);\n }\n produceFromScopes(scopesList, endIndex) {\n if (this._lastTokenEndIndex >= endIndex) {\n return;\n }\n if (this._emitBinaryTokens) {\n let metadata = scopesList?.tokenAttributes ?? 0;\n let containsBalancedBrackets = false;\n if (this.balancedBracketSelectors?.matchesAlways) {\n containsBalancedBrackets = true;\n }\n if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n const scopes2 = scopesList?.getScopeNames() ?? [];\n for (const tokenType of this._tokenTypeOverrides) {\n if (tokenType.matcher(scopes2)) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n toOptionalTokenType(tokenType.type),\n null,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n }\n if (this.balancedBracketSelectors) {\n containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n }\n }\n if (containsBalancedBrackets) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n 8 /* NotSet */,\n containsBalancedBrackets,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n this._lastTokenEndIndex = endIndex;\n return;\n }\n this._binaryTokens.push(this._lastTokenEndIndex);\n this._binaryTokens.push(metadata);\n this._lastTokenEndIndex = endIndex;\n return;\n }\n const scopes = scopesList?.getScopeNames() ?? [];\n this._tokens.push({\n startIndex: this._lastTokenEndIndex,\n endIndex,\n // value: lineText.substring(lastTokenEndIndex, endIndex),\n scopes\n });\n this._lastTokenEndIndex = endIndex;\n }\n getResult(stack, lineLength) {\n if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n this._tokens.pop();\n }\n if (this._tokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._tokens[this._tokens.length - 1].startIndex = 0;\n }\n return this._tokens;\n }\n getBinaryResult(stack, lineLength) {\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n this._binaryTokens.pop();\n this._binaryTokens.pop();\n }\n if (this._binaryTokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._binaryTokens[this._binaryTokens.length - 2] = 0;\n }\n const result = new Uint32Array(this._binaryTokens.length);\n for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n result[i] = this._binaryTokens[i];\n }\n return result;\n }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n constructor(theme, _onigLib) {\n this._onigLib = _onigLib;\n this._theme = theme;\n }\n _grammars = /* @__PURE__ */ new Map();\n _rawGrammars = /* @__PURE__ */ new Map();\n _injectionGrammars = /* @__PURE__ */ new Map();\n _theme;\n dispose() {\n for (const grammar of this._grammars.values()) {\n grammar.dispose();\n }\n }\n setTheme(theme) {\n this._theme = theme;\n }\n getColorMap() {\n return this._theme.getColorMap();\n }\n /**\n * Add `grammar` to registry and return a list of referenced scope names\n */\n addGrammar(grammar, injectionScopeNames) {\n this._rawGrammars.set(grammar.scopeName, grammar);\n if (injectionScopeNames) {\n this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n }\n }\n /**\n * Lookup a raw grammar.\n */\n lookup(scopeName) {\n return this._rawGrammars.get(scopeName);\n }\n /**\n * Returns the injections for the given grammar\n */\n injections(targetScope) {\n return this._injectionGrammars.get(targetScope);\n }\n /**\n * Get the default theme settings\n */\n getDefaults() {\n return this._theme.getDefaults();\n }\n /**\n * Match a scope in the theme.\n */\n themeMatch(scopePath) {\n return this._theme.match(scopePath);\n }\n /**\n * Lookup a grammar.\n */\n grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n if (!this._grammars.has(scopeName)) {\n let rawGrammar = this._rawGrammars.get(scopeName);\n if (!rawGrammar) {\n return null;\n }\n this._grammars.set(scopeName, createGrammar(\n scopeName,\n rawGrammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n this,\n this._onigLib\n ));\n }\n return this._grammars.get(scopeName);\n }\n};\n\n// src/index.ts\nvar Registry = class {\n _options;\n _syncRegistry;\n _ensureGrammarCache;\n constructor(options) {\n this._options = options;\n this._syncRegistry = new SyncRegistry(\n Theme.createFromRawTheme(options.theme, options.colorMap),\n options.onigLib\n );\n this._ensureGrammarCache = /* @__PURE__ */ new Map();\n }\n dispose() {\n this._syncRegistry.dispose();\n }\n /**\n * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n */\n setTheme(theme, colorMap) {\n this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n }\n /**\n * Returns a lookup array for color ids.\n */\n getColorMap() {\n return this._syncRegistry.getColorMap();\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n return this._loadGrammar(\n initialScopeName,\n initialLanguage,\n configuration.embeddedLanguages,\n configuration.tokenTypes,\n new BalancedBracketSelectors(\n configuration.balancedBracketSelectors || [],\n configuration.unbalancedBracketSelectors || []\n )\n );\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n */\n loadGrammar(initialScopeName) {\n return this._loadGrammar(initialScopeName, 0, null, null, null);\n }\n _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n while (dependencyProcessor.Q.length > 0) {\n dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n dependencyProcessor.processQueue();\n }\n return this._grammarForScopeName(\n initialScopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n _loadSingleGrammar(scopeName) {\n if (!this._ensureGrammarCache.has(scopeName)) {\n this._doLoadSingleGrammar(scopeName);\n this._ensureGrammarCache.set(scopeName, true);\n }\n }\n _doLoadSingleGrammar(scopeName) {\n const grammar = this._options.loadGrammar(scopeName);\n if (grammar) {\n const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n this._syncRegistry.addGrammar(grammar, injections);\n }\n }\n /**\n * Adds a rawGrammar.\n */\n addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n this._syncRegistry.addGrammar(rawGrammar, injections);\n return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n }\n /**\n * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n */\n _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n return this._syncRegistry.grammarForScopeName(\n scopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n EncodedTokenMetadata,\n FindOption,\n FontStyle,\n INITIAL,\n Registry,\n Theme,\n disposeOnigString\n};\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alpha: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n closedBy: null,\n colorSpace: null,\n cols: number,\n colSpan: number,\n command: null,\n commandFor: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootCustomElementRegistry: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shadowRootSerializable: boolean,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n credentialless: boolean,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n exportParts: commaSeparated,\n part: spaceSeparated,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n maskType: 'mask-type',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\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 tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskType: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '',\n zwj: '',\n lrm: '',\n rlm: '',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `c` vs `c` (decimal shorter)\n // * `d` vs `d` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n const themeName = typeof theme === \"string\" ? theme : theme.name;\n for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n if (typeof value === \"string\")\n replacements[key] = value;\n else if (key === themeName)\n Object.assign(replacements, value);\n }\n return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n if (!color)\n return color;\n return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n if (!className)\n return node;\n node.properties ||= {};\n node.properties.class ||= [];\n if (typeof node.properties.class === \"string\")\n node.properties.class = node.properties.class.split(/\\s+/g);\n if (!Array.isArray(node.properties.class))\n node.properties.class = [];\n const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n for (const c of targets) {\n if (c && !node.properties.class.includes(c))\n node.properties.class.push(c);\n }\n return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n if (code.length === 0) {\n return [[\"\", 0]];\n }\n const parts = code.split(/(\\r?\\n)/g);\n let index = 0;\n const lines = [];\n for (let i = 0; i < parts.length; i += 2) {\n const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n lines.push([line, index]);\n index += parts[i].length;\n index += parts[i + 1]?.length || 0;\n }\n return lines;\n}\nfunction createPositionConverter(code) {\n const lines = splitLines(code, true).map(([line]) => line);\n function indexToPos(index) {\n if (index === code.length) {\n return {\n line: lines.length - 1,\n character: lines[lines.length - 1].length\n };\n }\n let character = index;\n let line = 0;\n for (const lineText of lines) {\n if (character < lineText.length)\n break;\n character -= lineText.length;\n line++;\n }\n return { line, character };\n }\n function posToIndex(line, character) {\n let index = 0;\n for (let i = 0; i < line; i++)\n index += lines[i].length;\n index += character;\n return index;\n }\n return {\n lines,\n indexToPos,\n posToIndex\n };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n const langs = /* @__PURE__ */ new Set();\n for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n const fullType = match[1].toLowerCase().trim();\n const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n if (lang)\n langs.add(lang);\n }\n if (!highlighter)\n return Array.from(langs);\n const bundle = highlighter.getBundledLanguages();\n return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n let lastOffset = 0;\n const tokens = [];\n for (const offset of offsets) {\n if (offset > lastOffset) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset, offset),\n offset: token.offset + lastOffset\n });\n }\n lastOffset = offset;\n }\n if (lastOffset < token.content.length) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset),\n offset: token.offset + lastOffset\n });\n }\n return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n if (!sorted.length)\n return tokens;\n return tokens.map((line) => {\n return line.flatMap((token) => {\n const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n if (!breakpointsInToken.length)\n return token;\n return splitToken(token, breakpointsInToken);\n });\n });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n const token = {\n content: merged.content,\n explanation: merged.explanation,\n offset: merged.offset\n };\n const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n const mergedStyles = {};\n const varKey = (idx, key) => {\n const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n };\n styles.forEach((cur, idx) => {\n for (const key of styleKeys) {\n const value = cur[key] || \"inherit\";\n if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = styles[lightIndex][key] || \"inherit\";\n const darkValue = styles[darkIndex][key] || \"inherit\";\n mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n } else {\n mergedStyles[key] = value;\n }\n } else {\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n }\n }\n });\n token.htmlStyle = mergedStyles;\n return token;\n}\nfunction getTokenStyleObject(token) {\n const styles = {};\n if (token.color)\n styles.color = token.color;\n if (token.bgColor)\n styles[\"background-color\"] = token.bgColor;\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Italic)\n styles[\"font-style\"] = \"italic\";\n if (token.fontStyle & FontStyle.Bold)\n styles[\"font-weight\"] = \"bold\";\n const decorations = [];\n if (token.fontStyle & FontStyle.Underline)\n decorations.push(\"underline\");\n if (token.fontStyle & FontStyle.Strikethrough)\n decorations.push(\"line-through\");\n if (decorations.length)\n styles[\"text-decoration\"] = decorations.join(\" \");\n }\n return styles;\n}\nfunction stringifyTokenStyle(token) {\n if (typeof token === \"string\")\n return token;\n return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n /**\n * Theme to Stack mapping\n */\n _stacks = {};\n lang;\n get themes() {\n return Object.keys(this._stacks);\n }\n get theme() {\n return this.themes[0];\n }\n get _stack() {\n return this._stacks[this.theme];\n }\n /**\n * Static method to create a initial grammar state.\n */\n static initial(lang, themes) {\n return new GrammarState(\n Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n lang\n );\n }\n constructor(...args) {\n if (args.length === 2) {\n const [stacksMap, lang] = args;\n this.lang = lang;\n this._stacks = stacksMap;\n } else {\n const [stack, lang, theme] = args;\n this.lang = lang;\n this._stacks = { [theme]: stack };\n }\n }\n /**\n * Get the internal stack object.\n * @internal\n */\n getInternalStack(theme = this.theme) {\n return this._stacks[theme];\n }\n getScopes(theme = this.theme) {\n return getScopes(this._stacks[theme]);\n }\n toJSON() {\n return {\n lang: this.lang,\n theme: this.theme,\n themes: this.themes,\n scopes: this.getScopes()\n };\n }\n}\nfunction getScopes(stack) {\n const scopes = [];\n const visited = /* @__PURE__ */ new Set();\n function pushScope(stack2) {\n if (visited.has(stack2))\n return;\n visited.add(stack2);\n const name = stack2?.nameScopesList?.scopeName;\n if (name)\n scopes.push(name);\n if (stack2.parent)\n pushScope(stack2.parent);\n }\n pushScope(stack);\n return scopes;\n}\nfunction getGrammarStack(state, theme) {\n if (!(state instanceof GrammarState))\n throw new ShikiError$1(\"Invalid grammar state\");\n return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n const map = /* @__PURE__ */ new WeakMap();\n function getContext(shiki) {\n if (!map.has(shiki.meta)) {\n let normalizePosition = function(p) {\n if (typeof p === \"number\") {\n if (p < 0 || p > shiki.source.length)\n throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n return {\n ...converter.indexToPos(p),\n offset: p\n };\n } else {\n const line = converter.lines[p.line];\n if (line === void 0)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n let character = p.character;\n if (character < 0)\n character = line.length + character;\n if (character < 0 || character > line.length)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n return {\n ...p,\n character,\n offset: converter.posToIndex(p.line, character)\n };\n }\n };\n const converter = createPositionConverter(shiki.source);\n const decorations = (shiki.options.decorations || []).map((d) => ({\n ...d,\n start: normalizePosition(d.start),\n end: normalizePosition(d.end)\n }));\n verifyIntersections(decorations);\n map.set(shiki.meta, {\n decorations,\n converter,\n source: shiki.source\n });\n }\n return map.get(shiki.meta);\n }\n return {\n name: \"shiki:decorations\",\n tokens(tokens) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n const splitted = splitTokens(tokens, breakpoints);\n return splitted;\n },\n code(codeEl) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n if (lines.length !== ctx.converter.lines.length)\n throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n function applyLineSection(line, start, end, decoration) {\n const lineEl = lines[line];\n let text = \"\";\n let startIndex = -1;\n let endIndex = -1;\n if (start === 0)\n startIndex = 0;\n if (end === 0)\n endIndex = 0;\n if (end === Number.POSITIVE_INFINITY)\n endIndex = lineEl.children.length;\n if (startIndex === -1 || endIndex === -1) {\n for (let i = 0; i < lineEl.children.length; i++) {\n text += stringify(lineEl.children[i]);\n if (startIndex === -1 && text.length === start)\n startIndex = i + 1;\n if (endIndex === -1 && text.length === end)\n endIndex = i + 1;\n }\n }\n if (startIndex === -1)\n throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n if (endIndex === -1)\n throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n const children = lineEl.children.slice(startIndex, endIndex);\n if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n applyDecoration(lineEl, decoration, \"line\");\n } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n applyDecoration(children[0], decoration, \"token\");\n } else {\n const wrapper = {\n type: \"element\",\n tagName: \"span\",\n properties: {},\n children\n };\n applyDecoration(wrapper, decoration, \"wrapper\");\n lineEl.children.splice(startIndex, children.length, wrapper);\n }\n }\n function applyLine(line, decoration) {\n lines[line] = applyDecoration(lines[line], decoration, \"line\");\n }\n function applyDecoration(el, decoration, type) {\n const properties = decoration.properties || {};\n const transform = decoration.transform || ((i) => i);\n el.tagName = decoration.tagName || \"span\";\n el.properties = {\n ...el.properties,\n ...properties,\n class: el.properties.class\n };\n if (decoration.properties?.class)\n addClassToHast(el, decoration.properties.class);\n el = transform(el, type) || el;\n return el;\n }\n const lineApplies = [];\n const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n for (const decoration of sorted) {\n const { start, end } = decoration;\n if (start.line === end.line) {\n applyLineSection(start.line, start.character, end.character, decoration);\n } else if (start.line < end.line) {\n applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n for (let i = start.line + 1; i < end.line; i++)\n lineApplies.unshift(() => applyLine(i, decoration));\n applyLineSection(end.line, 0, end.character, decoration);\n }\n }\n lineApplies.forEach((i) => i());\n }\n };\n}\nfunction verifyIntersections(items) {\n for (let i = 0; i < items.length; i++) {\n const foo = items[i];\n if (foo.start.offset > foo.end.offset)\n throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n for (let j = i + 1; j < items.length; j++) {\n const bar = items[j];\n const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n if (isFooHasBarStart && isFooHasBarEnd)\n continue;\n if (isBarHasFooStart && isBarHasFooEnd)\n continue;\n if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n continue;\n if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n continue;\n throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n }\n }\n }\n}\nfunction stringify(el) {\n if (el.type === \"text\")\n return el.value;\n if (el.type === \"element\")\n return el.children.map(stringify).join(\"\");\n return \"\";\n}\n\nconst builtInTransformers = [\n /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n const transformers = sortTransformersByEnforcement(options.transformers || []);\n return [\n ...transformers.pre,\n ...transformers.normal,\n ...transformers.post,\n ...builtInTransformers\n ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n const pre = [];\n const post = [];\n const normal = [];\n for (const transformer of transformers) {\n switch (transformer.enforce) {\n case \"pre\":\n pre.push(transformer);\n break;\n case \"post\":\n post.push(transformer);\n break;\n default:\n normal.push(transformer);\n }\n }\n return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n 1: \"bold\",\n 2: \"dim\",\n 3: \"italic\",\n 4: \"underline\",\n 7: \"reverse\",\n 8: \"hidden\",\n 9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n const nextEscape = value.indexOf(\"\\x1B\", position);\n if (nextEscape !== -1) {\n if (value[nextEscape + 1] === \"[\") {\n const nextClose = value.indexOf(\"m\", nextEscape);\n if (nextClose !== -1) {\n return {\n sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n startPosition: nextEscape,\n position: nextClose + 1\n };\n }\n }\n }\n return {\n position: value.length\n };\n}\nfunction parseColor(sequence) {\n const colorMode = sequence.shift();\n if (colorMode === \"2\") {\n const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n return;\n return {\n type: \"rgb\",\n rgb\n };\n } else if (colorMode === \"5\") {\n const index = sequence.shift();\n if (index) {\n return { type: \"table\", index: Number(index) };\n }\n }\n}\nfunction parseSequence(sequence) {\n const commands = [];\n while (sequence.length > 0) {\n const code = sequence.shift();\n if (!code)\n continue;\n const codeInt = Number.parseInt(code);\n if (Number.isNaN(codeInt))\n continue;\n if (codeInt === 0) {\n commands.push({ type: \"resetAll\" });\n } else if (codeInt <= 9) {\n const decoration = decorations[codeInt];\n if (decoration) {\n commands.push({\n type: \"setDecoration\",\n value: decorations[codeInt]\n });\n }\n } else if (codeInt <= 29) {\n const decoration = decorations[codeInt - 20];\n if (decoration) {\n commands.push({\n type: \"resetDecoration\",\n value: decoration\n });\n if (decoration === \"dim\") {\n commands.push({\n type: \"resetDecoration\",\n value: \"bold\"\n });\n }\n }\n } else if (codeInt <= 37) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 30] }\n });\n } else if (codeInt === 38) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setForegroundColor\",\n value: color\n });\n }\n } else if (codeInt === 39) {\n commands.push({\n type: \"resetForegroundColor\"\n });\n } else if (codeInt <= 47) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 40] }\n });\n } else if (codeInt === 48) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setBackgroundColor\",\n value: color\n });\n }\n } else if (codeInt === 49) {\n commands.push({\n type: \"resetBackgroundColor\"\n });\n } else if (codeInt === 53) {\n commands.push({\n type: \"setDecoration\",\n value: \"overline\"\n });\n } else if (codeInt === 55) {\n commands.push({\n type: \"resetDecoration\",\n value: \"overline\"\n });\n } else if (codeInt >= 90 && codeInt <= 97) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n });\n } else if (codeInt >= 100 && codeInt <= 107) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n });\n }\n }\n return commands;\n}\nfunction createAnsiSequenceParser() {\n let foreground = null;\n let background = null;\n let decorations2 = /* @__PURE__ */ new Set();\n return {\n parse(value) {\n const tokens = [];\n let position = 0;\n do {\n const findResult = findSequence(value, position);\n const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n if (text.length > 0) {\n tokens.push({\n value: text,\n foreground,\n background,\n decorations: new Set(decorations2)\n });\n }\n if (findResult.sequence) {\n const commands = parseSequence(findResult.sequence);\n for (const styleToken of commands) {\n if (styleToken.type === \"resetAll\") {\n foreground = null;\n background = null;\n decorations2.clear();\n } else if (styleToken.type === \"resetForegroundColor\") {\n foreground = null;\n } else if (styleToken.type === \"resetBackgroundColor\") {\n background = null;\n } else if (styleToken.type === \"resetDecoration\") {\n decorations2.delete(styleToken.value);\n }\n }\n for (const styleToken of commands) {\n if (styleToken.type === \"setForegroundColor\") {\n foreground = styleToken.value;\n } else if (styleToken.type === \"setBackgroundColor\") {\n background = styleToken.value;\n } else if (styleToken.type === \"setDecoration\") {\n decorations2.add(styleToken.value);\n }\n }\n }\n position = findResult.position;\n } while (position < value.length);\n return tokens;\n }\n };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n black: \"#000000\",\n red: \"#bb0000\",\n green: \"#00bb00\",\n yellow: \"#bbbb00\",\n blue: \"#0000bb\",\n magenta: \"#ff00ff\",\n cyan: \"#00bbbb\",\n white: \"#eeeeee\",\n brightBlack: \"#555555\",\n brightRed: \"#ff5555\",\n brightGreen: \"#00ff00\",\n brightYellow: \"#ffff55\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#55ffff\",\n brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n function namedColor(name) {\n return namedColorsMap[name];\n }\n function rgbColor(rgb) {\n return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n }\n let colorTable;\n function getColorTable() {\n if (colorTable) {\n return colorTable;\n }\n colorTable = [];\n for (let i = 0; i < namedColors.length; i++) {\n colorTable.push(namedColor(namedColors[i]));\n }\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n }\n }\n }\n let level = 8;\n for (let i = 0; i < 24; i++, level += 10) {\n colorTable.push(rgbColor([level, level, level]));\n }\n return colorTable;\n }\n function tableColor(index) {\n return getColorTable()[index];\n }\n function value(color) {\n switch (color.type) {\n case \"named\":\n return namedColor(color.name);\n case \"rgb\":\n return rgbColor(color.rgb);\n case \"table\":\n return tableColor(color.index);\n }\n }\n return {\n value\n };\n}\n\nconst defaultAnsiColors = {\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0DBC79\",\n yellow: \"#E5E510\",\n blue: \"#2472C8\",\n magenta: \"#BC3FBC\",\n cyan: \"#11A8CD\",\n white: \"#E5E5E5\",\n brightBlack: \"#666666\",\n brightRed: \"#F14C4C\",\n brightGreen: \"#23D18B\",\n brightYellow: \"#F5F543\",\n brightBlue: \"#3B8EEA\",\n brightMagenta: \"#D670D6\",\n brightCyan: \"#29B8DB\",\n brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const lines = splitLines(fileContents);\n const ansiPalette = Object.fromEntries(\n namedColors.map((name) => {\n const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n const themeColor = theme.colors?.[key];\n return [name, themeColor || defaultAnsiColors[name]];\n })\n );\n const colorPalette = createColorPalette(ansiPalette);\n const parser = createAnsiSequenceParser();\n return lines.map(\n (line) => parser.parse(line[0]).map((token) => {\n let color;\n let bgColor;\n if (token.decorations.has(\"reverse\")) {\n color = token.background ? colorPalette.value(token.background) : theme.bg;\n bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n } else {\n color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n bgColor = token.background ? colorPalette.value(token.background) : void 0;\n }\n color = applyColorReplacements(color, colorReplacements);\n bgColor = applyColorReplacements(bgColor, colorReplacements);\n if (token.decorations.has(\"dim\"))\n color = dimColor(color);\n let fontStyle = FontStyle.None;\n if (token.decorations.has(\"bold\"))\n fontStyle |= FontStyle.Bold;\n if (token.decorations.has(\"italic\"))\n fontStyle |= FontStyle.Italic;\n if (token.decorations.has(\"underline\"))\n fontStyle |= FontStyle.Underline;\n if (token.decorations.has(\"strikethrough\"))\n fontStyle |= FontStyle.Strikethrough;\n return {\n content: token.value,\n offset: line[1],\n // TODO: more accurate offset? might need to fork ansi-sequence-parser\n color,\n bgColor,\n fontStyle\n };\n })\n );\n}\nfunction dimColor(color) {\n const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n if (hexMatch) {\n const hex = hexMatch[1];\n if (hex.length === 8) {\n const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n return `#${hex.slice(0, 6)}${alpha}`;\n } else if (hex.length === 6) {\n return `#${hex}80`;\n } else if (hex.length === 4) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n const a = hex[3];\n const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n } else if (hex.length === 3) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n return `#${r}${r}${g}${g}${b}${b}80`;\n }\n }\n const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n if (cssVarMatch)\n return `var(${cssVarMatch[1]}-dim)`;\n return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n const {\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n const lang = internal.resolveLangAlias(options.lang || \"text\");\n if (isPlainLang(lang) || isNoneTheme(themeName))\n return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n const { theme, colorMap } = internal.setTheme(themeName);\n if (lang === \"ansi\")\n return tokenizeAnsiWithTheme(theme, code, options);\n const _grammar = internal.getLanguage(options.lang || \"text\");\n if (options.grammarState) {\n if (options.grammarState.lang !== _grammar.name) {\n throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n }\n if (!options.grammarState.themes.includes(theme.name)) {\n throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n }\n }\n return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n if (args.length === 2) {\n return getLastGrammarStateFromMap(args[1]);\n }\n const [internal, code, options = {}] = args;\n const {\n lang = \"text\",\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n if (isPlainLang(lang) || isNoneTheme(themeName))\n throw new ShikiError$1(\"Plain language does not have grammar state\");\n if (lang === \"ansi\")\n throw new ShikiError$1(\"ANSI language does not have grammar state\");\n const { theme, colorMap } = internal.setTheme(themeName);\n const _grammar = internal.getLanguage(lang);\n return new GrammarState(\n _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n _grammar.name,\n theme.name\n );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n const grammarState = new GrammarState(\n result.stateStack,\n grammar.name,\n theme.name\n );\n setLastGrammarStateToMap(result.tokens, grammarState);\n return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const {\n tokenizeMaxLineLength = 0,\n tokenizeTimeLimit = 500\n } = options;\n const lines = splitLines(code);\n let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n options.grammarContextCode,\n grammar,\n theme,\n colorMap,\n {\n ...options,\n grammarState: void 0,\n grammarContextCode: void 0\n }\n ).stateStack : INITIAL;\n let actual = [];\n const final = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const [line, lineOffset] = lines[i];\n if (line === \"\") {\n actual = [];\n final.push([]);\n continue;\n }\n if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n actual = [];\n final.push([{\n content: line,\n offset: lineOffset,\n color: \"\",\n fontStyle: 0\n }]);\n continue;\n }\n let resultWithScopes;\n let tokensWithScopes;\n let tokensWithScopesIndex;\n if (options.includeExplanation) {\n resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n tokensWithScopes = resultWithScopes.tokens;\n tokensWithScopesIndex = 0;\n }\n const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n const tokensLength = result.tokens.length / 2;\n for (let j = 0; j < tokensLength; j++) {\n const startIndex = result.tokens[2 * j];\n const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n if (startIndex === nextStartIndex)\n continue;\n const metadata = result.tokens[2 * j + 1];\n const color = applyColorReplacements(\n colorMap[EncodedTokenMetadata.getForeground(metadata)],\n colorReplacements\n );\n const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n const token = {\n content: line.substring(startIndex, nextStartIndex),\n offset: lineOffset + startIndex,\n color,\n fontStyle\n };\n if (options.includeExplanation) {\n const themeSettingsSelectors = [];\n if (options.includeExplanation !== \"scopeName\") {\n for (const setting of theme.settings) {\n let selectors;\n switch (typeof setting.scope) {\n case \"string\":\n selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n break;\n case \"object\":\n selectors = setting.scope;\n break;\n default:\n continue;\n }\n themeSettingsSelectors.push({\n settings: setting,\n selectors: selectors.map((selector) => selector.split(/ /))\n });\n }\n }\n token.explanation = [];\n let offset = 0;\n while (startIndex + offset < nextStartIndex) {\n const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n const tokenWithScopesText = line.substring(\n tokenWithScopes.startIndex,\n tokenWithScopes.endIndex\n );\n offset += tokenWithScopesText.length;\n token.explanation.push({\n content: tokenWithScopesText,\n scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n tokenWithScopes.scopes\n ) : explainThemeScopesFull(\n themeSettingsSelectors,\n tokenWithScopes.scopes\n )\n });\n tokensWithScopesIndex += 1;\n }\n }\n actual.push(token);\n }\n final.push(actual);\n actual = [];\n stateStack = result.ruleStack;\n }\n return {\n tokens: final,\n stateStack\n };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n const result = [];\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i];\n result[i] = {\n scopeName: scope,\n themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n };\n }\n return result;\n}\nfunction matchesOne(selector, scope) {\n return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n if (!matchesOne(selectors[selectors.length - 1], scope))\n return false;\n let selectorParentIndex = selectors.length - 2;\n let parentIndex = parentScopes.length - 1;\n while (selectorParentIndex >= 0 && parentIndex >= 0) {\n if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n selectorParentIndex -= 1;\n parentIndex -= 1;\n }\n if (selectorParentIndex === -1)\n return true;\n return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n const result = [];\n for (const { selectors, settings } of themeSettingsSelectors) {\n for (const selectorPieces of selectors) {\n if (matches(selectorPieces, scope, parentScopes)) {\n result.push(settings);\n break;\n }\n }\n }\n return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n const themedTokens = themes.map((t) => {\n const tokens2 = codeToTokensBase(internal, code, {\n ...options,\n theme: t.theme\n });\n const state = getLastGrammarStateFromMap(tokens2);\n const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n return {\n tokens: tokens2,\n state,\n theme\n };\n });\n const tokens = syncThemesTokenization(\n ...themedTokens.map((i) => i.tokens)\n );\n const mergedTokens = tokens[0].map(\n (line, lineIdx) => line.map((_token, tokenIdx) => {\n const mergedToken = {\n content: _token.content,\n variants: {},\n offset: _token.offset\n };\n if (\"includeExplanation\" in options && options.includeExplanation) {\n mergedToken.explanation = _token.explanation;\n }\n tokens.forEach((t, themeIdx) => {\n const {\n content: _,\n explanation: __,\n offset: ___,\n ...styles\n } = t[lineIdx][tokenIdx];\n mergedToken.variants[themes[themeIdx].color] = styles;\n });\n return mergedToken;\n })\n );\n const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n themedTokens[0].state.lang\n ) : void 0;\n if (mergedGrammarState)\n setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n const outThemes = themes.map(() => []);\n const count = themes.length;\n for (let i = 0; i < themes[0].length; i++) {\n const lines = themes.map((t) => t[i]);\n const outLines = outThemes.map(() => []);\n outThemes.forEach((t, i2) => t.push(outLines[i2]));\n const indexes = lines.map(() => 0);\n const current = lines.map((l) => l[0]);\n while (current.every((t) => t)) {\n const minLength = Math.min(...current.map((t) => t.content.length));\n for (let n = 0; n < count; n++) {\n const token = current[n];\n if (token.content.length === minLength) {\n outLines[n].push(token);\n indexes[n] += 1;\n current[n] = lines[n][indexes[n]];\n } else {\n outLines[n].push({\n ...token,\n content: token.content.slice(0, minLength)\n });\n current[n] = {\n ...token,\n content: token.content.slice(minLength),\n offset: token.offset + minLength\n };\n }\n }\n }\n }\n return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n let bg;\n let fg;\n let tokens;\n let themeName;\n let rootStyle;\n let grammarState;\n if (\"themes\" in options) {\n const {\n defaultColor = \"light\",\n cssVariablePrefix = \"--shiki-\",\n colorsRendering = \"css-vars\"\n } = options;\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n if (themes.length === 0)\n throw new ShikiError$1(\"`themes` option must not be empty\");\n const themeTokens = codeToTokensWithThemes(\n internal,\n code,\n options\n );\n grammarState = getLastGrammarStateFromMap(themeTokens);\n if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n const themesOrder = themes.map((t) => t.color);\n tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n if (grammarState)\n setLastGrammarStateToMap(tokens, grammarState);\n const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n } else if (\"theme\" in options) {\n const colorReplacements = resolveColorReplacements(options.theme, options);\n tokens = codeToTokensBase(\n internal,\n code,\n options\n );\n const _theme = internal.getTheme(options.theme);\n bg = applyColorReplacements(_theme.bg, colorReplacements);\n fg = applyColorReplacements(_theme.fg, colorReplacements);\n themeName = _theme.name;\n grammarState = getLastGrammarStateFromMap(tokens);\n } else {\n throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n }\n return {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n return themes.map((t, idx) => {\n const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n if (idx === 0 && defaultColor) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n }\n return value;\n }\n if (colorsRendering === \"css-vars\") {\n return cssVar;\n }\n return null;\n }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n let input = code;\n for (const transformer of getTransformers(options))\n input = transformer.preprocess?.call(transformerContext, input, options) || input;\n let {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n } = codeToTokens(internal, input, options);\n const {\n mergeWhitespaces = true,\n mergeSameStyleTokens = false\n } = options;\n if (mergeWhitespaces === true)\n tokens = mergeWhitespaceTokens(tokens);\n else if (mergeWhitespaces === \"never\")\n tokens = splitWhitespaceTokens(tokens);\n if (mergeSameStyleTokens) {\n tokens = mergeAdjacentStyledTokens(tokens);\n }\n const contextSource = {\n ...transformerContext,\n get source() {\n return input;\n }\n };\n for (const transformer of getTransformers(options))\n tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n return tokensToHast(\n tokens,\n {\n ...options,\n fg,\n bg,\n themeName,\n rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n },\n contextSource,\n grammarState\n );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n const transformers = getTransformers(options);\n const lines = [];\n const root = {\n type: \"root\",\n children: []\n };\n const {\n structure = \"classic\",\n tabindex = \"0\"\n } = options;\n const properties = {\n class: `shiki ${options.themeName || \"\"}`\n };\n if (options.rootStyle !== false) {\n if (options.rootStyle != null)\n properties.style = options.rootStyle;\n else\n properties.style = `background-color:${options.bg};color:${options.fg}`;\n }\n if (tabindex !== false && tabindex != null)\n properties.tabindex = tabindex.toString();\n for (const [key, value] of Object.entries(options.meta || {})) {\n if (!key.startsWith(\"_\"))\n properties[key] = value;\n }\n let preNode = {\n type: \"element\",\n tagName: \"pre\",\n properties,\n children: [],\n data: options.data\n };\n let codeNode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: lines\n };\n const lineNodes = [];\n const context = {\n ...transformerContext,\n structure,\n addClassToHast,\n get source() {\n return transformerContext.source;\n },\n get tokens() {\n return tokens;\n },\n get options() {\n return options;\n },\n get root() {\n return root;\n },\n get pre() {\n return preNode;\n },\n get code() {\n return codeNode;\n },\n get lines() {\n return lineNodes;\n }\n };\n tokens.forEach((line, idx) => {\n if (idx) {\n if (structure === \"inline\")\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n else if (structure === \"classic\")\n lines.push({ type: \"text\", value: \"\\n\" });\n }\n let lineNode = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n let col = 0;\n for (const token of line) {\n let tokenNode = {\n type: \"element\",\n tagName: \"span\",\n properties: {\n ...token.htmlAttrs\n },\n children: [{ type: \"text\", value: token.content }]\n };\n const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n if (style)\n tokenNode.properties.style = style;\n for (const transformer of transformers)\n tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n if (structure === \"inline\")\n root.children.push(tokenNode);\n else if (structure === \"classic\")\n lineNode.children.push(tokenNode);\n col += token.content.length;\n }\n if (structure === \"classic\") {\n for (const transformer of transformers)\n lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n lineNodes.push(lineNode);\n lines.push(lineNode);\n } else if (structure === \"inline\") {\n lineNodes.push(lineNode);\n }\n });\n if (structure === \"classic\") {\n for (const transformer of transformers)\n codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n preNode.children.push(codeNode);\n for (const transformer of transformers)\n preNode = transformer?.pre?.call(context, preNode) || preNode;\n root.children.push(preNode);\n } else if (structure === \"inline\") {\n const syntheticLines = [];\n let currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n for (const child of root.children) {\n if (child.type === \"element\" && child.tagName === \"br\") {\n syntheticLines.push(currentLine);\n currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n } else if (child.type === \"element\" || child.type === \"text\") {\n currentLine.children.push(child);\n }\n }\n syntheticLines.push(currentLine);\n const syntheticCode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: syntheticLines\n };\n let transformedCode = syntheticCode;\n for (const transformer of transformers)\n transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n root.children = [];\n for (let i = 0; i < transformedCode.children.length; i++) {\n if (i > 0)\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n const line = transformedCode.children[i];\n if (line.type === \"element\")\n root.children.push(...line.children);\n }\n }\n let result = root;\n for (const transformer of transformers)\n result = transformer?.root?.call(context, result) || result;\n if (grammarState)\n setLastGrammarStateToMap(result, grammarState);\n return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n let carryOnContent = \"\";\n let firstOffset;\n line.forEach((token, idx) => {\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n const couldMerge = !isDecorated;\n if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n if (firstOffset === void 0)\n firstOffset = token.offset;\n carryOnContent += token.content;\n } else {\n if (carryOnContent) {\n if (couldMerge) {\n newLine.push({\n ...token,\n offset: firstOffset,\n content: carryOnContent + token.content\n });\n } else {\n newLine.push(\n {\n content: carryOnContent,\n offset: firstOffset\n },\n token\n );\n }\n firstOffset = void 0;\n carryOnContent = \"\";\n } else {\n newLine.push(token);\n }\n }\n });\n return newLine;\n });\n}\nfunction splitWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n return line.flatMap((token) => {\n if (token.content.match(/^\\s+$/))\n return token;\n const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n if (!match)\n return token;\n const [, leading, content, trailing] = match;\n if (!leading && !trailing)\n return token;\n const expanded = [{\n ...token,\n offset: token.offset + leading.length,\n content\n }];\n if (leading) {\n expanded.unshift({\n content: leading,\n offset: token.offset\n });\n }\n if (trailing) {\n expanded.push({\n content: trailing,\n offset: token.offset + leading.length + content.length\n });\n }\n return expanded;\n });\n });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n for (const token of line) {\n if (newLine.length === 0) {\n newLine.push({ ...token });\n continue;\n }\n const prevToken = newLine[newLine.length - 1];\n const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n prevToken.content += token.content;\n } else {\n newLine.push({ ...token });\n }\n }\n return newLine;\n });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n const context = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n };\n let result = hastToHtml(codeToHast(internal, code, options, context));\n for (const transformer of getTransformers(options))\n result = transformer.postprocess?.call(context, result, options) || result;\n return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n if (rawTheme?.[RESOLVED_KEY])\n return rawTheme;\n const theme = {\n ...rawTheme\n };\n if (theme.tokenColors && !theme.settings) {\n theme.settings = theme.tokenColors;\n delete theme.tokenColors;\n }\n theme.type ||= \"dark\";\n theme.colorReplacements = { ...theme.colorReplacements };\n theme.settings ||= [];\n let { bg, fg } = theme;\n if (!bg || !fg) {\n const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n if (globalSetting?.settings?.foreground)\n fg = globalSetting.settings.foreground;\n if (globalSetting?.settings?.background)\n bg = globalSetting.settings.background;\n if (!fg && theme?.colors?.[\"editor.foreground\"])\n fg = theme.colors[\"editor.foreground\"];\n if (!bg && theme?.colors?.[\"editor.background\"])\n bg = theme.colors[\"editor.background\"];\n if (!fg)\n fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n if (!bg)\n bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n theme.fg = fg;\n theme.bg = bg;\n }\n if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n theme.settings.unshift({\n settings: {\n foreground: theme.fg,\n background: theme.bg\n }\n });\n }\n let replacementCount = 0;\n const replacementMap = /* @__PURE__ */ new Map();\n function getReplacementColor(value) {\n if (replacementMap.has(value))\n return replacementMap.get(value);\n replacementCount += 1;\n const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n if (theme.colorReplacements?.[`#${hex}`])\n return getReplacementColor(value);\n replacementMap.set(value, hex);\n return hex;\n }\n theme.settings = theme.settings.map((setting) => {\n const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n if (!replaceFg && !replaceBg)\n return setting;\n const clone = {\n ...setting,\n settings: {\n ...setting.settings\n }\n };\n if (replaceFg) {\n const replacement = getReplacementColor(setting.settings.foreground);\n theme.colorReplacements[replacement] = setting.settings.foreground;\n clone.settings.foreground = replacement;\n }\n if (replaceBg) {\n const replacement = getReplacementColor(setting.settings.background);\n theme.colorReplacements[replacement] = setting.settings.background;\n clone.settings.background = replacement;\n }\n return clone;\n });\n for (const key of Object.keys(theme.colors || {})) {\n if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n if (!theme.colors[key]?.startsWith(\"#\")) {\n const replacement = getReplacementColor(theme.colors[key]);\n theme.colorReplacements[replacement] = theme.colors[key];\n theme.colors[key] = replacement;\n }\n }\n }\n Object.defineProperty(theme, RESOLVED_KEY, {\n enumerable: false,\n writable: false,\n value: true\n });\n return theme;\n}\n\nasync function resolveLangs(langs) {\n return Array.from(new Set((await Promise.all(\n langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n )).flat()));\n}\nasync function resolveThemes(themes) {\n const resolved = await Promise.all(\n themes.map(\n async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n )\n );\n return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n _emitDeprecation = emitDeprecation;\n _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n if (!_emitDeprecation)\n return;\n if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n return;\n if (_emitError) {\n throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n } else {\n console.trace(`[SHIKI DEPRECATE]: ${message}`);\n }\n}\n\nclass ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction resolveLangAlias(name, alias) {\n if (!alias)\n return name;\n if (alias[name]) {\n const resolved = /* @__PURE__ */ new Set([name]);\n while (alias[name]) {\n name = alias[name];\n if (resolved.has(name))\n throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n resolved.add(name);\n }\n }\n return name;\n}\n\nclass Registry extends Registry$1 {\n constructor(_resolver, _themes, _langs, _alias = {}) {\n super(_resolver);\n this._resolver = _resolver;\n this._themes = _themes;\n this._langs = _langs;\n this._alias = _alias;\n this._themes.map((t) => this.loadTheme(t));\n this.loadLanguages(this._langs);\n }\n _resolvedThemes = /* @__PURE__ */ new Map();\n _resolvedGrammars = /* @__PURE__ */ new Map();\n _langMap = /* @__PURE__ */ new Map();\n _langGraph = /* @__PURE__ */ new Map();\n _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n _loadedThemesCache = null;\n _loadedLanguagesCache = null;\n getTheme(theme) {\n if (typeof theme === \"string\")\n return this._resolvedThemes.get(theme);\n else\n return this.loadTheme(theme);\n }\n loadTheme(theme) {\n const _theme = normalizeTheme(theme);\n if (_theme.name) {\n this._resolvedThemes.set(_theme.name, _theme);\n this._loadedThemesCache = null;\n }\n return _theme;\n }\n getLoadedThemes() {\n if (!this._loadedThemesCache)\n this._loadedThemesCache = [...this._resolvedThemes.keys()];\n return this._loadedThemesCache;\n }\n // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n // is expensive. Themes can switch often especially for dual-theme support.\n //\n // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n // we omit here so it's easier to cache the themes.\n setTheme(theme) {\n let textmateTheme = this._textmateThemeCache.get(theme);\n if (!textmateTheme) {\n textmateTheme = Theme.createFromRawTheme(theme);\n this._textmateThemeCache.set(theme, textmateTheme);\n }\n this._syncRegistry.setTheme(textmateTheme);\n }\n getGrammar(name) {\n name = resolveLangAlias(name, this._alias);\n return this._resolvedGrammars.get(name);\n }\n loadLanguage(lang) {\n if (this.getGrammar(lang.name))\n return;\n const embeddedLazilyBy = new Set(\n [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n );\n this._resolver.addLanguage(lang);\n const grammarConfig = {\n balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n };\n this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n g.name = lang.name;\n this._resolvedGrammars.set(lang.name, g);\n if (lang.aliases) {\n lang.aliases.forEach((alias) => {\n this._alias[alias] = lang.name;\n });\n }\n this._loadedLanguagesCache = null;\n if (embeddedLazilyBy.size) {\n for (const e of embeddedLazilyBy) {\n this._resolvedGrammars.delete(e.name);\n this._loadedLanguagesCache = null;\n this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n this._syncRegistry?._grammars?.delete(e.scopeName);\n this.loadLanguage(this._langMap.get(e.name));\n }\n }\n }\n dispose() {\n super.dispose();\n this._resolvedThemes.clear();\n this._resolvedGrammars.clear();\n this._langMap.clear();\n this._langGraph.clear();\n this._loadedThemesCache = null;\n }\n loadLanguages(langs) {\n for (const lang of langs)\n this.resolveEmbeddedLanguages(lang);\n const langsGraphArray = Array.from(this._langGraph.entries());\n const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n if (missingLangs.length) {\n const dependents = langsGraphArray.filter(([_, lang]) => {\n if (!lang)\n return false;\n const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n }).filter((lang) => !missingLangs.includes(lang));\n throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n }\n for (const [_, lang] of langsGraphArray)\n this._resolver.addLanguage(lang);\n for (const [_, lang] of langsGraphArray)\n this.loadLanguage(lang);\n }\n getLoadedLanguages() {\n if (!this._loadedLanguagesCache) {\n this._loadedLanguagesCache = [\n .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n ];\n }\n return this._loadedLanguagesCache;\n }\n resolveEmbeddedLanguages(lang) {\n this._langMap.set(lang.name, lang);\n this._langGraph.set(lang.name, lang);\n const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n if (embedded) {\n for (const embeddedLang of embedded)\n this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n }\n }\n}\n\nclass Resolver {\n _langs = /* @__PURE__ */ new Map();\n _scopeToLang = /* @__PURE__ */ new Map();\n _injections = /* @__PURE__ */ new Map();\n _onigLib;\n constructor(engine, langs) {\n this._onigLib = {\n createOnigScanner: (patterns) => engine.createScanner(patterns),\n createOnigString: (s) => engine.createString(s)\n };\n langs.forEach((i) => this.addLanguage(i));\n }\n get onigLib() {\n return this._onigLib;\n }\n getLangRegistration(langIdOrAlias) {\n return this._langs.get(langIdOrAlias);\n }\n loadGrammar(scopeName) {\n return this._scopeToLang.get(scopeName);\n }\n addLanguage(l) {\n this._langs.set(l.name, l);\n if (l.aliases) {\n l.aliases.forEach((a) => {\n this._langs.set(a, l);\n });\n }\n this._scopeToLang.set(l.scopeName, l);\n if (l.injectTo) {\n l.injectTo.forEach((i) => {\n if (!this._injections.get(i))\n this._injections.set(i, []);\n this._injections.get(i).push(l.scopeName);\n });\n }\n }\n getInjections(scopeName) {\n const scopeParts = scopeName.split(\".\");\n let injections = [];\n for (let i = 1; i <= scopeParts.length; i++) {\n const subScopeName = scopeParts.slice(0, i).join(\".\");\n injections = [...injections, ...this._injections.get(subScopeName) || []];\n }\n return injections;\n }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n instancesCount += 1;\n if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n let isDisposed = false;\n if (!options.engine)\n throw new ShikiError(\"`engine` option is required for synchronous mode\");\n const langs = (options.langs || []).flat(1);\n const themes = (options.themes || []).flat(1).map(normalizeTheme);\n const resolver = new Resolver(options.engine, langs);\n const _registry = new Registry(resolver, themes, langs, options.langAlias);\n let _lastTheme;\n function resolveLangAlias$1(name) {\n return resolveLangAlias(name, options.langAlias);\n }\n function getLanguage(name) {\n ensureNotDisposed();\n const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n if (!_lang)\n throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n return _lang;\n }\n function getTheme(name) {\n if (name === \"none\")\n return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n ensureNotDisposed();\n const _theme = _registry.getTheme(name);\n if (!_theme)\n throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n return _theme;\n }\n function setTheme(name) {\n ensureNotDisposed();\n const theme = getTheme(name);\n if (_lastTheme !== name) {\n _registry.setTheme(theme);\n _lastTheme = name;\n }\n const colorMap = _registry.getColorMap();\n return {\n theme,\n colorMap\n };\n }\n function getLoadedThemes() {\n ensureNotDisposed();\n return _registry.getLoadedThemes();\n }\n function getLoadedLanguages() {\n ensureNotDisposed();\n return _registry.getLoadedLanguages();\n }\n function loadLanguageSync(...langs2) {\n ensureNotDisposed();\n _registry.loadLanguages(langs2.flat(1));\n }\n async function loadLanguage(...langs2) {\n return loadLanguageSync(await resolveLangs(langs2));\n }\n function loadThemeSync(...themes2) {\n ensureNotDisposed();\n for (const theme of themes2.flat(1)) {\n _registry.loadTheme(theme);\n }\n }\n async function loadTheme(...themes2) {\n ensureNotDisposed();\n return loadThemeSync(await resolveThemes(themes2));\n }\n function ensureNotDisposed() {\n if (isDisposed)\n throw new ShikiError(\"Shiki instance has been disposed\");\n }\n function dispose() {\n if (isDisposed)\n return;\n isDisposed = true;\n _registry.dispose();\n instancesCount -= 1;\n }\n return {\n setTheme,\n getTheme,\n getLanguage,\n getLoadedThemes,\n getLoadedLanguages,\n resolveLangAlias: resolveLangAlias$1,\n loadLanguage,\n loadLanguageSync,\n loadTheme,\n loadThemeSync,\n dispose,\n [Symbol.dispose]: dispose\n };\n}\n\nasync function createShikiInternal(options) {\n if (!options.engine) {\n warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n }\n const [\n themes,\n langs,\n engine\n ] = await Promise.all([\n resolveThemes(options.themes || []),\n resolveLangs(options.langs || []),\n options.engine\n ]);\n return createShikiInternalSync({\n ...options,\n themes,\n langs,\n engine\n });\n}\n\nasync function createHighlighterCore(options) {\n const internal = await createShikiInternal(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction createHighlighterCoreSync(options) {\n const internal = createShikiInternalSync(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighterCore2(options) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: options.themes || [],\n langs: options.langs || []\n });\n return _shiki;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n const bundledLanguages = options.langs;\n const bundledThemes = options.themes;\n const engine = options.engine;\n async function createHighlighter(options2) {\n function resolveLang(lang) {\n if (typeof lang === \"string\") {\n lang = options2.langAlias?.[lang] || lang;\n if (isSpecialLang(lang))\n return [];\n const bundle = bundledLanguages[lang];\n if (!bundle)\n throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return lang;\n }\n function resolveTheme(theme) {\n if (isSpecialTheme(theme))\n return \"none\";\n if (typeof theme === \"string\") {\n const bundle = bundledThemes[theme];\n if (!bundle)\n throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return theme;\n }\n const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n const core = await createHighlighterCore({\n engine: options2.engine ?? engine(),\n ...options2,\n themes: _themes,\n langs\n });\n return {\n ...core,\n loadLanguage(...langs2) {\n return core.loadLanguage(...langs2.map(resolveLang));\n },\n loadTheme(...themes) {\n return core.loadTheme(...themes.map(resolveTheme));\n },\n getBundledLanguages() {\n return bundledLanguages;\n },\n getBundledThemes() {\n return bundledThemes;\n }\n };\n }\n return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighter(options = {}) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: [],\n langs: []\n });\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n async function get(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n });\n const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n if (langs) {\n await shiki.loadLanguage(...langs);\n }\n return shiki;\n }\n return {\n getSingletonHighlighter(options) {\n return getSingletonHighlighter(options);\n },\n async codeToHtml(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHtml(code, options);\n },\n async codeToHast(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHast(code, options);\n },\n async codeToTokens(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokens(code, options);\n },\n async codeToTokensBase(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensBase(code, options);\n },\n async codeToTokensWithThemes(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensWithThemes(code, options);\n },\n async getLastGrammarState(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: [options.theme]\n });\n return shiki.getLastGrammarState(code, options);\n }\n };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n const {\n name = \"css-variables\",\n variablePrefix = \"--shiki-\",\n fontStyle = true\n } = options;\n const variable = (name2) => {\n if (options.variableDefaults?.[name2])\n return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n return `var(${variablePrefix}${name2})`;\n };\n const theme = {\n name,\n type: \"dark\",\n colors: {\n \"editor.foreground\": variable(\"foreground\"),\n \"editor.background\": variable(\"background\"),\n \"terminal.ansiBlack\": variable(\"ansi-black\"),\n \"terminal.ansiRed\": variable(\"ansi-red\"),\n \"terminal.ansiGreen\": variable(\"ansi-green\"),\n \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n \"terminal.ansiWhite\": variable(\"ansi-white\"),\n \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n },\n tokenColors: [\n {\n scope: [\n \"keyword.operator.accessor\",\n \"meta.group.braces.round.function.arguments\",\n \"meta.template.expression\",\n \"markup.fenced_code meta.embedded.block\"\n ],\n settings: {\n foreground: variable(\"foreground\")\n }\n },\n {\n scope: \"emphasis\",\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n settings: {\n fontStyle: \"bold\"\n }\n },\n {\n scope: [\"markup.italic.markdown\"],\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: \"meta.link.inline.markdown\",\n settings: {\n fontStyle: \"underline\",\n foreground: variable(\"token-link\")\n }\n },\n {\n scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n scope: [\"comment\", \"string.quoted.docstring.multi\"],\n settings: {\n foreground: variable(\"token-comment\")\n }\n },\n {\n scope: [\n \"constant.numeric\",\n \"constant.language\",\n \"constant.other.placeholder\",\n \"constant.character.format.placeholder\",\n \"variable.language.this\",\n \"variable.other.object\",\n \"variable.other.class\",\n \"variable.other.constant\",\n \"meta.property-name\",\n \"meta.property-value\",\n \"support\"\n ],\n settings: {\n foreground: variable(\"token-constant\")\n }\n },\n {\n scope: [\n \"keyword\",\n \"storage.modifier\",\n \"storage.type\",\n \"storage.control.clojure\",\n \"entity.name.function.clojure\",\n \"entity.name.tag.yaml\",\n \"support.function.node\",\n \"support.type.property-name.json\",\n \"punctuation.separator.key-value\",\n \"punctuation.definition.template-expression\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n scope: \"variable.parameter.function\",\n settings: {\n foreground: variable(\"token-parameter\")\n }\n },\n {\n scope: [\n \"support.function\",\n \"entity.name.type\",\n \"entity.other.inherited-class\",\n \"meta.function-call\",\n \"meta.instance.constructor\",\n \"entity.other.attribute-name\",\n \"entity.name.function\",\n \"constant.keyword.clojure\"\n ],\n settings: {\n foreground: variable(\"token-function\")\n }\n },\n {\n scope: [\n \"entity.name.tag\",\n \"string.quoted\",\n \"string.regexp\",\n \"string.interpolated\",\n \"string.template\",\n \"string.unquoted.plain.out.yaml\",\n \"keyword.other.template\"\n ],\n settings: {\n foreground: variable(\"token-string-expression\")\n }\n },\n {\n scope: [\n \"punctuation.definition.arguments\",\n \"punctuation.definition.dict\",\n \"punctuation.separator\",\n \"meta.function-call.arguments\"\n ],\n settings: {\n foreground: variable(\"token-punctuation\")\n }\n },\n {\n // [Custom] Markdown links\n scope: [\n \"markup.underline.link\",\n \"punctuation.definition.metadata.markdown\"\n ],\n settings: {\n foreground: variable(\"token-link\")\n }\n },\n {\n // [Custom] Markdown list\n scope: [\"beginning.punctuation.definition.list.markdown\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n // [Custom] Markdown punctuation definition brackets\n scope: [\n \"punctuation.definition.string.begin.markdown\",\n \"punctuation.definition.string.end.markdown\",\n \"string.other.link.title.markdown\",\n \"string.other.link.description.markdown\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n // [Custom] Diff\n scope: [\n \"markup.inserted\",\n \"meta.diff.header.to-file\",\n \"punctuation.definition.inserted\"\n ],\n settings: {\n foreground: variable(\"token-inserted\")\n }\n },\n {\n scope: [\n \"markup.deleted\",\n \"meta.diff.header.from-file\",\n \"punctuation.definition.deleted\"\n ],\n settings: {\n foreground: variable(\"token-deleted\")\n }\n },\n {\n scope: [\n \"markup.changed\",\n \"punctuation.definition.changed\"\n ],\n settings: {\n foreground: variable(\"token-changed\")\n }\n }\n ]\n };\n if (!fontStyle) {\n theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n if (tokenColor.settings?.fontStyle)\n delete tokenColor.settings.fontStyle;\n return tokenColor;\n });\n }\n return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction getHeapMax() {\n return 2147483648;\n}\nfunction _emscripten_get_now() {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\nconst alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\nasync function main(init) {\n let wasmMemory;\n let buffer;\n const binding = {};\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n binding.HEAPU8 = new Uint8Array(buf);\n binding.HEAPU32 = new Uint32Array(buf);\n }\n function _emscripten_memcpy_big(dest, src, num) {\n binding.HEAPU8.copyWithin(dest, src, src + num);\n }\n function emscripten_realloc_buffer(size) {\n try {\n wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);\n updateGlobalBufferAndViews(wasmMemory.buffer);\n return 1;\n } catch {\n }\n }\n function _emscripten_resize_heap(requestedSize) {\n const oldSize = binding.HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n const maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize)\n return false;\n for (let cutDown = 1; cutDown <= 4; cutDown *= 2) {\n let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n const newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n const replacement = emscripten_realloc_buffer(newSize);\n if (replacement)\n return true;\n }\n return false;\n }\n const UTF8Decoder = typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : void 0;\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead = 1024) {\n const endIdx = idx + maxBytesToRead;\n let endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n let str = \"\";\n while (idx < endPtr) {\n let u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n const u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) === 192) {\n str += String.fromCharCode((u0 & 31) << 6 | u1);\n continue;\n }\n const u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) === 224) {\n u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n } else {\n u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n const ch = u0 - 65536;\n str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n }\n }\n return str;\n }\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(binding.HEAPU8, ptr, maxBytesToRead) : \"\";\n }\n const asmLibraryArg = {\n emscripten_get_now: _emscripten_get_now,\n emscripten_memcpy_big: _emscripten_memcpy_big,\n emscripten_resize_heap: _emscripten_resize_heap,\n fd_write: () => 0\n };\n async function createWasm() {\n const info = {\n env: asmLibraryArg,\n wasi_snapshot_preview1: asmLibraryArg\n };\n const exports$1 = await init(info);\n wasmMemory = exports$1.memory;\n updateGlobalBufferAndViews(wasmMemory.buffer);\n Object.assign(binding, exports$1);\n binding.UTF8ToString = UTF8ToString;\n }\n await createWasm();\n return binding;\n}\n\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);\nlet onigBinding = null;\nfunction throwLastOnigError(onigBinding2) {\n throw new ShikiError(onigBinding2.UTF8ToString(onigBinding2.getLastOnigError()));\n}\nclass UtfString {\n constructor(str) {\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16Value\");\n __publicField(this, \"utf8Value\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n const utf16Length = str.length;\n const utf8Length = UtfString._utf8ByteLength(str);\n const computeIndicesMapping = utf8Length !== utf16Length;\n const utf16OffsetToUtf8 = computeIndicesMapping ? new Uint32Array(utf16Length + 1) : null;\n if (computeIndicesMapping)\n utf16OffsetToUtf8[utf16Length] = utf8Length;\n const utf8OffsetToUtf16 = computeIndicesMapping ? new Uint32Array(utf8Length + 1) : null;\n if (computeIndicesMapping)\n utf8OffsetToUtf16[utf8Length] = utf16Length;\n const utf8Value = new Uint8Array(utf8Length);\n let i8 = 0;\n for (let i16 = 0; i16 < utf16Length; i16++) {\n const charCode = str.charCodeAt(i16);\n let codePoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i16 + 1 < utf16Length) {\n const nextCharCode = str.charCodeAt(i16 + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codePoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (computeIndicesMapping) {\n utf16OffsetToUtf8[i16] = i8;\n if (wasSurrogatePair)\n utf16OffsetToUtf8[i16 + 1] = i8;\n if (codePoint <= 127) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n } else if (codePoint <= 2047) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n } else if (codePoint <= 65535) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n } else {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n utf8OffsetToUtf16[i8 + 3] = i16;\n }\n }\n if (codePoint <= 127) {\n utf8Value[i8++] = codePoint;\n } else if (codePoint <= 2047) {\n utf8Value[i8++] = 192 | (codePoint & 1984) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else if (codePoint <= 65535) {\n utf8Value[i8++] = 224 | (codePoint & 61440) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else {\n utf8Value[i8++] = 240 | (codePoint & 1835008) >>> 18;\n utf8Value[i8++] = 128 | (codePoint & 258048) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n }\n if (wasSurrogatePair)\n i16++;\n }\n this.utf16Length = utf16Length;\n this.utf8Length = utf8Length;\n this.utf16Value = str;\n this.utf8Value = utf8Value;\n this.utf16OffsetToUtf8 = utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utf8OffsetToUtf16;\n }\n static _utf8ByteLength(str) {\n let result = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n const charCode = str.charCodeAt(i);\n let codepoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i + 1 < len) {\n const nextCharCode = str.charCodeAt(i + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codepoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (codepoint <= 127)\n result += 1;\n else if (codepoint <= 2047)\n result += 2;\n else if (codepoint <= 65535)\n result += 3;\n else\n result += 4;\n if (wasSurrogatePair)\n i++;\n }\n return result;\n }\n createString(onigBinding2) {\n const result = onigBinding2.omalloc(this.utf8Length);\n onigBinding2.HEAPU8.set(this.utf8Value, result);\n return result;\n }\n}\nconst _OnigString = class _OnigString {\n constructor(str) {\n __publicField(this, \"id\", ++_OnigString.LAST_ID);\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"content\");\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n __publicField(this, \"ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n this._onigBinding = onigBinding;\n this.content = str;\n const utfString = new UtfString(str);\n this.utf16Length = utfString.utf16Length;\n this.utf8Length = utfString.utf8Length;\n this.utf16OffsetToUtf8 = utfString.utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utfString.utf8OffsetToUtf16;\n if (this.utf8Length < 1e4 && !_OnigString._sharedPtrInUse) {\n if (!_OnigString._sharedPtr)\n _OnigString._sharedPtr = onigBinding.omalloc(1e4);\n _OnigString._sharedPtrInUse = true;\n onigBinding.HEAPU8.set(utfString.utf8Value, _OnigString._sharedPtr);\n this.ptr = _OnigString._sharedPtr;\n } else {\n this.ptr = utfString.createString(onigBinding);\n }\n }\n convertUtf8OffsetToUtf16(utf8Offset) {\n if (this.utf8OffsetToUtf16) {\n if (utf8Offset < 0)\n return 0;\n if (utf8Offset > this.utf8Length)\n return this.utf16Length;\n return this.utf8OffsetToUtf16[utf8Offset];\n }\n return utf8Offset;\n }\n convertUtf16OffsetToUtf8(utf16Offset) {\n if (this.utf16OffsetToUtf8) {\n if (utf16Offset < 0)\n return 0;\n if (utf16Offset > this.utf16Length)\n return this.utf8Length;\n return this.utf16OffsetToUtf8[utf16Offset];\n }\n return utf16Offset;\n }\n dispose() {\n if (this.ptr === _OnigString._sharedPtr)\n _OnigString._sharedPtrInUse = false;\n else\n this._onigBinding.ofree(this.ptr);\n }\n};\n__publicField(_OnigString, \"LAST_ID\", 0);\n__publicField(_OnigString, \"_sharedPtr\", 0);\n// a pointer to a string of 10000 bytes\n__publicField(_OnigString, \"_sharedPtrInUse\", false);\nlet OnigString = _OnigString;\nclass OnigScanner {\n constructor(patterns) {\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"_ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n const strPtrsArr = [];\n const strLenArr = [];\n for (let i = 0, len = patterns.length; i < len; i++) {\n const utfString = new UtfString(patterns[i]);\n strPtrsArr[i] = utfString.createString(onigBinding);\n strLenArr[i] = utfString.utf8Length;\n }\n const strPtrsPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strPtrsArr, strPtrsPtr / 4);\n const strLenPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strLenArr, strLenPtr / 4);\n const scannerPtr = onigBinding.createOnigScanner(strPtrsPtr, strLenPtr, patterns.length);\n for (let i = 0, len = patterns.length; i < len; i++)\n onigBinding.ofree(strPtrsArr[i]);\n onigBinding.ofree(strLenPtr);\n onigBinding.ofree(strPtrsPtr);\n if (scannerPtr === 0)\n throwLastOnigError(onigBinding);\n this._onigBinding = onigBinding;\n this._ptr = scannerPtr;\n }\n dispose() {\n this._onigBinding.freeOnigScanner(this._ptr);\n }\n findNextMatchSync(string, startPosition, arg) {\n let options = 0 /* None */;\n if (typeof arg === \"number\") {\n options = arg;\n }\n if (typeof string === \"string\") {\n string = new OnigString(string);\n const result = this._findNextMatchSync(string, startPosition, false, options);\n string.dispose();\n return result;\n }\n return this._findNextMatchSync(string, startPosition, false, options);\n }\n _findNextMatchSync(string, startPosition, debugCall, options) {\n const onigBinding2 = this._onigBinding;\n const resultPtr = onigBinding2.findNextOnigScannerMatch(this._ptr, string.id, string.ptr, string.utf8Length, string.convertUtf16OffsetToUtf8(startPosition), options);\n if (resultPtr === 0) {\n return null;\n }\n const HEAPU32 = onigBinding2.HEAPU32;\n let offset = resultPtr / 4;\n const index = HEAPU32[offset++];\n const count = HEAPU32[offset++];\n const captureIndices = [];\n for (let i = 0; i < count; i++) {\n const beg = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n const end = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n captureIndices[i] = {\n start: beg,\n end,\n length: end - beg\n };\n }\n return {\n index,\n captureIndices\n };\n }\n}\nfunction isInstantiatorOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.instantiator === \"function\";\n}\nfunction isInstantiatorModule(dataOrOptions) {\n return typeof dataOrOptions.default === \"function\";\n}\nfunction isDataOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.data !== \"undefined\";\n}\nfunction isResponse(dataOrOptions) {\n return typeof Response !== \"undefined\" && dataOrOptions instanceof Response;\n}\nfunction isArrayBuffer(data) {\n return typeof ArrayBuffer !== \"undefined\" && (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) || typeof Buffer !== \"undefined\" && Buffer.isBuffer?.(data) || typeof SharedArrayBuffer !== \"undefined\" && data instanceof SharedArrayBuffer || typeof Uint32Array !== \"undefined\" && data instanceof Uint32Array;\n}\nlet initPromise;\nfunction loadWasm(options) {\n if (initPromise)\n return initPromise;\n async function _load() {\n onigBinding = await main(async (info) => {\n let instance = options;\n instance = await instance;\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (isInstantiatorOptionsObject(instance)) {\n instance = await instance.instantiator(info);\n } else if (isInstantiatorModule(instance)) {\n instance = await instance.default(info);\n } else {\n if (isDataOptionsObject(instance))\n instance = instance.data;\n if (isResponse(instance)) {\n if (typeof WebAssembly.instantiateStreaming === \"function\")\n instance = await _makeResponseStreamingLoader(instance)(info);\n else\n instance = await _makeResponseNonStreamingLoader(instance)(info);\n } else if (isArrayBuffer(instance)) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (instance instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (\"default\" in instance && instance.default instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance.default)(info);\n }\n }\n if (\"instance\" in instance)\n instance = instance.instance;\n if (\"exports\" in instance)\n instance = instance.exports;\n return instance;\n });\n }\n initPromise = _load();\n return initPromise;\n}\nfunction _makeArrayBufferLoader(data) {\n return (importObject) => WebAssembly.instantiate(data, importObject);\n}\nfunction _makeResponseStreamingLoader(data) {\n return (importObject) => WebAssembly.instantiateStreaming(data, importObject);\n}\nfunction _makeResponseNonStreamingLoader(data) {\n return async (importObject) => {\n const arrayBuffer = await data.arrayBuffer();\n return WebAssembly.instantiate(arrayBuffer, importObject);\n };\n}\n\nlet _defaultWasmLoader;\nfunction setDefaultWasmLoader(_loader) {\n _defaultWasmLoader = _loader;\n}\nfunction getDefaultWasmLoader() {\n return _defaultWasmLoader;\n}\nasync function createOnigurumaEngine(options) {\n if (options)\n await loadWasm(options);\n return {\n createScanner(patterns) {\n return new OnigScanner(patterns.map((p) => typeof p === \"string\" ? p : p.source));\n },\n createString(s) {\n return new OnigString(s);\n }\n };\n}\n\nexport { createOnigurumaEngine, getDefaultWasmLoader, loadWasm, setDefaultWasmLoader };\n","<script setup lang=\"ts\">\nimport { ref, watch, inject } from 'vue';\nimport { createHighlighterCore } from 'shiki/core';\nimport { createOnigurumaEngine } from 'shiki/engine/oniguruma';\n\nconst props = defineProps<{\n code: string;\n lang?: string;\n /** True while the enclosing message is still streaming. */\n streaming?: boolean;\n}>();\n\nconst effectiveTheme = inject<import('vue').Ref<'light' | 'dark'>>(\n 'effectiveTheme',\n ref(typeof document !== 'undefined' && document.documentElement.dataset.theme === 'dark' ? 'dark' : 'light'),\n);\n\nconst highlighted = ref('');\n/** Lightweight escaped rendering used while streaming (no shiki highlight). */\nconst plainHtml = ref('');\nconst copied = ref(false);\n\ntype Highlighter = Awaited<ReturnType<typeof createHighlighterCore>>;\n\nlet highlighter: Highlighter | null = null;\nconst loadedLangs = new Set<string>();\nconst loadingLangs = new Map<string, Promise<void>>();\n\n// Common aliases mapped to shiki language module names.\nconst LANG_ALIASES: Record<string, string> = {\n js: 'javascript', ts: 'typescript', py: 'python', sh: 'bash', shell: 'bash',\n shscript: 'bash', 'shell-script': 'bash', yml: 'yaml', md: 'markdown',\n rs: 'rust', rb: 'ruby', go: 'go', java: 'java', c: 'c', cpp: 'cpp',\n 'c++': 'cpp', cs: 'csharp', 'c#': 'csharp', kt: 'kotlin', kts: 'kotlin',\n scala: 'scala', swift: 'swift', dart: 'dart', lua: 'lua', r: 'r',\n sql: 'sql', toml: 'toml', ini: 'ini', xml: 'xml', svelte: 'svelte',\n astro: 'astro', dockerfile: 'docker', makefile: 'make', graphql: 'graphql',\n proto: 'protobuf', pl: 'perl', pm: 'perl',\n};\n\nasync function ensureHighlighter(): Promise<Highlighter> {\n if (highlighter) return highlighter;\n const [githubDark, githubLight] = await Promise.all([\n import('shiki/themes/github-dark.mjs'),\n import('shiki/themes/github-light.mjs'),\n ]);\n highlighter = await createHighlighterCore({\n themes: [githubDark.default, githubLight.default],\n langs: [],\n engine: createOnigurumaEngine(() => import('shiki/wasm')),\n });\n return highlighter;\n}\n\nasync function ensureLang(langName: string): Promise<boolean> {\n if (loadedLangs.has(langName)) return true;\n if (loadingLangs.has(langName)) {\n await loadingLangs.get(langName);\n return loadedLangs.has(langName);\n }\n\n const promise = (async () => {\n try {\n const h = await ensureHighlighter();\n // Try to dynamically import the language grammar.\n const mod = await import(`shiki/langs/${langName}.mjs`);\n await h.loadLanguage(mod.default);\n loadedLangs.add(langName);\n } catch {\n // Language not available in shiki - will fall back to plaintext.\n }\n })();\n\n loadingLangs.set(langName, promise);\n await promise;\n loadingLangs.delete(langName);\n return loadedLangs.has(langName);\n}\n\nfunction resolveLang(rawLang: string): string {\n const lower = rawLang.toLowerCase();\n return LANG_ALIASES[lower] ?? lower;\n}\n\nasync function render() {\n const rawLang = props.lang?.toLowerCase() ?? 'text';\n const langName = resolveLang(rawLang);\n const theme = effectiveTheme.value === 'light' ? 'github-light' : 'github-dark';\n\n try {\n const h = await ensureHighlighter();\n const loaded = await ensureLang(langName);\n if (loaded) {\n highlighted.value = h.codeToHtml(props.code, { lang: langName, theme });\n } else {\n highlighted.value = `<pre class=\"shiki-fallback\"><code>${escapeHtml(props.code)}</code></pre>`;\n }\n } catch {\n highlighted.value = `<pre class=\"shiki-fallback\"><code>${escapeHtml(props.code)}</code></pre>`;\n }\n}\n\nfunction escapeHtml(s: string): string {\n return s.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction copy() {\n navigator.clipboard.writeText(props.code).then(() => {\n copied.value = true;\n setTimeout(() => (copied.value = false), 1500);\n });\n}\n\nwatch(\n () => [props.code, props.lang, effectiveTheme.value] as const,\n ([code]) => {\n if (props.streaming) {\n // During streaming, skip shiki highlighting (expensive per chunk) and\n // render a lightweight escaped plain-text fallback instead.\n plainHtml.value = `<pre class=\"shiki-fallback\"><code>${escapeHtml(code)}</code></pre>`;\n } else {\n void render();\n }\n },\n { immediate: true },\n);\n\nwatch(\n () => props.streaming,\n (streaming, wasStreaming) => {\n if (wasStreaming && !streaming) {\n // Fence just closed: do the real highlight once with the final code.\n void render();\n }\n },\n);\n</script>\n\n<template>\n <div class=\"code-block\">\n <div class=\"code-header\">\n <span class=\"code-lang\">{{ lang || 'text' }}</span>\n <button :class=\"['code-copy', { copied }]\" @click=\"copy\">{{ copied ? '已复制' : '复制' }}</button>\n </div>\n <div class=\"code-content\" v-html=\"props.streaming ? plainHtml : (highlighted || plainHtml)\"></div>\n </div>\n</template>\n\n<style scoped>\n.code-block {\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n margin: 0.75em 0;\n overflow: hidden;\n}\n.code-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-1) var(--space-3);\n background: var(--color-surface);\n border-bottom: 1px solid var(--color-line);\n font-size: var(--font-size-xs);\n}\n.code-lang {\n color: var(--color-text-muted);\n text-transform: lowercase;\n font-family: var(--font-mono);\n letter-spacing: 0.02em;\n}\n.code-copy {\n display: inline-flex;\n align-items: center;\n background: transparent;\n border: 1px solid var(--color-line);\n color: var(--color-text-muted);\n border-radius: var(--radius-sm);\n padding: 2px var(--space-2);\n cursor: pointer;\n font-size: var(--font-size-xs);\n transition: color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);\n}\n.code-copy:hover {\n color: var(--color-text);\n border-color: var(--color-line-strong);\n background: var(--color-hover);\n}\n.code-copy:active {\n transform: translateY(1px);\n background: var(--color-selected);\n}\n.code-copy.copied {\n color: var(--color-success);\n border-color: var(--color-success);\n background: var(--color-success-soft);\n}\n.code-content :deep(pre) {\n margin: 0;\n padding: var(--space-3);\n overflow-x: auto;\n font-size: var(--font-size-sm);\n line-height: 1.6;\n font-family: var(--font-mono);\n}\n.code-content :deep(code) {\n font-family: var(--font-mono);\n}\n.code-content :deep(.line) { display: block; }\n.code-content :deep(.line.add) { background: var(--color-success-soft); box-shadow: inset 2px 0 0 var(--color-success); }\n.code-content :deep(.line.del) { background: var(--color-danger-soft); box-shadow: inset 2px 0 0 var(--color-danger); }\n.code-content :deep(.shiki-fallback) {\n margin: 0;\n padding: var(--space-3);\n overflow-x: auto;\n font-size: var(--font-size-sm);\n line-height: 1.6;\n font-family: var(--font-mono);\n}\n@media (max-width: 640px) {\n .code-copy { min-height: 44px; padding: var(--space-1) var(--space-3); }\n}\n</style>\n","<script lang=\"ts\">\nimport { computed, h, defineComponent, ref, watch } from 'vue';\nimport { marked, type Token } from 'marked';\nimport CodeBlock from './CodeBlock.vue';\n\n// Enable GFM features (task lists, tables, strikethrough) and line breaks.\nmarked.setOptions({ gfm: true, breaks: false });\n\nexport default defineComponent({\n props: {\n content: { type: String, required: true },\n streaming: { type: Boolean, default: false },\n },\n setup(props) {\n // While streaming, coalesce re-renders to at most one per animation\n // frame (chunks arrive as separate macrotasks; Vue's microtask batching\n // cannot merge them). When streaming ends, force one full render with\n // the final content so nothing is left in a stale frame.\n const renderContent = ref(props.content);\n let rafId: number | null = null;\n\n watch(\n () => props.content,\n (value) => {\n if (!props.streaming) {\n renderContent.value = value;\n return;\n }\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n renderContent.value = props.content;\n });\n },\n );\n\n watch(\n () => props.streaming,\n (streaming, wasStreaming) => {\n if (wasStreaming && !streaming) {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n renderContent.value = props.content;\n }\n },\n );\n\n const nodes = computed(() => {\n const safeContent = trimPartialClosingFences(renderContent.value);\n const tokens = marked.lexer(safeContent);\n return tokens.flatMap((token) => renderToken(token, props.streaming));\n });\n\n return () => h('div', { class: 'markdown-body' }, nodes.value);\n },\n});\n\n/**\n * During streaming, a ``` fence may be open but not yet closed.\n * marked.lexer will treat everything after an unclosed ``` as code content,\n * swallowing the rest of the message. Trim the trailing unclosed fence\n * so the partial code block renders as text instead.\n */\nfunction trimPartialClosingFences(content: string): string {\n // Count ``` fences in the content.\n const fenceRegex = /^(`{3,})/gm;\n let openFence: string | null = null;\n let openFenceIndex = -1;\n let openFenceLength = 0;\n let match: RegExpExecArray | null;\n while ((match = fenceRegex.exec(content)) !== null) {\n const fence = match[1]!;\n if (openFence === null) {\n openFence = fence;\n openFenceIndex = match.index;\n openFenceLength = fence.length;\n } else if (fence.length >= openFenceLength) {\n // Closing fence found.\n openFence = null;\n }\n }\n if (openFence !== null) {\n // Unclosed fence: trim everything from the opening fence onwards.\n return content.substring(0, openFenceIndex).trimEnd();\n }\n return content;\n}\n\n/**\n * Loose view over marked's discriminated token union. Casting through\n * `unknown` is intentional: the renderers access a superset of fields that\n * the union cannot express generically, and the `type` switch already\n * narrows which fields are populated at runtime.\n */\ninterface LooseToken {\n type: string;\n raw?: string;\n text?: string;\n href?: string;\n lang?: string;\n depth?: number;\n ordered?: boolean;\n tokens?: Token[];\n items?: { task: boolean; checked: boolean; tokens: Token[] }[];\n header?: Token[];\n rows?: Token[][];\n align?: ('center' | 'left' | 'right' | null)[];\n}\n\nfunction asLoose(token: Token): LooseToken {\n return token as unknown as LooseToken;\n}\n\nfunction renderToken(token: Token, streaming = false): ReturnType<typeof h>[] {\n const t = asLoose(token);\n switch (t.type) {\n case 'paragraph':\n return [h('p', { class: 'md-p' }, renderInline(t.tokens ?? []))];\n case 'heading':\n return [h(`h${t.depth ?? 2}`, { class: `md-h${t.depth ?? 2}` }, renderInline(t.tokens ?? []))];\n case 'code':\n return [h(CodeBlock, { code: t.text ?? '', lang: t.lang ?? 'text', streaming })];\n case 'blockquote':\n return [h('blockquote', { class: 'md-blockquote' }, (t.tokens ?? []).flatMap((n) => renderToken(n, streaming)))];\n case 'list': {\n const items = (t.items ?? []).map((item) => {\n const children: (ReturnType<typeof h> | string)[] = [];\n if (item.task) {\n children.push(h('input', { type: 'checkbox', checked: item.checked, disabled: true, class: 'md-checkbox' }));\n }\n children.push(...item.tokens.flatMap((n) => renderToken(n, streaming)));\n return h('li', { class: ['md-li', item.task ? 'md-task' : ''] }, children);\n });\n return [h(t.ordered ? 'ol' : 'ul', { class: t.ordered ? 'md-ol' : 'md-ul' }, items)];\n }\n case 'hr':\n return [h('hr', { class: 'md-hr' })];\n case 'space':\n return [];\n case 'html':\n // Raw HTML from the model is dangerous (XSS). Render escaped text.\n return [h('pre', { class: 'md-raw-html' }, t.text ?? '')];\n case 'table':\n return [h('div', { class: 'md-table-wrap', style: 'overflow-x:auto' }, [renderTable(t)])];\n case 'br':\n return [h('br')];\n case 'text':\n return [h('span', { class: 'md-text' }, t.tokens ? renderInline(t.tokens) : (t.text ?? ''))];\n case 'def':\n return [];\n default:\n return [h('p', { class: 'md-p' }, t.raw ?? '')];\n }\n}\n\nfunction renderTable(token: LooseToken): ReturnType<typeof h> {\n const headerCells = (token.header ?? []).map((cell, i) => {\n const align = token.align?.[i];\n const c = asLoose(cell);\n return h('th', { class: 'md-th', style: align ? `text-align:${align}` : '' }, c.tokens ? renderInline(c.tokens) : String(c.text ?? ''));\n });\n const bodyRows = (token.rows ?? []).map((row) =>\n h('tr', {}, row.map((cell, i) => {\n const align = token.align?.[i];\n const c = asLoose(cell);\n return h('td', { class: 'md-td', style: align ? `text-align:${align}` : '' }, c.tokens ? renderInline(c.tokens) : String(c.text ?? ''));\n })),\n );\n return h('table', { class: 'md-table' }, [\n h('thead', {}, [h('tr', {}, headerCells)]),\n h('tbody', {}, bodyRows),\n ]);\n}\n\nfunction renderInline(tokens: Token[]): (string | ReturnType<typeof h>)[] {\n return tokens.map((token) => {\n const t = asLoose(token);\n switch (t.type) {\n case 'text':\n return t.text ?? '';\n case 'codespan':\n return h('code', { class: 'md-code' }, t.text ?? '');\n case 'strong':\n return h('strong', { class: 'md-strong' }, renderInline(t.tokens ?? []));\n case 'em':\n return h('em', { class: 'md-em' }, renderInline(t.tokens ?? []));\n case 'del':\n return h('del', { class: 'md-del' }, renderInline(t.tokens ?? []));\n case 'link': {\n const href = t.href;\n if (href && !/^(https?:|mailto:|#|\\/)/i.test(href)) {\n return t.raw ?? '';\n }\n return h('a', { class: 'md-a', href, target: '_blank', rel: 'noopener' }, renderInline(t.tokens ?? []));\n }\n case 'image':\n return h('img', { class: 'md-img', src: t.href, alt: t.text ?? '', loading: 'lazy' });\n case 'br':\n return h('br');\n case 'html':\n return h('code', { class: 'md-raw-inline' }, t.text ?? '');\n case 'escape':\n return t.text ?? '';\n default:\n return t.raw ?? '';\n }\n });\n}\n</script>\n\n<style scoped>\n.markdown-body :deep(.md-p) { margin: 0.6em 0; }\n.markdown-body :deep(.md-h1), .markdown-body :deep(.md-h2), .markdown-body :deep(.md-h3) {\n margin: 1em 0 0.5em; font-weight: 600;\n}\n.markdown-body :deep(.md-h1) { font-size: 1.5em; border-bottom: 1px solid var(--color-line); padding-bottom: 0.3em; }\n.markdown-body :deep(.md-h2) { font-size: 1.3em; }\n.markdown-body :deep(.md-h3) { font-size: 1.15em; }\n.markdown-body :deep(.md-ul), .markdown-body :deep(.md-ol) { margin: 0.6em 0; padding-left: 1.5em; }\n.markdown-body :deep(.md-li) { margin: 0.25em 0; }\n.markdown-body :deep(.md-task) { list-style: none; margin-left: -1.2em; }\n.markdown-body :deep(.md-checkbox) { margin-right: 6px; vertical-align: middle; accent-color: var(--color-accent); }\n.markdown-body :deep(.md-blockquote) {\n margin: 0.6em 0; padding: var(--space-1) var(--space-4); border-left: 3px solid var(--color-accent);\n border-radius: 0 var(--radius-sm) var(--radius-sm) 0;\n background: var(--color-accent-soft);\n color: var(--color-text-muted);\n}\n.markdown-body :deep(.md-code) {\n background: var(--color-surface-sunken); padding: 0.15em 0.35em; border-radius: var(--radius-xs);\n border: 1px solid var(--color-line);\n font-family: var(--font-mono); font-size: 0.9em;\n}\n.markdown-body :deep(.md-a) { color: var(--color-info); text-decoration: none; transition: color var(--dur-fast) var(--ease-out); }\n.markdown-body :deep(.md-a:hover) { color: var(--color-accent); text-decoration: underline; }\n.markdown-body :deep(.md-hr) { border: none; border-top: 1px solid var(--color-line); margin: 1em 0; }\n.markdown-body :deep(.md-strong) { font-weight: 600; }\n.markdown-body :deep(.md-em) { font-style: italic; }\n.markdown-body :deep(.md-del) { text-decoration: line-through; color: var(--color-text-muted); }\n.markdown-body :deep(.md-img) { max-width: 100%; border-radius: var(--radius-md); }\n.markdown-body :deep(.md-table) { border-collapse: collapse; width: 100%; margin: 0.6em 0; font-size: 0.9em; }\n.markdown-body :deep(.md-th), .markdown-body :deep(.md-td) { border: 1px solid var(--color-line); padding: 6px 10px; text-align: left; }\n.markdown-body :deep(.md-th) { background: var(--color-surface-sunken); font-weight: 600; }\n.markdown-body :deep(.md-html) { margin: 0.6em 0; }\n</style>\n","import type { ToolMessage } from '../types';\n\n/** Group consecutive tools with the same name for collapsible display. */\nconst EDIT_TOOL_NAMES = new Set([\n 'edit', 'str_replace', 'replace', 'write', 'multi_edit',\n 'create_file', 'edit_file', 'apply_patch',\n]);\n\nexport function isEditTool(name: string): boolean {\n return EDIT_TOOL_NAMES.has(name.toLowerCase());\n}\n\nexport type ToolStatus = 'ok' | 'error' | 'running' | 'suspended' | 'unknown';\n\n/**\n * `output === undefined` only means \"no result yet\" while the turn is live.\n * For a settled or restored message it means the result was never persisted,\n * so reporting `running` pinned the fold to a breathing indicator forever.\n */\nexport function toolStatus(tool: ToolMessage, live = true): ToolStatus {\n if (tool.suspended) return 'suspended';\n if (tool.isError) return 'error';\n if (tool.output === undefined) return live ? 'running' : 'unknown';\n return 'ok';\n}\n\nexport function aggregateStatus(tools: ToolMessage[], live = true): ToolStatus {\n const statuses = new Set(tools.map((tool) => toolStatus(tool, live)));\n if (statuses.has('running')) return 'running';\n if (statuses.has('error')) return 'error';\n // Suspended must outrank unknown/ok: a green dot on a call that is parked\n // waiting for approval is the wrong signal.\n if (statuses.has('suspended')) return 'suspended';\n if (statuses.has('unknown')) return 'unknown';\n return 'ok';\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ToolMessage } from '../types';\nimport { toolStatus } from '../utils/toolGroup';\n\nconst props = withDefaults(defineProps<{\n tool: ToolMessage;\n /** True while the owning turn is still streaming. */\n live?: boolean;\n}>(), { live: true });\n\nconst status = computed(() => toolStatus(props.tool, props.live));\n\nconst statusIcon = computed(() => {\n switch (status.value) {\n case 'ok': return '✓';\n case 'error': return '✗';\n default: return '';\n }\n});\n\nconst expanded = ref(false);\nlet userToggled = false;\n\n// Auto-expand while running so streamed progress is visible; settle afterwards.\nwatch(status, (s) => {\n if (userToggled) return;\n expanded.value = s === 'running';\n}, { immediate: true });\n\nfunction toggle() {\n userToggled = true;\n expanded.value = !expanded.value;\n}\n\n/** Short one-line parameter summary for the header, e.g. `path=\"a.ts\", cmd=\"ls\"`. */\nconst paramSummary = computed(() => {\n const args = props.tool.args;\n if (!args || typeof args !== 'object') {\n return args === undefined ? '' : String(args);\n }\n const parts: string[] = [];\n for (const [k, v] of Object.entries(args as Record<string, unknown>)) {\n let s: string;\n if (typeof v === 'string') s = v.length > 40 ? `${v.slice(0, 40)}…` : v;\n else {\n try { s = JSON.stringify(v); } catch { s = String(v); }\n if (s.length > 40) s = `${s.slice(0, 40)}…`;\n }\n parts.push(`${k}=${s}`);\n if (parts.length >= 3) break;\n }\n return parts.join(' ');\n});\n\nfunction formatArgs(): string {\n if (!props.tool.args) return '';\n try {\n return JSON.stringify(props.tool.args, null, 2);\n } catch {\n return String(props.tool.args);\n }\n}\n\nfunction formatOutput(s: string | undefined): string {\n return s ?? '';\n}\n\n/** Full output text (what would be rendered when expanded). */\nconst outputText = computed(() => formatOutput(props.tool.output));\nconst outputLarge = computed(() => outputText.value.length > 8192);\nconst outputExpanded = ref(false);\nconst outputShown = computed(() => (outputLarge.value && !outputExpanded.value ? outputText.value.slice(0, 280) : outputText.value));\n\nasync function copyOutput(): Promise<void> {\n try {\n await navigator.clipboard?.writeText(outputText.value);\n } catch {\n // Clipboard unavailable; ignore.\n }\n}\n\n/** Workdir-relative image output (e.g. browser/screenshot tools) → inline preview via the file gate. */\nconst imageSrc = computed(() => {\n const t = outputText.value.trim();\n if (!/^[\\w@./-]+\\.(png|jpe?g|gif|webp|avif)$/i.test(t)) return null;\n if (t.includes('..')) return null;\n if (t.startsWith('/')) return null;\n if (outputLarge.value) return null;\n return `/api/v1/files/raw?path=${encodeURIComponent(t)}`;\n});\n</script>\n\n<template>\n <div :class=\"['tool-card', `is-${status}`]\">\n <div class=\"tool-header\" role=\"button\" tabindex=\"0\" @click=\"toggle\" @keydown.enter.prevent=\"toggle\">\n <span :class=\"['status-dot', status]\">\n <template v-if=\"statusIcon\">{{ statusIcon }}</template>\n </span>\n <span class=\"tool-name\">{{ tool.name }}</span>\n <span v-if=\"paramSummary\" class=\"tool-params\" :title=\"paramSummary\">{{ paramSummary }}</span>\n <span :class=\"['tool-chevron', { open: expanded }]\">▸</span>\n </div>\n\n <div :class=\"['tool-collapse', { open: expanded }]\">\n <div class=\"tool-collapse-inner\">\n <div class=\"tool-body\">\n <pre v-if=\"formatArgs()\" class=\"tool-args\"><code>{{ formatArgs() }}</code></pre>\n <pre v-if=\"tool.output !== undefined && !imageSrc\" class=\"tool-result\"><code>{{ outputShown || '(无输出)' }}</code></pre>\n <div v-if=\"tool.output !== undefined && imageSrc\" class=\"tool-image-wrap\">\n <img class=\"tool-image\" :src=\"imageSrc\" alt=\"\" loading=\"lazy\" @error=\"(e) => ((e.currentTarget as HTMLImageElement).style.display = 'none')\" />\n </div>\n <div v-if=\"outputLarge\" class=\"tool-output-actions\">\n <button class=\"tool-output-btn\" @click=\"outputExpanded = !outputExpanded\">{{ outputExpanded ? '收起' : '展开全文' }}</button>\n <button class=\"tool-output-btn\" @click=\"copyOutput\">复制</button>\n </div>\n <div v-else class=\"tool-running-hint\">执行中…</div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tool-card {\n background: var(--color-surface);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-sm);\n box-shadow: var(--shadow-xs);\n overflow: hidden;\n font-size: var(--font-size-sm);\n animation: rise-in var(--dur-msg-assistant) var(--ease-out) both;\n transition: border-color var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);\n}\n.tool-card:hover {\n border-color: var(--color-line-strong);\n}\n.tool-card.is-running {\n border-color: var(--color-accent-bd);\n}\n.tool-card.is-error {\n border-color: var(--color-danger);\n}\n@media (prefers-reduced-motion: reduce) {\n .tool-card {\n animation: none;\n }\n}\n\n.tool-header {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n cursor: pointer;\n user-select: none;\n background: var(--color-surface-raised);\n transition: background var(--dur-fast) var(--ease-out);\n}\n.tool-header:hover {\n background: var(--color-hover);\n}\n.tool-header:active {\n background: var(--color-selected);\n}\n.tool-card.is-error .tool-header {\n background: var(--color-danger-soft);\n}\n\n.status-dot {\n width: 16px;\n height: 16px;\n border-radius: var(--radius-full);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n flex-shrink: 0;\n}\n.status-dot.ok {\n background: var(--color-success-soft);\n color: var(--color-success);\n}\n.status-dot.error {\n background: var(--color-danger-soft);\n color: var(--color-danger);\n}\n.status-dot.running {\n background: var(--gradient-accent);\n color: var(--color-on-accent);\n box-shadow: 0 0 8px var(--color-accent-glow);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n.status-dot.suspended {\n background: var(--color-line-strong);\n}\n@media (prefers-reduced-motion: reduce) {\n .status-dot.running {\n animation: none;\n }\n}\n\n.tool-name {\n font-family: var(--font-mono);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text);\n flex-shrink: 0;\n}\n.tool-params {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n}\n.tool-chevron {\n color: var(--color-text-faint);\n font-size: var(--font-size-xs);\n transition: transform var(--dur-base) var(--ease-out);\n flex-shrink: 0;\n}\n.tool-chevron.open {\n transform: rotate(90deg);\n}\n\n/* 0fr ↔ 1fr expand animation */\n.tool-collapse {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--dur-base) var(--ease-out);\n}\n.tool-collapse.open {\n grid-template-rows: 1fr;\n}\n.tool-collapse-inner {\n overflow: hidden;\n min-height: 0;\n}\n\n.tool-body {\n padding: var(--space-2) var(--space-3) var(--space-3);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n.tool-args,\n.tool-result {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n overflow-x: auto;\n max-height: 320px;\n overflow-y: auto;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n}\n.tool-result {\n color: var(--color-text);\n}\n.tool-card.is-error .tool-result {\n color: var(--color-danger);\n border-color: var(--color-danger);\n}\n.tool-running-hint {\n color: var(--color-text-faint);\n font-size: var(--font-size-xs);\n padding: var(--space-1) var(--space-2);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .tool-running-hint {\n animation: none;\n }\n}\n.tool-output-actions {\n display: flex;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n}\n.tool-output-btn {\n min-height: 24px;\n padding: 0 var(--space-3);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-sm);\n background: var(--color-surface);\n color: var(--color-text-muted);\n font-size: 11px;\n cursor: pointer;\n transition: border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);\n}\n.tool-output-btn:hover {\n border-color: var(--color-accent-bd);\n color: var(--color-text);\n}\n.tool-image-wrap {\n padding: var(--space-2);\n}\n.tool-image {\n display: block;\n max-width: 100%;\n max-height: 320px;\n object-fit: contain;\n border-radius: var(--radius-md);\n border: 1px solid var(--color-line);\n}\n</style>\n","// Simple LCS-based line diff for tool edit previews.\n// O(m*n) - fine for typical edits (< 500 lines). Falls back to naive\n// old=del/new=add for very large inputs.\n\nexport interface DiffLine {\n type: 'add' | 'del' | 'context';\n text: string;\n oldNo?: number;\n newNo?: number;\n}\n\nconst MAX_LCS_LINES = 500;\n\nfunction lcsTable(a: readonly string[], b: readonly string[]): number[][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] = a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1] + 1\n : Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n return dp;\n}\n\nfunction backtrack(\n dp: number[][],\n a: readonly string[],\n b: readonly string[],\n i: number,\n j: number,\n): DiffLine[] {\n const result: DiffLine[] = [];\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {\n result.unshift({ type: 'context', text: a[i - 1]!, oldNo: i, newNo: j });\n i--; j--;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j]!)) {\n result.unshift({ type: 'add', text: b[j - 1]!, newNo: j });\n j--;\n } else {\n result.unshift({ type: 'del', text: a[i - 1]!, oldNo: i });\n i--;\n }\n }\n return result;\n}\n\n/** Parse a unified git patch (`@@ -a,b +c,d @@ ...`) into DiffLine[]. */\nexport function parseUnifiedDiff(patch: string): DiffLine[] {\n const out: DiffLine[] = [];\n const lines = patch.replaceAll('\\r\\n', '\\n').split('\\n');\n let oldNo = 0;\n let newNo = 0;\n for (const line of lines) {\n if (line.startsWith('@@')) {\n const m = /@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/.exec(line);\n oldNo = m ? Number(m[1]) : 0;\n newNo = m ? Number(m[2]) : 0;\n const text = line.startsWith('@@')\n ? line.slice(line.indexOf('@@') + 2, line.lastIndexOf('@@') || line.length)\n : '';\n out.push({ type: 'context', text: text.trim() ? `@@ hunk ${oldNo},${newNo} @@` : line, oldNo, newNo });\n continue;\n }\n if (line.startsWith('+++') || line.startsWith('---')) {\n // File headers keep as context (line numbers unchanged).\n out.push({ type: 'context', text: line, oldNo, newNo });\n continue;\n }\n if (line.startsWith('+')) {\n newNo += 1;\n out.push({ type: 'add', text: line.slice(1), newNo });\n } else if (line.startsWith('-')) {\n oldNo += 1;\n out.push({ type: 'del', text: line.slice(1), oldNo });\n } else {\n oldNo += 1;\n newNo += 1;\n out.push({ type: 'context', text: line, oldNo, newNo });\n }\n }\n return out;\n}\n\n/** Compute a line-by-line diff between two strings. */\nexport function computeDiff(oldStr: string, newStr: string): DiffLine[] {\n const oldLines = oldStr.split('\\n');\n const newLines = newStr.split('\\n');\n\n // For very large inputs, skip LCS and just show old=del / new=add.\n if (oldLines.length + newLines.length > MAX_LCS_LINES) {\n const result: DiffLine[] = [];\n oldLines.forEach((line, i) => result.push({ type: 'del', text: line, oldNo: i + 1 }));\n newLines.forEach((line, i) => result.push({ type: 'add', text: line, newNo: i + 1 }));\n return result;\n }\n\n const dp = lcsTable(oldLines, newLines);\n return backtrack(dp, oldLines, newLines, oldLines.length, newLines.length);\n}\n\nexport interface DiffStats {\n added: number;\n removed: number;\n}\n\nexport function diffStats(lines: DiffLine[]): DiffStats {\n let added = 0;\n let removed = 0;\n for (const line of lines) {\n if (line.type === 'add') added++;\n else if (line.type === 'del') removed++;\n }\n return { added, removed };\n}\n\n// ── Tool arg extraction ──────────────────────────────────────────────────\n\nconst OLD_FIELDS = ['old_string', 'oldString', 'old_str', 'old_text', 'oldText', 'old', 'search'];\nconst NEW_FIELDS = ['new_string', 'newString', 'new_str', 'new_text', 'newText', 'new', 'replace', 'content'];\nconst PATH_FIELDS = ['path', 'file_path', 'filePath', 'file', 'filename'];\n\nfunction extractField(args: Record<string, unknown>, fields: string[]): string | undefined {\n for (const f of fields) {\n const v = args[f];\n if (typeof v === 'string' && v.length > 0) return v;\n }\n return undefined;\n}\n\nexport interface EditDiffResult {\n path: string | undefined;\n diff: DiffLine[];\n stats: DiffStats;\n}\n\n/** Try to build a diff from tool arguments (edit/write/replace tools). */\nexport function buildEditDiff(args: unknown): EditDiffResult | null {\n if (!args || typeof args !== 'object') return null;\n const obj = args as Record<string, unknown>;\n\n const path = extractField(obj, PATH_FIELDS);\n const oldStr = extractField(obj, OLD_FIELDS);\n const newStr = extractField(obj, NEW_FIELDS);\n\n // Need at least new content to show anything.\n if (!newStr && !oldStr) return null;\n\n const diff = computeDiff(oldStr ?? '', newStr ?? '');\n const stats = diffStats(diff);\n\n return { path, diff, stats };\n}\n","<!-- Line-by-line diff renderer. Shared by EditToolCard and any future\n diff display (e.g. a diff panel). Pure presentation, no logic. -->\n<script setup lang=\"ts\">\nimport type { DiffLine } from '../utils/diff';\n\ndefineProps<{ lines: DiffLine[] }>();\n</script>\n\n<template>\n <div class=\"diff-lines\">\n <div v-for=\"(line, i) in lines\" :key=\"i\" class=\"dl\" :class=\"`dl-${line.type}`\">\n <span class=\"dl-gutter old\">{{ line.oldNo ?? '' }}</span>\n <span class=\"dl-gutter new\">{{ line.newNo ?? '' }}</span>\n <span class=\"dl-sign\">{{ line.type === 'add' ? '+' : line.type === 'del' ? '−' : ' ' }}</span>\n <span class=\"dl-text\">{{ line.text }}</span>\n </div>\n </div>\n</template>\n\n<style scoped>\n.diff-lines {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n width: max-content;\n min-width: 100%;\n overflow-x: auto;\n border-radius: var(--radius-sm);\n}\n.dl {\n display: flex;\n align-items: flex-start;\n min-height: 18px;\n white-space: pre;\n width: 100%;\n}\n.dl:hover .dl-text {\n background: var(--color-hover);\n}\n.dl-gutter {\n flex: none;\n width: 36px;\n padding: 0 6px;\n text-align: right;\n color: var(--color-text-faint);\n user-select: none;\n font-variant-numeric: tabular-nums;\n}\n.dl-gutter.new {\n border-right: 1px solid var(--color-line);\n}\n.dl-sign {\n flex: none;\n width: 16px;\n text-align: center;\n user-select: none;\n font-weight: 600;\n}\n.dl-text {\n flex: none;\n padding-right: 14px;\n white-space: pre;\n color: var(--color-text);\n}\n\n.dl-add {\n background: var(--color-success-soft);\n box-shadow: inset 2px 0 0 var(--color-success);\n}\n.dl-add .dl-sign { color: var(--color-success); }\n\n.dl-del {\n background: var(--color-danger-soft);\n box-shadow: inset 2px 0 0 var(--color-danger);\n}\n.dl-del .dl-sign { color: var(--color-danger); }\n\n.dl-context .dl-sign { color: var(--color-text-faint); }\n</style>\n","<!-- Specialized tool card for file edit/write operations.\n Shows file path, diff stats chip (+N -M), and an expandable diff view. -->\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ToolMessage } from '../types';\nimport { buildEditDiff, type DiffLine } from '../utils/diff';\nimport { toolStatus } from '../utils/toolGroup';\nimport DiffLines from './DiffLines.vue';\n\nconst props = withDefaults(defineProps<{\n tool: ToolMessage;\n /** True while the owning turn is still streaming. */\n live?: boolean;\n}>(), { live: true });\n\nconst status = computed(() => toolStatus(props.tool, props.live));\n\nconst statusIcon = computed(() => {\n switch (status.value) {\n case 'ok': return '✓';\n case 'error': return '✗';\n default: return '';\n }\n});\n\nconst editDiff = computed(() => {\n const result = buildEditDiff(props.tool.args);\n return result;\n});\n\nconst chip = computed(() => {\n const d = editDiff.value;\n if (!d || status.value === 'error') return '';\n const { added, removed } = d.stats;\n if (!added && !removed) return '';\n return `+${added} −${removed}`;\n});\n\nconst filePath = computed(() => editDiff.value?.path);\n\nconst expanded = ref(false);\nlet userToggled = false;\n\nwatch(status, (s) => {\n if (userToggled) return;\n expanded.value = s === 'running';\n}, { immediate: true });\n\nfunction toggle() {\n userToggled = true;\n expanded.value = !expanded.value;\n}\n\nconst diffLines = computed<DiffLine[]>(() => editDiff.value?.diff ?? []);\nconst hasDiff = computed(() => diffLines.value.length > 0);\n</script>\n\n<template>\n <div :class=\"['tool-card', `is-${status}`, 'edit-tool-card']\">\n <div class=\"tool-header\" role=\"button\" tabindex=\"0\" @click=\"toggle\" @keydown.enter.prevent=\"toggle\">\n <span :class=\"['status-dot', status]\">\n <template v-if=\"statusIcon\">{{ statusIcon }}</template>\n </span>\n <span class=\"tool-name\">{{ tool.name }}</span>\n <span v-if=\"filePath\" class=\"tool-filepath\" :title=\"filePath\">{{ filePath }}</span>\n <span v-if=\"chip\" class=\"diff-chip\">{{ chip }}</span>\n <span :class=\"['tool-chevron', { open: expanded }]\">▸</span>\n </div>\n\n <div :class=\"['tool-collapse', { open: expanded }]\">\n <div class=\"tool-collapse-inner\">\n <div class=\"tool-body\">\n <DiffLines v-if=\"hasDiff\" :lines=\"diffLines\" />\n <pre v-if=\"tool.output !== undefined\" class=\"tool-result\"><code>{{ tool.output || '(无输出)' }}</code></pre>\n <div v-else class=\"tool-running-hint\">执行中…</div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tool-card {\n background: var(--color-surface);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-sm);\n box-shadow: var(--shadow-xs);\n overflow: hidden;\n font-size: var(--font-size-sm);\n animation: rise-in var(--dur-msg-assistant) var(--ease-out) both;\n transition: border-color var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);\n}\n.tool-card:hover { border-color: var(--color-line-strong); }\n.tool-card.is-running { border-color: var(--color-accent-bd); }\n.tool-card.is-error { border-color: var(--color-danger); }\n@media (prefers-reduced-motion: reduce) {\n .tool-card { animation: none; }\n}\n\n.tool-header {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n cursor: pointer;\n user-select: none;\n background: var(--color-surface-raised);\n transition: background var(--dur-fast) var(--ease-out);\n}\n.tool-header:hover { background: var(--color-hover); }\n.tool-header:active { background: var(--color-selected); }\n.tool-card.is-error .tool-header { background: var(--color-danger-soft); }\n\n.status-dot {\n width: 16px; height: 16px;\n border-radius: var(--radius-full);\n display: inline-flex; align-items: center; justify-content: center;\n font-size: 10px; font-weight: 700; flex-shrink: 0;\n}\n.status-dot.ok { background: var(--color-success-soft); color: var(--color-success); }\n.status-dot.error { background: var(--color-danger-soft); color: var(--color-danger); }\n.status-dot.running {\n background: var(--gradient-accent);\n color: var(--color-on-accent);\n box-shadow: 0 0 8px var(--color-accent-glow);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n.status-dot.suspended { background: var(--color-line-strong); }\n@media (prefers-reduced-motion: reduce) {\n .status-dot.running { animation: none; }\n}\n\n.tool-name {\n font-family: var(--font-mono);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text);\n flex-shrink: 0;\n}\n.tool-filepath {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n direction: rtl;\n text-align: left;\n}\n.diff-chip {\n flex-shrink: 0;\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-full);\n padding: 1px var(--space-2);\n}\n.tool-chevron {\n color: var(--color-text-faint);\n font-size: var(--font-size-xs);\n transition: transform var(--dur-base) var(--ease-out);\n flex-shrink: 0;\n}\n.tool-chevron.open { transform: rotate(90deg); }\n\n.tool-collapse {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--dur-base) var(--ease-out);\n}\n.tool-collapse.open { grid-template-rows: 1fr; }\n.tool-collapse-inner { overflow: hidden; min-height: 0; }\n\n.tool-body {\n padding: var(--space-2) var(--space-3) var(--space-3);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n overflow-x: auto;\n}\n.tool-result {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n overflow-x: auto;\n max-height: 200px;\n overflow-y: auto;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n color: var(--color-text);\n}\n.tool-card.is-error .tool-result {\n color: var(--color-danger);\n border-color: var(--color-danger);\n}\n.tool-running-hint {\n color: var(--color-text-faint);\n font-size: var(--font-size-xs);\n padding: var(--space-1) var(--space-2);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .tool-running-hint { animation: none; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { ToolMessage } from '../types';\nimport { aggregateStatus, type ToolStatus, isEditTool } from '../utils/toolGroup';\nimport GenericToolCard from './GenericToolCard.vue';\nimport EditToolCard from './EditToolCard.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(defineProps<{ name: string; tools: ToolMessage[]; live?: boolean }>(), { live: true });\n/**\n * The fold is user-driven only. Auto-expanding on `running` turned every agent\n * turn into a wall of cards; the live state is carried by the status dot and\n * the meta line inside this same 32px row instead.\n */\nconst open = ref(false);\nconst status = computed<ToolStatus>(() => aggregateStatus(props.tools, props.live));\nconst completedCount = computed(() => props.tools.filter((tool) => tool.output !== undefined && !tool.isError).length);\nconst summary = computed(() => {\n if (status.value === 'running') return '执行中';\n if (status.value === 'error') return '含失败调用';\n if (status.value === 'suspended') return '含挂起等待';\n if (status.value === 'unknown') return '结果未持久化';\n return `已完成 ${completedCount.value} 项`;\n});\nfunction toggle() { open.value = !open.value; }\n</script>\n\n<template>\n <section :class=\"['tool-process', { open, running: status === 'running', error: status === 'error' }]\">\n <button class=\"process-head\" type=\"button\" :aria-expanded=\"open\" @click=\"toggle\">\n <SvgIcon name=\"chevron-down\" :size=\"12\" class=\"chevron\" />\n <span :class=\"['process-dot', status]\" aria-hidden=\"true\" />\n <span class=\"process-label\">{{ name }}</span>\n <span class=\"process-meta\">{{ summary }} · {{ tools.length }} 步</span>\n <span class=\"process-names\" :title=\"tools.map((tool) => tool.name).join('、')\">\n {{ tools.map((tool) => tool.name).join(' · ') }}\n </span>\n </button>\n <div class=\"process-collapse\">\n <div class=\"process-inner\">\n <component\n :is=\"isEditTool(tool.name) ? EditToolCard : GenericToolCard\"\n v-for=\"tool in props.tools\"\n :key=\"tool.toolCallId\"\n :tool=\"tool\"\n :live=\"live\"\n />\n </div>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Collapsed = one 32px text row with no box. The border only appears when\n expanded, so a fold never reads as a card nested inside another card. */\n.tool-process {\n overflow: hidden;\n border: 1px solid transparent;\n border-radius: var(--radius-md);\n background: transparent;\n animation: rise-in var(--dur-msg-assistant) var(--ease-out) both;\n transition:\n border-color var(--dur-base) var(--ease-out),\n background var(--dur-base) var(--ease-out);\n}\n.tool-process.open {\n border-color: var(--color-line);\n background: var(--color-surface);\n}\n.tool-process.error.open {\n border-color: color-mix(in srgb, var(--color-danger) 42%, var(--color-line));\n}\n.process-head {\n width: 100%;\n min-height: 32px;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 var(--space-2);\n border: 0;\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n text-align: left;\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out);\n}\n.process-head:hover { background: var(--color-hover); color: var(--color-text); }\n.process-head:active { background: var(--color-selected); }\n.process-dot {\n width: 6px;\n height: 6px;\n flex-shrink: 0;\n border-radius: var(--radius-full);\n background: var(--color-text-faint);\n}\n.process-dot.ok { background: var(--color-success); }\n.process-dot.error { background: var(--color-danger); }\n.process-dot.unknown { background: var(--color-line-strong); }\n.process-dot.suspended { background: var(--color-warning); }\n.process-dot.running {\n background: var(--color-accent);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n.process-label { flex-shrink: 0; font-weight: 600; color: var(--color-text); }\n.process-meta { flex-shrink: 0; color: var(--color-text-faint); }\n.process-names {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-text-faint);\n font-family: var(--font-mono);\n font-size: 11px;\n}\n.chevron {\n flex-shrink: 0;\n color: var(--color-text-faint);\n transform: rotate(-90deg);\n transition: transform var(--dur-base) var(--ease-out);\n}\n.open .chevron { transform: none; }\n.process-collapse {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--dur-base) var(--ease-out);\n}\n.open .process-collapse { grid-template-rows: 1fr; }\n.process-inner {\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 0 var(--space-2);\n}\n.open .process-inner {\n padding-top: var(--space-2);\n padding-bottom: var(--space-2);\n border-top: 1px solid var(--color-line);\n}\n@media (prefers-reduced-motion: reduce) {\n .tool-process { animation: none; }\n .process-dot.running { animation: none; }\n}\n@media (max-width: 640px) {\n .process-names { display: none; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue';\nimport type { ToolMessage } from '../types';\n\nconst props = withDefaults(\n defineProps<{\n tool: ToolMessage;\n /** True while the parent turn is still streaming thinking deltas. */\n active?: boolean;\n /** Session REST context for loading truncated thinking on demand. */\n sessionId?: string;\n /** Journal seq of the owning message (pagination cursor for the entry API). */\n msgSeq?: number;\n }>(),\n { active: false, sessionId: '', msgSeq: undefined },\n);\n\nconst panelOpen = ref(false);\nconst streamRef = ref<HTMLElement | null>(null);\nconst loadingFull = ref(false);\nconst fullLoaded = ref(false);\n\nconst text = ref(props.tool.output ?? '');\nwatch(\n () => props.tool.output,\n (v) => {\n if (v !== undefined && !loadingFull.value && !fullLoaded.value) text.value = v;\n },\n);\n\nconst isTruncated = computed(() => Boolean(props.tool.truncated));\n\n/** Load the full thinking body (truncated snapshots only carry a tail excerpt). */\nasync function ensureFull(): Promise<void> {\n if (!isTruncated.value || fullLoaded.value || loadingFull.value) return;\n if (!props.sessionId || props.msgSeq === undefined) return;\n loadingFull.value = true;\n try {\n const res = await fetch(\n `/api/v1/sessions/${props.sessionId}/messages?seq=${props.msgSeq}&tool=${encodeURIComponent(props.tool.toolCallId)}`,\n );\n const data = (await res.json()) as { output?: string };\n if (typeof data.output === 'string' && data.output.length > 0) {\n text.value = data.output;\n fullLoaded.value = true;\n }\n } catch {\n // Keep the tail excerpt; the panel still shows something honest.\n } finally {\n loadingFull.value = false;\n }\n}\n\n/** Teaser: last non-empty paragraph, shown faded once the turn ends. */\nconst teaser = computed(() => {\n const paragraphs = text.value.split(/\\n+/).map((p) => p.trim()).filter(Boolean);\n return paragraphs.at(-1) ?? '';\n});\n\n// Keep the streaming window pinned to the bottom while new deltas arrive.\nwatch(text, () => {\n if (!props.active) return;\n nextTick(() => {\n const el = streamRef.value;\n if (el) el.scrollTop = el.scrollHeight;\n });\n});\n\nfunction openPanel() {\n void ensureFull();\n panelOpen.value = true;\n}\n\nfunction closePanel() {\n panelOpen.value = false;\n}\n</script>\n\n<template>\n <div class=\"thinking-block\">\n <button\n v-if=\"!active\"\n class=\"thinking-teaser\"\n :title=\"isTruncated ? '思考较长,点击查看完整思考过程' : '点击查看完整思考过程'\"\n @click=\"openPanel\"\n >\n <span class=\"teaser-icon\">💭</span>\n <span class=\"teaser-text\">{{ loadingFull ? '加载完整思考…' : teaser || '思考过程' }}</span>\n <span class=\"teaser-open\">{{ isTruncated ? '查看全文' : '展开' }}</span>\n </button>\n\n <div v-else class=\"thinking-stream\">\n <div class=\"stream-header\">\n <span class=\"stream-icon\">💭</span>\n <span class=\"stream-title\">思考中…</span>\n <span class=\"stream-dot\" />\n </div>\n <div ref=\"streamRef\" class=\"stream-body\">{{ text }}</div>\n </div>\n\n <Teleport to=\"body\">\n <div v-if=\"panelOpen\" class=\"thinking-overlay\" @click.self=\"closePanel\">\n <aside class=\"thinking-panel\" role=\"dialog\" aria-label=\"思考过程\">\n <header class=\"panel-header\">\n <span>💭 思考过程</span>\n <button class=\"panel-close\" aria-label=\"关闭\" @click=\"closePanel\">✕</button>\n </header>\n <div class=\"panel-body\">{{ text || '(空)' }}</div>\n </aside>\n </div>\n </Teleport>\n </div>\n</template>\n\n<style scoped>\n.thinking-block {\n width: 100%;\n margin-top: var(--space-2);\n font-weight: 425;\n animation: rise-in var(--dur-msg-assistant) var(--ease-out) both;\n}\n@media (prefers-reduced-motion: reduce) {\n .thinking-block {\n animation: none;\n }\n .stream-dot,\n .stream-icon {\n animation: none;\n }\n}\n\n/* Collapsed teaser */\n.thinking-teaser {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n width: 100%;\n padding: var(--space-1) var(--space-2);\n background: transparent;\n border: none;\n border-radius: var(--radius-md);\n cursor: pointer;\n color: var(--color-text-faint);\n font-size: var(--font-size-sm);\n text-align: left;\n transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);\n}\n.thinking-teaser:hover {\n background: var(--color-hover);\n color: var(--color-text-muted);\n}\n.thinking-teaser:active {\n background: var(--color-selected);\n}\n.teaser-icon {\n flex-shrink: 0;\n}\n.teaser-text {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n mask-image: linear-gradient(to right, #000 70%, transparent);\n -webkit-mask-image: linear-gradient(to right, #000 70%, transparent);\n}\n.teaser-open {\n flex-shrink: 0;\n font-size: var(--font-size-xs);\n color: var(--color-text-faint);\n}\n\n/* Streaming window (≈5 lines) — neutral hairline: the accent border made the\n thinking box shout over the answer it belongs to. */\n.thinking-stream {\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n box-shadow: var(--shadow-xs);\n overflow: hidden;\n}\n.stream-header {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-1) var(--space-3);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n background: var(--color-surface-raised);\n}\n.stream-icon {\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n.stream-dot {\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--gradient-accent);\n box-shadow: 0 0 8px var(--color-accent-glow);\n animation: breathe-glow var(--dur-breathe) ease-in-out infinite;\n}\n.stream-body {\n max-height: calc(5 * 1.6 * var(--font-size-sm));\n overflow-y: auto;\n padding: var(--space-2) var(--space-3);\n font-size: var(--font-size-sm);\n line-height: 1.6;\n color: var(--color-text-muted);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* Side panel */\n.thinking-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: var(--z-modal);\n display: flex;\n justify-content: flex-end;\n}\n.thinking-panel {\n width: min(440px, 92vw);\n height: 100%;\n background: var(--color-surface-raised);\n border-left: 1px solid var(--color-line);\n box-shadow: var(--shadow-xl);\n display: flex;\n flex-direction: column;\n animation: slide-in var(--dur-slow) var(--ease-out);\n}\n@keyframes slide-in {\n from { transform: translateX(24px); opacity: 0; }\n to { transform: translateX(0); opacity: 1; }\n}\n@media (prefers-reduced-motion: reduce) {\n .thinking-panel {\n animation: none;\n }\n}\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--color-line);\n font-size: var(--font-size-base);\n font-weight: 600;\n color: var(--color-text);\n}\n.panel-close {\n background: transparent;\n border: none;\n color: var(--color-text-muted);\n cursor: pointer;\n font-size: var(--font-size-base);\n padding: var(--space-1) var(--space-2);\n border-radius: var(--radius-sm);\n transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);\n}\n.panel-close:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.panel-close:active {\n background: var(--color-selected);\n}\n.panel-body {\n flex: 1;\n overflow-y: auto;\n padding: var(--space-4);\n font-size: var(--font-size-sm);\n font-weight: 425;\n line-height: 1.7;\n color: var(--color-text-muted);\n white-space: pre-wrap;\n word-break: break-word;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, ref, watch } from 'vue';\nimport type { TurnStats } from '../types';\n\nconst props = defineProps<{ stats: TurnStats }>();\n\nconst elapsed = ref<number | null>(null);\nlet timer: ReturnType<typeof setInterval> | null = null;\n\nfunction stopClock() {\n if (timer !== null) {\n clearInterval(timer);\n timer = null;\n }\n}\n\nfunction startClock() {\n stopClock();\n const base = props.stats.llmMs ?? 0;\n const startedAt = Date.now();\n elapsed.value = base;\n timer = setInterval(() => {\n elapsed.value = base + (Date.now() - startedAt);\n }, 300);\n}\n\nwatch(\n () => props.stats.status,\n (status) => {\n if (status === 'running') startClock();\n else stopClock();\n },\n { immediate: true },\n);\n\nonBeforeUnmount(stopClock);\n\nfunction fmtMs(ms: number | null | undefined): string {\n if (ms === null || ms === undefined) return '—';\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction fmtTokens(n: number | null | undefined): string {\n if (n === null || n === undefined) return '—';\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return `${n}`;\n}\n</script>\n\n<template>\n <div class=\"turn-stats\" :class=\"`is-${stats.status}`\" aria-live=\"polite\">\n <template v-if=\"stats.status === 'running'\">\n <span class=\"badge-gradient\">正在思考</span>\n <span v-if=\"elapsed !== null\" class=\"clock\">{{ fmtMs(elapsed) }}</span>\n </template>\n <template v-else>\n <span class=\"stat\">{{ stats.turn }} 轮 · {{ stats.step }} 步</span>\n <span class=\"dot\">·</span>\n <span class=\"stat\"><span class=\"k\">LLM</span> {{ fmtMs(stats.llmMs) }}</span>\n <template v-if=\"stats.toolMs\">\n <span class=\"dot\">·</span>\n <span class=\"stat\"><span class=\"k\">工具</span> {{ fmtMs(stats.toolMs) }}</span>\n </template>\n <template v-if=\"stats.firstTokenMs !== null && stats.firstTokenMs !== undefined\">\n <span class=\"dot\">·</span>\n <span class=\"stat\"><span class=\"k\">首token</span> {{ fmtMs(stats.firstTokenMs) }}</span>\n </template>\n <template v-if=\"stats.tokens !== null && stats.tokens !== undefined\">\n <span class=\"dot\">·</span>\n <span class=\"stat\"><span class=\"k\">tokens</span> {{ fmtTokens(stats.tokens) }}</span>\n </template>\n <template v-if=\"stats.tokensPerSec !== null && stats.tokensPerSec !== undefined\">\n <span class=\"dot\">·</span>\n <span class=\"stat\"><span class=\"k\">tok/s</span> {{ stats.tokensPerSec }}</span>\n </template>\n </template>\n </div>\n</template>\n\n<style scoped>\n.turn-stats {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: var(--space-2);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n user-select: none;\n}\n\n/* Gradient shimmer badge (accent-coloured, no external brand palette) */\n.badge-gradient {\n font-family: var(--font-ui);\n font-weight: 600;\n font-size: 12px;\n letter-spacing: 0.02em;\n background-image: var(--gradient-accent);\n background-size: 200% 100%;\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n animation: turn-shimmer 1.8s linear infinite;\n}\n\n@keyframes turn-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge-gradient { animation: none; }\n}\n\n.clock {\n font-variant-numeric: tabular-nums;\n color: var(--color-text-faint);\n}\n\n.stat {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-variant-numeric: tabular-nums;\n}\n\n.k { opacity: 0.6; }\n.dot { opacity: 0.4; }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, ref } from 'vue';\nimport type { Ref } from 'vue';\nimport type { ChatMessage } from '../types';\nimport MarkdownRenderer from './MarkdownRenderer.vue';\nimport ToolGroup from './ToolGroup.vue';\nimport ThinkingBlock from './ThinkingBlock.vue';\nimport TurnStats from './TurnStats.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(defineProps<{\n message: ChatMessage;\n isLatestUser?: boolean;\n idle?: boolean;\n streaming?: boolean;\n /** Show the fork action (latest assistant message, session idle). */\n canFork?: boolean;\n /** Timestamp visibility follows grouping: only the last message of a run of\n * consecutive assistant messages shows it. */\n showTimestamp?: boolean;\n /** Session context for on-demand thinking loading. */\n sessionId?: string;\n}>(), { isLatestUser: false, idle: true, streaming: false, canFork: false, showTimestamp: true, sessionId: '' });\nconst emit = defineEmits<{\n (e: 'edit', content: string): void;\n (e: 'retry'): void;\n (e: 'fork'): void;\n}>();\nconst copied = ref(false);\nlet copyTimer: number | null = null;\nconst isUser = computed(() => props.message.role === 'user');\nconst isAssistant = computed(() => props.message.role === 'assistant');\nconst thinkingTools = computed(() => props.message.tools.filter((tool) => tool.name === 'thinking'));\nconst realTools = computed(() => props.message.tools.filter((tool) => tool.name !== 'thinking'));\nconst timestamp = computed(() => props.message.ts !== undefined ? new Date(props.message.ts).toLocaleTimeString('zh-CN', { hour:'2-digit', minute:'2-digit' }) : '');\nconst canEdit = computed(() => isUser.value && props.isLatestUser && props.idle);\nconst showThinking = inject<Ref<boolean>>('showThinking', ref(true));\nconst showTools = inject<Ref<boolean>>('showTools', ref(true));\n\n/** Text-to-speech playback state for the read-aloud button. */\nconst speaking = ref(false);\nlet speakOnEnd: ((() => void) | null) = null;\n\nfunction toggleSpeak(): void {\n if (typeof window === 'undefined' || !('speechSynthesis' in window)) return;\n if (speaking.value) {\n window.speechSynthesis.cancel();\n speaking.value = false;\n speakOnEnd = null;\n return;\n }\n const text = props.message.content;\n if (!text) return;\n const utterance = new SpeechSynthesisUtterance(text);\n utterance.lang = 'zh-CN';\n const handler = () => {\n // Guard: only this utterance's end/error may reset the speaking state.\n // A stale handler from a previously cancelled utterance must not clear a\n // newer read's state.\n if (speakOnEnd !== handler) return;\n speaking.value = false;\n speakOnEnd = null;\n };\n speakOnEnd = handler;\n utterance.addEventListener('end', handler);\n utterance.addEventListener('error', handler);\n // cancel() then speak() in the same tick can drop the new utterance in\n // Chrome; defer the speak by one frame.\n window.speechSynthesis.cancel(); // Clear any stale queue.\n requestAnimationFrame(() => {\n window.speechSynthesis.speak(utterance);\n });\n speaking.value = true;\n}\n\nonBeforeUnmount(() => {\n if (speaking.value && 'speechSynthesis' in window) {\n window.speechSynthesis.cancel();\n }\n});\nasync function copyContent() {\n try { await navigator.clipboard.writeText(props.message.content); }\n catch {\n const textarea = document.createElement('textarea');\n textarea.value = props.message.content;\n document.body.append(textarea);\n textarea.select();\n document.execCommand('copy');\n textarea.remove();\n }\n copied.value = true;\n if (copyTimer !== null) clearTimeout(copyTimer);\n copyTimer = window.setTimeout(() => { copied.value = false; }, 1500);\n}\n</script>\n\n<template>\n <article :class=\"['message', message.role, { error: message.isError }]\">\n <div v-if=\"isUser\" class=\"user-wrap\">\n <div class=\"user-bubble\">{{ message.content }}</div>\n <div v-if=\"timestamp || canEdit\" class=\"message-meta user-meta\">\n <button v-if=\"canEdit\" title=\"编辑并重新发送\" @click=\"emit('edit', message.content)\"><SvgIcon name=\"edit\" :size=\"12\" />编辑重发</button>\n <span v-if=\"timestamp\" class=\"meta-time\">{{ timestamp }}</span>\n </div>\n </div>\n\n <div v-else class=\"assistant-wrap\">\n <div\n v-if=\"isAssistant && (message.model || streaming)\"\n class=\"assistant-brand\"\n >\n <span v-if=\"message.model\" class=\"brand-model\">{{ message.model }}</span>\n <span v-if=\"streaming\" class=\"brand-streaming\"><i aria-hidden=\"true\" />生成中</span>\n </div>\n <div class=\"assistant-body\">\n <p v-if=\"message.degraded\" class=\"degraded-note\">该回合早于持久化快照:正文与思考在服务重启后无法恢复(工具记录与消息结构已保留)。</p>\n <template v-if=\"showThinking\">\n <ThinkingBlock v-for=\"tool in thinkingTools\" :key=\"tool.toolCallId\" :tool=\"tool\" :active=\"streaming\" :session-id=\"sessionId\" :msg-seq=\"message.seq\" />\n </template>\n <ToolGroup v-if=\"realTools.length && showTools\" name=\"工具调用过程\" :tools=\"realTools\" :live=\"streaming\" />\n <MarkdownRenderer v-if=\"message.content\" class=\"assistant-content\" :content=\"message.content\" :streaming=\"streaming\" />\n <span v-else-if=\"streaming\" class=\"streaming-cursor\" aria-label=\"正在生成\" />\n <TurnStats v-if=\"message.turnStats\" :stats=\"message.turnStats\" />\n <!-- One action row, rendered only when it has something to show:\n three stacked meta rows were three dead bands under every turn. -->\n <div v-if=\"message.content || (message.isError && !streaming) || canFork || (showTimestamp && timestamp)\" class=\"message-meta\">\n <button v-if=\"message.content\" :title=\"copied ? '已复制' : '复制内容'\" @click=\"copyContent\"><SvgIcon :name=\"copied ? 'check' : 'copy'\" :size=\"12\" />{{ copied ? '已复制' : '复制' }}</button>\n <button v-if=\"message.content\" :title=\"speaking ? '停止朗读' : '朗读'\" @click=\"toggleSpeak\"><SvgIcon :name=\"speaking ? 'speaker-off' : 'speaker'\" :size=\"12\" />{{ speaking ? '停止' : '朗读' }}</button>\n <button v-if=\"message.isError && !streaming\" class=\"retry-btn\" title=\"重发最后一条消息\" @click=\"emit('retry')\"><SvgIcon name=\"refresh\" :size=\"12\" />重试</button>\n <button v-if=\"isAssistant && canFork && !streaming\" title=\"以当前对话为起点创建一个新会话\" @click=\"emit('fork')\"><SvgIcon name=\"fork\" :size=\"12\" />Fork</button>\n <time v-if=\"showTimestamp && timestamp\" class=\"meta-time\">{{ timestamp }}</time>\n </div>\n </div>\n </div>\n </article>\n</template>\n\n<style scoped>\n/* Gutter matches the composer dock (--space-5) so the text column, the bubble\n and the input card all share one left/right edge. */\n.message { width:100%; padding:14px var(--space-5); }\n.message.user { display:flex; justify-content:flex-end; padding-top:18px; animation:rise-in var(--dur-msg-user) var(--ease-out) both; }\n.message.assistant { animation:rise-in var(--dur-msg-assistant) var(--ease-out) both; }\n.user-wrap { max-width:85%; display:flex; flex-direction:column; align-items:flex-end; }\n.user-bubble { padding:8px 12px; border:1px solid var(--color-line-strong); border-radius:var(--radius-lg); background:var(--color-accent-soft); color:var(--color-text); line-height:1.65; white-space:pre-wrap; word-break:break-word; }\n.assistant-wrap { width:100%; }\n.assistant-brand { display:flex; align-items:center; gap:8px; margin-bottom:6px; min-height:14px; }\n.brand-model { font-size:11px; color:var(--color-text-faint); letter-spacing:0.01em; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.brand-streaming { display:inline-flex; align-items:center; gap:5px; font-size:11px; color:var(--color-text-muted); }\n.brand-streaming i { width:5px; height:5px; border-radius:50%; background:var(--color-accent); box-shadow:0 0 6px var(--color-accent-glow); animation:breathe var(--dur-breathe) ease-in-out infinite; }\n.degraded-note {\n margin-bottom: var(--space-3);\n padding: var(--space-2) var(--space-3);\n border: 1px dashed var(--color-line-strong);\n border-radius: var(--radius-md);\n background: var(--color-surface-sunken);\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n}\n.message-meta .retry-btn {\n color: var(--color-danger);\n}\n.message-meta .retry-btn:hover {\n border-color: var(--color-danger);\n}\n.assistant-body { padding-left:0; display:flex; flex-direction:column; gap:var(--space-2); min-width:0; color:var(--color-text); line-height:1.75; }\n.assistant-content { width:100%; }\n.message.error .assistant-body { color:var(--color-danger); }\n.streaming-cursor { width:8px; height:18px; border-radius:var(--radius-xs); background:var(--gradient-accent); animation:breathe var(--dur-breathe) ease-in-out infinite; }\n.message-meta { min-height:24px; display:flex; align-items:center; gap:4px; margin-top:2px; color:var(--color-text-faint); font-size:11px; }\n.meta-time { margin-left:auto; padding-left:var(--space-2); font-size:10px; color:var(--color-text-faint); flex-shrink:0; }\n.user-meta { justify-content:flex-end; margin:4px 2px 0; }\n.message-meta button { display:inline-flex; align-items:center; gap:4px; height:24px; border:0; border-radius:var(--radius-sm); padding:0 6px; background:transparent; color:var(--color-text-faint); font-size:11px; cursor:pointer; opacity:0; transition:opacity var(--dur-base) var(--ease-out), background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out); }\n.message:hover .message-meta button,.message-meta button:focus-visible { opacity:1; }\n.message-meta button:hover { color:var(--color-accent); background:var(--color-hover); }\n.message-meta button:active { transform:scale(0.94); background:var(--color-selected); }\n@media (prefers-reduced-motion:reduce) { .message.user,.message.assistant { animation:none; } .assistant-brand i,.streaming-cursor { animation:none; } }\n@media (max-width:640px) { .message { padding:12px var(--space-4); } .user-wrap { max-width:92%; } .message-meta button { opacity:1; min-height:32px; } }\n</style>\n","export default \"__VITE_PUBLIC_ASSET__440fc264__\"","<script setup lang=\"ts\">\nimport SvgIcon from './ui/SvgIcon.vue';\n\nwithDefaults(\n defineProps<{\n workDir?: string | null;\n model?: string | null;\n contextUsage?: number | null;\n connected?: boolean;\n }>(),\n { workDir: null, model: null, contextUsage: null, connected: false },\n);\n\nconst emit = defineEmits<{\n (e: 'pick', text: string): void;\n}>();\n\nconst SUGGESTIONS = [\n { icon: 'edit', title: '帮我写一个函数', prompt: '帮我写一个函数' },\n { icon: 'clipboard', title: '解释这段代码', prompt: '解释这段代码' },\n { icon: 'activity', title: '调试这个问题', prompt: '调试这个问题' },\n];\n\nfunction fmtContext(usage: number | null | undefined): string {\n if (usage === null || usage === undefined) return '—';\n // Context usage may be a 0..1 fraction or 0..100 percent; normalise for display.\n const pct = usage <= 1 ? Math.round(usage * 100) : Math.round(usage);\n return `${Math.min(pct, 100)}%`;\n}\n</script>\n\n<template>\n <div class=\"empty-state\">\n <div class=\"empty-logo\">\n <img src=\"/icon.ico\" alt=\"Scream\" class=\"logo-img\" />\n </div>\n <h1 class=\"empty-title\">Scream Web UI</h1>\n <p class=\"empty-subtitle\">给 Scream 发消息,开始处理你的任务</p>\n\n <div class=\"suggestions\">\n <button\n v-for=\"s in SUGGESTIONS\"\n :key=\"s.title\"\n class=\"suggestion-card\"\n @click=\"emit('pick', s.prompt)\"\n >\n <span class=\"suggestion-icon\"><SvgIcon :name=\"s.icon\" :size=\"22\" /></span>\n <span class=\"suggestion-title\">{{ s.title }}</span>\n </button>\n </div>\n\n <div v-if=\"workDir\" class=\"empty-workdir\" :title=\"workDir\">\n <span class=\"workdir-label\">工作目录</span>\n <span class=\"workdir-path\">{{ workDir }}</span>\n </div>\n\n <div class=\"empty-status\" aria-label=\"连接与模型状态\">\n <span class=\"status-dot\" :class=\"connected ? 'on' : 'off'\" />\n <span class=\"status-item\">{{ connected ? '已连接' : '未连接' }}</span>\n <template v-if=\"model\">\n <span class=\"status-sep\">·</span>\n <span class=\"status-item\">模型 {{ model }}</span>\n </template>\n <template v-if=\"contextUsage !== null && contextUsage !== undefined\">\n <span class=\"status-sep\">·</span>\n <span class=\"status-item\">上下文 {{ fmtContext(contextUsage) }}</span>\n </template>\n </div>\n\n <div class=\"empty-shortcuts\" aria-hidden=\"true\">\n <span><kbd>⌘K</kbd> 搜索会话</span>\n <span><kbd>⌘N</kbd> 新建会话</span>\n </div>\n </div>\n</template>\n\n<style scoped>\n.empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-4);\n padding: var(--space-8) var(--space-4);\n color: var(--color-text-muted);\n}\n\n.empty-logo {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n background: var(--color-accent-soft);\n border: 1px solid var(--color-accent-bd);\n border-radius: var(--radius-xl);\n box-shadow: 0 0 24px var(--color-accent-glow), var(--shadow-sm);\n overflow: hidden;\n}\n\n.logo-img {\n width: 48px;\n height: 48px;\n object-fit: contain;\n}\n\n.empty-title {\n margin: 0;\n font-size: 28px;\n font-weight: 700;\n letter-spacing: -0.01em;\n background: linear-gradient(120deg, var(--color-text) 30%, var(--color-accent) 100%);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n}\n\n.empty-subtitle {\n margin: 0;\n font-size: var(--font-size-base);\n}\n\n.suggestions {\n display: flex;\n gap: var(--space-3);\n margin-top: var(--space-4);\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.suggestion-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-5) var(--space-6);\n min-width: 128px;\n background: var(--color-surface);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-xs);\n cursor: pointer;\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text);\n transition:\n border-color var(--dur-base) var(--ease-out),\n background var(--dur-base) var(--ease-out),\n box-shadow var(--dur-base) var(--ease-out),\n transform var(--dur-base) var(--ease-out);\n}\n.suggestion-card:hover {\n border-color: var(--color-accent-bd, var(--color-accent));\n background: var(--color-accent-soft, var(--color-hover));\n box-shadow: var(--shadow-md), 0 0 16px var(--color-accent-glow);\n transform: translateY(-2px);\n}\n.suggestion-card:active {\n transform: translateY(0);\n box-shadow: var(--shadow-xs);\n}\n.suggestion-icon {\n font-size: var(--font-size-2xl);\n}\n.suggestion-title {\n white-space: nowrap;\n}\n\n.empty-workdir {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n margin-top: var(--space-5);\n padding: var(--space-1) var(--space-3);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-full);\n background: var(--color-surface);\n box-shadow: var(--shadow-xs);\n font-size: var(--font-size-xs);\n max-width: 80%;\n}\n.workdir-label {\n color: var(--color-text-faint);\n flex-shrink: 0;\n}\n.workdir-path {\n font-family: var(--font-mono);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n direction: rtl;\n text-align: left;\n}\n\n.empty-status {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n margin-top: var(--space-4);\n padding: var(--space-1) var(--space-3);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-full);\n background: var(--color-surface);\n box-shadow: var(--shadow-xs);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n max-width: 90%;\n flex-wrap: wrap;\n justify-content: center;\n}\n.status-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--color-text-faint);\n}\n.status-dot.on {\n background: var(--color-success);\n box-shadow: 0 0 6px var(--color-success);\n}\n.status-sep { opacity: 0.4; }\n.status-item { white-space: nowrap; }\n\n.empty-shortcuts {\n display: inline-flex;\n align-items: center;\n gap: var(--space-4);\n color: var(--color-text-faint);\n font-size: 11px;\n}\n.empty-shortcuts kbd {\n display: inline-block;\n padding: 1px 5px;\n border: 1px solid var(--color-line);\n border-bottom-width: 2px;\n border-radius: var(--radius-xs);\n background: var(--color-surface);\n font-family: var(--font-mono);\n font-size: 10px;\n color: var(--color-text-muted);\n}\n\n@media (max-width: 640px) {\n .suggestions {\n flex-direction: column;\n width: 100%;\n max-width: 320px;\n }\n .suggestion-card {\n flex-direction: row;\n justify-content: flex-start;\n min-width: 0;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\nimport type { ChatMessage } from '../types';\nimport MessageItem from './MessageItem.vue';\nimport EmptyState from './EmptyState.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(\n defineProps<{\n messages: ChatMessage[];\n busy?: boolean;\n workDir?: string | null;\n /** Current session id - used to persist/restore the scroll position. */\n sessionId?: string;\n /** Current model label shown in the empty-state status bar. */\n model?: string | null;\n /** Context usage (0..1 or 0..100) shown in the empty-state status bar. */\n contextUsage?: number | null;\n /** Connection state shown in the empty-state status bar. */\n connected?: boolean;\n /** Older history exists beyond the loaded window (pagination sentinel). */\n olderAvailable?: boolean;\n /** True while the parent is fetching an older page. */\n olderLoading?: boolean;\n }>(),\n { busy: false, workDir: null, sessionId: '', model: null, contextUsage: null, connected: false, olderAvailable: false, olderLoading: false },\n);\n\nconst emit = defineEmits<{\n (e: 'edit', content: string): void;\n (e: 'pick', text: string): void;\n (e: 'retry-connection'): void;\n (e: 'retry-message'): void;\n (e: 'load-older'): void;\n (e: 'fork'): void;\n}>();\n\nconst listRef = ref<HTMLElement | null>(null);\n\nconst latestUserId = computed(() => {\n for (let i = props.messages.length - 1; i >= 0; i--) {\n if (props.messages[i]!.role === 'user') return props.messages[i]!.id;\n }\n return null;\n});\n\nconst lastMessageId = computed(() => props.messages.at(-1)?.id ?? null);\nconst lastAssistantId = computed(() => [...props.messages].reverse().find((m) => m.role === 'assistant')?.id ?? null);\n\n/**\n * Timestamp grouping: inside a run of consecutive assistant\n * messages only the LAST one shows its timestamp; a gap > 5 minutes forces it\n * back on. User/system messages always show theirs (they break the run).\n */\nfunction showTimestampFor(index: number): boolean {\n const m = props.messages[index];\n if (!m) return false;\n if (m.role !== 'assistant') return true;\n const next = props.messages[index + 1];\n if (!next || next.role !== 'assistant') return true;\n if (m.ts !== undefined && next.ts !== undefined && next.ts - m.ts > 5 * 60 * 1000) return true;\n return false;\n}\n\n/** Streaming content length - drives scroll pinning during deltas. */\nconst streamLength = computed(() => {\n const last = props.messages.at(-1);\n if (!last) return 0;\n let len = last.content.length;\n for (const t of last.tools) len += t.output?.length ?? 0;\n return len;\n});\n\n/** Tracks whether we should force-scroll during the current assistant turn. */\nlet forceScroll = false;\n\n/** Whether the user has scrolled away from the bottom. */\nconst showScrollButton = ref(false);\n\nfunction isNearBottom(): boolean {\n const el = listRef.value;\n if (!el) return true;\n return el.scrollHeight - el.scrollTop - el.clientHeight < 80;\n}\n\nfunction prefersReducedMotion(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nfunction scrollToBottom(behavior: ScrollBehavior): void {\n // Wait for the DOM update, then scroll. rAF is more reliable than\n // nextTick for read-after-write scroll offsets.\n requestAnimationFrame(() => {\n const el = listRef.value;\n if (!el) return;\n const finalBehavior: ScrollBehavior = prefersReducedMotion() ? 'auto' : behavior;\n el.scrollTo({ top: el.scrollHeight, behavior: finalBehavior });\n });\n}\n\nlet saveScrollRaf: number | null = null;\n\n/** Persist the current scroll offset (rAF-coalesced) for session switches/refresh. */\nfunction saveScrollPosition(): void {\n const el = listRef.value;\n const sid = props.sessionId;\n if (!el || !sid) return;\n if (saveScrollRaf !== null) return;\n saveScrollRaf = requestAnimationFrame(() => {\n saveScrollRaf = null;\n try {\n localStorage.setItem(`scream-scroll:${sid}`, String(el!.scrollTop));\n } catch {\n // Best-effort.\n }\n });\n}\n\nfunction restoreScrollPosition(): void {\n const el = listRef.value;\n const sid = props.sessionId;\n if (!el || !sid) return;\n let saved: string | null = null;\n try {\n saved = localStorage.getItem(`scream-scroll:${sid}`);\n } catch {\n // Best-effort.\n }\n if (saved) el.scrollTop = Number(saved);\n}\n\n/** Keep the viewport anchored when an older page is prepended above. */\nlet prependAnchorHeight = 0;\nwatch(\n () => props.olderLoading,\n (loading) => {\n const el = listRef.value;\n if (!el) return;\n if (loading) {\n prependAnchorHeight = el.scrollHeight;\n } else if (prependAnchorHeight > 0) {\n const delta = el.scrollHeight - prependAnchorHeight;\n if (delta > 0) {\n el.scrollTop = el.scrollTop + delta;\n }\n prependAnchorHeight = 0;\n }\n },\n);\n\nfunction onScroll(): void {\n const el = listRef.value;\n if (!el) return;\n const awayFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight > 80;\n showScrollButton.value = awayFromBottom;\n // User scrolled up during a pinned turn -> release the pin so streaming\n // deltas stop dragging them back down.\n if (awayFromBottom && forceScroll) {\n forceScroll = false;\n }\n if (!props.busy) {\n saveScrollPosition();\n }\n}\n\nlet restoredForSession = '';\n\nwatch(\n () => props.sessionId,\n () => {\n // Session switched: clear the restore marker so the first content load\n // restores the saved position instead of force-scrolling to bottom.\n restoredForSession = '';\n },\n);\n\nwatch(\n () => [props.messages.length, streamLength.value],\n ([len], [oldLen]) => {\n // New message added -> always scroll to bottom and pin subsequent deltas.\n if (len !== oldLen) {\n // First load for this session: restore the saved scroll position.\n if (len > 0 && restoredForSession !== props.sessionId) {\n restoredForSession = props.sessionId;\n requestAnimationFrame(() => requestAnimationFrame(restoreScrollPosition));\n return;\n }\n forceScroll = true;\n showScrollButton.value = false;\n scrollToBottom('smooth');\n return;\n }\n // Streaming delta -> follow if near bottom or if we pinned this turn.\n if (!forceScroll && !isNearBottom()) return;\n scrollToBottom('auto');\n },\n);\n\n// Reset force-scroll when the turn ends (busy goes false).\nwatch(\n () => props.busy,\n (busy) => { if (!busy) forceScroll = false; },\n);\n\nfunction handleScrollButtonClick(): void {\n forceScroll = true;\n showScrollButton.value = false;\n scrollToBottom('smooth');\n}\n\n/** Skeleton placeholder while waiting for the assistant's first delta. */\nconst showSkeleton = computed(() => {\n if (!props.busy || props.messages.length === 0) return false;\n return props.messages.at(-1)!.role === 'user';\n});\n\nonMounted(() => {\n listRef.value?.addEventListener('scroll', onScroll, { passive: true });\n // Refresh recovery: restore the saved scroll position once rendered.\n requestAnimationFrame(() => requestAnimationFrame(restoreScrollPosition));\n});\n\nonUnmounted(() => {\n listRef.value?.removeEventListener('scroll', onScroll);\n if (saveScrollRaf !== null) {\n cancelAnimationFrame(saveScrollRaf);\n saveScrollRaf = null;\n }\n});\n</script>\n\n<template>\n <div class=\"message-list-wrapper\">\n <div v-if=\"!connected && messages.length > 0\" class=\"conn-banner\" role=\"status\">\n <span class=\"conn-dot\" aria-hidden=\"true\" />\n <span>连接中断,自动恢复中…</span>\n <button class=\"conn-retry\" @click=\"emit('retry-connection')\">立即重试</button>\n </div>\n <div ref=\"listRef\" class=\"message-list\">\n <div v-if=\"olderAvailable\" class=\"load-older-row\">\n <button class=\"load-older-btn\" :disabled=\"olderLoading\" @click=\"emit('load-older')\">\n {{ olderLoading ? '加载中…' : '加载更早消息' }}\n </button>\n </div>\n <EmptyState\n v-if=\"messages.length === 0\"\n :work-dir=\"workDir\"\n :model=\"model\"\n :context-usage=\"contextUsage\"\n :connected=\"connected\"\n @pick=\"(t) => emit('pick', t)\"\n />\n <MessageItem\n v-for=\"(message, index) in messages\"\n :key=\"message.id\"\n :message=\"message\"\n :is-latest-user=\"message.id === latestUserId\"\n :idle=\"!busy\"\n :streaming=\"busy && message.id === lastMessageId && message.role === 'assistant'\"\n :session-id=\"sessionId\"\n :can-fork=\"!busy && message.id === lastAssistantId\"\n :show-timestamp=\"showTimestampFor(index)\"\n @edit=\"(content) => emit('edit', content)\"\n @retry=\"emit('retry-message')\"\n @fork=\"emit('fork')\"\n />\n <div v-if=\"showSkeleton\" class=\"message-skeleton\" aria-hidden=\"true\">\n <div class=\"sk-body\">\n <div class=\"sk-line sk-w-60\" />\n <div class=\"sk-line sk-w-90\" />\n <div class=\"sk-line sk-w-40\" />\n </div>\n </div>\n </div>\n <Transition name=\"scroll-btn\">\n <button\n v-if=\"showScrollButton\"\n class=\"scroll-to-bottom\"\n title=\"滚动到最新消息\"\n @click=\"handleScrollButtonClick\"\n >\n <SvgIcon name=\"chevron-down\" :size=\"18\" />\n </button>\n </Transition>\n </div>\n</template>\n\n<style scoped>\n.message-list-wrapper {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.load-older-row {\n display: flex;\n justify-content: center;\n padding: var(--space-2);\n}\n.load-older-btn {\n min-height: 30px;\n padding: 0 var(--space-4);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-full);\n background: var(--color-surface);\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n cursor: pointer;\n transition:\n border-color var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out);\n}\n.load-older-btn:hover:not(:disabled) {\n border-color: var(--color-accent-bd);\n color: var(--color-text);\n}\n\n.conn-banner {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-4);\n background: var(--color-warning-soft);\n border-bottom: 1px solid var(--color-line);\n color: var(--color-text);\n font-size: var(--font-size-sm);\n flex-shrink: 0;\n}\n.conn-dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--color-warning);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n flex-shrink: 0;\n}\n.conn-retry {\n margin-left: auto;\n padding: 3px var(--space-3);\n border: 1px solid var(--color-line-strong);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-xs);\n cursor: pointer;\n transition:\n border-color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.conn-retry:hover {\n border-color: var(--color-accent-bd);\n background: var(--color-accent-soft);\n}\n\n.message-list {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n padding: var(--space-3) 0 var(--space-2);\n overscroll-behavior: contain;\n background: var(--color-surface);\n}\n\n.scroll-to-bottom {\n position: absolute;\n bottom: var(--space-2);\n left: 50%;\n transform: translateX(-50%);\n width: 36px;\n height: 36px;\n border-radius: var(--radius-full);\n border: 1px solid var(--color-line);\n background: var(--color-surface-raised);\n color: var(--color-text-muted);\n display: grid;\n place-items: center;\n cursor: pointer;\n box-shadow: var(--shadow-md);\n z-index: 10;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out),\n transform var(--dur-fast) var(--ease-out);\n}\n\n.scroll-to-bottom:hover {\n background: var(--color-accent-soft);\n color: var(--color-accent);\n border-color: var(--color-accent-bd);\n transform: translateX(-50%) translateY(-1px);\n}\n.scroll-to-bottom:active {\n transform: translateX(-50%) translateY(1px);\n}\n\n.scroll-btn-enter-active,\n.scroll-btn-leave-active {\n transition:\n opacity var(--dur-base) var(--ease-out),\n transform var(--dur-base) var(--ease-out);\n}\n\n.scroll-btn-enter-from,\n.scroll-btn-leave-to {\n opacity: 0;\n transform: translateX(-50%) translateY(var(--space-2));\n}\n\n/* Skeleton placeholder while waiting for the assistant's first delta. */\n.message-skeleton {\n display: flex;\n padding: 14px var(--space-5);\n animation: rise-in var(--dur-base) var(--ease-out) both;\n}\n.sk-body {\n flex: 1;\n min-width: 0;\n padding-top: var(--space-1);\n}\n.sk-line {\n height: 12px;\n border-radius: var(--radius-sm);\n margin-bottom: var(--space-2);\n}\n.sk-w-60 { width: 60%; }\n.sk-w-90 { width: 90%; }\n.sk-w-40 { width: 40%; }\n.sk-line {\n background: var(--shimmer-line);\n background-size: var(--shimmer-width) 100%;\n animation: shimmer-slide 1.2s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .sk-line,\n .message-skeleton {\n animation: none;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\ninterface FileEntry {\n name: string;\n path: string;\n type: 'file' | 'dir';\n size: number;\n mtime: number;\n}\n\ninterface FileInfo {\n path: string;\n content: string;\n truncated: boolean;\n}\n\nconst props = withDefaults(defineProps<{ initialPath?: string }>(), { initialPath: '' });\n\nconst cwd = ref('');\nconst entries = ref<FileEntry[]>([]);\nconst loading = ref(false);\nconst error = ref('');\nconst preview = ref<FileInfo | null>(null);\nconst previewError = ref('');\n\nconst API = '/api/v1/files';\n\nfunction rawUrl(path: string): string {\n return `${API}/raw?path=${encodeURIComponent(path)}`;\n}\n\nconst crumbComponents = computed(() => {\n if (!cwd.value) return [] as { label: string; path: string }[];\n const parts = cwd.value.split('/');\n const out: { label: string; path: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n if (parts[i] === '') continue;\n let label = parts[i]!;\n if (i > 1 && label === 'Users' && parts[i - 1] === '') label = label;\n out.push({ label: label.slice(0, 12), path: parts.slice(0, i + 1).join('/') || '/' });\n }\n if (out.length > 4) {\n return [{ label: '…', path: '/' }, ...out.slice(out.length - 3)];\n }\n return out;\n});\n\nasync function loadList(path: string): Promise<void> {\n loading.value = true;\n error.value = '';\n preview.value = null;\n try {\n const res = await fetch(`${API}/list?path=${encodeURIComponent(path)}`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const data = (await res.json()) as { path: string; entries: FileEntry[] };\n cwd.value = data.path || (await firstRoot());\n entries.value = data.entries;\n if (!cwd.value) error.value = '没有可访问的目录(尚无会话)';\n } catch (e) {\n error.value = e instanceof Error ? e.message : String(e);\n } finally {\n loading.value = false;\n }\n}\n\nasync function firstRoot(): Promise<string> {\n try {\n const res = await fetch(`${API}/root`);\n const data = (await res.json()) as { roots: string[] };\n return data.roots[0] ?? '';\n } catch {\n return '';\n }\n}\n\nasync function openEntry(entry: FileEntry): Promise<void> {\n if (entry.type === 'dir') {\n await loadList(entry.path);\n return;\n }\n const kind = previewKind(entry.name);\n if (kind === 'binary') {\n preview.value = { path: entry.path, content: '', truncated: false };\n previewError.value = '该文件类型暂不支持预览';\n return;\n }\n previewError.value = '';\n try {\n const res = await fetch(`${API}/read?path=${encodeURIComponent(entry.path)}`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const data = (await res.json()) as FileInfo;\n if (data.truncated) previewError.value = '文件较大,仅显示前 256KB';\n preview.value = data;\n } catch (e) {\n previewError.value = e instanceof Error ? e.message : String(e);\n preview.value = null;\n }\n}\n\nfunction previewKind(name: string): 'image' | 'audio' | 'pdf' | 'text' | 'binary' {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n if (['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'ico', 'avif'].includes(ext)) return 'image';\n if (['mp3', 'wav', 'ogg', 'm4a'].includes(ext)) return 'audio';\n if (ext === 'pdf') return 'pdf';\n if (['md', 'txt', 'json', 'yml', 'yaml', 'csv', 'log', 'toml', 'ts', 'tsx', 'js', 'jsx', 'py', 'rs', 'go', 'java', 'c', 'h', 'cpp', 'hpp', 'sh', 'css', 'html', 'vue', 'lock', 'env', 'patch', 'diff'].includes(ext)) return 'text';\n return 'binary';\n}\n\nconst previewFile = computed(() => {\n if (!preview.value) return null;\n const name = preview.value.path.split(/[\\\\/]/).pop() ?? '';\n return { name, path: preview.value.path };\n});\n\nfunction fmtSize(n: number): string {\n if (n < 1024) return `${n} B`;\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KB`;\n return `${(n / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nonMounted(() => {\n void loadList(props.initialPath);\n});\n\nwatch(\n () => props.initialPath,\n (p) => {\n if (p) void loadList(p);\n },\n);\n</script>\n\n<template>\n <div class=\"files-pane\">\n <div class=\"files-path\">\n <button class=\"files-up\" title=\"上一级\" aria-label=\"上一级\" @click=\"loadList(cwd.split('/').slice(0, -1).join('/') || '/')\">\n <SvgIcon name=\"chevron-left\" :size=\"16\" />\n </button>\n <div class=\"crumbs\">\n <span v-for=\"(c, i) in crumbComponents\" :key=\"i\" class=\"crumb\" @click=\"loadList(c.path)\">\n <b v-if=\"i > 0\" class=\"crumb-sep\">/</b><span class=\"crumb-name\">{{ c.label }}</span>\n </span>\n </div>\n </div>\n\n <p v-if=\"error\" class=\"files-error\">{{ error }}</p>\n <p v-else-if=\"loading\" class=\"files-loading\">加载中…</p>\n\n <template v-if=\"preview\">\n <div class=\"files-preview-head\">\n <span class=\"files-preview-name\" :title=\"preview?.path\">{{ previewFile?.name }}</span>\n <button class=\"files-preview-close\" title=\"关闭预览\" aria-label=\"关闭预览\" @click=\"preview = null\">\n <SvgIcon name=\"x\" :size=\"16\" />\n </button>\n </div>\n <p v-if=\"previewError\" class=\"files-preview-note\">{{ previewError }}</p>\n <div class=\"files-preview-body\">\n <pre v-if=\"previewKind(previewFile?.name ?? '') === 'text'\" class=\"files-pre\">{{ preview.content }}</pre>\n <img v-else-if=\"previewKind(previewFile?.name ?? '') === 'image'\" :src=\"rawUrl(preview.path)\" alt=\"\" class=\"files-img\" />\n <audio v-else-if=\"previewKind(previewFile?.name ?? '') === 'audio'\" :src=\"rawUrl(preview.path)\" controls />\n <iframe v-else-if=\"previewKind(previewFile?.name ?? '') === 'pdf'\" :src=\"rawUrl(preview.path)\" class=\"files-pdf\" title=\"PDF 预览\" />\n <p v-else class=\"files-binary\">该文件类型暂不支持预览(可下载)。</p>\n </div>\n </template>\n\n <ul v-else class=\"files-list\">\n <li v-for=\"entry in entries\" :key=\"entry.path\">\n <button class=\"files-item\" :class=\"{ dir: entry.type === 'dir' }\" @click=\"openEntry(entry)\">\n <SvgIcon :name=\"entry.type === 'dir' ? 'folder' : 'file'\" :size=\"16\" />\n <span class=\"files-name\">{{ entry.name }}</span>\n <span class=\"files-meta\">{{ entry.type === 'dir' ? '目录' : fmtSize(entry.size) }}</span>\n </button>\n </li>\n <li v-if=\"!loading && entries.length === 0\" class=\"files-empty\">空目录</li>\n </ul>\n </div>\n</template>\n\n<style scoped>\n.files-pane {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n height: 100%;\n min-height: 0;\n}\n.files-path {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-1);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n border: 1px solid var(--color-line);\n}\n.files-up {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--color-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.files-up:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.crumbs {\n display: flex;\n align-items: center;\n min-width: 0;\n overflow-x: auto;\n white-space: nowrap;\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.crumb {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n padding: 2px 3px;\n border-radius: var(--radius-xs);\n}\n.crumb:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.crumb-sep {\n margin-right: 3px;\n color: var(--color-text-faint);\n}\n.files-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 1 1 auto;\n overflow-y: auto;\n min-height: 0;\n}\n.files-item {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n width: 100%;\n padding: var(--space-2) var(--space-2);\n border: none;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--color-text);\n font-size: var(--font-size-sm);\n cursor: pointer;\n text-align: left;\n min-height: 32px;\n}\n.files-item:hover {\n background: var(--color-hover);\n}\n.files-item.dir {\n color: var(--color-text);\n font-weight: 500;\n}\n.files-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.files-meta {\n font-size: 11px;\n color: var(--color-text-faint);\n flex-shrink: 0;\n}\n.files-empty,\n.files-loading,\n.files-error {\n padding: var(--space-3) var(--space-2);\n font-size: var(--font-size-sm);\n color: var(--color-text-faint);\n}\n.files-error {\n color: var(--color-danger);\n}\n.files-preview-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n}\n.files-preview-name {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.files-preview-close {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--color-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.files-preview-close:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.files-preview-body {\n min-height: 0;\n overflow: auto;\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n}\n.files-pre {\n margin: 0;\n padding: var(--space-3);\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.6;\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 60vh;\n overflow: auto;\n color: var(--color-text);\n}\n.files-img {\n display: block;\n max-width: 100%;\n max-height: 60vh;\n object-fit: contain;\n margin: auto;\n}\n.files-pdf {\n width: 100%;\n height: 60vh;\n border: none;\n}\n.files-binary {\n padding: var(--space-4);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n.files-preview-note {\n font-size: 11px;\n color: var(--color-warning);\n}\n</style>\n","/**\n * Path display helper.\n *\n * CSS `direction: rtl` is the usual trick to keep a filename while clipping a\n * long directory, but it breaks on paths: `/` is a bidi-neutral character, so\n * the browser reorders segments and the ellipsis lands mid-string\n * (`src/web/frontend/src/com…nents/App.vue`). Trimming whole segments here\n * keeps the rendering deterministic and the filename always intact.\n */\nexport interface PathLabel {\n /** Directory prefix including the trailing `/`; may start with `…/`. */\n dir: string;\n /** Final path segment. */\n base: string;\n}\n\n/** Paths at or below this length are shown in full. */\nconst FULL_PATH_LIMIT = 34;\n\nexport function splitPath(path: string): PathLabel {\n const segments = path.split('/');\n const base = segments.at(-1) ?? path;\n if (segments.length <= 2) {\n return { dir: segments.length === 2 ? `${segments[0]}/` : '', base };\n }\n if (path.length <= FULL_PATH_LIMIT) {\n return { dir: `${segments.slice(0, -1).join('/')}/`, base };\n }\n return { dir: `…/${segments.at(-2)}/`, base };\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { GitStatus } from '../types';\nimport { splitPath } from '../utils/pathLabel';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(defineProps<{\n gitStatus?: GitStatus | null;\n}>(), { gitStatus: null });\n\nconst emit = defineEmits<{\n (e: 'refresh'): void;\n /** `path` is repo-root-relative (for the API); `display` is the short label. */\n (e: 'diff', file: { path: string; display: string; adds?: number; dels?: number }): void;\n}>();\n\nconst STATUS_LABEL: Record<string, string> = {\n M: 'M', A: 'A', D: 'D', R: 'R', U: 'U', '??': '?', '?': '?',\n};\nconst STATUS_COLOR: Record<string, string> = {\n D: 'danger', A: 'success', R: 'success', U: 'danger', '??': 'warning', '?': 'warning',\n};\n\n/** Long worktrees used to scroll inside a 24vh slot; a capped list plus an\n * explicit \"show all\" reads better in a 310px column. */\nconst FILE_PREVIEW = 8;\nconst showAll = ref(false);\n\nconst STORAGE_KEY = 'scream-panel-git-open';\nconst open = ref(true);\ntry {\n open.value = localStorage.getItem(STORAGE_KEY) !== '0';\n} catch {\n /* ignore */\n}\nfunction toggle() {\n open.value = !open.value;\n try { localStorage.setItem(STORAGE_KEY, open.value ? '1' : '0'); } catch { /* ignore */ }\n}\n\nfunction refresh() {\n emit('refresh');\n}\n\nconst visibleFiles = computed(() => {\n const files = props.gitStatus?.files ?? [];\n return showAll.value ? files : files.slice(0, FILE_PREVIEW);\n});\nconst hiddenCount = computed(() => Math.max(0, (props.gitStatus?.files?.length ?? 0) - visibleFiles.value.length));\n\n/** Ahead/behind summary folded into the header hint, e.g. `main · ↑2`. */\nconst syncLabel = computed(() => {\n const ahead = props.gitStatus?.ahead ?? 0;\n const behind = props.gitStatus?.behind ?? 0;\n if (!ahead && !behind) return '';\n const parts = [];\n if (ahead) parts.push(`↑${ahead}`);\n if (behind) parts.push(`↓${behind}`);\n return ` · ${parts.join(' ')}`;\n});\n</script>\n\n<template>\n <section :class=\"['panel-section', 'git-panel', { 'is-open': open }]\">\n <div class=\"panel-head-row\">\n <button class=\"panel-head\" :aria-expanded=\"open\" @click=\"toggle\">\n <span class=\"head-icon\"><SvgIcon name=\"git-branch\" :size=\"14\" /></span>\n <span class=\"head-title\">Git 变更</span>\n <span v-if=\"gitStatus\" class=\"head-hint\" :title=\"`${gitStatus.branch ?? 'detached'}${syncLabel}`\">{{ gitStatus.branch ?? 'detached' }}{{ syncLabel }}</span>\n <span v-else class=\"head-hint\">状态不可用</span>\n <span class=\"head-tail\">\n <span v-if=\"gitStatus\" class=\"head-count\">{{ gitStatus.changed }}</span>\n <SvgIcon class=\"chevron\" :class=\"{ rotated: open }\" name=\"chevron-down\" :size=\"14\" />\n </span>\n </button>\n <button class=\"icon-btn\" title=\"刷新\" aria-label=\"刷新 Git 状态\" @click=\"refresh\">\n <SvgIcon name=\"refresh\" :size=\"14\" />\n </button>\n </div>\n\n <div v-show=\"open\" class=\"panel-body\">\n <template v-if=\"gitStatus\">\n <ul v-if=\"visibleFiles.length\" class=\"git-files\">\n <li v-for=\"file in visibleFiles\" :key=\"file.path\">\n <button class=\"git-file\" :title=\"`查看 ${file.displayPath ?? file.path} 的 diff`\" @click=\"emit('diff', { path: file.path, display: file.displayPath ?? file.path, adds: file.adds, dels: file.dels })\">\n <span class=\"git-file-status\" :class=\"STATUS_COLOR[file.status] ?? ''\">{{ STATUS_LABEL[file.status] ?? file.status }}</span>\n <!-- Long worktree paths are trimmed by segment so the filename\n always survives (CSS rtl ellipsis reordered the slashes). -->\n <span class=\"git-file-name\">\n <span v-if=\"splitPath(file.displayPath ?? file.path).dir\" class=\"git-file-dir\">{{ splitPath(file.displayPath ?? file.path).dir }}</span>\n <span class=\"git-file-base\">{{ splitPath(file.displayPath ?? file.path).base }}</span>\n </span>\n <span v-if=\"file.adds !== undefined || file.dels !== undefined\" class=\"git-file-stat\">\n <span v-if=\"file.adds\" class=\"add\">+{{ file.adds }}</span>\n <span v-if=\"file.dels\" class=\"del\">−{{ file.dels }}</span>\n </span>\n </button>\n </li>\n </ul>\n <button v-if=\"hiddenCount\" class=\"git-more\" @click=\"showAll = !showAll\">\n {{ showAll ? '收起列表' : `显示全部 ${gitStatus.files?.length ?? 0} 个文件` }}\n </button>\n <pre v-if=\"gitStatus.diffStat\" class=\"diff-body\">{{ gitStatus.diffStat }}</pre>\n <div v-else-if=\"!visibleFiles.length\" class=\"diff-empty\">工作区干净,没有变更。</div>\n </template>\n <div v-else class=\"diff-empty\">读取 Git 状态失败,点右上角刷新重试。</div>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Card / header anatomy comes from the shared global styles. The header row\n carries the hairline so the refresh button sits on the same strip. */\n.panel-head-row {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--color-line);\n}\n.panel-head-row > .panel-head { flex: 1 1 auto; min-width: 0; border-bottom: 0; }\n.panel-head-row > .icon-btn { margin-right: var(--space-2); }\n.git-files {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n.git-file {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n width: 100%;\n min-height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--color-text);\n font-size: var(--font-size-xs);\n cursor: pointer;\n text-align: left;\n}\n.git-file:hover { background: transparent; }\n/* Status as coloured type instead of 74 grey blocks — the letter is the\n information, the tint only has to flag the destructive/additive cases. */\n.git-file-status {\n width: 18px;\n display: inline-flex;\n justify-content: center;\n flex-shrink: 0;\n font-family: var(--font-mono);\n font-weight: 700;\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.git-file-status.danger { color: var(--color-danger); }\n.git-file-status.success { color: var(--color-success); }\n.git-file-status.warning { color: var(--color-warning); }\n.git-file-name {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n font-family: var(--font-mono);\n}\n.git-file-dir {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-text-faint);\n}\n.git-file-base {\n flex-shrink: 0;\n color: var(--color-text);\n}\n.git-file-stat {\n flex-shrink: 0;\n display: inline-flex;\n gap: var(--space-1);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n font-variant-numeric: tabular-nums;\n}\n.git-file-stat .add { color: var(--color-success); }\n.git-file-stat .del { color: var(--color-danger); }\n.git-file:hover .git-file-base { color: var(--color-accent); text-decoration: underline; text-underline-offset: 2px; }\n.git-more {\n align-self: flex-start;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--color-accent);\n font-size: var(--font-size-xs);\n cursor: pointer;\n}\n.git-more:hover { text-decoration: underline; text-underline-offset: 2px; }\n.diff-body {\n margin: 0;\n padding: var(--space-2);\n max-height: 30vh;\n overflow: auto;\n white-space: pre-wrap;\n border-radius: var(--radius-sm);\n font: var(--font-size-xs)/1.6 var(--font-mono);\n background: var(--color-surface-sunken);\n color: var(--color-text-muted);\n}\n.diff-empty { color: var(--color-text-faint); font-size: var(--font-size-xs); line-height: 1.5; }\n\n@media (max-width: 640px) {\n .panel-head-row > .panel-head { min-height: 48px; }\n .panel-head-row > .icon-btn { width: 44px; height: 44px; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ConnectionStatus } from '../composables/useScreamWebClient';\nimport type {\n CreateGoalRequest,\n GoalBudgetInput,\n GoalBudgetUnit,\n GoalSnapshot,\n UpdateGoalRequest,\n} from '../types';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(defineProps<{\n goal: GoalSnapshot | null;\n sessionId?: string | null;\n connectionStatus: ConnectionStatus;\n busy?: boolean;\n archived?: boolean;\n pending?: boolean;\n error?: string | null;\n refineGoal: (description: string) => Promise<string | null>;\n createGoal: (request: CreateGoalRequest) => Promise<boolean>;\n updateGoal: (request: UpdateGoalRequest) => Promise<boolean>;\n pauseGoal: () => Promise<boolean>;\n resumeGoal: () => Promise<boolean>;\n cancelGoal: () => Promise<boolean>;\n}>(), {\n sessionId: null,\n busy: false,\n archived: false,\n pending: false,\n error: null,\n});\n\nconst objective = ref('');\nconst completionCriterion = ref('');\nconst turnBudget = ref('');\nconst tokenBudget = ref('');\nconst timeBudget = ref('');\nconst timeUnit = ref<Extract<GoalBudgetUnit, 'milliseconds' | 'seconds' | 'minutes' | 'hours'>>('minutes');\nconst editing = ref(false);\nconst localError = ref<string | null>(null);\nconst refinedHint = ref(false);\n\nconst connected = computed(() => props.connectionStatus === 'connected');\nconst baseDisabled = computed(() => !props.sessionId || !connected.value || props.archived || props.pending);\nconst createDisabled = computed(() => baseDisabled.value);\nconst statusLabel = computed(() => ({\n active: '进行中',\n paused: '已暂停',\n blocked: '受阻',\n complete: '已完成',\n})[props.goal?.status ?? 'active']);\nconst statusHint = computed(() => {\n if (!props.sessionId) return '选择或新建会话后即可配置';\n if (props.archived) return '归档会话为只读状态';\n if (!connected.value) return '连接恢复后可继续管理';\n if (props.pending) return '正在提交请求…';\n return props.goal ? '状态由核心事件实时同步' : '创建后 Agent 将自动开始执行';\n});\n\nwatch(() => props.sessionId, () => {\n editing.value = false;\n resetCreateForm();\n});\n\nwatch(() => props.goal?.goalId, (nextGoalId, previousGoalId) => {\n editing.value = false;\n if (nextGoalId !== previousGoalId) resetCreateForm();\n});\n\nfunction resetCreateForm(): void {\n objective.value = '';\n completionCriterion.value = '';\n turnBudget.value = '';\n tokenBudget.value = '';\n timeBudget.value = '';\n timeUnit.value = 'minutes';\n refinedHint.value = false;\n localError.value = null;\n}\n\nfunction positiveInteger(raw: string, label: string): number | null | undefined {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n const value = Number(trimmed);\n if (!Number.isSafeInteger(value) || value <= 0) {\n localError.value = `${label}必须是正整数。`;\n return undefined;\n }\n return value;\n}\n\nfunction collectBudgets(): GoalBudgetInput[] | null {\n localError.value = null;\n const turns = positiveInteger(turnBudget.value, '轮次预算');\n if (turns === undefined) return null;\n const tokens = positiveInteger(tokenBudget.value, 'Token 预算');\n if (tokens === undefined) return null;\n const time = positiveInteger(timeBudget.value, '时间预算');\n if (time === undefined) return null;\n const budgets: GoalBudgetInput[] = [];\n if (turns !== null) budgets.push({ value: turns, unit: 'turns' });\n if (tokens !== null) budgets.push({ value: tokens, unit: 'tokens' });\n if (time !== null) budgets.push({ value: time, unit: timeUnit.value });\n return budgets;\n}\n\nasync function refine(): Promise<void> {\n const description = objective.value.trim();\n if (!description) {\n localError.value = '请先输入需要优化的目标描述。';\n return;\n }\n localError.value = null;\n refinedHint.value = false;\n const refined = await props.refineGoal(description);\n if (refined !== null) {\n objective.value = refined;\n refinedHint.value = true;\n }\n}\n\nasync function create(): Promise<void> {\n const nextObjective = objective.value.trim();\n if (!nextObjective) {\n localError.value = '目标内容不能为空。';\n return;\n }\n const budgets = collectBudgets();\n if (budgets === null) return;\n const ok = await props.createGoal({\n objective: nextObjective,\n completionCriterion: completionCriterion.value.trim() || undefined,\n replace: false,\n budgets,\n });\n if (ok) refinedHint.value = false;\n}\n\nfunction representTimeBudget(milliseconds: number | null): void {\n if (milliseconds === null) {\n timeBudget.value = '';\n timeUnit.value = 'minutes';\n } else if (milliseconds % 3_600_000 === 0) {\n timeBudget.value = String(milliseconds / 3_600_000);\n timeUnit.value = 'hours';\n } else if (milliseconds % 60_000 === 0) {\n timeBudget.value = String(milliseconds / 60_000);\n timeUnit.value = 'minutes';\n } else if (milliseconds % 1000 === 0) {\n timeBudget.value = String(milliseconds / 1000);\n timeUnit.value = 'seconds';\n } else {\n timeBudget.value = String(milliseconds);\n timeUnit.value = 'milliseconds';\n }\n}\n\nfunction beginEdit(): void {\n const current = props.goal;\n if (!current) return;\n objective.value = current.objective;\n turnBudget.value = current.budget.turnBudget === null ? '' : String(current.budget.turnBudget);\n tokenBudget.value = current.budget.tokenBudget === null ? '' : String(current.budget.tokenBudget);\n representTimeBudget(current.budget.wallClockBudgetMs);\n localError.value = null;\n editing.value = true;\n}\n\nfunction timeToMilliseconds(value: number, unit: typeof timeUnit.value): number {\n if (unit === 'hours') return value * 3_600_000;\n if (unit === 'minutes') return value * 60_000;\n if (unit === 'seconds') return value * 1000;\n return value;\n}\n\nasync function saveEdit(): Promise<void> {\n const current = props.goal;\n if (!current) return;\n const nextObjective = objective.value.trim();\n if (!nextObjective) {\n localError.value = '目标内容不能为空。';\n return;\n }\n const budgets = collectBudgets();\n if (budgets === null) return;\n\n const nextTurns = positiveInteger(turnBudget.value, '轮次预算');\n const nextTokens = positiveInteger(tokenBudget.value, 'Token 预算');\n const nextTime = positiveInteger(timeBudget.value, '时间预算');\n if (nextTurns === undefined || nextTokens === undefined || nextTime === undefined) return;\n if (current.budget.turnBudget !== null && nextTurns === null) {\n localError.value = '当前协议不支持清除已有轮次预算,请填写新的正整数。';\n return;\n }\n if (current.budget.tokenBudget !== null && nextTokens === null) {\n localError.value = '当前协议不支持清除已有 Token 预算,请填写新的正整数。';\n return;\n }\n if (current.budget.wallClockBudgetMs !== null && nextTime === null) {\n localError.value = '当前协议不支持清除已有时间预算,请填写新的正整数。';\n return;\n }\n\n const changedBudgets = budgets.filter((budget) => {\n if (budget.unit === 'turns') return budget.value !== current.budget.turnBudget;\n if (budget.unit === 'tokens') return budget.value !== current.budget.tokenBudget;\n return timeToMilliseconds(budget.value, budget.unit) !== current.budget.wallClockBudgetMs;\n });\n const changedObjective = nextObjective === current.objective ? undefined : nextObjective;\n if (changedObjective === undefined && changedBudgets.length === 0) {\n localError.value = '目标与预算没有变化。';\n return;\n }\n const ok = await props.updateGoal({ objective: changedObjective, budgets: changedBudgets });\n if (ok) editing.value = false;\n}\n\nasync function lifecycle(action: 'pause' | 'resume' | 'cancel'): Promise<void> {\n localError.value = null;\n if (action === 'cancel' && !window.confirm('确定取消当前 Goal?当前 Goal 状态将被清除。')) return;\n if (action === 'pause') await props.pauseGoal();\n else if (action === 'resume') await props.resumeGoal();\n else await props.cancelGoal();\n}\n\nfunction formatNumber(value: number): string {\n return value.toLocaleString('zh-CN');\n}\n\nfunction formatDuration(milliseconds: number): string {\n if (milliseconds < 1000) return `${milliseconds} 毫秒`;\n const totalSeconds = Math.floor(milliseconds / 1000);\n if (totalSeconds < 60) return `${totalSeconds} 秒`;\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n if (hours > 0) return `${hours} 小时 ${minutes} 分钟`;\n return `${minutes} 分钟`;\n}\n\nfunction metricPercent(used: number, budget: number | null): number {\n if (budget === null || budget <= 0) return 0;\n return Math.min(100, Math.round((used / budget) * 100));\n}\n\nfunction formatNoteTime(time: number): string {\n return new Date(time).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' });\n}\n</script>\n\n<template>\n <section class=\"goal-panel panel-section\">\n <div class=\"section-heading\">\n <span class=\"head-icon\"><SvgIcon name=\"target\" :size=\"14\" /></span>\n <span class=\"head-title\">Goal 管理</span>\n <span class=\"head-hint\" :title=\"statusHint\">{{ statusHint }}</span>\n <span v-if=\"goal\" class=\"head-tail\"><span :class=\"['status-pill', `is-${goal.status}`]\">{{ statusLabel }}</span></span>\n </div>\n\n <div class=\"panel-body\">\n <div v-if=\"!sessionId\" class=\"empty-state\">暂无会话,Goal 管理暂不可用。</div>\n\n <form v-else-if=\"!goal\" class=\"goal-form\" @submit.prevent=\"create\">\n <label>\n <span>目标内容</span>\n <textarea v-model=\"objective\" rows=\"3\" maxlength=\"4000\" placeholder=\"描述希望 Agent 持续完成的目标\" :disabled=\"createDisabled\" />\n </label>\n <div class=\"refine-row\">\n <button type=\"button\" class=\"secondary\" :disabled=\"createDisabled || !objective.trim()\" @click=\"refine\">\n <SvgIcon name=\"sparkles\" :size=\"15\" /> AI 优化\n </button>\n <small v-if=\"refinedHint\">已优化,请确认或继续编辑后再创建。</small>\n </div>\n <label>\n <span>完成标准 <small>可选</small></span>\n <textarea v-model=\"completionCriterion\" rows=\"2\" placeholder=\"例如:聚焦测试、类型检查与 Web 构建全部通过\" :disabled=\"createDisabled\" />\n </label>\n <div class=\"budget-title\">执行预算 <small>留空表示不限制</small></div>\n <div class=\"budget-grid\">\n <label><span>轮次</span><input v-model=\"turnBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"createDisabled\" /></label>\n <label><span>Token</span><input v-model=\"tokenBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"createDisabled\" /></label>\n </div>\n <div class=\"time-budget\">\n <label><span>时间</span><input v-model=\"timeBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"createDisabled\" /></label>\n <select v-model=\"timeUnit\" aria-label=\"时间预算单位\" :disabled=\"createDisabled\">\n <option value=\"minutes\">分钟</option><option value=\"hours\">小时</option><option value=\"seconds\">秒</option><option value=\"milliseconds\">毫秒</option>\n </select>\n </div>\n <button class=\"primary\" type=\"submit\" :disabled=\"createDisabled || !objective.trim()\">{{ pending ? '正在创建…' : '创建并开始执行' }}</button>\n </form>\n\n <template v-else>\n <div v-if=\"!editing\" class=\"goal-summary\">\n <div class=\"objective\"><small>目标</small><p>{{ goal.objective }}</p></div>\n <div class=\"criterion\"><small>完成标准</small><p>{{ goal.completionCriterion ?? '未设置,由 Agent 根据目标判断完成。' }}</p></div>\n <div v-if=\"goal.terminalReason\" class=\"reason\"><strong>状态原因</strong><span>{{ goal.terminalReason }}</span></div>\n\n <dl class=\"goal-metrics\">\n <div class=\"goal-metric\">\n <dt>轮次</dt>\n <dd>{{ goal.turnsUsed }} / {{ goal.budget.turnBudget ?? '不限' }}</dd>\n <i v-if=\"goal.budget.turnBudget !== null\" class=\"bar\"><i :style=\"{ width: `${metricPercent(goal.turnsUsed, goal.budget.turnBudget)}%` }\" /></i>\n </div>\n <div class=\"goal-metric\">\n <dt>Token</dt>\n <dd>{{ formatNumber(goal.tokensUsed) }} / {{ goal.budget.tokenBudget === null ? '不限' : formatNumber(goal.budget.tokenBudget) }}</dd>\n <i v-if=\"goal.budget.tokenBudget !== null\" class=\"bar\"><i :style=\"{ width: `${metricPercent(goal.tokensUsed, goal.budget.tokenBudget)}%` }\" /></i>\n </div>\n <div class=\"goal-metric\">\n <dt>时间</dt>\n <dd>{{ formatDuration(goal.wallClockMs) }} / {{ goal.budget.wallClockBudgetMs === null ? '不限' : formatDuration(goal.budget.wallClockBudgetMs) }}</dd>\n <i v-if=\"goal.budget.wallClockBudgetMs !== null\" class=\"bar\"><i :style=\"{ width: `${metricPercent(goal.wallClockMs, goal.budget.wallClockBudgetMs)}%` }\" /></i>\n </div>\n </dl>\n <div v-if=\"goal.budget.overBudget\" class=\"budget-warning\">已达到或超过执行预算。</div>\n\n <details v-if=\"goal.notes.length\" class=\"notes\">\n <summary>工作记录({{ goal.notes.length }})</summary>\n <ol><li v-for=\"note in goal.notes\" :key=\"`${note.time}-${note.content}`\"><time>{{ formatNoteTime(note.time) }}</time><span>{{ note.content }}</span></li></ol>\n </details>\n\n <div class=\"panel-actions\">\n <button v-if=\"goal.status !== 'complete'\" class=\"secondary\" :disabled=\"baseDisabled || busy\" @click=\"beginEdit\"><SvgIcon name=\"edit\" :size=\"14\" />编辑</button>\n <button v-if=\"goal.status === 'active'\" class=\"secondary\" :disabled=\"baseDisabled\" @click=\"lifecycle('pause')\">暂停</button>\n <button v-if=\"goal.status === 'paused' || goal.status === 'blocked'\" class=\"primary small\" :disabled=\"baseDisabled || busy\" @click=\"lifecycle('resume')\">继续</button>\n <button class=\"danger\" :disabled=\"baseDisabled\" @click=\"lifecycle('cancel')\">取消 Goal</button>\n </div>\n </div>\n\n <form v-else class=\"goal-form edit-form\" @submit.prevent=\"saveEdit\">\n <label><span>目标内容</span><textarea v-model=\"objective\" rows=\"3\" maxlength=\"4000\" :disabled=\"baseDisabled || busy\" /></label>\n <div class=\"budget-title\">更新预算 <small>仅提交发生变化的预算</small></div>\n <div class=\"budget-grid\">\n <label><span>轮次</span><input v-model=\"turnBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"baseDisabled || busy\" /></label>\n <label><span>Token</span><input v-model=\"tokenBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"baseDisabled || busy\" /></label>\n </div>\n <div class=\"time-budget\">\n <label><span>时间</span><input v-model=\"timeBudget\" type=\"number\" min=\"1\" step=\"1\" placeholder=\"不限\" :disabled=\"baseDisabled || busy\" /></label>\n <select v-model=\"timeUnit\" aria-label=\"时间预算单位\" :disabled=\"baseDisabled || busy\">\n <option value=\"minutes\">分钟</option><option value=\"hours\">小时</option><option value=\"seconds\">秒</option><option value=\"milliseconds\">毫秒</option>\n </select>\n </div>\n <div class=\"edit-actions\"><button type=\"button\" class=\"secondary\" :disabled=\"pending\" @click=\"editing = false\">返回</button><button class=\"primary small\" type=\"submit\" :disabled=\"baseDisabled || busy\">保存修改</button></div>\n </form>\n </template>\n\n <p v-if=\"localError || error\" class=\"form-error\">{{ localError ?? error }}</p>\n <p v-else-if=\"pending\" class=\"pending-copy\">请求处理中,状态将在核心事件到达后同步。</p>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Heading anatomy comes from the shared global `.section-heading` rules. */\n.status-pill { padding: 1px var(--space-2); border-radius: var(--radius-sm); font-size: var(--font-size-xs); font-weight: 700; }\n.status-pill.is-active { color: var(--color-accent); background: var(--color-accent-soft); animation: breathe var(--dur-breathe) ease-in-out infinite; }\n.status-pill.is-paused { color: var(--color-warning); background: var(--color-warning-soft); }\n.status-pill.is-blocked { color: var(--color-danger); background: var(--color-danger-soft); }\n.status-pill.is-complete { color: var(--color-info); background: var(--color-info-soft); }\n.empty-state { padding: var(--space-3) var(--space-2); color: var(--color-text-faint); font-size: var(--font-size-xs); text-align: center; }\n.goal-form { display: grid; gap: var(--space-3); }\n.goal-form label { display: grid; gap: var(--space-1); min-width: 0; }\n.goal-form label > span, .budget-title { color: var(--color-text-muted); font-size: var(--font-size-xs); font-weight: 650; }\n.goal-form label small, .budget-title small { color: var(--color-text-faint); font-size: 10px; font-weight: 400; }\ntextarea, input, select { width: 100%; border: 1px solid var(--color-line); border-radius: var(--radius-md); background: var(--color-surface); color: var(--color-text); font: var(--font-size-xs)/1.5 var(--font-ui); transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out); }\ntextarea { min-height: 58px; padding: var(--space-2); resize: vertical; }\ninput, select { height: 32px; padding: 0 var(--space-2); }\ntextarea:focus, input:focus, select:focus { border-color: var(--color-accent-bd); box-shadow: var(--glow-focus); outline: none; }\n.refine-row { display: flex; align-items: center; gap: var(--space-2); }\n.refine-row small { color: var(--color-success); font-size: 10px; }\n.budget-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-2); }\n.time-budget { display: grid; grid-template-columns: minmax(0,1fr) 84px; align-items: end; gap: var(--space-2); }\nbutton { border-radius: var(--radius-md); cursor: pointer; font-size: var(--font-size-xs); font-weight: 650; transition: background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out), filter var(--dur-fast) var(--ease-out); }\nbutton:not(:disabled):active { transform: translateY(0) scale(0.97); }\n.primary { min-height: 32px; border: 0; background: var(--color-accent); color: var(--color-on-accent); box-shadow: var(--shadow-xs); }\n.primary:not(:disabled):hover { box-shadow: var(--glow-accent); transform: translateY(-1px); }\n.primary.small { min-height: 32px; padding: 0 var(--space-3); }\n.secondary { min-height: 32px; display: inline-flex; align-items: center; justify-content: center; gap: var(--space-1); padding: 0 var(--space-3); border: 0; background: var(--color-accent-soft); color: var(--color-text-muted); }\n.secondary:not(:disabled):hover { background: var(--color-hover); color: var(--color-accent); }\n.danger { min-height: 32px; padding: 0 var(--space-3); border: 0; background: var(--color-danger-soft); color: var(--color-danger); }\n.danger:not(:disabled):hover { filter: brightness(1.08); }\n.goal-summary { display: flex; flex-direction: column; gap: var(--space-2); }\n.objective, .criterion { display: flex; flex-direction: column; gap: 2px; }\n.objective small, .criterion small { color: var(--color-text-faint); font-size: 10px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; }\n.objective p, .criterion p { margin: 0; color: var(--color-text); font-size: var(--font-size-sm); line-height: 1.55; overflow-wrap: anywhere; }\n.criterion p { color: var(--color-text-muted); font-size: var(--font-size-xs); }\n.reason { display: flex; flex-direction: column; gap: 2px; padding: var(--space-2); border-radius: var(--radius-md); background: var(--color-warning-soft); color: var(--color-warning); font-size: var(--font-size-xs); line-height: 1.45; }\n.reason strong { font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; }\n/* Budget usage as a flat stat list with hairline separators and shared bars. */\n.goal-metrics { display: flex; flex-direction: column; margin: 0; }\n.goal-metric {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: baseline;\n gap: var(--space-2);\n padding: var(--space-2) 0;\n}\n.goal-metric + .goal-metric { border-top: 1px solid var(--color-line); }\n.goal-metric > dt { color: var(--color-text-faint); font-size: var(--font-size-xs); }\n.goal-metric > dd {\n margin: 0;\n color: var(--color-text);\n font: 600 var(--font-size-xs) var(--font-mono);\n font-variant-numeric: tabular-nums;\n}\n.goal-metric > .bar { grid-column: 1 / -1; }\n.budget-warning { padding: var(--space-2); border-radius: var(--radius-md); color: var(--color-danger); background: var(--color-danger-soft); font-size: var(--font-size-xs); line-height: 1.45; }\n.notes { color: var(--color-text-muted); font-size: var(--font-size-xs); }\n.notes summary { cursor: pointer; font-weight: 650; color: var(--color-accent); }\n.notes ol { display: grid; gap: var(--space-2); margin-top: var(--space-2); padding-left: 0; list-style: none; }\n.notes li { display: grid; grid-template-columns: 68px minmax(0, 1fr); gap: var(--space-2); line-height: 1.45; }\n.notes time { color: var(--color-text-faint); font-family: var(--font-mono); font-size: 10px; }\n.notes span { overflow-wrap: anywhere; }\n.edit-actions { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: var(--space-2); }\n.form-error { color: var(--color-danger); font-size: var(--font-size-xs); line-height: 1.4; overflow-wrap: anywhere; }\n.pending-copy { color: var(--color-info); font-size: var(--font-size-xs); line-height: 1.4; animation: breathe var(--dur-breathe) ease-in-out infinite; }\n@media (max-width: 640px) {\n .primary, .secondary, .danger { min-height: 44px; }\n input, select { height: 44px; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { LikePreferences } from '../types';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = defineProps<{\n like: LikePreferences;\n updateLike: (prefs: LikePreferences) => Promise<boolean>;\n}>();\n\nconst editing = ref(false);\nconst saving = ref(false);\nconst error = ref('');\nconst draft = ref<LikePreferences>({});\n\nconst fields = [\n { key: 'nickname' as const, label: '昵称', placeholder: '用户称呼,如:老板' },\n { key: 'tone' as const, label: '语气', placeholder: 'AI 风格,如:专业不拖沓' },\n { key: 'other' as const, label: '偏好', placeholder: '其他用户偏好' },\n { key: 'doNot' as const, label: '禁止', placeholder: '用户明确不让做的事' },\n];\n\nfunction open(): void {\n draft.value = { ...props.like };\n error.value = '';\n editing.value = true;\n}\n\nasync function confirm(): Promise<void> {\n saving.value = true;\n error.value = '';\n const ok = await props.updateLike(draft.value);\n saving.value = false;\n if (ok) editing.value = false;\n else error.value = '保存失败';\n}\n</script>\n\n<template>\n <section class=\"panel-section like-section\">\n <div class=\"section-heading\">\n <span class=\"head-icon\"><SvgIcon name=\"settings\" :size=\"14\" /></span>\n <span class=\"head-title\">偏好设置</span>\n <span class=\"head-hint\">/like 用户偏好</span>\n </div>\n <div class=\"panel-body\">\n <dl class=\"kv-rows\">\n <div v-for=\"f in fields\" :key=\"f.key\" class=\"kv-row\">\n <dt>{{ f.label }}</dt>\n <dd>{{ (like[f.key] ?? '').trim() || '未设置' }}</dd>\n </div>\n </dl>\n <div class=\"panel-actions\">\n <button class=\"like-edit\" @click=\"open\">编辑偏好</button>\n </div>\n </div>\n\n <div v-if=\"editing\" class=\"dialog-overlay\" @click.self=\"editing = false\">\n <div class=\"dialog\">\n <div class=\"dialog-title\">编辑用户偏好</div>\n <label v-for=\"f in fields\" :key=\"f.key\" class=\"dialog-field\">\n <span>{{ f.label }}</span>\n <input v-model=\"draft[f.key]\" :placeholder=\"f.placeholder\" />\n </label>\n <div v-if=\"error\" class=\"dialog-error\">{{ error }}</div>\n <div class=\"dialog-actions\">\n <button @click=\"editing = false\">取消</button>\n <button :disabled=\"saving\" @click=\"confirm\">{{ saving ? '保存中…' : '确认' }}</button>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Card, header anatomy, kv rows and the action strip come from the shared\n global styles. */\n.like-edit {\n min-height: 32px;\n display: inline-flex;\n align-items: center;\n padding: 0 var(--space-3);\n border: 0;\n border-radius: var(--radius-md);\n background: var(--color-accent-soft);\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n cursor: pointer;\n transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);\n}\n.like-edit:hover { background: var(--color-hover); color: var(--color-accent); }\n/* The drawer turns into a `z-index: var(--z-overlay)` layer on mobile, so this\n editor has to sit above it — z-50 used to bury the modal under the panel. */\n.dialog-overlay { position:fixed; inset:0; background:rgba(0,0,0,.4); display:flex; align-items:center; justify-content:center; z-index:var(--z-modal); }\n.dialog { width:380px; max-width:calc(100vw - 40px); padding:var(--space-5); border-radius:var(--radius-lg); background:var(--color-surface); border:1px solid var(--color-line); display:flex; flex-direction:column; gap:var(--space-3); }\n.dialog-title { font-size:var(--font-size-base); font-weight:700; color:var(--color-text); }\n.dialog-field { display:flex; flex-direction:column; gap:5px; }\n.dialog-field span { font-size:var(--font-size-xs); color:var(--color-text-faint); }\n.dialog-field input { height:32px; padding:0 var(--space-2); border:1px solid var(--color-line); border-radius:var(--radius-md); background:var(--color-surface-sunken); color:var(--color-text); font-size:var(--font-size-xs); }\n.dialog-error { color:var(--color-danger); font-size:var(--font-size-xs); }\n.dialog-actions { display:flex; justify-content:flex-end; gap:var(--space-2); }\n.dialog-actions button { min-height:32px; padding:0 var(--space-3); border-radius:var(--radius-md); border:0; background:var(--color-accent-soft); color:var(--color-text-muted); font-size:var(--font-size-xs); cursor:pointer; }\n.dialog-actions button:last-child { background:var(--color-accent); color:var(--color-on-accent); }\n.dialog-actions button:disabled { opacity:.5; cursor:default; }\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport type { ConnectionStatus } from '../composables/useScreamWebClient';\nimport type { SessionStatus } from '../types';\nimport ContextRing from './ContextRing.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = withDefaults(defineProps<{\n status: SessionStatus;\n busy?: boolean;\n connectionStatus: ConnectionStatus;\n}>(), { busy: false });\n\nconst STORAGE_KEY = 'scream-panel-runstatus-open';\nconst open = ref(true);\ntry {\n open.value = localStorage.getItem(STORAGE_KEY) !== '0';\n} catch {\n /* ignore */\n}\nfunction toggle() {\n open.value = !open.value;\n try { localStorage.setItem(STORAGE_KEY, open.value ? '1' : '0'); } catch { /* ignore */ }\n}\n\nconst usagePercent = computed(() => {\n const value = props.status.contextUsage;\n return value === undefined ? null : Math.round((value > 1 ? value / 100 : value) * 100);\n});\nconst tokenTitle = computed(\n () => `Tokens: ${props.status.contextTokens?.toLocaleString() ?? '-'} / ${props.status.maxContextTokens?.toLocaleString() ?? '-'}`,\n);\nconst connectionLabel = computed(() => ({\n connected: '已连接',\n connecting: '连接中',\n reconnecting: '重连中',\n disconnected: '已断开',\n idle: '空闲',\n} as Record<ConnectionStatus, string>)[props.connectionStatus] ?? '空闲');\n\nwatch(() => props.busy, () => {\n if (props.busy && !open.value) open.value = true;\n});\n</script>\n\n<template>\n <section :class=\"['panel-section', 'run-status', { 'is-open': open }]\">\n <button class=\"panel-head\" :aria-expanded=\"open\" @click=\"toggle\">\n <span class=\"head-icon\"><SvgIcon name=\"activity\" :size=\"14\" /></span>\n <span class=\"head-title\">运行状态</span>\n <span class=\"head-hint\">{{ busy ? '正在处理会话' : '已就绪,等待任务' }}</span>\n <span class=\"head-tail\">\n <span :class=\"['head-dot', { busy }]\" :title=\"busy ? 'Agent 正在处理' : '空闲'\" />\n <SvgIcon class=\"chevron\" :class=\"{ rotated: open }\" name=\"chevron-down\" :size=\"14\" />\n </span>\n </button>\n\n <div v-show=\"open\" class=\"panel-body\">\n <dl class=\"stat-grid\">\n <div class=\"stat\">\n <dt>连接</dt>\n <dd>\n <span :class=\"['conn-dot', connectionStatus]\" aria-hidden=\"true\" />\n <span :class=\"['conn', connectionStatus]\">{{ connectionLabel }}</span>\n </dd>\n </div>\n <div class=\"stat\">\n <dt>上下文占用</dt>\n <dd v-if=\"usagePercent !== null\" :title=\"tokenTitle\">\n <ContextRing :usage=\"status.contextUsage\" :size=\"14\" />{{ usagePercent }}%\n </dd>\n <dd v-else class=\"faint\">未知</dd>\n </div>\n <div class=\"stat wide\">\n <dt>Token(输入 / 上限)</dt>\n <dd class=\"mono\">{{ status.contextTokens?.toLocaleString() ?? '-' }} / {{ status.maxContextTokens?.toLocaleString() ?? '-' }}</dd>\n </div>\n </dl>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Card, header anatomy, stat grid and dots come from the shared global styles. */\n.conn.connected { color: var(--color-success); }\n.conn.connecting, .conn.reconnecting { color: var(--color-warning); }\n.conn.disconnected { color: var(--color-danger); }\n.conn-dot {\n width: 6px;\n height: 6px;\n flex-shrink: 0;\n border-radius: 50%;\n background: var(--color-text-faint);\n}\n.conn-dot.connected { background: var(--color-success); }\n.conn-dot.connecting, .conn-dot.reconnecting { background: var(--color-warning); }\n.conn-dot.disconnected { background: var(--color-danger); }\n@media (prefers-reduced-motion: reduce) { .head-dot.busy { animation: none; } }\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { TodoItem, TodoStatus } from '../types';\nimport { groupTodosByPhase } from '../utils/goalTodoState';\nimport SvgIcon from './ui/SvgIcon.vue';\n\nconst props = defineProps<{ todos: TodoItem[] }>();\n\nconst groups = computed(() => groupTodosByPhase(props.todos));\nconst completed = computed(() => props.todos.filter((todo) => todo.status === 'done').length);\nconst inProgress = computed(() => props.todos.filter((todo) => todo.status === 'in_progress').length);\nconst pending = computed(() => props.todos.filter((todo) => todo.status === 'pending').length);\nconst percent = computed(() => (props.todos.length ? Math.round((completed.value / props.todos.length) * 100) : 0));\nconst hint = computed(() => {\n if (!props.todos.length) return '直接来自 Agent 核心状态';\n if (completed.value === props.todos.length) return '全部完成';\n const parts = [];\n if (inProgress.value) parts.push(`进行中 ${inProgress.value}`);\n if (pending.value) parts.push(`待处理 ${pending.value}`);\n return parts.join(' · ') || '直接来自 Agent 核心状态';\n});\nconst statusMeta: Record<TodoStatus, { label: string; symbol: string }> = {\n pending: { label: '待处理', symbol: '○' },\n in_progress: { label: '进行中', symbol: '●' },\n done: { label: '已完成', symbol: '✓' },\n};\n</script>\n\n<template>\n <section class=\"todo-panel panel-section\">\n <div class=\"section-heading\">\n <span class=\"head-icon\"><SvgIcon name=\"clipboard\" :size=\"14\" /></span>\n <span class=\"head-title\">核心 Todo</span>\n <span class=\"head-hint\">{{ hint }}</span>\n <span class=\"head-tail\"><span class=\"head-count\">{{ completed }}/{{ todos.length }}</span></span>\n </div>\n\n <div v-if=\"todos.length === 0\" class=\"panel-body\">\n <div class=\"empty-state\">\n <SvgIcon name=\"check\" :size=\"18\" />\n <span>暂无 Todo</span>\n <small>Agent 创建任务清单后会在这里实时显示。</small>\n </div>\n </div>\n\n <div v-else class=\"panel-body\">\n <div class=\"progress-row\">\n <i class=\"bar\" aria-hidden=\"true\"><i :style=\"{ width: `${percent}%` }\" /></i>\n <span class=\"progress-value\">{{ percent }}%</span>\n </div>\n\n <section v-for=\"(group, groupIndex) in groups\" :key=\"group.phase ?? `unphased-${groupIndex}`\" class=\"todo-group\">\n <h4>{{ group.phase ?? '未分阶段' }}</h4>\n <ol>\n <li v-for=\"(todo, index) in group.items\" :key=\"`${groupIndex}-${index}-${todo.title}`\" :class=\"`is-${todo.status}`\">\n <span class=\"status-symbol\" :title=\"statusMeta[todo.status].label\">{{ statusMeta[todo.status].symbol }}</span>\n <span class=\"todo-title\">{{ todo.title }}</span>\n <small>{{ statusMeta[todo.status].label }}</small>\n </li>\n </ol>\n </section>\n </div>\n </section>\n</template>\n\n<style scoped>\n/* Card, header anatomy, count chip and the progress bar come from the shared\n global styles. Items are flat rows with a status rail — no nested boxes. */\n.progress-row { display: flex; align-items: center; gap: var(--space-2); }\n.progress-row .bar { flex: 1; }\n.progress-value {\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n font-variant-numeric: tabular-nums;\n flex-shrink: 0;\n}\n.empty-state {\n min-height: 64px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-1);\n color: var(--color-text-faint);\n text-align: center;\n}\n.empty-state span { color: var(--color-text-muted); font-size: var(--font-size-xs); font-weight: 650; }\n.empty-state small { max-width: 220px; font-size: 10px; line-height: 1.45; }\n.todo-group { display: flex; flex-direction: column; gap: var(--space-1); }\n.todo-group + .todo-group { margin-top: var(--space-2); }\n.todo-group h4 {\n margin: 0;\n color: var(--color-text-faint);\n font-size: 10px;\n font-weight: 700;\n letter-spacing: .04em;\n text-transform: uppercase;\n}\nol { display: flex; flex-direction: column; gap: 0; margin: 0; padding: 0; list-style: none; }\nli {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr) auto;\n align-items: baseline;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-2) var(--space-2) 0;\n border-left: 2px solid transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n}\nli + li { border-top: 1px solid var(--color-line); }\n.status-symbol { color: var(--color-text-faint); font: 700 var(--font-size-sm) var(--font-mono); text-align: center; }\n.todo-title { overflow-wrap: anywhere; color: var(--color-text); }\nli small { color: var(--color-text-faint); font-size: 10px; white-space: nowrap; }\nli.is-in_progress { border-left-color: var(--color-accent); }\nli.is-in_progress .status-symbol { color: var(--color-accent); animation: breathe var(--dur-breathe) ease-in-out infinite; }\nli.is-in_progress small { color: var(--color-accent); }\nli.is-done { border-left-color: var(--color-success); }\nli.is-done .status-symbol { color: var(--color-success); }\nli.is-done .todo-title { color: var(--color-text-faint); text-decoration: line-through; }\n@media (prefers-reduced-motion: reduce) { li.is-in_progress .status-symbol { animation: none; } }\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue';\nimport type { UseScreamWebClientReturn } from '../composables/useScreamWebClient';\nimport { parseUnifiedDiff, type DiffLine } from '../utils/diff';\nimport DiffLines from './DiffLines.vue';\nimport FilesBrowser from './FilesBrowser.vue';\nimport GitPanel from './GitPanel.vue';\nimport GoalPanel from './GoalPanel.vue';\nimport LikePanel from './LikePanel.vue';\nimport RunStatusPanel from './RunStatusPanel.vue';\nimport TodoPanel from './TodoPanel.vue';\n\nconst props = defineProps<{ client: UseScreamWebClientReturn }>();\n\ndefineEmits<{\n (e: 'refresh-git'): void;\n (e: 'close'): void;\n (e: 'insert', text: string): void;\n}>();\n\n/** Which pane is active: session details or workspace files. */\nconst activeTab = ref<'detail' | 'files'>('detail');\n\n/** Inline git diff preview for a selected changed file. */\ninterface DiffPreview {\n path: string;\n display: string;\n adds?: number;\n dels?: number;\n lines: DiffLine[];\n loading: boolean;\n}\nconst gitDiff = ref<DiffPreview | null>(null);\nconst diffRef = ref<HTMLElement | null>(null);\n\nasync function openDiff(file: { path: string; display: string; adds?: number; dels?: number }): Promise<void> {\n gitDiff.value = { ...file, lines: [], loading: true };\n try {\n const res = await fetch(`/api/v1/git/diff?path=${encodeURIComponent(file.path)}`);\n const data = (await res.json()) as { patch: string };\n const lines = parseUnifiedDiff(data.patch ?? '');\n // Untracked rows have no numstat entry, so fall back to counting the\n // synthesised added-file patch.\n const adds = file.adds ?? (file.dels === undefined ? lines.filter((l) => l.type === 'add').length : undefined);\n gitDiff.value = { ...file, adds, lines, loading: false };\n } catch {\n gitDiff.value = { ...file, lines: [], loading: false };\n }\n // The card lands below a 500px+ file list; without this the click looks dead.\n await nextTick();\n const reduced = globalThis.window?.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\n diffRef.value?.scrollIntoView({ block: 'start', behavior: reduced ? 'auto' : 'smooth' });\n}\n\nconst {\n connectionStatus,\n status,\n sessionId,\n isBusy,\n isArchived,\n goal,\n todos,\n goalRequestPending,\n goalRequestError,\n like,\n gitStatus,\n refineGoal,\n createGoal,\n updateGoal,\n pauseGoal,\n resumeGoal,\n cancelGoal,\n} = props.client;\n</script>\n\n<template>\n <aside class=\"drawer\">\n <div class=\"drawer-toolbar\">\n <div class=\"drawer-tabs\" role=\"tablist\" aria-label=\"抽屉面板\">\n <button\n role=\"tab\"\n :aria-selected=\"activeTab === 'detail'\"\n :class=\"['drawer-tab', { active: activeTab === 'detail' }]\"\n @click=\"activeTab = 'detail'\"\n >\n 详情\n </button>\n <button\n role=\"tab\"\n :aria-selected=\"activeTab === 'files'\"\n :class=\"['drawer-tab', { active: activeTab === 'files' }]\"\n @click=\"activeTab = 'files'\"\n >\n 文件\n </button>\n </div>\n <button class=\"drawer-close\" title=\"收起面板\" aria-label=\"收起详情\" @click=\"$emit('close')\">\n <SvgIcon name=\"panel-right\" :size=\"16\" />\n </button>\n </div>\n\n <div class=\"drawer-body\">\n <template v-if=\"activeTab === 'detail'\">\n <RunStatusPanel :status=\"status\" :busy=\"isBusy\" :connection-status=\"connectionStatus\" />\n <GitPanel :git-status=\"gitStatus\" @refresh=\"$emit('refresh-git')\" @diff=\"openDiff\" />\n <div v-if=\"gitDiff\" ref=\"diffRef\" class=\"git-diff-view\">\n <div class=\"git-diff-head\">\n <span class=\"git-diff-title\" :title=\"gitDiff.path\">{{ gitDiff.loading ? '加载中…' : gitDiff.display }}</span>\n <span class=\"git-diff-tools\">\n <span v-if=\"!gitDiff.loading && (gitDiff.adds || gitDiff.dels)\" class=\"git-diff-stat\">\n <span v-if=\"gitDiff.adds\" class=\"add\">+{{ gitDiff.adds }}</span>\n <span v-if=\"gitDiff.dels\" class=\"del\">−{{ gitDiff.dels }}</span>\n </span>\n <button class=\"git-diff-close\" title=\"关闭 diff\" aria-label=\"关闭 diff\" @click=\"gitDiff = null\">✕</button>\n </span>\n </div>\n <div v-if=\"gitDiff.lines.length\" class=\"git-diff-body\">\n <DiffLines :lines=\"gitDiff.lines\" />\n </div>\n <p v-else-if=\"!gitDiff.loading\" class=\"git-diff-empty\">该文件无差异内容(可能是二进制文件或已被忽略)。</p>\n </div>\n <TodoPanel :todos=\"todos\" />\n <LikePanel :like=\"like\" :update-like=\"props.client.updateLike\" />\n <GoalPanel\n :goal=\"goal\"\n :session-id=\"sessionId\"\n :connection-status=\"connectionStatus\"\n :busy=\"isBusy\"\n :archived=\"isArchived\"\n :pending=\"goalRequestPending\"\n :error=\"goalRequestError\"\n :refine-goal=\"refineGoal\"\n :create-goal=\"createGoal\"\n :update-goal=\"updateGoal\"\n :pause-goal=\"pauseGoal\"\n :resume-goal=\"resumeGoal\"\n :cancel-goal=\"cancelGoal\"\n />\n </template>\n\n <FilesBrowser v-else :key=\"props.client.workDir.value || 'none'\" :initial-path=\"props.client.workDir.value || ''\" />\n </div>\n </aside>\n</template>\n\n<style scoped>\n/* The drawer itself never scrolls its children into submission: the toolbar is\n fixed and `.drawer-body` is the single scroll container, so sections keep\n their natural height instead of being flex-shrunk and clipped. */\n.drawer {\n width: var(--rightbar-width);\n /* Same trap as `.chat-column`: as a flex item this box shrank to 312px even\n though the token says 360px. */\n flex: 0 0 var(--rightbar-width);\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding: 0 var(--space-3);\n background: var(--color-surface-sunken);\n border-left: 1px solid var(--color-line);\n animation: rise-in var(--dur-slower) var(--ease-out);\n}\n.drawer-toolbar {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 48px;\n border-bottom: 1px solid var(--color-line);\n}\n.drawer-body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n padding: var(--space-3) 0 var(--space-5);\n}\n/* Cards must keep their natural height: as flex items they would shrink and\n `overflow: hidden` would slice the rows. */\n.drawer-body > * { flex-shrink: 0; }\n.drawer-tabs {\n display: inline-flex;\n gap: var(--space-1);\n padding: 0;\n border-radius: 0;\n background: transparent;\n border: 0;\n}\n.drawer-tab {\n min-height: 32px;\n padding: 0 var(--space-3);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n font-weight: 500;\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out);\n}\n.drawer-tab:hover {\n color: var(--color-text);\n background: var(--color-hover);\n}\n.drawer-tab.active {\n background: var(--color-accent);\n color: var(--color-on-accent);\n font-weight: 600;\n}\n.drawer-close {\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border: 0;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-faint);\n cursor: pointer;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.drawer-close:hover {\n color: var(--color-accent);\n background: var(--color-accent-soft);\n}\n/* Diff preview is a module card too — same container language as the panels. */\n.git-diff-view {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n background: var(--color-surface);\n}\n.git-diff-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n padding: 9px var(--space-3);\n border-bottom: 1px solid var(--color-line);\n}\n.git-diff-title {\n font-size: var(--font-size-xs);\n font-weight: 600;\n font-family: var(--font-mono);\n color: var(--color-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.git-diff-tools { display: inline-flex; align-items: center; gap: var(--space-2); flex-shrink: 0; }\n.git-diff-stat {\n display: inline-flex;\n gap: var(--space-1);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n font-variant-numeric: tabular-nums;\n}\n.git-diff-stat .add { color: var(--color-success); }\n.git-diff-stat .del { color: var(--color-danger); }\n.git-diff-close { width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--color-text-muted);\n font-size: 11px;\n cursor: pointer;\n flex-shrink: 0;\n}\n.git-diff-close:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.git-diff-body {\n padding: var(--space-2);\n /* A patch can be thousands of lines; cap the pane instead of letting one\n module push the whole column into a scroll marathon. */\n max-height: 40vh;\n overflow: auto;\n}\n.git-diff-empty {\n margin: 0;\n padding: var(--space-3);\n font-size: var(--font-size-xs);\n color: var(--color-text-faint);\n}\n@media (max-width: 800px) {\n .drawer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n max-width: 100vw;\n z-index: var(--z-overlay);\n box-shadow: var(--shadow-xl);\n }\n .drawer-close {\n width: 44px;\n height: 44px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { UseScreamWebClientReturn } from '../composables/useScreamWebClient';\nimport { slashHelpText } from '../commands';\nimport ApprovalCard from './ApprovalCard.vue';\nimport Composer from './Composer.vue';\nimport ConversationHeader from './ConversationHeader.vue';\nimport InfoPanel from './InfoPanel.vue';\nimport MessageList from './MessageList.vue';\nimport SessionDrawer from './SessionDrawer.vue';\n\nconst props = defineProps<{ client: UseScreamWebClientReturn }>();\n\nconst emit = defineEmits<{ (e: 'home'): void }>();\n\nconst {\n connectionStatus,\n messages,\n pendingApprovals,\n status,\n sessionId,\n workDir,\n isBusy,\n models,\n sendPrompt,\n sendCommand,\n clearMessages,\n appendSystemMessage,\n abort,\n resolveApproval,\n exportSession,\n fetchSnapshot,\n switchModel,\n switchThinking,\n} = props.client;\n\nconst composerRef = ref<InstanceType<typeof Composer> | null>(null);\nconst drawerOpen = ref(false);\nconst infoVisible = ref(false);\nconst infoMode = ref<'status' | 'usage'>('status');\n\nconst currentTitle = computed(() => {\n const s = props.client.sessions.value.find((x) => x.sessionId === props.client.currentSessionId.value);\n const stored = s?.title;\n if (stored && stored !== '新会话' && stored !== 'New Session') return stored;\n const firstUser = messages.value.find((m) => m.role === 'user');\n if (firstUser) {\n const text = firstUser.content.replace(/\\s+/g, ' ').trim();\n if (text) return text.length > 24 ? `${text.slice(0, 24)}…` : text;\n }\n return stored ?? null;\n});\n\nfunction onEditResend(content: string) {\n composerRef.value?.insertText(content);\n}\n\nfunction showInfo(mode: 'status' | 'usage') {\n void fetchSnapshot();\n infoMode.value = mode;\n infoVisible.value = true;\n}\n\nfunction openModelPicker() {\n const opened = composerRef.value?.openModelPicker() ?? false;\n if (!opened) {\n appendSystemMessage(`当前模型:${status.value.model ?? 'unknown'}`);\n }\n}\n\nfunction onCommand(name: string, args?: string) {\n switch (name) {\n case 'compact':\n sendCommand('compact');\n break;\n case 'model':\n openModelPicker();\n break;\n case 'clear':\n clearMessages();\n break;\n case 'new':\n emit('home');\n break;\n case 'help':\n appendSystemMessage(slashHelpText());\n break;\n case 'auto':\n case 'yes':\n case 'plan':\n case 'fork':\n case 'title':\n case 'btw':\n sendCommand(name, args);\n break;\n case 'status':\n showInfo('status');\n break;\n case 'usage':\n showInfo('usage');\n break;\n default:\n appendSystemMessage(`未知命令:/${name}`);\n }\n}\n\nfunction onRename(title: string) {\n sendCommand('title', title);\n}\n\nfunction retryLastUser() {\n if (isBusy.value || !connectionStatus.value) return;\n const lastUser = [...messages.value].reverse().find((m) => m.role === 'user');\n if (lastUser) sendPrompt(lastUser.content);\n}\n\nconst loadingOlder = ref(false);\nasync function onLoadOlder(): Promise<void> {\n loadingOlder.value = true;\n await props.client.loadOlderMessages();\n loadingOlder.value = false;\n}\n\nfunction onFork(): void {\n if (isBusy.value) return;\n sendCommand('fork');\n // The fork result arrives as a system message; refresh the sidebar list so\n // the new session shows up without a manual reload.\n setTimeout(() => {\n void props.client.fetchSessions();\n }, 1200);\n}\n</script>\n\n<template>\n <div class=\"conversation\">\n <ConversationHeader\n :title=\"currentTitle\"\n :busy=\"isBusy\"\n :drawer-open=\"drawerOpen\"\n @home=\"emit('home')\"\n @rename=\"onRename\"\n @export=\"sessionId && exportSession(sessionId)\"\n @clear=\"clearMessages\"\n @toggle-drawer=\"drawerOpen = !drawerOpen\"\n />\n\n <div class=\"chat-stage\">\n <div class=\"chat-column\">\n <MessageList\n :messages=\"messages\"\n :busy=\"isBusy\"\n :work-dir=\"workDir\"\n :session-id=\"sessionId ?? ''\"\n :model=\"status.model ?? null\"\n :context-usage=\"status.contextUsage ?? null\"\n :connected=\"connectionStatus === 'connected'\"\n :older-available=\"props.client.olderAvailable.value\"\n :older-loading=\"loadingOlder\"\n @edit=\"onEditResend\"\n @pick=\"sendPrompt\"\n @retry-connection=\"props.client.reconnectNow()\"\n @retry-message=\"retryLastUser\"\n @load-older=\"onLoadOlder\"\n @fork=\"onFork\"\n />\n <div class=\"composer-dock\">\n <ApprovalCard :approvals=\"pendingApprovals\" @resolve=\"resolveApproval\" />\n <Composer\n ref=\"composerRef\"\n :busy=\"isBusy\"\n :status=\"status\"\n :session-id=\"sessionId\"\n :models=\"models\"\n @send=\"sendPrompt\"\n @abort=\"abort\"\n @command=\"onCommand\"\n @switch-model=\"switchModel\"\n @switch-thinking=\"switchThinking\"\n />\n </div>\n </div>\n <Transition name=\"drawer\">\n <SessionDrawer\n v-if=\"drawerOpen\"\n :client=\"props.client\"\n @refresh-git=\"props.client.fetchGitStatus()\"\n @close=\"drawerOpen = false\"\n />\n </Transition>\n </div>\n\n <InfoPanel\n v-if=\"infoVisible\"\n :mode=\"infoMode\"\n :status=\"status\"\n :session-id=\"sessionId\"\n :work-dir=\"workDir\"\n @close=\"infoVisible = false\"\n />\n </div>\n</template>\n\n<style scoped>\n.conversation {\n position: relative;\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: transparent;\n}\n.chat-stage {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n justify-content: center;\n}\n/* `flex: 1` sets flex-basis, which silently overrides `width` — the 840px cap\n never applied and the whole conversation ran edge-to-edge. Cap with\n max-width so the column grows to --content-max and stops there, matching the\n home view's measure. */\n.chat-column {\n flex: 1 1 auto;\n min-width: 0;\n max-width: var(--content-max);\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n.chat-column > :first-child {\n flex: 1;\n min-height: 0;\n}\n.composer-dock {\n flex-shrink: 0;\n padding: var(--space-2) var(--space-5) var(--space-5);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n.drawer-enter-active,\n.drawer-leave-active {\n transition: opacity var(--dur-base) var(--ease-out);\n}\n.drawer-enter-from,\n.drawer-leave-to {\n opacity: 0;\n}\n@media (max-width: 640px) {\n .composer-dock {\n padding: var(--space-2) var(--space-3) var(--space-3);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { inject, ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport type { LikePreferences } from '../types';\nimport type { Theme } from '../theme';\nimport SvgIcon from './ui/SvgIcon.vue';\nimport Button from './ui/Button.vue';\n\nconst props = withDefaults(\n defineProps<{ like?: LikePreferences }>(),\n { like: () => ({}) },\n);\n\nconst emit = defineEmits<{\n (e: 'update-like', prefs: LikePreferences): void;\n}>();\n\n/* ── Theme (light / dark / system) ───────────────────────────────────────── */\nconst theme = inject<Ref<Theme>>('theme', ref('system' as Theme));\nconst setTheme = inject<(t: Theme) => void>('setTheme', () => {});\n\nconst THEME_OPTIONS: { id: Theme; label: string; icon: string }[] = [\n { id: 'light', label: '浅色', icon: 'sun' },\n { id: 'dark', label: '深色', icon: 'moon' },\n { id: 'system', label: '跟随系统', icon: 'monitor' },\n];\n\n/* ── Like preferences (nickname / tone / other / doNot) ───────────────────── */\nconst draft = ref<LikePreferences>({ ...props.like });\nconst saved = ref(false);\n\nwatch(\n () => props.like,\n (v) => {\n draft.value = { ...v };\n },\n);\n\nconst FIELDS: { key: keyof LikePreferences; label: string; hint: string }[] = [\n { key: 'nickname', label: '称呼', hint: 'AI 如何称呼你' },\n { key: 'tone', label: '语气', hint: '回复的语气风格' },\n { key: 'other', label: '偏好', hint: '其他偏好说明' },\n { key: 'doNot', label: '禁止事项', hint: '明确禁止的行为' },\n];\n\nfunction save() {\n emit('update-like', cleanup());\n saved.value = true;\n setTimeout(() => (saved.value = false), 1500);\n}\n\nfunction cleanup(): LikePreferences {\n const out: LikePreferences = {};\n for (const f of FIELDS) {\n const v = draft.value[f.key];\n if (typeof v === 'string' && v.trim()) out[f.key] = v.trim();\n }\n return out;\n}\n</script>\n\n<template>\n <div class=\"settings\">\n <div class=\"settings-inner\">\n <h1 class=\"settings-title\">设置</h1>\n\n <section class=\"settings-section\">\n <h2 class=\"section-title\">外观</h2>\n <div class=\"theme-grid\" role=\"radiogroup\" aria-label=\"主题\">\n <button\n v-for=\"opt in THEME_OPTIONS\"\n :key=\"opt.id\"\n role=\"radio\"\n :aria-checked=\"theme === opt.id\"\n :class=\"['theme-option', { active: theme === opt.id }]\"\n @click=\"setTheme(opt.id)\"\n >\n <SvgIcon :name=\"opt.icon\" :size=\"20\" />\n <span>{{ opt.label }}</span>\n </button>\n </div>\n </section>\n\n <section class=\"settings-section\">\n <h2 class=\"section-title\">偏好设置</h2>\n <div class=\"like-fields\">\n <label v-for=\"f in FIELDS\" :key=\"f.key\" class=\"like-field\">\n <span class=\"like-label\">{{ f.label }}</span>\n <input\n v-model=\"draft[f.key]\"\n class=\"like-input\"\n :placeholder=\"f.hint\"\n :aria-label=\"f.label\"\n />\n </label>\n <div class=\"like-actions\">\n <Button variant=\"primary\" @click=\"save\">保存偏好</Button>\n <span v-if=\"saved\" class=\"saved-hint\">已保存</span>\n </div>\n </div>\n </section>\n </div>\n </div>\n</template>\n\n<style scoped>\n.settings {\n position: relative;\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--space-6) var(--space-8);\n background: transparent;\n}\n.settings-inner {\n max-width: var(--content-max);\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: var(--space-6);\n}\n.settings-title {\n font-size: var(--font-size-2xl);\n font-weight: 700;\n color: var(--color-text);\n}\n.settings-section {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n.section-title {\n font-size: var(--font-size-base);\n font-weight: 600;\n color: var(--color-text-muted);\n}\n.theme-grid {\n display: flex;\n gap: var(--space-2);\n flex-wrap: wrap;\n}\n.theme-option {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-height: 40px;\n padding: 0 var(--space-4);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n cursor: pointer;\n transition:\n border-color var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.theme-option:hover {\n color: var(--color-text);\n border-color: var(--color-line-strong);\n}\n.theme-option.active {\n background: var(--color-accent);\n border-color: var(--color-accent);\n color: var(--color-on-accent);\n font-weight: 600;\n}\n.like-fields {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n max-width: 480px;\n}\n.like-field {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n}\n.like-label {\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text);\n}\n.like-input {\n height: 40px;\n padding: 0 var(--space-3);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-sm);\n font-family: inherit;\n transition:\n border-color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out);\n}\n.like-input:focus {\n outline: none;\n border-color: var(--color-accent-bd);\n box-shadow: var(--glow-focus);\n}\n.like-actions {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n margin-top: var(--space-1);\n}\n.saved-hint {\n font-size: var(--font-size-sm);\n color: var(--color-success);\n}\n@media (max-width: 640px) {\n .settings {\n padding: var(--space-4) var(--space-3);\n }\n .theme-option {\n min-height: 44px;\n }\n}\n</style>\n","export default \"__VITE_ASSET__C3_acVn1__\"","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { SessionListItem } from '../types';\nimport SvgIcon from './ui/SvgIcon.vue';\nimport logoUrl from '../assets/logo-v2.svg';\n\nexport type ShellView = 'home' | 'chat' | 'skills' | 'settings';\n\nconst props = withDefaults(\n defineProps<{\n view: ShellView;\n sessions: SessionListItem[];\n currentSessionId?: string | null;\n /** Desktop rail mode: 288px full sidebar collapses to a 64px icon strip. */\n collapsed?: boolean;\n /** The mobile overlay is already a drawer; its toggle would only flip a\n desktop-only grid track, so the button is hidden there. */\n showCollapseToggle?: boolean;\n }>(),\n { currentSessionId: null, collapsed: false, showCollapseToggle: true },\n);\n\nconst emit = defineEmits<{\n (e: 'navigate', id: ShellView): void;\n (e: 'switch-session', id: string): void;\n (e: 'delete-session', id: string): void;\n (e: 'create-session'): void;\n (e: 'toggle-collapse'): void;\n}>();\n\n/* ── Search filter (⌘K focuses this box) ─────────────────────────────────── */\nconst searchRef = ref<HTMLInputElement | null>(null);\nconst query = ref('');\n\nfunction focusSearch(): void {\n searchRef.value?.focus();\n searchRef.value?.select();\n}\n\ndefineExpose({ focusSearch });\n\nconst filteredSessions = computed(() => {\n const q = query.value.trim().toLowerCase();\n if (!q) return props.sessions;\n return props.sessions.filter((s) => sessionTitle(s).toLowerCase().includes(q) || s.workDir.toLowerCase().includes(q));\n});\n\n/* ── Spaces: sessions grouped by workDir, collapsible ────────────────────── */\ninterface SpaceGroup {\n name: string;\n workDir: string;\n items: SessionListItem[];\n}\n\nconst spaces = computed<SpaceGroup[]>(() => {\n const groups = new Map<string, SpaceGroup>();\n for (const s of filteredSessions.value) {\n const dir = s.workDir || '默认空间';\n const parts = dir.split(/[\\\\/]/).filter(Boolean);\n const name = parts.length > 0 ? parts[parts.length - 1]! : dir;\n const g = groups.get(name);\n if (g) g.items.push(s);\n else groups.set(name, { name, workDir: dir, items: [s] });\n }\n // Current session's space first, then by recency.\n const currentDir = props.sessions.find((s) => s.sessionId === props.currentSessionId)?.workDir;\n return [...groups.values()].sort((a, b) => {\n if (a.workDir === currentDir) return -1;\n if (b.workDir === currentDir) return 1;\n return (b.items[0]?.createdAt ?? 0) - (a.items[0]?.createdAt ?? 0);\n });\n});\n\n/** Collapsed space names (all expanded by default). */\nconst collapsedSpaces = ref<Set<string>>(new Set());\n\nfunction toggleSpace(name: string): void {\n const next = new Set(collapsedSpaces.value);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n collapsedSpaces.value = next;\n}\n\nfunction onSessionClick(id: string): void {\n emit('switch-session', id);\n}\n\nfunction confirmDelete(id: string, title: string): void {\n if (window.confirm(`删除会话「${title}」?此操作不可恢复。`)) {\n emit('delete-session', id);\n }\n}\n\nfunction relativeTime(ts: number): string {\n if (!ts) return '';\n const diff = Date.now() - ts;\n if (diff < 60_000) return '刚刚';\n if (diff < 3_600_000) return `${Math.floor(diff / 60_000)} 分钟前`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)} 小时前`;\n const d = new Date(ts);\n return `${d.getMonth() + 1}/${d.getDate()}`;\n}\n\nfunction sessionTitle(s: SessionListItem): string {\n const t = (s.title || '').trim();\n if (t && t !== '新会话' && t !== 'New Session') return t;\n return '未命名会话';\n}\n</script>\n\n<template>\n <aside :class=\"['sidebar', { 'is-collapsed': collapsed }]\">\n <div class=\"sidebar-head\">\n <button class=\"sidebar-brand\" title=\"回到新对话\" @click=\"emit('navigate', 'home')\">\n <img class=\"brand-logo\" :src=\"logoUrl\" alt=\"scream\" />\n </button>\n <button\n v-if=\"showCollapseToggle\"\n class=\"collapse-btn\"\n :class=\"{ rotated: collapsed }\"\n :title=\"collapsed ? '展开侧栏' : '折叠侧栏'\"\n :aria-label=\"collapsed ? '展开侧栏' : '折叠侧栏'\"\n :aria-expanded=\"!collapsed\"\n @click=\"emit('toggle-collapse')\"\n >\n <SvgIcon name=\"panel-left\" :size=\"15\" />\n </button>\n </div>\n\n <button class=\"new-chat-btn\" :title=\"collapsed ? '新建对话' : undefined\" @click=\"emit('create-session')\">\n <SvgIcon name=\"plus\" :size=\"16\" />\n <span v-if=\"!collapsed\">新建对话</span>\n </button>\n\n <label v-if=\"!collapsed\" class=\"side-search\">\n <SvgIcon name=\"search\" :size=\"15\" />\n <input\n ref=\"searchRef\"\n v-model=\"query\"\n type=\"text\"\n placeholder=\"搜索会话… (⌘K)\"\n aria-label=\"搜索会话\"\n spellcheck=\"false\"\n />\n </label>\n\n <div class=\"spaces\">\n <div v-for=\"group in spaces\" :key=\"group.name\" class=\"space-group\">\n <!-- Rail mode: one letter per space; clicking expands the rail and the\n sessions under that space appear again. -->\n <button\n v-if=\"collapsed\"\n class=\"space-dot\"\n :class=\"{ active: group.items.some((s) => s.sessionId === currentSessionId) }\"\n :title=\"group.name\"\n @click=\"emit('toggle-collapse')\"\n >\n {{ group.name.slice(0, 1).toUpperCase() }}\n </button>\n <template v-else>\n <button class=\"space-head\" :title=\"group.workDir\" @click=\"toggleSpace(group.name)\">\n <SvgIcon :name=\"collapsedSpaces.has(group.name) ? 'chevron-right' : 'chevron-down'\" :size=\"14\" />\n <span class=\"space-name\">{{ group.name }}</span>\n <span class=\"space-count\">{{ group.items.length }}</span>\n </button>\n <div v-if=\"!collapsedSpaces.has(group.name)\" class=\"space-sessions\">\n <button\n v-for=\"s in group.items\"\n :key=\"s.sessionId\"\n class=\"session-item\"\n :class=\"{ active: s.sessionId === currentSessionId }\"\n :title=\"sessionTitle(s)\"\n @click=\"onSessionClick(s.sessionId)\"\n >\n <span v-if=\"s.active\" class=\"session-run\" aria-hidden=\"true\" />\n <span class=\"session-text\">\n <span class=\"session-title\">{{ sessionTitle(s) }}</span>\n <span class=\"session-meta\">\n <span>{{ relativeTime(s.createdAt) }}</span>\n <span class=\"meta-sep\" aria-hidden=\"true\">·</span>\n <span>{{ s.messageCount }} 条</span>\n </span>\n </span>\n <span\n class=\"session-delete\"\n role=\"button\"\n tabindex=\"0\"\n :title=\"`删除会话 ${sessionTitle(s)}`\"\n aria-label=\"删除会话\"\n @click.stop=\"confirmDelete(s.sessionId, sessionTitle(s))\"\n @keydown.enter.stop.prevent=\"confirmDelete(s.sessionId, sessionTitle(s))\"\n >\n <SvgIcon name=\"trash\" :size=\"14\" />\n </span>\n </button>\n </div>\n </template>\n </div>\n <p v-if=\"!collapsed && spaces.length === 0\" class=\"spaces-empty\">\n {{ query ? '没有匹配的会话' : '还没有会话,点击上方「新建对话」开始' }}\n </p>\n </div>\n\n <nav class=\"sidebar-foot\" aria-label=\"功能区\">\n <button\n class=\"foot-item\"\n :class=\"{ active: view === 'skills' }\"\n :title=\"collapsed ? '技能中心' : undefined\"\n @click=\"emit('navigate', 'skills')\"\n >\n <SvgIcon name=\"sparkles\" :size=\"17\" />\n <span v-if=\"!collapsed\">技能中心</span>\n </button>\n <button\n class=\"foot-item\"\n :class=\"{ active: view === 'settings' }\"\n :title=\"collapsed ? '设置' : undefined\"\n @click=\"emit('navigate', 'settings')\"\n >\n <SvgIcon name=\"settings\" :size=\"17\" />\n <span v-if=\"!collapsed\">设置</span>\n </button>\n <div class=\"sidebar-identity\">\n <span class=\"identity-dot\" aria-hidden=\"true\" />\n <span v-if=\"!collapsed\" class=\"identity-text\">scream web</span>\n </div>\n </nav>\n </aside>\n</template>\n\n<style scoped>\n.sidebar {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n width: var(--sidebar-width);\n height: 100%;\n padding: var(--space-4) var(--space-3) var(--space-3);\n background: var(--color-surface-sunken);\n border-right: 1px solid var(--color-line);\n overflow: hidden;\n transition: width var(--dur-slower) var(--ease-out);\n}\n\n/* ── Collapsed rail (64px): icons only, tooltips carry the meaning ───────── */\n.sidebar.is-collapsed {\n width: var(--sidebar-width-collapsed);\n gap: var(--space-2);\n padding: var(--space-3) var(--space-2);\n align-items: center;\n}\n.sidebar-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-1);\n width: 100%;\n}\n.sidebar-head .sidebar-brand { flex: 1; min-width: 0; }\n.collapse-btn {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n flex-shrink: 0;\n border: 0;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--color-text-faint);\n cursor: pointer;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out),\n transform var(--dur-base) var(--ease-out);\n}\n.collapse-btn:hover { color: var(--color-accent); background: var(--color-hover); }\n.collapse-btn.rotated { transform: rotate(180deg); }\n/* Rail mode: the wordmark IS the brand, so it stays — stacked above the\n collapse button instead of replacing it. */\n.is-collapsed .sidebar-head {\n flex-direction: column;\n justify-content: flex-start;\n gap: var(--space-1);\n}\n.is-collapsed .sidebar-brand { padding: 0; justify-content: center; width: 100%; }\n.is-collapsed .new-chat-btn {\n width: 40px;\n padding: 0;\n border-radius: var(--radius-md);\n}\n.is-collapsed .spaces { align-items: center; }\n.space-dot {\n width: 36px;\n height: 36px;\n display: grid;\n place-items: center;\n flex-shrink: 0;\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n font-weight: 700;\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n border-color var(--dur-fast) var(--ease-out);\n}\n.space-dot:hover { border-color: var(--color-line-strong); color: var(--color-text); }\n.space-dot.active {\n background: var(--color-accent);\n border-color: var(--color-accent);\n color: var(--color-on-accent);\n}\n.is-collapsed .sidebar-foot { align-items: center; }\n.is-collapsed .foot-item { width: 36px; justify-content: center; padding: 0; }\n.is-collapsed .sidebar-identity { justify-content: center; }\n@media (prefers-reduced-motion: reduce) {\n .sidebar { transition: none; }\n .collapse-btn { transition: none; }\n}\n\n/* ── Brand (click = new chat home) ───────────────────────────────────────── */\n.sidebar-brand {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-1) var(--space-2);\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: var(--radius-md);\n transition: background var(--dur-fast) var(--ease-out);\n}\n.sidebar-brand:hover {\n background: var(--color-hover);\n}\n/* Wordmark asset (1920×428, pure black fills). It carries its own lettering, so\n the old mark + text pair is gone. The artwork is single-colour, so the dark\n theme inverts it instead of shipping a second file. */\n.brand-logo {\n display: block;\n height: 22px;\n width: auto;\n flex: 0 0 auto;\n}\n:root[data-theme='dark'] .brand-logo {\n filter: invert(1) grayscale(1);\n}\n.is-collapsed .brand-logo {\n height: auto;\n width: 42px;\n}\n\n/* ── New chat primary button ─────────────────────────────────────────────── */\n.new-chat-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n min-height: 40px;\n padding: 0 var(--space-4);\n border: none;\n border-radius: var(--radius-lg);\n background: var(--color-accent);\n color: var(--color-on-accent);\n font-size: var(--font-size-base);\n font-weight: 600;\n cursor: pointer;\n box-shadow: var(--shadow-xs);\n transition:\n filter var(--dur-fast) var(--ease-out),\n transform var(--dur-fast) var(--ease-out);\n}\n.new-chat-btn:hover {\n filter: brightness(1.12);\n}\n.new-chat-btn:active {\n transform: translateY(1px);\n}\n\n/* ── Search ──────────────────────────────────────────────────────────────── */\n.side-search {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n height: 34px;\n padding: 0 var(--space-3);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text-faint);\n transition:\n border-color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out);\n}\n.side-search:focus-within {\n border-color: var(--color-accent-bd);\n box-shadow: var(--glow-focus);\n}\n.side-search input {\n flex: 1;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--color-text);\n font-size: var(--font-size-sm);\n font-family: inherit;\n outline: none;\n}\n.side-search input::placeholder {\n color: var(--color-text-faint);\n}\n\n/* ── Spaces (collapsible groups owning their sessions) ───────────────────── */\n.spaces {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n padding-right: 2px;\n}\n.space-group {\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n.space-head {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-height: 32px;\n padding: 0 var(--space-2);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out);\n}\n.space-head:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.space-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.space-count {\n font-size: 11px;\n font-weight: 500;\n color: var(--color-text-faint);\n padding: 1px var(--space-2);\n border-radius: var(--radius-full);\n background: var(--color-selected);\n}\n.space-sessions {\n display: flex;\n flex-direction: column;\n gap: 1px;\n padding-left: var(--space-3);\n}\n.session-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-height: 54px;\n padding: var(--space-2) var(--space-3);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text);\n cursor: pointer;\n text-align: left;\n transition: background var(--dur-fast) var(--ease-out);\n}\n.session-item:hover {\n background: var(--color-hover);\n}\n.session-item.active {\n background: var(--color-selected);\n}\n/* Running indicator: the session's agent is mid-turn. */\n.session-run {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--color-accent);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n flex-shrink: 0;\n}\n@media (prefers-reduced-motion: reduce) {\n .session-run { animation: none; }\n}\n.session-text {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.session-title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--font-size-sm);\n line-height: 1.35;\n}\n.session-meta {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n line-height: 1.2;\n color: var(--color-text-faint);\n flex-shrink: 0;\n}\n.meta-sep {\n opacity: 0.6;\n}\n.session-delete {\n position: absolute;\n right: var(--space-2);\n top: 50%;\n transform: translateY(-50%);\n width: 30px;\n height: 30px;\n display: none;\n place-items: center;\n border-radius: var(--radius-md);\n background: var(--color-surface-raised);\n border: 1px solid var(--color-line);\n color: var(--color-text-muted);\n cursor: pointer;\n}\n.session-item:hover .session-delete,\n.session-delete:focus-visible {\n display: grid;\n}\n.session-delete:hover {\n color: var(--color-danger);\n border-color: var(--color-danger);\n}\n.spaces-empty {\n padding: var(--space-3) var(--space-2);\n font-size: var(--font-size-sm);\n color: var(--color-text-faint);\n line-height: 1.5;\n}\n\n/* ── Footer nav ──────────────────────────────────────────────────────────── */\n.sidebar-foot {\n display: flex;\n flex-direction: column;\n gap: 2px;\n border-top: 1px solid var(--color-line);\n padding-top: var(--space-2);\n}\n.foot-item {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n min-height: 38px;\n padding: 0 var(--space-3);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n font-weight: 500;\n cursor: pointer;\n text-align: left;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out);\n}\n.foot-item:hover {\n background: var(--color-hover);\n color: var(--color-text);\n}\n.foot-item.active {\n background: var(--color-selected);\n color: var(--color-text);\n font-weight: 600;\n}\n.sidebar-identity {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n}\n.identity-dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--color-success);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n}\n.identity-text {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n@media (max-width: 640px) {\n .sidebar {\n display: none;\n }\n .new-chat-btn {\n min-height: 44px;\n }\n .space-head {\n min-height: 40px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { SLASH_COMMANDS } from '../commands';\nimport SvgIcon from './ui/SvgIcon.vue';\nimport Button from './ui/Button.vue';\n\nconst emit = defineEmits<{ (e: 'create'): void }>();\n\nconst TARGET_LABEL: Record<string, string> = {\n backend: '服务端',\n local: '本地',\n};\n</script>\n\n<template>\n <div class=\"skills\">\n <div class=\"skills-head\">\n <div>\n <h1 class=\"skills-title\">技能中心</h1>\n <p class=\"skills-sub\">在输入框中输入 <code>/</code> 即可触发以下命令</p>\n </div>\n <Button variant=\"primary\" @click=\"emit('create')\">\n <SvgIcon name=\"plus\" :size=\"16\" />\n 新建会话\n </Button>\n </div>\n\n <div class=\"skills-grid\">\n <article v-for=\"cmd in SLASH_COMMANDS\" :key=\"cmd.name\" class=\"skill-card\">\n <div class=\"skill-card-head\">\n <span class=\"skill-cmd\">/{{ cmd.name }}</span>\n <span class=\"skill-target\" :class=\"`target-${cmd.target}`\">{{ TARGET_LABEL[cmd.target] }}</span>\n </div>\n <p class=\"skill-desc\">{{ cmd.description }}</p>\n <p v-if=\"cmd.aliases?.length\" class=\"skill-aliases\">\n 别名:{{ cmd.aliases.map((a) => `/${a}`).join(' ') }}\n </p>\n </article>\n </div>\n </div>\n</template>\n\n<style scoped>\n.skills {\n position: relative;\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--space-6) var(--space-8);\n background: transparent;\n}\n.skills-head {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-4);\n max-width: var(--content-max);\n margin: 0 auto var(--space-6);\n flex-wrap: wrap;\n}\n.skills-title {\n font-size: var(--font-size-2xl);\n font-weight: 700;\n color: var(--color-text);\n}\n.skills-sub {\n margin-top: var(--space-1);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n.skills-sub code {\n padding: 1px var(--space-1);\n border-radius: var(--radius-xs);\n background: var(--color-surface-sunken);\n border: 1px solid var(--color-line);\n font-family: var(--font-mono);\n font-size: 12px;\n}\n.skills-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: var(--space-3);\n max-width: var(--content-max);\n margin: 0 auto;\n}\n.skill-card {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--space-4);\n border: 1px solid var(--color-line);\n border-radius: var(--radius-lg);\n background: var(--color-surface);\n transition:\n border-color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out),\n transform var(--dur-fast) var(--ease-out);\n}\n.skill-card:hover {\n border-color: var(--color-line-strong);\n box-shadow: var(--shadow-sm);\n transform: translateY(-1px);\n}\n.skill-card-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n}\n.skill-cmd {\n font-family: var(--font-mono);\n font-size: var(--font-size-base);\n font-weight: 600;\n color: var(--color-text);\n}\n.skill-target {\n font-size: 10px;\n padding: 2px var(--space-2);\n border-radius: var(--radius-full);\n border: 1px solid var(--color-line);\n color: var(--color-text-muted);\n background: var(--color-surface-sunken);\n flex-shrink: 0;\n}\n.skill-target.target-backend {\n color: var(--color-info);\n border-color: var(--color-info);\n background: var(--color-info-soft);\n}\n.skill-desc {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n line-height: 1.5;\n}\n.skill-aliases {\n font-size: 11px;\n color: var(--color-text-faint);\n font-family: var(--font-mono);\n}\n@media (max-width: 640px) {\n .skills {\n padding: var(--space-4) var(--space-3);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nexport type WorkspaceMode = 'chat' | 'goal';\n\nwithDefaults(defineProps<{ modelValue: WorkspaceMode }>(), { modelValue: 'chat' });\n\nconst emit = defineEmits<{ (e: 'update:modelValue', mode: WorkspaceMode): void }>();\n\nconst MODES: { id: WorkspaceMode; label: string }[] = [\n { id: 'chat', label: '智能工作' },\n { id: 'goal', label: '任务模式' },\n];\n</script>\n\n<template>\n <div class=\"mode-switch\" role=\"group\" aria-label=\"工作模式\">\n <button\n v-for=\"m in MODES\"\n :key=\"m.id\"\n :class=\"['mode-pill', `is-${m.id}`, { active: modelValue === m.id }]\"\n :aria-pressed=\"modelValue === m.id\"\n @click=\"emit('update:modelValue', m.id)\"\n >\n {{ m.label }}\n </button>\n </div>\n</template>\n\n<style scoped>\n/* No outer box: a segmented control inside another bordered pill is the\n \"框中框\" pattern. The group is transparent; only the selected tab has a fill. */\n.mode-switch {\n display: inline-flex;\n gap: var(--space-1);\n padding: 0;\n border-radius: 0;\n background: transparent;\n border: 0;\n}\n.mode-pill {\n position: relative;\n min-height: 32px;\n padding: 0 var(--space-4);\n border: none;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n font-weight: 500;\n cursor: pointer;\n transition:\n background var(--dur-fast) var(--ease-out),\n color var(--dur-fast) var(--ease-out),\n box-shadow var(--dur-fast) var(--ease-out);\n}\n/* Activation flash: the ring pops outward once, then settles onto the fill.\n The two modes are deliberately distinguishable — the goal pill carries a\n wider halo with a gradient wash, the chat pill a thin bright rim. */\n.mode-pill::before {\n content: '';\n position: absolute;\n inset: -2px;\n border-radius: inherit;\n pointer-events: none;\n opacity: 0;\n}\n.mode-pill.is-chat.active::before {\n box-shadow: 0 0 0 1px var(--color-accent-bd), 0 0 10px 1px var(--color-accent-glow);\n animation: mode-pop 0.35s var(--ease-out) both;\n}\n.mode-pill.is-goal.active::before {\n box-shadow:\n 0 0 0 1px color-mix(in srgb, var(--color-accent) 55%, transparent),\n 0 0 18px 4px var(--color-accent-glow),\n inset 0 0 12px color-mix(in srgb, var(--color-accent) 18%, transparent);\n animation: mode-pop 0.45s var(--ease-out) both;\n}\n@keyframes mode-pop {\n 0% { opacity: 0; transform: scale(0.9); }\n 55% { opacity: 0.9; transform: scale(1.04); }\n 100% { opacity: 1; transform: scale(1); }\n}\n.mode-pill:hover:not(.active) {\n color: var(--color-text);\n background: var(--color-hover);\n}\n.mode-pill.active {\n background: var(--color-accent);\n color: var(--color-on-accent);\n font-weight: 600;\n box-shadow: var(--shadow-xs);\n}\n@media (max-width: 640px) {\n .mode-pill {\n min-height: 40px;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .mode-pill::before {\n animation: none;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { ModelInfo, SessionStatus } from '../types';\nimport Composer from './Composer.vue';\nimport ModeSwitch, { type WorkspaceMode } from './ModeSwitch.vue';\nimport logoUrl from '../assets/logo-v2.svg';\n\nconst props = withDefaults(\n defineProps<{\n models: ModelInfo[];\n status?: SessionStatus;\n busy: boolean;\n /** Owned by the shell so the choice survives the home view being unmounted. */\n mode?: WorkspaceMode;\n }>(),\n { status: undefined, mode: 'chat' },\n);\n\nconst emit = defineEmits<{\n (e: 'send', text: string, mode: WorkspaceMode): void;\n (e: 'command', name: string, args?: string): void;\n (e: 'switch-model', alias: string): void;\n (e: 'switch-thinking', level: string): void;\n (e: 'update:mode', mode: WorkspaceMode): void;\n}>();\n\nconst isGoalMode = computed(() => props.mode === 'goal');\nconst modeHint = computed(() =>\n isGoalMode.value\n ? '任务模式:提交后将创建执行目标(Goal),Agent 持续执行到完成或预算耗尽;抽屉「Goal 管理」可查看与暂停。'\n : '直接对话:提问后 Agent 按需调用工具完成你的请求。',\n);\n</script>\n\n<template>\n <div class=\"workspace\">\n <section class=\"workspace-hero\">\n <h1 class=\"workspace-brand\">\n <img class=\"brand-logo\" :src=\"logoUrl\" alt=\"scream\" />\n </h1>\n <p class=\"workspace-tagline\">你的智能协作伙伴</p>\n <ModeSwitch\n class=\"workspace-mode\"\n :model-value=\"props.mode\"\n @update:model-value=\"(v) => emit('update:mode', v)\"\n />\n <p class=\"mode-hint\"><span :key=\"String(isGoalMode)\" class=\"hint-fade\">{{ modeHint }}</span></p>\n </section>\n <section class=\"workspace-composer\">\n <Composer\n :busy=\"busy\"\n :status=\"status\"\n :models=\"models\"\n variant=\"home\"\n :placeholder=\"isGoalMode ? '描述你要完成的目标,Enter 创建并开始执行…' : '输入 @ 引用知识库 / 使用技能 / 或者直接提问...'\"\n @send=\"(t: string) => emit('send', t, props.mode)\"\n @command=\"(n, a) => emit('command', n, a)\"\n @switch-model=\"(a) => emit('switch-model', a)\"\n @switch-thinking=\"(l) => emit('switch-thinking', l)\"\n />\n </section>\n </div>\n</template>\n\n<style scoped>\n.workspace {\n position: relative;\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-8);\n padding: var(--space-6) var(--space-5);\n overflow-y: auto;\n background: transparent;\n}\n\n.workspace-hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-3);\n text-align: center;\n}\n.workspace-brand {\n display: flex;\n justify-content: center;\n line-height: 1;\n color: var(--color-text);\n}\n/* The wordmark's letter band is ~59% of its canvas height, so the image needs\n to run taller than the 56px text it replaces to hold the same visual weight. */\n.brand-logo {\n display: block;\n height: 60px;\n width: auto;\n}\n:root[data-theme='dark'] .brand-logo {\n filter: invert(1) grayscale(1);\n}\n.workspace-tagline {\n font-size: var(--font-size-lg);\n color: var(--color-text-muted);\n}\n.workspace-mode {\n margin-top: var(--space-2);\n}\n.mode-hint {\n margin-top: var(--space-2);\n max-width: 560px;\n color: var(--color-text-faint);\n font-size: var(--font-size-xs);\n line-height: 1.5;\n text-align: center;\n}\n/* The hint text swaps when the mode flips; re-keyed span fades it in. */\n.hint-fade {\n animation: hint-in 0.3s var(--ease-out) both;\n}\n@keyframes hint-in {\n from { opacity: 0; transform: translateY(2px); }\n to { opacity: 1; transform: none; }\n}\n@media (prefers-reduced-motion: reduce) {\n .hint-fade {\n animation: none;\n }\n}\n\n.workspace-composer {\n width: min(var(--content-max), 100%);\n animation: rise-in var(--dur-slower) var(--ease-out);\n}\n\n@media (max-width: 640px) {\n .workspace {\n justify-content: flex-start;\n padding-top: 12vh;\n gap: var(--space-6);\n }\n .workspace-brand .brand-logo {\n height: 42px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport { useScreamWebClient } from '../composables/useScreamWebClient';\nimport { slashHelpText } from '../commands';\nimport type { WorkspaceMode } from './ModeSwitch.vue';\nimport type { ShellView } from './Sidebar.vue';\nimport ConversationView from './ConversationView.vue';\nimport SettingsView from './SettingsView.vue';\nimport Sidebar from './Sidebar.vue';\nimport SkillsView from './SkillsView.vue';\nimport SvgIcon from './ui/SvgIcon.vue';\nimport WorkspaceHome from './WorkspaceHome.vue';\n\nconst client = useScreamWebClient();\nconst {\n connectionStatus,\n status,\n isBusy,\n sessions,\n currentSessionId,\n models,\n like,\n sendPrompt,\n sendCommand,\n appendSystemMessage,\n createSession,\n switchSession,\n deleteSession,\n switchModel,\n switchThinking,\n fetchLike,\n fetchGitStatus,\n abort,\n} = client;\n\nconst view = ref<ShellView>('home');\nconst mobileSidebarOpen = ref(false);\nconst sidebarRef = ref<InstanceType<typeof Sidebar> | null>(null);\n\n/**\n * WS `connected` is reached asynchronously after createSession →\n * switchSession → connect(); sending before that drops the prompt.\n */\nfunction waitForConnected(timeoutMs = 8000): Promise<boolean> {\n if (connectionStatus.value === 'connected') return Promise.resolve(true);\n return new Promise((resolve) => {\n const started = Date.now();\n const timer = window.setInterval(() => {\n if (connectionStatus.value === 'connected') {\n window.clearInterval(timer);\n resolve(true);\n } else if (Date.now() - started > timeoutMs) {\n window.clearInterval(timer);\n resolve(false);\n }\n }, 80);\n });\n}\n\nfunction onNavigate(id: ShellView) {\n if (id === 'chat') {\n if (currentSessionId.value) {\n view.value = 'chat';\n } else {\n void onCreateSession();\n }\n } else {\n view.value = id;\n }\n mobileSidebarOpen.value = false;\n}\n\nfunction onCreateSession() {\n mobileSidebarOpen.value = false;\n view.value = 'chat';\n void createSession();\n}\n\nasync function onWorkspaceSend(text: string, mode: WorkspaceMode) {\n mobileSidebarOpen.value = false;\n if (!currentSessionId.value) await createSession();\n const ready = await waitForConnected();\n // Only switch away from the home view once the transport is confirmed, so an\n // offline click keeps the input and the selected mode instead of dropping both.\n if (!ready) return;\n view.value = 'chat';\n if (mode === 'goal') {\n try {\n await client.createGoal({ objective: text, budgets: [] });\n } catch (error) {\n appendSystemMessage(`Goal 创建失败:${errorMessageOf(error)}。已保留对话模式,可重新发送。`);\n sendPrompt(text);\n return;\n }\n } else {\n sendPrompt(text);\n }\n}\nfunction errorMessageOf(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction onSwitchSession(id: string) {\n mobileSidebarOpen.value = false;\n view.value = 'chat';\n switchSession(id);\n}\n\nfunction onCommand(name: string, args?: string) {\n switch (name) {\n case 'compact':\n case 'auto':\n case 'yes':\n case 'plan':\n case 'fork':\n case 'title':\n case 'btw':\n if (!currentSessionId.value) {\n void createSession().then(() => sendCommand(name, args));\n return;\n }\n sendCommand(name, args);\n break;\n case 'clear':\n client.clearMessages();\n break;\n case 'new':\n onCreateSession();\n break;\n case 'help':\n appendSystemMessage(slashHelpText());\n break;\n case 'model':\n appendSystemMessage(`当前模型:${status.value.model ?? 'unknown'}`);\n break;\n case 'status':\n case 'usage':\n appendSystemMessage('请在对话页查看会话详情');\n break;\n default:\n appendSystemMessage(`未知命令:/${name}`);\n }\n}\n\nconst SIDEBAR_STORAGE_KEY = 'scream-sidebar-collapsed';\nconst sidebarCollapsed = ref(false);\ntry {\n sidebarCollapsed.value = localStorage.getItem(SIDEBAR_STORAGE_KEY) === '1';\n} catch {\n /* ignore */\n}\nfunction toggleSidebarCollapse() {\n sidebarCollapsed.value = !sidebarCollapsed.value;\n try { localStorage.setItem(SIDEBAR_STORAGE_KEY, sidebarCollapsed.value ? '1' : '0'); } catch { /* ignore */ }\n}\n\n/* ── Draggable sidebar width (180–480px, persisted, double-click resets) ─── */\nconst SIDEBAR_WIDTH_KEY = 'scream-sidebar-width';\nconst SIDEBAR_MIN = 180;\nconst SIDEBAR_MAX = 480;\nconst SIDEBAR_DEFAULT = 288;\n\nfunction readStoredSidebarWidth(): number {\n try {\n const raw = Number(localStorage.getItem(SIDEBAR_WIDTH_KEY));\n if (Number.isFinite(raw) && raw >= SIDEBAR_MIN && raw <= SIDEBAR_MAX) return Math.round(raw);\n } catch {\n /* ignore */\n }\n return SIDEBAR_DEFAULT;\n}\n\nconst sidebarWidth = ref(readStoredSidebarWidth());\nconst resizing = ref(false);\nlet resizePointerId: number | null = null;\n\nfunction persistSidebarWidth() {\n try { localStorage.setItem(SIDEBAR_WIDTH_KEY, String(sidebarWidth.value)); } catch { /* ignore */ }\n}\n\nfunction onResizePointerDown(e: PointerEvent) {\n if (sidebarCollapsed.value) return;\n e.preventDefault();\n resizing.value = true;\n resizePointerId = e.pointerId;\n // Capture keeps the drag alive when the pointer leaves the 12px strip.\n // Synthetic events (tests/automation) carry an inactive pointerId — the\n // move/up handlers still work, so a failed capture must not abort the drag.\n try {\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n}\n\nfunction onResizePointerMove(e: PointerEvent) {\n if (!resizing.value || e.pointerId !== resizePointerId) return;\n sidebarWidth.value = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, Math.round(e.clientX)));\n}\n\nfunction onResizePointerUp(e: PointerEvent) {\n if (!resizing.value || e.pointerId !== resizePointerId) return;\n resizing.value = false;\n resizePointerId = null;\n persistSidebarWidth();\n}\n\nfunction resetSidebarWidth() {\n sidebarWidth.value = SIDEBAR_DEFAULT;\n persistSidebarWidth();\n}\n\nfunction onResizeKeydown(e: KeyboardEvent) {\n const step = e.shiftKey ? 32 : 12;\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n sidebarWidth.value = Math.max(SIDEBAR_MIN, sidebarWidth.value - step);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n sidebarWidth.value = Math.min(SIDEBAR_MAX, sidebarWidth.value + step);\n } else if (e.key === 'Home') {\n e.preventDefault();\n sidebarWidth.value = SIDEBAR_MIN;\n } else if (e.key === 'End') {\n e.preventDefault();\n sidebarWidth.value = SIDEBAR_MAX;\n } else if (e.key === 'Enter') {\n e.preventDefault();\n resetSidebarWidth();\n } else {\n return;\n }\n persistSidebarWidth();\n}\n\n/** Workspace mode lives in the shell (and localStorage) rather than inside the\n * home view, which unmounts when a conversation opens. */\nconst MODE_STORAGE_KEY = 'scream-workspace-mode';\nfunction readStoredWorkspaceMode(): WorkspaceMode {\n try {\n return localStorage.getItem(MODE_STORAGE_KEY) === 'goal' ? 'goal' : 'chat';\n } catch {\n return 'chat';\n }\n}\nconst workspaceMode = ref<WorkspaceMode>(readStoredWorkspaceMode());\nfunction setWorkspaceMode(next: WorkspaceMode) {\n workspaceMode.value = next;\n try { localStorage.setItem(MODE_STORAGE_KEY, next); } catch { /* ignore */ }\n}\n\nfunction onGlobalKeydown(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n // ⌘K from the collapsed rail must first widen the sidebar, then focus.\n if (sidebarCollapsed.value) toggleSidebarCollapse();\n void nextTick(() => sidebarRef.value?.focusSearch());\n } else if ((e.metaKey || e.ctrlKey) && e.key === 'n') {\n e.preventDefault();\n onCreateSession();\n } else if (e.key === 'Escape' && isBusy.value) {\n // Global Esc stops the running turn — unless the user is typing in a\n // field (composer / dialogs handle their own Escape semantics).\n const target = e.target as HTMLElement | null;\n const inField = target && (target.tagName === 'TEXTAREA' || target.tagName === 'INPUT');\n if (!inField) {\n e.preventDefault();\n abort();\n }\n }\n}\n\nonMounted(() => {\n window.addEventListener('keydown', onGlobalKeydown);\n void fetchLike();\n void fetchGitStatus();\n});\nonBeforeUnmount(() => window.removeEventListener('keydown', onGlobalKeydown));\n</script>\n\n<template>\n <div\n class=\"shell\"\n :class=\"{ 'sidebar-collapsed': sidebarCollapsed, resizing }\"\n :style=\"{ '--sidebar-width': sidebarWidth + 'px' }\"\n >\n <Sidebar\n ref=\"sidebarRef\"\n :view=\"view\"\n :sessions=\"sessions\"\n :current-session-id=\"currentSessionId\"\n :collapsed=\"sidebarCollapsed\"\n @navigate=\"onNavigate\"\n @switch-session=\"onSwitchSession\"\n @delete-session=\"deleteSession\"\n @create-session=\"onCreateSession\"\n @toggle-collapse=\"toggleSidebarCollapse\"\n />\n\n <div\n v-if=\"!sidebarCollapsed\"\n class=\"sidebar-resize-handle\"\n :class=\"{ resizing }\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"调整侧栏宽度\"\n :aria-valuenow=\"sidebarWidth\"\n aria-valuemin=\"180\"\n aria-valuemax=\"480\"\n tabindex=\"0\"\n title=\"拖拽调整宽度 · 双击复位\"\n @pointerdown=\"onResizePointerDown\"\n @pointermove=\"onResizePointerMove\"\n @pointerup=\"onResizePointerUp\"\n @pointercancel=\"onResizePointerUp\"\n @dblclick=\"resetSidebarWidth\"\n @keydown=\"onResizeKeydown\"\n />\n\n <div v-if=\"mobileSidebarOpen\" class=\"sidebar-backdrop\" aria-hidden=\"true\" @click=\"mobileSidebarOpen = false\" />\n <div v-if=\"mobileSidebarOpen\" class=\"sidebar-mobile\">\n <Sidebar\n :view=\"view\"\n :sessions=\"sessions\"\n :current-session-id=\"currentSessionId\"\n :show-collapse-toggle=\"false\"\n @navigate=\"onNavigate\"\n @switch-session=\"onSwitchSession\"\n @delete-session=\"deleteSession\"\n @create-session=\"onCreateSession\"\n />\n </div>\n\n <main class=\"canvas\">\n <header class=\"topbar mobile-only\">\n <div class=\"topbar-left\">\n <button\n class=\"topbar-icon mobile-menu\"\n title=\"菜单\"\n aria-label=\"打开菜单\"\n @click=\"mobileSidebarOpen = true\"\n >\n <SvgIcon name=\"menu\" :size=\"20\" />\n </button>\n <span v-if=\"isBusy\" class=\"topbar-running\" title=\"Agent 运行中\">\n <span class=\"running-dot\" aria-hidden=\"true\" />\n <span class=\"running-text\">运行中</span>\n </span>\n </div>\n </header>\n\n <div class=\"canvas-body\">\n <WorkspaceHome\n v-if=\"view === 'home'\"\n :models=\"models\"\n :status=\"status\"\n :busy=\"isBusy\"\n :mode=\"workspaceMode\"\n @update:mode=\"setWorkspaceMode\"\n @send=\"onWorkspaceSend\"\n @command=\"onCommand\"\n @switch-model=\"switchModel\"\n @switch-thinking=\"switchThinking\"\n />\n <ConversationView\n v-else-if=\"view === 'chat'\"\n :client=\"client\"\n @home=\"view = 'home'\"\n />\n <SkillsView v-else-if=\"view === 'skills'\" @create=\"onCreateSession\" />\n <SettingsView v-else-if=\"view === 'settings'\" :like=\"like\" @update-like=\"client.updateLike\" />\n </div>\n </main>\n </div>\n</template>\n\n<style scoped>\n.shell {\n position: relative;\n display: grid;\n grid-template-columns: var(--sidebar-width) minmax(0, 1fr);\n /* Collapsed rail morphs the grid track, not just the sidebar's own width,\n so the canvas breathes in step with the drawer. */\n transition: grid-template-columns var(--dur-slower) var(--ease-out);\n height: 100vh;\n height: 100dvh;\n overflow: hidden;\n background: transparent;\n color: var(--color-text);\n}\n.shell.sidebar-collapsed {\n grid-template-columns: var(--sidebar-width-collapsed) minmax(0, 1fr);\n}\n/* While dragging, freeze every width transition so the handle tracks the\n pointer 1:1 instead of lagging behind it, and stop text selection. */\n.shell.resizing {\n transition: none;\n user-select: none;\n}\n.shell.resizing :deep(.sidebar) {\n transition: none;\n}\n\n/* ── Sidebar resize handle: 12px hit area straddling the grid boundary ───── */\n.sidebar-resize-handle {\n position: absolute;\n top: 0;\n bottom: 0;\n left: calc(var(--sidebar-width) - 6px);\n width: 12px;\n cursor: col-resize;\n touch-action: none;\n z-index: calc(var(--z-dock) + 1);\n}\n.sidebar-resize-handle::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 5px;\n width: 2px;\n border-radius: var(--radius-full);\n background: transparent;\n transition: background var(--dur-fast) var(--ease-out);\n}\n.sidebar-resize-handle:hover::after,\n.sidebar-resize-handle.resizing::after,\n.sidebar-resize-handle:focus-visible::after {\n background: var(--color-accent-bd);\n}\n.sidebar-resize-handle:focus-visible {\n outline: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .shell { transition: none; }\n}\n\n.canvas {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n\n/* ── Top bar: mobile only (desktop chrome lives in the sidebar) ─────────── */\n.topbar {\n display: none;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-2) var(--space-4);\n flex-shrink: 0;\n}\n.topbar-left {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n}\n.topbar-icon {\n width: 38px;\n height: 38px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: var(--radius-full);\n background: transparent;\n color: var(--color-text-muted);\n cursor: pointer;\n transition:\n color var(--dur-fast) var(--ease-out),\n background var(--dur-fast) var(--ease-out);\n}\n.topbar-icon:hover {\n color: var(--color-text);\n background: var(--color-hover);\n}\n.mobile-menu {\n display: grid;\n}\n.topbar-running {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-1) var(--space-3);\n border-radius: var(--radius-full);\n background: var(--color-accent-soft);\n color: var(--color-text-muted);\n font-size: var(--font-size-xs);\n}\n.running-dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--color-accent);\n animation: breathe var(--dur-breathe) ease-in-out infinite;\n flex-shrink: 0;\n}\n@media (prefers-reduced-motion: reduce) {\n .running-dot { animation: none; }\n}\n\n.canvas-body {\n flex: 1;\n min-height: 0;\n display: flex;\n overflow: hidden;\n}\n\n.sidebar-backdrop {\n display: none;\n}\n\n@media (max-width: 640px) {\n .shell {\n grid-template-columns: minmax(0, 1fr);\n }\n .sidebar-resize-handle {\n display: none;\n }\n .topbar {\n display: flex;\n }\n .mobile-menu {\n display: grid;\n }\n .sidebar-backdrop {\n display: block;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.42);\n z-index: calc(var(--z-overlay) - 1);\n animation: backdrop-in var(--dur-slow) var(--ease-out);\n }\n .sidebar-mobile {\n position: fixed;\n inset: 0 auto 0 0;\n z-index: var(--z-overlay);\n }\n .sidebar-mobile :deep(.sidebar) {\n display: flex !important;\n box-shadow: var(--shadow-xl);\n animation: slide-in var(--dur-slower) var(--ease-spring);\n }\n @keyframes backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes slide-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n}\n</style>\n","<!-- Toast notification container. Mounted once in App.vue.\n Replaces transient system messages that were lost in chat flow. -->\n<script setup lang=\"ts\">\nimport { useToast } from '../../composables/useToast';\n\nconst { toasts, removeToast } = useToast();\n\nconst icons: Record<string, string> = {\n info: 'ℹ',\n success: '✓',\n error: '✗',\n warning: '⚠',\n};\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"toast-container\">\n <TransitionGroup name=\"toast\">\n <div\n v-for=\"t in toasts\"\n :key=\"t.id\"\n :class=\"['toast', `toast--${t.type}`]\"\n @click=\"removeToast(t.id)\"\n >\n <span class=\"toast-icon\">{{ icons[t.type] }}</span>\n <span class=\"toast-msg\">{{ t.message }}</span>\n </div>\n </TransitionGroup>\n </div>\n </Teleport>\n</template>\n\n<style scoped>\n.toast-container {\n position: fixed;\n top: var(--space-5);\n right: var(--space-5);\n z-index: var(--z-toast);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n pointer-events: none;\n}\n.toast {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-4);\n border-radius: var(--radius-lg);\n border: 1px solid var(--color-line);\n background: var(--color-surface-raised);\n box-shadow: var(--shadow-xl);\n font-size: var(--font-size-sm);\n color: var(--color-text);\n cursor: pointer;\n pointer-events: auto;\n max-width: min(380px, calc(100vw - 32px));\n animation: rise-in var(--dur-slower) var(--ease-spring);\n}\n.toast-icon {\n flex-shrink: 0;\n font-weight: 700;\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n font-size: 11px;\n}\n.toast--info .toast-icon { background: var(--color-accent-soft); color: var(--color-accent); }\n.toast--success .toast-icon { background: var(--color-success-soft); color: var(--color-success); }\n.toast--error .toast-icon { background: var(--color-danger-soft); color: var(--color-danger); }\n.toast--warning .toast-icon { background: var(--color-warning-soft); color: var(--color-warning); }\n.toast--error { border-color: var(--color-danger); }\n\n/* Transition */\n.toast-enter-active,\n.toast-leave-active {\n transition: opacity var(--dur-slower) var(--ease-spring), transform var(--dur-slower) var(--ease-spring);\n}\n.toast-enter-from { opacity: 0; transform: translateY(6px); }\n.toast-leave-to { opacity: 0; transform: translateY(6px); }\n</style>\n","<script setup lang=\"ts\">\nimport { ref, onBeforeUnmount, onMounted, watch, provide } from 'vue';\nimport WebShell from './components/WebShell.vue';\nimport Toast from './components/ui/Toast.vue';\nimport type { Theme } from './theme';\n\nconst theme = ref<Theme>('system');\nconst effectiveTheme = ref<'light' | 'dark'>('dark');\nprovide('effectiveTheme', effectiveTheme);\nprovide('theme', theme);\n\nconst THEME_COLORS: Record<'light' | 'dark', string> = {\n light: '#ffffff',\n dark: '#101113',\n};\n\nfunction applyTheme() {\n const root = document.documentElement;\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n const effective = theme.value === 'system' ? (prefersDark ? 'dark' : 'light') : theme.value;\n effectiveTheme.value = effective;\n root.dataset.theme = effective;\n const meta = document.querySelector('meta[name=\"theme-color\"]');\n if (meta) meta.setAttribute('content', THEME_COLORS[effective]);\n}\n\nlet themeTimer: number | null = null;\n\nfunction setTheme(t: Theme) {\n theme.value = t;\n try {\n localStorage.setItem('scream-theme', t);\n } catch {\n // Storage can be unavailable in restricted/private browsing contexts.\n }\n const root = document.documentElement;\n root.classList.add('theme-transition');\n applyTheme();\n if (themeTimer !== null) clearTimeout(themeTimer);\n themeTimer = window.setTimeout(() => root.classList.remove('theme-transition'), 320);\n}\nprovide('setTheme', setTheme);\n\nonMounted(() => {\n try {\n const saved = localStorage.getItem('scream-theme') as Theme | null;\n if (saved === 'light' || saved === 'dark' || saved === 'system') theme.value = saved;\n } catch {\n // Fall back to the system theme when storage is unavailable.\n }\n applyTheme();\n});\n\nwatch(theme, applyTheme);\n\nconst colorScheme = window.matchMedia('(prefers-color-scheme: dark)');\ncolorScheme.addEventListener('change', applyTheme);\nonBeforeUnmount(() => {\n colorScheme.removeEventListener('change', applyTheme);\n if (themeTimer !== null) clearTimeout(themeTimer);\n document.documentElement.classList.remove('theme-transition');\n});\n</script>\n\n<template>\n <div class=\"app\">\n <WebShell />\n <Toast />\n </div>\n</template>\n\n<style scoped>\n.app {\n position: relative;\n height: 100%;\n}\n</style>\n","import { createApp } from 'vue';\nimport App from './App.vue';\nimport './styles/tokens.css';\nimport './styles/variables.css';\nimport './styles/main.css';\n\ncreateApp(App).mount('#app');\n"],"file":"assets/index-DDVdau1l.js"}
|