@vobs/devtools-ui 1.2.1 → 1.2.2

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../reactivity/src/debug.ts","../../reactivity/src/owner.ts","../../reactivity/src/signal.ts","../../reactivity/src/scheduler.ts","../../reactivity/src/effect.ts","../../runtime/src/debug.ts","../../runtime/src/hmr.ts","../../runtime/src/ops.ts","../../runtime/src/fragment.ts","../../runtime/src/dynamic.ts","../../vobs/src/context.ts","../../vobs/src/app.ts","../../http/src/index.ts","../../devtools/src/index.ts","../../ui/src/utils.ts","../../ui/src/button.ts","../../ui/src/forms.ts","../../ui/src/card.ts","../../ui/src/tag.ts","../../ui/src/alert.ts","../../ui/src/tabs.ts","../../ui/src/overlay.ts","../../ui/src/dialog.ts","../../icon-core/src/index.ts","../../ui/src/icon.ts","../src/panel.tsx","../src/widget.tsx"],"names":["effect","handled","readProp","setOptionalAttribute","managedAttributes","update","state","expanded"],"mappings":"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","file":"index.js","sourcesContent":["import type { Effect } from './effect'\nimport type { Owner } from './owner'\nimport type { Dependency, ReadableSignal, Subscriber } from './signal'\n\nexport interface ReactivityDebugHooks {\n ownerCreated?(owner: Owner): void\n ownerNamed?(owner: Owner, name: string): void\n ownerDisposed?(owner: Owner): void\n signalCreated?(signal: ReadableSignal<unknown>, owner: Owner | null): void\n signalNamed?(signal: ReadableSignal<unknown>, name: string): void\n signalRead?(signal: ReadableSignal<unknown>, subscriber: Subscriber): void\n signalChanged?(signal: ReadableSignal<unknown>, previousValue: unknown, nextValue: unknown): void\n signalDisposed?(signal: ReadableSignal<unknown>): void\n dependencyTracked?(dependency: Dependency, subscriber: Subscriber): void\n dependencyUntracked?(dependency: Dependency, subscriber: Subscriber): void\n effectCreated?(effect: Effect, owner: Owner | null): void\n effectInvalidated?(effect: Effect): void\n effectRunStart?(effect: Effect): void\n effectRunEnd?(effect: Effect, error?: unknown, handled?: boolean): void\n effectDisposed?(effect: Effect): void\n memoCreated?(signal: ReadableSignal<unknown>, subscriber: Subscriber, owner: Owner | null): void\n memoInvalidated?(signal: ReadableSignal<unknown>): void\n flushStart?(): void\n flushEnd?(): void\n}\n\nlet activeDebugHooks: ReactivityDebugHooks | null = null\nconst signalNames = new WeakMap<object, string>()\n\nexport function setDebugHooks(hooks: ReactivityDebugHooks | null): ReactivityDebugHooks | null {\n const previous = activeDebugHooks\n activeDebugHooks = hooks\n return previous\n}\n\nexport function getDebugHooks(): ReactivityDebugHooks | null {\n return activeDebugHooks\n}\n\n/** 热路径守卫:无 hooks 时跳过 invokeDebug 调用,避免 rest 参数数组分配。 */\nexport function hasDebugHooks(): boolean {\n return activeDebugHooks !== null\n}\n\nexport function setSignalDebugName(signal: ReadableSignal<unknown>, name: string): void {\n signalNames.set(signal, name)\n invokeDebug('signalNamed', signal, name)\n}\n\nexport function getSignalDebugName(signal: ReadableSignal<unknown>): string | undefined {\n return signalNames.get(signal)\n}\n\nexport function invokeDebug<K extends keyof ReactivityDebugHooks>(\n name: K,\n ...args: Parameters<NonNullable<ReactivityDebugHooks[K]>>\n): void {\n const callback = activeDebugHooks?.[name] as ((...values: unknown[]) => void) | undefined\n if (!callback) return\n try {\n callback(...args)\n } catch {\n // Debug tooling must never change application behavior.\n }\n}\n","import { invokeDebug, hasDebugHooks } from './debug'\n\nexport interface Owner {\n readonly id: string\n readonly parent: Owner | null\n readonly children: readonly Owner[]\n readonly depth: number\n readonly disposed: boolean\n run<T>(fn: () => T): T\n addCleanup(cleanup: () => void): void\n onDispose(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n handleError(error: unknown): boolean\n dispose(): void\n}\n\nlet currentOwner: Owner | null = null\nlet nextOwnerId = 1\nconst ownerNames = new WeakMap<Owner, string>()\n\nexport function createOwner(): Owner {\n const parent = currentOwner\n let disposed = parent?.disposed ?? false\n const children: Owner[] = []\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n\n const owner: Owner = {\n id: `owner-${nextOwnerId++}`,\n parent,\n children,\n depth: (parent?.depth ?? -1) + 1,\n\n get disposed(): boolean {\n return disposed\n },\n\n run<T>(fn: () => T): T {\n if (disposed) throw new Error('Vobs: 已销毁的 Owner 不能继续运行')\n const previous = currentOwner\n currentOwner = owner\n try {\n return fn()\n } finally {\n currentOwner = previous\n }\n },\n\n addCleanup(cleanup: () => void): void {\n if (disposed) {\n cleanup()\n return\n }\n cleanups.push(cleanup)\n },\n\n onDispose(cleanup: () => void): void {\n owner.addCleanup(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n owner.addCleanup(remove)\n return remove\n },\n\n handleError(error: unknown): boolean {\n for (const handler of [...errorHandlers].reverse()) {\n try {\n handler(error)\n return true\n } catch (handlerError) {\n return parent?.handleError(handlerError) ?? false\n }\n }\n return parent?.handleError(error) ?? false\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n for (const child of [...children]) child.dispose()\n children.length = 0\n\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n if (parent) {\n const index = parent.children.indexOf(owner)\n if (index >= 0) (parent.children as Owner[]).splice(index, 1)\n }\n if (hasDebugHooks()) invokeDebug('ownerDisposed', owner)\n if (firstError) throw firstError\n }\n }\n\n if (parent && !parent.disposed) (parent.children as Owner[]).push(owner)\n if (hasDebugHooks()) invokeDebug('ownerCreated', owner)\n return owner\n}\n\nexport function setOwnerDebugName(owner: Owner, name: string): void {\n ownerNames.set(owner, name)\n if (hasDebugHooks()) invokeDebug('ownerNamed', owner, name)\n}\n\nexport function getOwnerDebugName(owner: Owner): string | undefined {\n return ownerNames.get(owner)\n}\n\nexport function getCurrentOwner(): Owner | null {\n return currentOwner\n}\n\n/** Re-enter an Owner for an explicitly captured asynchronous continuation. */\nexport function runWithOwner<T>(owner: Owner, fn: () => T): T {\n return owner.run(fn)\n}\n\nexport function onDispose(cleanup: () => void): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: onDispose 必须在 Owner 作用域内调用')\n owner.onDispose(cleanup)\n}\n","import { getCurrentOwner } from './owner'\nimport { invokeDebug, hasDebugHooks, setSignalDebugName } from './debug'\n\nexport interface Dependency {\n unsubscribe(subscriber: Subscriber): void\n}\n\nexport interface Subscriber {\n readonly dependencies: Set<Dependency>\n readonly disposed: boolean\n notify(): void\n}\n\n/** 只读信号:派生值(memo)与只读上下文的最小契约,只能订阅与读取。 */\nexport interface ReadableSignal<T> extends Dependency {\n readonly value: T\n dispose(): void\n}\n\n/** 可写信号:state() 的返回类型。`set` 与 `.value =` 赋值语义完全一致。 */\nexport interface Signal<T> extends ReadableSignal<T> {\n value: T\n set(next: T): void\n}\n\nlet currentSubscriber: Subscriber | null = null\n\nexport function getCurrentSubscriber(): Subscriber | null {\n return currentSubscriber\n}\n\nexport function setCurrentSubscriber(subscriber: Subscriber | null): void {\n currentSubscriber = subscriber\n}\n\nexport function untrack<T>(fn: () => T): T {\n const previous = currentSubscriber\n currentSubscriber = null\n try {\n return fn()\n } finally {\n currentSubscriber = previous\n }\n}\n\nexport function trackDependency(dependency: Dependency): void {\n if (!currentSubscriber || currentSubscriber.disposed) return\n const added = !currentSubscriber.dependencies.has(dependency)\n currentSubscriber.dependencies.add(dependency)\n if (added && hasDebugHooks()) invokeDebug('dependencyTracked', dependency, currentSubscriber)\n}\n\n/**\n * Create a reactive state signal.\n *\n * State uses identity (`Object.is`) change detection. Objects and arrays are\n * intentionally shallow: mutating a nested property in place does not notify\n * subscribers; assign a new object/array to `value` to publish the change.\n *\n * The optional debug name is metadata for inspection tools only. It does not\n * affect subscriptions, scheduling, serialization, or the signal contract.\n */\nexport function state<T>(initialValue: T, debugName?: string): Signal<T> {\n let value = initialValue\n let disposed = false\n const subscribers = new Set<Subscriber>()\n\n const signalInstance: Signal<T> = {\n get value(): T {\n const subscriber = getCurrentSubscriber()\n if (subscriber && !subscriber.disposed) {\n subscribers.add(subscriber)\n if (hasDebugHooks()) invokeDebug('signalRead', signalInstance as Signal<unknown>, subscriber)\n trackDependency(signalInstance)\n }\n return value\n },\n\n set value(nextValue: T) {\n if (disposed || Object.is(value, nextValue)) return\n const previousValue = value\n value = nextValue\n if (hasDebugHooks()) invokeDebug('signalChanged', signalInstance as Signal<unknown>, previousValue, nextValue)\n for (const subscriber of [...subscribers]) subscriber.notify()\n },\n\n unsubscribe(subscriber: Subscriber): void {\n subscribers.delete(subscriber)\n },\n\n // 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。\n // 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。\n set(next: T): void {\n signalInstance.value = next\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n subscribers.clear()\n if (hasDebugHooks()) invokeDebug('signalDisposed', signalInstance as Signal<unknown>)\n }\n }\n\n const owner = getCurrentOwner()\n owner?.addCleanup(signalInstance.dispose)\n if (hasDebugHooks()) invokeDebug('signalCreated', signalInstance as Signal<unknown>, owner)\n if (debugName?.trim()) setSignalDebugName(signalInstance as Signal<unknown>, debugName.trim())\n return signalInstance\n}\n","import type { Effect } from './effect'\nimport { hasDebugHooks, invokeDebug } from './debug'\n\nexport class Scheduler {\n private readonly dirtyEffects = new Set<Effect>()\n private readonly lowPriorityEffects = new Set<Effect>()\n // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。\n private readonly normalBuffer: Effect[] = []\n private readonly lowBuffer: Effect[] = []\n private flushing = false\n private scheduled = false\n private batchDepth = 0\n\n schedule(effect: Effect): void {\n if (effect.disposed) return\n this.dirtyEffects.add(effect)\n this.lowPriorityEffects.delete(effect)\n this.ensureScheduled()\n }\n\n /** Queue an effect behind normal updates while preserving deterministic order. */\n scheduleLow(effect: Effect): void {\n if (effect.disposed) return\n if (!this.dirtyEffects.has(effect)) this.lowPriorityEffects.add(effect)\n this.ensureScheduled()\n }\n\n private ensureScheduled(): void {\n if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {\n this.scheduled = true\n queueMicrotask(() => {\n this.scheduled = false\n this.flush()\n })\n }\n }\n\n remove(effect: Effect): void {\n this.dirtyEffects.delete(effect)\n this.lowPriorityEffects.delete(effect)\n }\n\n batch<T>(fn: () => T): T {\n this.batchDepth++\n try {\n return fn()\n } finally {\n this.batchDepth--\n if (this.batchDepth === 0) this.flush()\n }\n }\n\n flush(): void {\n if (this.flushing || this.batchDepth > 0) return\n this.flushing = true\n const debugEnabled = hasDebugHooks()\n if (debugEnabled) invokeDebug('flushStart')\n let rounds = 0\n let firstError: unknown\n let hasError = false\n try {\n while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {\n if (++rounds > 100) {\n this.dirtyEffects.clear()\n this.lowPriorityEffects.clear()\n throw new Error('Vobs: 响应式更新超过 100 轮,可能存在循环依赖')\n }\n\n // normal 先、low 后,两组分别排序:与旧的合并排序语义一致\n // (旧比较器里 low 优先级本就高于 depth),但消除了比较器内的 Set 查找。\n this.collectRunnable(this.dirtyEffects, this.normalBuffer)\n this.collectRunnable(this.lowPriorityEffects, this.lowBuffer)\n sortEffects(this.normalBuffer)\n sortEffects(this.lowBuffer)\n for (const effect of this.normalBuffer) {\n try {\n effect.run()\n } catch (error) {\n // Isolate one failed effect from the rest of the flush. Re-throw\n // the first error after all runnable effects have had a chance.\n if (!hasError) {\n firstError = error\n hasError = true\n }\n }\n }\n for (const effect of this.lowBuffer) {\n try {\n effect.run()\n } catch (error) {\n if (!hasError) {\n firstError = error\n hasError = true\n }\n }\n }\n this.normalBuffer.length = 0\n this.lowBuffer.length = 0\n }\n } finally {\n this.normalBuffer.length = 0\n this.lowBuffer.length = 0\n this.flushing = false\n if (debugEnabled) invokeDebug('flushEnd')\n }\n if (hasError) throw firstError\n }\n\n /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */\n private collectRunnable(source: Set<Effect>, target: Effect[]): void {\n for (const effect of source) {\n if (!effect.disposed) target.push(effect)\n }\n source.clear()\n }\n}\n\n/** depth 深的先跑(子 effect 先于父),同深度按创建顺序。 */\nfunction sortEffects(effects: Effect[]): void {\n if (effects.length > 1) {\n effects.sort((a, b) => b.depth - a.depth || a.order - b.order)\n }\n}\n\nexport const scheduler = new Scheduler()\n\nexport function batch<T>(fn: () => T): T {\n return scheduler.batch(fn)\n}\n\n/** Schedule a low-priority effect explicitly. */\nexport function scheduleLow(effect: Effect): void {\n effect.scheduleLow()\n}\n","import { getCurrentOwner } from './owner'\nimport { invokeDebug, hasDebugHooks } from './debug'\nimport {\n getCurrentSubscriber,\n setCurrentSubscriber,\n type Dependency,\n type Subscriber\n} from './signal'\nimport { scheduler } from './scheduler'\n\nexport interface Effect extends Subscriber {\n readonly order: number\n readonly depth: number\n run(): void\n scheduleLow(): void\n dispose(): void\n}\n\nexport type EffectCleanup = () => void\nexport type EffectCallback = () => void | EffectCleanup\n\nlet nextEffectOrder = 1\n\nexport function cleanupDependencies(subscriber: Subscriber): void {\n for (const dependency of subscriber.dependencies) {\n dependency.unsubscribe(subscriber)\n if (hasDebugHooks()) invokeDebug('dependencyUntracked', dependency, subscriber)\n }\n subscriber.dependencies.clear()\n}\n\nexport function effect(callback: EffectCallback): Effect {\n const owner = getCurrentOwner()\n let cleanup: EffectCleanup | undefined\n let dirty = true\n let disposed = false\n\n const eff: Effect = {\n order: nextEffectOrder++,\n depth: owner?.depth ?? 0,\n dependencies: new Set<Dependency>(),\n\n get disposed(): boolean {\n return disposed\n },\n\n notify(): void {\n if (disposed || dirty) return\n dirty = true\n if (hasDebugHooks()) invokeDebug('effectInvalidated', eff)\n scheduler.schedule(eff)\n },\n\n run(): void {\n if (disposed || !dirty) return\n dirty = false\n const previousCleanup = cleanup\n cleanup = undefined\n let cleanupError: unknown\n if (previousCleanup) {\n try {\n previousCleanup()\n } catch (error) {\n const handled = owner?.handleError(error) ?? false\n if (!handled) cleanupError = error\n }\n }\n cleanupDependencies(eff)\n\n const previous = getCurrentSubscriber()\n setCurrentSubscriber(eff)\n let thrown: unknown\n let handled = false\n if (hasDebugHooks()) invokeDebug('effectRunStart', eff)\n try {\n const result = owner ? owner.run(callback) : callback()\n cleanup = typeof result === 'function' ? result : undefined\n } catch (error) {\n thrown = error\n handled = owner?.handleError(error) ?? false\n if (!handled) throw error\n } finally {\n setCurrentSubscriber(previous)\n if (hasDebugHooks()) invokeDebug('effectRunEnd', eff, thrown, handled)\n }\n if (cleanupError && !thrown) throw cleanupError\n },\n\n scheduleLow(): void {\n if (disposed || dirty) return\n dirty = true\n scheduler.scheduleLow(eff)\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n dirty = false\n scheduler.remove(eff)\n const previousCleanup = cleanup\n cleanup = undefined\n let cleanupError: unknown\n if (previousCleanup) {\n try {\n previousCleanup()\n } catch (error) {\n const handled = owner?.handleError(error) ?? false\n if (!handled) cleanupError = error\n }\n }\n cleanupDependencies(eff)\n if (hasDebugHooks()) invokeDebug('effectDisposed', eff)\n if (cleanupError) throw cleanupError\n }\n }\n\n owner?.addCleanup(eff.dispose)\n if (hasDebugHooks()) invokeDebug('effectCreated', eff, owner)\n eff.run()\n return eff\n}\n\nexport const renderEffect = effect\n","import type { Owner } from '@vobs/reactivity'\n\nexport type RuntimeDebugEnvironment = 'client' | 'server'\n\n/**\n * Lightweight context copied onto debug events created synchronously inside a\n * Router loader, Effect or SSR render. It is intentionally optional so the\n * runtime remains useful without DevTools.\n */\nexport interface RuntimeDebugContext {\n readonly environment?: RuntimeDebugEnvironment\n readonly sessionId?: string\n readonly route?: string\n readonly navigationId?: number\n readonly dataRequestId?: number\n readonly updateId?: string\n readonly effectId?: string\n readonly source?: string\n}\n\nexport interface RuntimeHydrationMismatch {\n readonly kind: 'missing-node' | 'extra-node' | 'position' | 'content'\n readonly expected: string\n readonly actual: string\n readonly path: string\n readonly message: string\n}\n\nexport type RuntimeDomMutationOperation = 'text' | 'property' | 'attribute' | 'insert' | 'remove'\n\nexport interface RuntimeDomMutation {\n readonly operation: RuntimeDomMutationOperation\n readonly target: string\n readonly parent?: string\n readonly key?: string\n readonly previousValue?: unknown\n readonly nextValue?: unknown\n}\n\nexport interface RuntimeErrorEvent {\n readonly error: unknown\n readonly owner: Owner\n readonly phase: 'event' | 'boundary'\n readonly handled: boolean\n readonly recovery: 'propagated' | 'handled' | 'fallback' | 'retrying' | 'recovered'\n}\n\nexport interface RuntimeDebugHooks {\n domMutation?(mutation: RuntimeDomMutation): void\n error?(event: RuntimeErrorEvent): void\n hydrationMismatch?(event: RuntimeHydrationMismatch): void\n}\n\nlet activeRuntimeDebugHooks: RuntimeDebugHooks | null = null\nlet activeRuntimeDebugContext: RuntimeDebugContext | null = null\n\nexport function setRuntimeDebugHooks(hooks: RuntimeDebugHooks | null): RuntimeDebugHooks | null {\n const previous = activeRuntimeDebugHooks\n activeRuntimeDebugHooks = hooks\n return previous\n}\n\nexport function getRuntimeDebugHooks(): RuntimeDebugHooks | null {\n return activeRuntimeDebugHooks\n}\n\nexport function getRuntimeDebugContext(): RuntimeDebugContext | null {\n return activeRuntimeDebugContext\n}\n\n/** Run a synchronous operation with trace context, preserving async renders. */\nexport function runWithRuntimeDebugContext<T>(context: RuntimeDebugContext, task: () => T): T {\n const previous = activeRuntimeDebugContext\n const next = { ...previous, ...context }\n activeRuntimeDebugContext = next\n let result: T\n try {\n result = task()\n } catch (error) {\n activeRuntimeDebugContext = previous\n throw error\n }\n if (isPromiseLike(result)) {\n return Promise.resolve(result).finally(() => {\n if (activeRuntimeDebugContext === next) activeRuntimeDebugContext = previous\n }) as T\n }\n activeRuntimeDebugContext = previous\n return result\n}\n\n/** Keep a context active across callback boundaries such as Effect execution. */\nexport function pushRuntimeDebugContext(context: RuntimeDebugContext): () => void {\n const previous = activeRuntimeDebugContext\n activeRuntimeDebugContext = { ...previous, ...context }\n let restored = false\n return () => {\n if (restored) return\n restored = true\n activeRuntimeDebugContext = previous\n }\n}\n\nexport function invokeRuntimeDebug<K extends keyof RuntimeDebugHooks>(\n name: K,\n ...args: Parameters<NonNullable<RuntimeDebugHooks[K]>>\n): void {\n const callback = activeRuntimeDebugHooks?.[name] as ((...values: unknown[]) => void) | undefined\n if (!callback) return\n try {\n callback(...args)\n } catch {\n // Debug tooling must never change runtime behavior.\n }\n}\n\nexport function readDebugValue(read: () => unknown): unknown {\n try {\n return read()\n } catch {\n return '[Uninspectable]'\n }\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return Boolean(value) && (typeof value === 'object' || typeof value === 'function')\n && typeof (value as { then?: unknown }).then === 'function'\n}\n\nexport function describeDebugNode(node: unknown): string {\n if (!node || typeof node !== 'object') return 'node'\n const value = node as {\n readonly nodeName?: unknown\n readonly tagName?: unknown\n readonly id?: unknown\n readonly className?: unknown\n }\n const name = typeof value.tagName === 'string'\n ? value.tagName.toLowerCase()\n : typeof value.nodeName === 'string' ? value.nodeName.toLowerCase() : 'node'\n const id = typeof value.id === 'string' && value.id ? `#${value.id}` : ''\n const className = typeof value.className === 'string' && value.className\n ? `.${value.className.trim().split(/\\s+/).filter(Boolean).join('.')}`\n : ''\n return `${name}${id}${className}`\n}\n","import type { VobsNode } from './fragment'\n\nexport type HmrComponent<Props extends object = Record<string, unknown>> =\n (props: Props) => VobsNode\n\nexport interface HmrStateStore {\n get<T>(key: string, initial: T | (() => T)): T\n set<T>(key: string, value: T): void\n has(key: string): boolean\n delete(key: string): void\n clear(): void\n}\n\nexport interface HmrInstance {\n node: VobsNode\n parent: Node | null\n refresh(): void\n}\n\ninterface HmrModuleState {\n readonly components: Map<string, HmrComponent>\n readonly state: Map<string, unknown>\n readonly instances: Set<HmrInstance>\n}\n\ninterface HmrGlobal {\n modules: Map<string, HmrModuleState>\n}\n\nconst globalTarget = globalThis as typeof globalThis & { __VOBS_HMR__?: HmrGlobal }\nconst hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: new Map<string, HmrModuleState>() }\nglobalTarget.__VOBS_HMR__ = hmrGlobal\n\nexport function resolveComponent<Props extends object>(\n component: HmrComponent<Props>,\n moduleId: string,\n exportName: string\n): HmrComponent<Props> {\n const module = getModule(moduleId)\n const existing = module.components.get(exportName)\n if (existing) return existing as HmrComponent<Props>\n\n const proxy = ((props: Props) => {\n const current = (proxy as HmrComponent<Props> & { current: HmrComponent<Props> }).current\n return current(props)\n }) as HmrComponent<Props> & { current: HmrComponent<Props> }\n proxy.current = component\n Object.defineProperties(proxy, {\n displayName: { configurable: true, value: component.name || exportName },\n hmrKey: { configurable: false, value: `${moduleId}:${exportName}` }\n })\n module.components.set(exportName, proxy as HmrComponent)\n return proxy\n}\n\nexport function updateHmrModule(_moduleId: string, nextModule: Record<string, unknown>): void {\n const modules = [...hmrGlobal.modules.values()]\n for (const module of modules) {\n let changed = false\n for (const [name, proxy] of module.components) {\n const next = nextModule[name]\n if (typeof next !== 'function') continue\n const hmrProxy = proxy as HmrComponent & { current: HmrComponent; displayName?: string }\n hmrProxy.current = next as HmrComponent\n Object.defineProperty(hmrProxy, 'displayName', { configurable: true, value: next.name || name })\n changed = true\n }\n if (!changed) continue\n for (const instance of module.instances) {\n try {\n instance.refresh()\n } catch {\n // HMR failures remain application errors on the next normal render.\n }\n }\n }\n}\n\nexport function disposeHmrModule(_moduleId: string): void {\n // State and component proxies intentionally survive module disposal.\n}\n\nexport function createHmrStateStore(moduleId: string): HmrStateStore {\n const state = getModule(moduleId).state\n return {\n get<T>(key: string, initial: T | (() => T)): T {\n if (!state.has(key)) state.set(key, typeof initial === 'function' ? (initial as () => T)() : initial)\n return state.get(key) as T\n },\n set<T>(key: string, value: T): void {\n state.set(key, value)\n },\n has: key => state.has(key),\n delete: key => { state.delete(key) },\n clear: () => { state.clear() }\n }\n}\n\nexport function registerHmrInstance(moduleId: string, instance: HmrInstance): () => void {\n const instances = getModule(moduleId).instances\n instances.add(instance)\n return () => instances.delete(instance)\n}\n\nexport function markHmrInstanceMounted(node: VobsNode, parent: Node): void {\n const instance = hmrInstances.get(node as object)\n if (instance) instance.parent = parent\n}\n\nfunction getModule(moduleId: string): HmrModuleState {\n let module = hmrGlobal.modules.get(moduleId)\n if (!module) {\n module = { components: new Map(), state: new Map(), instances: new Set() }\n hmrGlobal.modules.set(moduleId, module)\n }\n return module\n}\n\nconst hmrInstances = new WeakMap<object, HmrInstance>()\n\nexport function associateHmrInstance(node: VobsNode, instance: HmrInstance): void {\n hmrInstances.set(node as object, instance)\n}\n","// 编译产物调用的基础操作\n\nimport { createOwner, getCurrentOwner, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { isVobsFragment, type VobsNode } from './fragment'\nimport { describeDebugNode, getRuntimeDebugHooks, invokeRuntimeDebug, readDebugValue } from './debug'\nimport {\n associateHmrInstance,\n markHmrInstanceMounted,\n registerHmrInstance,\n type HmrInstance\n} from './hmr'\nimport type { VobsRenderer } from './renderer'\nimport { setRef } from './ref'\n\ntype RuntimeRenderer = VobsRenderer<Node, Text, Element, Comment>\n\nlet currentRenderer: RuntimeRenderer | null = null\nconst nodeOwners = new WeakMap<object, Owner>()\ninterface EventBinding {\n readonly handler: EventListener\n readonly owner: Owner | null\n readonly original: EventListener\n}\nconst eventBindings = new WeakMap<object, Map<string, EventBinding>>()\n\nexport function setRenderer<\n NodeType,\n TextNode extends NodeType,\n ElementNode extends NodeType,\n CommentNode extends NodeType\n>(renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>): void {\n // 编译产物仍使用 DOM 节点声明;实际宿主类型由应用提供的渲染器决定。\n currentRenderer = renderer as unknown as RuntimeRenderer\n}\n\nexport function getRenderer(): RuntimeRenderer {\n if (!currentRenderer) {\n throw new Error('渲染器未初始化')\n }\n return currentRenderer\n}\n\nexport function createText(content: string): Text {\n return getRenderer().createText(content)\n}\n\nexport function createElement(tag: string): Element {\n return getRenderer().createElement(tag)\n}\n\nexport function createComment(content: string): Comment {\n return getRenderer().createComment(content)\n}\n\nexport function insertBefore(\n parent: Node,\n child: VobsNode,\n anchor: VobsNode | null\n): void {\n if (isVobsFragment(child)) {\n child.mount(parent, isVobsFragment(anchor) ? anchor.start : anchor)\n return\n }\n getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor)\n markHmrInstanceMounted(child, parent)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'insert',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function removeChild(\n parent: Node,\n child: VobsNode\n): void {\n disposeNodeOwner(child)\n if (isVobsFragment(child)) {\n child.unmount(parent)\n return\n }\n getRenderer().removeChild(parent, child)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'remove',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function setTextContent(\n node: Text,\n content: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => node.textContent)\n : undefined\n getRenderer().setTextContent(node, content)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'text',\n target: describeDebugNode(node),\n previousValue,\n nextValue: content\n })\n }\n}\n\nexport function setProperty(\n node: Element,\n key: string,\n value: unknown\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => Reflect.get(node, key))\n : undefined\n getRenderer().setProperty(node, key, value)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'property',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nexport function setAttribute(\n node: Element,\n key: string,\n value: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => typeof node.getAttribute === 'function' ? node.getAttribute(key) : undefined)\n : undefined\n getRenderer().setAttribute(node, key, value)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'attribute',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nexport function spreadProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || value === null || value === undefined) continue\n if (key === 'ref') {\n setRef(node, value)\n continue\n }\n if (key.startsWith('on') && typeof value === 'function') addEventListener(node, key.slice(2).toLowerCase(), value as EventListener)\n // property 键的 false 有语义(如 disabled={false} 必须清除),不能跳过;\n // attribute 键的 false 表示“不设置”,与 HTML 语义一致。\n else if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\n/** Apply compile-time host properties in one renderer pass. */\nexport function setStaticProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || key === 'ref' || key.startsWith('on')) continue\n if (value === null || value === undefined) continue\n if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\nfunction isPropertyKey(key: string): boolean {\n return key === 'value' || key === 'checked' || key === 'selected' || key === 'disabled'\n || key === 'multiple' || key === 'readOnly' || key === 'required'\n || key === 'autofocus' || key === 'hidden' || key === 'tabIndex'\n}\n\nfunction isStyleObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction formatStyle(value: Record<string, unknown>): string {\n return Object.entries(value).filter(([, entry]) => entry !== null && entry !== undefined && entry !== false)\n .map(([key, entry]) => `${key.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)}:${String(entry)}`).join(';')\n}\n\nexport function addEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const owner = getCurrentOwner()\n let bindings = eventBindings.get(node)\n if (!bindings) {\n bindings = new Map()\n eventBindings.set(node, bindings)\n }\n const previous = bindings.get(event)\n if (previous && previous.original === handler && previous.owner === owner) return\n if (previous) renderer.removeEventListener(node, event, previous.handler)\n const listener = owner ? (reason: Event) => {\n try {\n owner.run(() => handler(reason))\n } catch (error) {\n const handled = owner.handleError(error)\n invokeRuntimeDebug('error', {\n error,\n owner,\n phase: 'event',\n handled,\n recovery: handled ? 'handled' : 'propagated'\n })\n if (!handled) throw error\n }\n } : handler\n const binding: EventBinding = { handler: listener, owner, original: handler }\n bindings.set(event, binding)\n renderer.addEventListener(node, event, listener)\n owner?.onDispose(() => {\n if (bindings?.get(event) !== binding) return\n bindings.delete(event)\n renderer.removeEventListener(node, event, listener)\n })\n}\n\nexport function removeEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const binding = eventBindings.get(node)?.get(event)\n renderer.removeEventListener(node, event, binding?.handler ?? handler)\n eventBindings.get(node)?.delete(event)\n}\n\nexport function clear(container: Node): void {\n getRenderer().clear(container)\n}\n\ntype VobsComponent = (...args: any[]) => VobsNode\n\ntype ComponentProps<Component extends VobsComponent> = Component extends (\n props: infer Props\n) => VobsNode\n ? NonNullable<Props> extends object ? NonNullable<Props> : Record<string, never>\n : Record<string, never>\n\nexport function createComponent<Component extends VobsComponent>(\n component: Component,\n props: ComponentProps<Component>,\n source?: VobsSourceLocation\n): VobsNode {\n const owner = createOwner()\n const componentName = (component as typeof component & { displayName?: string }).displayName\n || component.name\n || 'anonymous'\n setOwnerDebugName(owner, source\n ? `${componentName} (${source.file}:${source.line}:${source.column})`\n : componentName)\n owner.onError(reason => {\n attachSourceLocation(reason, source)\n attachComponentContext(reason, componentName, owner.id)\n throw reason\n })\n let node: VobsNode\n try {\n node = owner.run(() => component(props))\n } catch (error) {\n owner.dispose()\n attachSourceLocation(error, source)\n attachComponentContext(error, componentName, owner.id)\n throw error\n }\n associateNodeOwner(node, owner)\n const hmrKey = (component as typeof component & { hmrKey?: string }).hmrKey\n if (hmrKey) {\n const instance: HmrInstance = {\n node,\n parent: null,\n refresh(): void {\n const previous = instance.node\n const next = owner.run(() => component(props))\n if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {\n getRenderer().insertBefore(instance.parent, next, previous)\n getRenderer().removeChild(instance.parent, previous)\n }\n nodeOwners.delete(previous as object)\n nodeOwners.set(next as object, owner)\n associateHmrInstance(next, instance)\n instance.node = next\n }\n }\n associateHmrInstance(node, instance)\n const separator = hmrKey.lastIndexOf(':')\n const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator)\n const cleanup = registerHmrInstance(moduleId, instance)\n owner.onDispose(cleanup)\n }\n return node\n}\n\nexport interface VobsSourceLocation {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface VobsLocatedError extends Error {\n readonly vobsSource?: VobsSourceLocation\n readonly vobsComponent?: string\n readonly vobsOwnerId?: string\n}\n\nfunction attachSourceLocation(reason: unknown, source: VobsSourceLocation | undefined): void {\n if (!source || (!reason || (typeof reason !== 'object' && typeof reason !== 'function'))) return\n const error = reason as VobsLocatedError\n if (error.vobsSource) return\n try {\n Object.defineProperty(error, 'vobsSource', {\n configurable: true,\n enumerable: false,\n value: source,\n writable: false\n })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nfunction attachComponentContext(reason: unknown, component: string, ownerId: string): void {\n if (!reason || (typeof reason !== 'object' && typeof reason !== 'function')) return\n const error = reason as VobsLocatedError\n try {\n if (!error.vobsComponent) Object.defineProperty(error, 'vobsComponent', { configurable: true, enumerable: false, value: component, writable: false })\n if (!error.vobsOwnerId) Object.defineProperty(error, 'vobsOwnerId', { configurable: true, enumerable: false, value: ownerId, writable: false })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nexport function createBlock(factory: () => VobsNode | null | undefined | false): VobsNode | null {\n const owner = createOwner()\n setOwnerDebugName(owner, 'dynamic')\n let node: VobsNode | null | undefined | false\n try {\n node = owner.run(factory)\n } catch (error) {\n owner.dispose()\n throw error\n }\n if (!node) {\n owner.dispose()\n return null\n }\n associateNodeOwner(node, owner)\n return node\n}\n\nexport function associateNodeOwner(node: VobsNode, owner: Owner): void {\n nodeOwners.set(node, owner)\n}\n\nexport function disposeNodeOwner(node: VobsNode): void {\n const owner = nodeOwners.get(node)\n if (!owner) return\n nodeOwners.delete(node)\n owner.dispose()\n}\n","import { getCurrentOwner } from '@vobs/reactivity'\nimport { createComment, getRenderer } from './ops'\n\nexport interface VobsFragment {\n readonly kind: 'vobs-fragment'\n readonly start: Node\n readonly end: Node\n readonly mount: (parent: Node, anchor: Node | null) => void\n readonly unmount: (parent: Node) => void\n}\n\nexport type VobsNode = Node | VobsFragment\nexport type FragmentFactory = (parent: Node, anchor: Node) => void\n\nexport function createFragment(factory: FragmentFactory): VobsFragment {\n const start = createComment('vobs:fragment:start')\n const end = createComment('vobs:fragment:end')\n let parent: Node | null = null\n let initialized = false\n const owner = getCurrentOwner()\n\n const fragment: VobsFragment = {\n kind: 'vobs-fragment',\n start,\n end,\n mount(nextParent, anchor): void {\n if (parent && parent !== nextParent) {\n throw new Error('Vobs Fragment: 不能跨父节点移动 Fragment')\n }\n\n if (initialized) {\n moveRange(nextParent, start, end, anchor)\n return\n }\n\n const renderer = getRenderer()\n renderer.insertBefore(nextParent, start, anchor)\n renderer.insertBefore(nextParent, end, anchor)\n parent = nextParent\n initialized = true\n if (owner) owner.run(() => factory(nextParent, end))\n else factory(nextParent, end)\n },\n unmount(nextParent): void {\n if (!initialized || parent !== nextParent) {\n throw new Error('Vobs Fragment: Fragment 不属于指定父节点')\n }\n const renderer = getRenderer()\n let current = renderer.nextSibling(start)\n while (current && current !== end) {\n const next = renderer.nextSibling(current)\n renderer.removeChild(nextParent, current)\n current = next\n }\n renderer.removeChild(nextParent, start)\n renderer.removeChild(nextParent, end)\n parent = null\n initialized = false\n }\n }\n return fragment\n}\n\nexport function isVobsFragment(value: unknown): value is VobsFragment {\n return Boolean(value) && typeof value === 'object' && (value as VobsFragment).kind === 'vobs-fragment'\n}\n\nfunction moveRange(parent: Node, start: Node, end: Node, anchor: Node | null): void {\n const renderer = getRenderer()\n const nodes: Node[] = [start]\n let current = renderer.nextSibling(start)\n while (current) {\n nodes.push(current)\n if (current === end) break\n current = renderer.nextSibling(current)\n }\n if (nodes[nodes.length - 1] !== end) {\n throw new Error('Vobs Fragment: 找不到结束锚点')\n }\n for (const node of nodes) renderer.insertBefore(parent, node, anchor)\n}\n","import { createOwner, effect, state, type Owner, type Signal } from '@vobs/reactivity'\nimport {\n associateNodeOwner,\n createBlock,\n createComment,\n createText,\n insertBefore,\n removeChild\n} from './ops'\nimport { createFragment, isVobsFragment, type VobsNode } from './fragment'\n\nexport type NodeFactory = () => VobsNode | null | undefined | false\nexport type DynamicChild = VobsNode | string | number | boolean | null | undefined | readonly DynamicChild[]\n\ninterface ListEntry<T> {\n key: unknown\n node: VobsNode\n owner: Owner\n viewOwner: Owner\n item: Signal<T>\n /** 最近一次赋值的原始 item:供比较与刷新使用,避免在列表 effect 内读取 item 信号造成自依赖。 */\n value: T\n index: number\n}\n\nexport function insertDynamic(parent: Node, anchor: Node | null, factory: NodeFactory): void {\n const marker = createComment('vobs:dynamic')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n\n effect(() => {\n const next = createBlock(factory)\n if (next === current) return\n\n if (current) removeChild(parent, current)\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/**\n * Inserts any Vobs child value. This is the escape hatch for JSX expressions\n * that return a node, an array of nodes, text, or an empty conditional value.\n */\nexport function insertDynamicValue(\n parent: Node,\n anchor: Node | null,\n factory: () => DynamicChild\n): void {\n const marker = createComment('vobs:value')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n let scope: Owner | null = null\n\n effect(() => {\n // 每轮求值使用独立 scope Owner:factory 求值与挂载期间创建的组件 Owner 全部挂在它下面。\n // 数组/节点被替换时整体 dispose 旧 scope,避免被丢弃子树的 effect 继续订阅信号(幽灵更新与内存泄漏)。\n const nextScope = createOwner()\n const next = nextScope.run(() => normalizeDynamicChild(factory()))\n if (next === current) {\n nextScope.dispose()\n return\n }\n if (current) removeChild(parent, current)\n scope?.dispose()\n scope = nextScope\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/** Convert a JSX child value to a host node without creating a wrapper element. */\nexport function normalizeDynamicChild(value: DynamicChild): VobsNode | null {\n if (value === null || value === undefined || typeof value === 'boolean') return null\n if (typeof value === 'string' || typeof value === 'number') return createText(String(value))\n if (isVobsFragment(value) || isHostNode(value)) return value as VobsNode\n if (Array.isArray(value)) {\n const children = value\n if (children.length === 0) return null\n return createFragment((parent, anchor) => {\n for (const child of children) {\n const node = normalizeDynamicChild(child)\n if (node) insertBefore(parent, node, anchor)\n }\n })\n }\n return null\n}\n\nfunction isHostNode(value: unknown): value is Node {\n return Boolean(value && typeof value === 'object'\n && ('nodeType' in value || ((value as { type?: unknown }).type === 'element'\n || (value as { type?: unknown }).type === 'text'\n || (value as { type?: unknown }).type === 'comment')))\n}\n\nexport function insertList<T>(\n parent: Node,\n anchor: Node | null,\n source: () => readonly T[],\n renderItem: (item: T, index: number) => VobsNode,\n keyOf?: (item: T, index: number) => unknown\n): void {\n const marker = createComment('vobs:list')\n insertBefore(parent, marker, anchor)\n let entries: Array<ListEntry<T>> = []\n const tracksIndex = renderItem.length >= 2\n\n effect(() => {\n const items = source()\n\n // key 只计算一次:keyed 判定与调和共用,避免 keyOf 每轮被调用两遍。\n let keys: unknown[] | null = null\n if (keyOf) {\n keys = new Array(items.length)\n let allKeyed = items.length > 0\n for (let index = 0; index < items.length; index++) {\n const key = keyOf(items[index], index)\n if (key == null) {\n allKeyed = false\n break\n }\n keys[index] = key\n }\n if (!allKeyed) keys = null\n }\n\n const nextEntries = keys\n ? reconcileKeyed(items, keys, entries, renderItem)\n : reconcileIndexed(items, entries, renderItem)\n\n // tracksIndex 时 index 参与渲染,位置变化的行必须整体重建,新节点不在 DOM 中,\n // 重排阶段强制插入;否则只同步记录的位置,节点保持原样交给重排阶段移动。\n const refreshed = tracksIndex ? new Set<ListEntry<T>>() : null\n for (let index = 0; index < nextEntries.length; index++) {\n const entry = nextEntries[index]\n if (tracksIndex) {\n if (entry.index !== index) {\n refreshListEntry(parent, entry, index, renderItem)\n refreshed!.add(entry)\n }\n } else {\n entry.index = index\n }\n }\n\n const retained = new Set(nextEntries)\n for (const entry of entries) {\n if (!retained.has(entry)) disposeEntry(parent, entry)\n }\n\n reorderListEntries(parent, marker, entries, nextEntries, refreshed)\n entries = nextEntries\n })\n}\n\n/**\n * 按 nextEntries 顺序整理 DOM,但只移动必须移动的节点。\n */\nfunction reorderListEntries<T>(\n parent: Node,\n marker: Node,\n previous: readonly ListEntry<T>[],\n nextEntries: readonly ListEntry<T>[],\n forceInsert: Set<ListEntry<T>> | null\n): void {\n const count = nextEntries.length\n if (count === 0) return\n\n // 首次挂载(旧列表为空):全部是新节点,倒序直插即可,跳过 Map/LIS 构建。\n if (previous.length === 0) {\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n insertBefore(parent, node, reference)\n reference = node\n }\n return\n }\n\n const oldIndexOf = new Map<ListEntry<T>, number>()\n for (let index = 0; index < previous.length; index++) oldIndexOf.set(previous[index], index)\n\n // seq[i] = 条目在旧序中的位置;新条目、重建条目与强制插入条目为 -1。\n const seq: number[] = new Array(count)\n for (let index = 0; index < count; index++) {\n const entry = nextEntries[index]\n seq[index] = forceInsert?.has(entry) ? -1 : oldIndexOf.get(entry) ?? -1\n }\n\n const keep = computeKeptByLis(seq)\n\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n if (keep[index]) {\n reference = node\n continue\n }\n insertBefore(parent, node, reference)\n reference = node\n }\n}\n\n/**\n * 严格递增子序列(LIS)成员标记,O(n log n)。\n * 负值(新节点)不参与 LIS,永远视为需要移动。\n */\nfunction computeKeptByLis(seq: readonly number[]): boolean[] {\n const count = seq.length\n const keep = new Array<boolean>(count).fill(false)\n const tailsIndex: number[] = []\n const tailsValue: number[] = []\n const prev = new Array<number>(count).fill(-1)\n\n for (let i = 0; i < count; i++) {\n const value = seq[i]\n if (value < 0) continue\n let lo = 0\n let hi = tailsValue.length\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (tailsValue[mid] < value) lo = mid + 1\n else hi = mid\n }\n if (lo === tailsValue.length) {\n tailsValue.push(value)\n tailsIndex.push(i)\n } else {\n tailsValue[lo] = value\n tailsIndex[lo] = i\n }\n prev[i] = lo > 0 ? tailsIndex[lo - 1] : -1\n }\n\n let cursor = tailsIndex.length > 0 ? tailsIndex[tailsIndex.length - 1] : -1\n while (cursor >= 0) {\n keep[cursor] = true\n cursor = prev[cursor]\n }\n return keep\n}\n\nfunction reconcileKeyed<T>(\n items: readonly T[],\n keys: readonly unknown[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const previous = new Map(entries.map(entry => [entry.key, entry]))\n const seen = new Set<unknown>()\n const nextEntries: Array<ListEntry<T>> = []\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const key = keys[index]\n if (seen.has(key)) {\n console.warn(`Vobs: 检测到重复的列表 key: ${String(key)}`)\n }\n seen.add(key)\n const entry = previous.get(key)\n if (entry) {\n previous.delete(key)\n if (isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项在编译产物中被静态捕获,无法通过 item 信号刷新视图:值变化时必须重建行。\n nextEntries.push(createListEntry(item, index, key, renderItem))\n continue\n }\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, key, renderItem))\n }\n\n return nextEntries\n}\n\nfunction reconcileIndexed<T>(\n items: readonly T[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const nextEntries: Array<ListEntry<T>> = []\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const entry = entries[index]\n if (entry && isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项被编译产物静态捕获,值变化时必须重建行;旧行由主循环统一 dispose。\n nextEntries.push(createListEntry(item, index, index, renderItem))\n continue\n }\n if (entry) {\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, index, renderItem))\n }\n return nextEntries\n}\n\n/** 原始类型(含 function)无法被 Proxy 响应化,只能整行重建。 */\nfunction isPrimitiveItem(item: unknown): boolean {\n return item === null || typeof item !== 'object'\n}\n\nfunction createListEntry<T>(\n item: T,\n index: number,\n key: unknown,\n renderItem: (item: T, index: number) => VobsNode\n): ListEntry<T> {\n const owner = createOwner()\n let itemSignal!: Signal<T>\n let viewOwner!: Owner\n let node!: VobsNode\n owner.run(() => {\n itemSignal = state(item)\n viewOwner = createOwner()\n node = viewOwner.run(() => renderItem(toReactiveItem(itemSignal, item), index))\n })\n associateNodeOwner(node, viewOwner)\n return { key, node, owner, viewOwner, item: itemSignal, value: item, index }\n}\n\nfunction refreshListEntry<T>(\n parent: Node,\n entry: ListEntry<T>,\n index: number,\n renderItem: (item: T, index: number) => VobsNode\n): void {\n removeChild(parent, entry.node)\n entry.index = index\n const previousView = entry.viewOwner\n entry.owner.run(() => {\n entry.viewOwner = createOwner()\n entry.node = entry.viewOwner.run(() => renderItem(\n toReactiveItem(entry.item, entry.value),\n index\n ))\n })\n // 旧视图的 effect 仍订阅着 item 信号,必须 dispose,否则会写已脱离的 DOM(幽灵更新)。\n previousView.dispose()\n associateNodeOwner(entry.node, entry.viewOwner)\n}\n\nfunction toReactiveItem<T>(item: Signal<T>, initialValue: T): T {\n if (typeof initialValue !== 'object' || initialValue === null) {\n return initialValue\n }\n\n // 代理目标使用创建时的原始对象:避免在列表 effect 内读取 item 信号造成自依赖;\n // 属性读取始终转发到 item.value,在行内绑定 effect 中被正常追踪。\n return new Proxy(initialValue as object, {\n get(_target, property, receiver) {\n return Reflect.get(item.value as object, property, receiver)\n },\n has(_target, property) {\n return property in (item.value as object)\n },\n ownKeys() {\n return Reflect.ownKeys(item.value as object)\n },\n getOwnPropertyDescriptor(_target, property) {\n return Object.getOwnPropertyDescriptor(item.value as object, property)\n }\n }) as T\n}\n\nfunction disposeEntry(parent: Node, entry: ListEntry<unknown>): void {\n removeChild(parent, entry.node)\n entry.owner.dispose()\n}\n","import { getCurrentOwner, type Owner } from '@vobs/reactivity'\nimport type { InjectionKey, ProvideOptions } from './app'\n\nconst ownerProviders = new WeakMap<Owner, Map<InjectionKey<unknown>, unknown>>()\n\nexport function provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: provide 必须在组件或 Owner 作用域内调用')\n provideToOwner(owner, key, value, options)\n}\n\nexport function inject<T>(key: InjectionKey<T>): T | undefined\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const owner = getCurrentOwner()\n const value = owner ? injectFromOwner(owner, key) : undefined\n return value === undefined ? fallback : value\n}\n\nexport function injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = inject(key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n}\n\nexport function provideToOwner<T>(\n owner: Owner,\n key: InjectionKey<T>,\n value: T,\n options: ProvideOptions = {}\n): void {\n let providers = ownerProviders.get(owner)\n if (!providers) {\n providers = new Map<InjectionKey<unknown>, unknown>()\n ownerProviders.set(owner, providers)\n owner.onDispose(() => ownerProviders.delete(owner))\n }\n if (providers.has(key) && !options.override) {\n throw new Error(`Vobs: 注入项 ${String(key)} 已存在;如需覆盖请传入 override: true`)\n }\n providers.set(key, value)\n}\n\nexport function injectFromOwner<T>(owner: Owner, key: InjectionKey<T>): T | undefined {\n let current: Owner | null = owner\n while (current) {\n const providers = ownerProviders.get(current)\n if (providers?.has(key)) return providers.get(key) as T\n current = current.parent\n }\n return undefined\n}\n","import { createOwner, scheduler, setOwnerDebugName, type Owner } from '@vobs/reactivity'\nimport { createDOMRenderer } from '@vobs/dom'\nimport { insertBefore as insertRuntimeNode, setRenderer, type VobsFragment, type VobsRenderer } from '@vobs/runtime'\nimport { injectFromOwner, provideToOwner } from './context'\n\nexport type InjectionKey<T> = symbol & {\n readonly __vobsType?: T\n}\n\nexport interface ProvideOptions {\n override?: boolean\n}\n\nexport interface VobsPlugin {\n name: string\n version?: string\n requires?: readonly VobsPlugin[]\n optional?: readonly VobsPlugin[]\n install?: (ctx: VobsContext) => void | (() => void)\n}\n\nexport interface VobsContext {\n readonly app: VobsApp\n provide<T>(key: InjectionKey<T>, value: T, options?: ProvideOptions): void\n inject<T>(key: InjectionKey<T>): T | undefined\n injectRequired<T>(key: InjectionKey<T>, description?: string): T\n onDestroy(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n}\n\nexport interface VobsConfig<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n> {\n render: () => NodeType | VobsFragment | Node | null | undefined\n renderer?: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n plugins?: VobsPlugin[]\n /** Optional application-level error observer. Observers are isolated from the app. */\n onError?: (error: unknown) => void\n}\n\nexport interface VobsApp<NodeType = Node> {\n readonly mounted: boolean\n readonly destroyed: boolean\n use(plugin: VobsPlugin): VobsApp<NodeType>\n mount(target: string | NodeType): void\n hydrate(target: string | NodeType): void\n update(): void\n destroy(): void\n}\n\nexport function createInjectionKey<T>(description: string): InjectionKey<T> {\n return Symbol(description) as InjectionKey<T>\n}\n\nexport function createVobs(\n config: VobsConfig<Node, Text, Element, Comment>\n): VobsApp<Node>\nexport function createVobs<\n NodeType = Node,\n TextNode extends NodeType = NodeType,\n ElementNode extends NodeType = NodeType,\n CommentNode extends NodeType = NodeType\n>(\n config: VobsConfig<NodeType, TextNode, ElementNode, CommentNode> & {\n renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>\n }\n): VobsApp<NodeType>\nexport function createVobs(\n config: VobsConfig<any, any, any, any>\n): VobsApp<any> {\n if (!config.render) throw new Error('createVobs: render 不能为空')\n\n const renderer = config.renderer ?? createDOMRenderer()\n const rootOwner: Owner = createOwner()\n setOwnerDebugName(rootOwner, 'App')\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n const installed = new Set<string>()\n const installing = new Set<string>()\n let mounted = false\n let destroyed = false\n let container: any = null\n let app!: VobsApp<any>\n\n if (config.onError) {\n errorHandlers.add(config.onError)\n cleanups.push(() => errorHandlers.delete(config.onError!))\n }\n\n const context: VobsContext = {\n get app(): VobsApp<any> {\n return app\n },\n\n provide<T>(key: InjectionKey<T>, value: T, options: ProvideOptions = {}): void {\n provideToOwner(rootOwner, key, value, options)\n },\n\n inject<T>(key: InjectionKey<T>): T | undefined {\n return injectFromOwner(rootOwner, key)\n },\n\n injectRequired<T>(key: InjectionKey<T>, description?: string): T {\n const value = injectFromOwner(rootOwner, key)\n if (value === undefined) {\n throw new Error(`Vobs: 找不到必需注入项${description ? ` ${description}` : ''}`)\n }\n return value\n },\n\n onDestroy(cleanup: () => void): void {\n cleanups.push(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n cleanups.push(remove)\n return remove\n }\n }\n\n function notifyError(error: unknown): void {\n for (const handler of [...errorHandlers]) {\n try {\n handler(error)\n } catch {\n // 错误处理器不能覆盖触发它的原始错误。\n }\n }\n }\n\n function installPlugin(plugin: VobsPlugin): void {\n if (installed.has(plugin.name)) return\n if (installing.has(plugin.name)) {\n throw new Error(`Vobs: 插件依赖存在循环:${plugin.name}`)\n }\n\n installing.add(plugin.name)\n try {\n for (const dependency of plugin.requires ?? []) installPlugin(dependency)\n const cleanup = plugin.install?.(context)\n if (cleanup) cleanups.push(cleanup)\n installed.add(plugin.name)\n } finally {\n installing.delete(plugin.name)\n }\n }\n\n function cleanup(clearContainer = true): unknown {\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n try {\n rootOwner.dispose()\n } catch (error) {\n firstError ??= error\n }\n\n if (container && clearContainer) {\n try {\n renderer.clear(container)\n } catch (error) {\n firstError ??= error\n }\n }\n return firstError\n }\n\n function start(target: string | any, hydrating: boolean): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能挂载')\n if (mounted) return\n\n container = typeof target === 'string' ? document.querySelector(target) : target\n if (!container) throw new Error(`mount: 目标不存在: ${target}`)\n if (hydrating && !renderer.beginHydration) {\n throw new Error('Vobs: 当前渲染器不支持 Hydration')\n }\n\n setRenderer(renderer)\n try {\n if (hydrating) renderer.beginHydration?.()\n const rootNode = rootOwner.run(config.render)\n if (!hydrating) renderer.clear(container)\n if (rootNode) insertRuntimeNode(container, rootNode as any, null)\n if (hydrating) renderer.completeHydration?.()\n mounted = true\n } catch (error) {\n notifyError(error)\n const cleanupError = cleanup(!hydrating)\n destroyed = true\n throw cleanupError ?? error\n }\n }\n\n app = {\n get mounted(): boolean {\n return mounted\n },\n\n get destroyed(): boolean {\n return destroyed\n },\n\n use(plugin: VobsPlugin): VobsApp<any> {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能安装插件')\n installPlugin(plugin)\n return app\n },\n\n mount(target: string | any): void {\n start(target, false)\n },\n\n hydrate(target: string | any): void {\n start(target, true)\n },\n\n update(): void {\n if (destroyed) throw new Error('Vobs: 已销毁的应用不能更新')\n try {\n scheduler.flush()\n } catch (error) {\n notifyError(error)\n throw error\n }\n },\n\n destroy(): void {\n if (destroyed) return\n try {\n const cleanupError = cleanup()\n if (cleanupError) {\n notifyError(cleanupError)\n throw cleanupError\n }\n } finally {\n mounted = false\n destroyed = true\n }\n }\n }\n\n try {\n for (const plugin of config.plugins ?? []) app.use(plugin)\n } catch (error) {\n notifyError(error)\n cleanup()\n destroyed = true\n throw error\n }\n\n return app\n}\n","import { createInjectionKey, type VobsPlugin } from '@vobs/vobs'\nimport axios from 'axios'\nexport { createSSE, createWebSocket } from './stream'\nimport { emitHTTPDebug } from './debug'\nimport { getRuntimeDebugContext } from '@vobs/runtime'\n\nexport { emitHTTPDebug, getHTTPDebugHooks, setHTTPDebugHooks, subscribeHTTPDebug } from './debug'\nexport type { HTTPDebugCacheStatus, HTTPDebugContext, HTTPDebugHooks, HTTPDebugRequest, HTTPDebugStatus } from './debug'\nexport type {\n SSEClient,\n SSEConstructor,\n SSEOptions,\n WebSocketClient,\n WebSocketConstructor,\n WebSocketEventListener,\n WebSocketEventName,\n WebSocketOptions,\n WebSocketState\n} from './stream'\n\nexport type HTTPMethod = 'DELETE' | 'GET' | 'HEAD' | 'OPTIONS' | 'PATCH' | 'POST' | 'PUT'\nexport type HTTPResponseType = 'arrayBuffer' | 'blob' | 'json' | 'response' | 'text'\nexport type HTTPHeaders = Record<string, string>\nexport type RetryDelay = number | ((attempt: number, error: Error) => number)\nexport interface HTTPProgress {\n readonly loaded: number\n readonly total: number | undefined\n readonly percent: number | undefined\n}\nexport type HTTPProgressHandler = (progress: HTTPProgress) => void\nconst PROGRESS_HANDLED = Symbol('vobs.http.progress-handled')\nlet nextHTTPDebugId = 1\n\nexport interface RequestOptions {\n url: string\n method?: HTTPMethod\n baseURL?: string\n headers?: HeadersInit\n params?: Record<string, unknown> | URLSearchParams\n body?: unknown\n signal?: AbortSignal\n /** @deprecated Use signal. */\n state?: AbortSignal\n timeout?: number\n retry?: number\n retryDelay?: RetryDelay\n shouldRetry?: (error: Error, attempt: number) => boolean | PromiseLike<boolean>\n cache?: RequestCache\n credentials?: RequestCredentials\n mode?: RequestMode\n responseType?: HTTPResponseType\n onUploadProgress?: HTTPProgressHandler\n onDownloadProgress?: HTTPProgressHandler\n /** Share an in-flight request with the same dedupe key. */\n dedupe?: boolean\n dedupeKey?: string\n /** Optional context copied into DevTools request traces. */\n debugContext?: import('./debug').HTTPDebugContext\n}\n\nexport interface RequestConfig extends Omit<RequestOptions, 'headers' | 'method'> {\n readonly method: HTTPMethod\n headers: HTTPHeaders\n readonly url: string\n}\n\nexport interface HTTPResponse<T = unknown> {\n readonly data: T\n readonly status: number\n readonly statusText: string\n readonly headers: Headers\n readonly config: RequestConfig\n readonly raw: Response | null\n}\n\n/** Adapt an HTTP request to the fetcher contract used by Resource. */\nexport type HTTPResourceRequest<T> = (\n signal: AbortSignal\n) => HTTPResponse<T> | PromiseLike<HTTPResponse<T>>\n\nexport function toResourceFetcher<T>(request: HTTPResourceRequest<T>): (signal: AbortSignal) => Promise<T> {\n return signal => Promise.resolve()\n .then(() => request(signal))\n .then(response => response.data)\n}\n\nexport type HTTPAdapter = (\n config: RequestConfig\n) => Response | HTTPResponse<unknown> | PromiseLike<Response | HTTPResponse<unknown>>\n\nexport interface AxiosResponseLike<T = unknown> {\n readonly data: T\n readonly status: number\n readonly statusText?: string\n readonly headers?: HeadersInit\n readonly raw?: Response | null\n}\n\nexport type AxiosRequestConfigLike = RequestConfig & { readonly data?: unknown }\nexport type AxiosRequest = <T = unknown>(config: AxiosRequestConfigLike) => PromiseLike<AxiosResponseLike<T>>\n\n/** Bridges an Axios request function while preserving HTTPResponse<T>.data typing. */\nexport function createAxiosAdapter(request: AxiosRequest = builtInAxiosRequest): HTTPAdapter {\n return async config => {\n // normalizeRequest has already serialized params into config.url. Omit\n // params before invoking a custom Axios request so spreading this config\n // into axios.request cannot append the query string a second time.\n const { params: _params, ...requestConfig } = config\n const response = await request<unknown>({ ...requestConfig, data: config.body })\n return {\n data: response.data,\n status: response.status,\n statusText: response.statusText ?? '',\n headers: new Headers(response.headers),\n config,\n raw: response.raw ?? null\n }\n }\n}\n\n/**\n * Creates an adapter for deterministic local handlers and test transports.\n * Returning a Response or HTTPResponse keeps full control over status and\n * headers; any other value becomes a successful 200 payload.\n */\nexport function createMockAdapter(\n handler: (config: RequestConfig) => unknown | PromiseLike<unknown>\n): HTTPAdapter {\n return async config => {\n const result = await handler(config)\n if (isResponse(result) || isHTTPResponse(result)) return result\n return {\n data: result,\n status: 200,\n statusText: 'OK',\n headers: new Headers(),\n config,\n raw: null\n }\n }\n}\n\n/** XMLHttpRequest adapter for upload and download progress events. */\nexport function createXHRAdapter(): HTTPAdapter {\n return config => new Promise<Response>((resolve, reject) => {\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('HTTP: 当前环境没有可用的 XMLHttpRequest'))\n return\n }\n const xhr = new XMLHttpRequest()\n xhr.open(config.method, config.url, true)\n if (config.responseType === 'arrayBuffer') xhr.responseType = 'arraybuffer'\n else if (config.responseType === 'blob') xhr.responseType = 'blob'\n const signal = config.signal ?? config.state\n const abort = (): void => xhr.abort()\n if (signal?.aborted) {\n reject(Object.assign(new Error('The operation was aborted'), { name: 'AbortError' }))\n return\n }\n const cleanup = (): void => signal?.removeEventListener('abort', abort)\n signal?.addEventListener('abort', abort, { once: true })\n xhr.upload.onprogress = event => config.onUploadProgress?.(toProgress(event.loaded, event.lengthComputable ? event.total : undefined))\n xhr.onprogress = event => config.onDownloadProgress?.(toProgress(event.loaded, event.lengthComputable ? event.total : undefined))\n xhr.onload = () => {\n cleanup()\n const headers = new Headers()\n xhr.getAllResponseHeaders().trim().split(/[\\r\\n]+/).forEach(line => {\n const separator = line.indexOf(':')\n if (separator > 0) headers.set(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n })\n const body = config.responseType === 'arrayBuffer' || config.responseType === 'blob'\n ? xhr.response\n : xhr.responseText\n const response = new Response(body, {\n status: xhr.status,\n statusText: xhr.statusText,\n headers\n })\n Object.defineProperty(response, PROGRESS_HANDLED, { value: true })\n resolve(response)\n }\n xhr.onerror = () => { cleanup(); reject(new Error('HTTP: XMLHttpRequest 网络错误')) }\n xhr.onabort = () => {\n cleanup()\n reject(Object.assign(new Error('The operation was aborted'), { name: 'AbortError' }))\n }\n try {\n const headers = new Headers(config.headers)\n const body = encodeBody(config.body, headers, config.method)\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n xhr.send((body ?? null) as Document | XMLHttpRequestBodyInit | null)\n } catch (error) {\n cleanup()\n reject(error)\n }\n })\n}\n\n/** Explicit fetch transport for applications that do not want the built-in Axios transport. */\nexport function createFetchAdapter(): HTTPAdapter {\n return fetchAdapter\n}\n\nexport interface HTTPClientOptions {\n baseURL?: string\n headers?: HeadersInit\n timeout?: number\n adapter?: HTTPAdapter\n retry?: number\n retryDelay?: RetryDelay\n shouldRetry?: (error: Error, attempt: number) => boolean | PromiseLike<boolean>\n concurrency?: number\n dedupe?: boolean\n}\n\nexport interface InterceptorManager<T> {\n use<TResult = T>(\n onFulfilled?: (value: T) => TResult | PromiseLike<TResult>,\n onRejected?: (error: unknown) => TResult | PromiseLike<TResult>\n ): number\n eject(id: number): void\n clear(): void\n}\n\nexport interface HTTPInterceptors {\n readonly request: InterceptorManager<RequestConfig>\n readonly response: InterceptorManager<HTTPResponse<unknown>>\n}\n\nexport interface HTTPClient {\n readonly interceptors: HTTPInterceptors\n request<T = unknown>(options: RequestOptions): Promise<HTTPResponse<T>>\n get<T = unknown>(url: string, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n delete<T = unknown>(url: string, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n head<T = unknown>(url: string, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n post<T = unknown>(url: string, body?: unknown, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n put<T = unknown>(url: string, body?: unknown, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n patch<T = unknown>(url: string, body?: unknown, options?: Omit<RequestOptions, 'url' | 'method' | 'body'>): Promise<HTTPResponse<T>>\n}\n\nexport interface ConcurrencyLimiter {\n <T>(task: () => T | PromiseLike<T>): Promise<T>\n}\n\nexport class HTTPError extends Error {\n readonly status: number\n readonly statusText: string\n readonly data: unknown\n readonly config: RequestConfig\n readonly response: HTTPResponse<unknown>\n\n constructor(response: HTTPResponse<unknown>) {\n super(`HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : ''}`)\n this.name = 'HTTPError'\n this.status = response.status\n this.statusText = response.statusText\n this.data = response.data\n this.config = response.config\n this.response = response\n }\n}\n\nexport class TimeoutError extends Error {\n readonly code = 'ETIMEDOUT'\n\n constructor(timeout: number) {\n super(`HTTP 请求超过 ${timeout}ms 未完成`)\n this.name = 'TimeoutError'\n }\n}\n\nexport const HTTP_KEY = createInjectionKey<HTTPClient>('vobs.http')\n\nexport interface HTTPPluginOptions extends HTTPClientOptions {\n client?: HTTPClient\n}\n\nexport function createHTTPClient(options: HTTPClientOptions = {}): HTTPClient {\n const defaults = normalizeClientOptions(options)\n const requestInterceptors = createInterceptors<RequestConfig>()\n const responseInterceptors = createInterceptors<HTTPResponse<unknown>>()\n const adapter = options.adapter ?? createAxiosAdapter()\n const limiter = createConcurrencyLimiter(options.concurrency ?? Infinity)\n const pending = new Map<string, Promise<HTTPResponse<unknown>>>()\n\n async function request<T>(input: RequestOptions): Promise<HTTPResponse<T>> {\n const initial = normalizeRequest(input, defaults)\n const dedupeKey = getDedupeKey(initial, options.dedupe ?? false)\n if (dedupeKey) {\n const existing = pending.get(dedupeKey)\n if (existing) return existing as Promise<HTTPResponse<T>>\n const shared = executeDebugRequest(initial)\n pending.set(dedupeKey, shared)\n void shared.finally(() => pending.delete(dedupeKey)).catch(() => undefined)\n return shared as Promise<HTTPResponse<T>>\n }\n return executeDebugRequest(initial) as Promise<HTTPResponse<T>>\n }\n\n function executeDebugRequest(initial: RequestConfig): Promise<HTTPResponse<unknown>> {\n const id = nextHTTPDebugId++\n const startedAt = Date.now()\n const context = {\n ...getRuntimeDebugContext(),\n ...initial.debugContext\n }\n emitHTTPDebug({\n id,\n phase: 'start',\n status: 'loading',\n url: initial.url,\n method: initial.method,\n headers: debugHeaders(initial.headers),\n requestBody: debugValue(initial.body),\n startedAt,\n attempt: 0,\n retries: 0,\n context: Object.keys(context).length > 0 ? context : undefined\n })\n return executeRequest(initial, id).then(response => {\n const endedAt = Date.now()\n emitHTTPDebug({\n id,\n phase: 'end',\n status: 'success',\n url: response.config.url,\n method: response.config.method,\n headers: debugHeaders(response.config.headers),\n requestBody: debugValue(response.config.body),\n startedAt,\n endedAt,\n duration: endedAt - startedAt,\n attempt: 0,\n retries: 0,\n responseStatus: response.status,\n responseBody: debugValue(response.data),\n context: Object.keys(context).length > 0 ? context : undefined\n })\n return response\n }, error => {\n const endedAt = Date.now()\n const cancelled = isAbortError(error)\n emitHTTPDebug({\n id,\n phase: 'end',\n status: cancelled ? 'cancelled' : 'error',\n url: initial.url,\n method: initial.method,\n headers: debugHeaders(initial.headers),\n requestBody: debugValue(initial.body),\n startedAt,\n endedAt,\n duration: endedAt - startedAt,\n attempt: 0,\n retries: 0,\n responseStatus: error instanceof HTTPError ? error.status : undefined,\n responseBody: error instanceof HTTPError ? debugValue(error.data) : undefined,\n error: { name: error instanceof Error ? error.name : 'Error', message: error instanceof Error ? error.message : String(error) },\n context: Object.keys(context).length > 0 ? context : undefined\n })\n throw error\n })\n }\n\n async function executeRequest(initial: RequestConfig, debugId?: number): Promise<HTTPResponse<unknown>> {\n const requestChain = requestInterceptors.handlers()\n const responseChain = responseInterceptors.handlers().reverse()\n\n let chain: Promise<unknown> = Promise.resolve(initial)\n for (const handler of requestChain) {\n chain = chain.then(handler.onFulfilled, handler.onRejected)\n }\n chain = chain.then(config => limiter(() => executeWithRetry(config as RequestConfig, adapter, debugId)))\n for (const handler of responseChain) {\n chain = chain.then(handler.onFulfilled, handler.onRejected)\n }\n return chain as Promise<HTTPResponse<unknown>>\n }\n\n function method<T>(methodName: HTTPMethod, url: string, input: Omit<RequestOptions, 'url' | 'method' | 'body'> = {}): Promise<HTTPResponse<T>> {\n return request<T>({ ...input, url, method: methodName })\n }\n\n function methodWithBody<T>(methodName: HTTPMethod, url: string, body: unknown, input: Omit<RequestOptions, 'url' | 'method' | 'body'> = {}): Promise<HTTPResponse<T>> {\n return request<T>({ ...input, url, method: methodName, body })\n }\n\n const client: HTTPClient = {\n interceptors: {\n request: requestInterceptors,\n response: responseInterceptors\n },\n request,\n get: (url, input) => method('GET', url, input),\n delete: (url, input) => method('DELETE', url, input),\n head: (url, input) => method('HEAD', url, input),\n post: (url, body, input) => methodWithBody('POST', url, body, input),\n put: (url, body, input) => methodWithBody('PUT', url, body, input),\n patch: (url, body, input) => methodWithBody('PATCH', url, body, input)\n }\n return client\n\n async function executeWithRetry(config: RequestConfig, requestAdapter: HTTPAdapter, debugId?: number): Promise<HTTPResponse<unknown>> {\n const controller = new AbortController()\n const inputSignal = config.signal ?? config.state\n let timedOut = false\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n const abortFromInput = (): void => controller.abort(inputSignal?.reason)\n\n if (inputSignal) {\n if (inputSignal.aborted) controller.abort(inputSignal.reason)\n else inputSignal.addEventListener('abort', abortFromInput, { once: true })\n }\n if (config.timeout !== undefined && config.timeout > 0) {\n timeoutId = setTimeout(() => {\n timedOut = true\n controller.abort()\n }, config.timeout)\n }\n\n const adapterConfig: RequestConfig = { ...config, signal: controller.signal }\n let attempt = 0\n try {\n while (true) {\n try {\n const result = await requestAdapter(adapterConfig)\n const response = isHTTPResponse(result)\n ? result\n : await parseResponse(result, adapterConfig)\n if (response.status < 200 || response.status >= 300) throw new HTTPError(response)\n return response\n } catch (error) {\n if (timedOut) throw new TimeoutError(config.timeout!)\n if (inputSignal?.aborted || isAbortError(error)) throw error\n const nextAttempt = attempt + 1\n if (nextAttempt > (config.retry ?? 0)) throw toError(error)\n const shouldRetry = config.shouldRetry\n ? await config.shouldRetry(toError(error), nextAttempt)\n : isRetryable(error)\n if (!shouldRetry) throw toError(error)\n attempt = nextAttempt\n const retryContext = {\n ...getRuntimeDebugContext(),\n ...config.debugContext\n }\n emitHTTPDebug({\n id: debugId ?? 0,\n phase: 'retry',\n status: 'retrying',\n url: config.url,\n method: config.method,\n headers: debugHeaders(config.headers),\n requestBody: debugValue(config.body),\n startedAt: Date.now(),\n attempt,\n retries: attempt,\n error: { name: toError(error).name, message: toError(error).message },\n context: Object.keys(retryContext).length > 0 ? retryContext : undefined\n })\n const delay = resolveRetryDelay(config.retryDelay ?? 0, attempt, toError(error))\n if (delay > 0) await wait(delay)\n }\n }\n } finally {\n if (timeoutId !== undefined) clearTimeout(timeoutId)\n inputSignal?.removeEventListener('abort', abortFromInput)\n }\n }\n}\n\nfunction debugHeaders(headers: HTTPHeaders): HTTPHeaders {\n const safe: HTTPHeaders = {}\n for (const [key, value] of Object.entries(headers)) {\n if (/authorization|cookie|token|password|secret|api[-_]?key/i.test(key)) continue\n safe[key] = value\n }\n return safe\n}\n\nfunction debugValue(value: unknown, depth = 0): unknown {\n if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return value\n if (value === undefined) return undefined\n if (depth >= 2) return '[MaxDepth]'\n if (typeof value === 'bigint') return `${value}n`\n if (typeof value === 'function') return `[Function ${value.name || 'anonymous'}]`\n if (typeof value !== 'object') return String(value)\n if (Array.isArray(value)) return value.slice(0, 20).map(item => debugValue(item, depth + 1))\n try {\n return Object.fromEntries(Object.entries(value).slice(0, 30).map(([key, item]) => [key, debugValue(item, depth + 1)]))\n } catch {\n return '[Uninspectable]'\n }\n}\n\nexport function httpPlugin(options: HTTPPluginOptions = {}): VobsPlugin {\n return {\n name: '@vobs/http',\n version: '0.1.0',\n install(context) {\n const client = options.client ?? createHTTPClient(options)\n context.provide(HTTP_KEY, client)\n }\n }\n}\n\nfunction createInterceptors<T>(): InterceptorManager<T> & {\n handlers(): Array<{ onFulfilled: (value: unknown) => unknown; onRejected: (error: unknown) => unknown }>\n} {\n type Handler = {\n onFulfilled: (value: unknown) => unknown\n onRejected: (error: unknown) => unknown\n }\n const entries: Array<Handler | null> = []\n\n return {\n use(\n onFulfilled?: (value: T) => unknown | PromiseLike<unknown>,\n onRejected?: (error: unknown) => unknown | PromiseLike<unknown>\n ) {\n entries.push({\n onFulfilled: (value: unknown) => onFulfilled ? onFulfilled(value as T) : value,\n onRejected: (error: unknown) => onRejected ? onRejected(error) : Promise.reject(error)\n })\n return entries.length - 1\n },\n eject(id) {\n if (id >= 0 && id < entries.length) entries[id] = null\n },\n clear() {\n entries.fill(null)\n },\n handlers() {\n return entries.filter((entry): entry is Handler => entry !== null)\n }\n }\n}\n\nfunction normalizeClientOptions(options: HTTPClientOptions): Required<Pick<HTTPClientOptions, 'baseURL' | 'headers' | 'timeout' | 'retry' | 'retryDelay'>> & Pick<HTTPClientOptions, 'shouldRetry'> {\n return {\n baseURL: options.baseURL ?? '',\n headers: options.headers ?? {},\n timeout: validateTimeout(options.timeout ?? 0),\n retry: validateRetry(options.retry ?? 0),\n retryDelay: options.retryDelay ?? 0,\n shouldRetry: options.shouldRetry\n }\n}\n\nexport function createConcurrencyLimiter(limit: number): ConcurrencyLimiter {\n if (limit !== Infinity && (!Number.isFinite(limit) || limit < 1 || !Number.isInteger(limit))) {\n throw new Error('HTTP: concurrency 必须是大于等于 1 的整数')\n }\n let active = 0\n const queue: Array<() => void> = []\n\n return <T>(task: () => T | PromiseLike<T>): Promise<T> => new Promise<T>((resolve, reject) => {\n const run = (): void => {\n active++\n Promise.resolve().then(task).then(resolve, reject).finally(() => {\n active--\n queue.shift()?.()\n })\n }\n if (active < limit) run()\n else queue.push(run)\n })\n}\n\nfunction getDedupeKey(config: RequestConfig, defaultEnabled: boolean): string | undefined {\n if (config.dedupe === false) return undefined\n if (config.dedupeKey) return config.dedupeKey\n if (!(config.dedupe ?? defaultEnabled)) return undefined\n if (config.method !== 'GET' && config.method !== 'HEAD') return undefined\n return `${config.method} ${config.url}`\n}\n\nfunction normalizeRequest(input: RequestOptions, defaults: ReturnType<typeof normalizeClientOptions>): RequestConfig {\n if (!input.url) throw new Error('HTTP: url 不能为空')\n const method = (input.method ?? 'GET').toUpperCase() as HTTPMethod\n const timeout = validateTimeout(input.timeout ?? defaults.timeout)\n const retry = validateRetry(input.retry ?? defaults.retry)\n const retryDelay = input.retryDelay ?? defaults.retryDelay\n const signal = input.signal ?? input.state\n if (input.signal && input.state && input.signal !== input.state) {\n throw new Error('HTTP: signal 和 state 不能同时指向不同的 AbortSignal')\n }\n return {\n ...input,\n url: appendParams(resolveURL(input.url, input.baseURL ?? defaults.baseURL), input.params),\n method,\n headers: toHeaders(defaults.headers, input.headers),\n timeout,\n retry,\n retryDelay,\n shouldRetry: input.shouldRetry ?? defaults.shouldRetry,\n signal\n }\n}\n\nasync function fetchAdapter(config: RequestConfig): Promise<Response> {\n if (typeof fetch !== 'function') throw new Error('HTTP: 当前环境没有可用的 fetch')\n const headers = new Headers(config.headers)\n const body = encodeBody(config.body, headers, config.method)\n return fetch(config.url, {\n method: config.method,\n headers,\n body,\n signal: config.signal,\n cache: config.cache,\n credentials: config.credentials,\n mode: config.mode\n })\n}\n\nasync function parseResponse(response: Response, config: RequestConfig): Promise<HTTPResponse<unknown>> {\n const data = config.responseType === 'response'\n ? response\n : await parseBody(response, config.responseType, hasHandledProgress(response) ? undefined : config.onDownloadProgress)\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n config,\n raw: response\n }\n}\n\nconst builtInAxiosRequest: AxiosRequest = async <T = unknown>(config: AxiosRequestConfigLike) => {\n const responseType = config.responseType === 'response' ? 'arraybuffer' : toAxiosResponseType(config.responseType)\n const response = await axios.request<T>({\n url: config.url,\n method: config.method,\n headers: config.headers,\n data: config.method === 'GET' || config.method === 'HEAD' ? undefined : config.body,\n signal: config.signal,\n timeout: config.timeout,\n responseType,\n withCredentials: toAxiosCredentials(config.credentials),\n validateStatus: () => true,\n adapter: 'fetch',\n fetchOptions: compactFetchOptions(config),\n onUploadProgress: event => config.onUploadProgress?.(toAxiosProgress(event.loaded, event.total)),\n onDownloadProgress: event => config.onDownloadProgress?.(toAxiosProgress(event.loaded, event.total))\n })\n const raw = config.responseType === 'response'\n ? toRawResponse(response.data, response.status, response.statusText, response.headers as unknown as HeadersInit)\n : null\n return {\n data: (raw ?? response.data) as T,\n status: response.status,\n statusText: response.statusText,\n headers: (typeof response.headers?.toJSON === 'function' ? response.headers.toJSON() : response.headers) as HeadersInit,\n raw\n }\n}\n\nfunction toAxiosCredentials(credentials?: RequestCredentials): boolean | undefined {\n if (credentials === 'include') return true\n if (credentials === 'omit') return false\n return undefined\n}\n\nfunction toRawResponse(data: unknown, status: number, statusText: string | undefined, headers: HeadersInit | undefined): Response {\n if (typeof Response === 'undefined') throw new Error('HTTP: 当前环境没有可用的 Response')\n const body = status === 204 || status === 205 ? null : data as BodyInit | null | undefined\n return new Response(body, {\n status,\n statusText: statusText ?? '',\n headers: new Headers(headers)\n })\n}\n\nfunction toAxiosResponseType(responseType?: HTTPResponseType): 'arraybuffer' | 'blob' | 'json' | 'text' | undefined {\n if (responseType === 'arrayBuffer') return 'arraybuffer'\n if (responseType === 'response') return undefined\n return responseType\n}\n\nfunction compactFetchOptions(config: RequestConfig): Record<string, unknown> | undefined {\n const options = {\n cache: config.cache,\n credentials: config.credentials,\n mode: config.mode\n }\n const entries = Object.entries(options).filter(([, value]) => value !== undefined)\n return entries.length === 0 ? undefined : Object.fromEntries(entries)\n}\n\nfunction toAxiosProgress(loaded: number, total: number | undefined): HTTPProgress {\n return {\n loaded,\n total,\n percent: total && total > 0 ? loaded / total * 100 : undefined\n }\n}\n\nasync function parseBody(\n response: Response,\n responseType?: HTTPResponseType,\n onDownloadProgress?: HTTPProgressHandler\n): Promise<unknown> {\n if (response.status === 204 || response.status === 205) return null\n const bytes = onDownloadProgress && response.body\n ? await readResponseBytes(response, onDownloadProgress)\n : undefined\n if (responseType === 'blob') return bytes ? new Blob([bytes as unknown as BlobPart]) : response.blob()\n if (responseType === 'arrayBuffer') return bytes ? bytes.buffer : response.arrayBuffer()\n const text = bytes ? new TextDecoder().decode(bytes) : await response.text()\n if (responseType === 'text') return text\n if (!text) return null\n if (responseType === 'json' || response.headers.get('content-type')?.includes('json')) {\n try {\n return JSON.parse(text)\n } catch {\n throw new Error('HTTP: 响应不是有效 JSON')\n }\n }\n return text\n}\n\nasync function readResponseBytes(response: Response, onProgress: HTTPProgressHandler): Promise<Uint8Array> {\n const reader = response.body!.getReader()\n const chunks: Uint8Array[] = []\n const totalHeader = response.headers.get('content-length')\n const parsedTotal = totalHeader ? Number(totalHeader) : NaN\n const total = Number.isFinite(parsedTotal) && parsedTotal >= 0 ? parsedTotal : undefined\n let loaded = 0\n while (true) {\n const next = await reader.read()\n if (next.done) break\n chunks.push(next.value)\n loaded += next.value.byteLength\n onProgress(toProgress(loaded, total))\n }\n const result = new Uint8Array(loaded)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.byteLength\n }\n return result\n}\n\nfunction isHTTPResponse(value: unknown): value is HTTPResponse<unknown> {\n return typeof value === 'object' && value !== null && 'data' in value && 'status' in value && 'config' in value\n}\n\nfunction isResponse(value: unknown): value is Response {\n return typeof Response !== 'undefined' && value instanceof Response\n}\n\nfunction hasHandledProgress(response: Response): boolean {\n return Boolean((response as Response & { [PROGRESS_HANDLED]?: boolean })[PROGRESS_HANDLED])\n}\n\nfunction encodeBody(body: unknown, headers: Headers, method: HTTPMethod): BodyInit | undefined {\n if (body === undefined || body === null || method === 'GET' || method === 'HEAD') return undefined\n if (typeof body === 'string' || body instanceof Blob || body instanceof FormData\n || body instanceof ArrayBuffer || body instanceof URLSearchParams) return body as BodyInit\n if (!headers.has('content-type')) headers.set('content-type', 'application/json')\n return JSON.stringify(body)\n}\n\nfunction toHeaders(...inputs: Array<HeadersInit | undefined>): HTTPHeaders {\n const headers = new Headers()\n for (const input of inputs) {\n if (!input) continue\n new Headers(input).forEach((value, key) => headers.set(key, value))\n }\n const result: HTTPHeaders = {}\n headers.forEach((value, key) => { result[key] = value })\n return result\n}\n\nfunction resolveURL(url: string, baseURL: string): string {\n if (!baseURL || /^[a-z][a-z\\d+.-]*:/i.test(url) || url.startsWith('//')) return url\n if (!baseURL) return url\n return `${baseURL.replace(/\\/$/, '')}/${url.replace(/^\\//, '')}`\n}\n\nfunction appendParams(url: string, params?: Record<string, unknown> | URLSearchParams): string {\n if (!params) return url\n const query = params instanceof URLSearchParams ? params : toSearchParams(params)\n const serialized = query.toString()\n if (!serialized) return url\n return `${url}${url.includes('?') ? '&' : '?'}${serialized}`\n}\n\nfunction toSearchParams(params: Record<string, unknown>): URLSearchParams {\n const search = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) continue\n if (Array.isArray(value)) {\n for (const item of value) search.append(key, String(item))\n } else if (typeof value === 'object') {\n search.set(key, JSON.stringify(value))\n } else {\n search.set(key, String(value))\n }\n }\n return search\n}\n\nfunction isRetryable(error: unknown): boolean {\n return error instanceof HTTPError\n ? error.status === 429 || error.status >= 500\n : !isAbortError(error)\n}\n\nfunction isAbortError(error: unknown): boolean {\n return Boolean(error) && typeof error === 'object'\n && ((error as { name?: unknown }).name === 'AbortError'\n || (error as { code?: unknown }).code === 'ERR_CANCELED')\n}\n\nfunction resolveRetryDelay(retryDelay: RetryDelay, attempt: number, error: Error): number {\n const delay = typeof retryDelay === 'function' ? retryDelay(attempt, error) : retryDelay\n if (!Number.isFinite(delay) || delay < 0) throw new Error('HTTP: retryDelay 必须是大于等于 0 的有限数字')\n return delay\n}\n\nfunction validateRetry(retry: number): number {\n if (!Number.isInteger(retry) || retry < 0) throw new Error('HTTP: retry 必须是大于等于 0 的整数')\n return retry\n}\n\nfunction validateTimeout(timeout: number): number {\n if (!Number.isFinite(timeout) || timeout < 0) throw new Error('HTTP: timeout 必须是大于等于 0 的有限数字')\n return timeout\n}\n\nfunction toError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error))\n}\n\nfunction wait(delay: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, delay))\n}\n\nfunction toProgress(loaded: number, total: number | undefined): HTTPProgress {\n return {\n loaded,\n total,\n percent: total && total > 0 ? loaded / total * 100 : undefined\n }\n}\n","import {\n getDebugHooks,\n getOwnerDebugName,\n getSignalDebugName,\n setDebugHooks,\n untrack,\n type Dependency,\n type Effect,\n type Owner,\n type ReactivityDebugHooks,\n type ReadableSignal,\n type Signal,\n type Subscriber\n} from '@vobs/reactivity'\nimport {\n getRuntimeDebugHooks,\n getRuntimeDebugContext,\n setRuntimeDebugHooks,\n type RuntimeDebugHooks,\n type RuntimeDomMutation,\n type RuntimeErrorEvent,\n type RuntimeHydrationMismatch\n} from '@vobs/runtime'\nimport { normalizeVobsError } from '@vobs/runtime'\nimport type { VobsContext, VobsPlugin } from '@vobs/vobs'\nimport {\n getHTTPDebugHooks,\n setHTTPDebugHooks,\n type HTTPDebugRequest\n} from '@vobs/http'\n\nexport type DependencyEdgeType =\n | 'state-to-effect'\n | 'state-to-memo'\n | 'memo-to-effect'\n | 'memo-to-memo'\n\nexport interface ComponentDebugNode {\n readonly id: string\n readonly name: string\n readonly ownerId: string\n readonly signals: readonly string[]\n readonly effects: readonly string[]\n readonly recentUpdates: readonly string[]\n readonly domUpdates: number\n readonly children: readonly ComponentDebugNode[]\n readonly mounted: boolean\n}\n\nexport interface SignalDebugInfo {\n readonly id: string\n readonly name: string\n readonly value: unknown\n readonly component: string\n readonly subscribers: number\n readonly createdAt: number\n readonly kind?: 'state' | 'memo'\n}\n\nexport interface DebugErrorInfo {\n readonly name: string\n readonly message: string\n readonly stack?: string\n readonly phase?: string\n readonly source?: string\n readonly code?: string\n readonly hint?: string\n readonly cause?: string\n readonly fix?: string\n readonly location?: { readonly file: string; readonly line: number; readonly column: number }\n readonly hydration?: RuntimeHydrationMismatch\n}\n\nexport interface EffectDebugInfo {\n readonly id: string\n readonly name: string\n readonly component: string\n readonly dependencies: readonly string[]\n readonly status: 'idle' | 'dirty' | 'running' | 'success' | 'error'\n readonly executionCount: number\n readonly lastExecutionTime: number\n readonly lastRunStatus?: 'success' | 'error' | 'cancelled'\n readonly lastDuration?: number\n readonly lastUpdateId?: string\n readonly lastError?: DebugErrorInfo\n readonly lastDomUpdates?: number\n}\n\nexport interface DependencyEdge {\n readonly from: string\n readonly to: string\n readonly type: DependencyEdgeType\n}\n\nexport interface EffectExecutionInfo {\n readonly effectId: string\n readonly component: string\n readonly duration: number\n readonly domUpdates: number\n readonly status?: 'success' | 'error' | 'cancelled'\n readonly error?: DebugErrorInfo\n}\n\nexport interface DomUpdateInfo {\n readonly operation: 'text' | 'property' | 'attribute' | 'insert' | 'remove'\n readonly target: string\n readonly parent?: string\n readonly key?: string\n readonly previousValue?: unknown\n readonly nextValue?: unknown\n readonly effectId?: string\n readonly route?: string\n readonly navigationId?: number\n readonly requestId?: number\n}\n\nexport interface UpdateTrace {\n readonly id: string\n readonly signalId: string\n readonly signalName: string\n readonly previousValue: unknown\n readonly nextValue: unknown\n readonly timestamp: number\n readonly effects: readonly EffectExecutionInfo[]\n readonly affectedSignals: readonly string[]\n readonly affectedEffects: readonly string[]\n readonly domUpdates: readonly DomUpdateInfo[]\n readonly status: 'completed' | 'error' | 'cancelled'\n readonly error?: DebugErrorInfo\n readonly duration: number\n readonly route?: string\n readonly navigationId?: number\n readonly requestIds?: readonly number[]\n}\n\nexport type LifecycleEventType =\n | 'owner-created' | 'owner-named' | 'owner-disposed'\n | 'signal-created' | 'signal-named' | 'signal-changed' | 'signal-disposed'\n | 'memo-created' | 'memo-invalidated'\n | 'effect-created' | 'effect-invalidated' | 'effect-run-start' | 'effect-run' | 'effect-disposed'\n\nexport interface LifecycleEvent {\n readonly id: string\n readonly type: LifecycleEventType\n readonly timestamp: number\n readonly targetId: string\n readonly name?: string\n readonly ownerId?: string\n readonly status?: 'success' | 'error' | 'cancelled'\n}\n\nexport interface NetworkRequestTrace {\n readonly id: number\n readonly url: string\n readonly method: string\n readonly status: 'loading' | 'retrying' | 'success' | 'error' | 'cancelled'\n readonly headers: Readonly<Record<string, string>>\n readonly requestBody?: unknown\n readonly startedAt: number\n readonly endedAt?: number\n readonly duration?: number\n readonly attempt: number\n readonly retries: number\n readonly responseStatus?: number\n readonly responseBody?: unknown\n readonly error?: { readonly name: string; readonly message: string }\n readonly source?: 'http' | 'router' | 'ssr'\n readonly test?: boolean\n readonly route?: string\n readonly navigationId?: number\n readonly dataRequestId?: number\n readonly environment?: 'client' | 'server'\n}\n\nexport type DevToolsErrorPhase = 'effect' | 'network' | 'global' | 'unhandledrejection' | 'route' | 'hydration' | 'render' | 'boundary' | 'application' | 'event'\nexport type DevToolsErrorOrigin = 'framework' | 'usage' | 'application' | 'unknown'\nexport type DevToolsErrorRecovery = 'propagated' | 'handled' | 'fallback' | 'retrying' | 'recovered'\n\nexport interface DevToolsErrorContext {\n readonly updateId?: string\n readonly effectId?: string\n readonly requestId?: number\n readonly navigationId?: number\n readonly route?: string\n readonly source?: string\n readonly ownerId?: string\n readonly component?: string\n readonly origin?: DevToolsErrorOrigin\n readonly code?: string\n readonly hint?: string\n readonly handled?: boolean\n readonly recovery?: DevToolsErrorRecovery\n}\n\nexport interface DevToolsErrorTrace extends DebugErrorInfo {\n readonly id: number\n readonly phase: DevToolsErrorPhase\n readonly firstOccurredAt: number\n readonly lastOccurredAt: number\n readonly count: number\n readonly phases: readonly DevToolsErrorPhase[]\n readonly origin: DevToolsErrorOrigin\n readonly handled: boolean\n readonly recovery: DevToolsErrorRecovery\n readonly updateId?: string\n readonly effectId?: string\n readonly requestId?: number\n readonly navigationId?: number\n readonly route?: string\n readonly ownerId?: string\n readonly component?: string\n}\n\nexport interface DevToolsCollectionState {\n readonly paused: boolean\n}\n\nexport interface DevToolsPrivacyOptions {\n /** Additional case-insensitive header names or fragments to omit. */\n readonly redactedHeaders?: readonly string[]\n /** Object keys whose values are replaced in captured/exported values. */\n readonly redactedFields?: readonly string[]\n /** Replace DOM values in diagnostics with the configured replacement. */\n readonly redactDomValues?: boolean\n readonly replacement?: string\n}\n\nexport interface DevToolsPerformanceEntry {\n readonly kind: 'update' | 'effect' | 'request'\n readonly id: string | number\n readonly label: string\n readonly duration: number\n readonly timestamp: number\n readonly status: string\n}\n\nexport interface DevToolsInspector {\n readonly label?: string\n inspect(value: unknown): unknown\n}\n\nexport interface DevToolsTimeline {\n readonly label?: string\n readonly getEvents?: () => readonly DevToolsTimelineEvent[]\n}\n\nexport interface DevToolsTimelineEvent {\n readonly id: string\n readonly timestamp: number\n readonly title: string\n readonly data?: unknown\n}\n\nexport interface DevToolsMetric {\n readonly label?: string\n read(): number | string\n}\n\nexport interface DevToolsExtensionSnapshot {\n readonly inspectors: readonly string[]\n readonly timelines: readonly string[]\n readonly timelineEvents: Readonly<Record<string, readonly DevToolsTimelineEvent[]>>\n readonly metrics: Readonly<Record<string, number | string>>\n}\n\nexport interface DevToolsDiagnosticSnapshot {\n readonly version: 1\n readonly exportedAt: number\n readonly updates: readonly UpdateTrace[]\n readonly lifecycle: readonly LifecycleEvent[]\n readonly network: readonly NetworkRequestTrace[]\n readonly errors: readonly DevToolsErrorTrace[]\n readonly performance: PerformanceMetrics\n readonly memory: MemorySnapshot\n readonly extensions: DevToolsExtensionSnapshot\n}\n\nexport interface DevToolsSSRRequestSnapshot {\n readonly version: 1\n readonly environment: 'server'\n readonly requests: readonly HTTPDebugRequest[]\n}\n\nexport type DevToolsSelection =\n | { readonly type: 'component'; readonly id: string }\n | { readonly type: 'signal'; readonly id: string }\n | { readonly type: 'effect'; readonly id: string }\n | { readonly type: 'update'; readonly id: string }\n | { readonly type: 'request'; readonly id: number }\n | { readonly type: 'error'; readonly id: number }\n\nexport const DEVTOOLS_REACTIVITY_EVENTS = [\n 'owner-created', 'owner-named', 'owner-disposed',\n 'signal-created', 'signal-named', 'signal-update', 'signal-disposed',\n 'effect-created', 'effect-invalidated', 'effect-run-start', 'effect-run', 'effect-disposed',\n 'memo-created', 'memo-update', 'update'\n] as const\n\nexport const DEVTOOLS_EVENTS = [...DEVTOOLS_REACTIVITY_EVENTS, 'lifecycle', 'dom-update', 'network-request', 'router', 'error', 'collection', 'collection-cleared', 'extension'] as const\n\nexport interface PerformanceMetrics {\n readonly updateCount: number\n readonly averageUpdateDuration: number\n readonly slowUpdateCount: number\n readonly effectExecutionCount: number\n readonly slowEffectCount: number\n readonly slowRequestCount: number\n readonly maxUpdateDuration: number\n readonly maxEffectDuration: number\n readonly maxRequestDuration: number\n}\n\nexport interface MemorySnapshot {\n readonly signalCount: number\n readonly effectCount: number\n readonly ownerCount: number\n readonly dependencyEdgeCount: number\n readonly leakedOwners: number\n}\n\nexport interface DevToolsTarget {\n __VOBS_DEVTOOLS__?: DevToolsAPI\n addEventListener?: (type: string, listener: (...args: any[]) => void) => void\n removeEventListener?: (type: string, listener: (...args: any[]) => void) => void\n}\n\nexport interface DevToolsOptions {\n readonly expose?: boolean\n readonly target?: DevToolsTarget\n readonly maxUpdates?: number\n readonly slowUpdateThreshold?: number\n readonly privacy?: DevToolsPrivacyOptions\n /** Explicit opt-in for state-changing debug actions. Disabled by default. */\n readonly allowMutations?: boolean\n /** Optional Router-like source for associating navigation/data events. */\n readonly router?: DevToolsRouterSource\n}\n\nexport interface DevToolsRouterSource {\n readonly devtools: {\n subscribe(event: string, callback: (payload: unknown) => void): () => void\n }\n}\n\nexport interface DevToolsAPI {\n getComponentTree(): readonly ComponentDebugNode[]\n getComponent(ownerId: string): ComponentDebugNode | null\n getSignals(): readonly SignalDebugInfo[]\n getSignal(signalId: string): SignalDebugInfo | null\n canMutate(): boolean\n setSignalValue(signalId: string, value: unknown): boolean\n getDependencies(signalId: string): readonly DependencyEdge[]\n getDependents(subscriberId: string): readonly DependencyEdge[]\n getEffects(): readonly EffectDebugInfo[]\n getUpdates(): readonly UpdateTrace[]\n getLifecycleEvents(): readonly LifecycleEvent[]\n getNetworkRequests(): readonly NetworkRequestTrace[]\n importSSRRequests(snapshot: unknown): void\n getRouterContext(): DevToolsRouterContext | null\n attachRouter(router: DevToolsRouterSource): () => void\n getErrors(): readonly DevToolsErrorTrace[]\n getPerformanceEntries(): readonly DevToolsPerformanceEntry[]\n getCollectionState(): DevToolsCollectionState\n setCollectionPaused(paused: boolean): void\n clearUpdates(): void\n clearNetworkRequests(): void\n clearErrors(): void\n clearLifecycleEvents(): void\n reportError(phase: DevToolsErrorPhase, error: unknown, context?: DevToolsErrorContext): void\n getPerformanceMetrics(): PerformanceMetrics\n takeMemorySnapshot(): MemorySnapshot\n exportDiagnostics(): DevToolsDiagnosticSnapshot\n importDiagnostics(snapshot: unknown): void\n registerInspector(id: string, inspector: DevToolsInspector): () => void\n registerTimeline(id: string, timeline?: DevToolsTimeline): () => void\n registerMetric(id: string, metric: DevToolsMetric): () => void\n getExtensionSnapshot(): DevToolsExtensionSnapshot\n inspectExtension(id: string, value: unknown): unknown\n onUpdate(callback: (trace: UpdateTrace) => void): () => void\n subscribe(event: string, callback: (...args: any[]) => void): () => void\n dispose(): void\n}\n\nexport interface DevToolsRouterContext {\n readonly route?: string\n readonly navigationId?: number\n readonly navigationStatus?: string\n readonly dataRequests: readonly {\n readonly id: number\n readonly kind: string\n readonly key: string\n readonly route?: string\n readonly status: string\n readonly startedAt?: number\n readonly endedAt?: number\n readonly duration?: number\n readonly navigationId?: number\n readonly trigger?: string\n readonly result?: unknown\n readonly error?: string\n readonly environment?: 'client' | 'server'\n }[]\n}\n\nexport interface DevToolsWireRequest {\n readonly source: 'vobs-devtools'\n readonly type: 'request'\n readonly id: string\n readonly method: string\n readonly args?: readonly unknown[]\n}\n\nexport interface DevToolsWireResponse {\n readonly source: 'vobs-devtools'\n readonly type: 'response'\n readonly id: string\n readonly ok: boolean\n readonly result?: unknown\n readonly error?: string\n}\n\nexport interface DevToolsWireEvent {\n readonly source: 'vobs-devtools'\n readonly type: 'event'\n readonly event: string\n readonly payload: unknown\n}\n\nexport interface DevToolsMessageTarget {\n addEventListener(type: string, listener: (event: DevToolsMessageEvent) => void): void\n removeEventListener(type: string, listener: (event: DevToolsMessageEvent) => void): void\n postMessage(message: unknown, targetOrigin: string): void\n}\n\nexport interface DevToolsMessageEvent {\n readonly data?: unknown\n readonly source?: unknown\n}\n\nexport interface DevToolsBridgeOptions {\n readonly target?: DevToolsMessageTarget\n readonly api?: DevToolsAPI | null\n}\n\nexport interface DevToolsPluginOptions extends DevToolsOptions {\n readonly enabled?: boolean\n}\n\ninterface OwnerRecord {\n readonly owner: Owner\n readonly id: string\n readonly parentId: string | null\n name: string\n disposed: boolean\n}\n\ninterface SignalRecord {\n readonly signal: ReadableSignal<unknown>\n readonly id: string\n readonly ownerId: string | null\n readonly createdAt: number\n name: string\n explicitName: boolean\n kind: 'state' | 'memo'\n disposed: boolean\n}\n\ninterface EffectRecord {\n readonly effect: Effect\n readonly id: string\n readonly ownerId: string | null\n status: 'idle' | 'dirty' | 'running' | 'success' | 'error'\n executionCount: number\n lastExecutionTime: number\n lastRunStatus: 'success' | 'error' | 'cancelled' | undefined\n lastDuration: number\n lastUpdateId: string | undefined\n lastError: DebugErrorInfo | undefined\n lastDomUpdates: number\n runningSince: number | null\n disposed: boolean\n}\n\ninterface PendingUpdate {\n readonly id: string\n readonly signal: SignalRecord\n readonly timestamp: number\n previousValue: unknown\n nextValue: unknown\n readonly affectedSignals: Set<string>\n readonly effectIds: Set<string>\n readonly executions: Map<string, EffectExecutionInfo>\n readonly domUpdates: DomUpdateInfo[]\n status: 'completed' | 'error' | 'cancelled'\n error: DebugErrorInfo | undefined\n context: {\n readonly route?: string\n readonly navigationId?: number\n readonly requestIds: Set<number>\n }\n}\n\nlet activeDevTools: DevToolsAPI | null = null\n\nexport function createDevTools(options: DevToolsOptions = {}): DevToolsAPI {\n activeDevTools?.dispose()\n\n const owners = new Map<string, OwnerRecord>()\n const ownerIds = new WeakMap<object, string>()\n const signals = new Map<string, SignalRecord>()\n const signalIds = new WeakMap<object, string>()\n const effects = new Map<string, EffectRecord>()\n const effectIds = new WeakMap<object, string>()\n const memoSignalIds = new WeakMap<object, string>()\n const edges = new Map<string, DependencyEdge>()\n const listeners = new Map<string, Set<(...args: any[]) => void>>()\n const updates: UpdateTrace[] = []\n const lifecycleEvents: LifecycleEvent[] = []\n const networkRequests = new Map<number, NetworkRequestTrace>()\n const errors = new Map<string, DevToolsErrorTrace>()\n const inspectors = new Map<string, DevToolsInspector>()\n const timelines = new Map<string, DevToolsTimeline>()\n const metrics = new Map<string, DevToolsMetric>()\n let routerContext: DevToolsRouterContext | null = null\n const routerStops = new Map<DevToolsRouterSource, { readonly stop: () => void; refs: number }>()\n let nextErrorId = 1\n let collectionPaused = false\n const pendingUpdates: PendingUpdate[] = []\n const updateDurations: number[] = []\n const maxUpdates = Math.max(1, Math.floor(options.maxUpdates ?? 100))\n const slowUpdateThreshold = Math.max(0, options.slowUpdateThreshold ?? 16)\n let nextId = 1\n let updateCount = 0\n let effectExecutionCount = 0\n let disposed = false\n let pendingFlushScheduled = false\n let activeEffectId: string | null = null\n const privacy = normalizePrivacyOptions(options.privacy)\n const allowMutations = options.allowMutations === true\n\n function now(): number {\n return typeof performance === 'undefined' ? Date.now() : performance.now()\n }\n\n function emit(event: string, ...args: any[]): void {\n if (collectionPaused && event !== 'collection' && event !== 'collection-cleared') return\n const callbacks = [\n ...(listeners.get(event) ?? []),\n ...(listeners.get('*') ?? [])\n ]\n for (const callback of callbacks) {\n try {\n callback(...args)\n } catch {\n // A DevTools listener must never affect the application.\n }\n }\n }\n\n function safeExtensionCall<T>(read: () => T, fallback: T): T {\n try { return read() } catch { return fallback }\n }\n\n function getExtensionSnapshot(): DevToolsExtensionSnapshot {\n const extensionMetrics: Record<string, number | string> = {}\n const extensionTimelineEvents: Record<string, readonly DevToolsTimelineEvent[]> = {}\n for (const [id, timeline] of timelines) {\n const events = safeExtensionCall(() => timeline.getEvents?.() ?? [], [])\n extensionTimelineEvents[id] = events.map(event => ({\n ...event,\n data: serializeForDevTools(event.data, new Set<object>(), 0, privacy)\n })).slice(-maxUpdates)\n }\n for (const [id, metric] of metrics) {\n const value = safeExtensionCall(() => metric.read(), 0)\n extensionMetrics[id] = typeof value === 'number' || typeof value === 'string' ? value : 0\n }\n return {\n inspectors: [...inspectors.keys()],\n timelines: [...timelines.keys()],\n timelineEvents: extensionTimelineEvents,\n metrics: extensionMetrics\n }\n }\n\n function recordLifecycle(\n type: LifecycleEventType,\n targetId: string,\n name?: string,\n ownerId?: string,\n status?: LifecycleEvent['status']\n ): void {\n if (disposed || collectionPaused || isInternalOwnerId(targetId) || (ownerId !== undefined && isInternalOwnerId(ownerId))) return\n const event: LifecycleEvent = {\n id: `lifecycle-${nextId++}`,\n type,\n timestamp: now(),\n targetId,\n name,\n ownerId,\n status\n }\n lifecycleEvents.push(event)\n while (lifecycleEvents.length > maxUpdates) lifecycleEvents.shift()\n emit('lifecycle', event)\n }\n\n function reportError(\n phase: DevToolsErrorPhase,\n error: unknown,\n context: DevToolsErrorContext = {}\n ): void {\n if (collectionPaused) return\n const debugError = toDebugError(error, phase)\n const metadata = classifyError(phase, error, context)\n const code = context.code ?? debugError.code ?? metadata.code\n const hint = context.hint ?? debugError.hint ?? metadata.hint\n const origin = context.origin ?? metadata.origin\n const ownerId = context.ownerId ?? readErrorProperty(error, 'vobsOwnerId')\n const component = context.component ?? readErrorProperty(error, 'vobsComponent')\n const source = context.source ?? debugError.source ?? readErrorProperty(error, 'vobsSource')\n const activeRoute = context.route ?? getRuntimeDebugContext()?.route ?? routerContext?.route\n const activeNavigationId = context.navigationId ?? getRuntimeDebugContext()?.navigationId ?? routerContext?.navigationId\n // The same exception can pass through effect -> boundary -> application\n // handlers. Keep one diagnostic and accumulate its phases instead of\n // presenting the propagation chain as duplicate errors.\n const key = diagnosticErrorKey({ origin, code, name: debugError.name, message: debugError.message, source, component })\n const previous = errors.get(key)\n const nowValue = Date.now()\n const trace: DevToolsErrorTrace = previous\n ? {\n ...previous,\n ...context,\n phase,\n phases: previous.phases.includes(phase) ? previous.phases : [...previous.phases, phase],\n lastOccurredAt: nowValue,\n count: previous.count + 1,\n code,\n hint,\n origin,\n handled: context.handled ?? previous.handled,\n recovery: mergeRecovery(previous.recovery, context.recovery),\n ownerId: ownerId ?? previous.ownerId,\n component: component ?? previous.component,\n source: source ?? previous.source,\n updateId: context.updateId ?? previous.updateId,\n effectId: context.effectId ?? previous.effectId,\n requestId: context.requestId ?? previous.requestId,\n route: activeRoute ?? previous.route,\n navigationId: activeNavigationId ?? previous.navigationId\n }\n : {\n ...debugError,\n ...context,\n source,\n code,\n hint,\n id: nextErrorId++,\n phase,\n phases: [phase],\n origin,\n handled: context.handled ?? false,\n recovery: context.recovery ?? 'propagated',\n firstOccurredAt: nowValue,\n lastOccurredAt: nowValue,\n count: 1,\n ownerId,\n component,\n route: activeRoute,\n navigationId: activeNavigationId\n }\n errors.set(key, trace)\n while (errors.size > maxUpdates) {\n const oldest = errors.keys().next().value\n if (typeof oldest !== 'string') break\n errors.delete(oldest)\n }\n emit('error', trace)\n }\n\n function ensureOwner(owner: Owner): OwnerRecord {\n const existingId = ownerIds.get(owner)\n if (existingId) {\n const existing = owners.get(existingId)\n if (existing) return existing\n }\n\n const record: OwnerRecord = {\n owner,\n id: owner.id,\n parentId: owner.parent?.id ?? null,\n name: getOwnerDebugName(owner) ?? (owner.parent ? 'Owner' : 'App'),\n disposed: owner.disposed\n }\n ownerIds.set(owner, record.id)\n owners.set(record.id, record)\n return record\n }\n\n function isInternalOwnerId(ownerId: string | null | undefined): boolean {\n const visited = new Set<string>()\n let current = ownerId === undefined ? null : ownerId\n while (current && !visited.has(current)) {\n visited.add(current)\n const record = owners.get(current)\n if (!record) return false\n if (debugComponentName(record.name).startsWith('DevTools')) return true\n current = record.parentId\n }\n return false\n }\n\n function isInternalSignal(record: SignalRecord): boolean {\n return isInternalOwnerId(record.ownerId)\n }\n\n function isNoisyViewportSignal(record: SignalRecord): boolean {\n return record.explicitName\n && (record.name === 'layout.viewport.width' || record.name === 'layout.viewport.height')\n }\n\n function hasMeaningfulDomUpdate(updates: readonly DomUpdateInfo[]): boolean {\n return updates.some(update => update.operation === 'insert'\n || update.operation === 'remove'\n || !Object.is(update.previousValue, update.nextValue))\n }\n\n function isInternalEffect(record: EffectRecord): boolean {\n return isInternalOwnerId(record.ownerId)\n }\n\n function errorComponentForOwner(ownerId: string | undefined): string | undefined {\n if (!ownerId) return undefined\n const record = owners.get(ownerId)\n if (!record) return undefined\n if (record.name !== 'Owner' && record.name !== 'dynamic') return record.name\n return errorComponentForOwner(record.parentId ?? undefined)\n }\n\n function ensureSignal(signal: ReadableSignal<unknown>, owner: Owner | null = null): SignalRecord {\n const existingId = signalIds.get(signal)\n if (existingId) {\n const existing = signals.get(existingId)\n if (existing) return existing\n }\n\n const id = `signal-${nextId++}`\n const explicitName = getSignalDebugName(signal)\n const ownerName = owner ? getOwnerDebugName(owner) : undefined\n const record: SignalRecord = {\n signal,\n id,\n ownerId: owner ? ensureOwner(owner).id : null,\n createdAt: Date.now(),\n name: explicitName ?? (ownerName ? `${ownerName} state` : 'runtime state'),\n explicitName: explicitName !== undefined,\n kind: 'state',\n disposed: false\n }\n signalIds.set(signal, id)\n signals.set(id, record)\n return record\n }\n\n function ensureEffect(effect: Effect, owner: Owner | null = null): EffectRecord {\n const existingId = effectIds.get(effect)\n if (existingId) {\n const existing = effects.get(existingId)\n if (existing) return existing\n }\n\n const id = `effect-${nextId++}`\n const record: EffectRecord = {\n effect,\n id,\n ownerId: owner ? ensureOwner(owner).id : null,\n status: 'dirty',\n executionCount: 0,\n lastExecutionTime: 0,\n lastRunStatus: undefined,\n lastDuration: 0,\n lastUpdateId: undefined,\n lastError: undefined,\n lastDomUpdates: 0,\n runningSince: null,\n disposed: effect.disposed\n }\n effectIds.set(effect, id)\n effects.set(id, record)\n return record\n }\n\n function ensureDependencySignal(dependency: Dependency): SignalRecord | null {\n const existingId = signalIds.get(dependency as object)\n if (existingId) return signals.get(existingId) ?? null\n if (!('value' in (dependency as object))) return null\n return ensureSignal(dependency as ReadableSignal<unknown>)\n }\n\n function edgeKey(from: string, to: string): string {\n return `${from}->${to}`\n }\n\n function trackDependency(dependency: Dependency, subscriber: Subscriber): void {\n const source = ensureDependencySignal(dependency)\n if (!source) return\n\n const memoId = memoSignalIds.get(subscriber as object)\n const effectId = effectIds.get(subscriber as object)\n const targetId = memoId ?? effectId\n if (!targetId) return\n\n const type: DependencyEdgeType = memoId\n ? source.kind === 'memo' ? 'memo-to-memo' : 'state-to-memo'\n : source.kind === 'memo' ? 'memo-to-effect' : 'state-to-effect'\n edges.set(edgeKey(source.id, targetId), {\n from: source.id,\n to: targetId,\n type\n })\n }\n\n function collectEffectIds(signalId: string): Set<string> {\n const effectsForSignal = new Set<string>()\n const visited = new Set<string>()\n const visit = (sourceId: string): void => {\n if (visited.has(sourceId)) return\n visited.add(sourceId)\n for (const edge of edges.values()) {\n if (edge.from !== sourceId) continue\n if (effects.has(edge.to)) {\n const effect = effects.get(edge.to)\n if (effect && !isInternalEffect(effect)) effectsForSignal.add(edge.to)\n }\n else visit(edge.to)\n }\n }\n visit(signalId)\n return effectsForSignal\n }\n\n function collectAffectedSignals(signalId: string): Set<string> {\n const affected = new Set<string>()\n const visited = new Set<string>()\n const visit = (sourceId: string): void => {\n if (visited.has(sourceId)) return\n visited.add(sourceId)\n if (signals.has(sourceId)) affected.add(sourceId)\n for (const edge of edges.values()) {\n if (edge.from === sourceId && signals.has(edge.to)) visit(edge.to)\n }\n }\n visit(signalId)\n return affected\n }\n\n function untrackDependency(dependency: Dependency, subscriber: Subscriber): void {\n const source = ensureDependencySignal(dependency)\n if (!source) return\n const targetId = memoSignalIds.get(subscriber as object) ?? effectIds.get(subscriber as object)\n if (targetId) edges.delete(edgeKey(source.id, targetId))\n }\n\n function signalInfo(record: SignalRecord, readValue = true): SignalDebugInfo {\n return {\n id: record.id,\n name: record.name,\n value: readValue ? serializeForDevTools(readSignal(record.signal), new Set<object>(), 0, privacy) : undefined,\n component: record.ownerId ? owners.get(record.ownerId)?.name ?? 'unknown' : 'unknown',\n subscribers: [...edges.values()].filter(edge => edge.from === record.id).length,\n createdAt: record.createdAt,\n kind: record.kind\n }\n }\n\n function readSignal(signal: ReadableSignal<unknown>): unknown {\n try {\n return untrack(() => signal.value)\n } catch (error) {\n return { type: 'thrown', message: toErrorMessage(error) }\n }\n }\n\n function effectInfo(record: EffectRecord): EffectDebugInfo {\n const component = record.ownerId ? owners.get(record.ownerId)?.name ?? 'unknown' : 'runtime'\n return {\n id: record.id,\n name: `${debugComponentName(component)} effect`,\n component,\n dependencies: [...edges.values()]\n .filter(edge => edge.to === record.id)\n .map(edge => edge.from),\n status: record.status,\n executionCount: record.executionCount,\n lastExecutionTime: record.lastExecutionTime,\n lastRunStatus: record.lastRunStatus,\n lastDuration: record.lastDuration,\n lastUpdateId: record.lastUpdateId,\n lastError: record.lastError,\n lastDomUpdates: record.lastDomUpdates\n }\n }\n\n function removeEdgesFor(ids: ReadonlySet<string>): void {\n for (const [key, edge] of edges) {\n if (ids.has(edge.from) || ids.has(edge.to)) edges.delete(key)\n }\n }\n\n function cleanupSignalRecord(record: SignalRecord): void {\n if (signals.get(record.id) !== record) return\n removeEdgesFor(new Set([record.id]))\n signals.delete(record.id)\n }\n\n function cleanupEffectRecord(record: EffectRecord): void {\n if (effects.get(record.id) !== record) return\n removeEdgesFor(new Set([record.id]))\n effects.delete(record.id)\n }\n\n function cleanupOwnerRecord(record: OwnerRecord): void {\n if (owners.get(record.id) !== record) return\n const removedIds = new Set<string>([record.id])\n for (const [id, signal] of signals) {\n if (signal.ownerId === record.id) {\n removedIds.add(id)\n signals.delete(id)\n }\n }\n for (const [id, effect] of effects) {\n if (effect.ownerId === record.id) {\n removedIds.add(id)\n effects.delete(id)\n }\n }\n removeEdgesFor(removedIds)\n owners.delete(record.id)\n }\n\n function debugComponentName(value: string): string {\n const separator = value.indexOf(' (')\n return separator > 0 ? value.slice(0, separator) : value\n }\n\n function buildComponentNode(record: OwnerRecord, activeIds: ReadonlySet<string>): ComponentDebugNode {\n const componentEffects = [...effects.values()]\n .filter(effect => !effect.disposed && effect.ownerId === record.id)\n const componentEffectIds = new Set(componentEffects.map(effect => effect.id))\n const componentUpdates = updates.filter(update => update.effects.some(effect => componentEffectIds.has(effect.effectId)))\n return {\n id: record.id,\n name: record.name,\n ownerId: record.id,\n signals: [...signals.values()]\n .filter(signal => !signal.disposed && signal.ownerId === record.id)\n .map(signal => signal.id),\n effects: componentEffects.map(effect => effect.id),\n recentUpdates: componentUpdates.slice(-10).map(update => update.id),\n domUpdates: componentUpdates.reduce((count, update) => count + update.domUpdates.length, 0),\n children: [...owners.values()]\n .filter(child => !child.disposed && child.parentId === record.id && activeIds.has(child.id))\n .map(child => buildComponentNode(child, activeIds)),\n mounted: !record.disposed\n }\n }\n\n function recordUpdate(pending: PendingUpdate): void {\n if (disposed || collectionPaused || isInternalSignal(pending.signal)) return\n if (isNoisyViewportSignal(pending.signal) && !hasMeaningfulDomUpdate(pending.domUpdates)) return\n const duration = Math.max(0, now() - pending.timestamp)\n const trace: UpdateTrace = {\n id: pending.id,\n signalId: pending.signal.id,\n signalName: pending.signal.name,\n previousValue: serializeForDevTools(pending.previousValue, new Set<object>(), 0, privacy),\n nextValue: serializeForDevTools(pending.nextValue, new Set<object>(), 0, privacy),\n timestamp: pending.timestamp,\n effects: [...pending.executions.values()],\n affectedSignals: [...pending.affectedSignals],\n affectedEffects: [...pending.effectIds],\n domUpdates: pending.domUpdates.slice(),\n status: pending.status,\n error: pending.error,\n duration,\n route: pending.context.route,\n navigationId: pending.context.navigationId,\n requestIds: [...pending.context.requestIds]\n }\n updates.push(trace)\n while (updates.length > maxUpdates) updates.shift()\n updateDurations.push(duration)\n while (updateDurations.length > maxUpdates) updateDurations.shift()\n updateCount++\n emit('update', trace)\n }\n\n function onFlushEnd(): void {\n const current = pendingUpdates.splice(0)\n for (const pending of current) recordUpdate(pending)\n }\n\n function schedulePendingFlush(): void {\n if (pendingFlushScheduled) return\n pendingFlushScheduled = true\n queueMicrotask(() => {\n if (disposed) {\n pendingUpdates.length = 0\n return\n }\n pendingFlushScheduled = false\n for (let index = pendingUpdates.length - 1; index >= 0; index--) {\n const pending = pendingUpdates[index]\n if (!pending || pending.effectIds.size > 0) continue\n pendingUpdates.splice(index, 1)\n recordUpdate(pending)\n }\n })\n }\n\n const hooks: ReactivityDebugHooks = {\n ownerCreated(owner) {\n const record = ensureOwner(owner)\n recordLifecycle('owner-created', record.id, record.name, record.parentId ?? undefined)\n emit('owner-created', record)\n },\n\n ownerNamed(owner, name) {\n const record = ensureOwner(owner)\n record.name = name\n if (isInternalOwnerId(record.id)) return\n for (const signal of signals.values()) {\n if (signal.ownerId === record.id && !signal.explicitName) signal.name = `${name} state`\n }\n recordLifecycle('owner-named', record.id, name, record.parentId ?? undefined)\n emit('owner-named', record)\n },\n\n ownerDisposed(owner) {\n const record = ensureOwner(owner)\n record.disposed = true\n const internal = isInternalOwnerId(record.id)\n if (!internal) {\n recordLifecycle('owner-disposed', record.id, record.name, record.parentId ?? undefined)\n emit('owner-disposed', record)\n }\n cleanupOwnerRecord(record)\n },\n\n signalCreated(signal, owner) {\n const record = ensureSignal(signal, owner)\n if (isInternalSignal(record)) return\n recordLifecycle('signal-created', record.id, record.name, record.ownerId ?? undefined)\n emit('signal-created', signalInfo(record, false))\n },\n\n signalNamed(signal, name) {\n const record = ensureSignal(signal)\n record.name = name\n record.explicitName = true\n if (isInternalSignal(record)) return\n recordLifecycle('signal-named', record.id, name, record.ownerId ?? undefined)\n emit('signal-named', signalInfo(record))\n },\n\n signalRead(signal, subscriber) {\n ensureSignal(signal)\n emit('signal-read', signal, subscriber)\n },\n\n signalChanged(signal, previousValue, nextValue) {\n const record = ensureSignal(signal)\n if (isInternalSignal(record)) return\n let pending = pendingUpdates.find(item => item.signal.signal === signal)\n if (pending) {\n pending.nextValue = nextValue\n const context = getRuntimeDebugContext()\n if (context?.route) pending.context = { ...pending.context, route: context.route }\n if (context?.navigationId !== undefined) pending.context = { ...pending.context, navigationId: context.navigationId }\n if (context?.dataRequestId !== undefined) pending.context.requestIds.add(context.dataRequestId)\n } else {\n pending = {\n id: `update-${nextId++}`,\n signal: record,\n timestamp: now(),\n previousValue,\n nextValue,\n affectedSignals: collectAffectedSignals(record.id),\n effectIds: collectEffectIds(record.id),\n executions: new Map(),\n domUpdates: [],\n status: 'completed',\n error: undefined,\n context: {\n route: getRuntimeDebugContext()?.route,\n navigationId: getRuntimeDebugContext()?.navigationId,\n requestIds: new Set(\n getRuntimeDebugContext()?.dataRequestId === undefined\n ? []\n : [getRuntimeDebugContext()!.dataRequestId!]\n )\n }\n }\n pendingUpdates.push(pending)\n }\n emit('signal-update', {\n ...signalInfo(record),\n previousValue: serializeForDevTools(previousValue, new Set<object>(), 0, privacy),\n nextValue: serializeForDevTools(nextValue, new Set<object>(), 0, privacy),\n updateId: pending.id\n })\n recordLifecycle('signal-changed', record.id, record.name, record.ownerId ?? undefined)\n if (pending.effectIds.size === 0) schedulePendingFlush()\n },\n\n signalDisposed(signal) {\n const record = ensureSignal(signal)\n record.disposed = true\n const internal = isInternalSignal(record)\n if (!internal) {\n recordLifecycle('signal-disposed', record.id, record.name, record.ownerId ?? undefined)\n emit('signal-disposed', record)\n }\n cleanupSignalRecord(record)\n },\n\n dependencyTracked(dependency, subscriber) {\n trackDependency(dependency, subscriber)\n },\n\n dependencyUntracked(dependency, subscriber) {\n untrackDependency(dependency, subscriber)\n },\n\n effectCreated(effect, owner) {\n const record = ensureEffect(effect, owner)\n if (isInternalEffect(record)) return\n recordLifecycle('effect-created', record.id, effectInfo(record).name, record.ownerId ?? undefined)\n emit('effect-created', effectInfo(record))\n },\n\n effectInvalidated(effect) {\n const record = ensureEffect(effect)\n if (isInternalEffect(record)) return\n record.status = 'dirty'\n recordLifecycle('effect-invalidated', record.id, effectInfo(record).name, record.ownerId ?? undefined)\n emit('effect-invalidated', effectInfo(record))\n },\n\n effectRunStart(effect) {\n const record = ensureEffect(effect)\n if (isInternalEffect(record)) return\n record.status = 'running'\n record.runningSince = now()\n activeEffectId = record.id\n recordLifecycle('effect-run-start', record.id, effectInfo(record).name, record.ownerId ?? undefined)\n emit('effect-run-start', effectInfo(record))\n },\n\n effectRunEnd(effect, error, handled = false) {\n const record = ensureEffect(effect)\n if (isInternalEffect(record)) return\n const end = now()\n const duration = record.runningSince === null ? 0 : Math.max(0, end - record.runningSince)\n const runStatus = error === undefined ? 'success' : 'error'\n const debugError = error === undefined ? undefined : toDebugError(error, 'effect')\n record.status = runStatus\n record.runningSince = null\n record.executionCount++\n record.lastExecutionTime = end\n record.lastRunStatus = runStatus\n record.lastDuration = duration\n record.lastError = debugError\n effectExecutionCount++\n const execution: EffectExecutionInfo = {\n effectId: record.id,\n component: record.ownerId ? owners.get(record.ownerId)?.name ?? 'unknown' : 'unknown',\n duration,\n domUpdates: 0,\n status: runStatus,\n error: debugError\n }\n for (const pending of pendingUpdates) {\n if (!pending.effectIds.has(record.id)) continue\n const domUpdates = pending.domUpdates.filter(update => update.effectId === record.id).length\n const completedExecution = { ...execution, domUpdates }\n pending.executions.set(record.id, completedExecution)\n if (error !== undefined) {\n pending.status = 'error'\n pending.error = debugError\n }\n record.lastUpdateId = pending.id\n record.lastDomUpdates = domUpdates\n }\n activeEffectId = null\n if (error !== undefined) {\n const update = [...pendingUpdates].reverse().find(item => item.effectIds.has(record.id))\n const errorOwnerId = readErrorProperty(error, 'vobsOwnerId')\n const errorComponent = readErrorProperty(error, 'vobsComponent')\n reportError('effect', error, {\n effectId: record.id,\n updateId: update?.id,\n ownerId: errorOwnerId ?? record.ownerId ?? undefined,\n component: errorComponent ?? errorComponentForOwner(record.ownerId ?? undefined),\n handled,\n recovery: handled ? 'handled' : 'propagated'\n })\n }\n recordLifecycle('effect-run', record.id, effectInfo(record).name, record.ownerId ?? undefined, runStatus)\n emit('effect-run', execution)\n },\n\n effectDisposed(effect) {\n const record = ensureEffect(effect)\n const internal = isInternalEffect(record)\n record.disposed = true\n record.status = 'idle'\n if (!internal) {\n recordLifecycle('effect-disposed', record.id, effectInfo(record).name, record.ownerId ?? undefined)\n emit('effect-disposed', record)\n }\n cleanupEffectRecord(record)\n },\n\n memoCreated(signal, subscriber, owner) {\n const record = ensureSignal(signal, owner)\n record.kind = 'memo'\n memoSignalIds.set(subscriber as object, record.id)\n if (isInternalSignal(record)) return\n recordLifecycle('memo-created', record.id, record.name, record.ownerId ?? undefined)\n emit('memo-created', signalInfo(record))\n },\n\n memoInvalidated(signal) {\n const record = ensureSignal(signal)\n if (isInternalSignal(record)) return\n recordLifecycle('memo-invalidated', record.id, record.name, record.ownerId ?? undefined)\n emit('memo-update', signalInfo(record))\n },\n\n flushEnd: onFlushEnd\n }\n\n const runtimeHooks: RuntimeDebugHooks = {\n domMutation(mutation: RuntimeDomMutation): void {\n if (!activeEffectId) return\n const effect = effects.get(activeEffectId)\n if (!effect || isInternalEffect(effect)) return\n const safeMutation: DomUpdateInfo = {\n ...mutation,\n previousValue: privacy.redactDomValues ? privacy.replacement : serializeForDevTools(mutation.previousValue, new Set<object>(), 0, privacy),\n nextValue: privacy.redactDomValues ? privacy.replacement : serializeForDevTools(mutation.nextValue, new Set<object>(), 0, privacy),\n effectId: activeEffectId,\n route: getRuntimeDebugContext()?.route,\n navigationId: getRuntimeDebugContext()?.navigationId,\n requestId: getRuntimeDebugContext()?.dataRequestId\n }\n for (const pending of pendingUpdates) {\n if (pending.effectIds.has(activeEffectId)) {\n pending.domUpdates.push(safeMutation)\n if (safeMutation.route) pending.context = { ...pending.context, route: safeMutation.route }\n if (safeMutation.navigationId !== undefined) pending.context = { ...pending.context, navigationId: safeMutation.navigationId }\n if (safeMutation.requestId !== undefined) pending.context.requestIds.add(safeMutation.requestId)\n }\n }\n emit('dom-update', safeMutation)\n },\n\n hydrationMismatch(event: RuntimeHydrationMismatch): void {\n reportError('hydration', Object.assign(new Error(event.message), {\n name: 'HydrationMismatchError',\n vobsCode: 'VOBS_HYDRATION_MISMATCH',\n vobsHydration: event\n }), {\n route: getRuntimeDebugContext()?.route,\n navigationId: getRuntimeDebugContext()?.navigationId\n })\n },\n\n error(event: RuntimeErrorEvent): void {\n const owner = ensureOwner(event.owner)\n const errorOwnerId = readErrorProperty(event.error, 'vobsOwnerId')\n const errorComponent = readErrorProperty(event.error, 'vobsComponent')\n reportError(event.phase === 'boundary' ? 'boundary' : 'event', event.error, {\n ownerId: errorOwnerId ?? owner.id,\n component: errorComponent ?? errorComponentForOwner(owner.id ?? undefined) ?? owner.name,\n handled: event.handled,\n recovery: event.recovery,\n })\n }\n }\n\n const httpHooks = {\n request(event: HTTPDebugRequest): void {\n if (collectionPaused) return\n const previous = networkRequests.get(event.id)\n const trace: NetworkRequestTrace = {\n id: event.id,\n url: event.url,\n method: event.method,\n status: event.status,\n headers: redactHeaders(event.headers, privacy),\n requestBody: serializeForDevTools(event.requestBody, new Set<object>(), 0, privacy),\n startedAt: previous?.startedAt ?? event.startedAt,\n endedAt: event.endedAt,\n duration: event.duration,\n attempt: Math.max(event.attempt, previous?.attempt ?? 0),\n retries: Math.max(event.retries, previous?.retries ?? 0),\n responseStatus: event.responseStatus,\n responseBody: serializeForDevTools(event.responseBody, new Set<object>(), 0, privacy),\n error: event.error,\n source: event.context?.environment === 'server' ? 'ssr' : 'http',\n test: event.context?.test,\n route: event.context?.route,\n navigationId: event.context?.navigationId,\n dataRequestId: event.context?.dataRequestId,\n environment: event.context?.environment\n }\n for (const pending of pendingUpdates) {\n if (event.context?.dataRequestId !== undefined && pending.context.requestIds.has(event.context.dataRequestId)) pending.context.requestIds.add(event.id)\n if (activeEffectId !== null && pending.effectIds.has(activeEffectId)) pending.context.requestIds.add(event.id)\n }\n networkRequests.set(event.id, trace)\n while (networkRequests.size > maxUpdates) {\n const oldest = networkRequests.keys().next().value\n if (typeof oldest !== 'number') break\n networkRequests.delete(oldest)\n }\n emit('network-request', trace)\n if (event.error) reportError('network', new Error(event.error.message), {\n requestId: event.id,\n route: event.context?.route,\n navigationId: event.context?.navigationId\n })\n }\n }\n\n function importSSRRequests(snapshot: unknown): void {\n if (disposed) return\n const events = parseSSRRequestSnapshot(snapshot)\n const ids = new Map<number, number>()\n for (const event of events) {\n const importedId = ids.get(event.id) ?? -(event.id + 1)\n ids.set(event.id, importedId)\n const trace: NetworkRequestTrace = {\n id: importedId,\n url: event.url,\n method: event.method,\n status: event.status,\n headers: redactHeaders(event.headers, privacy),\n requestBody: serializeForDevTools(event.requestBody, new Set<object>(), 0, privacy),\n startedAt: event.startedAt,\n endedAt: event.endedAt,\n duration: event.duration,\n attempt: event.attempt,\n retries: event.retries,\n responseStatus: event.responseStatus,\n responseBody: serializeForDevTools(event.responseBody, new Set<object>(), 0, privacy),\n error: event.error,\n source: 'ssr',\n test: event.context?.test,\n route: event.context?.route,\n navigationId: event.context?.navigationId,\n dataRequestId: event.context?.dataRequestId,\n environment: 'server'\n }\n networkRequests.set(importedId, trace)\n }\n while (networkRequests.size > maxUpdates) {\n const oldest = networkRequests.keys().next().value\n if (typeof oldest !== 'number') break\n networkRequests.delete(oldest)\n }\n emit('network-request', { source: 'ssr', imported: events.length })\n }\n\n const previousHooks = getDebugHooks()\n const previousRuntimeHooks = getRuntimeDebugHooks()\n const previousHTTPHooks = getHTTPDebugHooks()\n setDebugHooks(hooks)\n setRuntimeDebugHooks(runtimeHooks)\n setHTTPDebugHooks(httpHooks)\n\n const target = options.target ?? defaultTarget()\n const shouldExpose = options.expose ?? Boolean(target)\n const previousGlobal = target?.__VOBS_DEVTOOLS__\n let api!: DevToolsAPI\n const onGlobalError = (event: { readonly error?: unknown; readonly message?: unknown; readonly filename?: unknown; readonly lineno?: unknown; readonly colno?: unknown }): void => {\n const source = typeof event.filename === 'string' && event.filename\n ? `${event.filename}:${typeof event.lineno === 'number' ? event.lineno : 0}:${typeof event.colno === 'number' ? event.colno : 0}`\n : undefined\n reportError('global', event.error ?? event.message ?? 'Unknown global error', { source })\n }\n const onUnhandledRejection = (event: { readonly reason?: unknown }): void => {\n reportError('unhandledrejection', event.reason ?? 'Unhandled promise rejection')\n }\n target?.addEventListener?.('error', onGlobalError)\n target?.addEventListener?.('unhandledrejection', onUnhandledRejection)\n\n function subscribe(event: string, callback: (...args: any[]) => void): () => void {\n if (disposed) return () => undefined\n const callbacks = listeners.get(event) ?? new Set<(...args: any[]) => void>()\n callbacks.add(callback)\n listeners.set(event, callbacks)\n return () => {\n callbacks.delete(callback)\n if (callbacks.size === 0 && listeners.get(event) === callbacks) listeners.delete(event)\n }\n }\n\n function attachRouter(router: DevToolsRouterSource): () => void {\n const existing = routerStops.get(router)\n if (existing) {\n existing.refs++\n let released = false\n return () => {\n if (released) return\n released = true\n existing.refs--\n if (existing.refs === 0) existing.stop()\n }\n }\n const source = router.devtools as DevToolsRouterSource['devtools'] & {\n getCurrentRoute?: () => { readonly fullPath?: unknown }\n getNavigationState?: () => { readonly traceId?: unknown; readonly status?: unknown }\n getDataRequests?: () => readonly DevToolsRouterContext['dataRequests'][number][]\n }\n const initialRoute = source.getCurrentRoute?.()\n const initialState = source.getNavigationState?.()\n routerContext = {\n route: typeof initialRoute?.fullPath === 'string' ? initialRoute.fullPath : routerContext?.route,\n navigationId: typeof initialState?.traceId === 'number' ? initialState.traceId : routerContext?.navigationId,\n navigationStatus: typeof initialState?.status === 'string' ? initialState.status : routerContext?.navigationStatus,\n dataRequests: source.getDataRequests?.() ?? routerContext?.dataRequests ?? []\n }\n const stops = [\n router.devtools.subscribe('navigation:start', payload => {\n const value = payload as { readonly to?: unknown; readonly traceId?: unknown; readonly status?: unknown }\n routerContext = {\n route: typeof value.to === 'string' ? value.to : routerContext?.route,\n navigationId: typeof value.traceId === 'number' ? value.traceId : routerContext?.navigationId,\n navigationStatus: typeof value.status === 'string' ? value.status : undefined,\n dataRequests: routerContext?.dataRequests ?? []\n }\n emit('router', { type: 'navigation:start', payload })\n }),\n router.devtools.subscribe('navigation:end', payload => {\n const value = payload as { readonly to?: unknown; readonly id?: unknown; readonly status?: unknown }\n routerContext = {\n route: typeof value.to === 'string' ? value.to : routerContext?.route,\n navigationId: typeof value.id === 'number' ? value.id : routerContext?.navigationId,\n navigationStatus: typeof value.status === 'string' ? value.status : undefined,\n dataRequests: routerContext?.dataRequests ?? []\n }\n emit('router', { type: 'navigation:end', payload })\n }),\n router.devtools.subscribe('data-request', payload => {\n const request = payload as DevToolsRouterContext['dataRequests'][number]\n const requests = [...(routerContext?.dataRequests ?? [])]\n const existingIndex = requests.findIndex(item => item.id === request.id)\n if (existingIndex >= 0) requests[existingIndex] = request\n else requests.push(request)\n requests.splice(0, Math.max(0, requests.length - maxUpdates))\n routerContext = { ...routerContext, dataRequests: requests }\n emit('router', { type: 'data-request', payload })\n }),\n router.devtools.subscribe('route:update', payload => {\n const value = payload as { readonly fullPath?: unknown }\n if (typeof value.fullPath === 'string') routerContext = { ...routerContext, route: value.fullPath, dataRequests: routerContext?.dataRequests ?? [] }\n emit('router', { type: 'route:update', payload })\n }),\n router.devtools.subscribe('error', payload => {\n const value = payload as { readonly route?: unknown; readonly requestId?: unknown; readonly navigationId?: unknown; readonly message?: unknown; readonly stack?: unknown; readonly phase?: unknown }\n reportError('route', Object.assign(new Error(typeof value.message === 'string' ? value.message : 'Router error'), {\n stack: value.stack\n }), {\n route: typeof value.route === 'string' ? value.route : routerContext?.route,\n requestId: typeof value.requestId === 'number' ? value.requestId : undefined,\n navigationId: typeof value.navigationId === 'number' ? value.navigationId : undefined\n })\n emit('router', { type: 'error', payload })\n })\n ]\n const stop = () => {\n const current = routerStops.get(router)\n if (!current || current.stop !== stop) return\n for (const stop of stops) stop()\n routerStops.delete(router)\n }\n routerStops.set(router, { stop, refs: 1 })\n let released = false\n return () => {\n if (released) return\n released = true\n const current = routerStops.get(router)\n if (!current) return\n current.refs--\n if (current.refs === 0) current.stop()\n }\n }\n\n api = {\n getComponentTree(): readonly ComponentDebugNode[] {\n const active = [...owners.values()].filter(owner => !owner.disposed && !isInternalOwnerId(owner.id))\n const activeIds = new Set(active.map(owner => owner.id))\n return active\n .filter(owner => owner.parentId === null || !activeIds.has(owner.parentId))\n .map(owner => buildComponentNode(owner, activeIds))\n },\n\n getComponent(ownerId: string): ComponentDebugNode | null {\n const active = [...owners.values()].filter(owner => !owner.disposed && !isInternalOwnerId(owner.id))\n const activeIds = new Set(active.map(owner => owner.id))\n const find = (records: readonly OwnerRecord[]): ComponentDebugNode | null => {\n for (const record of records) {\n if (!activeIds.has(record.id)) continue\n if (record.id === ownerId) return buildComponentNode(record, activeIds)\n const child = find(active.filter(candidate => candidate.parentId === record.id))\n if (child) return child\n }\n return null\n }\n return find(active.filter(owner => owner.parentId === null || !activeIds.has(owner.parentId)))\n },\n\n getSignals(): readonly SignalDebugInfo[] {\n return [...signals.values()]\n .filter(signal => !signal.disposed && !isInternalSignal(signal))\n .map(signal => signalInfo(signal))\n },\n\n getSignal(signalId: string): SignalDebugInfo | null {\n const record = signals.get(signalId)\n return record && !record.disposed && !isInternalSignal(record) ? signalInfo(record) : null\n },\n\n canMutate(): boolean {\n return allowMutations && !disposed\n },\n\n setSignalValue(signalId: string, value: unknown): boolean {\n if (!allowMutations || disposed) return false\n const record = signals.get(signalId)\n // 只有 state 创建的信号可写;memo 派生值拒绝。\n if (!record || record.disposed || record.kind !== 'state') return false\n try {\n ;(record.signal as Signal<unknown>).value = value\n return true\n } catch (error) {\n reportError('render', error)\n return false\n }\n },\n\n getDependencies(signalId: string): readonly DependencyEdge[] {\n return [...edges.values()].filter(edge => edge.from === signalId)\n },\n\n getDependents(subscriberId: string): readonly DependencyEdge[] {\n return [...edges.values()].filter(edge => edge.to === subscriberId)\n },\n\n getEffects(): readonly EffectDebugInfo[] {\n return [...effects.values()]\n .filter(effect => !effect.disposed && !isInternalEffect(effect))\n .map(effectInfo)\n },\n\n getUpdates(): readonly UpdateTrace[] {\n return updates.slice()\n },\n\n getLifecycleEvents(): readonly LifecycleEvent[] {\n return lifecycleEvents.slice()\n },\n\n getNetworkRequests(): readonly NetworkRequestTrace[] {\n return [...networkRequests.values()]\n },\n\n importSSRRequests,\n\n getRouterContext(): DevToolsRouterContext | null {\n return routerContext ? { ...routerContext, dataRequests: [...routerContext.dataRequests] } : null\n },\n\n attachRouter,\n\n getErrors(): readonly DevToolsErrorTrace[] {\n return [...errors.values()]\n },\n\n getPerformanceEntries(): readonly DevToolsPerformanceEntry[] {\n const entries: DevToolsPerformanceEntry[] = []\n for (const update of updates) {\n entries.push({\n kind: 'update',\n id: update.id,\n label: update.signalName,\n duration: update.duration,\n timestamp: update.timestamp,\n status: update.status\n })\n }\n for (const effect of effects.values()) {\n if (effect.disposed || isInternalEffect(effect) || effect.lastDuration <= 0) continue\n entries.push({\n kind: 'effect',\n id: effect.id,\n label: effectInfo(effect).name,\n duration: effect.lastDuration,\n timestamp: effect.lastExecutionTime,\n status: effect.lastRunStatus ?? effect.status\n })\n }\n for (const request of networkRequests.values()) {\n if (request.duration === undefined) continue\n entries.push({\n kind: 'request',\n id: request.id,\n label: `${request.method} ${request.url}`,\n duration: request.duration,\n timestamp: request.startedAt,\n status: request.status\n })\n }\n return entries.sort((left, right) => right.duration - left.duration)\n },\n\n reportError,\n\n getCollectionState(): DevToolsCollectionState {\n return { paused: collectionPaused }\n },\n\n setCollectionPaused(paused: boolean): void {\n collectionPaused = paused\n if (paused) pendingUpdates.length = 0\n emit('collection', { paused })\n },\n\n clearUpdates(): void {\n pendingUpdates.length = 0\n updates.length = 0\n updateDurations.length = 0\n updateCount = 0\n emit('collection-cleared', 'updates')\n },\n\n clearNetworkRequests(): void {\n networkRequests.clear()\n emit('collection-cleared', 'network')\n },\n\n clearErrors(): void {\n errors.clear()\n emit('collection-cleared', 'errors')\n },\n\n clearLifecycleEvents(): void {\n lifecycleEvents.length = 0\n emit('collection-cleared', 'lifecycle')\n },\n\n getPerformanceMetrics(): PerformanceMetrics {\n const total = updateDurations.reduce((sum, duration) => sum + duration, 0)\n const effectDurations = [...effects.values()]\n .filter(effect => !effect.disposed)\n .map(effect => effect.lastDuration)\n .filter(duration => duration > 0)\n const requestDurations = [...networkRequests.values()]\n .map(request => request.duration ?? 0)\n .filter(duration => duration > 0)\n return {\n updateCount,\n averageUpdateDuration: updateDurations.length === 0 ? 0 : total / updateDurations.length,\n slowUpdateCount: updateDurations.filter(duration => duration > slowUpdateThreshold).length,\n effectExecutionCount,\n slowEffectCount: effectDurations.filter(duration => duration > slowUpdateThreshold).length,\n slowRequestCount: requestDurations.filter(duration => duration > slowUpdateThreshold).length,\n maxUpdateDuration: updateDurations.length === 0 ? 0 : Math.max(...updateDurations),\n maxEffectDuration: effectDurations.length === 0 ? 0 : Math.max(...effectDurations),\n maxRequestDuration: requestDurations.length === 0 ? 0 : Math.max(...requestDurations)\n }\n },\n\n takeMemorySnapshot(): MemorySnapshot {\n return {\n signalCount: [...signals.values()].filter(signal => !signal.disposed && !isInternalSignal(signal)).length,\n effectCount: [...effects.values()].filter(effect => !effect.disposed && !isInternalEffect(effect)).length,\n ownerCount: [...owners.values()].filter(owner => !owner.disposed && !isInternalOwnerId(owner.id)).length,\n dependencyEdgeCount: edges.size,\n leakedOwners: [...owners.values()].filter(owner => owner.disposed).length\n }\n },\n\n exportDiagnostics(): DevToolsDiagnosticSnapshot {\n return {\n version: 1,\n exportedAt: Date.now(),\n updates: api.getUpdates(),\n lifecycle: api.getLifecycleEvents(),\n network: api.getNetworkRequests(),\n errors: api.getErrors(),\n performance: api.getPerformanceMetrics(),\n memory: api.takeMemorySnapshot(),\n extensions: getExtensionSnapshot()\n }\n },\n\n importDiagnostics(snapshot: unknown): void {\n const imported = parseDiagnosticSnapshot(snapshot)\n updates.splice(0, updates.length, ...imported.updates.slice(-maxUpdates).map(update => sanitizeImportedUpdate(update, privacy)))\n lifecycleEvents.splice(0, lifecycleEvents.length, ...imported.lifecycle.slice(-maxUpdates))\n networkRequests.clear()\n for (const request of imported.network.slice(-maxUpdates)) networkRequests.set(request.id, sanitizeImportedRequest(request, privacy))\n errors.clear()\n for (const error of imported.errors.slice(-maxUpdates)) {\n const normalized = sanitizeImportedError(error)\n errors.set(diagnosticErrorKey(normalized), normalized)\n }\n updateDurations.splice(0, updateDurations.length, ...updates.map(update => update.duration))\n updateCount = imported.performance.updateCount\n effectExecutionCount = imported.performance.effectExecutionCount\n emit('collection', { imported: true })\n },\n\n registerInspector(id: string, inspector: DevToolsInspector): () => void {\n if (disposed || !id) return () => undefined\n inspectors.set(id, inspector)\n emit('extension', { type: 'inspector', id })\n return () => {\n if (inspectors.get(id) === inspector) inspectors.delete(id)\n }\n },\n\n registerTimeline(id: string, timeline: DevToolsTimeline = {}): () => void {\n if (disposed || !id) return () => undefined\n timelines.set(id, timeline)\n emit('extension', { type: 'timeline', id })\n return () => {\n if (timelines.get(id) === timeline) timelines.delete(id)\n }\n },\n\n registerMetric(id: string, metric: DevToolsMetric): () => void {\n if (disposed || !id) return () => undefined\n metrics.set(id, metric)\n emit('extension', { type: 'metric', id })\n return () => {\n if (metrics.get(id) === metric) metrics.delete(id)\n }\n },\n\n getExtensionSnapshot,\n\n inspectExtension(id: string, value: unknown): unknown {\n const inspector = inspectors.get(id)\n if (!inspector) return undefined\n return safeExtensionCall(\n () => serializeForDevTools(inspector.inspect(value), new Set<object>(), 0, privacy),\n undefined\n )\n },\n\n onUpdate(callback: (trace: UpdateTrace) => void): () => void {\n return subscribe('update', callback)\n },\n\n subscribe,\n\n dispose(): void {\n if (disposed) return\n disposed = true\n if (getDebugHooks() === hooks) setDebugHooks(previousHooks)\n if (getRuntimeDebugHooks() === runtimeHooks) setRuntimeDebugHooks(previousRuntimeHooks)\n if (getHTTPDebugHooks() === httpHooks) setHTTPDebugHooks(previousHTTPHooks)\n if (activeDevTools === api) activeDevTools = null\n if (target && target.__VOBS_DEVTOOLS__ === api) {\n if (previousGlobal) target.__VOBS_DEVTOOLS__ = previousGlobal\n else delete target.__VOBS_DEVTOOLS__\n }\n target?.removeEventListener?.('error', onGlobalError)\n target?.removeEventListener?.('unhandledrejection', onUnhandledRejection)\n listeners.clear()\n for (const { stop } of [...routerStops.values()]) stop()\n routerStops.clear()\n routerContext = null\n pendingUpdates.length = 0\n pendingFlushScheduled = false\n activeEffectId = null\n inspectors.clear()\n timelines.clear()\n metrics.clear()\n }\n }\n\n if (shouldExpose && target) target.__VOBS_DEVTOOLS__ = api\n activeDevTools = api\n if (options.router) attachRouter(options.router)\n return api\n}\n\nexport function enableDevTools(options: DevToolsOptions = {}): DevToolsAPI {\n return createDevTools(options)\n}\n\nexport function disableDevTools(): void {\n activeDevTools?.dispose()\n}\n\nexport function getDevTools(): DevToolsAPI | null {\n return activeDevTools\n}\n\n/** Connects a browser panel through a small postMessage protocol. */\nexport function connectDevTools(options: DevToolsBridgeOptions = {}): () => void {\n const target = options.target ?? defaultMessageTarget()\n const api = options.api ?? activeDevTools\n if (!target || !api) return () => undefined\n\n const send = (message: DevToolsWireResponse | DevToolsWireEvent): void => {\n try {\n target.postMessage(message, '*')\n } catch {\n // A panel disappearing during navigation must not affect the application.\n }\n }\n const unsubscribes = DEVTOOLS_EVENTS.map(event => api.subscribe(event, (...args: unknown[]) => {\n send({\n source: 'vobs-devtools',\n type: 'event',\n event,\n payload: args.length === 1 ? args[0] : args\n })\n }))\n const onMessage = (event: DevToolsMessageEvent): void => {\n const request = parseRequest(event.data)\n if (!request) return\n try {\n send({\n source: 'vobs-devtools',\n type: 'response',\n id: request.id,\n ok: true,\n result: invokeRequest(api, request)\n })\n } catch (error) {\n send({\n source: 'vobs-devtools',\n type: 'response',\n id: request.id,\n ok: false,\n error: toErrorMessage(error)\n })\n }\n }\n target.addEventListener('message', onMessage)\n\n return () => {\n target.removeEventListener('message', onMessage)\n for (const unsubscribe of unsubscribes) unsubscribe()\n }\n}\n\nexport function devtoolsPlugin(options: DevToolsPluginOptions = {}): VobsPlugin {\n return {\n name: '@vobs/devtools',\n version: '0.1.0',\n install(context: VobsContext) {\n if (options.enabled === false) return\n const devtools = createDevTools(options)\n const removeErrorObserver = context.onError(error => {\n const phase: DevToolsErrorPhase = readErrorProperty(error, 'vobsCode') === 'VOBS_HYDRATION_MISMATCH'\n || Boolean(readErrorProperty(error, 'vobsHydration'))\n ? 'hydration'\n : 'application'\n devtools.reportError(phase, error, {\n handled: false,\n recovery: 'propagated'\n })\n })\n return () => {\n removeErrorObserver()\n devtools.dispose()\n }\n }\n }\n}\n\nfunction defaultTarget(): DevToolsTarget | undefined {\n return typeof window === 'undefined' ? undefined : window\n}\n\nfunction defaultMessageTarget(): DevToolsMessageTarget | undefined {\n return typeof window === 'undefined' ? undefined : window as unknown as DevToolsMessageTarget\n}\n\nfunction parseRequest(value: unknown): DevToolsWireRequest | null {\n if (!value || typeof value !== 'object') return null\n const request = value as Partial<DevToolsWireRequest>\n if (request.source !== 'vobs-devtools' || request.type !== 'request') return null\n if (typeof request.id !== 'string' || typeof request.method !== 'string') return null\n return request as DevToolsWireRequest\n}\n\nfunction invokeRequest(api: DevToolsAPI, request: DevToolsWireRequest): unknown {\n const args = request.args ?? []\n switch (request.method) {\n case 'getComponentTree': return api.getComponentTree()\n case 'getComponent': return api.getComponent(String(args[0] ?? ''))\n case 'getSignals': return api.getSignals()\n case 'getSignal': return api.getSignal(String(args[0] ?? ''))\n case 'canMutate': return api.canMutate()\n case 'setSignalValue': return api.setSignalValue(String(args[0] ?? ''), args[1])\n case 'getDependencies': return api.getDependencies(String(args[0] ?? ''))\n case 'getDependents': return api.getDependents(String(args[0] ?? ''))\n case 'getEffects': return api.getEffects()\n case 'getUpdates': return api.getUpdates()\n case 'getLifecycleEvents': return api.getLifecycleEvents()\n case 'getNetworkRequests': return api.getNetworkRequests()\n case 'importSSRRequests': api.importSSRRequests(args[0]); return undefined\n case 'getRouterContext': return api.getRouterContext()\n case 'getErrors': return api.getErrors()\n case 'getPerformanceEntries': return api.getPerformanceEntries()\n case 'getCollectionState': return api.getCollectionState()\n case 'setCollectionPaused': api.setCollectionPaused(Boolean(args[0])); return undefined\n case 'clearUpdates': api.clearUpdates(); return undefined\n case 'clearNetworkRequests': api.clearNetworkRequests(); return undefined\n case 'clearErrors': api.clearErrors(); return undefined\n case 'clearLifecycleEvents': api.clearLifecycleEvents(); return undefined\n case 'getPerformanceMetrics': return api.getPerformanceMetrics()\n case 'takeMemorySnapshot': return api.takeMemorySnapshot()\n case 'exportDiagnostics': return api.exportDiagnostics()\n case 'importDiagnostics': api.importDiagnostics(args[0]); return undefined\n case 'getExtensionSnapshot': return api.getExtensionSnapshot()\n case 'inspectExtension': return api.inspectExtension(String(args[0] ?? ''), args[1])\n default: throw new Error(`Vobs DevTools: 未知请求 ${request.method}`)\n }\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction toDebugError(error: unknown, phase?: string): DebugErrorInfo {\n const normalized = normalizeVobsError(error)\n const value = error as {\n name?: unknown\n message?: unknown\n stack?: unknown\n vobsSource?: { file?: unknown; line?: unknown; column?: unknown }\n vobsCode?: unknown\n code?: unknown\n vobsHint?: unknown\n vobsHydration?: RuntimeHydrationMismatch\n } | null\n const source = value?.vobsSource ?? normalized.location\n return {\n name: typeof value?.name === 'string' ? value.name : normalized.name,\n message: typeof value?.message === 'string' ? value.message : normalized.message,\n stack: typeof value?.stack === 'string' ? value.stack : normalized.stack,\n phase,\n source: source && typeof source.file === 'string'\n ? `${source.file}:${source.line ?? 0}:${source.column ?? 0}`\n : undefined,\n location: source && typeof source.file === 'string' && typeof source.line === 'number' && typeof source.column === 'number'\n ? { file: source.file, line: source.line, column: source.column }\n : undefined,\n code: typeof value?.vobsCode === 'string'\n ? value.vobsCode\n : typeof value?.code === 'string' ? value.code : undefined,\n hint: typeof value?.vobsHint === 'string' ? value.vobsHint : undefined,\n cause: normalized.cause instanceof Error ? `${normalized.cause.name}: ${normalized.cause.message}` : normalized.cause === undefined ? undefined : String(normalized.cause),\n fix: normalized.fix,\n hydration: value?.vobsHydration && typeof value.vobsHydration === 'object' ? value.vobsHydration : undefined\n }\n}\n\ninterface ErrorClassification {\n readonly origin: DevToolsErrorOrigin\n readonly code?: string\n readonly hint?: string\n}\n\nconst FRAMEWORK_ERROR_RULES: readonly { pattern: RegExp; origin: DevToolsErrorOrigin; code: string; hint: string }[] = [\n { pattern: /响应式更新超过\\s*100\\s*轮/, origin: 'framework', code: 'VOBS_REACTIVITY_LOOP', hint: '检查 Effect 是否在执行时持续写入它依赖的 Signal。' },\n { pattern: /Fragment: (?:不能跨父节点移动|Fragment 不属于指定父节点|找不到结束锚点)/, origin: 'framework', code: 'VOBS_FRAGMENT_INVARIANT', hint: '检查 Fragment 的父节点和插入/删除顺序,通常表示运行时树结构已不一致。' },\n { pattern: /当前渲染器不支持 Hydration/, origin: 'usage', code: 'VOBS_HYDRATION_UNSUPPORTED', hint: '请使用支持 Hydration 的 Renderer,或改用 app.mount()。' },\n { pattern: /(?:HydrationMismatchError|Vobs hydration:|服务端 DOM 与客户端渲染结构不一致|节点位置与客户端渲染结果不一致)/, origin: 'framework', code: 'VOBS_HYDRATION_MISMATCH', hint: '检查服务端和客户端是否生成了相同的节点结构与初始状态。' },\n { pattern: /渲染器未初始化/, origin: 'usage', code: 'VOBS_RENDERER_NOT_INITIALIZED', hint: '请在应用 mount 或 hydrate 后调用 Runtime DOM API。' },\n { pattern: /节点不属于指定父节点/, origin: 'framework', code: 'VOBS_DOM_PARENT_MISMATCH', hint: '检查节点是否被重复移动、删除,或被错误的 Renderer 实例管理。' }\n]\n\nfunction classifyError(phase: DevToolsErrorPhase, error: unknown, context: DevToolsErrorContext): ErrorClassification {\n const message = toErrorMessage(error)\n const explicitCode = context.code\n ?? readErrorProperty(error, 'vobsCode')\n ?? readErrorProperty(error, 'code')\n ?? extractErrorCode(message)\n const frameworkRule = FRAMEWORK_ERROR_RULES.find(rule => rule.pattern.test(message))\n if (frameworkRule) return { origin: context.origin ?? frameworkRule.origin, code: explicitCode ?? frameworkRule.code, hint: context.hint ?? frameworkRule.hint }\n if (context.origin) return { origin: context.origin, code: explicitCode, hint: context.hint }\n if ((explicitCode && isUsageErrorCode(explicitCode))\n || (/^Vobs(?:\\s|:)|^VOBS_/.test(message) && /必须|不能为空|找不到|缺少|不存在|无效|不能直接|重复|未配置|已销毁/.test(message))) {\n return { origin: 'usage', code: explicitCode, hint: context.hint ?? '检查调用参数、Owner 作用域和相关插件是否已安装。' }\n }\n if (phase === 'global') return { origin: 'unknown', code: explicitCode, hint: context.hint }\n return { origin: 'application', code: explicitCode, hint: context.hint }\n}\n\nfunction isUsageErrorCode(code: string): boolean {\n return /^(?:INVALID_|.*_(?:CONTEXT_MISSING|CONTEXT_DISPOSED|OPTIONS|MISSING|UNAVAILABLE))/.test(code)\n}\n\nfunction extractErrorCode(message: string): string | undefined {\n return message.match(/\\b[A-Z][A-Z0-9_]{2,}_[A-Z0-9_]+\\b/)?.[0]\n}\n\nfunction readErrorProperty(error: unknown, key: string): string | undefined {\n if (!error || (typeof error !== 'object' && typeof error !== 'function')) return undefined\n const value = (error as Record<string, unknown>)[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction mergeRecovery(previous: DevToolsErrorRecovery, next: DevToolsErrorRecovery | undefined): DevToolsErrorRecovery {\n if (!next) return previous\n if (next === 'retrying') return next\n if (next === 'recovered') return next\n if (next === 'fallback') return next\n if (previous === 'fallback') return previous\n return next\n}\n\nfunction diagnosticErrorKey(error: Pick<DevToolsErrorTrace, 'origin' | 'code' | 'name' | 'message' | 'source' | 'component'>): string {\n return [error.origin, error.code ?? error.name, error.message, error.source ?? '', error.component ?? ''].join(':')\n}\n\nfunction sanitizeImportedError(error: DevToolsErrorTrace): DevToolsErrorTrace {\n const phase = error.phase ?? 'global'\n return {\n ...error,\n phase,\n phases: Array.isArray(error.phases) && error.phases.length > 0 ? error.phases : [phase],\n origin: error.origin ?? 'unknown',\n handled: error.handled === true,\n recovery: error.recovery ?? 'propagated'\n }\n}\n\nfunction parseDiagnosticSnapshot(value: unknown): DevToolsDiagnosticSnapshot {\n if (!value || typeof value !== 'object') throw new Error('Vobs DevTools: invalid diagnostic snapshot')\n const snapshot = value as Partial<DevToolsDiagnosticSnapshot>\n if (snapshot.version !== 1\n || !Array.isArray(snapshot.updates)\n || !Array.isArray(snapshot.lifecycle)\n || !Array.isArray(snapshot.network)\n || !Array.isArray(snapshot.errors)\n || !snapshot.performance\n || !snapshot.memory) {\n throw new Error('Vobs DevTools: unsupported diagnostic snapshot')\n }\n if (!snapshot.updates.every(item => isRecord(item)\n && typeof item.id === 'string'\n && typeof item.duration === 'number'\n && Array.isArray(item.effects)\n && Array.isArray(item.affectedSignals)\n && Array.isArray(item.affectedEffects)\n && Array.isArray(item.domUpdates))\n || !snapshot.lifecycle.every(item => isRecord(item) && typeof item.id === 'string' && typeof item.type === 'string')\n || !snapshot.network.every(item => isRecord(item) && typeof item.id === 'number' && typeof item.url === 'string' && isRecord(item.headers))\n || !snapshot.errors.every(item => isRecord(item) && typeof item.id === 'number' && typeof item.message === 'string')\n || !isRecord(snapshot.performance)\n || typeof snapshot.performance.updateCount !== 'number'\n || typeof snapshot.performance.effectExecutionCount !== 'number'\n || !isRecord(snapshot.memory)) {\n throw new Error('Vobs DevTools: malformed diagnostic snapshot')\n }\n return snapshot as DevToolsDiagnosticSnapshot\n}\n\nfunction parseSSRRequestSnapshot(value: unknown): readonly HTTPDebugRequest[] {\n const candidate = value && typeof value === 'object' && !Array.isArray(value)\n ? value as { readonly version?: unknown; readonly environment?: unknown; readonly requests?: unknown }\n : { version: 1, environment: 'server', requests: value }\n if (candidate.version !== 1 || candidate.environment !== 'server' || !Array.isArray(candidate.requests)) {\n throw new Error('Vobs DevTools: invalid SSR request snapshot')\n }\n if (!candidate.requests.every(item => isRecord(item)\n && typeof item.id === 'number'\n && typeof item.url === 'string'\n && typeof item.method === 'string'\n && typeof item.startedAt === 'number'\n && isRecord(item.headers))) {\n throw new Error('Vobs DevTools: malformed SSR request snapshot')\n }\n return candidate.requests as HTTPDebugRequest[]\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\ninterface NormalizedPrivacyOptions {\n readonly redactedHeaders: readonly string[]\n readonly redactedFields: readonly string[]\n readonly redactDomValues: boolean\n readonly replacement: string\n}\n\nfunction normalizePrivacyOptions(options: DevToolsPrivacyOptions | undefined): NormalizedPrivacyOptions {\n return {\n redactedHeaders: options?.redactedHeaders ?? [],\n redactedFields: options?.redactedFields ?? [],\n redactDomValues: options?.redactDomValues ?? false,\n replacement: options?.replacement ?? '[Redacted]'\n }\n}\n\nfunction sanitizeImportedUpdate(update: UpdateTrace, privacy: NormalizedPrivacyOptions): UpdateTrace {\n return {\n ...update,\n previousValue: serializeForDevTools(update.previousValue, new Set<object>(), 0, privacy),\n nextValue: serializeForDevTools(update.nextValue, new Set<object>(), 0, privacy),\n domUpdates: update.domUpdates.map(mutation => ({\n ...mutation,\n previousValue: privacy.redactDomValues ? privacy.replacement : serializeForDevTools(mutation.previousValue, new Set<object>(), 0, privacy),\n nextValue: privacy.redactDomValues ? privacy.replacement : serializeForDevTools(mutation.nextValue, new Set<object>(), 0, privacy)\n }))\n }\n}\n\nfunction sanitizeImportedRequest(request: NetworkRequestTrace, privacy: NormalizedPrivacyOptions): NetworkRequestTrace {\n return {\n ...request,\n headers: redactHeaders(request.headers, privacy),\n requestBody: serializeForDevTools(request.requestBody, new Set<object>(), 0, privacy),\n responseBody: serializeForDevTools(request.responseBody, new Set<object>(), 0, privacy)\n }\n}\n\nfunction redactHeaders(headers: Readonly<Record<string, string>>, privacy: NormalizedPrivacyOptions): Readonly<Record<string, string>> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(headers)) {\n if (/authorization|cookie|token|password|secret|api[-_]?key/i.test(key)\n || privacy.redactedHeaders.some(fragment => key.toLowerCase().includes(fragment.toLowerCase()))) continue\n result[key] = value\n }\n return result\n}\n\nfunction serializeForDevTools(value: unknown, seen = new Set<object>(), depth = 0, privacy?: NormalizedPrivacyOptions): unknown {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return value\n if (typeof value === 'number') return Number.isFinite(value) ? value : String(value)\n if (typeof value === 'bigint') return `${value}n`\n if (typeof value === 'undefined') return undefined\n if (typeof value === 'function') return `[Function ${value.name || 'anonymous'}]`\n if (typeof value === 'symbol') return String(value)\n if (depth >= 4) return '[MaxDepth]'\n\n const object = value as object\n if (seen.has(object)) return '[Circular]'\n seen.add(object)\n try {\n if (value instanceof Date) return value.toISOString()\n if (value instanceof Error) return { name: value.name, message: value.message }\n if (Array.isArray(value)) return value.slice(0, 100).map(item => serializeForDevTools(item, seen, depth + 1, privacy))\n\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(object).slice(0, 100)) {\n try {\n if (privacy?.redactedFields.some(field => field.toLowerCase() === key.toLowerCase())) {\n result[key] = privacy.replacement\n } else {\n result[key] = serializeForDevTools((object as Record<string, unknown>)[key], seen, depth + 1, privacy)\n }\n } catch {\n result[key] = '[Uninspectable]'\n }\n }\n return result\n } finally {\n seen.delete(object)\n }\n}\n\ndeclare global {\n interface Window {\n __VOBS_DEVTOOLS__?: DevToolsAPI\n }\n}\n","import { effect } from '@vobs/reactivity'\nimport {\n addEventListener,\n createFragment,\n createText,\n insertBefore,\n insertDynamic,\n setAttribute,\n setProperty,\n setTextContent,\n type VobsNode\n} from '@vobs/vobs'\nimport type { VuiCommonProps } from './types'\n\ntype VuiProps = VuiCommonProps | object\n\nexport function classNames(...values: readonly (string | false | null | undefined)[]): string {\n return values\n .flatMap(value => typeof value === 'string' ? value.trim().split(/\\s+/u) : [])\n .filter(Boolean)\n .join(' ')\n}\n\nexport function readProp<T>(props: object, name: string, fallback: T): T {\n const value = Reflect.get(props, name)\n return (value === undefined ? fallback : value) as T\n}\n\nexport function hasProp(props: object, name: string): boolean {\n return name in props\n}\n\nexport function bindClass(\n root: Element,\n props: VuiProps,\n ...baseClasses: readonly (string | undefined)[]\n): void {\n effect(() => {\n setAttribute(root, 'class', classNames(\n ...baseClasses,\n readString(props, 'class'),\n readString(props, 'className')\n ))\n })\n}\n\nexport function bindClassList(\n root: Element,\n props: VuiProps,\n readBaseClasses: () => readonly (string | undefined)[]\n): void {\n effect(() => {\n setAttribute(root, 'class', classNames(\n ...readBaseClasses(),\n readString(props, 'class'),\n readString(props, 'className')\n ))\n })\n}\n\nexport function bindCommonAttributes(\n root: Element,\n props: VuiProps,\n skip: readonly string[] = [],\n options: { readonly includeDataAria?: boolean } = {}\n): void {\n const ignored = new Set(skip)\n ignored.add('class')\n ignored.add('className')\n ignored.add('children')\n ignored.add('style')\n\n effect(() => {\n const next = new Map<string, string>()\n for (const name of Object.keys(props)) {\n if (ignored.has(name) || name.startsWith('on')) continue\n if (!isCommonAttribute(name)) continue\n if (options.includeDataAria === false && (name.startsWith('aria-') || name.startsWith('data-'))) continue\n\n const value = Reflect.get(props, name)\n const normalized = normalizeAttribute(name, value)\n if (normalized !== undefined) next.set(normalized.name, normalized.value)\n }\n\n const managed = getManagedAttributes(root)\n for (const name of managed) {\n if (!next.has(name)) removeAttribute(root, name)\n }\n for (const [name, value] of next) setAttribute(root, name, value)\n setManagedAttributes(root, next.keys())\n })\n}\n\nexport function bindUserStyle(root: Element, props: VuiProps): void {\n bindStyle(root, props, () => '')\n}\n\nexport function bindStyle(root: Element, props: VuiProps, createStyle: () => string): void {\n effect(() => {\n const userStyle = readString(props, 'style')\n const internalStyle = createStyle()\n const style = [internalStyle, userStyle].filter(Boolean).join('; ')\n if (style) setAttribute(root, 'style', style)\n else removeAttribute(root, 'style')\n })\n}\n\nexport function bindTextContent(\n node: Text,\n read: () => unknown\n): void {\n effect(() => {\n setTextContent(node, String(read() ?? ''))\n })\n}\n\nexport function bindPropertyValue(\n node: Element,\n name: string,\n read: () => unknown\n): void {\n effect(() => setProperty(node, name, read()))\n}\n\nexport function bindAttributeValue(\n node: Element,\n name: string,\n read: () => unknown\n): void {\n effect(() => {\n const value = read()\n if (value === undefined || value === null || value === false) removeAttribute(node, name)\n else setAttribute(node, name, String(value))\n })\n}\n\nexport function listen(\n root: Element,\n event: string,\n props: object,\n propName: string,\n disabled?: () => boolean\n): void {\n addEventListener(root, event, (reason: Event) => {\n if (disabled?.()) return\n const handler = Reflect.get(props, propName)\n if (typeof handler === 'function') handler(reason)\n })\n}\n\nexport function mountSlot(\n parent: Node,\n props: object,\n propName: string\n): void {\n insertDynamic(parent, null, () => resolveSlot(Reflect.get(props, propName)))\n}\n\nexport function resolveSlot(value: unknown): VobsNode | null {\n const resolved = typeof value === 'function' ? value() : value\n if (resolved === undefined || resolved === null || resolved === false) return null\n if (typeof resolved === 'string' || typeof resolved === 'number') return createText(String(resolved))\n if (Array.isArray(resolved)) {\n const children = resolved\n return createFragment((parent, anchor) => {\n for (const child of children) {\n const node = resolveSlot(child)\n if (node) insertBefore(parent, node, anchor)\n }\n })\n }\n return resolved as VobsNode\n}\n\nexport function setOptionalAttribute(node: Element, name: string, value: unknown): void {\n if (value === undefined || value === null || value === false || value === '') {\n removeAttribute(node, name)\n return\n }\n setAttribute(node, name, String(value))\n}\n\nexport function setOptionalProperty(node: Element, name: string, value: unknown): void {\n if (value === undefined || value === null) return\n setProperty(node, name, value)\n}\n\nfunction readString(props: object, name: string): string | undefined {\n const value = Reflect.get(props, name)\n return typeof value === 'string' ? value : undefined\n}\n\nfunction isCommonAttribute(name: string): boolean {\n return name === 'id'\n || name === 'title'\n || name === 'role'\n || name === 'tabIndex'\n || name.startsWith('aria-')\n || name.startsWith('data-')\n}\n\nfunction normalizeAttribute(name: string, value: unknown): { name: string; value: string } | undefined {\n if (value === undefined || value === null) return undefined\n if (value === false && !name.startsWith('aria-') && !name.startsWith('data-')) return undefined\n return { name: name === 'tabIndex' ? 'tabindex' : name, value: String(value) }\n}\n\nconst managedAttributes = new WeakMap<object, Set<string>>()\n\nfunction getManagedAttributes(node: Element): Set<string> {\n return managedAttributes.get(node) ?? new Set<string>()\n}\n\nfunction setManagedAttributes(node: Element, names: IterableIterator<string>): void {\n managedAttributes.set(node, new Set(names))\n}\n\nfunction removeAttribute(node: Element, name: string): void {\n const candidate = node as Element & { removeAttribute?: (attribute: string) => void }\n candidate.removeAttribute?.(name)\n}\n","import { effect } from '@vobs/reactivity'\nimport {\n createElement,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n hasProp,\n listen,\n mountSlot,\n readProp,\n setOptionalAttribute,\n setOptionalProperty\n} from './utils'\nimport type { VuiCommonProps, VuiEventHandler } from './types'\n\nexport type ButtonVariant =\n | 'brand'\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'ghost'\n | 'danger'\n | 'danger-strong'\n | 'danger-subtle'\n | 'warning'\n | 'link'\n\nexport type ControlSize = 'sm' | 'md' | 'lg'\n\nexport interface ButtonProps extends VuiCommonProps {\n readonly variant?: ButtonVariant\n readonly size?: ControlSize\n readonly type?: 'button' | 'submit' | 'reset'\n readonly disabled?: boolean\n readonly loading?: boolean\n readonly iconOnly?: boolean\n readonly icon?: VobsNode | (() => VobsNode | null | undefined)\n readonly onClick?: VuiEventHandler<MouseEvent>\n}\n\nexport function Button(props: ButtonProps = {}): VobsNode {\n const root = createElement('button')\n\n bindClassList(root, props, () => [\n 'vui-btn',\n `vui-btn--${readProp<ButtonVariant>(props, 'variant', 'primary')}`,\n `vui-btn--${readProp<ControlSize>(props, 'size', 'md')}`,\n readProp(props, 'iconOnly', false) ? 'vui-btn--icon' : undefined\n ])\n bindCommonAttributes(root, props, [\n 'variant',\n 'size',\n 'type',\n 'disabled',\n 'loading',\n 'iconOnly',\n 'icon',\n 'onClick'\n ])\n\n effect(() => {\n const disabled = readProp(props, 'disabled', false) || readProp(props, 'loading', false)\n setOptionalProperty(root, 'disabled', disabled)\n setOptionalAttribute(root, 'type', readProp(props, 'type', 'button'))\n setOptionalAttribute(root, 'aria-disabled', disabled ? 'true' : undefined)\n setOptionalAttribute(root, 'aria-busy', readProp(props, 'loading', false) ? 'true' : undefined)\n })\n\n listen(root, 'click', props, 'onClick', () => (\n readProp(props, 'disabled', false) || readProp(props, 'loading', false)\n ))\n\n if (hasProp(props, 'icon')) mountSlot(root, props, 'icon')\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n\nexport interface ButtonGroupProps extends VuiCommonProps {}\n\nexport function ButtonGroup(props: ButtonGroupProps = {}): VobsNode {\n const root = createElement('div')\n bindClassList(root, props, () => ['vui-btn-group'])\n bindCommonAttributes(root, props)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n","import { effect, type Signal } from '@vobs/reactivity'\nimport {\n createElement,\n insertBefore,\n setAttribute,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n bindPropertyValue,\n bindUserStyle,\n hasProp,\n listen,\n mountSlot,\n readProp,\n setOptionalAttribute,\n setOptionalProperty\n} from './utils'\nimport type { VuiCommonProps, VuiEventHandler } from './types'\n\nexport type InputType = 'date' | 'email' | 'number' | 'password' | 'search' | 'text' | 'url'\n\n/** bind 传入 Signal 时组件建立双向绑定:信号→DOM property、用户输入→信号写回。 */\nfunction bindSignalProp<T>(props: object): Signal<T> | undefined {\n const value = readProp<Signal<T> | undefined>(props, 'bind', undefined)\n return value && typeof value === 'object' && 'value' in value ? value : undefined\n}\n\nexport interface InputProps extends VuiCommonProps {\n readonly type?: InputType\n readonly name?: string\n readonly value?: string | number\n readonly bind?: Signal<string | number | undefined>\n readonly placeholder?: string\n readonly disabled?: boolean\n readonly readOnly?: boolean\n readonly required?: boolean\n readonly icon?: VobsNode | (() => VobsNode | null | undefined)\n readonly onInput?: VuiEventHandler<InputEvent>\n readonly onChange?: VuiEventHandler<Event>\n readonly onBlur?: VuiEventHandler<FocusEvent>\n}\n\nexport function Input(props: InputProps = {}): VobsNode {\n const root = createElement('div')\n const control = createElement('input')\n\n bindClassList(root, props, () => [\n 'vui-input',\n readProp<InputType>(props, 'type', 'text') === 'search' ? 'vui-search' : undefined\n ])\n bindUserStyle(root, props)\n bindCommonAttributes(control, props, [\n 'type',\n 'name',\n 'value',\n 'placeholder',\n 'disabled',\n 'readOnly',\n 'required',\n 'icon',\n 'onInput',\n 'onChange',\n 'onBlur'\n ])\n\n effect(() => {\n setOptionalAttribute(control, 'type', readProp<InputType>(props, 'type', 'text'))\n setOptionalAttribute(control, 'name', readProp<string | undefined>(props, 'name', undefined))\n setOptionalAttribute(control, 'placeholder', readProp<string | undefined>(props, 'placeholder', undefined))\n setOptionalProperty(control, 'disabled', readProp(props, 'disabled', false))\n setOptionalProperty(control, 'readOnly', readProp(props, 'readOnly', false))\n setOptionalProperty(control, 'required', readProp(props, 'required', false))\n })\n const bind = bindSignalProp<string | number | undefined>(props)\n if (bind) {\n bindPropertyValue(control, 'value', () => String(bind.value ?? ''))\n listen(control, 'input', { onInput: (event: Event) => { bind.value = (event.target as HTMLInputElement).value } }, 'onInput', () => readProp(props, 'disabled', false))\n } else if (hasProp(props, 'value')) {\n bindPropertyValue(control, 'value', () => readProp<string | number | undefined>(props, 'value', undefined) ?? '')\n }\n\n if (hasProp(props, 'icon')) {\n const icon = createElement('span')\n setAttribute(icon, 'class', 'vui-input__icon')\n mountSlot(icon, props, 'icon')\n insertBefore(root, icon, null)\n }\n insertBefore(root, control, null)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n\n listen(control, 'input', props, 'onInput', () => readProp(props, 'disabled', false))\n listen(control, 'change', props, 'onChange', () => readProp(props, 'disabled', false))\n listen(control, 'blur', props, 'onBlur', () => false)\n return root\n}\n\nexport interface TextareaProps extends VuiCommonProps {\n readonly value?: string | number\n readonly bind?: Signal<string | number | undefined>\n readonly placeholder?: string\n readonly disabled?: boolean\n readonly readOnly?: boolean\n readonly required?: boolean\n readonly rows?: number\n readonly name?: string\n readonly onInput?: VuiEventHandler<InputEvent>\n readonly onChange?: VuiEventHandler<Event>\n readonly onBlur?: VuiEventHandler<FocusEvent>\n}\n\nexport function Textarea(props: TextareaProps = {}): VobsNode {\n const root = createElement('textarea')\n bindClassList(root, props, () => ['vui-textarea'])\n bindCommonAttributes(root, props, [\n 'value',\n 'placeholder',\n 'disabled',\n 'readOnly',\n 'required',\n 'rows',\n 'name',\n 'onInput',\n 'onChange',\n 'onBlur'\n ])\n effect(() => {\n setOptionalAttribute(root, 'name', readProp<string | undefined>(props, 'name', undefined))\n setOptionalAttribute(root, 'placeholder', readProp<string | undefined>(props, 'placeholder', undefined))\n setOptionalProperty(root, 'disabled', readProp(props, 'disabled', false))\n setOptionalProperty(root, 'readOnly', readProp(props, 'readOnly', false))\n setOptionalProperty(root, 'required', readProp(props, 'required', false))\n setOptionalAttribute(root, 'rows', readProp<number | undefined>(props, 'rows', undefined))\n })\n const bind = bindSignalProp<string | number | undefined>(props)\n if (bind) {\n bindPropertyValue(root, 'value', () => String(bind.value ?? ''))\n listen(root, 'input', { onInput: (event: Event) => { bind.value = (event.target as HTMLTextAreaElement).value } }, 'onInput', () => readProp(props, 'disabled', false))\n } else if (hasProp(props, 'value')) {\n bindPropertyValue(root, 'value', () => readProp<string | number | undefined>(props, 'value', undefined) ?? '')\n }\n listen(root, 'input', props, 'onInput', () => readProp(props, 'disabled', false))\n listen(root, 'change', props, 'onChange', () => readProp(props, 'disabled', false))\n listen(root, 'blur', props, 'onBlur', () => false)\n return root\n}\n\nexport interface SelectProps extends VuiCommonProps {\n readonly name?: string\n readonly value?: string | number\n readonly bind?: Signal<string | number | undefined>\n readonly disabled?: boolean\n readonly required?: boolean\n readonly multiple?: boolean\n readonly size?: number\n readonly onChange?: VuiEventHandler<Event>\n}\n\nexport function Select(props: SelectProps = {}): VobsNode {\n const root = createElement('select')\n bindClassList(root, props, () => ['vui-select'])\n bindCommonAttributes(root, props, [\n 'name',\n 'value',\n 'disabled',\n 'required',\n 'multiple',\n 'size',\n 'onChange'\n ])\n effect(() => {\n setOptionalAttribute(root, 'name', readProp<string | undefined>(props, 'name', undefined))\n setOptionalProperty(root, 'disabled', readProp(props, 'disabled', false))\n setOptionalProperty(root, 'required', readProp(props, 'required', false))\n setOptionalProperty(root, 'multiple', readProp(props, 'multiple', false))\n setOptionalAttribute(root, 'size', readProp<number | undefined>(props, 'size', undefined))\n })\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n const bind = bindSignalProp<string | number | undefined>(props)\n if (bind) {\n bindPropertyValue(root, 'value', () => String(bind.value ?? ''))\n listen(root, 'change', { onChange: (event: Event) => { bind.value = (event.target as HTMLSelectElement).value } }, 'onChange', () => readProp(props, 'disabled', false))\n } else if (hasProp(props, 'value')) {\n bindPropertyValue(root, 'value', () => readProp<string | number | undefined>(props, 'value', undefined) ?? '')\n }\n listen(root, 'change', props, 'onChange', () => readProp(props, 'disabled', false))\n return root\n}\n\nexport interface ChoiceProps extends VuiCommonProps {\n readonly name?: string\n readonly value?: string\n readonly checked?: boolean\n readonly bind?: Signal<boolean>\n readonly disabled?: boolean\n readonly required?: boolean\n readonly onChange?: VuiEventHandler<Event>\n}\n\nexport function Checkbox(props: ChoiceProps = {}): VobsNode {\n return createChoice('checkbox', props)\n}\n\nexport function Radio(props: ChoiceProps = {}): VobsNode {\n return createChoice('radio', props)\n}\n\nfunction createChoice(type: 'checkbox' | 'radio', props: ChoiceProps): VobsNode {\n const root = createElement('label')\n const control = createElement('input')\n const visual = createElement('span')\n\n bindClassList(root, props, () => [`vui-${type}`])\n bindUserStyle(root, props)\n bindCommonAttributes(control, props, [\n 'name',\n 'value',\n 'checked',\n 'disabled',\n 'required',\n 'onChange'\n ])\n setAttribute(visual, 'class', type === 'checkbox' ? 'vui-check__box' : 'vui-radio__dot')\n\n effect(() => {\n setOptionalAttribute(control, 'type', type)\n setOptionalAttribute(control, 'name', readProp<string | undefined>(props, 'name', undefined))\n setOptionalAttribute(control, 'value', readProp<string | undefined>(props, 'value', undefined))\n setOptionalProperty(control, 'disabled', readProp(props, 'disabled', false))\n setOptionalProperty(control, 'required', readProp(props, 'required', false))\n })\n const bind = bindSignalProp<boolean>(props)\n if (bind) {\n bindPropertyValue(control, 'checked', () => bind.value)\n listen(control, 'change', { onChange: (event: Event) => { bind.value = (event.target as HTMLInputElement).checked } }, 'onChange', () => readProp(props, 'disabled', false))\n } else if (hasProp(props, 'checked')) {\n bindPropertyValue(control, 'checked', () => readProp(props, 'checked', false))\n }\n insertBefore(root, control, null)\n insertBefore(root, visual, null)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n listen(control, 'change', props, 'onChange', () => readProp(props, 'disabled', false))\n return root\n}\n\nexport interface SwitchProps extends VuiCommonProps {\n readonly checked?: boolean\n readonly bind?: Signal<boolean>\n readonly disabled?: boolean\n readonly readOnly?: boolean\n readonly size?: 'sm' | 'md'\n readonly name?: string\n readonly value?: string\n readonly onChange?: VuiEventHandler<Event>\n}\n\nexport function Switch(props: SwitchProps = {}): VobsNode {\n const root = createElement('label')\n const control = createElement('input')\n const thumb = createElement('span')\n\n bindClassList(root, props, () => [\n 'vui-switch',\n readProp<'sm' | 'md'>(props, 'size', 'md') === 'sm' ? 'vui-switch--sm' : undefined\n ])\n bindUserStyle(root, props)\n bindCommonAttributes(root, props, ['role'])\n bindCommonAttributes(control, props, [\n 'checked',\n 'disabled',\n 'readOnly',\n 'name',\n 'value',\n 'onChange'\n ])\n setAttribute(thumb, 'class', 'vui-switch__thumb')\n setAttribute(root, 'role', 'switch')\n const bind = bindSignalProp<boolean>(props)\n\n effect(() => {\n setOptionalAttribute(control, 'type', 'checkbox')\n setOptionalAttribute(control, 'name', readProp<string | undefined>(props, 'name', undefined))\n setOptionalAttribute(control, 'value', readProp<string | undefined>(props, 'value', undefined))\n setOptionalProperty(control, 'disabled', readProp(props, 'disabled', false))\n setOptionalProperty(control, 'readOnly', readProp(props, 'readOnly', false))\n setOptionalAttribute(root, 'aria-checked', (bind ? bind.value : readProp(props, 'checked', false)) ? 'true' : 'false')\n setOptionalAttribute(root, 'aria-disabled', readProp(props, 'disabled', false) ? 'true' : undefined)\n })\n if (bind) {\n bindPropertyValue(control, 'checked', () => bind.value)\n listen(control, 'change', { onChange: (event: Event) => { bind.value = (event.target as HTMLInputElement).checked } }, 'onChange', () => readProp(props, 'disabled', false))\n } else if (hasProp(props, 'checked')) {\n bindPropertyValue(control, 'checked', () => readProp(props, 'checked', false))\n }\n insertBefore(root, control, null)\n insertBefore(root, thumb, null)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n listen(control, 'change', props, 'onChange', () => readProp(props, 'disabled', false))\n return root\n}\n","import {\n createElement,\n createText,\n insertBefore,\n setAttribute,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n bindTextContent,\n bindUserStyle,\n hasProp,\n mountSlot,\n readProp\n} from './utils'\nimport type { VuiCommonProps } from './types'\n\nexport interface CardProps extends VuiCommonProps {\n readonly title?: string\n readonly description?: string\n}\n\nexport function Card(props: CardProps = {}): VobsNode {\n const root = createElement('div')\n bindClassList(root, props, () => ['vui-card'])\n bindCommonAttributes(root, props, ['title', 'description'])\n bindUserStyle(root, props)\n\n if (hasProp(props, 'title')) {\n const title = createElement('div')\n const text = createText('')\n setAttribute(title, 'class', 'vui-card__title')\n bindTextContent(text, () => readProp(props, 'title', ''))\n insertBefore(title, text, null)\n insertBefore(root, title, null)\n }\n if (hasProp(props, 'description')) {\n const description = createElement('p')\n const text = createText('')\n setAttribute(description, 'class', 'vui-card__desc')\n bindTextContent(text, () => readProp(props, 'description', ''))\n insertBefore(description, text, null)\n insertBefore(root, description, null)\n }\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n\nexport interface CardHeaderProps extends VuiCommonProps {}\n\nexport function CardHeader(props: CardHeaderProps = {}): VobsNode {\n const root = createElement('div')\n bindClassList(root, props, () => ['vui-card__header'])\n bindCommonAttributes(root, props)\n bindUserStyle(root, props)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n","import {\n createElement,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n bindUserStyle,\n hasProp,\n mountSlot,\n readProp\n} from './utils'\nimport type { VuiCommonProps } from './types'\n\nexport type TagTone = 'default' | 'brand' | 'success' | 'warning' | 'danger' | 'count' | 'neutral-strong'\n\nexport interface TagProps extends VuiCommonProps {\n readonly tone?: TagTone\n}\n\nexport function Tag(props: TagProps = {}): VobsNode {\n const root = createElement('span')\n bindClassList(root, props, () => [\n 'vui-tag',\n readProp<TagTone>(props, 'tone', 'default') === 'default'\n ? undefined\n : `vui-tag--${readProp<TagTone>(props, 'tone', 'default')}`\n ])\n bindCommonAttributes(root, props, ['tone'])\n bindUserStyle(root, props)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n","import {\n createElement,\n createText,\n insertBefore,\n setAttribute,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n bindTextContent,\n bindUserStyle,\n hasProp,\n mountSlot,\n readProp\n} from './utils'\nimport type { VuiCommonProps } from './types'\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger'\n\nexport interface AlertProps extends VuiCommonProps {\n readonly tone?: AlertTone\n readonly title?: string\n readonly description?: string\n readonly icon?: VobsNode | (() => VobsNode | null | undefined)\n}\n\nexport function Alert(props: AlertProps = {}): VobsNode {\n const root = createElement('div')\n bindClassList(root, props, () => [\n 'vui-alert',\n `vui-alert--${readProp<AlertTone>(props, 'tone', 'info')}`\n ])\n bindCommonAttributes(root, props, ['tone', 'title', 'description', 'icon', 'role'])\n bindUserStyle(root, props)\n setAttribute(root, 'role', 'alert')\n\n if (hasProp(props, 'icon')) {\n const icon = createElement('span')\n setAttribute(icon, 'class', 'vui-alert__icon')\n mountSlot(icon, props, 'icon')\n insertBefore(root, icon, null)\n }\n\n const content = createElement('div')\n if (hasProp(props, 'title')) {\n const title = createElement('div')\n const text = createText('')\n setAttribute(title, 'class', 'vui-alert__title')\n bindTextContent(text, () => readProp(props, 'title', ''))\n insertBefore(title, text, null)\n insertBefore(content, title, null)\n }\n if (hasProp(props, 'description')) {\n const description = createElement('div')\n const text = createText('')\n setAttribute(description, 'class', 'vui-alert__desc')\n bindTextContent(text, () => readProp(props, 'description', ''))\n insertBefore(description, text, null)\n insertBefore(content, description, null)\n }\n if (hasProp(props, 'children')) mountSlot(content, props, 'children')\n insertBefore(root, content, null)\n return root\n}\n","import { effect, state } from '@vobs/reactivity'\nimport {\n addEventListener,\n createElement,\n createFragment,\n createText,\n insertBefore,\n insertDynamic,\n setAttribute,\n setProperty,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n hasProp,\n mountSlot,\n readProp,\n resolveSlot\n} from './utils'\nimport type { VuiChildren, VuiCommonProps } from './types'\n\nexport interface TabItem {\n readonly id: string\n readonly label: string\n readonly disabled?: boolean\n readonly content?: VuiChildren\n}\n\nexport interface TabsProps extends VuiCommonProps {\n readonly items: readonly TabItem[]\n readonly value?: string\n readonly variant?: 'default' | 'filled'\n readonly onChange?: (id: string) => void\n}\n\nexport function Tabs(props: TabsProps): VobsNode {\n const root = createElement('div')\n const tablist = createElement('div')\n const panel = createElement('div')\n const internalValue = state<string | undefined>(undefined)\n\n bindClassList(root, props, () => ['vui-tabs-root'])\n bindCommonAttributes(root, props, ['items', 'value', 'variant', 'onChange'])\n setAttribute(tablist, 'role', 'tablist')\n effect(() => {\n const variant = readProp<'default' | 'filled'>(props, 'variant', 'default')\n setAttribute(tablist, 'class', `vui-tabs${variant === 'filled' ? ' vui-tabs--filled' : ''}`)\n })\n setAttribute(panel, 'class', 'vui-tabs__panel')\n\n insertDynamic(tablist, null, () => createTabButtons(props, internalValue))\n insertDynamic(panel, null, () => {\n const item = activeItem(readProp<readonly TabItem[]>(props, 'items', []), activeId(props, internalValue))\n return item?.content === undefined ? null : resolveSlot(item.content)\n })\n insertBefore(root, tablist, null)\n insertBefore(root, panel, null)\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n\nfunction createTabButtons(props: TabsProps, internalValue: { value: string | undefined }): VobsNode {\n const items = readProp<readonly TabItem[]>(props, 'items', [])\n const selected = activeId(props, internalValue)\n return createFragment((parent, anchor) => {\n for (const item of items) {\n const button = createElement('button')\n const isActive = item.id === selected\n setAttribute(button, 'class', `vui-tab${isActive ? ' is-active' : ''}`)\n setAttribute(button, 'role', 'tab')\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'aria-selected', isActive ? 'true' : 'false')\n setAttribute(button, 'data-tab-id', item.id)\n if (item.disabled === true) {\n setAttribute(button, 'aria-disabled', 'true')\n setProperty(button, 'disabled', true)\n }\n insertBefore(button, createText(item.label), null)\n addEventListener(button, 'click', () => {\n if (item.disabled === true) return\n if (readProp<string | undefined>(props, 'value', undefined) === undefined) internalValue.value = item.id\n const onChange = readProp<unknown>(props, 'onChange', undefined)\n if (typeof onChange === 'function') onChange(item.id)\n })\n insertBefore(parent, button, anchor)\n }\n })\n}\n\nfunction activeId(props: TabsProps, internalValue: { value: string | undefined }): string | undefined {\n const controlled = readProp<string | undefined>(props, 'value', undefined)\n if (controlled !== undefined) return controlled\n if (internalValue.value !== undefined) return internalValue.value\n return readProp<readonly TabItem[]>(props, 'items', []).find(item => item.disabled !== true)?.id\n}\n\nfunction activeItem(items: readonly TabItem[], id: string | undefined): TabItem | undefined {\n return items.find(item => item.id === id)\n}\n","import { getCurrentOwner, onDispose } from '@vobs/reactivity'\nimport {\n createComment,\n insertBefore,\n isVobsFragment,\n type VobsNode\n} from '@vobs/vobs'\n\nexport interface VuiPortalAdapter<Target = unknown> {\n mount(node: VobsNode, target: Target): void\n unmount(node: VobsNode, target: Target): void\n}\n\nexport function createPortal<Target>(\n node: VobsNode,\n adapter: VuiPortalAdapter<Target>,\n target: Target\n): VobsNode {\n const placeholder = createComment('vui:portal')\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs UI: createPortal 必须在组件 Owner 作用域内调用')\n adapter.mount(node, target)\n const cleanup = (): void => adapter.unmount(node, target)\n owner.onDispose(cleanup)\n return placeholder\n}\n\nexport function createDOMPortalAdapter(): VuiPortalAdapter<Node> {\n return {\n mount(node, target): void {\n insertBefore(target, node, null)\n },\n unmount(node, target): void {\n removePortalNode(node, target)\n }\n }\n}\n\nexport interface FocusTrapOptions {\n readonly initialFocus?: HTMLElement | (() => HTMLElement | null)\n readonly restoreFocus?: boolean\n readonly onEscape?: (event: KeyboardEvent) => void\n}\n\nexport interface FocusTrapHandle {\n readonly active: boolean\n activate(): void\n deactivate(): void\n dispose(): void\n}\n\nexport function createFocusTrap(\n root: HTMLElement,\n options: FocusTrapOptions = {}\n): FocusTrapHandle {\n let isActive = false\n let disposed = false\n let previouslyFocused: Element | null = null\n\n const focusable = (): HTMLElement[] => [...root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)]\n .filter(element => !element.hasAttribute('disabled') && element.getAttribute('aria-hidden') !== 'true')\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!isActive || disposed) return\n if (event.key === 'Escape') {\n options.onEscape?.(event)\n return\n }\n if (event.key !== 'Tab') return\n const elements = focusable()\n if (elements.length === 0) {\n event.preventDefault()\n root.focus()\n return\n }\n const first = elements[0]\n const last = elements[elements.length - 1]\n const current = document.activeElement\n if (event.shiftKey && current === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && current === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n const activate = (): void => {\n if (disposed || isActive) return\n isActive = true\n previouslyFocused = document.activeElement\n root.addEventListener('keydown', onKeyDown)\n const initial = resolveInitialFocus(options.initialFocus) ?? focusable()[0] ?? root\n if (!root.hasAttribute('tabindex') && initial === root) root.setAttribute('tabindex', '-1')\n initial.focus()\n }\n\n const deactivate = (): void => {\n if (!isActive) return\n isActive = false\n root.removeEventListener('keydown', onKeyDown)\n if (options.restoreFocus !== false\n && typeof HTMLElement !== 'undefined'\n && previouslyFocused instanceof HTMLElement) previouslyFocused.focus()\n previouslyFocused = null\n }\n\n const handle: FocusTrapHandle = {\n get active(): boolean { return isActive },\n activate,\n deactivate,\n dispose(): void {\n if (disposed) return\n deactivate()\n disposed = true\n }\n }\n if (getCurrentOwner()) onDispose(() => handle.dispose())\n return handle\n}\n\nexport interface OverlayEntry {\n readonly id: string\n readonly modal?: boolean\n readonly closeOnEscape?: boolean\n readonly onEscape?: () => void\n}\n\nexport interface OverlayManager {\n readonly entries: readonly OverlayEntry[]\n open(entry: OverlayEntry): void\n close(id: string): void\n bringToFront(id: string): void\n subscribe(listener: (entries: readonly OverlayEntry[]) => void): () => void\n}\n\nexport function createOverlayManager(): OverlayManager {\n let entries: OverlayEntry[] = []\n const listeners = new Set<(entries: readonly OverlayEntry[]) => void>()\n const notify = (): void => {\n const snapshot = entries.slice()\n for (const listener of listeners) listener(snapshot)\n }\n\n return {\n get entries(): readonly OverlayEntry[] { return entries },\n open(entry): void {\n entries = [...entries.filter(current => current.id !== entry.id), entry]\n notify()\n },\n close(id): void {\n const next = entries.filter(entry => entry.id !== id)\n if (next.length === entries.length) return\n entries = next\n notify()\n },\n bringToFront(id): void {\n const entry = entries.find(current => current.id === id)\n if (!entry || entries[entries.length - 1] === entry) return\n entries = [...entries.filter(current => current !== entry), entry]\n notify()\n },\n subscribe(listener): () => void {\n listeners.add(listener)\n listener(entries.slice())\n return () => listeners.delete(listener)\n }\n }\n}\n\nfunction resolveInitialFocus(\n target: FocusTrapOptions['initialFocus']\n): HTMLElement | null {\n if (!target) return null\n return typeof target === 'function' ? target() : target\n}\n\nfunction removePortalNode(node: VobsNode, target: Node): void {\n if (isVobsFragment(node)) {\n let current = node.start.nextSibling\n while (current && current !== node.end) {\n const next = current.nextSibling\n target.removeChild(current)\n current = next\n }\n if (node.start.parentNode === target) target.removeChild(node.start)\n if (node.end.parentNode === target) target.removeChild(node.end)\n return\n }\n if (node.parentNode === target) target.removeChild(node)\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]'\n].join(',')\n","import { effect } from '@vobs/reactivity'\nimport {\n addEventListener,\n createElement,\n createText,\n insertBefore,\n setAttribute,\n type VobsNode\n} from '@vobs/vobs'\nimport {\n bindClassList,\n bindCommonAttributes,\n bindTextContent,\n bindUserStyle,\n hasProp,\n mountSlot,\n readProp,\n setOptionalAttribute,\n setOptionalProperty\n} from './utils'\nimport type { VuiCommonProps } from './types'\nimport type { VuiPortalAdapter } from './overlay'\nimport { createPortal } from './overlay'\n\nexport type DialogCloseReason = 'close-button' | 'backdrop' | 'escape'\n\nexport interface DialogProps extends VuiCommonProps {\n readonly open?: boolean\n readonly title?: string\n readonly headerActions?: VobsNode | (() => VobsNode | null | undefined)\n readonly size?: 'sm' | 'md' | 'lg'\n readonly modal?: boolean\n readonly closeOnBackdrop?: boolean\n readonly closeOnEscape?: boolean\n readonly titleId?: string\n readonly descriptionId?: string\n readonly closeLabel?: string\n readonly onClose?: (reason: DialogCloseReason) => void\n readonly portal?: VuiPortalAdapter<unknown>\n readonly portalTarget?: unknown\n}\n\nexport function Dialog(props: DialogProps = {}): VobsNode {\n const root = createElement('div')\n const surface = createElement('section')\n const body = createElement('div')\n\n bindClassList(root, props, () => ['vui-backdrop'])\n bindUserStyle(root, props)\n bindCommonAttributes(surface, props, [\n 'open',\n 'title',\n 'headerActions',\n 'size',\n 'modal',\n 'closeOnBackdrop',\n 'closeOnEscape',\n 'titleId',\n 'descriptionId',\n 'closeLabel',\n 'onClose',\n 'portal',\n 'portalTarget'\n ])\n setAttribute(root, 'role', 'presentation')\n setAttribute(surface, 'class', 'vui-dialog')\n setAttribute(surface, 'role', 'dialog')\n setAttribute(body, 'class', 'vui-dialog__body')\n\n effect(() => {\n const open = readProp(props, 'open', false)\n const modal = readProp(props, 'modal', true)\n setOptionalProperty(root, 'hidden', !open)\n setOptionalAttribute(root, 'data-state', open ? 'open' : 'closed')\n setOptionalAttribute(surface, 'aria-modal', modal ? 'true' : 'false')\n setOptionalAttribute(surface, 'aria-labelledby', readProp<string | undefined>(props, 'titleId', undefined))\n setOptionalAttribute(surface, 'aria-describedby', readProp<string | undefined>(props, 'descriptionId', undefined))\n setOptionalAttribute(surface, 'data-size', readProp(props, 'size', 'md'))\n })\n\n if (hasProp(props, 'title') || hasProp(props, 'headerActions') || hasProp(props, 'onClose')) {\n const head = createElement('header')\n setAttribute(head, 'class', 'vui-dialog__head')\n if (hasProp(props, 'title')) {\n const title = createElement('div')\n const text = createText('')\n setAttribute(title, 'class', 'vui-dialog__title')\n bindTextContent(text, () => readProp(props, 'title', ''))\n insertBefore(title, text, null)\n insertBefore(head, title, null)\n }\n if (hasProp(props, 'headerActions')) mountSlot(head, props, 'headerActions')\n if (hasProp(props, 'onClose')) {\n const close = createElement('button')\n setAttribute(close, 'class', 'vui-dialog__close')\n setAttribute(close, 'type', 'button')\n setAttribute(close, 'aria-label', readProp(props, 'closeLabel', 'Close'))\n insertBefore(close, createText('x'), null)\n addEventListener(close, 'click', () => emitClose(props, 'close-button'))\n insertBefore(head, close, null)\n }\n insertBefore(surface, head, null)\n }\n\n if (hasProp(props, 'children')) mountSlot(body, props, 'children')\n insertBefore(surface, body, null)\n insertBefore(root, surface, null)\n\n addEventListener(root, 'click', event => {\n if (event.target !== root) return\n if (readProp(props, 'closeOnBackdrop', true)) emitClose(props, 'backdrop')\n })\n addEventListener(root, 'keydown', event => {\n if ((event as KeyboardEvent).key !== 'Escape') return\n if (readProp(props, 'closeOnEscape', true)) emitClose(props, 'escape')\n })\n const portal = readProp<VuiPortalAdapter<unknown> | undefined>(props, 'portal', undefined)\n return portal\n ? createPortal(root, portal, readProp(props, 'portalTarget', undefined))\n : root\n}\n\nfunction emitClose(props: DialogProps, reason: DialogCloseReason): void {\n if (!readProp(props, 'open', false)) return\n const handler = readProp<unknown>(props, 'onClose', undefined)\n if (typeof handler === 'function') handler(reason)\n}\n","import { effect } from '@vobs/reactivity'\nimport {\n createElement,\n setAttribute,\n setProperty,\n type VobsNode\n} from '@vobs/vobs'\n\nexport interface IconDefinition {\n readonly name: string\n readonly path: string\n readonly viewBox?: string\n}\n\nexport interface SvgIconDefinition {\n readonly name: string\n readonly body: string\n readonly viewBox?: string\n readonly attributes?: Readonly<Record<string, string | number | undefined>>\n}\n\nexport interface VobsIconProps {\n readonly size?: string | number\n readonly width?: string | number\n readonly height?: string | number\n readonly color?: string\n readonly stroke?: string\n readonly strokeWidth?: string | number\n readonly fill?: string\n readonly class?: string\n readonly className?: string\n readonly style?: string\n readonly id?: string\n readonly title?: string\n readonly role?: string\n readonly tabIndex?: number\n readonly decorative?: boolean\n readonly [name: `aria-${string}`]: string | number | boolean | undefined\n readonly [name: `data-${string}`]: string | number | boolean | undefined\n}\n\nexport type VobsIconComponent<Props extends VobsIconProps = VobsIconProps> =\n (props?: Props) => VobsNode\n\nexport interface SvgIconRenderOptions {\n readonly class?: string\n readonly className?: string\n readonly dataIconName?: string\n readonly defaultSvgAttributes?: Readonly<Record<string, string | number | undefined>>\n}\n\ntype IconSource = SvgIconDefinition | (() => SvgIconDefinition | undefined)\n\nexport function createIcon<const Name extends string>(\n name: Name,\n path: string,\n viewBox = '0 0 24 24'\n): IconDefinition & { readonly name: Name } {\n return { name, path, viewBox }\n}\n\nexport function createSvgIcon<\n const Name extends string,\n Props extends VobsIconProps = VobsIconProps\n>(\n definition: SvgIconDefinition & { readonly name: Name }\n): VobsIconComponent<Props> {\n const component = (props: Props = {} as Props): VobsNode => (\n createSvgIconNode(definition, props)\n )\n Object.defineProperty(component, 'displayName', { value: definition.name })\n return component\n}\n\nexport function createSvgIconNode(\n source: IconSource,\n props: VobsIconProps = {},\n options: SvgIconRenderOptions = {}\n): VobsNode {\n const root = createElement('span')\n effect(() => {\n updateSvgIconNode(root, typeof source === 'function' ? source() : source, props, options)\n })\n return root\n}\n\nfunction updateSvgIconNode(\n root: Element,\n definition: SvgIconDefinition | undefined,\n props: VobsIconProps,\n options: SvgIconRenderOptions\n): void {\n const size = readProp(props, 'size', undefined)\n const width = readProp(props, 'width', size)\n const height = readProp(props, 'height', size)\n const normalizedWidth = normalizeSvgLength(width)\n const normalizedHeight = normalizeSvgLength(height)\n const userClass = [\n readProp<string | undefined>(props, 'class', undefined),\n readProp<string | undefined>(props, 'className', undefined)\n ]\n .filter(hasText)\n .join(' ')\n const className = [options.class, options.className, userClass]\n .filter(hasText)\n .join(' ')\n setAttribute(root, 'class', className)\n\n const internalStyle = size === undefined ? '' : `width: ${normalizeCssLength(size)}; height: ${normalizeCssLength(size)}`\n const userStyle = readProp<string | undefined>(props, 'style', undefined)\n const style = [internalStyle, userStyle].filter(hasText).join('; ')\n setOptionalAttribute(root, 'style', style || undefined)\n\n const managedAttributes = new Map<string, string>()\n for (const name of Object.keys(props)) {\n if (name === 'class' || name === 'className' || name === 'style' || name === 'children') continue\n if (!name.startsWith('aria-') && !name.startsWith('data-') && !['id', 'title', 'role', 'tabIndex'].includes(name)) continue\n const value = Reflect.get(props, name)\n if (value === undefined || value === null || value === false) continue\n managedAttributes.set(name === 'tabIndex' ? 'tabindex' : name, String(value))\n }\n for (const [name, value] of managedAttributes) setAttribute(root, name, value)\n clearStaleAttributes(root, managedAttributes)\n\n const title = readProp(props, 'title', undefined)\n const ariaLabel = Reflect.get(props, 'aria-label')\n const decorative = readProp(props, 'decorative', title === undefined && ariaLabel === undefined)\n setOptionalAttribute(root, 'aria-hidden', decorative ? 'true' : undefined)\n setOptionalAttribute(root, 'aria-label', ariaLabel === undefined ? title : undefined)\n setOptionalAttribute(root, 'data-icon-name', options.dataIconName ?? definition?.name)\n setOptionalAttribute(root, 'color', readProp(props, 'color', undefined))\n\n if (!definition) {\n setProperty(root, 'innerHTML', '')\n return\n }\n\n const svgAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: definition.viewBox ?? '0 0 24 24',\n ...options.defaultSvgAttributes,\n ...definition.attributes,\n ...(normalizedWidth === undefined ? {} : { width: normalizedWidth }),\n ...(normalizedHeight === undefined ? {} : { height: normalizedHeight }),\n ...(readProp(props, 'color', undefined) === undefined ? {} : { color: readProp(props, 'color', undefined) }),\n ...(readProp(props, 'stroke', undefined) === undefined ? {} : { stroke: readProp(props, 'stroke', undefined) }),\n ...(readProp(props, 'fill', undefined) === undefined ? {} : { fill: readProp(props, 'fill', undefined) }),\n ...(readProp(props, 'strokeWidth', undefined) === undefined ? {} : { 'stroke-width': readProp(props, 'strokeWidth', undefined) })\n }\n const markup = Object.entries(svgAttributes)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => `${name}=\"${escapeXml(String(value))}\"`)\n .join(' ')\n const titleMarkup = title === undefined ? '' : `<title>${escapeXml(title)}</title>`\n setProperty(root, 'innerHTML', `<svg ${markup} aria-hidden=\"true\">${titleMarkup}${definition.body}</svg>`)\n}\n\nfunction readProp<T>(props: object, name: string, fallback: T): T {\n const value = Reflect.get(props, name)\n return (value === undefined ? fallback : value) as T\n}\n\nfunction hasText(value: string | undefined): value is string {\n return value !== undefined && value.trim() !== ''\n}\n\nfunction normalizeSvgLength(value: string | number | undefined): string | undefined {\n if (value === undefined) return undefined\n return typeof value === 'number' ? String(value) : value\n}\n\nfunction normalizeCssLength(value: string | number): string {\n return typeof value === 'number' || /^\\d+(?:\\.\\d+)?$/u.test(value) ? `${value}px` : value\n}\n\nfunction setOptionalAttribute(node: Element, name: string, value: unknown): void {\n if (value === undefined || value === null || value === false || value === '') {\n node.removeAttribute(name)\n return\n }\n setAttribute(node, name, String(value))\n}\n\nfunction clearStaleAttributes(node: Element, next: ReadonlyMap<string, string>): void {\n const previous = (node as Element & { __vobsIconAttributes?: Set<string> }).__vobsIconAttributes ?? new Set<string>()\n for (const name of previous) {\n if (!next.has(name)) node.removeAttribute(name)\n }\n ;(node as Element & { __vobsIconAttributes?: Set<string> }).__vobsIconAttributes = new Set(next.keys())\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/gu, '&amp;')\n .replace(/</gu, '&lt;')\n .replace(/>/gu, '&gt;')\n .replace(/\"/gu, '&quot;')\n}\n","import {\n createIcon,\n createSvgIconNode,\n type IconDefinition,\n type SvgIconDefinition,\n type VobsIconProps\n} from '@vobs/icon-core'\nimport { hasProp, mountSlot, readProp } from './utils'\nimport type { VobsNode } from '@vobs/vobs'\nimport type { VuiCommonProps } from './types'\n\nexport type { IconDefinition } from '@vobs/icon-core'\n\nexport interface IconProps extends VuiCommonProps, VobsIconProps {\n readonly name?: string\n readonly icon?: IconDefinition\n}\n\nexport function Icon(props: IconProps = {}): VobsNode {\n const root = createSvgIconNode(() => {\n const definition = resolveIcon(\n readProp<IconDefinition | string | undefined>(props, 'icon', undefined)\n ?? readProp<string | undefined>(props, 'name', undefined)\n )\n if (!definition) {\n if (hasProp(props, 'children')) return undefined\n throw new Error('Vobs UI: Icon requires a registered `name` or an `icon` definition')\n }\n return iconDefinitionToSvg(definition)\n }, props, {\n class: 'vui-icon icon',\n defaultSvgAttributes: {\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'butt',\n 'stroke-linejoin': 'miter'\n }\n }) as Element\n\n if (hasProp(props, 'children')) mountSlot(root, props, 'children')\n return root\n}\n\nfunction iconDefinitionToSvg(definition: IconDefinition): SvgIconDefinition {\n return {\n name: definition.name,\n body: definition.path,\n viewBox: definition.viewBox\n }\n}\n\nconst VUI_ICON_PATHS = {\n search: '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.5-3.5\"/>',\n check: '<polyline points=\"4 12 10 18 20 6\"/>',\n x: '<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>',\n plus: '<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>',\n minus: '<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>',\n 'chevron-right': '<polyline points=\"9 6 15 12 9 18\"/>',\n 'chevron-down': '<polyline points=\"6 9 12 15 18 9\"/>',\n 'chevron-up': '<polyline points=\"6 15 12 9 18 15\"/>',\n 'chevron-left': '<polyline points=\"15 6 9 12 15 18\"/>',\n 'arrow-left': '<line x1=\"20\" y1=\"12\" x2=\"4\" y2=\"12\"/><polyline points=\"10 6 4 12 10 18\"/>',\n 'arrow-right': '<line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\"/><polyline points=\"14 6 20 12 14 18\"/>',\n 'arrow-up': '<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"/><polyline points=\"6 10 12 4 18 10\"/>',\n 'arrow-down': '<line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"/><polyline points=\"6 14 12 20 18 14\"/>',\n atom: '<circle cx=\"12\" cy=\"12\" r=\"2\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\" transform=\"rotate(60 12 12)\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\" transform=\"rotate(120 12 12)\"/>',\n globe: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\"/>',\n 'arrow-expand': '<polyline points=\"14 4 20 4 20 10\"/><line x1=\"14\" y1=\"10\" x2=\"20\" y2=\"4\"/><polyline points=\"10 20 4 20 4 14\"/><line x1=\"10\" y1=\"14\" x2=\"4\" y2=\"20\"/>',\n 'arrow-minimize': '<polyline points=\"20 4 14 10 20 10\"/><line x1=\"14\" y1=\"10\" x2=\"14\" y2=\"4\"/><polyline points=\"4 20 10 14 4 14\"/><line x1=\"10\" y1=\"14\" x2=\"10\" y2=\"20\"/>',\n 'check-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><polyline points=\"8 12 11 15 16 9\"/>',\n 'alert-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16.01\"/>',\n 'alert-triangle': '<path d=\"M12 3 22 20 2 20 Z\"/><line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"15\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"18.01\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"16\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8.01\"/>',\n home: '<polygon points=\"3 11 12 3 21 11 21 21 14 21 14 14 10 14 10 21 3 21 3 11\"/>',\n user: '<path d=\"M4 21v-1a6 6 0 0 1 6-6h4a6 6 0 0 1 6 6v1\"/><circle cx=\"12\" cy=\"8\" r=\"4\"/>',\n settings: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z\"/>',\n menu: '<line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\"/><line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\"/><line x1=\"4\" y1=\"18\" x2=\"20\" y2=\"18\"/>',\n 'more-h': '<circle cx=\"5\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"19\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/>',\n calendar: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"16\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/><line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"7\"/><line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"7\"/>',\n filter: '<polygon points=\"3 4 21 4 14 12 14 20 10 18 10 12 3 4\"/>',\n sort: '<path d=\"M8 20V4\"/><polyline points=\"4 8 8 4 12 8\"/><path d=\"M16 4v16\"/><polyline points=\"12 16 16 20 20 16\"/>',\n edit: '<path d=\"M4 20h4l10-10-4-4L4 16v4z\"/><path d=\"M14 6l4 4\"/>',\n trash: '<polyline points=\"4 6 20 6\"/><path d=\"M6 6v14h12V6\"/><path d=\"M9 6V4h6v2\"/><line x1=\"10\" y1=\"10\" x2=\"10\" y2=\"17\"/><line x1=\"14\" y1=\"10\" x2=\"14\" y2=\"17\"/>',\n download: '<path d=\"M12 3v12\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/>',\n upload: '<path d=\"M12 21V6\"/><polyline points=\"7 11 12 6 17 11\"/><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/>',\n pause: '<line x1=\"9\" y1=\"5\" x2=\"9\" y2=\"19\"/><line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"19\"/>',\n play: '<polygon points=\"8 5 19 12 8 19 8 5\"/>',\n refresh: '<polyline points=\"21 4 21 10 15 10\"/><polyline points=\"3 20 3 14 9 14\"/><path d=\"M20.5 9A9 9 0 0 0 5 5.5L3 7M3.5 15A9 9 0 0 0 19 18.5L21 17\"/>',\n bell: '<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 8 3 8H3s3-1 3-8z\"/><path d=\"M10 21a2 2 0 0 0 4 0\"/>',\n folder: '<path d=\"M3 6h6l2 3h10v10H3z\"/>',\n code: '<polyline points=\"16 18 22 12 16 6\"/><polyline points=\"8 6 2 12 8 18\"/>',\n sparkles: '<path d=\"M12 3l1.8 4.2L18 9l-4.2 1.8L12 15l-1.8-4.2L6 9l4.2-1.8L12 3z\"/><path d=\"M19 14l1 2.2 2.2 1-2.2 1L19 20.4l-1-2.2-2.2-1 2.2-1L19 14z\"/>',\n zap: '<polygon points=\"13 2 4 14 12 14 11 22 20 10 12 10 13 2\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"5\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\"/><line x1=\"2\" y1=\"12\" x2=\"5\" y2=\"12\"/><line x1=\"19\" y1=\"12\" x2=\"22\" y2=\"12\"/><line x1=\"4.6\" y1=\"4.6\" x2=\"6.7\" y2=\"6.7\"/><line x1=\"17.3\" y1=\"17.3\" x2=\"19.4\" y2=\"19.4\"/><line x1=\"4.6\" y1=\"19.4\" x2=\"6.7\" y2=\"17.3\"/><line x1=\"17.3\" y1=\"6.7\" x2=\"19.4\" y2=\"4.6\"/>',\n moon: '<path d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z\"/>',\n terminal: '<polyline points=\"4 7 9 12 4 17\"/><line x1=\"12\" y1=\"17\" x2=\"20\" y2=\"17\"/>'\n} as const\n\nconst iconRegistry = new Map<string, IconDefinition>(\n Object.entries(VUI_ICON_PATHS).map(([name, path]) => [name, { name, path }])\n)\n\nexport { VUI_ICON_PATHS }\nexport { createIcon, registerIcon, resolveIcon }\n\nfunction registerIcon(icon: IconDefinition): () => void {\n const previous = iconRegistry.get(icon.name)\n iconRegistry.set(icon.name, icon)\n return () => {\n if (previous) iconRegistry.set(icon.name, previous)\n else iconRegistry.delete(icon.name)\n }\n}\n\nfunction resolveIcon(icon: string | IconDefinition | undefined): IconDefinition | undefined {\n return typeof icon === 'string' ? iconRegistry.get(icon) : icon\n}\n","import {\n getDevTools,\n type ComponentDebugNode,\n type DevToolsAPI,\n type DevToolsErrorTrace,\n type DevToolsRouterContext,\n type DevToolsSelection,\n type EffectExecutionInfo,\n type EffectDebugInfo,\n type LifecycleEvent,\n type NetworkRequestTrace,\n type SignalDebugInfo,\n type UpdateTrace\n} from '@vobs/devtools'\nimport { HTTP_KEY, type HTTPClient, type HTTPMethod } from '@vobs/http'\nimport type { Router, RouterDevToolsAPI, RouteDebugNode, RouteRecord, RouterDataRequestTrace, RouteErrorTrace } from '@vobs/router'\nimport { effect } from '@vobs/reactivity'\nimport { createComponent, createElement, createFragment, createText, inject, insertBefore, insertDynamic, onDispose, setAttribute, setProperty, state, type VobsNode } from '@vobs/vobs'\nimport { Alert, Button, Card, Icon, Select, Tabs, Tag } from '@vobs/ui'\n\nexport interface DevToolsSnapshot {\n readonly api: DevToolsAPI | null\n readonly tree: readonly ComponentDebugNode[]\n readonly signals: readonly SignalDebugInfo[]\n readonly effects: readonly EffectDebugInfo[]\n readonly updates: readonly UpdateTrace[]\n readonly lifecycle: readonly LifecycleEvent[]\n readonly network: readonly NetworkRequestTrace[]\n readonly errors: readonly DevToolsErrorTrace[]\n readonly metrics: ReturnType<DevToolsAPI['getPerformanceMetrics']> | null\n readonly performanceEntries: ReturnType<DevToolsAPI['getPerformanceEntries']>\n readonly memory: ReturnType<DevToolsAPI['takeMemorySnapshot']> | null\n readonly router: RouterDevToolsAPI | null\n readonly routerContext: DevToolsRouterContext | null\n}\n\nexport interface DevToolsPanelProps {\n readonly api?: DevToolsAPI | null\n readonly router?: Router | null\n readonly http?: HTTPClient | null\n readonly query?: { value: string }\n readonly toolbarPlacement?: 'content' | 'header' | 'none'\n}\n\nconst EMPTY_SNAPSHOT: DevToolsSnapshot = {\n api: null,\n tree: [],\n signals: [],\n effects: [],\n updates: [],\n lifecycle: [],\n network: [],\n errors: [],\n metrics: null,\n performanceEntries: [],\n memory: null,\n router: null,\n routerContext: null\n}\n\n// The panel itself performs DOM work and creates reactive effects. Listening to\n// creation/mutation events here would make the inspector refresh itself forever.\nconst PANEL_REFRESH_EVENTS = ['signal-update', 'update', 'lifecycle', 'network-request', 'router', 'error', 'collection', 'collection-cleared'] as const\n\nexport function readDevToolsSnapshot(api: DevToolsAPI | null = getDevTools()): DevToolsSnapshot {\n return readDevToolsSnapshotWithRouter(api, null)\n}\n\nfunction readDevToolsSnapshotWithRouter(api: DevToolsAPI | null, router: Router | null): DevToolsSnapshot {\n if (!api) return { ...EMPTY_SNAPSHOT, router: router?.devtools ?? null }\n return {\n api,\n tree: api.getComponentTree(),\n signals: api.getSignals(),\n effects: api.getEffects(),\n updates: api.getUpdates(),\n lifecycle: api.getLifecycleEvents(),\n network: api.getNetworkRequests(),\n errors: api.getErrors(),\n metrics: api.getPerformanceMetrics(),\n performanceEntries: api.getPerformanceEntries(),\n memory: api.takeMemorySnapshot(),\n router: router?.devtools ?? null,\n routerContext: api.getRouterContext()\n }\n}\n\nexport function DevToolsPanel(props: DevToolsPanelProps = {}) {\n const refreshCount = state(0)\n const activeSection = state<DevToolsSection>('updates')\n const activeAdvancedSection = state<AdvancedSection>('signals')\n const activeRouterTab = state<RouterPanelTab>('context')\n const activeUpdatesTab = state<UpdatesPanelTab>('updates')\n const activeComponentsTab = state<ComponentsPanelTab>('tree')\n const activeRouteView = state<'tree' | 'list'>('tree')\n const activeTimelineFilter = state<TimelineFilter>('all')\n const networkSelection = state<string | null>(null)\n const networkSourceFilter = state<NetworkSourceFilter>('all')\n const networkStatusFilter = state<NetworkStatusFilter>('all')\n const networkDetailTab = state<NetworkDetailTab>('overview')\n const networkTesterOpen = state(false)\n const networkTesterRevision = state(0)\n const networkTesterRun = state<RequestTesterRun>({ status: 'idle' })\n const networkTesterTab = state<RequestTesterTab>('params')\n let networkTesterDraft = createRequestTesterDraft()\n const selection = state<DevToolsSelection | null>(null)\n const query = props.query ?? state('')\n const http = props.http ?? inject(HTTP_KEY) ?? null\n let refreshInvalidating = false\n\n const notifyRefresh = (): void => {\n // The panel's own local signals are also visible to the runtime hooks. Do\n // not recursively invalidate it while handling the update it just caused.\n if (refreshInvalidating) return\n refreshInvalidating = true\n refreshCount.value++\n queueMicrotask(() => { refreshInvalidating = false })\n }\n\n // Event callbacks only invalidate the panel. The next reactive render reads a fresh snapshot.\n queueMicrotask(notifyRefresh)\n const api = resolveApi(props)\n if (api) {\n const stops = PANEL_REFRESH_EVENTS.map(event => api.subscribe(event, notifyRefresh))\n onDispose(() => { for (const stop of stops) stop() })\n }\n const router = props.router ?? null\n if (router) {\n const detachRouter = api?.attachRouter(router)\n const stopNavigationStart = router.devtools.subscribe('navigation:start', notifyRefresh)\n const stopNavigation = router.devtools.subscribe('navigation:end', notifyRefresh)\n const stopRouteUpdate = router.devtools.subscribe('route:update', notifyRefresh)\n const stopRouteError = router.devtools.subscribe('error', notifyRefresh)\n onDispose(() => { stopNavigationStart(); stopNavigation(); stopRouteUpdate(); stopRouteError(); detachRouter?.() })\n }\n\n const toolbarPlacement = props.toolbarPlacement ?? 'content'\n return <div class=\"vobs-devtools-shell\">\n <aside class=\"vobs-devtools-shell__rail\" aria-label=\"DevTools sections\">\n <div class=\"vobs-devtools-shell__mark\"><Icon name=\"code\" /></div>\n <SectionNav activeSection={activeSection} />\n </aside>\n <section class=\"vobs-devtools-shell__main\">\n <div class=\"vobs-devtools-shell__content\">{toolbarPlacement === 'content' ? <DevToolsToolbar api={api} query={query} /> : null}<DevToolsContent refreshCount={refreshCount} activeSection={activeSection} activeAdvancedSection={activeAdvancedSection} activeRouterTab={activeRouterTab} activeUpdatesTab={activeUpdatesTab} activeComponentsTab={activeComponentsTab} activeRouteView={activeRouteView} router={router} api={api} http={http} selection={selection} query={query} networkSelection={networkSelection} networkSourceFilter={networkSourceFilter} networkStatusFilter={networkStatusFilter} networkDetailTab={networkDetailTab} networkTesterOpen={networkTesterOpen} networkTesterRevision={networkTesterRevision} networkTesterRun={networkTesterRun} networkTesterDraft={networkTesterDraft} networkTesterTab={networkTesterTab} /></div>\n </section>\n <ActivityRail refreshCount={refreshCount} router={router} api={api} selection={selection} activeSection={activeSection} activeFilter={activeTimelineFilter} />\n </div>\n}\n\nexport function DevToolsToolbar(props: { readonly api: DevToolsAPI | null; readonly query: { value: string }; readonly maximized?: boolean; readonly onToggleMaximize?: () => void }): VobsNode {\n const refreshCount = state(0)\n if (props.api) {\n const stops = ['collection', 'collection-cleared'].map(event => props.api!.subscribe(event, () => { refreshCount.value++ }))\n onDispose(() => { for (const stop of stops) stop() })\n }\n return createFragment((parent, anchor) => {\n const toolbar = createElement('div')\n setAttribute(toolbar, 'class', 'vobs-devtools-collection-toolbar vobs-devtools-collection-toolbar--header')\n const search = createElement('input')\n setAttribute(search, 'class', 'vobs-devtools-search vobs-devtools-header-search')\n setAttribute(search, 'type', 'search')\n setAttribute(search, 'placeholder', 'Search diagnostics')\n // This must be its own reactive effect. Reading query while mounting the\n // dialog header makes the header slot depend on the query and replaces the\n // focused input after every keystroke.\n effect(() => {\n const next = props.query.value\n if ((search as HTMLInputElement).value !== next) setProperty(search, 'value', next)\n })\n search.addEventListener('input', () => { props.query.value = (search as HTMLInputElement).value })\n insertBefore(toolbar, search, null)\n const actions = createElement('div')\n setAttribute(actions, 'class', 'vobs-devtools-collection-toolbar__actions')\n insertBefore(toolbar, actions, null)\n insertBefore(parent, toolbar, anchor)\n\n insertDynamic(actions, null, () => {\n void refreshCount.value\n if (!props.api) return null\n const paused = props.api.getCollectionState().paused\n return createFragment((actionParent, actionAnchor) => {\n insertBefore(actionParent, createComponent(Button, {\n variant: paused ? 'warning' : 'secondary',\n iconOnly: true,\n icon: createComponent(Icon, { name: paused ? 'play' : 'pause' }),\n 'aria-label': paused ? 'Resume collection' : 'Pause collection',\n title: paused ? 'Resume collection' : 'Pause collection',\n onClick: () => props.api?.setCollectionPaused(!paused)\n }), actionAnchor)\n insertBefore(actionParent, createComponent(Button, {\n variant: 'danger-subtle',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'trash' }),\n 'aria-label': 'Clear diagnostics',\n title: 'Clear diagnostics',\n onClick: () => {\n props.api?.clearUpdates()\n props.api?.clearNetworkRequests()\n props.api?.clearErrors()\n props.api?.clearLifecycleEvents()\n }\n }), actionAnchor)\n const exportDiagnostics = (): void => {\n const data = JSON.stringify(props.api?.exportDiagnostics(), null, 2)\n if (typeof document === 'undefined' || typeof URL === 'undefined' || typeof URL.createObjectURL !== 'function' || typeof URL.revokeObjectURL !== 'function' || typeof Blob === 'undefined') return\n const link = document.createElement('a')\n link.href = URL.createObjectURL(new Blob([data], { type: 'application/json' }))\n link.download = `vobs-devtools-${new Date().toISOString().replace(/[:.]/g, '-')}.json`\n link.click()\n URL.revokeObjectURL(link.href)\n }\n insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'download' }),\n 'aria-label': 'Export diagnostics',\n title: 'Export diagnostics',\n onClick: exportDiagnostics\n }), actionAnchor)\n const importInput = createElement('input')\n setAttribute(importInput, 'type', 'file')\n setAttribute(importInput, 'accept', 'application/json,.json')\n setAttribute(importInput, 'aria-label', 'Import diagnostics')\n setAttribute(importInput, 'hidden', '')\n importInput.addEventListener('change', () => {\n const file = (importInput as HTMLInputElement).files?.[0]\n if (!file) return\n void file.text().then(text => props.api?.importDiagnostics(JSON.parse(text))).catch(error => props.api?.reportError('global', error))\n })\n insertBefore(actionParent, importInput, actionAnchor)\n insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'upload' }),\n 'aria-label': 'Import diagnostics',\n title: 'Import diagnostics',\n onClick: () => (importInput as HTMLInputElement).click()\n }), actionAnchor)\n if (props.onToggleMaximize) insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: props.maximized ? 'arrow-minimize' : 'arrow-expand' }),\n 'aria-label': props.maximized ? 'Restore DevTools' : 'Maximize DevTools',\n title: props.maximized ? 'Restore DevTools' : 'Maximize DevTools',\n onClick: props.onToggleMaximize\n }), actionAnchor)\n })\n })\n })\n}\n\ntype DevToolsSection = 'router' | 'components' | 'advanced' | 'updates' | 'network' | 'errors'\ntype AdvancedSection = 'signals' | 'effects'\ntype RouterPanelTab = 'context' | 'requests' | 'errors' | 'history' | 'routes'\ntype UpdatesPanelTab = 'performance' | 'slow' | 'updates'\ntype ComponentsPanelTab = 'tree' | 'lifecycle'\ntype TimelineFilter = 'all' | 'update' | 'request' | 'navigation' | 'error'\ntype NetworkSourceFilter = 'all' | 'http' | 'router' | 'ssr'\ntype NetworkStatusFilter = 'all' | 'loading' | 'success' | 'error' | 'cancelled'\ntype NetworkDetailTab = 'overview' | 'headers' | 'payload' | 'response' | 'timing' | 'context'\n\ninterface NetworkEntry {\n readonly key: string\n readonly source: 'http' | 'router' | 'ssr'\n readonly method: string\n readonly url: string\n readonly status: string\n readonly duration?: number\n readonly startedAt?: number\n readonly endedAt?: number\n readonly request?: NetworkRequestTrace\n readonly routerRequest?: DevToolsRouterContext['dataRequests'][number]\n}\n\ninterface RequestTesterParam {\n key: string\n value: string\n}\n\ninterface RequestTesterDraft {\n url: string\n method: HTTPMethod\n params: RequestTesterParam[]\n headers: RequestTesterParam[]\n body: string\n}\n\ntype RequestTesterRun = { status: 'idle' | 'running' | 'success' | 'error'; message?: string }\ntype RequestTesterTab = 'params' | 'headers' | 'body'\n\nfunction createRequestTesterDraft(url = ''): RequestTesterDraft {\n return { url, method: 'GET', params: [{ key: '', value: '' }], headers: [{ key: '', value: '' }], body: '' }\n}\n\nconst TIMELINE_FILTER_OPTIONS: readonly { readonly value: TimelineFilter; readonly label: string }[] = [\n { value: 'all', label: 'All events' },\n { value: 'update', label: 'Updates' },\n { value: 'request', label: 'Requests' },\n { value: 'navigation', label: 'Navigation' },\n { value: 'error', label: 'Errors' }\n]\n\nfunction resolveApi(props: DevToolsPanelProps): DevToolsAPI | null {\n return props.api === undefined ? getDevTools() : props.api\n}\n\ninterface DevToolsContentProps {\n readonly refreshCount: { readonly value: number }\n readonly activeSection: { readonly value: DevToolsSection }\n readonly activeAdvancedSection: { value: AdvancedSection }\n readonly activeRouterTab: { value: RouterPanelTab }\n readonly activeUpdatesTab: { value: UpdatesPanelTab }\n readonly activeComponentsTab: { value: ComponentsPanelTab }\n readonly activeRouteView: { value: 'tree' | 'list' }\n readonly router: Router | null\n readonly api: DevToolsAPI | null\n readonly http: HTTPClient | null\n readonly selection: { value: DevToolsSelection | null }\n readonly query: { value: string }\n readonly networkSelection: { value: string | null }\n readonly networkSourceFilter: { value: NetworkSourceFilter }\n readonly networkStatusFilter: { value: NetworkStatusFilter }\n readonly networkDetailTab: { value: NetworkDetailTab }\n readonly networkTesterOpen: { value: boolean }\n readonly networkTesterRevision: { value: number }\n readonly networkTesterRun: { value: RequestTesterRun }\n readonly networkTesterDraft: RequestTesterDraft\n readonly networkTesterTab: { value: RequestTesterTab }\n}\n\ninterface ActivityRailProps {\n readonly refreshCount: { readonly value: number }\n readonly router: Router | null\n readonly api: DevToolsAPI | null\n readonly selection: { value: DevToolsSelection | null }\n readonly activeSection: { value: DevToolsSection }\n readonly activeFilter: { value: TimelineFilter }\n}\n\nfunction DevToolsContent(props: DevToolsContentProps) {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n void props.refreshCount.value\n void props.activeSection.value\n void props.activeRouterTab.value\n void props.activeUpdatesTab.value\n void props.activeComponentsTab.value\n void props.activeRouteView.value\n void props.query.value\n void props.networkSelection.value\n void props.networkSourceFilter.value\n void props.networkStatusFilter.value\n void props.networkDetailTab.value\n void props.networkTesterOpen.value\n void props.networkTesterRevision.value\n void props.networkTesterRun.value\n void props.networkTesterTab.value\n const selected = props.selection.value\n const snapshot = readDevToolsSnapshotWithRouter(props.api, props.router)\n return renderDevToolsContent(snapshot, props.activeSection.value, props.router, props.activeRouterTab, props.activeUpdatesTab, props.activeComponentsTab, selected, focusSelection(props.activeSection, props.selection), props.query.value, props.activeAdvancedSection, props.activeRouteView, props.networkSelection, props.networkSourceFilter, props.networkStatusFilter, props.networkDetailTab, props.query, props.http, props.networkTesterOpen, props.networkTesterRevision, props.networkTesterRun, props.networkTesterDraft, props.networkTesterTab)\n })\n })\n}\n\nfunction ActivityRail(props: ActivityRailProps) {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n void props.refreshCount.value\n const filter = props.activeFilter.value\n const selected = props.selection.value\n const snapshot = readDevToolsSnapshotWithRouter(props.api, props.router)\n const updates = [...snapshot.updates].reverse().slice(0, 8)\n const timeline = collectActivityTimeline(snapshot, props.router, filter)\n return renderActivityRail(updates, timeline, snapshot.api, selected, filter, next => { props.activeFilter.value = next }, focusSelection(props.activeSection, props.selection))\n })\n })\n}\n\nfunction focusSelection(\n activeSection: { value: DevToolsSection },\n selection: { value: DevToolsSelection | null }\n): (section: DevToolsSection, next: DevToolsSelection) => void {\n return (section, next) => {\n selection.value = next\n activeSection.value = section\n }\n}\n\nfunction SectionNav(props: { readonly activeSection: { value: DevToolsSection } }): VobsNode {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n const selected = props.activeSection.value\n return createFragment((navParent, navAnchor) => {\n for (const section of ['updates', 'components', 'advanced', 'network', 'errors', 'router'] as const) {\n const label = section === 'components' ? 'comp...' : section === 'advanced' ? 'adv...' : section\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-shell__nav-item${selected === section ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n const accessibleLabel = section === 'advanced' ? 'Advanced' : section\n setAttribute(button, 'aria-label', accessibleLabel)\n setAttribute(button, 'title', accessibleLabel)\n setAttribute(button, 'aria-pressed', selected === section ? 'true' : 'false')\n insertBefore(button, createComponent(Icon, { name: section === 'router' ? 'folder' : section === 'components' ? 'code' : section === 'advanced' ? 'atom' : section === 'network' ? 'globe' : section === 'errors' ? 'alert-triangle' : 'refresh' }), null)\n insertBefore(button, createElementText(label), null)\n button.addEventListener('click', () => { props.activeSection.value = section })\n insertBefore(navParent, button, navAnchor)\n }\n })\n })\n })\n}\n\ninterface ActivityTimelineItem {\n readonly kind: Exclude<TimelineFilter, 'all'>\n readonly timestamp: number\n readonly title: string\n readonly detail?: string\n readonly icon: string\n readonly update?: UpdateTrace\n}\n\nfunction collectActivityTimeline(snapshot: DevToolsSnapshot, router: Router | null, filter: TimelineFilter = 'all'): readonly ActivityTimelineItem[] {\n const items: ActivityTimelineItem[] = snapshot.updates.map(update => ({\n kind: 'update',\n timestamp: update.timestamp,\n title: snapshot.api?.getSignal(update.signalId) ? displaySignalName(snapshot.api.getSignal(update.signalId)!) : displayDebugName(update.signalName),\n detail: `${formatDebugSource(snapshot.api?.getSignal(update.signalId)?.component ?? 'unknown')} · ${update.duration.toFixed(2)} ms · ${update.effects.length} effects`,\n icon: 'zap',\n update\n }))\n for (const request of snapshot.network) {\n items.push({\n kind: 'request',\n timestamp: request.startedAt,\n title: `${request.method} ${request.url}`,\n detail: `${request.source ?? 'http'} · ${request.status}${request.duration === undefined ? '' : ` · ${request.duration} ms`}`,\n icon: 'download'\n })\n }\n for (const request of snapshot.routerContext?.dataRequests ?? []) {\n items.push({\n kind: 'request',\n timestamp: request.startedAt ?? Date.now(),\n title: `${request.kind} · ${request.key}`,\n detail: `${request.status}${request.route ? ` · ${request.route}` : ''}`,\n icon: 'folder'\n })\n }\n for (const trace of router?.devtools.getNavigationHistory() ?? []) {\n items.push({\n kind: 'navigation',\n timestamp: trace.endedAt,\n title: `Navigation ${trace.to}`,\n detail: `${trace.status} · ${trace.duration.toFixed(2)} ms`,\n icon: 'arrow-right'\n })\n }\n for (const error of snapshot.errors) {\n items.push({\n kind: 'error',\n timestamp: error.lastOccurredAt,\n title: `${error.phase} · ${error.message}`,\n detail: error.route ?? error.component,\n icon: 'alert-triangle'\n })\n }\n return items\n .filter(item => filter === 'all' || item.kind === filter)\n .sort((left, right) => right.timestamp - left.timestamp)\n .slice(0, 12)\n}\n\nfunction renderActivityRail(\n updates: readonly UpdateTrace[],\n timeline: readonly ActivityTimelineItem[],\n api: DevToolsAPI | null,\n selection: DevToolsSelection | null,\n filter: TimelineFilter,\n onFilterChange: (filter: TimelineFilter) => void,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('aside')\n setAttribute(root, 'class', 'vobs-devtools-shell__activity')\n const header = createElement('div')\n setAttribute(header, 'class', 'vobs-devtools-shell__activity-header')\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-shell__activity-title')\n insertBefore(title, createElementText('Timeline'), null)\n insertBefore(header, title, null)\n insertBefore(header, createComponent(Select, {\n class: 'vobs-devtools-timeline-filter',\n value: filter,\n 'aria-label': 'Filter timeline events',\n onChange: event => {\n const next = (event.target as HTMLSelectElement).value\n if (isTimelineFilter(next)) onFilterChange(next)\n },\n children: () => createFragment((parent, anchor) => {\n for (const option of TIMELINE_FILTER_OPTIONS) {\n const optionNode = createElement('option')\n setAttribute(optionNode, 'value', option.value)\n insertBefore(optionNode, createText(option.label), null)\n insertBefore(parent, optionNode, anchor)\n }\n })\n }), null)\n insertBefore(root, header, null)\n const subtitle = createElement('div')\n setAttribute(subtitle, 'class', 'vobs-devtools-shell__activity-subtitle')\n insertBefore(subtitle, createElementText(`${timeline.length} shown · ${updates.length} updates`), null)\n insertBefore(root, subtitle, null)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-activity-list')\n for (const entry of timeline) {\n const update = entry.update\n const activityItem = createElement('div')\n setAttribute(activityItem, 'class', `vobs-devtools-activity-item${update && selection?.type === 'update' && selection.id === update.id ? ' is-selected' : ''}`)\n if (update) activityItem.addEventListener('click', () => onFocus('updates', { type: 'update', id: update.id }))\n const dot = createElement('span')\n setAttribute(dot, 'class', 'vobs-devtools-activity-item__dot')\n insertBefore(dot, createComponent(Icon, { name: entry.icon }), null)\n const body = createElement('div')\n setAttribute(body, 'class', 'vobs-devtools-activity-item__body')\n const name = createElement('span')\n setAttribute(name, 'class', 'vobs-devtools-activity-item__name')\n const signal = update ? api?.getSignal(update.signalId) : undefined\n insertBefore(name, createElementText(entry.title), null)\n const detail = createElement('span')\n insertBefore(detail, createElementText(entry.detail ?? (update ? `${formatDebugSource(signal?.component ?? 'unknown')} · ${update.duration.toFixed(2)} ms · ${update.effects.length} effects` : '')), null)\n insertBefore(body, name, null)\n insertBefore(body, detail, null)\n insertBefore(activityItem, dot, null)\n insertBefore(activityItem, body, null)\n insertBefore(list, activityItem, null)\n }\n if (timeline.length === 0) {\n const empty = createElement('span')\n setAttribute(empty, 'class', 'vobs-devtools-muted')\n insertBefore(empty, createElementText(filter === 'all' ? 'No recent events.' : `No ${timelineFilterLabel(filter).toLowerCase()} events.`), null)\n insertBefore(list, empty, null)\n }\n insertBefore(root, list, null)\n return root\n}\n\nfunction isTimelineFilter(value: string): value is TimelineFilter {\n return TIMELINE_FILTER_OPTIONS.some(option => option.value === value)\n}\n\nfunction timelineFilterLabel(filter: TimelineFilter): string {\n return TIMELINE_FILTER_OPTIONS.find(option => option.value === filter)?.label ?? 'All events'\n}\n\nfunction createElementText(value: string): VobsNode {\n return createText(value)\n}\n\nfunction renderDevToolsContent(\n snapshot: DevToolsSnapshot,\n section: DevToolsSection = 'updates',\n router: Router | null = null,\n activeRouterTab?: { value: RouterPanelTab },\n activeUpdatesTab?: { value: UpdatesPanelTab },\n activeComponentsTab?: { value: ComponentsPanelTab },\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined,\n query = '',\n activeAdvancedSection?: { value: AdvancedSection },\n activeRouteView?: { value: 'tree' | 'list' },\n networkSelection?: { value: string | null },\n networkSourceFilter?: { value: NetworkSourceFilter },\n networkStatusFilter?: { value: NetworkStatusFilter },\n networkDetailTab?: { value: NetworkDetailTab },\n queryState?: { value: string },\n http?: HTTPClient | null,\n networkTesterOpen?: { value: boolean },\n networkTesterRevision?: { value: number },\n networkTesterRun?: { value: RequestTesterRun },\n networkTesterDraft?: RequestTesterDraft,\n networkTesterTab?: { value: RequestTesterTab }\n): VobsNode {\n if (!snapshot.api) {\n return createComponent(Alert, {\n description: 'Enable the devtools plugin to inspect the runtime.'\n })\n }\n return renderFocusedSection(snapshot, section, router, activeRouterTab, activeUpdatesTab, activeComponentsTab, selection, onFocus, query, activeAdvancedSection, activeRouteView, networkSelection, networkSourceFilter, networkStatusFilter, networkDetailTab, queryState, http, networkTesterOpen, networkTesterRevision, networkTesterRun, networkTesterDraft, networkTesterTab)\n}\n\nfunction renderFocusedSection(\n snapshot: DevToolsSnapshot,\n section: DevToolsSection,\n router: Router | null,\n activeRouterTab?: { value: RouterPanelTab },\n activeUpdatesTab?: { value: UpdatesPanelTab },\n activeComponentsTab?: { value: ComponentsPanelTab },\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined,\n query = '',\n activeAdvancedSection?: { value: AdvancedSection },\n activeRouteView?: { value: 'tree' | 'list' },\n networkSelection?: { value: string | null },\n networkSourceFilter?: { value: NetworkSourceFilter },\n networkStatusFilter?: { value: NetworkStatusFilter },\n networkDetailTab?: { value: NetworkDetailTab },\n queryState?: { value: string },\n http?: HTTPClient | null,\n networkTesterOpen?: { value: boolean },\n networkTesterRevision?: { value: number },\n networkTesterRun?: { value: RequestTesterRun },\n networkTesterDraft?: RequestTesterDraft,\n networkTesterTab?: { value: RequestTesterTab }\n): VobsNode {\n if (section === 'router') return renderRouterSection(router, activeRouterTab, activeRouteView)\n if (section === 'updates') return renderUpdatesSection(snapshot, activeUpdatesTab, query, selection, onFocus)\n if (section === 'components') return renderComponentsSection(snapshot, activeComponentsTab, query, selection, onFocus)\n if (section === 'network') return createComponent(Card, {\n children: () => renderUnifiedNetworkRequests(snapshot.network, snapshot.routerContext?.dataRequests ?? [], query, selection, onFocus, networkSelection, networkSourceFilter, networkStatusFilter, networkDetailTab, snapshot.api, queryState, http, networkTesterOpen, networkTesterRevision, networkTesterRun, networkTesterDraft, snapshot.routerContext?.route, networkTesterTab)\n })\n if (section === 'errors') return createComponent(Card, {\n description: `${snapshot.errors.length} retained unique errors`,\n children: () => renderErrors(filterErrors(snapshot.errors, query), selection, onFocus)\n })\n if (section === 'advanced') return renderAdvancedSection(snapshot, activeAdvancedSection, query)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n let title = 'Recent updates'\n let description = `${snapshot.updates.length} retained traces`\n return createComponent(Card, { title, description, children: () => list })\n}\n\nfunction renderComponentsSection(\n snapshot: DevToolsSnapshot,\n activeTab?: { value: ComponentsPanelTab },\n query = '',\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'tree', label: 'Component tree', content: () => renderComponentTree(snapshot, query, selection, onFocus) },\n { id: 'lifecycle', label: 'Lifecycle timeline', content: () => createComponent(Card, {\n class: 'vobs-devtools-lifecycle-card',\n description: `${snapshot.lifecycle.length} retained runtime events`,\n children: () => renderLifecycleTimeline(snapshot.lifecycle, (section, next) => {\n onFocus(section, next)\n if (section === 'components' && activeTab) activeTab.value = 'tree'\n })\n }) }\n ],\n get value() { return activeTab?.value ?? 'tree' },\n onChange: id => { if (activeTab && isComponentsPanelTab(id)) activeTab.value = id }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-components-tabs-wrap')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction renderComponentTree(\n snapshot: DevToolsSnapshot,\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const componentTree = filterComponentTree(snapshot.tree, query)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n for (const node of componentTree) insertBefore(list, renderComponentSummary(node, snapshot, selection, onFocus), null)\n if (componentTree.length === 0) appendMuted(list, query ? 'No components match the search.' : 'No components recorded.')\n return createComponent(Card, {\n class: 'vobs-devtools-component-tree-card',\n description: `Component tree ${snapshot.memory?.ownerCount ?? 0} active owners`,\n children: () => list\n })\n}\n\nfunction isComponentsPanelTab(value: string): value is ComponentsPanelTab {\n return value === 'tree' || value === 'lifecycle'\n}\n\nfunction renderUpdatesSection(\n snapshot: DevToolsSnapshot,\n activeTab?: { value: UpdatesPanelTab },\n query = '',\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'performance', label: 'Performance', content: () => renderPerformanceMetrics(snapshot.metrics) },\n { id: 'slow', label: 'Slow items', content: () => renderSlowItems(snapshot.performanceEntries) },\n { id: 'updates', label: `Updates${snapshot.updates.length ? ` (${snapshot.updates.length})` : ''}`, content: () => renderUpdatesList(snapshot, query, selection, onFocus) }\n ],\n get value() { return activeTab?.value ?? 'updates' },\n onChange: id => { if (activeTab && isUpdatesPanelTab(id)) activeTab.value = id }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-updates-tabs-wrap')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction isUpdatesPanelTab(value: string): value is UpdatesPanelTab {\n return value === 'performance' || value === 'slow' || value === 'updates'\n}\n\nfunction renderUpdatesList(\n snapshot: DevToolsSnapshot,\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n for (const update of [...snapshot.updates].reverse().filter(update => matchesQuery(query, update.signalName, update.signalId, update.status, formatValue(update.previousValue), formatValue(update.nextValue))).slice(0, 50)) {\n insertBefore(list, renderUpdateRow(update, snapshot.api, selection, onFocus), null)\n }\n if (snapshot.updates.length === 0) appendMuted(list, 'Interact with the playground to record updates.')\n return createComponent(Card, {\n class: 'vobs-devtools-updates-card',\n children: () => list\n })\n}\n\nfunction renderAdvancedSection(\n snapshot: DevToolsSnapshot,\n activeSection?: { value: AdvancedSection },\n query = ''\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-advanced-tabs',\n variant: 'filled',\n items: [\n { id: 'signals', label: 'Signals', content: () => renderSignalsInspector(snapshot, query) },\n { id: 'effects', label: 'Effects', content: () => renderEffectsInspector(snapshot, query) }\n ],\n get value() { return activeSection?.value ?? 'signals' },\n onChange: id => { if (activeSection) activeSection.value = id as AdvancedSection }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-advanced')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction renderSignalsInspector(snapshot: DevToolsSnapshot, query: string): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n const signals = snapshot.signals.filter(signal => matchesQuery(query, signal.name, signal.component, formatValue(signal.value))).slice(0, 50)\n for (const signal of signals) insertBefore(list, renderSignalInspector(signal, snapshot.api), null)\n if (signals.length === 0) appendMuted(list, query ? 'No signals match the search.' : 'No signals recorded.')\n return list\n}\n\nfunction renderEffectsInspector(snapshot: DevToolsSnapshot, query: string): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n const effects = snapshot.effects.filter(effect => matchesQuery(query, effect.name, effect.component, effect.id)).slice(0, 50)\n for (const effect of effects) insertBefore(list, renderEffectRow(effect), null)\n if (effects.length === 0) appendMuted(list, query ? 'No effects match the search.' : 'No effects recorded.')\n return list\n}\n\nfunction renderPerformanceMetrics(metrics: DevToolsSnapshot['metrics']): VobsNode {\n if (!metrics) {\n return createComponent(Card, { description: 'Performance: Lightweight slow-path summary for the retained diagnostics.', children: () => {\n const root = createElement('div')\n appendMuted(root, 'No performance data available.')\n return root\n } })\n }\n const metricsGrid = createElement('div')\n setAttribute(metricsGrid, 'class', 'vobs-devtools-performance-metrics')\n appendMetric(metricsGrid, 'Slow updates', metrics.slowUpdateCount)\n appendMetric(metricsGrid, 'Slow effects', metrics.slowEffectCount)\n appendMetric(metricsGrid, 'Slow requests', metrics.slowRequestCount)\n appendMetric(metricsGrid, 'Max update', `${metrics.maxUpdateDuration.toFixed(2)} ms`)\n appendMetric(metricsGrid, 'Max effect', `${metrics.maxEffectDuration.toFixed(2)} ms`)\n appendMetric(metricsGrid, 'Max request', `${metrics.maxRequestDuration.toFixed(2)} ms`)\n return createComponent(Card, {\n class: 'vobs-devtools-performance-card',\n description: 'Lightweight slow-path summary for the retained diagnostics.',\n children: () => metricsGrid\n })\n}\n\nfunction renderSlowItems(entries: DevToolsSnapshot['performanceEntries']): VobsNode {\n const slowEntries = entries.filter(entry => entry.duration >= 16).slice(0, 8)\n const slowList = createElement('div')\n setAttribute(slowList, 'class', 'vobs-devtools-performance-slow-list')\n for (const entry of slowEntries) {\n const item = createElement('div')\n setAttribute(item, 'class', 'vobs-devtools-performance-slow-item')\n appendText(item, entry.kind, 'vobs-devtools-muted')\n appendText(item, formatPerformanceLabel(entry), 'vobs-devtools-list__name')\n appendText(item, `${entry.duration.toFixed(2)} ms`, 'vobs-devtools-code')\n insertBefore(slowList, item, null)\n }\n if (slowEntries.length === 0) appendMuted(slowList, 'No slow items recorded.')\n return createComponent(Card, {\n class: 'vobs-devtools-performance-slow-card',\n description: slowEntries.length ? `${slowEntries.length} retained item${slowEntries.length === 1 ? '' : 's'} at or above 16 ms.` : undefined,\n children: () => slowList\n })\n}\n\nfunction formatPerformanceLabel(entry: DevToolsSnapshot['performanceEntries'][number]): string {\n if (entry.kind === 'request') return entry.label\n const formatted = formatDebugLocation(entry.label)\n const openParen = formatted.indexOf('(')\n const closeParen = openParen >= 0 ? formatted.indexOf(')', openParen) : -1\n if (openParen < 0 || closeParen < 0) return stripDebugLocation(entry.label)\n const componentName = formatted.slice(0, openParen).trim()\n const source = formatted.slice(openParen + 1, closeParen)\n const fileName = source.split('/').pop() ?? source\n const suffix = formatted.slice(closeParen + 1).trim()\n return [componentName, fileName, suffix].filter(Boolean).join(' ')\n}\n\nfunction appendMetric(parent: Element, label: string, value: number | string): void {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-performance-item')\n appendText(row, label, 'vobs-devtools-muted')\n appendText(row, String(value), 'vobs-devtools-list__name')\n insertBefore(parent, row, null)\n}\n\nfunction renderRouterSection(\n router: Router | null,\n activeRouterTab?: { value: RouterPanelTab },\n activeRouteView?: { value: 'tree' | 'list' }\n): VobsNode {\n if (!router) return createComponent(Alert, { tone: 'warning', title: 'Router unavailable', description: 'Pass a Router instance to inspect route activity.' })\n const devtools = router.devtools\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-router')\n const current = devtools.getCurrentRoute()\n const state = devtools.getNavigationState()\n const metrics = devtools.getPerformanceMetrics()\n const activeRequests = devtools.getDataRequests().filter(request => request.route === current.fullPath || request.key.startsWith(`${current.fullPath}#`))\n const activeErrors = devtools.getErrors().filter(error => error.route === current.fullPath)\n const toolbar = createElement('div')\n setAttribute(toolbar, 'class', 'vobs-devtools-panel__toolbar')\n insertBefore(toolbar, createComponent(Button, { variant: 'secondary', icon: createComponent(Icon, { name: 'refresh' }), children: () => 'Revalidate current route', onClick: () => { void devtools.revalidate(current.fullPath) } }), null)\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'context', label: 'Context', content: () => createRouterContextPanel(current, state) },\n { id: 'requests', label: `Requests${activeRequests.length ? ` (${activeRequests.length})` : ''}`, content: () => createComponent(Card, { title: `Data requests for ${current.path}`, description: 'Loader, action and fetcher traces for the active route.', children: () => renderDataRequests(activeRequests) }) },\n { id: 'errors', label: `Errors${activeErrors.length ? ` (${activeErrors.length})` : ''}`, content: () => createComponent(Card, { title: `Errors for ${current.path}`, description: `${activeErrors.length} errors captured for the active route.`, children: () => renderRouterErrors(activeErrors) }) },\n { id: 'history', label: 'History', content: () => createComponent(Card, { title: 'Navigation history', description: `${metrics.navigationCount} recorded navigations · ${metrics.averageNavigationDuration.toFixed(2)} ms average`, children: () => renderNavigationHistory(devtools.getNavigationHistory(), router) }) },\n { id: 'routes', label: 'Route map', content: () => createComponent(Card, {\n title: 'Route map',\n description: 'All registered routes and their source locations.',\n children: () => renderRouteMap(devtools.getRouteTree(), router, activeRouteView)\n }) }\n ],\n get value() { return activeRouterTab?.value ?? 'context' },\n onChange: id => { if (activeRouterTab) activeRouterTab.value = id as RouterPanelTab }\n })\n const tabsWrap = createElement('div')\n setAttribute(tabsWrap, 'class', 'vobs-devtools-router-tabs-wrap')\n insertBefore(tabsWrap, tabs, null)\n insertBefore(tabsWrap, toolbar, null)\n insertBefore(root, tabsWrap, null)\n return root\n}\n\nfunction createRouterContextPanel(current: ReturnType<RouterDevToolsAPI['getCurrentRoute']>, state: ReturnType<RouterDevToolsAPI['getNavigationState']>): VobsNode {\n return createFragment((parent, anchor) => {\n insertBefore(parent, createComponent(Card, { title: 'Active route', children: () => renderRouterLocation(current, state) }), anchor)\n insertBefore(parent, createComponent(Card, { title: 'Matched route structure', children: () => renderMatchedRoutes(current.matched) }), anchor)\n })\n}\n\nfunction renderDataRequests(requests: readonly RouterDataRequestTrace[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const request of [...requests].reverse().slice(0, 30)) {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n const summary = createElement('summary')\n appendText(summary, `${request.kind} · ${request.key}`, 'vobs-devtools-list__name')\n insertBefore(summary, createComponent(Tag, { tone: request.status === 'success' ? 'success' : request.status === 'error' ? 'danger' : 'warning', children: () => request.status }), null)\n appendText(summary, request.duration === undefined ? 'running' : `${request.duration.toFixed(2)} ms`)\n insertBefore(row, summary, null)\n if (request.error) appendText(row, request.error)\n if (request.status === 'success' && request.result !== undefined) insertBefore(row, renderInspectableValue('Result', request.result), null)\n insertBefore(root, row, null)\n }\n if (requests.length === 0) appendMuted(root, 'No data requests recorded.')\n return root\n}\n\nfunction renderRouterErrors(errors: readonly RouteErrorTrace[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const error of [...errors].reverse().slice(0, 30)) {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row vobs-devtools-error-row')\n const summary = createElement('summary')\n appendText(summary, `${error.phase} · ${error.route}`, 'vobs-devtools-list__name')\n appendText(summary, error.message)\n insertBefore(row, summary, null)\n if (error.stack) appendText(row, error.stack, 'vobs-devtools-code')\n insertBefore(root, row, null)\n }\n if (errors.length === 0) appendMuted(root, 'No route errors recorded.')\n return root\n}\n\nfunction renderRouterLocation(route: ReturnType<RouterDevToolsAPI['getCurrentRoute']>, state: ReturnType<RouterDevToolsAPI['getNavigationState']>): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n const statusRow = createElement('div')\n setAttribute(statusRow, 'class', 'vobs-devtools-list__row')\n appendText(statusRow, route.fullPath, 'vobs-devtools-list__name')\n insertBefore(statusRow, createComponent(Tag, { tone: state.status === 'error' ? 'danger' : state.status === 'loading' ? 'warning' : 'success', children: () => state.status }), null)\n if (state.status === 'loading') appendText(statusRow, `to ${state.to}`)\n if (state.error) appendText(statusRow, state.error)\n insertBefore(root, statusRow, null)\n insertBefore(root, renderInspectableValue('Params', route.params), null)\n insertBefore(root, renderInspectableValue('Query', route.query), null)\n insertBefore(root, renderInspectableValue('Meta', route.meta), null)\n appendText(root, `outlet ${route.matched.map(record => record.path ?? '(layout)').join(' > ')}`)\n return root\n}\n\nfunction renderMatchedRoutes(records: readonly RouteRecord[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-route-tree')\n records.forEach((record, index) => {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-route-node')\n setAttribute(row, 'style', `--route-depth: ${index}`)\n appendText(row, record.path ?? '(layout)', 'vobs-devtools-list__name')\n appendText(row, routeComponentName(record))\n if (record.source) appendText(row, record.source, 'vobs-devtools-code')\n if (record.loader) insertBefore(row, createComponent(Tag, { tone: 'neutral-strong', children: () => 'loader' }), null)\n if (record.action) insertBefore(row, createComponent(Tag, { tone: 'neutral-strong', children: () => 'action' }), null)\n insertBefore(root, row, null)\n })\n if (records.length === 0) appendMuted(root, 'No matched route records.')\n return root\n}\n\nfunction renderRouteMap(\n nodes: readonly RouteDebugNode[],\n router: Router,\n activeRouteView?: { value: 'tree' | 'list' }\n): VobsNode {\n const tree = createElement('div')\n setAttribute(tree, 'class', 'vobs-devtools-route-tree')\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-route-view-toggle')\n for (const mode of ['tree', 'list'] as const) {\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-control${(activeRouteView?.value ?? 'tree') === mode ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'aria-pressed', (activeRouteView?.value ?? 'tree') === mode ? 'true' : 'false')\n insertBefore(button, createText(mode === 'tree' ? 'Tree' : 'List'), null)\n button.addEventListener('click', () => { if (activeRouteView) activeRouteView.value = mode })\n insertBefore(controls, button, null)\n }\n insertBefore(tree, controls, null)\n const currentPath = router.currentRoute.value.path\n if ((activeRouteView?.value ?? 'tree') === 'list') {\n for (const node of flattenRouteNodes(nodes)) appendRouteConfigNode(tree, node, 0, router, currentPath)\n } else {\n for (const node of nodes) appendRouteConfigNode(tree, node, 0, router, currentPath)\n }\n return tree\n}\n\nfunction flattenRouteNodes(nodes: readonly RouteDebugNode[]): readonly RouteDebugNode[] {\n const result: RouteDebugNode[] = []\n const visit = (node: RouteDebugNode): void => {\n result.push({ ...node, children: [] })\n for (const child of node.children) visit(child)\n }\n for (const node of nodes) visit(node)\n return result\n}\n\nfunction appendRouteConfigNode(parent: Element, node: RouteDebugNode, depth: number, router: Router, currentPath: string): void {\n const concrete = node.children.length === 0 && !node.path.includes(':') && !node.path.includes('*')\n const row = createElement(concrete ? 'button' : 'div')\n setAttribute(row, 'class', `vobs-devtools-route-node${concrete && node.path === currentPath ? ' is-active' : ''}`)\n setAttribute(row, 'style', `--route-depth: ${depth}`)\n appendText(row, node.path, 'vobs-devtools-list__name')\n appendText(row, node.component)\n if (node.source) appendText(row, node.source, 'vobs-devtools-code')\n if (concrete) {\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'title', `Navigate to ${node.path}`)\n row.addEventListener('click', () => { void router.push(node.path) })\n }\n insertBefore(parent, row, null)\n for (const child of node.children) appendRouteConfigNode(parent, child, depth + 1, router, currentPath)\n}\n\nfunction routeComponentName(record: RouteRecord): string {\n const definition = record.component\n if (!definition) return 'Route'\n if (typeof definition === 'function') return definition.name || 'Anonymous'\n return 'lazy(...)'\n}\n\nfunction renderNavigationHistory(history: readonly import('@vobs/router').NavigationTrace[], router: Router): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const trace of [...history].reverse().slice(0, 30)) {\n const row = createElement('button')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'title', `Replay ${trace.to}`)\n appendText(row, `${trace.from} → ${trace.to}`, 'vobs-devtools-list__name')\n insertBefore(row, createComponent(Tag, { tone: trace.status === 'success' ? 'success' : trace.status === 'error' ? 'danger' : 'warning', children: () => trace.status }), null)\n appendText(row, `${trace.duration.toFixed(2)} ms · ${trace.source}`)\n row.addEventListener('click', () => { void router.push(trace.to) })\n insertBefore(root, row, null)\n }\n if (history.length === 0) appendMuted(root, 'No navigation history recorded.')\n return root\n}\n\nfunction appendMuted(parent: Element, value: string): void {\n const node = createElement('span')\n setAttribute(node, 'class', 'vobs-devtools-muted')\n insertBefore(node, createText(value), null)\n insertBefore(parent, node, null)\n}\n\nfunction renderSignalInspector(\n signal: SignalDebugInfo,\n api: DevToolsAPI | null\n): VobsNode {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row vobs-devtools-signal-row')\n const summary = createElement('summary')\n appendText(summary, displaySignalName(signal), 'vobs-devtools-list__name')\n appendText(summary, previewValue(signal.value), 'vobs-devtools-code')\n insertBefore(summary, createComponent(Tag, { tone: 'neutral-strong', children: () => `${signal.subscribers} subscribers` }), null)\n insertBefore(row, summary, null)\n if (!api) return row\n const dependencies = api.getDependencies(signal.id)\n const dependents = api.getDependents(signal.id)\n insertBefore(row, renderInspectableValue('Current value', signal.value), null)\n appendText(row, `${dependencies.length} dependencies · ${dependents.length} dependents`, 'vobs-devtools-muted')\n if (api.canMutate() && signal.kind !== 'memo') insertBefore(row, renderSignalMutationControl(signal, api), null)\n return row\n}\n\nfunction renderSignalMutationControl(signal: SignalDebugInfo, api: DevToolsAPI): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-mutation-control')\n appendText(root, 'Debug-only value edit (may trigger effects and requests).', 'vobs-devtools-muted')\n const input = createElement('input')\n setAttribute(input, 'class', 'vobs-devtools-search')\n setAttribute(input, 'type', 'text')\n setAttribute(input, 'aria-label', `Edit ${signal.name}`)\n setProperty(input, 'value', formatValue(signal.value))\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-control')\n setAttribute(button, 'type', 'button')\n insertBefore(button, createText('Apply debug value'), null)\n button.addEventListener('click', event => {\n event.stopPropagation()\n const raw = (input as HTMLInputElement).value\n let value: unknown = raw\n try { value = JSON.parse(raw) } catch { /* Treat non-JSON input as a string. */ }\n api.setSignalValue(signal.id, value)\n })\n insertBefore(root, input, null)\n insertBefore(root, button, null)\n return root\n}\n\nfunction renderEffectRow(\n effect: EffectDebugInfo\n): VobsNode {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n const summary = createElement('summary')\n const component = formatDebugLocation(effect.component)\n appendText(summary, effect.name || `${debugComponentName(component)} effect`, 'vobs-devtools-list__name')\n appendText(summary, formatDebugSource(component))\n insertBefore(summary, createComponent(Tag, { tone: effect.status === 'success' || effect.status === 'idle' ? 'success' : effect.status === 'error' ? 'danger' : 'warning', children: () => effect.status }), null)\n appendText(summary, `${effect.executionCount} runs`)\n insertBefore(row, summary, null)\n appendText(row, `${effect.dependencies.length} dependencies`, 'vobs-devtools-muted')\n if (effect.lastExecutionTime > 0) appendText(row, `last execution ${effect.lastDuration?.toFixed(2) ?? '0.00'} ms · ${effect.lastRunStatus ?? 'unknown'} · ${effect.lastDomUpdates ?? 0} DOM updates`, 'vobs-devtools-muted')\n if (effect.lastUpdateId) appendText(row, `last update ${effect.lastUpdateId}`, 'vobs-devtools-code')\n if (effect.lastError) appendText(row, `${effect.lastError.name}: ${effect.lastError.message}`, 'vobs-devtools-error')\n return row\n}\n\nfunction renderUpdateRow(\n update: UpdateTrace,\n api: DevToolsAPI | null,\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const row = createElement('details')\n const selected = selection?.type === 'update' && selection.id === update.id\n setAttribute(row, 'class', `vobs-devtools-update-row${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n const summary = createElement('summary')\n // The update row owns its own selection. Signal and Effect details stay local\n // to this trace and do not navigate to the Advanced inspectors.\n summary.addEventListener('click', () => onFocus('updates', { type: 'update', id: update.id }))\n const signal = api?.getSignal(update.signalId)\n appendText(summary, signal ? displaySignalName(signal) : displayDebugName(update.signalName), 'vobs-devtools-list__name')\n appendText(summary, formatDebugSource(signal?.component ?? 'unknown'), 'vobs-devtools-update-row__source')\n appendText(summary, `${update.duration.toFixed(2)} ms`)\n insertBefore(summary, createComponent(Tag, { tone: update.duration >= 16 ? 'warning' : 'neutral-strong', children: () => `${update.effects.length} effects` }), null)\n insertBefore(row, summary, null)\n insertBefore(row, renderValuePair('Value changed', update.previousValue, update.nextValue), null)\n appendText(row, `status ${update.status} · ${update.affectedSignals.length} signals · ${update.affectedEffects.length} effects`, 'vobs-devtools-muted')\n if (update.error) appendText(row, `${update.error.name}: ${update.error.message}`, 'vobs-devtools-error')\n if (update.effects.length === 0) appendText(row, 'No effects executed.', 'vobs-devtools-muted')\n for (const effect of update.effects) {\n insertBefore(row, renderEffectExecution(effect), null)\n if (effect.error) appendText(row, `${effect.error.name}: ${effect.error.message}`, 'vobs-devtools-error')\n }\n for (const domUpdate of update.domUpdates) {\n const operation = domUpdate.key ? `${domUpdate.operation}.${domUpdate.key}` : domUpdate.operation\n const mutation = createElement('div')\n setAttribute(mutation, 'class', 'vobs-devtools-dom-update')\n appendText(mutation, operation, 'vobs-devtools-list__name')\n appendText(mutation, domUpdate.target, 'vobs-devtools-muted')\n if (domUpdate.previousValue !== undefined || domUpdate.nextValue !== undefined) {\n insertBefore(mutation, renderValuePair('', domUpdate.previousValue, domUpdate.nextValue), null)\n }\n insertBefore(row, mutation, null)\n }\n return row\n}\n\nfunction renderEffectExecution(\n effect: EffectExecutionInfo\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-effect-execution')\n appendText(root, effect.effectId, 'vobs-devtools-code')\n appendText(root, `${formatDebugSource(effect.component)} · ${effect.duration.toFixed(2)} ms · ${effect.domUpdates} DOM updates · ${effect.status ?? 'success'}`)\n return root\n}\n\nfunction appendUpdateLinks(\n parent: Element,\n ids: readonly string[],\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n if (ids.length === 0) {\n appendText(parent, ' none', 'vobs-devtools-muted')\n return\n }\n for (const id of ids) {\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-link')\n setAttribute(button, 'type', 'button')\n button.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('updates', { type: 'update', id })\n })\n insertBefore(button, createText(id), null)\n insertBefore(parent, button, null)\n }\n}\n\nfunction renderLifecycleTimeline(\n events: readonly LifecycleEvent[],\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-lifecycle-list')\n for (const event of [...events].reverse().slice(0, 40)) {\n const selection = lifecycleSelection(event)\n const row = createElement(selection?.type === 'component' ? 'button' : 'div')\n setAttribute(row, 'class', 'vobs-devtools-lifecycle-row')\n if (selection?.type === 'component') setAttribute(row, 'type', 'button')\n appendText(row, event.type, 'vobs-devtools-list__name')\n appendText(row, event.name ?? event.targetId)\n appendText(row, event.status ?? '', 'vobs-devtools-muted')\n if (selection?.type === 'component') row.addEventListener('click', () => onFocus('components', selection))\n insertBefore(root, row, null)\n }\n if (events.length === 0) appendMuted(root, 'No lifecycle events recorded.')\n return root\n}\n\nfunction renderUnifiedNetworkRequests(\n requests: readonly NetworkRequestTrace[],\n routerRequests: readonly DevToolsRouterContext['dataRequests'][number][],\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void,\n networkSelection?: { value: string | null },\n sourceFilter?: { value: NetworkSourceFilter },\n statusFilter?: { value: NetworkStatusFilter },\n detailTab?: { value: NetworkDetailTab },\n api?: DevToolsAPI | null,\n queryState?: { value: string },\n http?: HTTPClient | null,\n testerOpen?: { value: boolean },\n testerRevision?: { value: number },\n testerRun?: { value: RequestTesterRun },\n testerDraft?: RequestTesterDraft,\n currentRoute?: string,\n testerTab?: { value: RequestTesterTab }\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-network-inspector')\n const activeSource = sourceFilter?.value ?? 'all'\n const activeStatus = statusFilter?.value ?? 'all'\n const entries: NetworkEntry[] = [\n ...requests.map<NetworkEntry>(request => ({\n key: `http:${request.id}`,\n source: request.source === 'ssr' ? 'ssr' as const : 'http' as const,\n method: request.method,\n url: request.url,\n status: request.status,\n duration: request.duration,\n startedAt: request.startedAt,\n endedAt: request.endedAt,\n request\n })),\n ...routerRequests.map<NetworkEntry>(request => ({\n key: `router:${request.id}`,\n source: 'router' as const,\n method: request.kind,\n url: request.key,\n status: request.status,\n duration: request.duration,\n startedAt: request.startedAt,\n endedAt: request.endedAt,\n routerRequest: request\n }))\n ].filter(entry => (activeSource === 'all' || entry.source === activeSource) && (activeStatus === 'all' || entry.status === activeStatus) && matchesQuery(query, entry.method, entry.url, entry.status, entry.source, entry.request?.responseStatus, entry.request?.route, entry.routerRequest?.route))\n .sort((left, right) => (right.startedAt ?? 0) - (left.startedAt ?? 0))\n const selectedKey = (selection?.type === 'request' ? `http:${selection.id}` : networkSelection?.value) ?? entries[0]?.key\n const selected = entries.find(entry => entry.key === selectedKey) ?? entries[0]\n\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-network-toolbar')\n appendText(controls, 'Search', 'vobs-devtools-network-toolbar__label')\n const search = createElement('input')\n setAttribute(search, 'class', 'vobs-devtools-search vobs-devtools-network-toolbar__search')\n setAttribute(search, 'type', 'search')\n setAttribute(search, 'placeholder', 'Search requests')\n setProperty(search, 'value', query)\n // Commit on Enter/blur so the inspector does not replace the focused input\n // after every keystroke while the reactive panel refreshes.\n search.addEventListener('change', () => { if (queryState) queryState.value = (search as HTMLInputElement).value })\n insertBefore(controls, search, null)\n insertBefore(controls, createNetworkFilterSelect('Source', activeSource, [\n ['all', 'All sources'], ['http', 'HTTP'], ['router', 'Router'], ['ssr', 'SSR']\n ], value => { if (sourceFilter) sourceFilter.value = value as NetworkSourceFilter }), null)\n insertBefore(controls, createNetworkFilterSelect('Status', activeStatus, [\n ['all', 'All statuses'], ['loading', 'Loading'], ['success', 'Success'], ['error', 'Error'], ['cancelled', 'Cancelled']\n ], value => { if (statusFilter) statusFilter.value = value as NetworkStatusFilter }), null)\n if (api) insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n children: () => 'Clear',\n onClick: () => api.clearNetworkRequests()\n }), null)\n if (testerOpen && testerDraft) insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'settings' }),\n 'aria-label': 'Open Request Tester',\n title: 'Open Request Tester',\n onClick: () => {\n if (!testerDraft.url) testerDraft.url = selected?.url ?? currentRoute ?? ''\n testerOpen.value = true\n testerRevision && (testerRevision.value++)\n }\n }), null)\n insertBefore(root, controls, null)\n\n const panes = createElement('div')\n setAttribute(panes, 'class', 'vobs-devtools-network-panes')\n const listPane = createElement('section')\n setAttribute(listPane, 'class', 'vobs-devtools-network-list-pane')\n setAttribute(listPane, 'aria-label', 'Network requests')\n const requestList = createElement('div')\n setAttribute(requestList, 'class', 'vobs-devtools-network-request-list')\n setAttribute(requestList, 'role', 'list')\n for (const entry of entries) {\n const row = createElement('button')\n const isSelected = selectedKey === entry.key\n setAttribute(row, 'class', `vobs-devtools-network-request${isSelected ? ' is-selected' : ''}`)\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'role', 'listitem')\n setAttribute(row, 'aria-pressed', isSelected ? 'true' : 'false')\n row.addEventListener('click', () => {\n networkSelection && (networkSelection.value = entry.key)\n if (entry.request) onFocus('network', { type: 'request', id: entry.request.id })\n if (detailTab) detailTab.value = 'overview'\n })\n const pathLine = createElement('span')\n setAttribute(pathLine, 'class', 'vobs-devtools-network-request__path-line')\n appendText(pathLine, entry.url, 'vobs-devtools-network-request__url')\n if (entry.request?.test) insertBefore(pathLine, createComponent(Tag, { tone: 'warning', children: () => 'TEST' }), null)\n insertBefore(pathLine, createComponent(Tag, { tone: entry.status === 'success' ? 'success' : entry.status === 'error' || entry.status === 'cancelled' ? 'danger' : 'warning', children: () => entry.request?.responseStatus ? `${entry.status} ${entry.request.responseStatus}` : entry.status }), null)\n insertBefore(row, pathLine, null)\n const meta = createElement('span')\n setAttribute(meta, 'class', 'vobs-devtools-network-request__meta')\n appendText(meta, entry.duration === undefined ? 'Running' : `${entry.duration.toFixed(0)} ms`)\n appendText(meta, `ID ${entry.request?.id ?? entry.routerRequest?.id}`, 'vobs-devtools-code')\n insertBefore(row, meta, null)\n insertBefore(requestList, row, null)\n }\n insertBefore(listPane, requestList, null)\n if (entries.length === 0) appendMuted(listPane, query || activeSource !== 'all' || activeStatus !== 'all' ? 'No requests match the current filters.' : 'No requests recorded.')\n insertBefore(panes, listPane, null)\n const detailPane = createElement('section')\n setAttribute(detailPane, 'class', 'vobs-devtools-network-detail-pane')\n setAttribute(detailPane, 'aria-label', 'Selected network request')\n if (selected) insertBefore(detailPane, renderNetworkDetail(selected, detailTab?.value ?? 'overview', tab => { if (detailTab) detailTab.value = tab }), null)\n else appendMuted(detailPane, 'Select a request to inspect its details.')\n insertBefore(panes, detailPane, null)\n insertBefore(root, panes, null)\n if (testerOpen?.value && testerDraft) insertBefore(root, renderRequestTester(testerDraft, run => {\n if (testerRun) testerRun.value = run\n testerRevision && (testerRevision.value++)\n }, testerRun?.value ?? { status: 'idle' }, testerTab?.value ?? 'params', selected, http, () => { testerOpen.value = false }, tab => { if (testerTab) testerTab.value = tab; testerRevision && (testerRevision.value++) }), null)\n return root\n}\n\nfunction createNetworkFilterSelect(label: string, value: string, options: readonly (readonly [string, string])[], onChange: (value: string) => void): VobsNode {\n const select = createElement('select')\n setAttribute(select, 'class', 'vobs-devtools-network-toolbar__select')\n setAttribute(select, 'aria-label', label)\n setProperty(select, 'value', value)\n for (const [optionValue, optionLabel] of options) {\n const option = createElement('option')\n setAttribute(option, 'value', optionValue)\n insertBefore(option, createText(optionLabel), null)\n insertBefore(select, option, null)\n }\n setProperty(select, 'value', value)\n select.addEventListener('change', event => onChange((event.target as HTMLSelectElement).value))\n return select\n}\n\nfunction renderRequestTester(\n draft: RequestTesterDraft,\n onRunChange: (run: RequestTesterRun) => void,\n run: RequestTesterRun,\n activeTab: RequestTesterTab,\n selected: NetworkEntry | undefined,\n http: HTTPClient | null | undefined,\n onClose: () => void,\n onTabChange: (tab: RequestTesterTab) => void\n): VobsNode {\n const drawer = createElement('aside')\n setAttribute(drawer, 'class', 'vobs-devtools-request-tester')\n setAttribute(drawer, 'aria-label', 'Request Tester')\n const heading = createElement('div')\n setAttribute(heading, 'class', 'vobs-devtools-request-tester__heading')\n appendText(heading, 'Request Tester', 'vobs-devtools-request-tester__title')\n const headingActions = createElement('div')\n setAttribute(headingActions, 'class', 'vobs-devtools-request-tester__heading-actions')\n insertBefore(headingActions, createComponent(Button, {\n variant: 'ghost',\n disabled: !selected,\n children: () => 'Use selected request',\n onClick: () => {\n if (!selected) return\n applyNetworkEntryToTesterDraft(selected, draft)\n onRunChange({ status: 'idle' })\n }\n }), null)\n insertBefore(headingActions, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'x' }),\n 'aria-label': 'Close Request Tester',\n title: 'Close Request Tester',\n onClick: onClose\n }), null)\n insertBefore(heading, headingActions, null)\n insertBefore(drawer, heading, null)\n\n const requestLine = createElement('div')\n setAttribute(requestLine, 'class', 'vobs-devtools-request-tester__request-line')\n insertBefore(requestLine, createTesterInput('url', draft.url, value => { draft.url = value }), null)\n insertBefore(requestLine, createTesterMethodSelect(draft.method, value => { draft.method = value; onRunChange({ status: run.status, message: run.message }) }), null)\n insertBefore(requestLine, createComponent(Button, {\n variant: 'brand', iconOnly: true, icon: createComponent(Icon, { name: 'play' }),\n loading: run.status === 'running', disabled: run.status === 'running',\n 'aria-label': run.status === 'running' ? 'Running request' : 'Start request',\n title: run.status === 'running' ? 'Running request' : 'Start request',\n onClick: () => { void executeRequestTester(http, draft, onRunChange) }\n }), null)\n insertBefore(drawer, requestLine, null)\n const tabs = createElement('div')\n setAttribute(tabs, 'class', 'vobs-devtools-request-tester__tabs')\n const tabLabels: readonly [RequestTesterTab, string][] = [['params', 'Params'], ['headers', 'Headers'], ['body', 'Body']]\n for (const [tab, label] of tabLabels) {\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-request-tester__tab${activeTab === tab ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'aria-selected', activeTab === tab ? 'true' : 'false')\n appendText(button, label)\n button.addEventListener('click', () => onTabChange(tab))\n insertBefore(tabs, button, null)\n }\n insertBefore(drawer, tabs, null)\n if (activeTab === 'params') insertBefore(drawer, renderTesterParamGroup('Params', draft.params, 'parameter', onRunChange), null)\n if (activeTab === 'headers') insertBefore(drawer, renderTesterParamGroup('Headers', draft.headers, 'header', onRunChange), null)\n if (activeTab === 'body') {\n const bodyLabel = createElement('label')\n setAttribute(bodyLabel, 'class', 'vobs-devtools-request-tester__field')\n appendText(bodyLabel, 'Body')\n const body = createElement('textarea')\n setAttribute(body, 'class', 'vobs-devtools-request-tester__textarea')\n setAttribute(body, 'rows', '8')\n setAttribute(body, 'placeholder', '{ \"key\": \"value\" }')\n setProperty(body, 'value', draft.body)\n body.addEventListener('change', () => { draft.body = (body as HTMLTextAreaElement).value })\n insertBefore(bodyLabel, body, null)\n insertBefore(drawer, bodyLabel, null)\n }\n\n const footer = createElement('div')\n setAttribute(footer, 'class', 'vobs-devtools-request-tester__footer')\n if (run.message) appendText(footer, run.message, `vobs-devtools-request-tester__status${run.status === 'error' ? ' is-error' : run.status === 'success' ? ' is-success' : ''}`)\n insertBefore(drawer, footer, null)\n return drawer\n}\n\nfunction applyNetworkEntryToTesterDraft(entry: NetworkEntry, draft: RequestTesterDraft): void {\n const request = entry.request\n const rawUrl = request?.url ?? entry.url\n let url = rawUrl\n let params: RequestTesterParam[] = []\n try {\n const parsed = new URL(rawUrl, typeof window !== 'undefined' ? window.location.href : 'http://localhost/')\n url = `${parsed.origin === 'http://localhost' && rawUrl.startsWith('/') ? '' : parsed.origin}${parsed.pathname}${parsed.hash}`\n params = [...parsed.searchParams.entries()].map(([key, value]) => ({ key, value }))\n } catch {\n // Keep non-URL request keys intact, such as router loader identifiers.\n }\n draft.url = url\n draft.method = isHTTPMethod(request?.method ?? entry.method) ? (request?.method ?? entry.method) as HTTPMethod : 'GET'\n draft.params = params.length > 0 ? params : [{ key: '', value: '' }]\n draft.headers = request ? Object.entries(request.headers).map(([key, value]) => ({ key, value })) : [{ key: '', value: '' }]\n const body = request?.requestBody\n draft.body = body === undefined || body === null || body === '' ? '' : typeof body === 'string' ? body : JSON.stringify(body, null, 2)\n}\n\nfunction isHTTPMethod(value: string): value is HTTPMethod {\n return ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT'].includes(value)\n}\n\nfunction createTesterInput(name: string, value: string, onChange: (value: string) => void): VobsNode {\n const input = createElement('input')\n setAttribute(input, 'class', 'vobs-devtools-request-tester__input')\n setAttribute(input, 'name', name)\n setAttribute(input, 'type', 'text')\n setProperty(input, 'value', value)\n input.addEventListener('change', () => onChange((input as HTMLInputElement).value))\n return input\n}\n\nfunction createTesterMethodSelect(value: HTTPMethod, onChange: (value: HTTPMethod) => void): VobsNode {\n const select = createElement('select')\n setAttribute(select, 'class', 'vobs-devtools-request-tester__select')\n for (const method of ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as HTTPMethod[]) {\n const option = createElement('option')\n setAttribute(option, 'value', method)\n if (method === value) setAttribute(option, 'selected', '')\n insertBefore(option, createText(method), null)\n insertBefore(select, option, null)\n }\n select.addEventListener('change', () => onChange((select as HTMLSelectElement).value as HTTPMethod))\n return select\n}\n\nfunction renderTesterParamGroup(label: string, params: RequestTesterParam[], singular: string, onChange: (run: RequestTesterRun) => void): VobsNode {\n const group = createElement('section')\n setAttribute(group, 'class', 'vobs-devtools-request-tester__group')\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-request-tester__group-title')\n appendText(title, label)\n const add = createElement('button')\n setAttribute(add, 'class', 'vobs-devtools-request-tester__add')\n setAttribute(add, 'type', 'button')\n appendText(add, '+')\n setAttribute(add, 'aria-label', `Add ${label}`)\n setAttribute(add, 'title', `Add ${label}`)\n add.addEventListener('click', () => { params.push({ key: '', value: '' }); onChange({ status: 'idle' }) })\n insertBefore(title, add, null)\n insertBefore(group, title, null)\n for (let index = 0; index < params.length; index++) {\n const param = params[index]\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-request-tester__param')\n insertBefore(row, createTesterInput(`${singular}-key-${index}`, param.key, value => { param.key = value }), null)\n insertBefore(row, createTesterInput(`${singular}-value-${index}`, param.value, value => { param.value = value }), null)\n const remove = createElement('button')\n setAttribute(remove, 'class', 'vobs-devtools-request-tester__remove')\n setAttribute(remove, 'type', 'button')\n setAttribute(remove, 'aria-label', `Remove ${label} row ${index + 1}`)\n setAttribute(remove, 'title', `Remove ${label} row ${index + 1}`)\n insertBefore(remove, createComponent(Icon, { name: 'trash' }), null)\n remove.addEventListener('click', () => { params.splice(index, 1); if (params.length === 0) params.push({ key: '', value: '' }); onChange({ status: 'idle' }) })\n insertBefore(row, remove, null)\n insertBefore(group, row, null)\n }\n return group\n}\n\nasync function executeRequestTester(http: HTTPClient | null | undefined, draft: RequestTesterDraft, onRunChange: (run: RequestTesterRun) => void): Promise<void> {\n if (!http) {\n onRunChange({ status: 'error', message: 'HTTP client is unavailable.' })\n return\n }\n const url = draft.url.trim()\n if (!url) {\n onRunChange({ status: 'error', message: 'Enter a request URL.' })\n return\n }\n const params: Record<string, string> = {}\n for (const param of draft.params) if (param.key.trim()) params[param.key.trim()] = param.value\n const headers: Record<string, string> = {}\n for (const header of draft.headers) if (header.key.trim()) headers[header.key.trim()] = header.value\n let body: unknown\n if (!['GET', 'HEAD', 'DELETE'].includes(draft.method) && draft.body.trim()) {\n try { body = JSON.parse(draft.body) } catch {\n onRunChange({ status: 'error', message: 'Body must be valid JSON.' })\n return\n }\n }\n onRunChange({ status: 'running', message: undefined })\n try {\n await http.request({\n url,\n method: draft.method,\n params: Object.keys(params).length > 0 ? params : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body,\n debugContext: { route: url, test: true }\n })\n onRunChange({ status: 'success', message: 'Request completed.' })\n } catch (error) {\n onRunChange({ status: 'error', message: error instanceof Error ? error.message : String(error) })\n }\n}\n\nfunction renderNetworkDetail(entry: NetworkEntry, activeTab: NetworkDetailTab, onTabChange: (tab: NetworkDetailTab) => void): VobsNode {\n const root = createElement('section')\n setAttribute(root, 'class', 'vobs-devtools-network-detail')\n const request = entry.request\n const routerRequest = entry.routerRequest\n const heading = createElement('div')\n setAttribute(heading, 'class', 'vobs-devtools-network-detail__heading')\n appendText(heading, `${entry.method} ${entry.url}`, 'vobs-devtools-network-detail__title')\n if (request?.test) insertBefore(heading, createComponent(Tag, { tone: 'warning', children: () => 'TEST' }), null)\n insertBefore(heading, createComponent(Tag, { tone: entry.status === 'success' ? 'success' : entry.status === 'error' || entry.status === 'cancelled' ? 'danger' : 'warning', children: () => request?.responseStatus ? `${entry.status} ${request.responseStatus}` : entry.status }), null)\n if (entry.duration !== undefined) appendText(heading, `${entry.duration.toFixed(0)} ms`, 'vobs-devtools-network-detail__duration')\n insertBefore(root, heading, null)\n const tabs = createElement('div')\n setAttribute(tabs, 'class', 'vobs-devtools-network-detail__tabs')\n const tabLabels: readonly [NetworkDetailTab, string][] = [['overview', 'Overview'], ['headers', 'Headers'], ['payload', 'Payload'], ['response', 'Response'], ['timing', 'Timing'], ['context', 'Context']]\n for (const [tab, label] of tabLabels) {\n const button = createElement('button')\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'class', `vobs-devtools-network-detail__tab${activeTab === tab ? ' is-active' : ''}`)\n setAttribute(button, 'aria-selected', activeTab === tab ? 'true' : 'false')\n appendText(button, label)\n button.addEventListener('click', () => onTabChange(tab))\n insertBefore(tabs, button, null)\n }\n insertBefore(root, tabs, null)\n const content = createElement('div')\n setAttribute(content, 'class', 'vobs-devtools-network-detail__content')\n if (activeTab === 'overview') {\n appendNetworkField(content, 'Source', entry.source.toUpperCase())\n appendNetworkField(content, 'Method / Type', entry.method)\n appendNetworkField(content, 'Request key', entry.url, 'code')\n appendNetworkField(content, 'Status', entry.status)\n if (request?.error || routerRequest?.error) appendText(content, request ? `${request.error?.name}: ${request.error?.message}` : routerRequest!.error!, 'vobs-devtools-error')\n } else if (activeTab === 'headers') {\n if (request && Object.keys(request.headers).length > 0) insertBefore(content, renderValueTree('Headers', request.headers, false), null)\n else appendMuted(content, 'No captured headers for this request.')\n } else if (activeTab === 'payload') {\n const payload = request?.requestBody\n if (payload !== undefined) insertBefore(content, renderValueTree('Request body', payload, false), null)\n else appendMuted(content, 'No request payload captured.')\n } else if (activeTab === 'response') {\n const response = request?.responseBody ?? routerRequest?.result\n if (response !== undefined) insertBefore(content, renderValueTree('Response', response, false), null)\n else appendMuted(content, routerRequest?.error ?? 'No response body captured.')\n } else if (activeTab === 'timing') {\n if (entry.startedAt !== undefined) appendNetworkField(content, 'Started at', formatNetworkTimestamp(entry.startedAt))\n if (entry.endedAt !== undefined) appendNetworkField(content, 'Ended at', formatNetworkTimestamp(entry.endedAt))\n appendNetworkField(content, 'Duration', entry.duration === undefined ? 'Running' : `${entry.duration.toFixed(2)} ms`)\n if (request) appendNetworkField(content, 'Attempts', `${request.attempt + 1} (${request.retries} retries)`)\n } else {\n appendNetworkField(content, 'Environment', request?.environment ?? routerRequest?.environment ?? 'client')\n if (request?.route ?? routerRequest?.route) appendNetworkField(content, 'Route', request?.route ?? routerRequest?.route ?? '', 'code')\n if (request?.navigationId ?? routerRequest?.navigationId) appendNetworkField(content, 'Navigation ID', String(request?.navigationId ?? routerRequest?.navigationId), 'code')\n if (request?.dataRequestId !== undefined) appendNetworkField(content, 'Data request ID', String(request.dataRequestId), 'code')\n if (routerRequest?.trigger) appendNetworkField(content, 'Trigger', routerRequest.trigger)\n appendNetworkField(content, 'Request ID', String(request?.id ?? routerRequest?.id), 'code')\n }\n insertBefore(root, content, null)\n return root\n}\n\nfunction appendNetworkField(parent: Element, label: string, value: string, valueKind?: 'code' | 'muted'): void {\n const field = createElement('div')\n setAttribute(field, 'class', 'vobs-devtools-network-detail__field')\n appendText(field, label, 'vobs-devtools-network-detail__label')\n appendText(field, value, `vobs-devtools-network-detail__value${valueKind ? ` vobs-devtools-${valueKind}` : ''}`)\n insertBefore(parent, field, null)\n}\n\nfunction formatNetworkTimestamp(value: number): string {\n const epoch = value > 100_000_000_000 ? value : (typeof performance !== 'undefined' ? performance.timeOrigin + value : Date.now())\n return new Date(epoch).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n}\n\nfunction matchesQuery(query: string, ...values: readonly unknown[]): boolean {\n const needle = query.trim().toLowerCase()\n if (!needle) return true\n return values.some(value => String(value ?? '').toLowerCase().includes(needle))\n}\n\nfunction filterErrors(errors: readonly DevToolsErrorTrace[], query: string): readonly DevToolsErrorTrace[] {\n return errors.filter(error => matchesQuery(query, error.phase, error.phases, error.origin, error.code, error.name, error.message, error.component, error.route, error.id, error.effectId, error.requestId))\n}\n\nfunction filterComponentTree(nodes: readonly ComponentDebugNode[], query: string): readonly ComponentDebugNode[] {\n if (!query.trim()) return nodes\n return nodes.flatMap(node => {\n const children = filterComponentTree(node.children, query)\n if (!matchesQuery(query, node.name, node.id) && children.length === 0) return []\n return [{ ...node, children }]\n })\n}\n\nfunction renderErrors(\n errors: readonly DevToolsErrorTrace[],\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-error-list')\n for (const error of [...errors].reverse()) {\n const row = createElement('details')\n const selected = selection?.type === 'error' && selection.id === error.id\n setAttribute(row, 'class', `vobs-devtools-list__row vobs-devtools-error-item${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n row.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('errors', { type: 'error', id: error.id })\n })\n const summary = createElement('summary')\n appendText(summary, formatErrorSummary(error), 'vobs-devtools-list__name')\n appendText(summary, error.message, 'vobs-devtools-error-item__message')\n insertBefore(summary, createComponent(Tag, { tone: error.origin === 'framework' ? 'danger' : error.origin === 'usage' ? 'warning' : 'neutral-strong', children: () => error.origin }), null)\n insertBefore(summary, createComponent(Tag, { tone: 'danger', children: () => `${error.count}×` }), null)\n insertBefore(row, summary, null)\n const details = createElement('div')\n setAttribute(details, 'class', 'vobs-devtools-error-item__details')\n appendErrorField(details, 'Phase', error.phases.length > 1 ? error.phases.join(' / ') : error.phase)\n appendErrorField(details, 'Occurred', `first ${new Date(error.firstOccurredAt).toLocaleString()} · last ${new Date(error.lastOccurredAt).toLocaleString()}`, 'muted')\n if (error.code) appendErrorField(details, 'Code', error.code, 'code')\n if (error.component) appendErrorField(details, 'Component', displayErrorComponent(error.component))\n if (error.ownerId) appendErrorField(details, 'Owner', error.ownerId, 'code')\n appendErrorField(details, 'Status', `${error.handled ? 'handled' : 'propagated'} · ${error.recovery}`, 'muted')\n if (error.hint) appendErrorField(details, 'Hint', error.hint, 'muted', true)\n if (error.cause) appendErrorField(details, 'Cause', error.cause, 'muted', true)\n if (error.fix) appendErrorField(details, 'Fix', error.fix, 'muted', true)\n if (error.source) appendErrorField(details, 'Source', formatDebugLocation(error.source), 'code', true)\n if (error.updateId) appendErrorLinkField(details, 'Update', error.updateId, 'updates', { type: 'update', id: error.updateId }, onFocus)\n if (error.effectId) appendErrorField(details, 'Effect', error.effectId, 'code')\n if (error.requestId !== undefined) appendErrorLinkField(details, 'Request', String(error.requestId), 'network', { type: 'request', id: error.requestId }, onFocus)\n if (error.navigationId !== undefined) appendErrorField(details, 'Navigation', String(error.navigationId), 'code')\n if (error.route) appendErrorField(details, 'Route', error.route, 'code')\n if (error.hydration) {\n appendErrorField(details, 'Expected', error.hydration.expected, 'code', true)\n appendErrorField(details, 'Actual', error.hydration.actual, 'code', true)\n appendErrorField(details, 'DOM path', error.hydration.path, 'code')\n }\n if (error.stack) appendErrorStack(details, error.stack, error.name, error.message)\n insertBefore(row, details, null)\n insertBefore(root, row, null)\n }\n if (errors.length === 0) appendMuted(root, 'No errors recorded.')\n return root\n}\n\nfunction appendContextLink(\n parent: Element,\n label: string,\n section: DevToolsSection,\n selection: DevToolsSelection,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-link')\n setAttribute(button, 'type', 'button')\n button.addEventListener('click', event => {\n event.stopPropagation()\n onFocus(section, selection)\n })\n insertBefore(button, createText(label), null)\n insertBefore(parent, button, null)\n}\n\nfunction appendErrorField(parent: Element, label: string, value: string, valueKind?: 'code' | 'muted', wide = false): void {\n const field = createElement('div')\n setAttribute(field, 'class', `vobs-devtools-error-item__field${wide ? ' vobs-devtools-error-item__field--wide' : ''}`)\n appendText(field, label, 'vobs-devtools-error-item__label')\n appendText(field, value, `vobs-devtools-error-item__value${valueKind ? ` vobs-devtools-${valueKind}` : ''}`)\n insertBefore(parent, field, null)\n}\n\nfunction appendErrorLinkField(\n parent: Element,\n label: string,\n value: string,\n section: DevToolsSection,\n selection: DevToolsSelection,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n const field = createElement('div')\n setAttribute(field, 'class', 'vobs-devtools-error-item__field')\n appendText(field, label, 'vobs-devtools-error-item__label')\n const valueNode = createElement('span')\n setAttribute(valueNode, 'class', 'vobs-devtools-error-item__value')\n appendContextLink(valueNode, value, section, selection, onFocus)\n insertBefore(field, valueNode, null)\n insertBefore(parent, field, null)\n}\n\nfunction appendErrorStack(parent: Element, value: string, name: string, message: string): void {\n const stack = createElement('div')\n setAttribute(stack, 'class', 'vobs-devtools-error-item__stack')\n appendText(stack, 'Stack trace', 'vobs-devtools-error-item__label')\n const code = createElement('pre')\n setAttribute(code, 'class', 'vobs-devtools-error-item__stack-code vobs-devtools-code')\n insertBefore(code, createText(formatDebugStack(value, name, message)), null)\n insertBefore(stack, code, null)\n insertBefore(parent, stack, null)\n}\n\nfunction formatErrorSummary(error: DevToolsErrorTrace): string {\n const phase = error.phases.length > 1 ? error.phases.join(' / ') : error.phase\n return error.name === 'Error' ? phase : `${phase} · ${error.name}`\n}\n\nfunction lifecycleSelection(event: LifecycleEvent): DevToolsSelection | null {\n if (event.type.startsWith('owner-')) return { type: 'component', id: event.targetId }\n if (event.type.startsWith('signal-') || event.type.startsWith('memo-')) return { type: 'signal', id: event.targetId }\n if (event.type.startsWith('effect-')) return { type: 'effect', id: event.targetId }\n return null\n}\n\nfunction displaySignalName(signal: SignalDebugInfo): string {\n if (!signal.name.startsWith('signal-')) return stripDebugLocation(signal.name)\n const component = formatDebugLocation(signal.component)\n return component === 'unknown' ? 'runtime state' : `${debugComponentName(component)} state`\n}\n\nfunction displayDebugName(name: string): string {\n return name.startsWith('signal-') ? 'runtime state' : stripDebugLocation(name)\n}\n\nfunction debugComponentName(value: string): string {\n const separator = value.indexOf(' (')\n return separator > 0 ? value.slice(0, separator) : value\n}\n\nfunction displayErrorComponent(value: string): string {\n return debugComponentName(formatDebugLocation(value))\n}\n\nfunction appendText(parent: Element, value: string, className?: string): void {\n const node = createElement('span')\n if (className) setAttribute(node, 'class', className)\n insertBefore(node, createText(value), null)\n insertBefore(parent, node, null)\n}\n\nfunction formatDebugLocation(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex <= 0 && !lower.startsWith('src/')) return normalized\n const sourcePath = normalized.slice(sourceIndex)\n const openParen = normalized.lastIndexOf('(', sourceIndex)\n return openParen >= 0\n ? `${normalized.slice(0, openParen + 1)}${sourcePath}`\n : sourcePath\n}\n\nfunction formatDebugStack(value: string, name: string, message: string): string {\n const lines = value\n .split(/\\r?\\n/)\n .map(formatDebugStackLine)\n const first = lines[0]?.trim()\n const header = `${name}: ${message}`\n if (lines.length > 1 && (first === header || first?.startsWith(`${header} `))) return lines.slice(1).join('\\n')\n return lines.join('\\n')\n}\n\nfunction formatDebugStackLine(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex < 0) return normalized\n if (sourceIndex === 0) return normalized\n\n const prefixBeforeLocation = normalized.slice(0, sourceIndex)\n const openParen = prefixBeforeLocation.lastIndexOf('(')\n const openBracket = prefixBeforeLocation.lastIndexOf('[')\n const opening = Math.max(openParen, openBracket)\n if (opening >= 0) return `${normalized.slice(0, opening + 1)}${normalized.slice(sourceIndex)}`\n\n const at = prefixBeforeLocation.lastIndexOf('at ')\n return at >= 0\n ? `${normalized.slice(0, at + 3)}${normalized.slice(sourceIndex)}`\n : normalized.slice(sourceIndex)\n}\n\nfunction formatDebugSource(value: string): string {\n const location = formatDebugLocation(value)\n const openParen = location.indexOf('(')\n if (openParen < 0) return location\n const closeParen = location.indexOf(')', openParen)\n return closeParen < 0 ? location : location.slice(openParen + 1, closeParen)\n}\n\nfunction stripDebugLocation(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex <= 0 && !lower.startsWith('src/')) return normalized\n const openParen = normalized.lastIndexOf('(', sourceIndex)\n if (openParen < 0) return normalized\n const closeParen = normalized.indexOf(')', sourceIndex)\n if (closeParen < 0) return normalized\n return `${normalized.slice(0, openParen)}${normalized.slice(closeParen + 1)}`.trim()\n}\n\nfunction renderComponentSummary(\n node: ComponentDebugNode,\n snapshot: DevToolsSnapshot,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const row = createElement('details')\n const selected = selection?.type === 'component' && selection.id === node.id\n setAttribute(row, 'class', `vobs-devtools-list__row vobs-devtools-component-row${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n row.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('components', { type: 'component', id: node.id })\n })\n\n const summary = createElement('summary')\n appendText(summary, formatDebugLocation(node.name), 'vobs-devtools-list__name')\n insertBefore(summary, createComponent(Tag, { tone: node.mounted ? 'success' : 'neutral-strong', children: () => `${node.signals.length} signals` }), null)\n insertBefore(summary, createComponent(Tag, { tone: 'neutral-strong', children: () => `${node.effects.length} effects` }), null)\n appendText(summary, `${node.recentUpdates.length} updates · ${node.domUpdates} DOM`, 'vobs-devtools-muted')\n insertBefore(row, summary, null)\n\n appendText(row, `Component ID: ${node.id}`, 'vobs-devtools-code')\n appendText(row, 'Recent updates:', 'vobs-devtools-code')\n appendUpdateLinks(row, node.recentUpdates, onFocus)\n if (node.domUpdates > 0) {\n appendText(row, 'DOM results:', 'vobs-devtools-code')\n for (const updateId of node.recentUpdates) {\n const update = snapshot.updates.find(item => item.id === updateId)\n for (const domUpdate of update?.domUpdates ?? []) {\n const operation = domUpdate.key ? `${domUpdate.operation}.${domUpdate.key}` : domUpdate.operation\n appendText(row, `${operation} ${domUpdate.target}`, 'vobs-devtools-muted')\n }\n }\n }\n if (node.children.length > 0) {\n appendText(row, 'Children:', 'vobs-devtools-code')\n for (const child of node.children) insertBefore(row, renderComponentSummary(child, snapshot, selection, onFocus), null)\n }\n return row\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nfunction renderValuePair(label: string, previousValue: unknown, nextValue: unknown): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', `vobs-devtools-value-pair${label ? '' : ' vobs-devtools-value-pair--compact'}`)\n const distinctMode = state(Boolean(label))\n root.addEventListener('click', event => event.stopPropagation())\n root.addEventListener('pointerdown', event => event.stopPropagation())\n if (label) {\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-value-pair__title')\n appendText(title, label)\n const toggle = createElement('button')\n setAttribute(toggle, 'class', 'vobs-devtools-distinct-toggle is-active')\n setAttribute(toggle, 'type', 'button')\n setAttribute(toggle, 'aria-pressed', 'true')\n setAttribute(toggle, 'title', 'Show only values that changed')\n insertBefore(toggle, createText('distinct'), null)\n toggle.addEventListener('click', event => {\n event.stopPropagation()\n const enabled = !distinctMode.value\n distinctMode.value = enabled\n setAttribute(toggle, 'class', `vobs-devtools-distinct-toggle${enabled ? ' is-active' : ''}`)\n setAttribute(toggle, 'aria-pressed', enabled ? 'true' : 'false')\n setAttribute(toggle, 'title', enabled ? 'Show only values that changed' : 'Show complete values')\n })\n insertBefore(title, toggle, null)\n insertBefore(root, title, null)\n }\n insertDynamic(root, null, () => {\n const distinct = distinctMode.value\n const difference = distinct ? createDistinctValuePair(previousValue, nextValue) : null\n const before = difference?.before ?? { value: previousValue, hasDifference: true }\n const after = difference?.after ?? { value: nextValue, hasDifference: true }\n return createFragment((parent, anchor) => {\n insertBefore(parent, renderValueTree('Before', before.value, Boolean(label), distinct && !before.hasDifference ? 'No differing fields' : undefined), anchor)\n insertBefore(parent, renderValueTree('After', after.value, Boolean(label), distinct && !after.hasDifference ? 'No differing fields' : undefined), anchor)\n })\n })\n return root\n}\n\nfunction renderValueTree(label: string, value: unknown, expanded: boolean, emptyMessage?: string): VobsNode {\n const root = createElement('section')\n setAttribute(root, 'class', 'vobs-devtools-value-inspector')\n // Value-tree interactions must not select and rerender their enclosing update row.\n // Otherwise native <details> toggles are immediately replaced by a fresh closed tree.\n root.addEventListener('click', event => event.stopPropagation())\n root.addEventListener('pointerdown', event => event.stopPropagation())\n if (hasExpandableEntries(value)) {\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-value-inspector__controls')\n insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'plus' }),\n 'aria-label': `Expand all ${label} values`,\n title: `Expand all ${label} values`,\n onClick: event => {\n event.stopPropagation()\n for (const node of root.querySelectorAll('.vobs-devtools-value-tree')) setAttribute(node, 'data-expanded', 'true')\n }\n }), null)\n insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'minus' }),\n 'aria-label': `Collapse all ${label} values`,\n title: `Collapse all ${label} values`,\n onClick: event => {\n event.stopPropagation()\n for (const node of root.querySelectorAll('.vobs-devtools-value-tree')) setAttribute(node, 'data-expanded', 'false')\n }\n }), null)\n insertBefore(root, controls, null)\n }\n const tree = createElement('div')\n setAttribute(tree, 'class', 'vobs-devtools-value-tree-root')\n setAttribute(tree, 'role', 'tree')\n setAttribute(tree, 'aria-label', `${label} value`)\n if (emptyMessage) appendText(tree, emptyMessage, 'vobs-devtools-value-tree__empty')\n else insertBefore(tree, renderInspectableValue(label, value, expanded), null)\n insertBefore(root, tree, null)\n return root\n}\n\ninterface DistinctValue {\n readonly value: unknown\n readonly hasDifference: boolean\n}\n\ninterface DistinctValuePair {\n readonly before: DistinctValue\n readonly after: DistinctValue\n}\n\nconst MISSING_VALUE = Symbol('missing diagnostic value')\n\nfunction createDistinctValuePair(before: unknown, after: unknown): DistinctValuePair {\n return projectDistinctValues(before, after)\n}\n\nfunction projectDistinctValues(before: unknown, after: unknown): DistinctValuePair {\n if (areValuesEqual(before, after)) {\n return {\n before: { value: before, hasDifference: false },\n after: { value: after, hasDifference: false }\n }\n }\n\n if (!isExpandableValue(before) || !isExpandableValue(after)) {\n return {\n before: { value: before, hasDifference: true },\n after: { value: after, hasDifference: true }\n }\n }\n\n if (Array.isArray(before) && Array.isArray(after)) {\n const beforeProjection: unknown[] = new Array(before.length)\n const afterProjection: unknown[] = new Array(after.length)\n for (let index = 0; index < Math.max(before.length, after.length); index++) {\n const child = projectDistinctValues(\n index in before ? before[index] : MISSING_VALUE,\n index in after ? after[index] : MISSING_VALUE\n )\n if (child.before.value !== MISSING_VALUE) beforeProjection[index] = child.before.value\n if (child.after.value !== MISSING_VALUE) afterProjection[index] = child.after.value\n }\n return {\n before: { value: beforeProjection, hasDifference: valueEntries(beforeProjection).length > 0 },\n after: { value: afterProjection, hasDifference: valueEntries(afterProjection).length > 0 }\n }\n }\n\n if (!Array.isArray(before) && !Array.isArray(after)) {\n const beforeProjection: Record<string, unknown> = {}\n const afterProjection: Record<string, unknown> = {}\n const beforeObject = before as Record<string, unknown>\n const afterObject = after as Record<string, unknown>\n const keys = new Set([...Object.keys(beforeObject), ...Object.keys(afterObject)])\n for (const key of keys) {\n const child = projectDistinctValues(\n Object.prototype.hasOwnProperty.call(beforeObject, key) ? beforeObject[key] : MISSING_VALUE,\n Object.prototype.hasOwnProperty.call(afterObject, key) ? afterObject[key] : MISSING_VALUE\n )\n if (child.before.value !== MISSING_VALUE) beforeProjection[key] = child.before.value\n if (child.after.value !== MISSING_VALUE) afterProjection[key] = child.after.value\n }\n return {\n before: { value: beforeProjection, hasDifference: Object.keys(beforeProjection).length > 0 },\n after: { value: afterProjection, hasDifference: Object.keys(afterProjection).length > 0 }\n }\n }\n\n return {\n before: { value: before, hasDifference: true },\n after: { value: after, hasDifference: true }\n }\n}\n\nfunction areValuesEqual(before: unknown, after: unknown, seen = new WeakMap<object, WeakSet<object>>()): boolean {\n if (Object.is(before, after)) return true\n if (!isExpandableValue(before) || !isExpandableValue(after)) return false\n if (Array.isArray(before) !== Array.isArray(after)) return false\n if (Object.prototype.toString.call(before) !== Object.prototype.toString.call(after)) return false\n\n const previousPairs = seen.get(before)\n if (previousPairs?.has(after)) return true\n if (previousPairs) previousPairs.add(after)\n else seen.set(before, new WeakSet([after]))\n\n const beforeKeys = Object.keys(before)\n const afterKeys = Object.keys(after)\n if (beforeKeys.length !== afterKeys.length) return false\n const beforeObject = before as Record<string, unknown>\n const afterObject = after as Record<string, unknown>\n return beforeKeys.every(key => Object.prototype.hasOwnProperty.call(afterObject, key) && areValuesEqual(beforeObject[key], afterObject[key], seen))\n}\n\nfunction renderInspectableValue(\n label: string,\n value: unknown,\n expanded = false,\n ancestors: readonly object[] = []\n): VobsNode {\n if (!hasExpandableEntries(value) || ancestors.includes(value as object)) {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-value-tree__leaf')\n setAttribute(row, 'role', 'treeitem')\n appendText(row, label, 'vobs-devtools-value-field__label')\n appendText(row, ancestors.includes(value as object) ? '[Circular]' : previewValue(value), 'vobs-devtools-code')\n return row\n }\n\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-value-tree')\n setAttribute(root, 'role', 'treeitem')\n setAttribute(root, 'data-expanded', expanded ? 'true' : 'false')\n const summary = createElement('button')\n setAttribute(summary, 'class', 'vobs-devtools-value-tree__summary')\n setAttribute(summary, 'type', 'button')\n setAttribute(summary, 'aria-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'title', `Expand ${label}`)\n const toggleExpanded = (): void => {\n const expanded = root.getAttribute('data-expanded') !== 'true'\n setAttribute(root, 'data-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'aria-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'title', `${expanded ? 'Collapse' : 'Expand'} ${label}`)\n }\n summary.addEventListener('pointerdown', event => {\n event.preventDefault()\n event.stopPropagation()\n toggleExpanded()\n })\n summary.addEventListener('keydown', event => {\n const keyboardEvent = event as KeyboardEvent\n if (keyboardEvent.key !== 'Enter' && keyboardEvent.key !== ' ') return\n event.preventDefault()\n event.stopPropagation()\n toggleExpanded()\n })\n appendText(summary, label, 'vobs-devtools-value-field__label')\n appendText(summary, previewValue(value), 'vobs-devtools-code')\n insertBefore(root, summary, null)\n\n const children = createElement('div')\n setAttribute(children, 'class', 'vobs-devtools-value-tree__children')\n setAttribute(children, 'role', 'group')\n for (const [key, child] of valueEntries(value)) {\n insertBefore(children, renderInspectableValue(key, child, false, [...ancestors, value as object]), null)\n }\n insertBefore(root, children, null)\n return root\n}\n\nfunction isExpandableValue(value: unknown): value is Record<string, unknown> | readonly unknown[] {\n return typeof value === 'object' && value !== null\n}\n\nfunction hasExpandableEntries(value: unknown): value is Record<string, unknown> | readonly unknown[] {\n return isExpandableValue(value) && valueEntries(value).length > 0\n}\n\nfunction valueEntries(value: Record<string, unknown> | readonly unknown[]): Array<[string, unknown]> {\n if (Array.isArray(value)) return value.slice(0, 100).map((item, index) => [`[${index}]`, item])\n return Object.entries(value).slice(0, 100)\n}\n\nfunction previewValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value)\n if (Array.isArray(value)) return `Array (${value.length} items)`\n if (typeof value === 'object') return `Object (${Object.keys(value).length} fields)`\n return String(value)\n}\n","import { createComponent, createElement, createFragment, insertBefore, insertDynamic, setAttribute, state, type VobsNode } from '@vobs/vobs'\nimport { getDevTools } from '@vobs/devtools'\nimport { Button, Dialog, Icon } from '@vobs/ui'\nimport { DevToolsPanel, DevToolsToolbar, type DevToolsPanelProps } from './panel'\n\nexport interface DevToolsWidgetProps extends DevToolsPanelProps {\n readonly label?: string\n}\n\n/** Floating entry point for opening the DevTools panel without leaving the app. */\nexport function DevToolsWidget(props: DevToolsWidgetProps = {}): VobsNode {\n const open = state(false)\n const maximized = state(false)\n const query = state('')\n const toolbarProps = {\n get api() { return props.api === undefined ? getDevTools() : props.api ?? null },\n query,\n get maximized() { return maximized.value },\n onToggleMaximize: () => { maximized.value = !maximized.value }\n }\n return createFragment((parent, anchor) => {\n const launcher = createElement('div')\n setAttribute(launcher, 'class', 'vobs-devtools-widget')\n insertBefore(launcher, createComponent(Button, {\n variant: 'brand',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'code' }),\n 'aria-label': props.label ?? 'Open DevTools',\n title: props.label ?? 'Open DevTools',\n onClick: () => { open.value = true }\n }), null)\n insertBefore(parent, launcher, anchor)\n\n insertDynamic(parent, anchor, () => open.value ? createComponent(Dialog, {\n get class() { return `vobs-devtools-widget__dialog${maximized.value ? ' is-maximized' : ''}` },\n open: true,\n title: 'Runtime DevTools',\n headerActions: () => createComponent(DevToolsToolbar, toolbarProps),\n size: 'lg',\n closeLabel: 'Close DevTools',\n onClose: () => { open.value = false; maximized.value = false },\n children: () => createComponent(DevToolsPanel, {\n api: props.api,\n router: props.router,\n http: props.http,\n query,\n toolbarPlacement: 'header'\n })\n }) : null)\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/panel.tsx","../src/widget.tsx"],"sourcesContent":["import {\n getDevTools,\n type ComponentDebugNode,\n type DevToolsAPI,\n type DevToolsErrorTrace,\n type DevToolsRouterContext,\n type DevToolsSelection,\n type EffectExecutionInfo,\n type EffectDebugInfo,\n type LifecycleEvent,\n type NetworkRequestTrace,\n type SignalDebugInfo,\n type UpdateTrace\n} from '@vobs/devtools'\nimport { HTTP_KEY, type HTTPClient, type HTTPMethod } from '@vobs/http'\nimport type { Router, RouterDevToolsAPI, RouteDebugNode, RouteRecord, RouterDataRequestTrace, RouteErrorTrace } from '@vobs/router'\nimport { effect } from '@vobs/reactivity'\nimport { createComponent, createElement, createFragment, createText, inject, insertBefore, insertDynamic, onDispose, setAttribute, setProperty, state, type VobsNode } from '@vobs/vobs'\nimport { Alert, Button, Card, Icon, Select, Tabs, Tag } from '@vobs/ui'\n\nexport interface DevToolsSnapshot {\n readonly api: DevToolsAPI | null\n readonly tree: readonly ComponentDebugNode[]\n readonly signals: readonly SignalDebugInfo[]\n readonly effects: readonly EffectDebugInfo[]\n readonly updates: readonly UpdateTrace[]\n readonly lifecycle: readonly LifecycleEvent[]\n readonly network: readonly NetworkRequestTrace[]\n readonly errors: readonly DevToolsErrorTrace[]\n readonly metrics: ReturnType<DevToolsAPI['getPerformanceMetrics']> | null\n readonly performanceEntries: ReturnType<DevToolsAPI['getPerformanceEntries']>\n readonly memory: ReturnType<DevToolsAPI['takeMemorySnapshot']> | null\n readonly router: RouterDevToolsAPI | null\n readonly routerContext: DevToolsRouterContext | null\n}\n\nexport interface DevToolsPanelProps {\n readonly api?: DevToolsAPI | null\n readonly router?: Router | null\n readonly http?: HTTPClient | null\n readonly query?: { value: string }\n readonly toolbarPlacement?: 'content' | 'header' | 'none'\n}\n\nconst EMPTY_SNAPSHOT: DevToolsSnapshot = {\n api: null,\n tree: [],\n signals: [],\n effects: [],\n updates: [],\n lifecycle: [],\n network: [],\n errors: [],\n metrics: null,\n performanceEntries: [],\n memory: null,\n router: null,\n routerContext: null\n}\n\n// The panel itself performs DOM work and creates reactive effects. Listening to\n// creation/mutation events here would make the inspector refresh itself forever.\nconst PANEL_REFRESH_EVENTS = ['signal-update', 'update', 'lifecycle', 'network-request', 'router', 'error', 'collection', 'collection-cleared'] as const\n\nexport function readDevToolsSnapshot(api: DevToolsAPI | null = getDevTools()): DevToolsSnapshot {\n return readDevToolsSnapshotWithRouter(api, null)\n}\n\nfunction readDevToolsSnapshotWithRouter(api: DevToolsAPI | null, router: Router | null): DevToolsSnapshot {\n if (!api) return { ...EMPTY_SNAPSHOT, router: router?.devtools ?? null }\n return {\n api,\n tree: api.getComponentTree(),\n signals: api.getSignals(),\n effects: api.getEffects(),\n updates: api.getUpdates(),\n lifecycle: api.getLifecycleEvents(),\n network: api.getNetworkRequests(),\n errors: api.getErrors(),\n metrics: api.getPerformanceMetrics(),\n performanceEntries: api.getPerformanceEntries(),\n memory: api.takeMemorySnapshot(),\n router: router?.devtools ?? null,\n routerContext: api.getRouterContext()\n }\n}\n\nexport function DevToolsPanel(props: DevToolsPanelProps = {}) {\n const refreshCount = state(0)\n const activeSection = state<DevToolsSection>('updates')\n const activeAdvancedSection = state<AdvancedSection>('signals')\n const activeRouterTab = state<RouterPanelTab>('context')\n const activeUpdatesTab = state<UpdatesPanelTab>('updates')\n const activeComponentsTab = state<ComponentsPanelTab>('tree')\n const activeRouteView = state<'tree' | 'list'>('tree')\n const activeTimelineFilter = state<TimelineFilter>('all')\n const networkSelection = state<string | null>(null)\n const networkSourceFilter = state<NetworkSourceFilter>('all')\n const networkStatusFilter = state<NetworkStatusFilter>('all')\n const networkDetailTab = state<NetworkDetailTab>('overview')\n const networkTesterOpen = state(false)\n const networkTesterRevision = state(0)\n const networkTesterRun = state<RequestTesterRun>({ status: 'idle' })\n const networkTesterTab = state<RequestTesterTab>('params')\n let networkTesterDraft = createRequestTesterDraft()\n const selection = state<DevToolsSelection | null>(null)\n const query = props.query ?? state('')\n const http = props.http ?? inject(HTTP_KEY) ?? null\n let refreshInvalidating = false\n\n const notifyRefresh = (): void => {\n // The panel's own local signals are also visible to the runtime hooks. Do\n // not recursively invalidate it while handling the update it just caused.\n if (refreshInvalidating) return\n refreshInvalidating = true\n refreshCount.value++\n queueMicrotask(() => { refreshInvalidating = false })\n }\n\n // Event callbacks only invalidate the panel. The next reactive render reads a fresh snapshot.\n queueMicrotask(notifyRefresh)\n const api = resolveApi(props)\n if (api) {\n const stops = PANEL_REFRESH_EVENTS.map(event => api.subscribe(event, notifyRefresh))\n onDispose(() => { for (const stop of stops) stop() })\n }\n const router = props.router ?? null\n if (router) {\n const detachRouter = api?.attachRouter(router)\n const stopNavigationStart = router.devtools.subscribe('navigation:start', notifyRefresh)\n const stopNavigation = router.devtools.subscribe('navigation:end', notifyRefresh)\n const stopRouteUpdate = router.devtools.subscribe('route:update', notifyRefresh)\n const stopRouteError = router.devtools.subscribe('error', notifyRefresh)\n onDispose(() => { stopNavigationStart(); stopNavigation(); stopRouteUpdate(); stopRouteError(); detachRouter?.() })\n }\n\n const toolbarPlacement = props.toolbarPlacement ?? 'content'\n return <div class=\"vobs-devtools-shell\">\n <aside class=\"vobs-devtools-shell__rail\" aria-label=\"DevTools sections\">\n <div class=\"vobs-devtools-shell__mark\"><Icon name=\"code\" /></div>\n <SectionNav activeSection={activeSection} />\n </aside>\n <section class=\"vobs-devtools-shell__main\">\n <div class=\"vobs-devtools-shell__content\">{toolbarPlacement === 'content' ? <DevToolsToolbar api={api} query={query} /> : null}<DevToolsContent refreshCount={refreshCount} activeSection={activeSection} activeAdvancedSection={activeAdvancedSection} activeRouterTab={activeRouterTab} activeUpdatesTab={activeUpdatesTab} activeComponentsTab={activeComponentsTab} activeRouteView={activeRouteView} router={router} api={api} http={http} selection={selection} query={query} networkSelection={networkSelection} networkSourceFilter={networkSourceFilter} networkStatusFilter={networkStatusFilter} networkDetailTab={networkDetailTab} networkTesterOpen={networkTesterOpen} networkTesterRevision={networkTesterRevision} networkTesterRun={networkTesterRun} networkTesterDraft={networkTesterDraft} networkTesterTab={networkTesterTab} /></div>\n </section>\n <ActivityRail refreshCount={refreshCount} router={router} api={api} selection={selection} activeSection={activeSection} activeFilter={activeTimelineFilter} />\n </div>\n}\n\nexport function DevToolsToolbar(props: { readonly api: DevToolsAPI | null; readonly query: { value: string }; readonly maximized?: boolean; readonly onToggleMaximize?: () => void }): VobsNode {\n const refreshCount = state(0)\n if (props.api) {\n const stops = ['collection', 'collection-cleared'].map(event => props.api!.subscribe(event, () => { refreshCount.value++ }))\n onDispose(() => { for (const stop of stops) stop() })\n }\n return createFragment((parent, anchor) => {\n const toolbar = createElement('div')\n setAttribute(toolbar, 'class', 'vobs-devtools-collection-toolbar vobs-devtools-collection-toolbar--header')\n const search = createElement('input')\n setAttribute(search, 'class', 'vobs-devtools-search vobs-devtools-header-search')\n setAttribute(search, 'type', 'search')\n setAttribute(search, 'placeholder', 'Search diagnostics')\n // This must be its own reactive effect. Reading query while mounting the\n // dialog header makes the header slot depend on the query and replaces the\n // focused input after every keystroke.\n effect(() => {\n const next = props.query.value\n if ((search as HTMLInputElement).value !== next) setProperty(search, 'value', next)\n })\n search.addEventListener('input', () => { props.query.value = (search as HTMLInputElement).value })\n insertBefore(toolbar, search, null)\n const actions = createElement('div')\n setAttribute(actions, 'class', 'vobs-devtools-collection-toolbar__actions')\n insertBefore(toolbar, actions, null)\n insertBefore(parent, toolbar, anchor)\n\n insertDynamic(actions, null, () => {\n void refreshCount.value\n if (!props.api) return null\n const paused = props.api.getCollectionState().paused\n return createFragment((actionParent, actionAnchor) => {\n insertBefore(actionParent, createComponent(Button, {\n variant: paused ? 'warning' : 'secondary',\n iconOnly: true,\n icon: createComponent(Icon, { name: paused ? 'play' : 'pause' }),\n 'aria-label': paused ? 'Resume collection' : 'Pause collection',\n title: paused ? 'Resume collection' : 'Pause collection',\n onClick: () => props.api?.setCollectionPaused(!paused)\n }), actionAnchor)\n insertBefore(actionParent, createComponent(Button, {\n variant: 'danger-subtle',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'trash' }),\n 'aria-label': 'Clear diagnostics',\n title: 'Clear diagnostics',\n onClick: () => {\n props.api?.clearUpdates()\n props.api?.clearNetworkRequests()\n props.api?.clearErrors()\n props.api?.clearLifecycleEvents()\n }\n }), actionAnchor)\n const exportDiagnostics = (): void => {\n const data = JSON.stringify(props.api?.exportDiagnostics(), null, 2)\n if (typeof document === 'undefined' || typeof URL === 'undefined' || typeof URL.createObjectURL !== 'function' || typeof URL.revokeObjectURL !== 'function' || typeof Blob === 'undefined') return\n const link = document.createElement('a')\n link.href = URL.createObjectURL(new Blob([data], { type: 'application/json' }))\n link.download = `vobs-devtools-${new Date().toISOString().replace(/[:.]/g, '-')}.json`\n link.click()\n URL.revokeObjectURL(link.href)\n }\n insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'download' }),\n 'aria-label': 'Export diagnostics',\n title: 'Export diagnostics',\n onClick: exportDiagnostics\n }), actionAnchor)\n const importInput = createElement('input')\n setAttribute(importInput, 'type', 'file')\n setAttribute(importInput, 'accept', 'application/json,.json')\n setAttribute(importInput, 'aria-label', 'Import diagnostics')\n setAttribute(importInput, 'hidden', '')\n importInput.addEventListener('change', () => {\n const file = (importInput as HTMLInputElement).files?.[0]\n if (!file) return\n void file.text().then(text => props.api?.importDiagnostics(JSON.parse(text))).catch(error => props.api?.reportError('global', error))\n })\n insertBefore(actionParent, importInput, actionAnchor)\n insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'upload' }),\n 'aria-label': 'Import diagnostics',\n title: 'Import diagnostics',\n onClick: () => (importInput as HTMLInputElement).click()\n }), actionAnchor)\n if (props.onToggleMaximize) insertBefore(actionParent, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: props.maximized ? 'arrow-minimize' : 'arrow-expand' }),\n 'aria-label': props.maximized ? 'Restore DevTools' : 'Maximize DevTools',\n title: props.maximized ? 'Restore DevTools' : 'Maximize DevTools',\n onClick: props.onToggleMaximize\n }), actionAnchor)\n })\n })\n })\n}\n\ntype DevToolsSection = 'router' | 'components' | 'advanced' | 'updates' | 'network' | 'errors'\ntype AdvancedSection = 'signals' | 'effects'\ntype RouterPanelTab = 'context' | 'requests' | 'errors' | 'history' | 'routes'\ntype UpdatesPanelTab = 'performance' | 'slow' | 'updates'\ntype ComponentsPanelTab = 'tree' | 'lifecycle'\ntype TimelineFilter = 'all' | 'update' | 'request' | 'navigation' | 'error'\ntype NetworkSourceFilter = 'all' | 'http' | 'router' | 'ssr'\ntype NetworkStatusFilter = 'all' | 'loading' | 'success' | 'error' | 'cancelled'\ntype NetworkDetailTab = 'overview' | 'headers' | 'payload' | 'response' | 'timing' | 'context'\n\ninterface NetworkEntry {\n readonly key: string\n readonly source: 'http' | 'router' | 'ssr'\n readonly method: string\n readonly url: string\n readonly status: string\n readonly duration?: number\n readonly startedAt?: number\n readonly endedAt?: number\n readonly request?: NetworkRequestTrace\n readonly routerRequest?: DevToolsRouterContext['dataRequests'][number]\n}\n\ninterface RequestTesterParam {\n key: string\n value: string\n}\n\ninterface RequestTesterDraft {\n url: string\n method: HTTPMethod\n params: RequestTesterParam[]\n headers: RequestTesterParam[]\n body: string\n}\n\ntype RequestTesterRun = { status: 'idle' | 'running' | 'success' | 'error'; message?: string }\ntype RequestTesterTab = 'params' | 'headers' | 'body'\n\nfunction createRequestTesterDraft(url = ''): RequestTesterDraft {\n return { url, method: 'GET', params: [{ key: '', value: '' }], headers: [{ key: '', value: '' }], body: '' }\n}\n\nconst TIMELINE_FILTER_OPTIONS: readonly { readonly value: TimelineFilter; readonly label: string }[] = [\n { value: 'all', label: 'All events' },\n { value: 'update', label: 'Updates' },\n { value: 'request', label: 'Requests' },\n { value: 'navigation', label: 'Navigation' },\n { value: 'error', label: 'Errors' }\n]\n\nfunction resolveApi(props: DevToolsPanelProps): DevToolsAPI | null {\n return props.api === undefined ? getDevTools() : props.api\n}\n\ninterface DevToolsContentProps {\n readonly refreshCount: { readonly value: number }\n readonly activeSection: { readonly value: DevToolsSection }\n readonly activeAdvancedSection: { value: AdvancedSection }\n readonly activeRouterTab: { value: RouterPanelTab }\n readonly activeUpdatesTab: { value: UpdatesPanelTab }\n readonly activeComponentsTab: { value: ComponentsPanelTab }\n readonly activeRouteView: { value: 'tree' | 'list' }\n readonly router: Router | null\n readonly api: DevToolsAPI | null\n readonly http: HTTPClient | null\n readonly selection: { value: DevToolsSelection | null }\n readonly query: { value: string }\n readonly networkSelection: { value: string | null }\n readonly networkSourceFilter: { value: NetworkSourceFilter }\n readonly networkStatusFilter: { value: NetworkStatusFilter }\n readonly networkDetailTab: { value: NetworkDetailTab }\n readonly networkTesterOpen: { value: boolean }\n readonly networkTesterRevision: { value: number }\n readonly networkTesterRun: { value: RequestTesterRun }\n readonly networkTesterDraft: RequestTesterDraft\n readonly networkTesterTab: { value: RequestTesterTab }\n}\n\ninterface ActivityRailProps {\n readonly refreshCount: { readonly value: number }\n readonly router: Router | null\n readonly api: DevToolsAPI | null\n readonly selection: { value: DevToolsSelection | null }\n readonly activeSection: { value: DevToolsSection }\n readonly activeFilter: { value: TimelineFilter }\n}\n\nfunction DevToolsContent(props: DevToolsContentProps) {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n void props.refreshCount.value\n void props.activeSection.value\n void props.activeRouterTab.value\n void props.activeUpdatesTab.value\n void props.activeComponentsTab.value\n void props.activeRouteView.value\n void props.query.value\n void props.networkSelection.value\n void props.networkSourceFilter.value\n void props.networkStatusFilter.value\n void props.networkDetailTab.value\n void props.networkTesterOpen.value\n void props.networkTesterRevision.value\n void props.networkTesterRun.value\n void props.networkTesterTab.value\n const selected = props.selection.value\n const snapshot = readDevToolsSnapshotWithRouter(props.api, props.router)\n return renderDevToolsContent(snapshot, props.activeSection.value, props.router, props.activeRouterTab, props.activeUpdatesTab, props.activeComponentsTab, selected, focusSelection(props.activeSection, props.selection), props.query.value, props.activeAdvancedSection, props.activeRouteView, props.networkSelection, props.networkSourceFilter, props.networkStatusFilter, props.networkDetailTab, props.query, props.http, props.networkTesterOpen, props.networkTesterRevision, props.networkTesterRun, props.networkTesterDraft, props.networkTesterTab)\n })\n })\n}\n\nfunction ActivityRail(props: ActivityRailProps) {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n void props.refreshCount.value\n const filter = props.activeFilter.value\n const selected = props.selection.value\n const snapshot = readDevToolsSnapshotWithRouter(props.api, props.router)\n const updates = [...snapshot.updates].reverse().slice(0, 8)\n const timeline = collectActivityTimeline(snapshot, props.router, filter)\n return renderActivityRail(updates, timeline, snapshot.api, selected, filter, next => { props.activeFilter.value = next }, focusSelection(props.activeSection, props.selection))\n })\n })\n}\n\nfunction focusSelection(\n activeSection: { value: DevToolsSection },\n selection: { value: DevToolsSelection | null }\n): (section: DevToolsSection, next: DevToolsSelection) => void {\n return (section, next) => {\n selection.value = next\n activeSection.value = section\n }\n}\n\nfunction SectionNav(props: { readonly activeSection: { value: DevToolsSection } }): VobsNode {\n return createFragment((parent, anchor) => {\n insertDynamic(parent, anchor, () => {\n const selected = props.activeSection.value\n return createFragment((navParent, navAnchor) => {\n for (const section of ['updates', 'components', 'advanced', 'network', 'errors', 'router'] as const) {\n const label = section === 'components' ? 'comp...' : section === 'advanced' ? 'adv...' : section\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-shell__nav-item${selected === section ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n const accessibleLabel = section === 'advanced' ? 'Advanced' : section\n setAttribute(button, 'aria-label', accessibleLabel)\n setAttribute(button, 'title', accessibleLabel)\n setAttribute(button, 'aria-pressed', selected === section ? 'true' : 'false')\n insertBefore(button, createComponent(Icon, { name: section === 'router' ? 'folder' : section === 'components' ? 'code' : section === 'advanced' ? 'atom' : section === 'network' ? 'globe' : section === 'errors' ? 'alert-triangle' : 'refresh' }), null)\n insertBefore(button, createElementText(label), null)\n button.addEventListener('click', () => { props.activeSection.value = section })\n insertBefore(navParent, button, navAnchor)\n }\n })\n })\n })\n}\n\ninterface ActivityTimelineItem {\n readonly kind: Exclude<TimelineFilter, 'all'>\n readonly timestamp: number\n readonly title: string\n readonly detail?: string\n readonly icon: string\n readonly update?: UpdateTrace\n}\n\nfunction collectActivityTimeline(snapshot: DevToolsSnapshot, router: Router | null, filter: TimelineFilter = 'all'): readonly ActivityTimelineItem[] {\n const items: ActivityTimelineItem[] = snapshot.updates.map(update => ({\n kind: 'update',\n timestamp: update.timestamp,\n title: snapshot.api?.getSignal(update.signalId) ? displaySignalName(snapshot.api.getSignal(update.signalId)!) : displayDebugName(update.signalName),\n detail: `${formatDebugSource(snapshot.api?.getSignal(update.signalId)?.component ?? 'unknown')} · ${update.duration.toFixed(2)} ms · ${update.effects.length} effects`,\n icon: 'zap',\n update\n }))\n for (const request of snapshot.network) {\n items.push({\n kind: 'request',\n timestamp: request.startedAt,\n title: `${request.method} ${request.url}`,\n detail: `${request.source ?? 'http'} · ${request.status}${request.duration === undefined ? '' : ` · ${request.duration} ms`}`,\n icon: 'download'\n })\n }\n for (const request of snapshot.routerContext?.dataRequests ?? []) {\n items.push({\n kind: 'request',\n timestamp: request.startedAt ?? Date.now(),\n title: `${request.kind} · ${request.key}`,\n detail: `${request.status}${request.route ? ` · ${request.route}` : ''}`,\n icon: 'folder'\n })\n }\n for (const trace of router?.devtools.getNavigationHistory() ?? []) {\n items.push({\n kind: 'navigation',\n timestamp: trace.endedAt,\n title: `Navigation ${trace.to}`,\n detail: `${trace.status} · ${trace.duration.toFixed(2)} ms`,\n icon: 'arrow-right'\n })\n }\n for (const error of snapshot.errors) {\n items.push({\n kind: 'error',\n timestamp: error.lastOccurredAt,\n title: `${error.phase} · ${error.message}`,\n detail: error.route ?? error.component,\n icon: 'alert-triangle'\n })\n }\n return items\n .filter(item => filter === 'all' || item.kind === filter)\n .sort((left, right) => right.timestamp - left.timestamp)\n .slice(0, 12)\n}\n\nfunction renderActivityRail(\n updates: readonly UpdateTrace[],\n timeline: readonly ActivityTimelineItem[],\n api: DevToolsAPI | null,\n selection: DevToolsSelection | null,\n filter: TimelineFilter,\n onFilterChange: (filter: TimelineFilter) => void,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('aside')\n setAttribute(root, 'class', 'vobs-devtools-shell__activity')\n const header = createElement('div')\n setAttribute(header, 'class', 'vobs-devtools-shell__activity-header')\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-shell__activity-title')\n insertBefore(title, createElementText('Timeline'), null)\n insertBefore(header, title, null)\n insertBefore(header, createComponent(Select, {\n class: 'vobs-devtools-timeline-filter',\n value: filter,\n 'aria-label': 'Filter timeline events',\n onChange: event => {\n const next = (event.target as HTMLSelectElement).value\n if (isTimelineFilter(next)) onFilterChange(next)\n },\n children: () => createFragment((parent, anchor) => {\n for (const option of TIMELINE_FILTER_OPTIONS) {\n const optionNode = createElement('option')\n setAttribute(optionNode, 'value', option.value)\n insertBefore(optionNode, createText(option.label), null)\n insertBefore(parent, optionNode, anchor)\n }\n })\n }), null)\n insertBefore(root, header, null)\n const subtitle = createElement('div')\n setAttribute(subtitle, 'class', 'vobs-devtools-shell__activity-subtitle')\n insertBefore(subtitle, createElementText(`${timeline.length} shown · ${updates.length} updates`), null)\n insertBefore(root, subtitle, null)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-activity-list')\n for (const entry of timeline) {\n const update = entry.update\n const activityItem = createElement('div')\n setAttribute(activityItem, 'class', `vobs-devtools-activity-item${update && selection?.type === 'update' && selection.id === update.id ? ' is-selected' : ''}`)\n if (update) activityItem.addEventListener('click', () => onFocus('updates', { type: 'update', id: update.id }))\n const dot = createElement('span')\n setAttribute(dot, 'class', 'vobs-devtools-activity-item__dot')\n insertBefore(dot, createComponent(Icon, { name: entry.icon }), null)\n const body = createElement('div')\n setAttribute(body, 'class', 'vobs-devtools-activity-item__body')\n const name = createElement('span')\n setAttribute(name, 'class', 'vobs-devtools-activity-item__name')\n const signal = update ? api?.getSignal(update.signalId) : undefined\n insertBefore(name, createElementText(entry.title), null)\n const detail = createElement('span')\n insertBefore(detail, createElementText(entry.detail ?? (update ? `${formatDebugSource(signal?.component ?? 'unknown')} · ${update.duration.toFixed(2)} ms · ${update.effects.length} effects` : '')), null)\n insertBefore(body, name, null)\n insertBefore(body, detail, null)\n insertBefore(activityItem, dot, null)\n insertBefore(activityItem, body, null)\n insertBefore(list, activityItem, null)\n }\n if (timeline.length === 0) {\n const empty = createElement('span')\n setAttribute(empty, 'class', 'vobs-devtools-muted')\n insertBefore(empty, createElementText(filter === 'all' ? 'No recent events.' : `No ${timelineFilterLabel(filter).toLowerCase()} events.`), null)\n insertBefore(list, empty, null)\n }\n insertBefore(root, list, null)\n return root\n}\n\nfunction isTimelineFilter(value: string): value is TimelineFilter {\n return TIMELINE_FILTER_OPTIONS.some(option => option.value === value)\n}\n\nfunction timelineFilterLabel(filter: TimelineFilter): string {\n return TIMELINE_FILTER_OPTIONS.find(option => option.value === filter)?.label ?? 'All events'\n}\n\nfunction createElementText(value: string): VobsNode {\n return createText(value)\n}\n\nfunction renderDevToolsContent(\n snapshot: DevToolsSnapshot,\n section: DevToolsSection = 'updates',\n router: Router | null = null,\n activeRouterTab?: { value: RouterPanelTab },\n activeUpdatesTab?: { value: UpdatesPanelTab },\n activeComponentsTab?: { value: ComponentsPanelTab },\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined,\n query = '',\n activeAdvancedSection?: { value: AdvancedSection },\n activeRouteView?: { value: 'tree' | 'list' },\n networkSelection?: { value: string | null },\n networkSourceFilter?: { value: NetworkSourceFilter },\n networkStatusFilter?: { value: NetworkStatusFilter },\n networkDetailTab?: { value: NetworkDetailTab },\n queryState?: { value: string },\n http?: HTTPClient | null,\n networkTesterOpen?: { value: boolean },\n networkTesterRevision?: { value: number },\n networkTesterRun?: { value: RequestTesterRun },\n networkTesterDraft?: RequestTesterDraft,\n networkTesterTab?: { value: RequestTesterTab }\n): VobsNode {\n if (!snapshot.api) {\n return createComponent(Alert, {\n description: 'Enable the devtools plugin to inspect the runtime.'\n })\n }\n return renderFocusedSection(snapshot, section, router, activeRouterTab, activeUpdatesTab, activeComponentsTab, selection, onFocus, query, activeAdvancedSection, activeRouteView, networkSelection, networkSourceFilter, networkStatusFilter, networkDetailTab, queryState, http, networkTesterOpen, networkTesterRevision, networkTesterRun, networkTesterDraft, networkTesterTab)\n}\n\nfunction renderFocusedSection(\n snapshot: DevToolsSnapshot,\n section: DevToolsSection,\n router: Router | null,\n activeRouterTab?: { value: RouterPanelTab },\n activeUpdatesTab?: { value: UpdatesPanelTab },\n activeComponentsTab?: { value: ComponentsPanelTab },\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined,\n query = '',\n activeAdvancedSection?: { value: AdvancedSection },\n activeRouteView?: { value: 'tree' | 'list' },\n networkSelection?: { value: string | null },\n networkSourceFilter?: { value: NetworkSourceFilter },\n networkStatusFilter?: { value: NetworkStatusFilter },\n networkDetailTab?: { value: NetworkDetailTab },\n queryState?: { value: string },\n http?: HTTPClient | null,\n networkTesterOpen?: { value: boolean },\n networkTesterRevision?: { value: number },\n networkTesterRun?: { value: RequestTesterRun },\n networkTesterDraft?: RequestTesterDraft,\n networkTesterTab?: { value: RequestTesterTab }\n): VobsNode {\n if (section === 'router') return renderRouterSection(router, activeRouterTab, activeRouteView)\n if (section === 'updates') return renderUpdatesSection(snapshot, activeUpdatesTab, query, selection, onFocus)\n if (section === 'components') return renderComponentsSection(snapshot, activeComponentsTab, query, selection, onFocus)\n if (section === 'network') return createComponent(Card, {\n children: () => renderUnifiedNetworkRequests(snapshot.network, snapshot.routerContext?.dataRequests ?? [], query, selection, onFocus, networkSelection, networkSourceFilter, networkStatusFilter, networkDetailTab, snapshot.api, queryState, http, networkTesterOpen, networkTesterRevision, networkTesterRun, networkTesterDraft, snapshot.routerContext?.route, networkTesterTab)\n })\n if (section === 'errors') return createComponent(Card, {\n description: `${snapshot.errors.length} retained unique errors`,\n children: () => renderErrors(filterErrors(snapshot.errors, query), selection, onFocus)\n })\n if (section === 'advanced') return renderAdvancedSection(snapshot, activeAdvancedSection, query)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n let title = 'Recent updates'\n let description = `${snapshot.updates.length} retained traces`\n return createComponent(Card, { title, description, children: () => list })\n}\n\nfunction renderComponentsSection(\n snapshot: DevToolsSnapshot,\n activeTab?: { value: ComponentsPanelTab },\n query = '',\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'tree', label: 'Component tree', content: () => renderComponentTree(snapshot, query, selection, onFocus) },\n { id: 'lifecycle', label: 'Lifecycle timeline', content: () => createComponent(Card, {\n class: 'vobs-devtools-lifecycle-card',\n description: `${snapshot.lifecycle.length} retained runtime events`,\n children: () => renderLifecycleTimeline(snapshot.lifecycle, (section, next) => {\n onFocus(section, next)\n if (section === 'components' && activeTab) activeTab.value = 'tree'\n })\n }) }\n ],\n get value() { return activeTab?.value ?? 'tree' },\n onChange: id => { if (activeTab && isComponentsPanelTab(id)) activeTab.value = id }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-components-tabs-wrap')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction renderComponentTree(\n snapshot: DevToolsSnapshot,\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const componentTree = filterComponentTree(snapshot.tree, query)\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n for (const node of componentTree) insertBefore(list, renderComponentSummary(node, snapshot, selection, onFocus), null)\n if (componentTree.length === 0) appendMuted(list, query ? 'No components match the search.' : 'No components recorded.')\n return createComponent(Card, {\n class: 'vobs-devtools-component-tree-card',\n description: `Component tree ${snapshot.memory?.ownerCount ?? 0} active owners`,\n children: () => list\n })\n}\n\nfunction isComponentsPanelTab(value: string): value is ComponentsPanelTab {\n return value === 'tree' || value === 'lifecycle'\n}\n\nfunction renderUpdatesSection(\n snapshot: DevToolsSnapshot,\n activeTab?: { value: UpdatesPanelTab },\n query = '',\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'performance', label: 'Performance', content: () => renderPerformanceMetrics(snapshot.metrics) },\n { id: 'slow', label: 'Slow items', content: () => renderSlowItems(snapshot.performanceEntries) },\n { id: 'updates', label: `Updates${snapshot.updates.length ? ` (${snapshot.updates.length})` : ''}`, content: () => renderUpdatesList(snapshot, query, selection, onFocus) }\n ],\n get value() { return activeTab?.value ?? 'updates' },\n onChange: id => { if (activeTab && isUpdatesPanelTab(id)) activeTab.value = id }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-updates-tabs-wrap')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction isUpdatesPanelTab(value: string): value is UpdatesPanelTab {\n return value === 'performance' || value === 'slow' || value === 'updates'\n}\n\nfunction renderUpdatesList(\n snapshot: DevToolsSnapshot,\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n for (const update of [...snapshot.updates].reverse().filter(update => matchesQuery(query, update.signalName, update.signalId, update.status, formatValue(update.previousValue), formatValue(update.nextValue))).slice(0, 50)) {\n insertBefore(list, renderUpdateRow(update, snapshot.api, selection, onFocus), null)\n }\n if (snapshot.updates.length === 0) appendMuted(list, 'Interact with the playground to record updates.')\n return createComponent(Card, {\n class: 'vobs-devtools-updates-card',\n children: () => list\n })\n}\n\nfunction renderAdvancedSection(\n snapshot: DevToolsSnapshot,\n activeSection?: { value: AdvancedSection },\n query = ''\n): VobsNode {\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-advanced-tabs',\n variant: 'filled',\n items: [\n { id: 'signals', label: 'Signals', content: () => renderSignalsInspector(snapshot, query) },\n { id: 'effects', label: 'Effects', content: () => renderEffectsInspector(snapshot, query) }\n ],\n get value() { return activeSection?.value ?? 'signals' },\n onChange: id => { if (activeSection) activeSection.value = id as AdvancedSection }\n })\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-advanced')\n insertBefore(root, tabs, null)\n return root\n}\n\nfunction renderSignalsInspector(snapshot: DevToolsSnapshot, query: string): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n const signals = snapshot.signals.filter(signal => matchesQuery(query, signal.name, signal.component, formatValue(signal.value))).slice(0, 50)\n for (const signal of signals) insertBefore(list, renderSignalInspector(signal, snapshot.api), null)\n if (signals.length === 0) appendMuted(list, query ? 'No signals match the search.' : 'No signals recorded.')\n return list\n}\n\nfunction renderEffectsInspector(snapshot: DevToolsSnapshot, query: string): VobsNode {\n const list = createElement('div')\n setAttribute(list, 'class', 'vobs-devtools-list')\n const effects = snapshot.effects.filter(effect => matchesQuery(query, effect.name, effect.component, effect.id)).slice(0, 50)\n for (const effect of effects) insertBefore(list, renderEffectRow(effect), null)\n if (effects.length === 0) appendMuted(list, query ? 'No effects match the search.' : 'No effects recorded.')\n return list\n}\n\nfunction renderPerformanceMetrics(metrics: DevToolsSnapshot['metrics']): VobsNode {\n if (!metrics) {\n return createComponent(Card, { description: 'Performance: Lightweight slow-path summary for the retained diagnostics.', children: () => {\n const root = createElement('div')\n appendMuted(root, 'No performance data available.')\n return root\n } })\n }\n const metricsGrid = createElement('div')\n setAttribute(metricsGrid, 'class', 'vobs-devtools-performance-metrics')\n appendMetric(metricsGrid, 'Slow updates', metrics.slowUpdateCount)\n appendMetric(metricsGrid, 'Slow effects', metrics.slowEffectCount)\n appendMetric(metricsGrid, 'Slow requests', metrics.slowRequestCount)\n appendMetric(metricsGrid, 'Max update', `${metrics.maxUpdateDuration.toFixed(2)} ms`)\n appendMetric(metricsGrid, 'Max effect', `${metrics.maxEffectDuration.toFixed(2)} ms`)\n appendMetric(metricsGrid, 'Max request', `${metrics.maxRequestDuration.toFixed(2)} ms`)\n return createComponent(Card, {\n class: 'vobs-devtools-performance-card',\n description: 'Lightweight slow-path summary for the retained diagnostics.',\n children: () => metricsGrid\n })\n}\n\nfunction renderSlowItems(entries: DevToolsSnapshot['performanceEntries']): VobsNode {\n const slowEntries = entries.filter(entry => entry.duration >= 16).slice(0, 8)\n const slowList = createElement('div')\n setAttribute(slowList, 'class', 'vobs-devtools-performance-slow-list')\n for (const entry of slowEntries) {\n const item = createElement('div')\n setAttribute(item, 'class', 'vobs-devtools-performance-slow-item')\n appendText(item, entry.kind, 'vobs-devtools-muted')\n appendText(item, formatPerformanceLabel(entry), 'vobs-devtools-list__name')\n appendText(item, `${entry.duration.toFixed(2)} ms`, 'vobs-devtools-code')\n insertBefore(slowList, item, null)\n }\n if (slowEntries.length === 0) appendMuted(slowList, 'No slow items recorded.')\n return createComponent(Card, {\n class: 'vobs-devtools-performance-slow-card',\n description: slowEntries.length ? `${slowEntries.length} retained item${slowEntries.length === 1 ? '' : 's'} at or above 16 ms.` : undefined,\n children: () => slowList\n })\n}\n\nfunction formatPerformanceLabel(entry: DevToolsSnapshot['performanceEntries'][number]): string {\n if (entry.kind === 'request') return entry.label\n const formatted = formatDebugLocation(entry.label)\n const openParen = formatted.indexOf('(')\n const closeParen = openParen >= 0 ? formatted.indexOf(')', openParen) : -1\n if (openParen < 0 || closeParen < 0) return stripDebugLocation(entry.label)\n const componentName = formatted.slice(0, openParen).trim()\n const source = formatted.slice(openParen + 1, closeParen)\n const fileName = source.split('/').pop() ?? source\n const suffix = formatted.slice(closeParen + 1).trim()\n return [componentName, fileName, suffix].filter(Boolean).join(' ')\n}\n\nfunction appendMetric(parent: Element, label: string, value: number | string): void {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-performance-item')\n appendText(row, label, 'vobs-devtools-muted')\n appendText(row, String(value), 'vobs-devtools-list__name')\n insertBefore(parent, row, null)\n}\n\nfunction renderRouterSection(\n router: Router | null,\n activeRouterTab?: { value: RouterPanelTab },\n activeRouteView?: { value: 'tree' | 'list' }\n): VobsNode {\n if (!router) return createComponent(Alert, { tone: 'warning', title: 'Router unavailable', description: 'Pass a Router instance to inspect route activity.' })\n const devtools = router.devtools\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-router')\n const current = devtools.getCurrentRoute()\n const state = devtools.getNavigationState()\n const metrics = devtools.getPerformanceMetrics()\n const activeRequests = devtools.getDataRequests().filter(request => request.route === current.fullPath || request.key.startsWith(`${current.fullPath}#`))\n const activeErrors = devtools.getErrors().filter(error => error.route === current.fullPath)\n const toolbar = createElement('div')\n setAttribute(toolbar, 'class', 'vobs-devtools-panel__toolbar')\n insertBefore(toolbar, createComponent(Button, { variant: 'secondary', icon: createComponent(Icon, { name: 'refresh' }), children: () => 'Revalidate current route', onClick: () => { void devtools.revalidate(current.fullPath) } }), null)\n const tabs = createComponent(Tabs, {\n class: 'vobs-devtools-router-tabs',\n variant: 'filled',\n items: [\n { id: 'context', label: 'Context', content: () => createRouterContextPanel(current, state) },\n { id: 'requests', label: `Requests${activeRequests.length ? ` (${activeRequests.length})` : ''}`, content: () => createComponent(Card, { title: `Data requests for ${current.path}`, description: 'Loader, action and fetcher traces for the active route.', children: () => renderDataRequests(activeRequests) }) },\n { id: 'errors', label: `Errors${activeErrors.length ? ` (${activeErrors.length})` : ''}`, content: () => createComponent(Card, { title: `Errors for ${current.path}`, description: `${activeErrors.length} errors captured for the active route.`, children: () => renderRouterErrors(activeErrors) }) },\n { id: 'history', label: 'History', content: () => createComponent(Card, { title: 'Navigation history', description: `${metrics.navigationCount} recorded navigations · ${metrics.averageNavigationDuration.toFixed(2)} ms average`, children: () => renderNavigationHistory(devtools.getNavigationHistory(), router) }) },\n { id: 'routes', label: 'Route map', content: () => createComponent(Card, {\n title: 'Route map',\n description: 'All registered routes and their source locations.',\n children: () => renderRouteMap(devtools.getRouteTree(), router, activeRouteView)\n }) }\n ],\n get value() { return activeRouterTab?.value ?? 'context' },\n onChange: id => { if (activeRouterTab) activeRouterTab.value = id as RouterPanelTab }\n })\n const tabsWrap = createElement('div')\n setAttribute(tabsWrap, 'class', 'vobs-devtools-router-tabs-wrap')\n insertBefore(tabsWrap, tabs, null)\n insertBefore(tabsWrap, toolbar, null)\n insertBefore(root, tabsWrap, null)\n return root\n}\n\nfunction createRouterContextPanel(current: ReturnType<RouterDevToolsAPI['getCurrentRoute']>, state: ReturnType<RouterDevToolsAPI['getNavigationState']>): VobsNode {\n return createFragment((parent, anchor) => {\n insertBefore(parent, createComponent(Card, { title: 'Active route', children: () => renderRouterLocation(current, state) }), anchor)\n insertBefore(parent, createComponent(Card, { title: 'Matched route structure', children: () => renderMatchedRoutes(current.matched) }), anchor)\n })\n}\n\nfunction renderDataRequests(requests: readonly RouterDataRequestTrace[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const request of [...requests].reverse().slice(0, 30)) {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n const summary = createElement('summary')\n appendText(summary, `${request.kind} · ${request.key}`, 'vobs-devtools-list__name')\n insertBefore(summary, createComponent(Tag, { tone: request.status === 'success' ? 'success' : request.status === 'error' ? 'danger' : 'warning', children: () => request.status }), null)\n appendText(summary, request.duration === undefined ? 'running' : `${request.duration.toFixed(2)} ms`)\n insertBefore(row, summary, null)\n if (request.error) appendText(row, request.error)\n if (request.status === 'success' && request.result !== undefined) insertBefore(row, renderInspectableValue('Result', request.result), null)\n insertBefore(root, row, null)\n }\n if (requests.length === 0) appendMuted(root, 'No data requests recorded.')\n return root\n}\n\nfunction renderRouterErrors(errors: readonly RouteErrorTrace[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const error of [...errors].reverse().slice(0, 30)) {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row vobs-devtools-error-row')\n const summary = createElement('summary')\n appendText(summary, `${error.phase} · ${error.route}`, 'vobs-devtools-list__name')\n appendText(summary, error.message)\n insertBefore(row, summary, null)\n if (error.stack) appendText(row, error.stack, 'vobs-devtools-code')\n insertBefore(root, row, null)\n }\n if (errors.length === 0) appendMuted(root, 'No route errors recorded.')\n return root\n}\n\nfunction renderRouterLocation(route: ReturnType<RouterDevToolsAPI['getCurrentRoute']>, state: ReturnType<RouterDevToolsAPI['getNavigationState']>): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n const statusRow = createElement('div')\n setAttribute(statusRow, 'class', 'vobs-devtools-list__row')\n appendText(statusRow, route.fullPath, 'vobs-devtools-list__name')\n insertBefore(statusRow, createComponent(Tag, { tone: state.status === 'error' ? 'danger' : state.status === 'loading' ? 'warning' : 'success', children: () => state.status }), null)\n if (state.status === 'loading') appendText(statusRow, `to ${state.to}`)\n if (state.error) appendText(statusRow, state.error)\n insertBefore(root, statusRow, null)\n insertBefore(root, renderInspectableValue('Params', route.params), null)\n insertBefore(root, renderInspectableValue('Query', route.query), null)\n insertBefore(root, renderInspectableValue('Meta', route.meta), null)\n appendText(root, `outlet ${route.matched.map(record => record.path ?? '(layout)').join(' > ')}`)\n return root\n}\n\nfunction renderMatchedRoutes(records: readonly RouteRecord[]): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-route-tree')\n records.forEach((record, index) => {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-route-node')\n setAttribute(row, 'style', `--route-depth: ${index}`)\n appendText(row, record.path ?? '(layout)', 'vobs-devtools-list__name')\n appendText(row, routeComponentName(record))\n if (record.source) appendText(row, record.source, 'vobs-devtools-code')\n if (record.loader) insertBefore(row, createComponent(Tag, { tone: 'neutral-strong', children: () => 'loader' }), null)\n if (record.action) insertBefore(row, createComponent(Tag, { tone: 'neutral-strong', children: () => 'action' }), null)\n insertBefore(root, row, null)\n })\n if (records.length === 0) appendMuted(root, 'No matched route records.')\n return root\n}\n\nfunction renderRouteMap(\n nodes: readonly RouteDebugNode[],\n router: Router,\n activeRouteView?: { value: 'tree' | 'list' }\n): VobsNode {\n const tree = createElement('div')\n setAttribute(tree, 'class', 'vobs-devtools-route-tree')\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-route-view-toggle')\n for (const mode of ['tree', 'list'] as const) {\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-control${(activeRouteView?.value ?? 'tree') === mode ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'aria-pressed', (activeRouteView?.value ?? 'tree') === mode ? 'true' : 'false')\n insertBefore(button, createText(mode === 'tree' ? 'Tree' : 'List'), null)\n button.addEventListener('click', () => { if (activeRouteView) activeRouteView.value = mode })\n insertBefore(controls, button, null)\n }\n insertBefore(tree, controls, null)\n const currentPath = router.currentRoute.value.path\n if ((activeRouteView?.value ?? 'tree') === 'list') {\n for (const node of flattenRouteNodes(nodes)) appendRouteConfigNode(tree, node, 0, router, currentPath)\n } else {\n for (const node of nodes) appendRouteConfigNode(tree, node, 0, router, currentPath)\n }\n return tree\n}\n\nfunction flattenRouteNodes(nodes: readonly RouteDebugNode[]): readonly RouteDebugNode[] {\n const result: RouteDebugNode[] = []\n const visit = (node: RouteDebugNode): void => {\n result.push({ ...node, children: [] })\n for (const child of node.children) visit(child)\n }\n for (const node of nodes) visit(node)\n return result\n}\n\nfunction appendRouteConfigNode(parent: Element, node: RouteDebugNode, depth: number, router: Router, currentPath: string): void {\n const concrete = node.children.length === 0 && !node.path.includes(':') && !node.path.includes('*')\n const row = createElement(concrete ? 'button' : 'div')\n setAttribute(row, 'class', `vobs-devtools-route-node${concrete && node.path === currentPath ? ' is-active' : ''}`)\n setAttribute(row, 'style', `--route-depth: ${depth}`)\n appendText(row, node.path, 'vobs-devtools-list__name')\n appendText(row, node.component)\n if (node.source) appendText(row, node.source, 'vobs-devtools-code')\n if (concrete) {\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'title', `Navigate to ${node.path}`)\n row.addEventListener('click', () => { void router.push(node.path) })\n }\n insertBefore(parent, row, null)\n for (const child of node.children) appendRouteConfigNode(parent, child, depth + 1, router, currentPath)\n}\n\nfunction routeComponentName(record: RouteRecord): string {\n const definition = record.component\n if (!definition) return 'Route'\n if (typeof definition === 'function') return definition.name || 'Anonymous'\n return 'lazy(...)'\n}\n\nfunction renderNavigationHistory(history: readonly import('@vobs/router').NavigationTrace[], router: Router): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-list')\n for (const trace of [...history].reverse().slice(0, 30)) {\n const row = createElement('button')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'title', `Replay ${trace.to}`)\n appendText(row, `${trace.from} → ${trace.to}`, 'vobs-devtools-list__name')\n insertBefore(row, createComponent(Tag, { tone: trace.status === 'success' ? 'success' : trace.status === 'error' ? 'danger' : 'warning', children: () => trace.status }), null)\n appendText(row, `${trace.duration.toFixed(2)} ms · ${trace.source}`)\n row.addEventListener('click', () => { void router.push(trace.to) })\n insertBefore(root, row, null)\n }\n if (history.length === 0) appendMuted(root, 'No navigation history recorded.')\n return root\n}\n\nfunction appendMuted(parent: Element, value: string): void {\n const node = createElement('span')\n setAttribute(node, 'class', 'vobs-devtools-muted')\n insertBefore(node, createText(value), null)\n insertBefore(parent, node, null)\n}\n\nfunction renderSignalInspector(\n signal: SignalDebugInfo,\n api: DevToolsAPI | null\n): VobsNode {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row vobs-devtools-signal-row')\n const summary = createElement('summary')\n appendText(summary, displaySignalName(signal), 'vobs-devtools-list__name')\n appendText(summary, previewValue(signal.value), 'vobs-devtools-code')\n insertBefore(summary, createComponent(Tag, { tone: 'neutral-strong', children: () => `${signal.subscribers} subscribers` }), null)\n insertBefore(row, summary, null)\n if (!api) return row\n const dependencies = api.getDependencies(signal.id)\n const dependents = api.getDependents(signal.id)\n insertBefore(row, renderInspectableValue('Current value', signal.value), null)\n appendText(row, `${dependencies.length} dependencies · ${dependents.length} dependents`, 'vobs-devtools-muted')\n if (api.canMutate() && signal.kind !== 'memo') insertBefore(row, renderSignalMutationControl(signal, api), null)\n return row\n}\n\nfunction renderSignalMutationControl(signal: SignalDebugInfo, api: DevToolsAPI): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-mutation-control')\n appendText(root, 'Debug-only value edit (may trigger effects and requests).', 'vobs-devtools-muted')\n const input = createElement('input')\n setAttribute(input, 'class', 'vobs-devtools-search')\n setAttribute(input, 'type', 'text')\n setAttribute(input, 'aria-label', `Edit ${signal.name}`)\n setProperty(input, 'value', formatValue(signal.value))\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-control')\n setAttribute(button, 'type', 'button')\n insertBefore(button, createText('Apply debug value'), null)\n button.addEventListener('click', event => {\n event.stopPropagation()\n const raw = (input as HTMLInputElement).value\n let value: unknown = raw\n try { value = JSON.parse(raw) } catch { /* Treat non-JSON input as a string. */ }\n api.setSignalValue(signal.id, value)\n })\n insertBefore(root, input, null)\n insertBefore(root, button, null)\n return root\n}\n\nfunction renderEffectRow(\n effect: EffectDebugInfo\n): VobsNode {\n const row = createElement('details')\n setAttribute(row, 'class', 'vobs-devtools-list__row')\n const summary = createElement('summary')\n const component = formatDebugLocation(effect.component)\n appendText(summary, effect.name || `${debugComponentName(component)} effect`, 'vobs-devtools-list__name')\n appendText(summary, formatDebugSource(component))\n insertBefore(summary, createComponent(Tag, { tone: effect.status === 'success' || effect.status === 'idle' ? 'success' : effect.status === 'error' ? 'danger' : 'warning', children: () => effect.status }), null)\n appendText(summary, `${effect.executionCount} runs`)\n insertBefore(row, summary, null)\n appendText(row, `${effect.dependencies.length} dependencies`, 'vobs-devtools-muted')\n if (effect.lastExecutionTime > 0) appendText(row, `last execution ${effect.lastDuration?.toFixed(2) ?? '0.00'} ms · ${effect.lastRunStatus ?? 'unknown'} · ${effect.lastDomUpdates ?? 0} DOM updates`, 'vobs-devtools-muted')\n if (effect.lastUpdateId) appendText(row, `last update ${effect.lastUpdateId}`, 'vobs-devtools-code')\n if (effect.lastError) appendText(row, `${effect.lastError.name}: ${effect.lastError.message}`, 'vobs-devtools-error')\n return row\n}\n\nfunction renderUpdateRow(\n update: UpdateTrace,\n api: DevToolsAPI | null,\n selection: DevToolsSelection | null = null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void = () => undefined\n): VobsNode {\n const row = createElement('details')\n const selected = selection?.type === 'update' && selection.id === update.id\n setAttribute(row, 'class', `vobs-devtools-update-row${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n const summary = createElement('summary')\n // The update row owns its own selection. Signal and Effect details stay local\n // to this trace and do not navigate to the Advanced inspectors.\n summary.addEventListener('click', () => onFocus('updates', { type: 'update', id: update.id }))\n const signal = api?.getSignal(update.signalId)\n appendText(summary, signal ? displaySignalName(signal) : displayDebugName(update.signalName), 'vobs-devtools-list__name')\n appendText(summary, formatDebugSource(signal?.component ?? 'unknown'), 'vobs-devtools-update-row__source')\n appendText(summary, `${update.duration.toFixed(2)} ms`)\n insertBefore(summary, createComponent(Tag, { tone: update.duration >= 16 ? 'warning' : 'neutral-strong', children: () => `${update.effects.length} effects` }), null)\n insertBefore(row, summary, null)\n insertBefore(row, renderValuePair('Value changed', update.previousValue, update.nextValue), null)\n appendText(row, `status ${update.status} · ${update.affectedSignals.length} signals · ${update.affectedEffects.length} effects`, 'vobs-devtools-muted')\n if (update.error) appendText(row, `${update.error.name}: ${update.error.message}`, 'vobs-devtools-error')\n if (update.effects.length === 0) appendText(row, 'No effects executed.', 'vobs-devtools-muted')\n for (const effect of update.effects) {\n insertBefore(row, renderEffectExecution(effect), null)\n if (effect.error) appendText(row, `${effect.error.name}: ${effect.error.message}`, 'vobs-devtools-error')\n }\n for (const domUpdate of update.domUpdates) {\n const operation = domUpdate.key ? `${domUpdate.operation}.${domUpdate.key}` : domUpdate.operation\n const mutation = createElement('div')\n setAttribute(mutation, 'class', 'vobs-devtools-dom-update')\n appendText(mutation, operation, 'vobs-devtools-list__name')\n appendText(mutation, domUpdate.target, 'vobs-devtools-muted')\n if (domUpdate.previousValue !== undefined || domUpdate.nextValue !== undefined) {\n insertBefore(mutation, renderValuePair('', domUpdate.previousValue, domUpdate.nextValue), null)\n }\n insertBefore(row, mutation, null)\n }\n return row\n}\n\nfunction renderEffectExecution(\n effect: EffectExecutionInfo\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-effect-execution')\n appendText(root, effect.effectId, 'vobs-devtools-code')\n appendText(root, `${formatDebugSource(effect.component)} · ${effect.duration.toFixed(2)} ms · ${effect.domUpdates} DOM updates · ${effect.status ?? 'success'}`)\n return root\n}\n\nfunction appendUpdateLinks(\n parent: Element,\n ids: readonly string[],\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n if (ids.length === 0) {\n appendText(parent, ' none', 'vobs-devtools-muted')\n return\n }\n for (const id of ids) {\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-link')\n setAttribute(button, 'type', 'button')\n button.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('updates', { type: 'update', id })\n })\n insertBefore(button, createText(id), null)\n insertBefore(parent, button, null)\n }\n}\n\nfunction renderLifecycleTimeline(\n events: readonly LifecycleEvent[],\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-lifecycle-list')\n for (const event of [...events].reverse().slice(0, 40)) {\n const selection = lifecycleSelection(event)\n const row = createElement(selection?.type === 'component' ? 'button' : 'div')\n setAttribute(row, 'class', 'vobs-devtools-lifecycle-row')\n if (selection?.type === 'component') setAttribute(row, 'type', 'button')\n appendText(row, event.type, 'vobs-devtools-list__name')\n appendText(row, event.name ?? event.targetId)\n appendText(row, event.status ?? '', 'vobs-devtools-muted')\n if (selection?.type === 'component') row.addEventListener('click', () => onFocus('components', selection))\n insertBefore(root, row, null)\n }\n if (events.length === 0) appendMuted(root, 'No lifecycle events recorded.')\n return root\n}\n\nfunction renderUnifiedNetworkRequests(\n requests: readonly NetworkRequestTrace[],\n routerRequests: readonly DevToolsRouterContext['dataRequests'][number][],\n query: string,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void,\n networkSelection?: { value: string | null },\n sourceFilter?: { value: NetworkSourceFilter },\n statusFilter?: { value: NetworkStatusFilter },\n detailTab?: { value: NetworkDetailTab },\n api?: DevToolsAPI | null,\n queryState?: { value: string },\n http?: HTTPClient | null,\n testerOpen?: { value: boolean },\n testerRevision?: { value: number },\n testerRun?: { value: RequestTesterRun },\n testerDraft?: RequestTesterDraft,\n currentRoute?: string,\n testerTab?: { value: RequestTesterTab }\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-network-inspector')\n const activeSource = sourceFilter?.value ?? 'all'\n const activeStatus = statusFilter?.value ?? 'all'\n const entries: NetworkEntry[] = [\n ...requests.map<NetworkEntry>(request => ({\n key: `http:${request.id}`,\n source: request.source === 'ssr' ? 'ssr' as const : 'http' as const,\n method: request.method,\n url: request.url,\n status: request.status,\n duration: request.duration,\n startedAt: request.startedAt,\n endedAt: request.endedAt,\n request\n })),\n ...routerRequests.map<NetworkEntry>(request => ({\n key: `router:${request.id}`,\n source: 'router' as const,\n method: request.kind,\n url: request.key,\n status: request.status,\n duration: request.duration,\n startedAt: request.startedAt,\n endedAt: request.endedAt,\n routerRequest: request\n }))\n ].filter(entry => (activeSource === 'all' || entry.source === activeSource) && (activeStatus === 'all' || entry.status === activeStatus) && matchesQuery(query, entry.method, entry.url, entry.status, entry.source, entry.request?.responseStatus, entry.request?.route, entry.routerRequest?.route))\n .sort((left, right) => (right.startedAt ?? 0) - (left.startedAt ?? 0))\n const selectedKey = (selection?.type === 'request' ? `http:${selection.id}` : networkSelection?.value) ?? entries[0]?.key\n const selected = entries.find(entry => entry.key === selectedKey) ?? entries[0]\n\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-network-toolbar')\n appendText(controls, 'Search', 'vobs-devtools-network-toolbar__label')\n const search = createElement('input')\n setAttribute(search, 'class', 'vobs-devtools-search vobs-devtools-network-toolbar__search')\n setAttribute(search, 'type', 'search')\n setAttribute(search, 'placeholder', 'Search requests')\n setProperty(search, 'value', query)\n // Commit on Enter/blur so the inspector does not replace the focused input\n // after every keystroke while the reactive panel refreshes.\n search.addEventListener('change', () => { if (queryState) queryState.value = (search as HTMLInputElement).value })\n insertBefore(controls, search, null)\n insertBefore(controls, createNetworkFilterSelect('Source', activeSource, [\n ['all', 'All sources'], ['http', 'HTTP'], ['router', 'Router'], ['ssr', 'SSR']\n ], value => { if (sourceFilter) sourceFilter.value = value as NetworkSourceFilter }), null)\n insertBefore(controls, createNetworkFilterSelect('Status', activeStatus, [\n ['all', 'All statuses'], ['loading', 'Loading'], ['success', 'Success'], ['error', 'Error'], ['cancelled', 'Cancelled']\n ], value => { if (statusFilter) statusFilter.value = value as NetworkStatusFilter }), null)\n if (api) insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n children: () => 'Clear',\n onClick: () => api.clearNetworkRequests()\n }), null)\n if (testerOpen && testerDraft) insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'settings' }),\n 'aria-label': 'Open Request Tester',\n title: 'Open Request Tester',\n onClick: () => {\n if (!testerDraft.url) testerDraft.url = selected?.url ?? currentRoute ?? ''\n testerOpen.value = true\n testerRevision && (testerRevision.value++)\n }\n }), null)\n insertBefore(root, controls, null)\n\n const panes = createElement('div')\n setAttribute(panes, 'class', 'vobs-devtools-network-panes')\n const listPane = createElement('section')\n setAttribute(listPane, 'class', 'vobs-devtools-network-list-pane')\n setAttribute(listPane, 'aria-label', 'Network requests')\n const requestList = createElement('div')\n setAttribute(requestList, 'class', 'vobs-devtools-network-request-list')\n setAttribute(requestList, 'role', 'list')\n for (const entry of entries) {\n const row = createElement('button')\n const isSelected = selectedKey === entry.key\n setAttribute(row, 'class', `vobs-devtools-network-request${isSelected ? ' is-selected' : ''}`)\n setAttribute(row, 'type', 'button')\n setAttribute(row, 'role', 'listitem')\n setAttribute(row, 'aria-pressed', isSelected ? 'true' : 'false')\n row.addEventListener('click', () => {\n networkSelection && (networkSelection.value = entry.key)\n if (entry.request) onFocus('network', { type: 'request', id: entry.request.id })\n if (detailTab) detailTab.value = 'overview'\n })\n const pathLine = createElement('span')\n setAttribute(pathLine, 'class', 'vobs-devtools-network-request__path-line')\n appendText(pathLine, entry.url, 'vobs-devtools-network-request__url')\n if (entry.request?.test) insertBefore(pathLine, createComponent(Tag, { tone: 'warning', children: () => 'TEST' }), null)\n insertBefore(pathLine, createComponent(Tag, { tone: entry.status === 'success' ? 'success' : entry.status === 'error' || entry.status === 'cancelled' ? 'danger' : 'warning', children: () => entry.request?.responseStatus ? `${entry.status} ${entry.request.responseStatus}` : entry.status }), null)\n insertBefore(row, pathLine, null)\n const meta = createElement('span')\n setAttribute(meta, 'class', 'vobs-devtools-network-request__meta')\n appendText(meta, entry.duration === undefined ? 'Running' : `${entry.duration.toFixed(0)} ms`)\n appendText(meta, `ID ${entry.request?.id ?? entry.routerRequest?.id}`, 'vobs-devtools-code')\n insertBefore(row, meta, null)\n insertBefore(requestList, row, null)\n }\n insertBefore(listPane, requestList, null)\n if (entries.length === 0) appendMuted(listPane, query || activeSource !== 'all' || activeStatus !== 'all' ? 'No requests match the current filters.' : 'No requests recorded.')\n insertBefore(panes, listPane, null)\n const detailPane = createElement('section')\n setAttribute(detailPane, 'class', 'vobs-devtools-network-detail-pane')\n setAttribute(detailPane, 'aria-label', 'Selected network request')\n if (selected) insertBefore(detailPane, renderNetworkDetail(selected, detailTab?.value ?? 'overview', tab => { if (detailTab) detailTab.value = tab }), null)\n else appendMuted(detailPane, 'Select a request to inspect its details.')\n insertBefore(panes, detailPane, null)\n insertBefore(root, panes, null)\n if (testerOpen?.value && testerDraft) insertBefore(root, renderRequestTester(testerDraft, run => {\n if (testerRun) testerRun.value = run\n testerRevision && (testerRevision.value++)\n }, testerRun?.value ?? { status: 'idle' }, testerTab?.value ?? 'params', selected, http, () => { testerOpen.value = false }, tab => { if (testerTab) testerTab.value = tab; testerRevision && (testerRevision.value++) }), null)\n return root\n}\n\nfunction createNetworkFilterSelect(label: string, value: string, options: readonly (readonly [string, string])[], onChange: (value: string) => void): VobsNode {\n const select = createElement('select')\n setAttribute(select, 'class', 'vobs-devtools-network-toolbar__select')\n setAttribute(select, 'aria-label', label)\n setProperty(select, 'value', value)\n for (const [optionValue, optionLabel] of options) {\n const option = createElement('option')\n setAttribute(option, 'value', optionValue)\n insertBefore(option, createText(optionLabel), null)\n insertBefore(select, option, null)\n }\n setProperty(select, 'value', value)\n select.addEventListener('change', event => onChange((event.target as HTMLSelectElement).value))\n return select\n}\n\nfunction renderRequestTester(\n draft: RequestTesterDraft,\n onRunChange: (run: RequestTesterRun) => void,\n run: RequestTesterRun,\n activeTab: RequestTesterTab,\n selected: NetworkEntry | undefined,\n http: HTTPClient | null | undefined,\n onClose: () => void,\n onTabChange: (tab: RequestTesterTab) => void\n): VobsNode {\n const drawer = createElement('aside')\n setAttribute(drawer, 'class', 'vobs-devtools-request-tester')\n setAttribute(drawer, 'aria-label', 'Request Tester')\n const heading = createElement('div')\n setAttribute(heading, 'class', 'vobs-devtools-request-tester__heading')\n appendText(heading, 'Request Tester', 'vobs-devtools-request-tester__title')\n const headingActions = createElement('div')\n setAttribute(headingActions, 'class', 'vobs-devtools-request-tester__heading-actions')\n insertBefore(headingActions, createComponent(Button, {\n variant: 'ghost',\n disabled: !selected,\n children: () => 'Use selected request',\n onClick: () => {\n if (!selected) return\n applyNetworkEntryToTesterDraft(selected, draft)\n onRunChange({ status: 'idle' })\n }\n }), null)\n insertBefore(headingActions, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'x' }),\n 'aria-label': 'Close Request Tester',\n title: 'Close Request Tester',\n onClick: onClose\n }), null)\n insertBefore(heading, headingActions, null)\n insertBefore(drawer, heading, null)\n\n const requestLine = createElement('div')\n setAttribute(requestLine, 'class', 'vobs-devtools-request-tester__request-line')\n insertBefore(requestLine, createTesterInput('url', draft.url, value => { draft.url = value }), null)\n insertBefore(requestLine, createTesterMethodSelect(draft.method, value => { draft.method = value; onRunChange({ status: run.status, message: run.message }) }), null)\n insertBefore(requestLine, createComponent(Button, {\n variant: 'brand', iconOnly: true, icon: createComponent(Icon, { name: 'play' }),\n loading: run.status === 'running', disabled: run.status === 'running',\n 'aria-label': run.status === 'running' ? 'Running request' : 'Start request',\n title: run.status === 'running' ? 'Running request' : 'Start request',\n onClick: () => { void executeRequestTester(http, draft, onRunChange) }\n }), null)\n insertBefore(drawer, requestLine, null)\n const tabs = createElement('div')\n setAttribute(tabs, 'class', 'vobs-devtools-request-tester__tabs')\n const tabLabels: readonly [RequestTesterTab, string][] = [['params', 'Params'], ['headers', 'Headers'], ['body', 'Body']]\n for (const [tab, label] of tabLabels) {\n const button = createElement('button')\n setAttribute(button, 'class', `vobs-devtools-request-tester__tab${activeTab === tab ? ' is-active' : ''}`)\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'aria-selected', activeTab === tab ? 'true' : 'false')\n appendText(button, label)\n button.addEventListener('click', () => onTabChange(tab))\n insertBefore(tabs, button, null)\n }\n insertBefore(drawer, tabs, null)\n if (activeTab === 'params') insertBefore(drawer, renderTesterParamGroup('Params', draft.params, 'parameter', onRunChange), null)\n if (activeTab === 'headers') insertBefore(drawer, renderTesterParamGroup('Headers', draft.headers, 'header', onRunChange), null)\n if (activeTab === 'body') {\n const bodyLabel = createElement('label')\n setAttribute(bodyLabel, 'class', 'vobs-devtools-request-tester__field')\n appendText(bodyLabel, 'Body')\n const body = createElement('textarea')\n setAttribute(body, 'class', 'vobs-devtools-request-tester__textarea')\n setAttribute(body, 'rows', '8')\n setAttribute(body, 'placeholder', '{ \"key\": \"value\" }')\n setProperty(body, 'value', draft.body)\n body.addEventListener('change', () => { draft.body = (body as HTMLTextAreaElement).value })\n insertBefore(bodyLabel, body, null)\n insertBefore(drawer, bodyLabel, null)\n }\n\n const footer = createElement('div')\n setAttribute(footer, 'class', 'vobs-devtools-request-tester__footer')\n if (run.message) appendText(footer, run.message, `vobs-devtools-request-tester__status${run.status === 'error' ? ' is-error' : run.status === 'success' ? ' is-success' : ''}`)\n insertBefore(drawer, footer, null)\n return drawer\n}\n\nfunction applyNetworkEntryToTesterDraft(entry: NetworkEntry, draft: RequestTesterDraft): void {\n const request = entry.request\n const rawUrl = request?.url ?? entry.url\n let url = rawUrl\n let params: RequestTesterParam[] = []\n try {\n const parsed = new URL(rawUrl, typeof window !== 'undefined' ? window.location.href : 'http://localhost/')\n url = `${parsed.origin === 'http://localhost' && rawUrl.startsWith('/') ? '' : parsed.origin}${parsed.pathname}${parsed.hash}`\n params = [...parsed.searchParams.entries()].map(([key, value]) => ({ key, value }))\n } catch {\n // Keep non-URL request keys intact, such as router loader identifiers.\n }\n draft.url = url\n draft.method = isHTTPMethod(request?.method ?? entry.method) ? (request?.method ?? entry.method) as HTTPMethod : 'GET'\n draft.params = params.length > 0 ? params : [{ key: '', value: '' }]\n draft.headers = request ? Object.entries(request.headers).map(([key, value]) => ({ key, value })) : [{ key: '', value: '' }]\n const body = request?.requestBody\n draft.body = body === undefined || body === null || body === '' ? '' : typeof body === 'string' ? body : JSON.stringify(body, null, 2)\n}\n\nfunction isHTTPMethod(value: string): value is HTTPMethod {\n return ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT'].includes(value)\n}\n\nfunction createTesterInput(name: string, value: string, onChange: (value: string) => void): VobsNode {\n const input = createElement('input')\n setAttribute(input, 'class', 'vobs-devtools-request-tester__input')\n setAttribute(input, 'name', name)\n setAttribute(input, 'type', 'text')\n setProperty(input, 'value', value)\n input.addEventListener('change', () => onChange((input as HTMLInputElement).value))\n return input\n}\n\nfunction createTesterMethodSelect(value: HTTPMethod, onChange: (value: HTTPMethod) => void): VobsNode {\n const select = createElement('select')\n setAttribute(select, 'class', 'vobs-devtools-request-tester__select')\n for (const method of ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as HTTPMethod[]) {\n const option = createElement('option')\n setAttribute(option, 'value', method)\n if (method === value) setAttribute(option, 'selected', '')\n insertBefore(option, createText(method), null)\n insertBefore(select, option, null)\n }\n select.addEventListener('change', () => onChange((select as HTMLSelectElement).value as HTTPMethod))\n return select\n}\n\nfunction renderTesterParamGroup(label: string, params: RequestTesterParam[], singular: string, onChange: (run: RequestTesterRun) => void): VobsNode {\n const group = createElement('section')\n setAttribute(group, 'class', 'vobs-devtools-request-tester__group')\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-request-tester__group-title')\n appendText(title, label)\n const add = createElement('button')\n setAttribute(add, 'class', 'vobs-devtools-request-tester__add')\n setAttribute(add, 'type', 'button')\n appendText(add, '+')\n setAttribute(add, 'aria-label', `Add ${label}`)\n setAttribute(add, 'title', `Add ${label}`)\n add.addEventListener('click', () => { params.push({ key: '', value: '' }); onChange({ status: 'idle' }) })\n insertBefore(title, add, null)\n insertBefore(group, title, null)\n for (let index = 0; index < params.length; index++) {\n const param = params[index]\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-request-tester__param')\n insertBefore(row, createTesterInput(`${singular}-key-${index}`, param.key, value => { param.key = value }), null)\n insertBefore(row, createTesterInput(`${singular}-value-${index}`, param.value, value => { param.value = value }), null)\n const remove = createElement('button')\n setAttribute(remove, 'class', 'vobs-devtools-request-tester__remove')\n setAttribute(remove, 'type', 'button')\n setAttribute(remove, 'aria-label', `Remove ${label} row ${index + 1}`)\n setAttribute(remove, 'title', `Remove ${label} row ${index + 1}`)\n insertBefore(remove, createComponent(Icon, { name: 'trash' }), null)\n remove.addEventListener('click', () => { params.splice(index, 1); if (params.length === 0) params.push({ key: '', value: '' }); onChange({ status: 'idle' }) })\n insertBefore(row, remove, null)\n insertBefore(group, row, null)\n }\n return group\n}\n\nasync function executeRequestTester(http: HTTPClient | null | undefined, draft: RequestTesterDraft, onRunChange: (run: RequestTesterRun) => void): Promise<void> {\n if (!http) {\n onRunChange({ status: 'error', message: 'HTTP client is unavailable.' })\n return\n }\n const url = draft.url.trim()\n if (!url) {\n onRunChange({ status: 'error', message: 'Enter a request URL.' })\n return\n }\n const params: Record<string, string> = {}\n for (const param of draft.params) if (param.key.trim()) params[param.key.trim()] = param.value\n const headers: Record<string, string> = {}\n for (const header of draft.headers) if (header.key.trim()) headers[header.key.trim()] = header.value\n let body: unknown\n if (!['GET', 'HEAD', 'DELETE'].includes(draft.method) && draft.body.trim()) {\n try { body = JSON.parse(draft.body) } catch {\n onRunChange({ status: 'error', message: 'Body must be valid JSON.' })\n return\n }\n }\n onRunChange({ status: 'running', message: undefined })\n try {\n await http.request({\n url,\n method: draft.method,\n params: Object.keys(params).length > 0 ? params : undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body,\n debugContext: { route: url, test: true }\n })\n onRunChange({ status: 'success', message: 'Request completed.' })\n } catch (error) {\n onRunChange({ status: 'error', message: error instanceof Error ? error.message : String(error) })\n }\n}\n\nfunction renderNetworkDetail(entry: NetworkEntry, activeTab: NetworkDetailTab, onTabChange: (tab: NetworkDetailTab) => void): VobsNode {\n const root = createElement('section')\n setAttribute(root, 'class', 'vobs-devtools-network-detail')\n const request = entry.request\n const routerRequest = entry.routerRequest\n const heading = createElement('div')\n setAttribute(heading, 'class', 'vobs-devtools-network-detail__heading')\n appendText(heading, `${entry.method} ${entry.url}`, 'vobs-devtools-network-detail__title')\n if (request?.test) insertBefore(heading, createComponent(Tag, { tone: 'warning', children: () => 'TEST' }), null)\n insertBefore(heading, createComponent(Tag, { tone: entry.status === 'success' ? 'success' : entry.status === 'error' || entry.status === 'cancelled' ? 'danger' : 'warning', children: () => request?.responseStatus ? `${entry.status} ${request.responseStatus}` : entry.status }), null)\n if (entry.duration !== undefined) appendText(heading, `${entry.duration.toFixed(0)} ms`, 'vobs-devtools-network-detail__duration')\n insertBefore(root, heading, null)\n const tabs = createElement('div')\n setAttribute(tabs, 'class', 'vobs-devtools-network-detail__tabs')\n const tabLabels: readonly [NetworkDetailTab, string][] = [['overview', 'Overview'], ['headers', 'Headers'], ['payload', 'Payload'], ['response', 'Response'], ['timing', 'Timing'], ['context', 'Context']]\n for (const [tab, label] of tabLabels) {\n const button = createElement('button')\n setAttribute(button, 'type', 'button')\n setAttribute(button, 'class', `vobs-devtools-network-detail__tab${activeTab === tab ? ' is-active' : ''}`)\n setAttribute(button, 'aria-selected', activeTab === tab ? 'true' : 'false')\n appendText(button, label)\n button.addEventListener('click', () => onTabChange(tab))\n insertBefore(tabs, button, null)\n }\n insertBefore(root, tabs, null)\n const content = createElement('div')\n setAttribute(content, 'class', 'vobs-devtools-network-detail__content')\n if (activeTab === 'overview') {\n appendNetworkField(content, 'Source', entry.source.toUpperCase())\n appendNetworkField(content, 'Method / Type', entry.method)\n appendNetworkField(content, 'Request key', entry.url, 'code')\n appendNetworkField(content, 'Status', entry.status)\n if (request?.error || routerRequest?.error) appendText(content, request ? `${request.error?.name}: ${request.error?.message}` : routerRequest!.error!, 'vobs-devtools-error')\n } else if (activeTab === 'headers') {\n if (request && Object.keys(request.headers).length > 0) insertBefore(content, renderValueTree('Headers', request.headers, false), null)\n else appendMuted(content, 'No captured headers for this request.')\n } else if (activeTab === 'payload') {\n const payload = request?.requestBody\n if (payload !== undefined) insertBefore(content, renderValueTree('Request body', payload, false), null)\n else appendMuted(content, 'No request payload captured.')\n } else if (activeTab === 'response') {\n const response = request?.responseBody ?? routerRequest?.result\n if (response !== undefined) insertBefore(content, renderValueTree('Response', response, false), null)\n else appendMuted(content, routerRequest?.error ?? 'No response body captured.')\n } else if (activeTab === 'timing') {\n if (entry.startedAt !== undefined) appendNetworkField(content, 'Started at', formatNetworkTimestamp(entry.startedAt))\n if (entry.endedAt !== undefined) appendNetworkField(content, 'Ended at', formatNetworkTimestamp(entry.endedAt))\n appendNetworkField(content, 'Duration', entry.duration === undefined ? 'Running' : `${entry.duration.toFixed(2)} ms`)\n if (request) appendNetworkField(content, 'Attempts', `${request.attempt + 1} (${request.retries} retries)`)\n } else {\n appendNetworkField(content, 'Environment', request?.environment ?? routerRequest?.environment ?? 'client')\n if (request?.route ?? routerRequest?.route) appendNetworkField(content, 'Route', request?.route ?? routerRequest?.route ?? '', 'code')\n if (request?.navigationId ?? routerRequest?.navigationId) appendNetworkField(content, 'Navigation ID', String(request?.navigationId ?? routerRequest?.navigationId), 'code')\n if (request?.dataRequestId !== undefined) appendNetworkField(content, 'Data request ID', String(request.dataRequestId), 'code')\n if (routerRequest?.trigger) appendNetworkField(content, 'Trigger', routerRequest.trigger)\n appendNetworkField(content, 'Request ID', String(request?.id ?? routerRequest?.id), 'code')\n }\n insertBefore(root, content, null)\n return root\n}\n\nfunction appendNetworkField(parent: Element, label: string, value: string, valueKind?: 'code' | 'muted'): void {\n const field = createElement('div')\n setAttribute(field, 'class', 'vobs-devtools-network-detail__field')\n appendText(field, label, 'vobs-devtools-network-detail__label')\n appendText(field, value, `vobs-devtools-network-detail__value${valueKind ? ` vobs-devtools-${valueKind}` : ''}`)\n insertBefore(parent, field, null)\n}\n\nfunction formatNetworkTimestamp(value: number): string {\n const epoch = value > 100_000_000_000 ? value : (typeof performance !== 'undefined' ? performance.timeOrigin + value : Date.now())\n return new Date(epoch).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n}\n\nfunction matchesQuery(query: string, ...values: readonly unknown[]): boolean {\n const needle = query.trim().toLowerCase()\n if (!needle) return true\n return values.some(value => String(value ?? '').toLowerCase().includes(needle))\n}\n\nfunction filterErrors(errors: readonly DevToolsErrorTrace[], query: string): readonly DevToolsErrorTrace[] {\n return errors.filter(error => matchesQuery(query, error.phase, error.phases, error.origin, error.code, error.name, error.message, error.component, error.route, error.id, error.effectId, error.requestId))\n}\n\nfunction filterComponentTree(nodes: readonly ComponentDebugNode[], query: string): readonly ComponentDebugNode[] {\n if (!query.trim()) return nodes\n return nodes.flatMap(node => {\n const children = filterComponentTree(node.children, query)\n if (!matchesQuery(query, node.name, node.id) && children.length === 0) return []\n return [{ ...node, children }]\n })\n}\n\nfunction renderErrors(\n errors: readonly DevToolsErrorTrace[],\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-error-list')\n for (const error of [...errors].reverse()) {\n const row = createElement('details')\n const selected = selection?.type === 'error' && selection.id === error.id\n setAttribute(row, 'class', `vobs-devtools-list__row vobs-devtools-error-item${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n row.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('errors', { type: 'error', id: error.id })\n })\n const summary = createElement('summary')\n appendText(summary, formatErrorSummary(error), 'vobs-devtools-list__name')\n appendText(summary, error.message, 'vobs-devtools-error-item__message')\n insertBefore(summary, createComponent(Tag, { tone: error.origin === 'framework' ? 'danger' : error.origin === 'usage' ? 'warning' : 'neutral-strong', children: () => error.origin }), null)\n insertBefore(summary, createComponent(Tag, { tone: 'danger', children: () => `${error.count}×` }), null)\n insertBefore(row, summary, null)\n const details = createElement('div')\n setAttribute(details, 'class', 'vobs-devtools-error-item__details')\n appendErrorField(details, 'Phase', error.phases.length > 1 ? error.phases.join(' / ') : error.phase)\n appendErrorField(details, 'Occurred', `first ${new Date(error.firstOccurredAt).toLocaleString()} · last ${new Date(error.lastOccurredAt).toLocaleString()}`, 'muted')\n if (error.code) appendErrorField(details, 'Code', error.code, 'code')\n if (error.component) appendErrorField(details, 'Component', displayErrorComponent(error.component))\n if (error.ownerId) appendErrorField(details, 'Owner', error.ownerId, 'code')\n appendErrorField(details, 'Status', `${error.handled ? 'handled' : 'propagated'} · ${error.recovery}`, 'muted')\n if (error.hint) appendErrorField(details, 'Hint', error.hint, 'muted', true)\n if (error.cause) appendErrorField(details, 'Cause', error.cause, 'muted', true)\n if (error.fix) appendErrorField(details, 'Fix', error.fix, 'muted', true)\n if (error.source) appendErrorField(details, 'Source', formatDebugLocation(error.source), 'code', true)\n if (error.updateId) appendErrorLinkField(details, 'Update', error.updateId, 'updates', { type: 'update', id: error.updateId }, onFocus)\n if (error.effectId) appendErrorField(details, 'Effect', error.effectId, 'code')\n if (error.requestId !== undefined) appendErrorLinkField(details, 'Request', String(error.requestId), 'network', { type: 'request', id: error.requestId }, onFocus)\n if (error.navigationId !== undefined) appendErrorField(details, 'Navigation', String(error.navigationId), 'code')\n if (error.route) appendErrorField(details, 'Route', error.route, 'code')\n if (error.hydration) {\n appendErrorField(details, 'Expected', error.hydration.expected, 'code', true)\n appendErrorField(details, 'Actual', error.hydration.actual, 'code', true)\n appendErrorField(details, 'DOM path', error.hydration.path, 'code')\n }\n if (error.stack) appendErrorStack(details, error.stack, error.name, error.message)\n insertBefore(row, details, null)\n insertBefore(root, row, null)\n }\n if (errors.length === 0) appendMuted(root, 'No errors recorded.')\n return root\n}\n\nfunction appendContextLink(\n parent: Element,\n label: string,\n section: DevToolsSection,\n selection: DevToolsSelection,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n const button = createElement('button')\n setAttribute(button, 'class', 'vobs-devtools-link')\n setAttribute(button, 'type', 'button')\n button.addEventListener('click', event => {\n event.stopPropagation()\n onFocus(section, selection)\n })\n insertBefore(button, createText(label), null)\n insertBefore(parent, button, null)\n}\n\nfunction appendErrorField(parent: Element, label: string, value: string, valueKind?: 'code' | 'muted', wide = false): void {\n const field = createElement('div')\n setAttribute(field, 'class', `vobs-devtools-error-item__field${wide ? ' vobs-devtools-error-item__field--wide' : ''}`)\n appendText(field, label, 'vobs-devtools-error-item__label')\n appendText(field, value, `vobs-devtools-error-item__value${valueKind ? ` vobs-devtools-${valueKind}` : ''}`)\n insertBefore(parent, field, null)\n}\n\nfunction appendErrorLinkField(\n parent: Element,\n label: string,\n value: string,\n section: DevToolsSection,\n selection: DevToolsSelection,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): void {\n const field = createElement('div')\n setAttribute(field, 'class', 'vobs-devtools-error-item__field')\n appendText(field, label, 'vobs-devtools-error-item__label')\n const valueNode = createElement('span')\n setAttribute(valueNode, 'class', 'vobs-devtools-error-item__value')\n appendContextLink(valueNode, value, section, selection, onFocus)\n insertBefore(field, valueNode, null)\n insertBefore(parent, field, null)\n}\n\nfunction appendErrorStack(parent: Element, value: string, name: string, message: string): void {\n const stack = createElement('div')\n setAttribute(stack, 'class', 'vobs-devtools-error-item__stack')\n appendText(stack, 'Stack trace', 'vobs-devtools-error-item__label')\n const code = createElement('pre')\n setAttribute(code, 'class', 'vobs-devtools-error-item__stack-code vobs-devtools-code')\n insertBefore(code, createText(formatDebugStack(value, name, message)), null)\n insertBefore(stack, code, null)\n insertBefore(parent, stack, null)\n}\n\nfunction formatErrorSummary(error: DevToolsErrorTrace): string {\n const phase = error.phases.length > 1 ? error.phases.join(' / ') : error.phase\n return error.name === 'Error' ? phase : `${phase} · ${error.name}`\n}\n\nfunction lifecycleSelection(event: LifecycleEvent): DevToolsSelection | null {\n if (event.type.startsWith('owner-')) return { type: 'component', id: event.targetId }\n if (event.type.startsWith('signal-') || event.type.startsWith('memo-')) return { type: 'signal', id: event.targetId }\n if (event.type.startsWith('effect-')) return { type: 'effect', id: event.targetId }\n return null\n}\n\nfunction displaySignalName(signal: SignalDebugInfo): string {\n if (!signal.name.startsWith('signal-')) return stripDebugLocation(signal.name)\n const component = formatDebugLocation(signal.component)\n return component === 'unknown' ? 'runtime state' : `${debugComponentName(component)} state`\n}\n\nfunction displayDebugName(name: string): string {\n return name.startsWith('signal-') ? 'runtime state' : stripDebugLocation(name)\n}\n\nfunction debugComponentName(value: string): string {\n const separator = value.indexOf(' (')\n return separator > 0 ? value.slice(0, separator) : value\n}\n\nfunction displayErrorComponent(value: string): string {\n return debugComponentName(formatDebugLocation(value))\n}\n\nfunction appendText(parent: Element, value: string, className?: string): void {\n const node = createElement('span')\n if (className) setAttribute(node, 'class', className)\n insertBefore(node, createText(value), null)\n insertBefore(parent, node, null)\n}\n\nfunction formatDebugLocation(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex <= 0 && !lower.startsWith('src/')) return normalized\n const sourcePath = normalized.slice(sourceIndex)\n const openParen = normalized.lastIndexOf('(', sourceIndex)\n return openParen >= 0\n ? `${normalized.slice(0, openParen + 1)}${sourcePath}`\n : sourcePath\n}\n\nfunction formatDebugStack(value: string, name: string, message: string): string {\n const lines = value\n .split(/\\r?\\n/)\n .map(formatDebugStackLine)\n const first = lines[0]?.trim()\n const header = `${name}: ${message}`\n if (lines.length > 1 && (first === header || first?.startsWith(`${header} `))) return lines.slice(1).join('\\n')\n return lines.join('\\n')\n}\n\nfunction formatDebugStackLine(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex < 0) return normalized\n if (sourceIndex === 0) return normalized\n\n const prefixBeforeLocation = normalized.slice(0, sourceIndex)\n const openParen = prefixBeforeLocation.lastIndexOf('(')\n const openBracket = prefixBeforeLocation.lastIndexOf('[')\n const opening = Math.max(openParen, openBracket)\n if (opening >= 0) return `${normalized.slice(0, opening + 1)}${normalized.slice(sourceIndex)}`\n\n const at = prefixBeforeLocation.lastIndexOf('at ')\n return at >= 0\n ? `${normalized.slice(0, at + 3)}${normalized.slice(sourceIndex)}`\n : normalized.slice(sourceIndex)\n}\n\nfunction formatDebugSource(value: string): string {\n const location = formatDebugLocation(value)\n const openParen = location.indexOf('(')\n if (openParen < 0) return location\n const closeParen = location.indexOf(')', openParen)\n return closeParen < 0 ? location : location.slice(openParen + 1, closeParen)\n}\n\nfunction stripDebugLocation(value: string): string {\n const normalized = value.replaceAll('\\\\', '/')\n const lower = normalized.toLowerCase()\n const sourceIndex = lower.startsWith('src/') ? 0 : lower.indexOf('/src/') + 1\n if (sourceIndex <= 0 && !lower.startsWith('src/')) return normalized\n const openParen = normalized.lastIndexOf('(', sourceIndex)\n if (openParen < 0) return normalized\n const closeParen = normalized.indexOf(')', sourceIndex)\n if (closeParen < 0) return normalized\n return `${normalized.slice(0, openParen)}${normalized.slice(closeParen + 1)}`.trim()\n}\n\nfunction renderComponentSummary(\n node: ComponentDebugNode,\n snapshot: DevToolsSnapshot,\n selection: DevToolsSelection | null,\n onFocus: (section: DevToolsSection, selection: DevToolsSelection) => void\n): VobsNode {\n const row = createElement('details')\n const selected = selection?.type === 'component' && selection.id === node.id\n setAttribute(row, 'class', `vobs-devtools-list__row vobs-devtools-component-row${selected ? ' is-selected' : ''}`)\n if (selected) setProperty(row, 'open', true)\n row.addEventListener('click', event => {\n event.stopPropagation()\n onFocus('components', { type: 'component', id: node.id })\n })\n\n const summary = createElement('summary')\n appendText(summary, formatDebugLocation(node.name), 'vobs-devtools-list__name')\n insertBefore(summary, createComponent(Tag, { tone: node.mounted ? 'success' : 'neutral-strong', children: () => `${node.signals.length} signals` }), null)\n insertBefore(summary, createComponent(Tag, { tone: 'neutral-strong', children: () => `${node.effects.length} effects` }), null)\n appendText(summary, `${node.recentUpdates.length} updates · ${node.domUpdates} DOM`, 'vobs-devtools-muted')\n insertBefore(row, summary, null)\n\n appendText(row, `Component ID: ${node.id}`, 'vobs-devtools-code')\n appendText(row, 'Recent updates:', 'vobs-devtools-code')\n appendUpdateLinks(row, node.recentUpdates, onFocus)\n if (node.domUpdates > 0) {\n appendText(row, 'DOM results:', 'vobs-devtools-code')\n for (const updateId of node.recentUpdates) {\n const update = snapshot.updates.find(item => item.id === updateId)\n for (const domUpdate of update?.domUpdates ?? []) {\n const operation = domUpdate.key ? `${domUpdate.operation}.${domUpdate.key}` : domUpdate.operation\n appendText(row, `${operation} ${domUpdate.target}`, 'vobs-devtools-muted')\n }\n }\n }\n if (node.children.length > 0) {\n appendText(row, 'Children:', 'vobs-devtools-code')\n for (const child of node.children) insertBefore(row, renderComponentSummary(child, snapshot, selection, onFocus), null)\n }\n return row\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nfunction renderValuePair(label: string, previousValue: unknown, nextValue: unknown): VobsNode {\n const root = createElement('div')\n setAttribute(root, 'class', `vobs-devtools-value-pair${label ? '' : ' vobs-devtools-value-pair--compact'}`)\n const distinctMode = state(Boolean(label))\n root.addEventListener('click', event => event.stopPropagation())\n root.addEventListener('pointerdown', event => event.stopPropagation())\n if (label) {\n const title = createElement('div')\n setAttribute(title, 'class', 'vobs-devtools-value-pair__title')\n appendText(title, label)\n const toggle = createElement('button')\n setAttribute(toggle, 'class', 'vobs-devtools-distinct-toggle is-active')\n setAttribute(toggle, 'type', 'button')\n setAttribute(toggle, 'aria-pressed', 'true')\n setAttribute(toggle, 'title', 'Show only values that changed')\n insertBefore(toggle, createText('distinct'), null)\n toggle.addEventListener('click', event => {\n event.stopPropagation()\n const enabled = !distinctMode.value\n distinctMode.value = enabled\n setAttribute(toggle, 'class', `vobs-devtools-distinct-toggle${enabled ? ' is-active' : ''}`)\n setAttribute(toggle, 'aria-pressed', enabled ? 'true' : 'false')\n setAttribute(toggle, 'title', enabled ? 'Show only values that changed' : 'Show complete values')\n })\n insertBefore(title, toggle, null)\n insertBefore(root, title, null)\n }\n insertDynamic(root, null, () => {\n const distinct = distinctMode.value\n const difference = distinct ? createDistinctValuePair(previousValue, nextValue) : null\n const before = difference?.before ?? { value: previousValue, hasDifference: true }\n const after = difference?.after ?? { value: nextValue, hasDifference: true }\n return createFragment((parent, anchor) => {\n insertBefore(parent, renderValueTree('Before', before.value, Boolean(label), distinct && !before.hasDifference ? 'No differing fields' : undefined), anchor)\n insertBefore(parent, renderValueTree('After', after.value, Boolean(label), distinct && !after.hasDifference ? 'No differing fields' : undefined), anchor)\n })\n })\n return root\n}\n\nfunction renderValueTree(label: string, value: unknown, expanded: boolean, emptyMessage?: string): VobsNode {\n const root = createElement('section')\n setAttribute(root, 'class', 'vobs-devtools-value-inspector')\n // Value-tree interactions must not select and rerender their enclosing update row.\n // Otherwise native <details> toggles are immediately replaced by a fresh closed tree.\n root.addEventListener('click', event => event.stopPropagation())\n root.addEventListener('pointerdown', event => event.stopPropagation())\n if (hasExpandableEntries(value)) {\n const controls = createElement('div')\n setAttribute(controls, 'class', 'vobs-devtools-value-inspector__controls')\n insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'plus' }),\n 'aria-label': `Expand all ${label} values`,\n title: `Expand all ${label} values`,\n onClick: event => {\n event.stopPropagation()\n for (const node of root.querySelectorAll('.vobs-devtools-value-tree')) setAttribute(node, 'data-expanded', 'true')\n }\n }), null)\n insertBefore(controls, createComponent(Button, {\n variant: 'ghost',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'minus' }),\n 'aria-label': `Collapse all ${label} values`,\n title: `Collapse all ${label} values`,\n onClick: event => {\n event.stopPropagation()\n for (const node of root.querySelectorAll('.vobs-devtools-value-tree')) setAttribute(node, 'data-expanded', 'false')\n }\n }), null)\n insertBefore(root, controls, null)\n }\n const tree = createElement('div')\n setAttribute(tree, 'class', 'vobs-devtools-value-tree-root')\n setAttribute(tree, 'role', 'tree')\n setAttribute(tree, 'aria-label', `${label} value`)\n if (emptyMessage) appendText(tree, emptyMessage, 'vobs-devtools-value-tree__empty')\n else insertBefore(tree, renderInspectableValue(label, value, expanded), null)\n insertBefore(root, tree, null)\n return root\n}\n\ninterface DistinctValue {\n readonly value: unknown\n readonly hasDifference: boolean\n}\n\ninterface DistinctValuePair {\n readonly before: DistinctValue\n readonly after: DistinctValue\n}\n\nconst MISSING_VALUE = Symbol('missing diagnostic value')\n\nfunction createDistinctValuePair(before: unknown, after: unknown): DistinctValuePair {\n return projectDistinctValues(before, after)\n}\n\nfunction projectDistinctValues(before: unknown, after: unknown): DistinctValuePair {\n if (areValuesEqual(before, after)) {\n return {\n before: { value: before, hasDifference: false },\n after: { value: after, hasDifference: false }\n }\n }\n\n if (!isExpandableValue(before) || !isExpandableValue(after)) {\n return {\n before: { value: before, hasDifference: true },\n after: { value: after, hasDifference: true }\n }\n }\n\n if (Array.isArray(before) && Array.isArray(after)) {\n const beforeProjection: unknown[] = new Array(before.length)\n const afterProjection: unknown[] = new Array(after.length)\n for (let index = 0; index < Math.max(before.length, after.length); index++) {\n const child = projectDistinctValues(\n index in before ? before[index] : MISSING_VALUE,\n index in after ? after[index] : MISSING_VALUE\n )\n if (child.before.value !== MISSING_VALUE) beforeProjection[index] = child.before.value\n if (child.after.value !== MISSING_VALUE) afterProjection[index] = child.after.value\n }\n return {\n before: { value: beforeProjection, hasDifference: valueEntries(beforeProjection).length > 0 },\n after: { value: afterProjection, hasDifference: valueEntries(afterProjection).length > 0 }\n }\n }\n\n if (!Array.isArray(before) && !Array.isArray(after)) {\n const beforeProjection: Record<string, unknown> = {}\n const afterProjection: Record<string, unknown> = {}\n const beforeObject = before as Record<string, unknown>\n const afterObject = after as Record<string, unknown>\n const keys = new Set([...Object.keys(beforeObject), ...Object.keys(afterObject)])\n for (const key of keys) {\n const child = projectDistinctValues(\n Object.prototype.hasOwnProperty.call(beforeObject, key) ? beforeObject[key] : MISSING_VALUE,\n Object.prototype.hasOwnProperty.call(afterObject, key) ? afterObject[key] : MISSING_VALUE\n )\n if (child.before.value !== MISSING_VALUE) beforeProjection[key] = child.before.value\n if (child.after.value !== MISSING_VALUE) afterProjection[key] = child.after.value\n }\n return {\n before: { value: beforeProjection, hasDifference: Object.keys(beforeProjection).length > 0 },\n after: { value: afterProjection, hasDifference: Object.keys(afterProjection).length > 0 }\n }\n }\n\n return {\n before: { value: before, hasDifference: true },\n after: { value: after, hasDifference: true }\n }\n}\n\nfunction areValuesEqual(before: unknown, after: unknown, seen = new WeakMap<object, WeakSet<object>>()): boolean {\n if (Object.is(before, after)) return true\n if (!isExpandableValue(before) || !isExpandableValue(after)) return false\n if (Array.isArray(before) !== Array.isArray(after)) return false\n if (Object.prototype.toString.call(before) !== Object.prototype.toString.call(after)) return false\n\n const previousPairs = seen.get(before)\n if (previousPairs?.has(after)) return true\n if (previousPairs) previousPairs.add(after)\n else seen.set(before, new WeakSet([after]))\n\n const beforeKeys = Object.keys(before)\n const afterKeys = Object.keys(after)\n if (beforeKeys.length !== afterKeys.length) return false\n const beforeObject = before as Record<string, unknown>\n const afterObject = after as Record<string, unknown>\n return beforeKeys.every(key => Object.prototype.hasOwnProperty.call(afterObject, key) && areValuesEqual(beforeObject[key], afterObject[key], seen))\n}\n\nfunction renderInspectableValue(\n label: string,\n value: unknown,\n expanded = false,\n ancestors: readonly object[] = []\n): VobsNode {\n if (!hasExpandableEntries(value) || ancestors.includes(value as object)) {\n const row = createElement('div')\n setAttribute(row, 'class', 'vobs-devtools-value-tree__leaf')\n setAttribute(row, 'role', 'treeitem')\n appendText(row, label, 'vobs-devtools-value-field__label')\n appendText(row, ancestors.includes(value as object) ? '[Circular]' : previewValue(value), 'vobs-devtools-code')\n return row\n }\n\n const root = createElement('div')\n setAttribute(root, 'class', 'vobs-devtools-value-tree')\n setAttribute(root, 'role', 'treeitem')\n setAttribute(root, 'data-expanded', expanded ? 'true' : 'false')\n const summary = createElement('button')\n setAttribute(summary, 'class', 'vobs-devtools-value-tree__summary')\n setAttribute(summary, 'type', 'button')\n setAttribute(summary, 'aria-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'title', `Expand ${label}`)\n const toggleExpanded = (): void => {\n const expanded = root.getAttribute('data-expanded') !== 'true'\n setAttribute(root, 'data-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'aria-expanded', expanded ? 'true' : 'false')\n setAttribute(summary, 'title', `${expanded ? 'Collapse' : 'Expand'} ${label}`)\n }\n summary.addEventListener('pointerdown', event => {\n event.preventDefault()\n event.stopPropagation()\n toggleExpanded()\n })\n summary.addEventListener('keydown', event => {\n const keyboardEvent = event as KeyboardEvent\n if (keyboardEvent.key !== 'Enter' && keyboardEvent.key !== ' ') return\n event.preventDefault()\n event.stopPropagation()\n toggleExpanded()\n })\n appendText(summary, label, 'vobs-devtools-value-field__label')\n appendText(summary, previewValue(value), 'vobs-devtools-code')\n insertBefore(root, summary, null)\n\n const children = createElement('div')\n setAttribute(children, 'class', 'vobs-devtools-value-tree__children')\n setAttribute(children, 'role', 'group')\n for (const [key, child] of valueEntries(value)) {\n insertBefore(children, renderInspectableValue(key, child, false, [...ancestors, value as object]), null)\n }\n insertBefore(root, children, null)\n return root\n}\n\nfunction isExpandableValue(value: unknown): value is Record<string, unknown> | readonly unknown[] {\n return typeof value === 'object' && value !== null\n}\n\nfunction hasExpandableEntries(value: unknown): value is Record<string, unknown> | readonly unknown[] {\n return isExpandableValue(value) && valueEntries(value).length > 0\n}\n\nfunction valueEntries(value: Record<string, unknown> | readonly unknown[]): Array<[string, unknown]> {\n if (Array.isArray(value)) return value.slice(0, 100).map((item, index) => [`[${index}]`, item])\n return Object.entries(value).slice(0, 100)\n}\n\nfunction previewValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return String(value)\n if (Array.isArray(value)) return `Array (${value.length} items)`\n if (typeof value === 'object') return `Object (${Object.keys(value).length} fields)`\n return String(value)\n}\n","import { createComponent, createElement, createFragment, insertBefore, insertDynamic, setAttribute, state, type VobsNode } from '@vobs/vobs'\nimport { getDevTools } from '@vobs/devtools'\nimport { Button, Dialog, Icon } from '@vobs/ui'\nimport { DevToolsPanel, DevToolsToolbar, type DevToolsPanelProps } from './panel'\n\nexport interface DevToolsWidgetProps extends DevToolsPanelProps {\n readonly label?: string\n}\n\n/** Floating entry point for opening the DevTools panel without leaving the app. */\nexport function DevToolsWidget(props: DevToolsWidgetProps = {}): VobsNode {\n const open = state(false)\n const maximized = state(false)\n const query = state('')\n const toolbarProps = {\n get api() { return props.api === undefined ? getDevTools() : props.api ?? null },\n query,\n get maximized() { return maximized.value },\n onToggleMaximize: () => { maximized.value = !maximized.value }\n }\n return createFragment((parent, anchor) => {\n const launcher = createElement('div')\n setAttribute(launcher, 'class', 'vobs-devtools-widget')\n insertBefore(launcher, createComponent(Button, {\n variant: 'brand',\n iconOnly: true,\n icon: createComponent(Icon, { name: 'code' }),\n 'aria-label': props.label ?? 'Open DevTools',\n title: props.label ?? 'Open DevTools',\n onClick: () => { open.value = true }\n }), null)\n insertBefore(parent, launcher, anchor)\n\n insertDynamic(parent, anchor, () => open.value ? createComponent(Dialog, {\n get class() { return `vobs-devtools-widget__dialog${maximized.value ? ' is-maximized' : ''}` },\n open: true,\n title: 'Runtime DevTools',\n headerActions: () => createComponent(DevToolsToolbar, toolbarProps),\n size: 'lg',\n closeLabel: 'Close DevTools',\n onClose: () => { open.value = false; maximized.value = false },\n children: () => createComponent(DevToolsPanel, {\n api: props.api,\n router: props.router,\n http: props.http,\n query,\n toolbarPlacement: 'header'\n })\n }) : null)\n })\n}\n"],"mappings":"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","names":["update","effect","state","expanded","createComponent","createElement","createFragment","insertBefore","insertDynamic","setAttribute","state","getDevTools","Button","Icon","state","getDevTools","createFragment","createElement","setAttribute","insertBefore","createComponent","Button","Icon","insertDynamic"]}