@vscode/component-explorer 0.1.1-1 → 0.1.1-10

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.
Files changed (52) hide show
  1. package/README.md +104 -0
  2. package/dist/component-explorer.css +1 -0
  3. package/dist/components/Explorer.d.ts +5 -1
  4. package/dist/components/Explorer.d.ts.map +1 -1
  5. package/dist/components/ExplorerModel.d.ts +29 -2
  6. package/dist/components/ExplorerModel.d.ts.map +1 -1
  7. package/dist/components/FixturePreviewItem.d.ts +0 -1
  8. package/dist/components/FixturePreviewItem.d.ts.map +1 -1
  9. package/dist/components/FixtureScreenshotView.d.ts +12 -0
  10. package/dist/components/FixtureScreenshotView.d.ts.map +1 -0
  11. package/dist/components/PreviewArea.d.ts.map +1 -1
  12. package/dist/components/ScreenshotComparisonRow.d.ts +12 -0
  13. package/dist/components/ScreenshotComparisonRow.d.ts.map +1 -0
  14. package/dist/components/TitleBar.d.ts.map +1 -1
  15. package/dist/components/index.d.ts +3 -1
  16. package/dist/components/index.d.ts.map +1 -1
  17. package/dist/core/CliRuntime.d.ts +48 -0
  18. package/dist/core/CliRuntime.d.ts.map +1 -0
  19. package/dist/core/ErrorInfo.d.ts +29 -0
  20. package/dist/core/ErrorInfo.d.ts.map +1 -0
  21. package/dist/core/FixtureNode.d.ts +2 -1
  22. package/dist/core/FixtureNode.d.ts.map +1 -1
  23. package/dist/core/FixtureRegistry.d.ts +2 -1
  24. package/dist/core/FixtureRegistry.d.ts.map +1 -1
  25. package/dist/core/fixtureApi.d.ts +215 -0
  26. package/dist/core/fixtureApi.d.ts.map +1 -0
  27. package/dist/core/fixtureApiConsumer.d.ts +83 -0
  28. package/dist/core/fixtureApiConsumer.d.ts.map +1 -0
  29. package/dist/core/index.d.ts +7 -6
  30. package/dist/core/index.d.ts.map +1 -1
  31. package/dist/daemon/DaemonConfig.d.ts +19 -0
  32. package/dist/daemon/DaemonConfig.d.ts.map +1 -0
  33. package/dist/daemon/DaemonModel.d.ts +57 -0
  34. package/dist/daemon/DaemonModel.d.ts.map +1 -0
  35. package/dist/daemon/index.d.ts +5 -0
  36. package/dist/daemon/index.d.ts.map +1 -0
  37. package/dist/index.d.ts +8 -28
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +16 -24302
  40. package/dist/index.js.map +1 -1
  41. package/dist/lib/fixtureSizeCache.d.ts +1 -10
  42. package/dist/lib/fixtureSizeCache.d.ts.map +1 -1
  43. package/dist/viewer.d.ts +48 -0
  44. package/dist/viewer.d.ts.map +1 -0
  45. package/dist/viewer.js +3713 -0
  46. package/dist/viewer.js.map +1 -0
  47. package/package.json +9 -3
  48. package/dist/core/ComponentDefinition.d.ts +0 -70
  49. package/dist/core/ComponentDefinition.d.ts.map +0 -1
  50. package/dist/core/defineFixture.d.ts +0 -109
  51. package/dist/core/defineFixture.d.ts.map +0 -1
  52. package/dist/index.css +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.js","sources":["../src/core/fixtureApiConsumer.ts","../src/core/DisplayMode.ts","../src/core/PropertySchema.ts","../src/core/FixtureNode.ts","../../../external/vscode-observables/observables/dist/observableInternal/logging/logging.js","../../../external/vscode-observables/observables/dist/observableInternal/debugLocation.js","../../../external/vscode-observables/observables/dist/observableInternal/debugName.js","../../../external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js","../../../external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js","../../../external/vscode-observables/observables/dist/disposables.js","../../../external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js","../../../external/vscode-observables/observables/dist/observableInternal/observables/derived.js","../../../external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js","../../../external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js","../../../external/vscode-observables/observables/dist/observableInternal/base.js","../../../external/vscode-observables/observables/dist/observableInternal/transaction.js","../../../external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js","../../../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js","../../../external/vscode-observables/observables/dist/observableInternal/utils/utils.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js","../../../external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js","../../../external/vscode-observables/observables/dist/observableInternal/index.js","../src/core/FixtureRegistry.ts","../src/core/CliRuntime.ts","../../../external/vscode-observables/observables-react/dist/ManualChangesHandler.js","../../../external/vscode-observables/observables-react/dist/IPropertyTransformer.js","../../../external/vscode-observables/observables-react/dist/utils.js","../../../external/vscode-observables/observables-react/dist/viewModel.js","../../../external/vscode-observables/observables-react/dist/obsView.js","../../../external/vscode-observables/observables-react/dist/view.js","../../../external/vscode-observables/observables-react/dist/viewWithModel.js","../../../external/vscode-observables/observables-react/dist/Value.js","../../../external/vscode-observables/observables-react/dist/di.js","../src/components/types.ts","../src/lib/localStorageObservable.ts","../src/components/ExplorerModel.ts","../src/components/styles.ts","../src/components/TitleBarButton.tsx","../src/components/icons.tsx","../src/components/TitleBar.tsx","../src/components/TreeView.tsx","../src/components/LeftSidebar.tsx","../src/components/RightSidebar.tsx","../src/components/FixturePreviewItem.tsx","../src/components/FixtureScreenshotView.tsx","../src/components/ScreenshotComparisonRow.tsx","../src/lib/fixtureSizeCache.ts","../src/components/PreviewArea.tsx","../src/components/Explorer.tsx","../../simple-api/dist/chunk-SGBCNXYH.mjs","../../simple-api/dist/chunk-A5PE72HI.mjs","../src/daemon/DaemonModel.ts","../src/daemon/DaemonConfig.ts","../src/viewer.ts"],"sourcesContent":["/**\n * Fixture API Consumer\n * \n * This module validates and consumes fixture exports created by fixtureApi.\n * It provides type guards and parsing functions for cross-version compatibility.\n * \n * The viewer imports this module to parse fixtures; projects never need this.\n */\n\nimport {\n singleFixtureBrand,\n fixtureGroupBrand,\n fixtureVariantsBrand,\n type FixtureExport,\n type SingleFixtureExport,\n type FixtureGroupExport,\n type FixtureVariantsExport,\n type DisplayMode,\n type StyleDefinition,\n type PropertySchema,\n type IDisposable,\n} from './fixtureApi.js';\n\n// ============================================================================\n// Type guards (use these for runtime checks)\n// Cross-version compatible thanks to Symbol.for() in fixtureApi.ts\n// ============================================================================\n\n/**\n * Type guard for SingleFixtureExport.\n * Uses the global symbol brand for cross-version compatibility.\n */\nexport function isSingleFixture(value: unknown): value is SingleFixtureExport {\n return (\n typeof value === 'object' &&\n value !== null &&\n singleFixtureBrand in value &&\n (value as Record<symbol, unknown>)[singleFixtureBrand] === true &&\n '_options' in value &&\n typeof (value as { _options: unknown })._options === 'object'\n );\n}\n\n/**\n * Type guard for FixtureGroupExport.\n * Uses the global symbol brand for cross-version compatibility.\n */\nexport function isFixtureGroup(value: unknown): value is FixtureGroupExport {\n return (\n typeof value === 'object' &&\n value !== null &&\n fixtureGroupBrand in value &&\n (value as Record<symbol, unknown>)[fixtureGroupBrand] === true &&\n '_entries' in value &&\n typeof (value as { _entries: unknown })._entries === 'object'\n );\n}\n\n/**\n * Type guard for FixtureVariantsExport.\n * Uses the global symbol brand for cross-version compatibility.\n */\nexport function isFixtureVariants(value: unknown): value is FixtureVariantsExport {\n return (\n typeof value === 'object' &&\n value !== null &&\n fixtureVariantsBrand in value &&\n (value as Record<symbol, unknown>)[fixtureVariantsBrand] === true &&\n '_variants' in value &&\n typeof (value as { _variants: unknown })._variants === 'object'\n );\n}\n\n/**\n * Type guard for any fixture export type.\n */\nexport function isFixtureExport(value: unknown): value is FixtureExport {\n return isSingleFixture(value) || isFixtureGroup(value) || isFixtureVariants(value);\n}\n\n// ============================================================================\n// Parsing functions (validate and cast)\n// ============================================================================\n\nexport type ParseResult<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\n/**\n * Parses and validates a potential fixture export.\n * Returns a ParseResult with either the validated data or an error message.\n */\nexport function parseFixtureExport(value: unknown): ParseResult<FixtureExport> {\n if (isSingleFixture(value)) {\n return { success: true, data: value };\n }\n if (isFixtureGroup(value)) {\n return { success: true, data: value };\n }\n if (isFixtureVariants(value)) {\n return { success: true, data: value };\n }\n return { success: false, error: 'Value is not a valid fixture export (missing brand symbol or _options/_entries/_variants)' };\n}\n\n/**\n * Parses and validates a single fixture export.\n */\nexport function parseSingleFixture(value: unknown): ParseResult<SingleFixtureExport> {\n if (isSingleFixture(value)) {\n return { success: true, data: value };\n }\n return { success: false, error: 'Value is not a SingleFixtureExport' };\n}\n\n/**\n * Parses and validates a fixture group export.\n */\nexport function parseFixtureGroup(value: unknown): ParseResult<FixtureGroupExport> {\n if (isFixtureGroup(value)) {\n return { success: true, data: value };\n }\n return { success: false, error: 'Value is not a FixtureGroupExport' };\n}\n\n/**\n * Parses and validates a fixture variants export.\n */\nexport function parseFixtureVariants(value: unknown): ParseResult<FixtureVariantsExport> {\n if (isFixtureVariants(value)) {\n return { success: true, data: value };\n }\n return { success: false, error: 'Value is not a FixtureVariantsExport' };\n}\n\n// ============================================================================\n// ComponentDefinition creation (moved from defineFixture.ts)\n// ============================================================================\n\n/**\n * Definition of a component fixture (internal representation).\n */\nexport interface ComponentDefinition {\n /** Unique identifier within the fixture file */\n readonly id: string;\n\n /** Display name shown in the tree */\n readonly name: string;\n\n /** Optional description for documentation */\n readonly description?: string;\n\n /** How to isolate this component from other components */\n readonly isolation: 'iframe' | 'shadow-dom';\n\n /** How to display: page (device viewport) or component (natural size) */\n readonly displayMode: DisplayMode;\n\n /**\n * Stylesheets to inject into shadow root (for shadow-dom isolation).\n * Ignored when isolation is 'iframe'.\n */\n readonly styles?: readonly StyleDefinition[];\n\n /** Background pattern for the preview canvas: 'light' (default) or 'dark' for dark transparent pattern */\n readonly background: 'light' | 'dark';\n\n /** Property schema for the component */\n readonly properties: readonly PropertySchema[];\n\n /**\n * Render the component into the container.\n * Returns a disposable for cleanup (e.g., unmounting React).\n */\n render(container: HTMLElement, props: Record<string, unknown>): IDisposable;\n}\n\n/**\n * Creates the component definition from a validated SingleFixtureExport.\n */\nexport function createComponentDefinition(\n fixture: SingleFixtureExport,\n id: string,\n name: string\n): ComponentDefinition {\n const options = fixture._options;\n return {\n id,\n name,\n description: options.description,\n isolation: options.isolation ?? 'shadow-dom',\n displayMode: options.displayMode ?? { type: 'component' },\n styles: options.styles,\n background: options.background ?? 'light',\n properties: options.properties ?? [],\n render: options.render,\n };\n}\n\n/**\n * Type guard for checking if a value is a ComponentDefinition.\n * @deprecated Use isSingleFixture or isFixtureGroup instead\n */\nexport function isComponentDefinition(value: unknown): value is ComponentDefinition {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'render' in value &&\n typeof (value as ComponentDefinition).render === 'function' &&\n 'id' in value &&\n 'name' in value\n );\n}\n","/**\n * Disposable resource that can be cleaned up.\n */\nexport interface Disposable {\n dispose(): void;\n}\n\n/**\n * Style definition for shadow DOM injection.\n */\nexport type StyleDefinition =\n | { readonly type: 'css'; readonly content: string }\n | { readonly type: 'url'; readonly href: string }\n | { readonly type: 'adopted'; readonly sheet: CSSStyleSheet };\n\n/**\n * Display mode for a component.\n */\nexport type DisplayMode = PageMode | ComponentMode;\n\n/**\n * Page mode - component fills a viewport with device presets.\n */\nexport interface PageMode {\n readonly type: 'page';\n /**\n * Device presets or custom viewport sizes.\n * When viewing, user can switch between these.\n */\n readonly viewports: ViewportPreset[];\n}\n\n/**\n * Component mode - renders at natural size.\n */\nexport interface ComponentMode {\n readonly type: 'component';\n}\n\n/**\n * Viewport preset - either a named preset or custom dimensions.\n */\nexport type ViewportPreset =\n | ViewportPresetName\n | { readonly name: string; readonly width: number; readonly height: number };\n\nexport type ViewportPresetName = 'mobile' | 'tablet' | 'desktop';\n\n/**\n * Standard viewport dimensions for presets.\n */\nexport const VIEWPORT_SIZES: Record<ViewportPresetName, { readonly width: number; readonly height: number }> = {\n mobile: { width: 390, height: 844 },\n tablet: { width: 768, height: 1024 },\n desktop: { width: 1440, height: 900 },\n};\n\n/**\n * Resolves a viewport preset to actual dimensions.\n */\nexport function resolveViewport(preset: ViewportPreset): { name: string; width: number; height: number } {\n if (typeof preset === 'string') {\n return { name: preset, ...VIEWPORT_SIZES[preset] };\n }\n return preset;\n}\n","/**\n * Schema for a component property.\n * Defines the type, name, and default value of a configurable property.\n */\nexport type PropertySchema =\n | BooleanProperty\n | StringProperty\n | NumberProperty\n | EnumProperty;\n\nexport interface BooleanProperty {\n readonly type: 'boolean';\n readonly name: string;\n readonly defaultValue: boolean;\n readonly description?: string;\n}\n\nexport interface StringProperty {\n readonly type: 'string';\n readonly name: string;\n readonly defaultValue: string;\n readonly description?: string;\n /** If true, render as multiline textarea */\n readonly multiline?: boolean;\n}\n\nexport interface NumberProperty {\n readonly type: 'number';\n readonly name: string;\n readonly defaultValue: number;\n readonly description?: string;\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n}\n\nexport interface EnumProperty {\n readonly type: 'enum';\n readonly name: string;\n readonly defaultValue: string;\n readonly description?: string;\n readonly options: readonly string[];\n}\n\n/**\n * Gets the default values for a list of property schemas.\n */\nexport function getDefaultPropertyValues(properties: readonly PropertySchema[]): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n for (const prop of properties) {\n values[prop.name] = prop.defaultValue;\n }\n return values;\n}\n","import type { FixtureExport } from './fixtureApi.js';\nimport {\n isSingleFixture,\n isFixtureGroup,\n isFixtureVariants,\n createComponentDefinition,\n type ComponentDefinition,\n} from './fixtureApiConsumer.js';\n\n/**\n * A node in the fixture tree.\n * Can be a folder (with children), variants (with children, horizontal layout), or a component leaf.\n */\nexport interface FixtureNode {\n /** Unique identifier (path segments joined by '/') */\n readonly id: string;\n\n /** Display name */\n readonly name: string;\n\n /** Node type: folder for groups, variants for horizontal variant display, component for leaves */\n readonly type: 'folder' | 'variants' | 'component';\n\n /** Children (for folders and variants) */\n readonly children?: readonly FixtureNode[];\n\n /** Component definition (only for component nodes) */\n readonly component?: ComponentDefinition;\n}\n\n/**\n * Creates a fixture tree from a map of fixture exports.\n * @param fixtures Map of fixture file path to exported fixture object\n */\nexport function createFixtureTree(fixtures: Map<string, FixtureExport>): FixtureNode {\n const root: MutableFixtureNode = {\n id: '',\n name: 'Components',\n type: 'folder',\n children: [],\n };\n\n for (const [filePath, fixtureExport] of fixtures) {\n // Extract folder name from file path (e.g., 'components/Button.fixture.tsx' -> 'Button')\n const baseName = extractBaseName(filePath);\n addFixtureExportToTree(root, [baseName], fixtureExport);\n }\n\n return root;\n}\n\ninterface MutableFixtureNode {\n id: string;\n name: string;\n type: 'folder' | 'variants' | 'component';\n children?: MutableFixtureNode[];\n component?: ComponentDefinition;\n}\n\nfunction extractBaseName(filePath: string): string {\n const fileName = filePath.split('/').pop() ?? filePath;\n // Remove .fixture.tsx, .fixture.ts, .fixture.jsx, .fixture.js\n return fileName.replace(/\\.fixture\\.(tsx?|jsx?)$/, '');\n}\n\nfunction addFixtureExportToTree(\n parent: MutableFixtureNode,\n pathSegments: string[],\n fixtureExport: FixtureExport\n): void {\n if (isSingleFixture(fixtureExport)) {\n // Single fixture - add as leaf\n const id = pathSegments.join('/');\n const name = pathSegments[pathSegments.length - 1];\n const componentNode: MutableFixtureNode = {\n id,\n name,\n type: 'component',\n component: createComponentDefinition(fixtureExport, id, name),\n };\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push(componentNode);\n } else if (isFixtureGroup(fixtureExport)) {\n // Fixture group - create or find folder and recurse\n const folderName = pathSegments[pathSegments.length - 1];\n const folderId = pathSegments.join('/');\n \n // Find or create the folder\n let folder = parent.children?.find(\n (c) => c.type === 'folder' && c.name === folderName\n );\n \n if (!folder) {\n folder = {\n id: folderId,\n name: folderName,\n type: 'folder',\n children: [],\n };\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push(folder);\n }\n\n // Add each entry in the group\n for (const [key, entry] of Object.entries(fixtureExport._entries)) {\n addFixtureExportToTree(folder, [...pathSegments, key], entry);\n }\n } else if (isFixtureVariants(fixtureExport)) {\n // Fixture variants - create variants node with children\n const variantsName = pathSegments[pathSegments.length - 1];\n const variantsId = pathSegments.join('/');\n \n const variantsNode: MutableFixtureNode = {\n id: variantsId,\n name: variantsName,\n type: 'variants',\n children: [],\n };\n \n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push(variantsNode);\n\n // Add each variant as a child component\n for (const [key, variant] of Object.entries(fixtureExport._variants)) {\n const childPath = [...pathSegments, key];\n const childId = childPath.join('/');\n const componentNode: MutableFixtureNode = {\n id: childId,\n name: key,\n type: 'component',\n component: createComponentDefinition(variant, childId, key),\n };\n variantsNode.children!.push(componentNode);\n }\n }\n}\n\n/**\n * Finds a node in the tree by path.\n */\nexport function findNodeByPath(root: FixtureNode, path: string[]): FixtureNode | undefined {\n if (path.length === 0) {\n return root;\n }\n\n let current: FixtureNode | undefined = root;\n \n for (const segment of path) {\n if (!current || !current.children) {\n return undefined;\n }\n current = current.children.find((c) => c.name === segment);\n }\n\n return current;\n}\n\n/**\n * Collects all component nodes from a subtree.\n */\nexport function collectComponents(node: FixtureNode): ComponentDefinition[] {\n if (node.type === 'component' && node.component) {\n return [node.component];\n }\n\n const components: ComponentDefinition[] = [];\n for (const child of node.children ?? []) {\n components.push(...collectComponents(child));\n }\n return components;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet globalObservableLogger;\nfunction addLogger(logger) {\n if (!globalObservableLogger) {\n globalObservableLogger = logger;\n }\n else if (globalObservableLogger instanceof ComposedLogger) {\n globalObservableLogger.loggers.push(logger);\n }\n else {\n globalObservableLogger = new ComposedLogger([globalObservableLogger, logger]);\n }\n}\nfunction getLogger() {\n return globalObservableLogger;\n}\nlet globalObservableLoggerFn = undefined;\nfunction setLogObservableFn(fn) {\n globalObservableLoggerFn = fn;\n}\nfunction logObservable(obs) {\n if (globalObservableLoggerFn) {\n globalObservableLoggerFn(obs);\n }\n}\nclass ComposedLogger {\n constructor(loggers) {\n this.loggers = loggers;\n }\n handleObservableCreated(observable, location) {\n for (const logger of this.loggers) {\n logger.handleObservableCreated(observable, location);\n }\n }\n handleOnListenerCountChanged(observable, newCount) {\n for (const logger of this.loggers) {\n logger.handleOnListenerCountChanged(observable, newCount);\n }\n }\n handleObservableUpdated(observable, info) {\n for (const logger of this.loggers) {\n logger.handleObservableUpdated(observable, info);\n }\n }\n handleAutorunCreated(autorun, location) {\n for (const logger of this.loggers) {\n logger.handleAutorunCreated(autorun, location);\n }\n }\n handleAutorunDisposed(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunDisposed(autorun);\n }\n }\n handleAutorunDependencyChanged(autorun, observable, change) {\n for (const logger of this.loggers) {\n logger.handleAutorunDependencyChanged(autorun, observable, change);\n }\n }\n handleAutorunStarted(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunStarted(autorun);\n }\n }\n handleAutorunFinished(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunFinished(autorun);\n }\n }\n handleDerivedDependencyChanged(derived, observable, change) {\n for (const logger of this.loggers) {\n logger.handleDerivedDependencyChanged(derived, observable, change);\n }\n }\n handleDerivedCleared(observable) {\n for (const logger of this.loggers) {\n logger.handleDerivedCleared(observable);\n }\n }\n handleBeginTransaction(transaction) {\n for (const logger of this.loggers) {\n logger.handleBeginTransaction(transaction);\n }\n }\n handleEndTransaction(transaction) {\n for (const logger of this.loggers) {\n logger.handleEndTransaction(transaction);\n }\n }\n}\n\nexport { addLogger, getLogger, logObservable, setLogObservableFn };\n//# sourceMappingURL=logging.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar DebugLocation;\n(function (DebugLocation) {\n let enabled = false;\n function enable() {\n enabled = true;\n }\n DebugLocation.enable = enable;\n function ofCaller() {\n return ofNthCaller(1);\n }\n DebugLocation.ofCaller = ofCaller;\n function ofNthCaller(n) {\n if (!enabled) {\n return undefined;\n }\n const Err = Error; // For the monaco editor checks, which don't have the nodejs types.\n const l = Err.stackTraceLimit;\n Err.stackTraceLimit = 3;\n const stack = new Error().stack;\n Err.stackTraceLimit = l;\n return DebugLocationImpl.fromStack(stack, n + 1);\n }\n DebugLocation.ofNthCaller = ofNthCaller;\n})(DebugLocation || (DebugLocation = {}));\nclass DebugLocationImpl {\n static fromStack(stack, parentIdx) {\n const lines = stack.split('\\n');\n const location = parseLine(lines[parentIdx + 1]);\n if (location) {\n return new DebugLocationImpl(location.fileName, location.line, location.column, location.id);\n }\n else {\n return undefined;\n }\n }\n constructor(fileName, line, column, id) {\n this.fileName = fileName;\n this.line = line;\n this.column = column;\n this.id = id;\n }\n}\nfunction parseLine(stackLine) {\n if (!stackLine) {\n return undefined;\n }\n const match = stackLine.match(/\\((.*):(\\d+):(\\d+)\\)/);\n if (match) {\n return {\n fileName: match[1],\n line: parseInt(match[2]),\n column: parseInt(match[3]),\n id: stackLine,\n };\n }\n const match2 = stackLine.match(/at ([^\\(\\)]*):(\\d+):(\\d+)/);\n if (match2) {\n return {\n fileName: match2[1],\n line: parseInt(match2[2]),\n column: parseInt(match2[3]),\n id: stackLine,\n };\n }\n return undefined;\n}\n\nexport { DebugLocation };\n//# sourceMappingURL=debugLocation.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass DebugNameData {\n constructor(owner, debugNameSource, referenceFn) {\n this.owner = owner;\n this.debugNameSource = debugNameSource;\n this.referenceFn = referenceFn;\n }\n getDebugName(target) {\n return getDebugName(target, this);\n }\n}\nconst countPerName = new Map();\nconst cachedDebugName = new WeakMap();\nfunction getDebugName(target, data) {\n const cached = cachedDebugName.get(target);\n if (cached) {\n return cached;\n }\n const dbgName = computeDebugName(target, data);\n if (dbgName) {\n let count = countPerName.get(dbgName) ?? 0;\n count++;\n countPerName.set(dbgName, count);\n const result = count === 1 ? dbgName : `${dbgName}#${count}`;\n cachedDebugName.set(target, result);\n return result;\n }\n return undefined;\n}\nfunction computeDebugName(self, data) {\n const cached = cachedDebugName.get(self);\n if (cached) {\n return cached;\n }\n const ownerStr = data.owner ? formatOwner(data.owner) + `.` : '';\n let result;\n const debugNameSource = data.debugNameSource;\n if (debugNameSource !== undefined) {\n if (typeof debugNameSource === 'function') {\n result = debugNameSource();\n if (result !== undefined) {\n return ownerStr + result;\n }\n }\n else {\n return ownerStr + debugNameSource;\n }\n }\n const referenceFn = data.referenceFn;\n if (referenceFn !== undefined) {\n result = getFunctionName(referenceFn);\n if (result !== undefined) {\n return ownerStr + result;\n }\n }\n if (data.owner !== undefined) {\n const key = findKey(data.owner, self);\n if (key !== undefined) {\n return ownerStr + key;\n }\n }\n return undefined;\n}\nfunction findKey(obj, value) {\n for (const key in obj) {\n if (obj[key] === value) {\n return key;\n }\n }\n return undefined;\n}\nconst countPerClassName = new Map();\nconst ownerId = new WeakMap();\nfunction formatOwner(owner) {\n const id = ownerId.get(owner);\n if (id) {\n return id;\n }\n const className = getClassName(owner) ?? 'Object';\n let count = countPerClassName.get(className) ?? 0;\n count++;\n countPerClassName.set(className, count);\n const result = count === 1 ? className : `${className}#${count}`;\n ownerId.set(owner, result);\n return result;\n}\nfunction getClassName(obj) {\n const ctor = obj.constructor;\n if (ctor) {\n if (ctor.name === 'Object') {\n return undefined;\n }\n return ctor.name;\n }\n return undefined;\n}\nfunction getFunctionName(fn) {\n const fnSrc = fn.toString();\n // Pattern: /** @description ... */\n const regexp = /\\/\\*\\*\\s*@description\\s*([^*]*)\\*\\//;\n const match = regexp.exec(fnSrc);\n const result = match ? match[1] : undefined;\n return result?.trim();\n}\n\nexport { DebugNameData, getClassName, getDebugName, getFunctionName };\n//# sourceMappingURL=debugName.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { DebugLocation } from '../debugLocation.js';\nimport { getFunctionName } from '../debugName.js';\nimport { getLogger, logObservable } from '../logging/logging.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet _derived;\n/**\n * @internal\n * This is to allow splitting files.\n*/\nfunction _setDerivedOpts(derived) {\n _derived = derived;\n}\nlet _recomputeInitiallyAndOnChange;\nfunction _setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange) {\n _recomputeInitiallyAndOnChange = recomputeInitiallyAndOnChange;\n}\nlet _keepObserved;\nfunction _setKeepObserved(keepObserved) {\n _keepObserved = keepObserved;\n}\nlet _debugGetDependencyGraph;\nfunction _setDebugGetDependencyGraph(debugGetDependencyGraph) {\n _debugGetDependencyGraph = debugGetDependencyGraph;\n}\nclass ConvenientObservable {\n get TChange() { return null; }\n reportChanges() {\n this.get();\n }\n /** @sealed */\n read(reader) {\n if (reader) {\n return reader.readObservable(this);\n }\n else {\n return this.get();\n }\n }\n map(fnOrOwner, fnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n const owner = fnOrUndefined === undefined ? undefined : fnOrOwner;\n const fn = fnOrUndefined === undefined ? fnOrOwner : fnOrUndefined;\n return _derived({\n owner,\n debugName: () => {\n const name = getFunctionName(fn);\n if (name !== undefined) {\n return name;\n }\n // regexp to match `x => x.y` or `x => x?.y` where x and y can be arbitrary identifiers (uses backref):\n const regexp = /^\\s*\\(?\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*\\)?\\s*=>\\s*\\1(?:\\??)\\.([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*$/;\n const match = regexp.exec(fn.toString());\n if (match) {\n return `${this.debugName}.${match[2]}`;\n }\n if (!owner) {\n return `${this.debugName} (mapped)`;\n }\n return undefined;\n },\n debugReferenceFn: fn,\n }, (reader) => fn(this.read(reader), reader), debugLocation);\n }\n /**\n * @sealed\n * Converts an observable of an observable value into a direct observable of the value.\n */\n flatten() {\n return _derived({\n owner: undefined,\n debugName: () => `${this.debugName} (flattened)`,\n }, (reader) => this.read(reader).read(reader));\n }\n recomputeInitiallyAndOnChange(store, handleValue) {\n store.add(_recomputeInitiallyAndOnChange(this, handleValue));\n return this;\n }\n /**\n * Ensures that this observable is observed. This keeps the cache alive.\n * However, in case of deriveds, it does not force eager evaluation (only when the value is read/get).\n * Use `recomputeInitiallyAndOnChange` for eager evaluation.\n */\n keepObserved(store) {\n store.add(_keepObserved(this));\n return this;\n }\n get debugValue() {\n return this.get();\n }\n debugGetDependencyGraph() {\n return _debugGetDependencyGraph(this);\n }\n}\nclass BaseObservable extends ConvenientObservable {\n constructor(debugLocation) {\n super();\n this._observers = new Set();\n getLogger()?.handleObservableCreated(this, debugLocation);\n }\n addObserver(observer) {\n const len = this._observers.size;\n this._observers.add(observer);\n if (len === 0) {\n this.onFirstObserverAdded();\n }\n if (len !== this._observers.size) {\n getLogger()?.handleOnListenerCountChanged(this, this._observers.size);\n }\n }\n removeObserver(observer) {\n const deleted = this._observers.delete(observer);\n if (deleted && this._observers.size === 0) {\n this.onLastObserverRemoved();\n }\n if (deleted) {\n getLogger()?.handleOnListenerCountChanged(this, this._observers.size);\n }\n }\n onFirstObserverAdded() { }\n onLastObserverRemoved() { }\n log() {\n const hadLogger = !!getLogger();\n logObservable(this);\n if (!hadLogger) {\n getLogger()?.handleObservableCreated(this, DebugLocation.ofCaller());\n }\n return this;\n }\n debugGetObservers() {\n return this._observers;\n }\n}\n\nexport { BaseObservable, ConvenientObservable, _setDebugGetDependencyGraph, _setDerivedOpts, _setKeepObserved, _setRecomputeInitiallyAndOnChange };\n//# sourceMappingURL=baseObservable.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction toDisposable(fn) {\n return {\n dispose: fn\n };\n}\nclass BugIndicatingError extends Error {\n constructor(message) {\n super(message || 'An unexpected bug occurred.');\n Object.setPrototypeOf(this, BugIndicatingError.prototype);\n // Because we know for sure only buggy code throws this,\n // we definitely want to break here and fix the bug.\n // eslint-disable-next-line no-debugger\n // debugger;\n }\n}\nfunction onBugIndicatingError(error) {\n // debugger;\n throw error;\n}\nfunction onUnexpectedError(error) {\n console.error('Unexpected error:', error);\n}\n/**\n * Compares two items for equality using strict equality.\n*/\nconst strictEquals = (a, b) => a === b;\nfunction isDefined(arg) {\n return arg !== undefined && arg !== null;\n}\n\nexport { BugIndicatingError, isDefined, onBugIndicatingError, onUnexpectedError, strictEquals, toDisposable };\n//# sourceMappingURL=deps.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass DisposableStore {\n constructor() {\n this.disposables = [];\n this._isDisposed = false;\n }\n get isDisposed() { return this._isDisposed; }\n dispose() {\n this.clear();\n this._isDisposed = true;\n }\n add(disposable) {\n if (disposable) {\n this.disposables.push(disposable);\n }\n return disposable;\n }\n remove(disposable) {\n if (!disposable) {\n return disposable;\n }\n const index = this.disposables.indexOf(disposable);\n if (index !== -1) {\n this.disposables.splice(index, 1);\n }\n return disposable;\n }\n clear() {\n for (const disposable of this.disposables) {\n disposable.dispose();\n }\n this.disposables = [];\n }\n leakItems() {\n this.disposables = [];\n }\n}\nclass Disposable {\n constructor() {\n this._store = new DisposableStore();\n }\n dispose() {\n this._store.dispose();\n }\n _register(t) {\n this._store.add(t);\n return t;\n }\n _registerOrDispose(t) {\n if (t) {\n if (this._store.isDisposed) {\n t.dispose();\n }\n else {\n this._store.add(t);\n }\n }\n return t;\n }\n}\n\nexport { Disposable, DisposableStore };\n//# sourceMappingURL=disposables.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { BaseObservable } from './baseObservable.js';\nimport { BugIndicatingError, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction derivedStateToString(state) {\n switch (state) {\n case 0 /* DerivedState.initial */: return 'initial';\n case 1 /* DerivedState.dependenciesMightHaveChanged */: return 'dependenciesMightHaveChanged';\n case 2 /* DerivedState.stale */: return 'stale';\n case 3 /* DerivedState.upToDate */: return 'upToDate';\n default: return '<unknown>';\n }\n}\nclass Derived extends BaseObservable {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n }\n constructor(_debugNameData, _computeFn, _changeTracker, _handleLastObserverRemoved = undefined, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this._computeFn = _computeFn;\n this._changeTracker = _changeTracker;\n this._handleLastObserverRemoved = _handleLastObserverRemoved;\n this._equalityComparator = _equalityComparator;\n this._state = 0 /* DerivedState.initial */;\n this._value = undefined;\n this._updateCount = 0;\n this._dependencies = new Set();\n this._dependenciesToBeRemoved = new Set();\n this._changeSummary = undefined;\n this._isUpdating = false;\n this._isComputing = false;\n this._didReportChange = false;\n this._isInBeforeUpdate = false;\n this._isReaderValid = false;\n this._store = undefined;\n this._delayedStore = undefined;\n this._removedObserverToCallEndUpdateOn = null;\n this._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n }\n onLastObserverRemoved() {\n /**\n * We are not tracking changes anymore, thus we have to assume\n * that our cache is invalid.\n */\n this._state = 0 /* DerivedState.initial */;\n this._value = undefined;\n getLogger()?.handleDerivedCleared(this);\n for (const d of this._dependencies) {\n d.removeObserver(this);\n }\n this._dependencies.clear();\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n if (this._delayedStore !== undefined) {\n this._delayedStore.dispose();\n this._delayedStore = undefined;\n }\n this._handleLastObserverRemoved?.();\n }\n get() {\n const checkEnabled = false; // TODO set to true\n if (this._isComputing && checkEnabled) {\n // investigate why this fails in the diff editor!\n throw new BugIndicatingError('Cyclic deriveds are not supported yet!');\n }\n if (this._observers.size === 0) {\n let result;\n // Without observers, we don't know when to clean up stuff.\n // Thus, we don't cache anything to prevent memory leaks.\n try {\n this._isReaderValid = true;\n let changeSummary = undefined;\n if (this._changeTracker) {\n changeSummary = this._changeTracker.createChangeSummary(undefined);\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n }\n result = this._computeFn(this, changeSummary);\n }\n finally {\n this._isReaderValid = false;\n }\n // Clear new dependencies\n this.onLastObserverRemoved();\n return result;\n }\n else {\n do {\n // We might not get a notification for a dependency that changed while it is updating,\n // thus we also have to ask all our depedencies if they changed in this case.\n if (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n for (const d of this._dependencies) {\n /** might call {@link handleChange} indirectly, which could make us stale */\n d.reportChanges();\n if (this._state === 2 /* DerivedState.stale */) {\n // The other dependencies will refresh on demand, so early break\n break;\n }\n }\n }\n // We called report changes of all dependencies.\n // If we are still not stale, we can assume to be up to date again.\n if (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n this._state = 3 /* DerivedState.upToDate */;\n }\n if (this._state !== 3 /* DerivedState.upToDate */) {\n this._recompute();\n }\n // In case recomputation changed one of our dependencies, we need to recompute again.\n } while (this._state !== 3 /* DerivedState.upToDate */);\n return this._value;\n }\n }\n _recompute() {\n let didChange = false;\n this._isComputing = true;\n this._didReportChange = false;\n const emptySet = this._dependenciesToBeRemoved;\n this._dependenciesToBeRemoved = this._dependencies;\n this._dependencies = emptySet;\n try {\n const changeSummary = this._changeSummary;\n this._isReaderValid = true;\n if (this._changeTracker) {\n this._isInBeforeUpdate = true;\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n this._isInBeforeUpdate = false;\n this._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n }\n const hadValue = this._state !== 0 /* DerivedState.initial */;\n const oldValue = this._value;\n this._state = 3 /* DerivedState.upToDate */;\n const delayedStore = this._delayedStore;\n if (delayedStore !== undefined) {\n this._delayedStore = undefined;\n }\n try {\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n /** might call {@link handleChange} indirectly, which could invalidate us */\n this._value = this._computeFn(this, changeSummary);\n }\n finally {\n this._isReaderValid = false;\n // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n // Thus, we only unsubscribe from observables that are definitely not read anymore.\n for (const o of this._dependenciesToBeRemoved) {\n o.removeObserver(this);\n }\n this._dependenciesToBeRemoved.clear();\n if (delayedStore !== undefined) {\n delayedStore.dispose();\n }\n }\n didChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue, this._value)));\n getLogger()?.handleObservableUpdated(this, {\n oldValue,\n newValue: this._value,\n change: undefined,\n didChange,\n hadValue,\n });\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n this._isComputing = false;\n if (!this._didReportChange && didChange) {\n for (const r of this._observers) {\n r.handleChange(this, undefined);\n }\n }\n else {\n this._didReportChange = false;\n }\n }\n toString() {\n return `LazyDerived<${this.debugName}>`;\n }\n // IObserver Implementation\n beginUpdate(_observable) {\n if (this._isUpdating) {\n throw new BugIndicatingError('Cyclic deriveds are not supported yet!');\n }\n this._updateCount++;\n this._isUpdating = true;\n try {\n const propagateBeginUpdate = this._updateCount === 1;\n if (this._state === 3 /* DerivedState.upToDate */) {\n this._state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n // If we propagate begin update, that will already signal a possible change.\n if (!propagateBeginUpdate) {\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n if (propagateBeginUpdate) {\n for (const r of this._observers) {\n r.beginUpdate(this); // This signals a possible change\n }\n }\n }\n finally {\n this._isUpdating = false;\n }\n }\n endUpdate(_observable) {\n this._updateCount--;\n if (this._updateCount === 0) {\n // End update could change the observer list.\n const observers = [...this._observers];\n for (const r of observers) {\n r.endUpdate(this);\n }\n if (this._removedObserverToCallEndUpdateOn) {\n const observers = [...this._removedObserverToCallEndUpdateOn];\n this._removedObserverToCallEndUpdateOn = null;\n for (const r of observers) {\n r.endUpdate(this);\n }\n }\n }\n }\n handlePossibleChange(observable) {\n // In all other states, observers already know that we might have changed.\n if (this._state === 3 /* DerivedState.upToDate */ && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n this._state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n handleChange(observable, change) {\n if (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n getLogger()?.handleDerivedDependencyChanged(this, observable, change);\n let shouldReact = false;\n try {\n shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n changedObservable: observable,\n change,\n didChange: (o) => o === observable,\n }, this._changeSummary) : true;\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n const wasUpToDate = this._state === 3 /* DerivedState.upToDate */;\n if (shouldReact && (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */ || wasUpToDate)) {\n this._state = 2 /* DerivedState.stale */;\n if (wasUpToDate) {\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n }\n }\n // IReader Implementation\n _ensureReaderValid() {\n if (!this._isReaderValid) {\n throw new BugIndicatingError('The reader object cannot be used outside its compute function!');\n }\n }\n readObservable(observable) {\n this._ensureReaderValid();\n // Subscribe before getting the value to enable caching\n observable.addObserver(this);\n /** This might call {@link handleChange} indirectly, which could invalidate us */\n const value = observable.get();\n // Which is why we only add the observable to the dependencies now.\n this._dependencies.add(observable);\n this._dependenciesToBeRemoved.delete(observable);\n return value;\n }\n reportChange(change) {\n this._ensureReaderValid();\n this._didReportChange = true;\n // TODO add logging\n for (const r of this._observers) {\n r.handleChange(this, change);\n }\n }\n get store() {\n this._ensureReaderValid();\n if (this._store === undefined) {\n this._store = new DisposableStore();\n }\n return this._store;\n }\n get delayedStore() {\n this._ensureReaderValid();\n if (this._delayedStore === undefined) {\n this._delayedStore = new DisposableStore();\n }\n return this._delayedStore;\n }\n addObserver(observer) {\n const shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n super.addObserver(observer);\n if (shouldCallBeginUpdate) {\n if (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n this._removedObserverToCallEndUpdateOn.delete(observer);\n }\n else {\n observer.beginUpdate(this);\n }\n }\n }\n removeObserver(observer) {\n if (this._observers.has(observer) && this._updateCount > 0) {\n if (!this._removedObserverToCallEndUpdateOn) {\n this._removedObserverToCallEndUpdateOn = new Set();\n }\n this._removedObserverToCallEndUpdateOn.add(observer);\n }\n super.removeObserver(observer);\n }\n debugGetState() {\n return {\n state: this._state,\n stateStr: derivedStateToString(this._state),\n updateCount: this._updateCount,\n isComputing: this._isComputing,\n dependencies: this._dependencies,\n value: this._value,\n };\n }\n debugSetValue(newValue) {\n this._value = newValue;\n }\n debugRecompute() {\n if (!this._isComputing) {\n this._recompute();\n }\n else {\n this._state = 2 /* DerivedState.stale */;\n }\n }\n setValue(newValue, tx, change) {\n this._value = newValue;\n const observers = this._observers;\n tx.updateObserver(this, this);\n for (const d of observers) {\n d.handleChange(this, change);\n }\n }\n}\nclass DerivedWithSetter extends Derived {\n constructor(debugNameData, computeFn, changeTracker, handleLastObserverRemoved = undefined, equalityComparator, set, debugLocation) {\n super(debugNameData, computeFn, changeTracker, handleLastObserverRemoved, equalityComparator, debugLocation);\n this.set = set;\n }\n}\n\nexport { Derived, DerivedWithSetter };\n//# sourceMappingURL=derivedImpl.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugLocation } from '../debugLocation.js';\nimport { DebugNameData } from '../debugName.js';\nimport { _setDerivedOpts } from './baseObservable.js';\nimport { Derived, DerivedWithSetter } from './derivedImpl.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction derived(computeFnOrOwner, computeFn, debugLocation = DebugLocation.ofCaller()) {\n if (computeFn !== undefined) {\n return new Derived(new DebugNameData(computeFnOrOwner, undefined, computeFn), computeFn, undefined, undefined, strictEquals, debugLocation);\n }\n return new Derived(new DebugNameData(undefined, undefined, computeFnOrOwner), computeFnOrOwner, undefined, undefined, strictEquals, debugLocation);\n}\nfunction derivedWithSetter(owner, computeFn, setter, debugLocation = DebugLocation.ofCaller()) {\n return new DerivedWithSetter(new DebugNameData(owner, undefined, computeFn), computeFn, undefined, undefined, strictEquals, setter, debugLocation);\n}\nfunction derivedOpts(options, computeFn, debugLocation = DebugLocation.ofCaller()) {\n return new Derived(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn), computeFn, undefined, options.onLastObserverRemoved, options.equalsFn ?? strictEquals, debugLocation);\n}\n_setDerivedOpts(derivedOpts);\n/**\n * Represents an observable that is derived from other observables.\n * The value is only recomputed when absolutely needed.\n *\n * {@link computeFn} should start with a JS Doc using `@description` to name the derived.\n *\n * Use `createEmptyChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `handleChange` to add a reported change to the change summary.\n * The compute function is given the last change summary.\n * The change summary is discarded after the compute function was called.\n *\n * @see derived\n */\nfunction derivedHandleChanges(options, computeFn, debugLocation = DebugLocation.ofCaller()) {\n return new Derived(new DebugNameData(options.owner, options.debugName, undefined), computeFn, options.changeTracker, undefined, options.equalityComparer ?? strictEquals, debugLocation);\n}\nfunction derivedWithStore(computeFnOrOwner, computeFnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n let computeFn;\n let owner;\n if (computeFnOrUndefined === undefined) {\n computeFn = computeFnOrOwner;\n owner = undefined;\n }\n else {\n owner = computeFnOrOwner;\n computeFn = computeFnOrUndefined;\n }\n // Intentionally re-assigned in case an inactive observable is re-used later\n // eslint-disable-next-line local/code-no-potentially-unsafe-disposables\n let store = new DisposableStore();\n return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n if (store.isDisposed) {\n store = new DisposableStore();\n }\n else {\n store.clear();\n }\n return computeFn(r, store);\n }, undefined, () => store.dispose(), strictEquals, debugLocation);\n}\nfunction derivedDisposable(computeFnOrOwner, computeFnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n let computeFn;\n let owner;\n if (computeFnOrUndefined === undefined) {\n computeFn = computeFnOrOwner;\n owner = undefined;\n }\n else {\n owner = computeFnOrOwner;\n computeFn = computeFnOrUndefined;\n }\n let store = undefined;\n return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n if (!store) {\n store = new DisposableStore();\n }\n else {\n store.clear();\n }\n const result = computeFn(r);\n if (result) {\n store.add(result);\n }\n return result;\n }, undefined, () => {\n if (store) {\n store.dispose();\n store = undefined;\n }\n }, strictEquals, debugLocation);\n}\n\nexport { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore };\n//# sourceMappingURL=derived.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onBugIndicatingError, BugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction autorunStateToString(state) {\n switch (state) {\n case 1 /* AutorunState.dependenciesMightHaveChanged */: return 'dependenciesMightHaveChanged';\n case 2 /* AutorunState.stale */: return 'stale';\n case 3 /* AutorunState.upToDate */: return 'upToDate';\n default: return '<unknown>';\n }\n}\nclass AutorunObserver {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n }\n constructor(_debugNameData, _runFn, _changeTracker, debugLocation) {\n this._debugNameData = _debugNameData;\n this._runFn = _runFn;\n this._changeTracker = _changeTracker;\n this._state = 2 /* AutorunState.stale */;\n this._updateCount = 0;\n this._disposed = false;\n this._dependencies = new Set();\n this._dependenciesToBeRemoved = new Set();\n this._isRunning = false;\n this._store = undefined;\n this._delayedStore = undefined;\n this._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n getLogger()?.handleAutorunCreated(this, debugLocation);\n this._run();\n }\n dispose() {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n for (const o of this._dependencies) {\n o.removeObserver(this); // Warning: external call!\n }\n this._dependencies.clear();\n if (this._store !== undefined) {\n this._store.dispose();\n }\n if (this._delayedStore !== undefined) {\n this._delayedStore.dispose();\n }\n getLogger()?.handleAutorunDisposed(this);\n }\n _run() {\n const emptySet = this._dependenciesToBeRemoved;\n this._dependenciesToBeRemoved = this._dependencies;\n this._dependencies = emptySet;\n this._state = 3 /* AutorunState.upToDate */;\n try {\n if (!this._disposed) {\n getLogger()?.handleAutorunStarted(this);\n const changeSummary = this._changeSummary;\n const delayedStore = this._delayedStore;\n if (delayedStore !== undefined) {\n this._delayedStore = undefined;\n }\n try {\n this._isRunning = true;\n if (this._changeTracker) {\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n this._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n }\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n this._runFn(this, changeSummary); // Warning: external call!\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n finally {\n this._isRunning = false;\n if (delayedStore !== undefined) {\n delayedStore.dispose();\n }\n }\n }\n }\n finally {\n if (!this._disposed) {\n getLogger()?.handleAutorunFinished(this);\n }\n // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n // Thus, we only unsubscribe from observables that are definitely not read anymore.\n for (const o of this._dependenciesToBeRemoved) {\n o.removeObserver(this); // Warning: external call!\n }\n this._dependenciesToBeRemoved.clear();\n }\n }\n toString() {\n return `Autorun<${this.debugName}>`;\n }\n // IObserver implementation\n beginUpdate(_observable) {\n if (this._state === 3 /* AutorunState.upToDate */) {\n this._state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n }\n this._updateCount++;\n }\n endUpdate(_observable) {\n try {\n if (this._updateCount === 1) {\n do {\n if (this._state === 1 /* AutorunState.dependenciesMightHaveChanged */) {\n this._state = 3 /* AutorunState.upToDate */;\n for (const d of this._dependencies) {\n d.reportChanges(); // Warning: external call!\n if (this._state === 2 /* AutorunState.stale */) {\n // The other dependencies will refresh on demand\n break;\n }\n }\n }\n if (this._state !== 3 /* AutorunState.upToDate */) {\n this._run(); // Warning: indirect external call!\n }\n } while (this._state !== 3 /* AutorunState.upToDate */);\n }\n }\n finally {\n this._updateCount--;\n }\n }\n handlePossibleChange(observable) {\n if (this._state === 3 /* AutorunState.upToDate */ && this._isDependency(observable)) {\n this._state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n }\n }\n handleChange(observable, change) {\n if (this._isDependency(observable)) {\n getLogger()?.handleAutorunDependencyChanged(this, observable, change);\n try {\n // Warning: external call!\n const shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n changedObservable: observable,\n change,\n didChange: (o) => o === observable,\n }, this._changeSummary) : true;\n if (shouldReact) {\n this._state = 2 /* AutorunState.stale */;\n }\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n }\n }\n _isDependency(observable) {\n return this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n }\n // IReader implementation\n _ensureNoRunning() {\n if (!this._isRunning) {\n throw new BugIndicatingError('The reader object cannot be used outside its compute function!');\n }\n }\n readObservable(observable) {\n this._ensureNoRunning();\n // In case the run action disposes the autorun\n if (this._disposed) {\n return observable.get(); // warning: external call!\n }\n observable.addObserver(this); // warning: external call!\n const value = observable.get(); // warning: external call!\n this._dependencies.add(observable);\n this._dependenciesToBeRemoved.delete(observable);\n return value;\n }\n get store() {\n this._ensureNoRunning();\n if (this._disposed) {\n throw new BugIndicatingError('Cannot access store after dispose');\n }\n if (this._store === undefined) {\n this._store = new DisposableStore();\n }\n return this._store;\n }\n get delayedStore() {\n this._ensureNoRunning();\n if (this._disposed) {\n throw new BugIndicatingError('Cannot access store after dispose');\n }\n if (this._delayedStore === undefined) {\n this._delayedStore = new DisposableStore();\n }\n return this._delayedStore;\n }\n debugGetState() {\n return {\n isRunning: this._isRunning,\n updateCount: this._updateCount,\n dependencies: this._dependencies,\n state: this._state,\n stateStr: autorunStateToString(this._state),\n };\n }\n debugRerun() {\n if (!this._isRunning) {\n this._run();\n }\n else {\n this._state = 2 /* AutorunState.stale */;\n }\n }\n}\n\nexport { AutorunObserver };\n//# sourceMappingURL=autorunImpl.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toDisposable } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { AutorunObserver } from './autorunImpl.js';\nimport { DebugLocation } from '../debugLocation.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n */\nfunction autorun(fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(undefined, undefined, fn), fn, undefined, debugLocation);\n}\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n */\nfunction autorunOpts(options, fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, undefined, debugLocation);\n}\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n *\n * Use `changeTracker.createChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `changeTracker.handleChange` to add a reported change to the change summary.\n * The run function is given the last change summary.\n * The change summary is discarded after the run function was called.\n *\n * @see autorun\n */\nfunction autorunHandleChanges(options, fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, options.changeTracker, debugLocation);\n}\n/**\n * @see autorunHandleChanges (but with a disposable store that is cleared before the next run or on dispose)\n */\nfunction autorunWithStoreHandleChanges(options, fn) {\n const store = new DisposableStore();\n const disposable = autorunHandleChanges({\n owner: options.owner,\n debugName: options.debugName,\n debugReferenceFn: options.debugReferenceFn ?? fn,\n changeTracker: options.changeTracker,\n }, (reader, changeSummary) => {\n store.clear();\n fn(reader, changeSummary, store);\n });\n return toDisposable(() => {\n disposable.dispose();\n store.dispose();\n });\n}\n/**\n * @see autorun (but with a disposable store that is cleared before the next run or on dispose)\n *\n * @deprecated Use `autorun(reader => { reader.store.add(...) })` instead!\n */\nfunction autorunWithStore(fn) {\n const store = new DisposableStore();\n const disposable = autorunOpts({\n owner: undefined,\n debugName: undefined,\n debugReferenceFn: fn,\n }, reader => {\n store.clear();\n fn(reader, store);\n });\n return toDisposable(() => {\n disposable.dispose();\n store.dispose();\n });\n}\nfunction autorunDelta(observable, handler) {\n let _lastValue;\n return autorunOpts({ debugReferenceFn: handler }, (reader) => {\n const newValue = observable.read(reader);\n const lastValue = _lastValue;\n _lastValue = newValue;\n handler({ lastValue, newValue });\n });\n}\nfunction autorunIterableDelta(getValue, handler, getUniqueIdentifier = v => v) {\n const lastValues = new Map();\n return autorunOpts({ debugReferenceFn: getValue }, (reader) => {\n const newValues = new Map();\n const removedValues = new Map(lastValues);\n for (const value of getValue(reader)) {\n const id = getUniqueIdentifier(value);\n if (lastValues.has(id)) {\n removedValues.delete(id);\n }\n else {\n newValues.set(id, value);\n lastValues.set(id, value);\n }\n }\n for (const id of removedValues.keys()) {\n lastValues.delete(id);\n }\n if (newValues.size || removedValues.size) {\n handler({ addedValues: [...newValues.values()], removedValues: [...removedValues.values()] });\n }\n });\n}\n/**\n * An autorun with a `dispose()` method on its `reader` which cancels the autorun.\n * It it safe to call `dispose()` synchronously.\n */\nfunction autorunSelfDisposable(fn, debugLocation = DebugLocation.ofCaller()) {\n let ar;\n let disposed = false;\n // eslint-disable-next-line prefer-const\n ar = autorun(reader => {\n fn({\n delayedStore: reader.delayedStore,\n store: reader.store,\n readObservable: reader.readObservable.bind(reader),\n dispose: () => {\n ar?.dispose();\n disposed = true;\n }\n });\n }, debugLocation);\n if (disposed) {\n ar.dispose();\n }\n return ar;\n}\n\nexport { autorun, autorunDelta, autorunHandleChanges, autorunIterableDelta, autorunOpts, autorunSelfDisposable, autorunWithStore, autorunWithStoreHandleChanges };\n//# sourceMappingURL=autorun.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from './commonFacade/deps.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * This function is used to indicate that the caller recovered from an error that indicates a bug.\n*/\nfunction handleBugIndicatingErrorRecovery(message) {\n const err = new Error('BugIndicatingErrorRecovery: ' + message);\n onUnexpectedError(err);\n console.error('recovered from an error that indicates a bug', err);\n}\n\nexport { handleBugIndicatingErrorRecovery };\n//# sourceMappingURL=base.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { handleBugIndicatingErrorRecovery } from './base.js';\nimport { getFunctionName } from './debugName.js';\nimport { getLogger } from './logging/logging.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Starts a transaction in which many observables can be changed at once.\n * {@link fn} should start with a JS Doc using `@description` to give the transaction a debug name.\n * Reaction run on demand or when the transaction ends.\n */\nfunction transaction(fn, getDebugName) {\n const tx = new TransactionImpl(fn, getDebugName);\n try {\n fn(tx);\n }\n finally {\n tx.finish();\n }\n}\nlet _globalTransaction = undefined;\nfunction globalTransaction(fn) {\n if (_globalTransaction) {\n fn(_globalTransaction);\n }\n else {\n const tx = new TransactionImpl(fn, undefined);\n _globalTransaction = tx;\n try {\n fn(tx);\n }\n finally {\n tx.finish(); // During finish, more actions might be added to the transaction.\n // Which is why we only clear the global transaction after finish.\n _globalTransaction = undefined;\n }\n }\n}\n/** @deprecated */\nasync function asyncTransaction(fn, getDebugName) {\n const tx = new TransactionImpl(fn, getDebugName);\n try {\n await fn(tx);\n }\n finally {\n tx.finish();\n }\n}\n/**\n * Allows to chain transactions.\n */\nfunction subtransaction(tx, fn, getDebugName) {\n if (!tx) {\n transaction(fn, getDebugName);\n }\n else {\n fn(tx);\n }\n}\nclass TransactionImpl {\n constructor(_fn, _getDebugName) {\n this._fn = _fn;\n this._getDebugName = _getDebugName;\n this._updatingObservers = [];\n getLogger()?.handleBeginTransaction(this);\n }\n getDebugName() {\n if (this._getDebugName) {\n return this._getDebugName();\n }\n return getFunctionName(this._fn);\n }\n updateObserver(observer, observable) {\n if (!this._updatingObservers) {\n // This happens when a transaction is used in a callback or async function.\n // If an async transaction is used, make sure the promise awaits all users of the transaction (e.g. no race).\n handleBugIndicatingErrorRecovery('Transaction already finished!');\n // Error recovery\n transaction(tx => {\n tx.updateObserver(observer, observable);\n });\n return;\n }\n // When this gets called while finish is active, they will still get considered\n this._updatingObservers.push({ observer, observable });\n observer.beginUpdate(observable);\n }\n finish() {\n const updatingObservers = this._updatingObservers;\n if (!updatingObservers) {\n handleBugIndicatingErrorRecovery('transaction.finish() has already been called!');\n return;\n }\n for (let i = 0; i < updatingObservers.length; i++) {\n const { observer, observable } = updatingObservers[i];\n observer.endUpdate(observable);\n }\n // Prevent anyone from updating observers from now on.\n this._updatingObservers = null;\n getLogger()?.handleEndTransaction(this);\n }\n debugGetUpdatingObservers() {\n return this._updatingObservers;\n }\n}\n\nexport { TransactionImpl, asyncTransaction, globalTransaction, subtransaction, transaction };\n//# sourceMappingURL=transaction.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TransactionImpl } from '../transaction.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableValue(nameOrOwner, initialValue, debugLocation = DebugLocation.ofCaller()) {\n let debugNameData;\n if (typeof nameOrOwner === 'string') {\n debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n }\n else {\n debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n }\n return new ObservableValue(debugNameData, initialValue, strictEquals, debugLocation);\n}\nclass ObservableValue extends BaseObservable {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? 'ObservableValue';\n }\n constructor(_debugNameData, initialValue, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this._equalityComparator = _equalityComparator;\n this._value = initialValue;\n getLogger()?.handleObservableUpdated(this, { hadValue: false, newValue: initialValue, change: undefined, didChange: true, oldValue: undefined });\n }\n get() {\n return this._value;\n }\n set(value, tx, change) {\n if (change === undefined && this._equalityComparator(this._value, value)) {\n return;\n }\n let _tx;\n if (!tx) {\n tx = _tx = new TransactionImpl(() => { }, () => `Setting ${this.debugName}`);\n }\n try {\n const oldValue = this._value;\n this._setValue(value);\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue: value, change, didChange: true, hadValue: true });\n for (const observer of this._observers) {\n tx.updateObserver(observer, this);\n observer.handleChange(this, change);\n }\n }\n finally {\n if (_tx) {\n _tx.finish();\n }\n }\n }\n toString() {\n return `${this.debugName}: ${this._value}`;\n }\n _setValue(newValue) {\n this._value = newValue;\n }\n debugGetState() {\n return {\n value: this._value,\n };\n }\n debugSetValue(value) {\n this._value = value;\n }\n}\n/**\n * A disposable observable. When disposed, its value is also disposed.\n * When a new value is set, the previous value is disposed.\n */\nfunction disposableObservableValue(nameOrOwner, initialValue, debugLocation = DebugLocation.ofCaller()) {\n let debugNameData;\n if (typeof nameOrOwner === 'string') {\n debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n }\n else {\n debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n }\n return new DisposableObservableValue(debugNameData, initialValue, strictEquals, debugLocation);\n}\nclass DisposableObservableValue extends ObservableValue {\n _setValue(newValue) {\n if (this._value === newValue) {\n return;\n }\n if (this._value) {\n this._value.dispose();\n }\n this._value = newValue;\n }\n dispose() {\n this._value?.dispose();\n }\n}\n\nexport { DisposableObservableValue, ObservableValue, disposableObservableValue, observableValue };\n//# sourceMappingURL=observableValue.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { subtransaction } from '../transaction.js';\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableFromEvent(...args) {\n let owner;\n let event;\n let getValue;\n let debugLocation;\n if (args.length === 2) {\n [event, getValue] = args;\n }\n else {\n [owner, event, getValue, debugLocation] = args;\n }\n return new FromEventObservable(new DebugNameData(owner, undefined, getValue), event, getValue, () => FromEventObservable.globalTransaction, strictEquals, debugLocation ?? DebugLocation.ofCaller());\n}\nfunction observableFromEventOpts(options, event, getValue, debugLocation = DebugLocation.ofCaller()) {\n return new FromEventObservable(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue), event, getValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation);\n}\nclass FromEventObservable extends BaseObservable {\n constructor(_debugNameData, event, _getValue, _getTransaction, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this.event = event;\n this._getValue = _getValue;\n this._getTransaction = _getTransaction;\n this._equalityComparator = _equalityComparator;\n this._hasValue = false;\n this.handleEvent = (args) => {\n const newValue = this._getValue(args);\n const oldValue = this._value;\n const didChange = !this._hasValue || !(this._equalityComparator(oldValue, newValue));\n let didRunTransaction = false;\n if (didChange) {\n this._value = newValue;\n if (this._hasValue) {\n didRunTransaction = true;\n subtransaction(this._getTransaction(), (tx) => {\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n for (const o of this._observers) {\n tx.updateObserver(o, this);\n o.handleChange(this, undefined);\n }\n }, () => {\n const name = this.getDebugName();\n return 'Event fired' + (name ? `: ${name}` : '');\n });\n }\n this._hasValue = true;\n }\n if (!didRunTransaction) {\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n }\n };\n }\n getDebugName() {\n return this._debugNameData.getDebugName(this);\n }\n get debugName() {\n const name = this.getDebugName();\n return 'From Event' + (name ? `: ${name}` : '');\n }\n onFirstObserverAdded() {\n this._subscription = this.event(this.handleEvent);\n }\n onLastObserverRemoved() {\n this._subscription.dispose();\n this._subscription = undefined;\n this._hasValue = false;\n this._value = undefined;\n }\n get() {\n if (this._subscription) {\n if (!this._hasValue) {\n this.handleEvent(undefined);\n }\n return this._value;\n }\n else {\n // no cache, as there are no subscribers to keep it updated\n const value = this._getValue(undefined);\n return value;\n }\n }\n debugSetValue(value) {\n this._value = value;\n }\n debugGetState() {\n return { value: this._value, hasValue: this._hasValue };\n }\n}\n(function (observableFromEvent) {\n observableFromEvent.Observer = FromEventObservable;\n function batchEventsGlobally(tx, fn) {\n let didSet = false;\n if (FromEventObservable.globalTransaction === undefined) {\n FromEventObservable.globalTransaction = tx;\n didSet = true;\n }\n try {\n fn();\n }\n finally {\n if (didSet) {\n FromEventObservable.globalTransaction = undefined;\n }\n }\n }\n observableFromEvent.batchEventsGlobally = batchEventsGlobally;\n})(observableFromEvent || (observableFromEvent = {}));\n\nexport { FromEventObservable, observableFromEvent, observableFromEventOpts };\n//# sourceMappingURL=observableFromEvent.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { autorun } from '../reactions/autorun.js';\nimport { transaction } from '../transaction.js';\nimport { observableValue } from '../observables/observableValue.js';\nimport { toDisposable } from '../commonFacade/deps.js';\nimport { derivedOpts, derived } from '../observables/derived.js';\nimport { observableFromEvent } from '../observables/observableFromEvent.js';\nimport { observableSignal } from '../observables/observableSignal.js';\nimport { _setKeepObserved, _setRecomputeInitiallyAndOnChange } from '../observables/baseObservable.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableFromPromise(promise) {\n const observable = observableValue('promiseValue', {});\n promise.then((value) => {\n observable.set({ value }, undefined);\n });\n return observable;\n}\nfunction signalFromObservable(owner, observable) {\n return derivedOpts({\n owner,\n equalsFn: () => false,\n }, reader => {\n observable.read(reader);\n });\n}\n/**\n * @deprecated Use `debouncedObservable` instead.\n */\nfunction debouncedObservableDeprecated(observable, debounceMs, disposableStore) {\n const debouncedObservable = observableValue('debounced', undefined);\n let timeout = undefined;\n disposableStore.add(autorun(reader => {\n /** @description debounce */\n const value = observable.read(reader);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n transaction(tx => {\n debouncedObservable.set(value, tx);\n });\n }, debounceMs);\n }));\n return debouncedObservable;\n}\n/**\n * Creates an observable that debounces the input observable.\n */\nfunction debouncedObservable(observable, debounceMs) {\n let hasValue = false;\n let lastValue;\n let timeout = undefined;\n return observableFromEvent(cb => {\n const d = autorun(reader => {\n const value = observable.read(reader);\n if (!hasValue) {\n hasValue = true;\n lastValue = value;\n }\n else {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n lastValue = value;\n cb();\n }, debounceMs);\n }\n });\n return {\n dispose() {\n d.dispose();\n hasValue = false;\n lastValue = undefined;\n },\n };\n }, () => {\n if (hasValue) {\n return lastValue;\n }\n else {\n return observable.get();\n }\n });\n}\nfunction wasEventTriggeredRecently(event, timeoutMs, disposableStore) {\n const observable = observableValue('triggeredRecently', false);\n let timeout = undefined;\n disposableStore.add(event(() => {\n observable.set(true, undefined);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n observable.set(false, undefined);\n }, timeoutMs);\n }));\n return observable;\n}\n/**\n * This makes sure the observable is being observed and keeps its cache alive.\n */\nfunction keepObserved(observable) {\n const o = new KeepAliveObserver(false, undefined);\n observable.addObserver(o);\n return toDisposable(() => {\n observable.removeObserver(o);\n });\n}\n_setKeepObserved(keepObserved);\n/**\n * This converts the given observable into an autorun.\n */\nfunction recomputeInitiallyAndOnChange(observable, handleValue) {\n const o = new KeepAliveObserver(true, handleValue);\n observable.addObserver(o);\n try {\n o.beginUpdate(observable);\n }\n finally {\n o.endUpdate(observable);\n }\n return toDisposable(() => {\n observable.removeObserver(o);\n });\n}\n_setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange);\nclass KeepAliveObserver {\n constructor(_forceRecompute, _handleValue) {\n this._forceRecompute = _forceRecompute;\n this._handleValue = _handleValue;\n this._counter = 0;\n }\n beginUpdate(observable) {\n this._counter++;\n }\n endUpdate(observable) {\n if (this._counter === 1 && this._forceRecompute) {\n if (this._handleValue) {\n this._handleValue(observable.get());\n }\n else {\n observable.reportChanges();\n }\n }\n this._counter--;\n }\n handlePossibleChange(observable) {\n // NO OP\n }\n handleChange(observable, change) {\n // NO OP\n }\n}\nfunction derivedObservableWithCache(owner, computeFn) {\n let lastValue = undefined;\n const observable = derivedOpts({ owner, debugReferenceFn: computeFn }, reader => {\n lastValue = computeFn(reader, lastValue);\n return lastValue;\n });\n return observable;\n}\nfunction derivedObservableWithWritableCache(owner, computeFn) {\n let lastValue = undefined;\n const onChange = observableSignal('derivedObservableWithWritableCache');\n const observable = derived(owner, reader => {\n onChange.read(reader);\n lastValue = computeFn(reader, lastValue);\n return lastValue;\n });\n return Object.assign(observable, {\n clearCache: (tx) => {\n lastValue = undefined;\n onChange.trigger(tx);\n },\n setCache: (newValue, tx) => {\n lastValue = newValue;\n onChange.trigger(tx);\n }\n });\n}\n/**\n * When the items array changes, referential equal items are not mapped again.\n */\nfunction mapObservableArrayCached(owner, items, map, keySelector) {\n let m = new ArrayMap(map, keySelector);\n const self = derivedOpts({\n debugReferenceFn: map,\n owner,\n onLastObserverRemoved: () => {\n m.dispose();\n m = new ArrayMap(map);\n }\n }, (reader) => {\n m.setItems(items.read(reader));\n return m.getItems();\n });\n return self;\n}\nclass ArrayMap {\n constructor(_map, _keySelector) {\n this._map = _map;\n this._keySelector = _keySelector;\n this._cache = new Map();\n this._items = [];\n }\n dispose() {\n this._cache.forEach(entry => entry.store.dispose());\n this._cache.clear();\n }\n setItems(items) {\n const newItems = [];\n const itemsToRemove = new Set(this._cache.keys());\n for (const item of items) {\n const key = this._keySelector ? this._keySelector(item) : item;\n let entry = this._cache.get(key);\n if (!entry) {\n const store = new DisposableStore();\n const out = this._map(item, store);\n entry = { out, store };\n this._cache.set(key, entry);\n }\n else {\n itemsToRemove.delete(key);\n }\n newItems.push(entry.out);\n }\n for (const item of itemsToRemove) {\n const entry = this._cache.get(item);\n entry.store.dispose();\n this._cache.delete(item);\n }\n this._items = newItems;\n }\n getItems() {\n return this._items;\n }\n}\n\nexport { KeepAliveObserver, debouncedObservable, debouncedObservableDeprecated, derivedObservableWithCache, derivedObservableWithWritableCache, keepObserved, mapObservableArrayCached, observableFromPromise, recomputeInitiallyAndOnChange, signalFromObservable, wasEventTriggeredRecently };\n//# sourceMappingURL=utils.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { addLogger } from './logging.js';\nimport { getClassName } from '../debugName.js';\nimport { Derived } from '../observables/derivedImpl.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet consoleObservableLogger;\nfunction logObservableToConsole(obs) {\n if (!consoleObservableLogger) {\n consoleObservableLogger = new ConsoleObservableLogger();\n addLogger(consoleObservableLogger);\n }\n consoleObservableLogger.addFilteredObj(obs);\n}\nclass ConsoleObservableLogger {\n constructor() {\n this.indentation = 0;\n this.changedObservablesSets = new WeakMap();\n }\n addFilteredObj(obj) {\n if (!this._filteredObjects) {\n this._filteredObjects = new Set();\n }\n this._filteredObjects.add(obj);\n }\n _isIncluded(obj) {\n return this._filteredObjects?.has(obj) ?? true;\n }\n textToConsoleArgs(text) {\n return consoleTextToArgs([\n normalText(repeat('| ', this.indentation)),\n text,\n ]);\n }\n formatInfo(info) {\n if (!info.hadValue) {\n return [\n normalText(` `),\n styled(formatValue(info.newValue, 60), {\n color: 'green',\n }),\n normalText(` (initial)`),\n ];\n }\n return info.didChange\n ? [\n normalText(` `),\n styled(formatValue(info.oldValue, 70), {\n color: 'red',\n strikeThrough: true,\n }),\n normalText(` `),\n styled(formatValue(info.newValue, 60), {\n color: 'green',\n }),\n ]\n : [normalText(` (unchanged)`)];\n }\n handleObservableCreated(observable) {\n if (observable instanceof Derived) {\n const derived = observable;\n this.changedObservablesSets.set(derived, new Set());\n }\n }\n handleOnListenerCountChanged(observable, newCount) {\n }\n handleObservableUpdated(observable, info) {\n if (!this._isIncluded(observable)) {\n return;\n }\n if (observable instanceof Derived) {\n this._handleDerivedRecomputed(observable, info);\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('observable value changed'),\n styled(observable.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n ]));\n }\n formatChanges(changes) {\n if (changes.size === 0) {\n return undefined;\n }\n return styled(' (changed deps: ' +\n [...changes].map((o) => o.debugName).join(', ') +\n ')', { color: 'gray' });\n }\n handleDerivedDependencyChanged(derived, observable, change) {\n if (!this._isIncluded(derived)) {\n return;\n }\n this.changedObservablesSets.get(derived)?.add(observable);\n }\n _handleDerivedRecomputed(derived, info) {\n if (!this._isIncluded(derived)) {\n return;\n }\n const changedObservables = this.changedObservablesSets.get(derived);\n if (!changedObservables) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('derived recomputed'),\n styled(derived.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n this.formatChanges(changedObservables),\n { data: [{ fn: derived._debugNameData.referenceFn ?? derived._computeFn }] }\n ]));\n changedObservables.clear();\n }\n handleDerivedCleared(derived) {\n if (!this._isIncluded(derived)) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('derived cleared'),\n styled(derived.debugName, { color: 'BlueViolet' }),\n ]));\n }\n handleFromEventObservableTriggered(observable, info) {\n if (!this._isIncluded(observable)) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('observable from event triggered'),\n styled(observable.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n { data: [{ fn: observable._getValue }] }\n ]));\n }\n handleAutorunCreated(autorun) {\n if (!this._isIncluded(autorun)) {\n return;\n }\n this.changedObservablesSets.set(autorun, new Set());\n }\n handleAutorunDisposed(autorun) {\n }\n handleAutorunDependencyChanged(autorun, observable, change) {\n if (!this._isIncluded(autorun)) {\n return;\n }\n this.changedObservablesSets.get(autorun).add(observable);\n }\n handleAutorunStarted(autorun) {\n const changedObservables = this.changedObservablesSets.get(autorun);\n if (!changedObservables) {\n return;\n }\n if (this._isIncluded(autorun)) {\n console.log(...this.textToConsoleArgs([\n formatKind('autorun'),\n styled(autorun.debugName, { color: 'BlueViolet' }),\n this.formatChanges(changedObservables),\n { data: [{ fn: autorun._debugNameData.referenceFn ?? autorun._runFn }] }\n ]));\n }\n changedObservables.clear();\n this.indentation++;\n }\n handleAutorunFinished(autorun) {\n this.indentation--;\n }\n handleBeginTransaction(transaction) {\n let transactionName = transaction.getDebugName();\n if (transactionName === undefined) {\n transactionName = '';\n }\n if (this._isIncluded(transaction)) {\n console.log(...this.textToConsoleArgs([\n formatKind('transaction'),\n styled(transactionName, { color: 'BlueViolet' }),\n { data: [{ fn: transaction._fn }] }\n ]));\n }\n this.indentation++;\n }\n handleEndTransaction() {\n this.indentation--;\n }\n}\nfunction consoleTextToArgs(text) {\n const styles = new Array();\n const data = [];\n let firstArg = '';\n function process(t) {\n if ('length' in t) {\n for (const item of t) {\n if (item) {\n process(item);\n }\n }\n }\n else if ('text' in t) {\n firstArg += `%c${t.text}`;\n styles.push(t.style);\n if (t.data) {\n data.push(...t.data);\n }\n }\n else if ('data' in t) {\n data.push(...t.data);\n }\n }\n process(text);\n const result = [firstArg, ...styles];\n result.push(...data);\n return result;\n}\nfunction normalText(text) {\n return styled(text, { color: 'black' });\n}\nfunction formatKind(kind) {\n return styled(padStr(`${kind}: `, 10), { color: 'black', bold: true });\n}\nfunction styled(text, options = {\n color: 'black',\n}) {\n function objToCss(styleObj) {\n return Object.entries(styleObj).reduce((styleString, [propName, propValue]) => {\n return `${styleString}${propName}:${propValue};`;\n }, '');\n }\n const style = {\n color: options.color,\n };\n if (options.strikeThrough) {\n style['text-decoration'] = 'line-through';\n }\n if (options.bold) {\n style['font-weight'] = 'bold';\n }\n return {\n text,\n style: objToCss(style),\n };\n}\nfunction formatValue(value, availableLen) {\n switch (typeof value) {\n case 'number':\n return '' + value;\n case 'string':\n if (value.length + 2 <= availableLen) {\n return `\"${value}\"`;\n }\n return `\"${value.substr(0, availableLen - 7)}\"+...`;\n case 'boolean':\n return value ? 'true' : 'false';\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return formatArray(value, availableLen);\n }\n return formatObject(value, availableLen);\n case 'symbol':\n return value.toString();\n case 'function':\n return `[[Function${value.name ? ' ' + value.name : ''}]]`;\n default:\n return '' + value;\n }\n}\nfunction formatArray(value, availableLen) {\n let result = '[ ';\n let first = true;\n for (const val of value) {\n if (!first) {\n result += ', ';\n }\n if (result.length - 5 > availableLen) {\n result += '...';\n break;\n }\n first = false;\n result += `${formatValue(val, availableLen - result.length)}`;\n }\n result += ' ]';\n return result;\n}\nfunction formatObject(value, availableLen) {\n if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n const val = value.toString();\n if (val.length <= availableLen) {\n return val;\n }\n return val.substring(0, availableLen - 3) + '...';\n }\n const className = getClassName(value);\n let result = className ? className + '(' : '{ ';\n let first = true;\n for (const [key, val] of Object.entries(value)) {\n if (!first) {\n result += ', ';\n }\n if (result.length - 5 > availableLen) {\n result += '...';\n break;\n }\n first = false;\n result += `${key}: ${formatValue(val, availableLen - result.length)}`;\n }\n result += className ? ')' : ' }';\n return result;\n}\nfunction repeat(str, count) {\n let result = '';\n for (let i = 1; i <= count; i++) {\n result += str;\n }\n return result;\n}\nfunction padStr(str, length) {\n while (str.length < length) {\n str += ' ';\n }\n return str;\n}\n\nexport { ConsoleObservableLogger, formatValue, logObservableToConsole };\n//# sourceMappingURL=consoleObservableLogger.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass SimpleTypedRpcConnection {\n static createHost(channelFactory, getHandler) {\n return new SimpleTypedRpcConnection(channelFactory, getHandler);\n }\n static createClient(channelFactory, getHandler) {\n return new SimpleTypedRpcConnection(channelFactory, getHandler);\n }\n constructor(_channelFactory, _getHandler) {\n this._channelFactory = _channelFactory;\n this._getHandler = _getHandler;\n this._channel = this._channelFactory({\n handleNotification: (notificationData) => {\n const m = notificationData;\n const fn = this._getHandler().notifications[m[0]];\n if (!fn) {\n throw new Error(`Unknown notification \"${m[0]}\"!`);\n }\n fn(...m[1]);\n },\n handleRequest: (requestData) => {\n const m = requestData;\n try {\n const result = this._getHandler().requests[m[0]](...m[1]);\n return { type: 'result', value: result };\n }\n catch (e) {\n return { type: 'error', value: e };\n }\n },\n });\n const requests = new Proxy({}, {\n get: (target, key) => {\n return async (...args) => {\n const result = await this._channel.sendRequest([key, args]);\n if (result.type === 'error') {\n throw result.value;\n }\n else {\n return result.value;\n }\n };\n }\n });\n const notifications = new Proxy({}, {\n get: (target, key) => {\n return (...args) => {\n this._channel.sendNotification([key, args]);\n };\n }\n });\n this.api = { notifications: notifications, requests: requests };\n }\n}\n\nexport { SimpleTypedRpcConnection };\n//# sourceMappingURL=rpc.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { SimpleTypedRpcConnection } from './rpc.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction registerDebugChannel(channelId, createClient) {\n const g = globalThis;\n let queuedNotifications = [];\n let curHost = undefined;\n const { channel, handler } = createChannelFactoryFromDebugChannel({\n sendNotification: (data) => {\n if (curHost) {\n curHost.sendNotification(data);\n }\n else {\n queuedNotifications.push(data);\n }\n },\n });\n let curClient = undefined;\n (g.$$debugValueEditor_debugChannels ?? (g.$$debugValueEditor_debugChannels = {}))[channelId] = (host) => {\n curClient = createClient();\n curHost = host;\n for (const n of queuedNotifications) {\n host.sendNotification(n);\n }\n queuedNotifications = [];\n return handler;\n };\n return SimpleTypedRpcConnection.createClient(channel, () => {\n if (!curClient) {\n throw new Error('Not supported');\n }\n return curClient;\n });\n}\nfunction createChannelFactoryFromDebugChannel(host) {\n let h;\n const channel = (handler) => {\n h = handler;\n return {\n sendNotification: data => {\n host.sendNotification(data);\n },\n sendRequest: data => {\n throw new Error('not supported');\n },\n };\n };\n return {\n channel: channel,\n handler: {\n handleRequest: (data) => {\n if (data.type === 'notification') {\n return h?.handleNotification(data.data);\n }\n else {\n return h?.handleRequest(data.data);\n }\n },\n },\n };\n}\n\nexport { registerDebugChannel };\n//# sourceMappingURL=debuggerRpc.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass Throttler {\n constructor() {\n this._timeout = undefined;\n }\n throttle(fn, timeoutMs) {\n if (this._timeout === undefined) {\n this._timeout = setTimeout(() => {\n this._timeout = undefined;\n fn();\n }, timeoutMs);\n }\n }\n dispose() {\n if (this._timeout !== undefined) {\n clearTimeout(this._timeout);\n }\n }\n}\nfunction deepAssign(target, source) {\n for (const key in source) {\n if (!!target[key] && typeof target[key] === 'object' && !!source[key] && typeof source[key] === 'object') {\n deepAssign(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n }\n}\nfunction deepAssignDeleteNulls(target, source) {\n for (const key in source) {\n if (source[key] === null) {\n delete target[key];\n }\n else if (!!target[key] && typeof target[key] === 'object' && !!source[key] && typeof source[key] === 'object') {\n deepAssignDeleteNulls(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n }\n}\n\nexport { Throttler, deepAssign, deepAssignDeleteNulls };\n//# sourceMappingURL=utils.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { AutorunObserver } from '../../reactions/autorunImpl.js';\nimport { formatValue } from '../consoleObservableLogger.js';\nimport { registerDebugChannel } from './debuggerRpc.js';\nimport { Throttler, deepAssignDeleteNulls, deepAssign } from './utils.js';\nimport { FromEventObservable } from '../../observables/observableFromEvent.js';\nimport { onUnexpectedError, BugIndicatingError, isDefined } from '../../commonFacade/deps.js';\nimport { Derived } from '../../observables/derivedImpl.js';\nimport { ObservableValue } from '../../observables/observableValue.js';\nimport { DebugLocation } from '../../debugLocation.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass DevToolsLogger {\n static getInstance() {\n if (DevToolsLogger._instance === undefined) {\n DevToolsLogger._instance = new DevToolsLogger();\n }\n return DevToolsLogger._instance;\n }\n getTransactionState() {\n const affected = [];\n const txs = [...this._activeTransactions];\n if (txs.length === 0) {\n return undefined;\n }\n const observerQueue = txs.flatMap(t => t.debugGetUpdatingObservers() ?? []).map(o => o.observer);\n const processedObservers = new Set();\n while (observerQueue.length > 0) {\n const observer = observerQueue.shift();\n if (processedObservers.has(observer)) {\n continue;\n }\n processedObservers.add(observer);\n const state = this._getInfo(observer, d => {\n if (!processedObservers.has(d)) {\n observerQueue.push(d);\n }\n });\n if (state) {\n affected.push(state);\n }\n }\n return { names: txs.map(t => t.getDebugName() ?? 'tx'), affected };\n }\n _getObservableInfo(observable) {\n const info = this._instanceInfos.get(observable);\n if (!info) {\n onUnexpectedError(new BugIndicatingError('No info found'));\n return undefined;\n }\n return info;\n }\n _getAutorunInfo(autorun) {\n const info = this._instanceInfos.get(autorun);\n if (!info) {\n onUnexpectedError(new BugIndicatingError('No info found'));\n return undefined;\n }\n return info;\n }\n _getInfo(observer, queue) {\n if (observer instanceof Derived) {\n const observersToUpdate = [...observer.debugGetObservers()];\n for (const o of observersToUpdate) {\n queue(o);\n }\n const info = this._getObservableInfo(observer);\n if (!info) {\n return;\n }\n const observerState = observer.debugGetState();\n const base = { name: observer.debugName, instanceId: info.instanceId, updateCount: observerState.updateCount };\n const changedDependencies = [...info.changedObservables].map(o => this._instanceInfos.get(o)?.instanceId).filter(isDefined);\n if (observerState.isComputing) {\n return { ...base, type: 'observable/derived', state: 'updating', changedDependencies, initialComputation: false };\n }\n switch (observerState.state) {\n case 0 /* DerivedState.initial */:\n return { ...base, type: 'observable/derived', state: 'noValue' };\n case 3 /* DerivedState.upToDate */:\n return { ...base, type: 'observable/derived', state: 'upToDate' };\n case 2 /* DerivedState.stale */:\n return { ...base, type: 'observable/derived', state: 'stale', changedDependencies };\n case 1 /* DerivedState.dependenciesMightHaveChanged */:\n return { ...base, type: 'observable/derived', state: 'possiblyStale' };\n }\n }\n else if (observer instanceof AutorunObserver) {\n const info = this._getAutorunInfo(observer);\n if (!info) {\n return undefined;\n }\n const base = { name: observer.debugName, instanceId: info.instanceId, updateCount: info.updateCount };\n const changedDependencies = [...info.changedObservables].map(o => this._instanceInfos.get(o).instanceId);\n if (observer.debugGetState().isRunning) {\n return { ...base, type: 'autorun', state: 'updating', changedDependencies };\n }\n switch (observer.debugGetState().state) {\n case 3 /* AutorunState.upToDate */:\n return { ...base, type: 'autorun', state: 'upToDate' };\n case 2 /* AutorunState.stale */:\n return { ...base, type: 'autorun', state: 'stale', changedDependencies };\n case 1 /* AutorunState.dependenciesMightHaveChanged */:\n return { ...base, type: 'autorun', state: 'possiblyStale' };\n }\n }\n return undefined;\n }\n _formatObservable(obs) {\n const info = this._getObservableInfo(obs);\n if (!info) {\n return undefined;\n }\n return { name: obs.debugName, instanceId: info.instanceId };\n }\n _formatObserver(obs) {\n if (obs instanceof Derived) {\n return { name: obs.toString(), instanceId: this._getObservableInfo(obs)?.instanceId };\n }\n const autorunInfo = this._getAutorunInfo(obs);\n if (autorunInfo) {\n return { name: obs.toString(), instanceId: autorunInfo.instanceId };\n }\n return undefined;\n }\n constructor() {\n this._declarationId = 0;\n this._instanceId = 0;\n this._declarations = new Map();\n this._instanceInfos = new WeakMap();\n this._aliveInstances = new Map();\n this._activeTransactions = new Set();\n this._channel = registerDebugChannel('observableDevTools', () => {\n return {\n notifications: {\n setDeclarationIdFilter: declarationIds => {\n },\n logObservableValue: (observableId) => {\n console.log('logObservableValue', observableId);\n },\n flushUpdates: () => {\n this._flushUpdates();\n },\n resetUpdates: () => {\n this._pendingChanges = null;\n this._channel.api.notifications.handleChange(this._fullState, true);\n },\n },\n requests: {\n getDeclarations: () => {\n const result = {};\n for (const decl of this._declarations.values()) {\n result[decl.id] = decl;\n }\n return { decls: result };\n },\n getSummarizedInstances: () => {\n return null;\n },\n getObservableValueInfo: instanceId => {\n const obs = this._aliveInstances.get(instanceId);\n return {\n observers: [...obs.debugGetObservers()].map(d => this._formatObserver(d)).filter(isDefined),\n };\n },\n getDerivedInfo: instanceId => {\n const d = this._aliveInstances.get(instanceId);\n return {\n dependencies: [...d.debugGetState().dependencies].map(d => this._formatObservable(d)).filter(isDefined),\n observers: [...d.debugGetObservers()].map(d => this._formatObserver(d)).filter(isDefined),\n };\n },\n getAutorunInfo: instanceId => {\n const obs = this._aliveInstances.get(instanceId);\n return {\n dependencies: [...obs.debugGetState().dependencies].map(d => this._formatObservable(d)).filter(isDefined),\n };\n },\n getTransactionState: () => {\n return this.getTransactionState();\n },\n setValue: (instanceId, jsonValue) => {\n const obs = this._aliveInstances.get(instanceId);\n if (obs instanceof Derived) {\n obs.debugSetValue(jsonValue);\n }\n else if (obs instanceof ObservableValue) {\n obs.debugSetValue(jsonValue);\n }\n else if (obs instanceof FromEventObservable) {\n obs.debugSetValue(jsonValue);\n }\n else {\n throw new BugIndicatingError('Observable is not supported');\n }\n const observers = [...obs.debugGetObservers()];\n for (const d of observers) {\n d.beginUpdate(obs);\n }\n for (const d of observers) {\n d.handleChange(obs, undefined);\n }\n for (const d of observers) {\n d.endUpdate(obs);\n }\n },\n getValue: instanceId => {\n const obs = this._aliveInstances.get(instanceId);\n if (obs instanceof Derived) {\n return formatValue(obs.debugGetState().value, 200);\n }\n else if (obs instanceof ObservableValue) {\n return formatValue(obs.debugGetState().value, 200);\n }\n return undefined;\n },\n logValue: (instanceId) => {\n const obs = this._aliveInstances.get(instanceId);\n if (obs && 'get' in obs) {\n console.log('Logged Value:', obs.get());\n }\n else {\n throw new BugIndicatingError('Observable is not supported');\n }\n },\n rerun: (instanceId) => {\n const obs = this._aliveInstances.get(instanceId);\n if (obs instanceof Derived) {\n obs.debugRecompute();\n }\n else if (obs instanceof AutorunObserver) {\n obs.debugRerun();\n }\n else {\n throw new BugIndicatingError('Observable is not supported');\n }\n },\n }\n };\n });\n this._pendingChanges = null;\n this._changeThrottler = new Throttler();\n this._fullState = {};\n this._flushUpdates = () => {\n if (this._pendingChanges !== null) {\n this._channel.api.notifications.handleChange(this._pendingChanges, false);\n this._pendingChanges = null;\n }\n };\n DebugLocation.enable();\n }\n _handleChange(update) {\n deepAssignDeleteNulls(this._fullState, update);\n if (this._pendingChanges === null) {\n this._pendingChanges = update;\n }\n else {\n deepAssign(this._pendingChanges, update);\n }\n this._changeThrottler.throttle(this._flushUpdates, 10);\n }\n _getDeclarationId(type, location) {\n if (!location) {\n return -1;\n }\n let decInfo = this._declarations.get(location.id);\n if (decInfo === undefined) {\n decInfo = {\n id: this._declarationId++,\n type,\n url: location.fileName,\n line: location.line,\n column: location.column,\n };\n this._declarations.set(location.id, decInfo);\n this._handleChange({ decls: { [decInfo.id]: decInfo } });\n }\n return decInfo.id;\n }\n handleObservableCreated(observable, location) {\n const declarationId = this._getDeclarationId('observable/value', location);\n const info = {\n declarationId,\n instanceId: this._instanceId++,\n listenerCount: 0,\n lastValue: undefined,\n updateCount: 0,\n changedObservables: new Set(),\n };\n this._instanceInfos.set(observable, info);\n }\n handleOnListenerCountChanged(observable, newCount) {\n const info = this._getObservableInfo(observable);\n if (!info) {\n return;\n }\n if (info.listenerCount === 0 && newCount > 0) {\n const type = observable instanceof Derived ? 'observable/derived' : 'observable/value';\n this._aliveInstances.set(info.instanceId, observable);\n this._handleChange({\n instances: {\n [info.instanceId]: {\n instanceId: info.instanceId,\n declarationId: info.declarationId,\n formattedValue: info.lastValue,\n type,\n name: observable.debugName,\n }\n }\n });\n }\n else if (info.listenerCount > 0 && newCount === 0) {\n this._handleChange({\n instances: { [info.instanceId]: null }\n });\n this._aliveInstances.delete(info.instanceId);\n }\n info.listenerCount = newCount;\n }\n handleObservableUpdated(observable, changeInfo) {\n if (observable instanceof Derived) {\n this._handleDerivedRecomputed(observable, changeInfo);\n return;\n }\n const info = this._getObservableInfo(observable);\n if (info) {\n if (changeInfo.didChange) {\n info.lastValue = formatValue(changeInfo.newValue, 30);\n if (info.listenerCount > 0) {\n this._handleChange({\n instances: { [info.instanceId]: { formattedValue: info.lastValue } }\n });\n }\n }\n }\n }\n handleAutorunCreated(autorun, location) {\n const declarationId = this._getDeclarationId('autorun', location);\n const info = {\n declarationId,\n instanceId: this._instanceId++,\n updateCount: 0,\n changedObservables: new Set(),\n };\n this._instanceInfos.set(autorun, info);\n this._aliveInstances.set(info.instanceId, autorun);\n if (info) {\n this._handleChange({\n instances: {\n [info.instanceId]: {\n instanceId: info.instanceId,\n declarationId: info.declarationId,\n runCount: 0,\n type: 'autorun',\n name: autorun.debugName,\n }\n }\n });\n }\n }\n handleAutorunDisposed(autorun) {\n const info = this._getAutorunInfo(autorun);\n if (!info) {\n return;\n }\n this._handleChange({\n instances: { [info.instanceId]: null }\n });\n this._instanceInfos.delete(autorun);\n this._aliveInstances.delete(info.instanceId);\n }\n handleAutorunDependencyChanged(autorun, observable, change) {\n const info = this._getAutorunInfo(autorun);\n if (!info) {\n return;\n }\n info.changedObservables.add(observable);\n }\n handleAutorunStarted(autorun) {\n }\n handleAutorunFinished(autorun) {\n const info = this._getAutorunInfo(autorun);\n if (!info) {\n return;\n }\n info.changedObservables.clear();\n info.updateCount++;\n this._handleChange({\n instances: { [info.instanceId]: { runCount: info.updateCount } }\n });\n }\n handleDerivedDependencyChanged(derived, observable, change) {\n const info = this._getObservableInfo(derived);\n if (info) {\n info.changedObservables.add(observable);\n }\n }\n _handleDerivedRecomputed(observable, changeInfo) {\n const info = this._getObservableInfo(observable);\n if (!info) {\n return;\n }\n const formattedValue = formatValue(changeInfo.newValue, 30);\n info.updateCount++;\n info.changedObservables.clear();\n info.lastValue = formattedValue;\n if (info.listenerCount > 0) {\n this._handleChange({\n instances: { [info.instanceId]: { formattedValue: formattedValue, recomputationCount: info.updateCount } }\n });\n }\n }\n handleDerivedCleared(observable) {\n const info = this._getObservableInfo(observable);\n if (!info) {\n return;\n }\n info.lastValue = undefined;\n info.changedObservables.clear();\n if (info.listenerCount > 0) {\n this._handleChange({\n instances: {\n [info.instanceId]: {\n formattedValue: undefined,\n }\n }\n });\n }\n }\n handleBeginTransaction(transaction) {\n this._activeTransactions.add(transaction);\n }\n handleEndTransaction(transaction) {\n this._activeTransactions.delete(transaction);\n }\n}\nDevToolsLogger._instance = undefined;\n\nexport { DevToolsLogger };\n//# sourceMappingURL=devToolsLogger.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Derived } from '../observables/derivedImpl.js';\nimport { FromEventObservable } from '../observables/observableFromEvent.js';\nimport { ObservableValue } from '../observables/observableValue.js';\nimport { AutorunObserver } from '../reactions/autorunImpl.js';\nimport { formatValue } from './consoleObservableLogger.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction debugGetDependencyGraph(obs, options) {\n const debugNamePostProcessor = options?.debugNamePostProcessor ?? ((str) => str);\n const info = Info.from(obs, debugNamePostProcessor);\n if (!info) {\n return '';\n }\n const alreadyListed = new Set();\n return formatObservableInfo(info, 0, alreadyListed).trim();\n}\nfunction formatObservableInfo(info, indentLevel, alreadyListed) {\n const indent = '\\t\\t'.repeat(indentLevel);\n const lines = [];\n const isAlreadyListed = alreadyListed.has(info.sourceObj);\n if (isAlreadyListed) {\n lines.push(`${indent}* ${info.type} ${info.name} (already listed)`);\n return lines.join('\\n');\n }\n alreadyListed.add(info.sourceObj);\n lines.push(`${indent}* ${info.type} ${info.name}:`);\n lines.push(`${indent} value: ${formatValue(info.value, 50)}`);\n lines.push(`${indent} state: ${info.state}`);\n if (info.dependencies.length > 0) {\n lines.push(`${indent} dependencies:`);\n for (const dep of info.dependencies) {\n lines.push(formatObservableInfo(dep, indentLevel + 1, alreadyListed));\n }\n }\n return lines.join('\\n');\n}\nclass Info {\n static from(obs, debugNamePostProcessor) {\n if (obs instanceof AutorunObserver) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'autorun', undefined, state.stateStr, Array.from(state.dependencies).map(dep => Info.from(dep, debugNamePostProcessor) || Info.unknown(dep)));\n }\n else if (obs instanceof Derived) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'derived', state.value, state.stateStr, Array.from(state.dependencies).map(dep => Info.from(dep, debugNamePostProcessor) || Info.unknown(dep)));\n }\n else if (obs instanceof ObservableValue) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'observableValue', state.value, 'upToDate', []);\n }\n else if (obs instanceof FromEventObservable) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'fromEvent', state.value, state.hasValue ? 'upToDate' : 'initial', []);\n }\n return undefined;\n }\n static unknown(obs) {\n return new Info(obs, '(unknown)', 'unknown', undefined, 'unknown', []);\n }\n constructor(sourceObj, name, type, value, state, dependencies) {\n this.sourceObj = sourceObj;\n this.name = name;\n this.type = type;\n this.value = value;\n this.state = state;\n this.dependencies = dependencies;\n }\n}\n\nexport { debugGetDependencyGraph };\n//# sourceMappingURL=debugGetDependencyGraph.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { addLogger, setLogObservableFn } from './logging/logging.js';\nimport { _setDebugGetDependencyGraph } from './observables/baseObservable.js';\nexport { DebugLocation } from './debugLocation.js';\nexport { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore } from './observables/derived.js';\nexport { debouncedObservable, debouncedObservableDeprecated, derivedObservableWithCache, derivedObservableWithWritableCache, keepObserved, mapObservableArrayCached, observableFromPromise, recomputeInitiallyAndOnChange, signalFromObservable, wasEventTriggeredRecently } from './utils/utils.js';\nexport { observableFromEvent, observableFromEventOpts } from './observables/observableFromEvent.js';\nimport { logObservableToConsole } from './logging/consoleObservableLogger.js';\nimport { DevToolsLogger } from './logging/debugger/devToolsLogger.js';\nimport { debugGetDependencyGraph } from './logging/debugGetDependencyGraph.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// This is a facade for the observable implementation. Only import from here!\n_setDebugGetDependencyGraph(debugGetDependencyGraph);\nsetLogObservableFn(logObservableToConsole);\n// To debug observables you also need the extension \"ms-vscode.debug-value-editor\"\naddLogger(DevToolsLogger.getInstance());\n//# sourceMappingURL=index.js.map\n","import { observableValue, derived, type IObservable, type IReader } from '@vscode/observables';\nimport type { FixtureExport } from './fixtureApi.js';\nimport { type ComponentDefinition } from './fixtureApiConsumer.js';\nimport { createFixtureTree, findNodeByPath, type FixtureNode } from './FixtureNode.js';\n\n/**\n * Registry for discovered fixtures.\n * Holds the fixture tree as an observable for reactivity.\n */\nexport class FixtureRegistry {\n private readonly _fixtures = observableValue<Map<string, FixtureExport>>(this, new Map());\n\n /** Observable root of the fixture tree */\n readonly root: IObservable<FixtureNode> = derived(this, (reader) => {\n const fixtures = this._fixtures.read(reader);\n return createFixtureTree(fixtures);\n });\n\n /**\n * Registers a fixture file.\n * @param path The file path (e.g., 'components/Button.fixture.tsx')\n * @param fixtureExport The exported fixture object\n */\n register(path: string, fixtureExport: FixtureExport): void {\n const fixtures = new Map(this._fixtures.get());\n fixtures.set(path, fixtureExport);\n this._fixtures.set(fixtures, undefined);\n }\n\n /**\n * Unregisters a fixture file.\n * @param path The file path to remove\n */\n unregister(path: string): void {\n const fixtures = new Map(this._fixtures.get());\n if (fixtures.delete(path)) {\n this._fixtures.set(fixtures, undefined);\n }\n }\n\n /**\n * Clears all registered fixtures.\n */\n clear(): void {\n this._fixtures.set(new Map(), undefined);\n }\n\n /**\n * Gets a node by path.\n */\n getNode(reader: IReader, path: string[]): FixtureNode | undefined {\n const root = this.root.read(reader);\n return findNodeByPath(root, path);\n }\n\n /**\n * Gets a component by path (non-reactive, for use in preview iframe).\n * @param path Array of path segments (e.g., ['Button', 'Primary'])\n */\n getComponentByPath(path: string[]): ComponentDefinition | undefined {\n const fixtures = this._fixtures.get();\n const tree = createFixtureTree(fixtures);\n const node = findNodeByPath(tree, path);\n return node?.component;\n }\n}\n","import type { FixtureNode } from './FixtureNode.js';\nimport type { FixtureExport, IDisposable } from './fixtureApi.js';\nimport type { ErrorInfo, RenderResult } from './ErrorInfo.js';\nimport { createFixtureTree } from './FixtureNode.js';\nimport { getDefaultPropertyValues } from './PropertySchema.js';\n\nexport interface FixtureModules {\n\t[path: string]: { default?: unknown };\n}\n\ninterface FlatFixture {\n\treadonly fixtureId: string;\n\treadonly fixtureName: string;\n\treadonly groupPath: string[];\n}\n\ninterface CliApi {\n\treadonly sessionId: string;\n\treadonly updateVersion: number;\n\tlistFixtures(): FlatFixture[];\n\trenderFixture(fixtureId: string): Promise<RenderResult>;\n}\n\ndeclare global {\n\tinterface Window {\n\t\t__componentExplorerCli__?: CliApi;\n\t}\n}\n\n/**\n * Runtime for the CLI/screenshot mode.\n * Manages fixture registration, rendering, and HMR versioning.\n * Installs itself as `window.__componentExplorerCli__`.\n */\nexport class CliRuntime {\n\treadonly sessionId = Math.random().toString(36).slice(2);\n\tprivate _updateVersion = 0;\n\tprivate _root: FixtureNode;\n\tprivate _fixtureModules: FixtureModules;\n\tprivate _currentDisposable: IDisposable | undefined;\n\tprivate _currentContainer: HTMLElement | undefined;\n\n\tconstructor(\n\t\tprivate readonly _containerElement: HTMLElement,\n\t\tfixtureModules: FixtureModules,\n\t) {\n\t\tthis._fixtureModules = fixtureModules;\n\t\tthis._root = this._buildRegistry();\n\t\tthis._installGlobalApi();\n\n\t\tconst count = this._flattenFixtures(this._root).length;\n\t\tconsole.log('[cli] CLI entry initialized, sessionId:', this.sessionId, 'version:', this._updateVersion, 'fixtures:', count);\n\t}\n\n\tget updateVersion(): number {\n\t\treturn this._updateVersion;\n\t}\n\n\tupdateFixtures(fixtureModules: FixtureModules): void {\n\t\tthis._fixtureModules = fixtureModules;\n\t\tthis._root = this._buildRegistry();\n\t\tthis._updateVersion++;\n\t\tconst count = this._flattenFixtures(this._root).length;\n\t\tconsole.log('[cli] Registry rebuilt, version:', this._updateVersion, 'fixtures:', count);\n\t}\n\n\tbumpVersion(): void {\n\t\tthis._updateVersion++;\n\t\tconsole.log('[cli] Version bumped:', this._updateVersion);\n\t}\n\n\tlistFixtures(): FlatFixture[] {\n\t\treturn this._flattenFixtures(this._root);\n\t}\n\n\tasync renderFixture(fixtureId: string): Promise<RenderResult> {\n\t\tconst node = this._findFixtureNode(this._root, fixtureId);\n\t\tif (!node || !node.component) {\n\t\t\tthrow new Error('Fixture not found: ' + fixtureId);\n\t\t}\n\n\t\tif (this._currentDisposable) {\n\t\t\tthis._currentDisposable.dispose();\n\t\t\tthis._currentDisposable = undefined;\n\t\t}\n\t\tif (this._currentContainer) {\n\t\t\tthis._currentContainer.remove();\n\t\t\tthis._currentContainer = undefined;\n\t\t}\n\n\t\tconst container = document.createElement('div');\n\t\tcontainer.style.display = 'inline-block';\n\t\tthis._containerElement.appendChild(container);\n\t\tthis._currentContainer = container;\n\n\t\tconst def = node.component;\n\t\tconst defaultProps = getDefaultPropertyValues(def.properties);\n\n\t\tlet renderTarget = container;\n\t\tif (def.isolation === 'shadow-dom') {\n\t\t\tconst shadow = container.attachShadow({ mode: 'open' });\n\t\t\trenderTarget = document.createElement('div');\n\t\t\tshadow.appendChild(renderTarget);\n\t\t}\n\n\t\t// Capture errors during rendering\n\t\tconst errors: ErrorInfo[] = [];\n\n\t\t// Intercept console.error and console.warn\n\t\tconst originalError = console.error;\n\t\tconst originalWarn = console.warn;\n\t\tconsole.error = (...args: unknown[]) => {\n\t\t\terrors.push({ kind: 'console', level: 'error', message: args.map(String).join(' ') });\n\t\t\toriginalError.apply(console, args);\n\t\t};\n\t\tconsole.warn = (...args: unknown[]) => {\n\t\t\terrors.push({ kind: 'console', level: 'warn', message: args.map(String).join(' ') });\n\t\t\toriginalWarn.apply(console, args);\n\t\t};\n\n\t\t// Capture unhandled errors during render\n\t\tconst errorHandler = (event: ErrorEvent) => {\n\t\t\terrors.push({ kind: 'exception', message: event.message, stack: event.error?.stack });\n\t\t};\n\t\tconst rejectionHandler = (event: PromiseRejectionEvent) => {\n\t\t\tconst reason = event.reason;\n\t\t\tconst message = reason instanceof Error ? reason.message : String(reason);\n\t\t\tconst stack = reason instanceof Error ? reason.stack : undefined;\n\t\t\terrors.push({ kind: 'exception', message, stack });\n\t\t};\n\t\twindow.addEventListener('error', errorHandler);\n\t\twindow.addEventListener('unhandledrejection', rejectionHandler);\n\n\t\ttry {\n\t\t\tconst result = def.render(renderTarget, defaultProps);\n\t\t\tthis._currentDisposable = result && typeof result === 'object' && 'dispose' in result ? result as IDisposable : undefined;\n\t\t} catch (e) {\n\t\t\tconst err = e instanceof Error ? e : new Error(String(e));\n\t\t\terrors.push({ kind: 'exception', message: err.message, stack: err.stack });\n\t\t} finally {\n\t\t\t// Restore original console methods\n\t\t\tconsole.error = originalError;\n\t\t\tconsole.warn = originalWarn;\n\t\t}\n\n\t\t// Wait two animation frames for React to finish rendering\n\t\tawait new Promise<void>(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve())));\n\n\t\t// Remove error handlers after render settles\n\t\twindow.removeEventListener('error', errorHandler);\n\t\twindow.removeEventListener('unhandledrejection', rejectionHandler);\n\n\t\treturn { errors };\n\t}\n\n\tprivate _buildRegistry(): FixtureNode {\n\t\tconst fixtures = new Map<string, FixtureExport>();\n\t\tfor (const [path, module] of Object.entries(this._fixtureModules)) {\n\t\t\tconst fixture = module.default;\n\t\t\tif (fixture && typeof fixture === 'object') {\n\t\t\t\tfixtures.set(path, fixture as FixtureExport);\n\t\t\t}\n\t\t}\n\t\treturn createFixtureTree(fixtures);\n\t}\n\n\tprivate _flattenFixtures(node: FixtureNode, groupPath: string[] = []): FlatFixture[] {\n\t\tconst results: FlatFixture[] = [];\n\t\tif (node.type === 'component') {\n\t\t\tresults.push({ fixtureId: node.id, fixtureName: node.name, groupPath });\n\t\t}\n\t\tfor (const child of node.children ?? []) {\n\t\t\tconst nextPath = node.id ? [...groupPath, node.name] : groupPath;\n\t\t\tresults.push(...this._flattenFixtures(child, nextPath));\n\t\t}\n\t\treturn results;\n\t}\n\n\tprivate _findFixtureNode(node: FixtureNode, fixtureId: string): FixtureNode | undefined {\n\t\tif (node.id === fixtureId) return node;\n\t\tfor (const child of node.children ?? []) {\n\t\t\tconst found = this._findFixtureNode(child, fixtureId);\n\t\t\tif (found) return found;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _installGlobalApi(): void {\n\t\twindow.__componentExplorerCli__ = {\n\t\t\tsessionId: this.sessionId,\n\t\t\tget updateVersion() { return 0; },\n\t\t\tlistFixtures: () => this.listFixtures(),\n\t\t\trenderFixture: (id) => this.renderFixture(id),\n\t\t};\n\t\t// Use a property descriptor so `updateVersion` reads live from this instance\n\t\tObject.defineProperty(window.__componentExplorerCli__, 'updateVersion', {\n\t\t\tget: () => this._updateVersion,\n\t\t});\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass ManualChangesHandler {\n constructor(_run) {\n this._run = _run;\n this._changes = [];\n this._map = new Map();\n this._updateCounter = 0;\n }\n addDependency(observable, data) {\n this._map.set(observable, data);\n observable.addObserver(this);\n return {\n dispose: () => {\n this._map.delete(observable);\n observable.removeObserver(this);\n }\n };\n }\n beginUpdate(observable) {\n this._updateCounter++;\n this._changes.push(this._map.get(observable));\n }\n endUpdate(_observable) {\n this._updateCounter--;\n if (this._updateCounter === 0) {\n if (this._changes.length > 0) {\n const c = this._changes;\n this._changes = [];\n this._run(c);\n }\n }\n }\n handlePossibleChange(observable) {\n this._changes.push(this._map.get(observable));\n }\n handleChange(_observable, _change) {\n //this._changes.push(this._map.get(observable)!);\n }\n}\n\nexport { ManualChangesHandler };\n//# sourceMappingURL=ManualChangesHandler.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { derived } from '@vscode/observables';\n\n/**\n * Takes a value of type `T` and makes it available as `IObservable<T>`.\n * When it changes, the component will not re-render.\n */\nfunction prop() {\n return PropertyTransformerFactory.instance;\n}\n/**\n * Takes a value of type `T` and makes it available as `T`.\n * When it changes, the component will re-render.\n */\nfunction propConst() {\n return PropertyConstTransformerFactory.instance;\n}\n/**\n * Takes a value of type `T` or `IObservable<T>` and makes it available as `IObservable<T>`.\n * When it changes, the component will not re-render.\n */\nfunction propObs() {\n return PropertyObsTransformerFactory.instance;\n}\nprop.const = propConst;\nprop.obs = propObs;\nclass PropertyTransformerFactory {\n create(readableProp) {\n const d = derived(reader => readableProp(reader));\n return { read: (_reader) => d };\n }\n}\nPropertyTransformerFactory.instance = new PropertyTransformerFactory();\nclass PropertyConstTransformerFactory {\n create(readableProp) {\n const d = derived(reader => readableProp(reader));\n return { read: (reader) => d.read(reader) };\n }\n}\nPropertyConstTransformerFactory.instance = new PropertyConstTransformerFactory();\nclass PropertyObsTransformerFactory {\n create(readableProp) {\n const d = derived(reader => {\n const v = readableProp(reader);\n if (isObservable(v)) {\n return v.read(reader);\n }\n else {\n return v;\n }\n });\n return { read: (_reader) => d };\n }\n}\nPropertyObsTransformerFactory.instance = new PropertyObsTransformerFactory();\nfunction isObservable(obs) {\n return typeof obs === \"object\" && obs !== null && \"read\" in obs;\n}\n\nexport { prop };\n//# sourceMappingURL=IPropertyTransformer.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Maps over an object's values, returning a new object with the same keys\n * but transformed values.\n */\nfunction mapObject(obj, fn) {\n return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value, key)]));\n}\n\nexport { mapObject };\n//# sourceMappingURL=utils.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { DisposableStore } from '@vscode/observables';\nimport { createContext } from 'react';\n\n// Symbol to store the context on the ViewModel class\nconst ViewModelContextSymbol = Symbol('ViewModelContext');\nclass BaseViewModel {\n constructor(props) {\n this._store = new DisposableStore();\n this.props = props;\n }\n dispose() {\n this._store.dispose();\n }\n}\n/** Get or create the context for a ViewModel class */\nfunction getOrCreateViewModelContext(ctor) {\n if (!ctor[ViewModelContextSymbol]) {\n ctor[ViewModelContextSymbol] =\n createContext(undefined);\n }\n return ctor[ViewModelContextSymbol];\n}\nfunction ViewModel(props = {}) {\n var _a;\n return _a = class extends BaseViewModel {\n },\n _a._props = props,\n _a;\n}\n\nexport { BaseViewModel, ViewModel, ViewModelContextSymbol, getOrCreateViewModelContext };\n//# sourceMappingURL=viewModel.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { useReducer, useState, useContext, useEffect } from 'react';\nimport { observableValue, derived } from '@vscode/observables';\nimport { ManualChangesHandler } from './ManualChangesHandler.js';\nimport { unstable_batchedUpdates } from 'react-dom';\n\nlet renderingCount = 0;\nconst batchedUpdater = new ManualChangesHandler(potentialChanges => {\n for (const change of potentialChanges) {\n change.rendered = false;\n }\n if (renderingCount > 0) {\n const rendering = potentialChanges.find(c => c.isRendering);\n rendering.itemsToRender = potentialChanges;\n }\n else {\n unstable_batchedUpdates(() => {\n for (const change of potentialChanges) {\n if (!change.rendered) {\n change.forceUpdate();\n }\n }\n });\n }\n});\nlet viewIdx = 0;\nclass ViewImpl {\n constructor(debugName, renderFactory) {\n this.debugName = debugName;\n this.renderFactory = renderFactory;\n this._obsProps = undefined;\n this.forceUpdate = undefined;\n this._render = undefined;\n this._disposable = undefined;\n this.contextValues = new Map();\n this.cleanupEffect = () => {\n return () => {\n this._disposable?.dispose();\n };\n };\n this.itemsToRender = [];\n this.handleAfterRender = () => {\n unstable_batchedUpdates(() => {\n for (const change of this.itemsToRender) {\n if (!change.rendered) {\n change.forceUpdate();\n }\n }\n });\n this.itemsToRender = [];\n };\n this.rendering = undefined;\n this.isRendering = false;\n this.rendered = false;\n }\n toString() {\n return this.debugName;\n }\n updateProps(props) {\n if (!this._obsProps) {\n this._obsProps = observableValue(this, props);\n this._render = this.renderFactory(this._obsProps, () => this.contextValues);\n this.rendering = derived(this, this._render);\n this._disposable = batchedUpdater.addDependency(this.rendering, this);\n }\n else {\n this._obsProps.set(props, undefined);\n }\n }\n}\nfunction obsView(componentName, render, contexts) {\n const plusOne = (x) => x + 1;\n const createVM = () => new ViewImpl(componentName + (++viewIdx), render);\n const fn = function (props) {\n const forceUpdate = useReducer(plusOne, 0)[1];\n const state = useState(createVM)[0];\n // Read and update context values each render\n for (const ctx of contexts ?? []) {\n state.contextValues.set(ctx, useContext(ctx)); // eslint-disable-line react-hooks/rules-of-hooks\n }\n useEffect(state.cleanupEffect, []);\n useEffect(state.handleAfterRender);\n if (state.isRendering) {\n throw new Error(\"Component is already rendering\");\n }\n state.isRendering = true;\n renderingCount++;\n try {\n state.forceUpdate = forceUpdate;\n state.updateProps(props);\n const result = state.rendering.get();\n state.rendered = true;\n return result;\n }\n finally {\n state.isRendering = false;\n renderingCount--;\n }\n };\n fn.displayName = componentName;\n return fn;\n}\nconst ObsView = obsView('ObsView', (props) => reader => props.read(reader).children(reader));\n\nexport { ObsView, obsView };\n//# sourceMappingURL=obsView.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { obsView } from './obsView.js';\nimport { mapObject } from './utils.js';\n\n/**\n * Creates a React component with typed observable props.\n * Props are transformed according to their IPropertyTransformerFactory.\n */\nfunction view(props, render) {\n return obsView('view', (p) => {\n const readableProps = mapObject(props, (value, key) => {\n return value.create(reader => p.read(reader)[key], undefined);\n });\n return reader => {\n const propValues = mapObject(readableProps, (value) => {\n return value.read(reader);\n });\n return render(reader, propValues);\n };\n });\n}\n\nexport { view };\n//# sourceMappingURL=view.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { derivedDisposable } from '@vscode/observables';\nimport { obsView } from './obsView.js';\nimport { mapObject } from './utils.js';\nimport { getOrCreateViewModelContext } from './viewModel.js';\n\n/** Collect unique _requiredContext from transformers */\nfunction collectRequiredContexts(propsDesc) {\n const contexts = [];\n for (const t of Object.values(propsDesc)) {\n const ctx = t._requiredContext;\n if (ctx && !contexts.includes(ctx))\n contexts.push(ctx);\n }\n return contexts;\n}\nfunction viewWithModel(viewModelCtor, propsOrRender, maybeRender) {\n const props = typeof propsOrRender === 'function' ? {} : propsOrRender;\n const render = typeof propsOrRender === 'function' ? propsOrRender : maybeRender;\n const modelPropsDesc = '_props' in viewModelCtor ? viewModelCtor._props : {};\n const requiredContexts = collectRequiredContexts({ ...modelPropsDesc, ...props });\n // Always create the context so ProvideViewModel can work\n const viewModelContext = getOrCreateViewModelContext(viewModelCtor);\n const allContexts = [...requiredContexts, viewModelContext];\n return obsView('viewWithModel', (p, getContextValues) => {\n const contextValues = getContextValues();\n const providedModel = contextValues.get(viewModelContext);\n const readableModelProps = '_props' in viewModelCtor\n ? mapObject(viewModelCtor._props, (v, k) => v.create((r) => p.read(r)[k], contextValues.get(v._requiredContext)))\n : {};\n const model = providedModel\n ? { read: () => providedModel, dispose: () => { } }\n : derivedDisposable(reader => {\n const modelProps = mapObject(readableModelProps, (v) => v.read(reader));\n return new viewModelCtor(modelProps);\n });\n const readableProps = mapObject(props, (v, k) => v.create((r) => p.read(r)[k], contextValues.get(v._requiredContext)));\n return (reader) => {\n const m = model.read(reader);\n const propValues = mapObject(readableProps, (v) => v.read(reader));\n return render(reader, m, propValues);\n };\n }, allContexts.length > 0 ? allContexts : undefined);\n}\n\nexport { viewWithModel };\n//# sourceMappingURL=viewWithModel.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { jsx } from 'react/jsx-runtime';\nimport { prop } from './IPropertyTransformer.js';\nimport { view } from './view.js';\n\n/**\n * A component that renders an observable ReactNode value.\n * Re-renders when the observable changes.\n * Usage: <Value value={myObservable} />\n */\nconst Value = view({ value: prop.obs() }, (reader, props) => {\n return props.value.read(reader);\n});\n/**\n * Helper function to render an observable as inline JSX.\n * Usage: {val(myObservable)}\n */\nfunction val(v) {\n return jsx(Value, { value: v });\n}\n\nexport { Value, val };\n//# sourceMappingURL=Value.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { jsx } from 'react/jsx-runtime';\nimport { createContext, useContext } from 'react';\nimport { derived } from '@vscode/observables';\n\nfunction createServiceKey(nameOrCtor) {\n const name = typeof nameOrCtor === 'string' ? nameOrCtor : nameOrCtor.name;\n return { _brand: undefined, id: Symbol(name), name };\n}\n// =============================================================================\n// DI Container\n// =============================================================================\nclass DIContainer {\n constructor(parent = null) {\n this._services = new Map();\n this._parent = parent;\n }\n register(key, service) {\n this._services.set(key.id, service);\n return this;\n }\n get(key) {\n const service = this._services.get(key.id);\n if (service !== undefined)\n return service;\n if (this._parent)\n return this._parent.get(key);\n throw new Error(`Service \"${key.name}\" not registered`);\n }\n has(key) {\n return this._services.has(key.id) || (this._parent?.has(key) ?? false);\n }\n createChild() {\n return new DIContainer(this);\n }\n}\n// =============================================================================\n// React Context\n// =============================================================================\nconst DIContext = createContext(null);\nfunction DIProvider({ container, children }) {\n return jsx(DIContext.Provider, { value: container, children: children });\n}\nfunction useDIContainer() {\n const container = useContext(DIContext);\n if (!container)\n throw new Error(\"DIProvider not found\");\n return container;\n}\n// =============================================================================\n// inject() - Property Transformer for DI\n// =============================================================================\nclass InjectTransformerFactory {\n constructor(serviceKey) {\n this.serviceKey = serviceKey;\n this._requiredContext = DIContext;\n }\n create(readable, contextValue) {\n const container = contextValue;\n let cachedService;\n return derived(reader => {\n // Check if an explicit value was provided as a prop\n const explicitValue = readable(reader);\n if (explicitValue !== undefined) {\n return explicitValue;\n }\n // Otherwise, use DI container (cached)\n if (cachedService === undefined) {\n if (!container)\n throw new Error(`inject(${this.serviceKey.name}): DIProvider not found`);\n cachedService = container.get(this.serviceKey);\n }\n return cachedService;\n });\n }\n}\n/** Inject a service from DIContainer into a ViewModel property */\nfunction inject(key) {\n return new InjectTransformerFactory(key);\n}\n\nexport { DIContainer, DIContext, DIProvider, createServiceKey, inject, useDIContainer };\n//# sourceMappingURL=di.js.map\n","import type { FixtureNode, ComponentDefinition } from '../core/index.js';\n\n/**\n * Explorer's tree node structure, derived from FixtureNode.\n * This is the explorer's own representation of the fixture tree.\n */\nexport interface ExplorerTreeNode {\n readonly id: string;\n readonly name: string;\n readonly type: 'folder' | 'variants' | 'component';\n readonly children?: readonly ExplorerTreeNode[];\n readonly component?: ComponentDefinition;\n}\n\n/**\n * Converts a FixtureNode tree to ExplorerTreeNode tree.\n * This allows the explorer to have its own tree structure.\n */\nexport function toExplorerTree(node: FixtureNode): ExplorerTreeNode {\n return {\n id: node.id,\n name: node.name,\n type: node.type,\n children: node.children?.map(toExplorerTree),\n component: node.component,\n };\n}\n","import { observableValue, type ISettableObservable } from '@vscode/observables';\n\nexport interface LocalStorageObservableOptions<T> {\n readonly storageKey: string;\n readonly defaultValue: T;\n /** Serialize value to string for localStorage. Defaults to JSON.stringify. */\n readonly serialize?: (value: T) => string;\n /** Deserialize string from localStorage. Defaults to JSON.parse. */\n readonly deserialize?: (raw: string) => T;\n}\n\n/**\n * Creates an observable that persists its value to localStorage.\n * The value is loaded from localStorage on creation (if present),\n * and saved to localStorage whenever it changes.\n */\nexport function createLocalStorageObservable<T>(\n owner: object,\n options: LocalStorageObservableOptions<T>\n): ISettableObservable<T> {\n const {\n storageKey,\n defaultValue,\n serialize = JSON.stringify,\n deserialize = JSON.parse,\n } = options;\n\n // Try to load from localStorage\n let initialValue = defaultValue;\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored !== null) {\n initialValue = deserialize(stored);\n }\n } catch {\n // Ignore parse errors, use default\n }\n\n const obs = observableValue<T>(owner, initialValue);\n\n // Wrap the set method to persist to localStorage\n const originalSet = obs.set.bind(obs);\n obs.set = (value: T, tx: undefined) => {\n try {\n localStorage.setItem(storageKey, serialize(value));\n } catch {\n // Ignore storage errors (quota exceeded, etc.)\n }\n originalSet(value, tx);\n };\n\n return obs;\n}\n","import { observableValue, derived, IReader } from '@vscode/observables';\nimport { ViewModel, prop } from '@vscode/observables-react';\nimport type { FixtureRegistry, ComponentDefinition } from '../core/index.js';\nimport { type ExplorerTreeNode, toExplorerTree } from './types.js';\nimport { createLocalStorageObservable } from '../lib/localStorageObservable.js';\nimport type { DaemonModel } from '../daemon/index.js';\n\nexport type ViewMode = 'session' | 'diff';\n\n/**\n * A fixture item to be rendered in the preview area.\n */\nexport interface FixtureItem {\n readonly id: string;\n readonly name: string;\n readonly path: string;\n readonly component: ComponentDefinition;\n}\n\n/**\n * A screenshot comparison item for diff mode.\n */\nexport interface ScreenshotComparisonItem {\n readonly fixtureId: string;\n readonly name: string;\n readonly path: string;\n}\n\n/**\n * A preview row can be a live fixture, a variant group, or a screenshot comparison.\n */\nexport type PreviewRow =\n | { readonly type: 'single'; readonly fixture: FixtureItem }\n | { readonly type: 'variants'; readonly id: string; readonly name: string; readonly path: string; readonly fixtures: readonly FixtureItem[] }\n | { readonly type: 'screenshot-comparison'; readonly id: string; readonly name: string; readonly path: string; readonly items: readonly ScreenshotComparisonItem[] };\n\nexport class ExplorerModel extends ViewModel({\n registry: prop.const<FixtureRegistry>(),\n daemonModel: prop.const<DaemonModel | undefined>(),\n}) {\n readonly leftSidebarVisible = createLocalStorageObservable<boolean>(this, {\n storageKey: 'component-explorer:leftSidebarVisible',\n defaultValue: true,\n });\n readonly rightSidebarVisible = createLocalStorageObservable<boolean>(this, {\n storageKey: 'component-explorer:rightSidebarVisible',\n defaultValue: true,\n });\n readonly isDarkTheme = createLocalStorageObservable<boolean>(this, {\n storageKey: 'component-explorer:isDarkTheme',\n defaultValue: true,\n });\n readonly selectedNodeId = createLocalStorageObservable<string | undefined>(this, {\n storageKey: 'component-explorer:selectedNodeId',\n defaultValue: undefined,\n });\n readonly expandedNodeIds = observableValue<ReadonlySet<string>>(this, new Set());\n\n readonly viewMode = createLocalStorageObservable<ViewMode>(this, {\n storageKey: 'component-explorer:viewMode',\n defaultValue: 'session',\n });\n\n get daemonAvailable(): boolean { return this.props.daemonModel !== undefined; }\n get daemon(): DaemonModel | undefined { return this.props.daemonModel; }\n\n /** The explorer's tree derived from the registry */\n readonly tree = derived(this, (reader) => {\n const root = this.props.registry.root.read(reader);\n return toExplorerTree(root);\n });\n\n readonly selectedNode = derived(this, (reader) => {\n const nodeId = this.selectedNodeId.read(reader);\n if (!nodeId) return undefined;\n const tree = this.tree.read(reader);\n return this._findNode(tree.children ?? [], nodeId);\n });\n\n /** List of preview rows to render based on current selection and view mode */\n readonly selectedFixtures = derived(this, (reader): readonly PreviewRow[] => {\n const selectedNode = this.selectedNode.read(reader);\n if (!selectedNode) return [];\n\n const mode = this.viewMode.read(reader);\n if (mode === 'diff' && this.daemonAvailable) {\n return this._collectDiffRows(selectedNode, selectedNode.name);\n }\n\n return this._collectPreviewRows(selectedNode, selectedNode.name);\n });\n\n setViewMode = (mode: ViewMode): void => {\n this.viewMode.set(mode, undefined);\n };\n\n navigateToSession = (sessionName: string): void => {\n const daemon = this.props.daemonModel;\n if (!daemon) return;\n const url = daemon.getSessionExplorerUrl(sessionName);\n if (url) {\n window.location.href = url;\n }\n };\n\n toggleLeftSidebar = (): void => {\n this.leftSidebarVisible.set(!this.leftSidebarVisible.get(), undefined);\n };\n\n toggleRightSidebar = (): void => {\n this.rightSidebarVisible.set(!this.rightSidebarVisible.get(), undefined);\n };\n\n toggleTheme = (): void => {\n this.isDarkTheme.set(!this.isDarkTheme.get(), undefined);\n };\n\n selectNode = (nodeId: string): void => {\n this.selectedNodeId.set(nodeId, undefined);\n };\n\n toggleNodeExpanded = (nodeId: string): void => {\n const current = this.expandedNodeIds.get();\n const newSet = new Set(current);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n this.expandedNodeIds.set(newSet, undefined);\n };\n\n isNodeExpanded(nodeId: string, reader: IReader): boolean {\n return this.expandedNodeIds.read(reader).has(nodeId);\n }\n\n private _findNode(nodes: readonly ExplorerTreeNode[], id: string): ExplorerTreeNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children) {\n const found = this._findNode(node.children, id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n private _collectPreviewRows(node: ExplorerTreeNode, pathPrefix: string): PreviewRow[] {\n if (node.type === 'component' && node.component) {\n return [{\n type: 'single',\n fixture: {\n id: node.id,\n name: node.name,\n path: pathPrefix,\n component: node.component,\n },\n }];\n }\n\n if (node.type === 'variants') {\n // Collect all variant children as a single horizontal row\n const fixtures: FixtureItem[] = [];\n for (const child of node.children ?? []) {\n if (child.type === 'component' && child.component) {\n fixtures.push({\n id: child.id,\n name: child.name,\n path: `${pathPrefix} / ${child.name}`,\n component: child.component,\n });\n }\n }\n if (fixtures.length > 0) {\n return [{\n type: 'variants',\n id: node.id,\n name: node.name,\n path: pathPrefix,\n fixtures,\n }];\n }\n return [];\n }\n\n // Folder: recurse into children\n const result: PreviewRow[] = [];\n for (const child of node.children ?? []) {\n const childPath = pathPrefix ? `${pathPrefix} / ${child.name}` : child.name;\n result.push(...this._collectPreviewRows(child, childPath));\n }\n return result;\n }\n\n /**\n * In diff mode: fixtures become screenshot comparison items showing current vs baseline.\n * Variants become comparison groups.\n */\n private _collectDiffRows(node: ExplorerTreeNode, pathPrefix: string): PreviewRow[] {\n if (node.type === 'component') {\n return [{\n type: 'screenshot-comparison',\n id: node.id,\n name: node.name,\n path: pathPrefix,\n items: [{\n fixtureId: node.id,\n name: node.name,\n path: pathPrefix,\n }],\n }];\n }\n\n if (node.type === 'variants') {\n const items: ScreenshotComparisonItem[] = [];\n for (const child of node.children ?? []) {\n if (child.type === 'component') {\n items.push({\n fixtureId: child.id,\n name: child.name,\n path: `${pathPrefix} / ${child.name}`,\n });\n }\n }\n if (items.length > 0) {\n return [{\n type: 'screenshot-comparison',\n id: node.id,\n name: node.name,\n path: pathPrefix,\n items,\n }];\n }\n return [];\n }\n\n const result: PreviewRow[] = [];\n for (const child of node.children ?? []) {\n const childPath = pathPrefix ? `${pathPrefix} / ${child.name}` : child.name;\n result.push(...this._collectDiffRows(child, childPath));\n }\n return result;\n }\n}\n","import * as React from 'react';\n\nexport const styles = {\n container: {\n display: 'flex',\n flexDirection: 'row' as const,\n height: '100%',\n width: '100%',\n fontFamily: 'var(--vscode-font-family)',\n fontSize: 'var(--vscode-font-size)',\n color: 'var(--vscode-foreground)',\n backgroundColor: 'var(--vscode-editor-background)',\n },\n centerArea: {\n display: 'flex',\n flexDirection: 'column' as const,\n flex: 1,\n overflow: 'hidden',\n },\n titleBar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '35px',\n minHeight: '35px',\n padding: '0 10px',\n backgroundColor: 'var(--vscode-titleBar-activeBackground)',\n color: 'var(--vscode-titleBar-activeForeground)',\n borderBottom: '1px solid var(--vscode-titleBar-border, var(--vscode-panel-border))',\n },\n titleBarSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n },\n titleBarCenter: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '13px',\n fontWeight: 400,\n },\n titleBarButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n border: 'none',\n background: 'transparent',\n color: 'var(--vscode-titleBar-activeForeground)',\n cursor: 'pointer',\n borderRadius: '4px',\n },\n titleBarButtonHover: {\n backgroundColor: 'var(--vscode-toolbar-hoverBackground)',\n },\n titleBarButtonActive: {\n backgroundColor: 'var(--vscode-toolbar-activeBackground)',\n color: 'var(--vscode-focusBorder)',\n },\n sidebar: {\n display: 'flex',\n flexDirection: 'column' as const,\n width: '260px',\n minWidth: '200px',\n backgroundColor: 'var(--vscode-sideBar-background)',\n borderRight: '1px solid var(--vscode-titleBar-border, var(--vscode-panel-border))',\n },\n sidebarRight: {\n borderRight: 'none',\n borderLeft: '1px solid var(--vscode-titleBar-border, var(--vscode-panel-border))',\n },\n sidebarHeader: {\n display: 'flex',\n alignItems: 'center',\n height: '35px',\n minHeight: '35px',\n padding: '0 12px',\n fontSize: '11px',\n fontWeight: 700,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.04em',\n color: 'var(--vscode-titleBar-activeForeground)',\n backgroundColor: 'var(--vscode-titleBar-activeBackground)',\n borderBottom: '1px solid var(--vscode-titleBar-border, var(--vscode-panel-border))',\n },\n sidebarContent: {\n flex: 1,\n overflow: 'auto',\n padding: '4px 0',\n },\n treeItem: {\n display: 'flex',\n alignItems: 'center',\n height: '22px',\n paddingRight: '8px',\n cursor: 'pointer',\n userSelect: 'none' as const,\n },\n treeItemSelected: {\n backgroundColor: 'var(--vscode-list-activeSelectionBackground)',\n color: 'var(--vscode-list-activeSelectionForeground)',\n },\n treeItemHover: {\n backgroundColor: 'var(--vscode-list-hoverBackground)',\n },\n treeItemChevron: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n color: 'var(--vscode-foreground)',\n opacity: 0.8,\n cursor: 'pointer',\n },\n treeItemChevronPlaceholder: {\n width: '16px',\n },\n treeItemIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n marginRight: '4px',\n },\n treeItemLabel: {\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n fontSize: '13px',\n },\n treeItemCount: {\n marginLeft: '8px',\n fontSize: '11px',\n color: 'var(--vscode-descriptionForeground)',\n },\n mainContent: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--vscode-editor-background)',\n color: 'var(--vscode-descriptionForeground)',\n fontSize: '14px',\n },\n propertiesPanel: {\n padding: '12px',\n },\n propertyRow: {\n marginBottom: '12px',\n },\n propertyLabel: {\n fontSize: '12px',\n color: 'var(--vscode-foreground)',\n marginBottom: '4px',\n },\n propertyDescription: {\n fontSize: '11px',\n color: 'var(--vscode-descriptionForeground)',\n marginTop: '2px',\n },\n propertyInput: {\n width: '100%',\n height: '26px',\n padding: '0 8px',\n fontSize: '13px',\n color: 'var(--vscode-input-foreground)',\n backgroundColor: 'var(--vscode-input-background)',\n border: '1px solid var(--vscode-input-border, transparent)',\n borderRadius: '2px',\n outline: 'none',\n boxSizing: 'border-box' as const,\n },\n propertySelect: {\n width: '100%',\n height: '26px',\n padding: '0 8px',\n fontSize: '13px',\n color: 'var(--vscode-dropdown-foreground)',\n backgroundColor: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border)',\n borderRadius: '2px',\n outline: 'none',\n boxSizing: 'border-box' as const,\n cursor: 'pointer',\n },\n} as const;\n\n// Helper to merge styles\nexport function mergeStyles(...styleObjects: (React.CSSProperties | undefined | false)[]): React.CSSProperties {\n return Object.assign({}, ...styleObjects.filter(Boolean));\n}\n","import * as React from 'react';\nimport { observableValue } from '@vscode/observables';\nimport { viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport { styles, mergeStyles } from './styles.js';\n\nclass TitleBarButtonModel extends ViewModel({\n active: prop<boolean>(),\n}) {\n readonly isHovered = observableValue<boolean>(this, false);\n\n get active() { return this.props.active; }\n\n setHovered = (hovered: boolean): void => {\n this.isHovered.set(hovered, undefined);\n };\n}\n\nexport const TitleBarButton = viewWithModel(\n TitleBarButtonModel,\n {\n onClick: prop.const<() => void>(),\n title: prop.const<string>(),\n children: prop.const<React.ReactNode>(),\n },\n (reader, model, props) => {\n const isHovered = model.isHovered.read(reader);\n const active = model.active.read(reader);\n\n const buttonStyle = mergeStyles(\n styles.titleBarButton,\n isHovered && !active && styles.titleBarButtonHover,\n active && styles.titleBarButtonActive,\n );\n\n return (\n <button\n style={buttonStyle}\n onClick={props.onClick}\n title={props.title}\n onMouseEnter={() => model.setHovered(true)}\n onMouseLeave={() => model.setHovered(false)}\n >\n {props.children}\n </button>\n );\n }\n);\n","import * as React from 'react';\n\nexport const ChevronRightIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style={style}>\n <path d=\"M5.7 13.7L5 13l4.6-4.6L5 3.7l.7-.7 5.3 5.4-5.3 5.3z\" />\n </svg>\n);\n\nexport const ChevronDownIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style={style}>\n <path d=\"M11 5.5L6 10.5L5.3 9.8L9.6 5.5L5.3 1.2L6 0.5L11 5.5z\" transform=\"rotate(90 8 5.5)\" />\n </svg>\n);\n\nexport const ComponentIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style={style}>\n <path d=\"M14.5 2H9l-.35.15-.65.64-.65-.64L7 2H1.5l-.5.5v10l.5.5H7l.35-.15.65-.64.65.64.35.15h5.5l.5-.5v-10l-.5-.5zm-7 10H2V3h5v.86L5.85 5l1.15 1.14V10l-1.15-1.14L7 7.72V12zm6 0H8V7.72l1.15 1.14L8 10V6.14L9.15 5 8 3.86V3h5v9z\" />\n </svg>\n);\n\nexport const FolderIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style={style}>\n <path d=\"M14.5 3H7.71l-.85-.85L6.5 2h-5l-.5.5v11l.5.5h13l.5-.5v-10l-.5-.5zm-.5 10H2V6h12v7zm0-8H2V3h4.29l.85.85.36.15H14v1z\" />\n </svg>\n);\n\nexport const PanelLeftIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 2v12h12V2H2zm11 11H6V3h7v10zM3 3h2v10H3V3z\" />\n </svg>\n);\n\nexport const PanelRightIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 2v12h12V2H2zm6 11V3h5v10H8zM3 3h4v10H3V3z\" />\n </svg>\n);\n\nexport const SunIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z\" />\n </svg>\n);\n\nexport const MoonIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z\" />\n </svg>\n);\n","import { view, prop } from '@vscode/observables-react';\nimport { styles } from './styles.js';\nimport { TitleBarButton } from './TitleBarButton.js';\nimport { PanelLeftIcon, PanelRightIcon, SunIcon, MoonIcon } from './icons.js';\nimport type { ExplorerModel, ViewMode } from './ExplorerModel.js';\n\nconst ViewModeSelector = view(\n { model: prop.const<ExplorerModel>() },\n (reader, props) => {\n const model = props.model;\n const viewMode = model.viewMode.read(reader);\n\n const sessions = model.daemon?.sessions.read(reader) ?? [];\n const currentSession = model.daemon?.sessionName;\n const otherSessions = sessions.filter(s => s.name !== currentSession);\n\n return (\n <div style={viewModeStyles.container}>\n <div style={viewModeStyles.segmentedControl}>\n <ViewModeButton label=\"Live\" mode=\"session\" active={viewMode === 'session'} onClick={() => model.setViewMode('session')} />\n <ViewModeButton label=\"Diff\" mode=\"diff\" active={viewMode === 'diff'} onClick={() => model.setViewMode('diff')} />\n </div>\n {otherSessions.length > 0 && (\n <div style={viewModeStyles.sessionLinks}>\n {otherSessions.map(s => (\n <button\n key={s.name}\n style={viewModeStyles.sessionLink}\n onClick={() => model.navigateToSession(s.name)}\n title={`Switch to ${s.name} session`}\n >\n → {s.name}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nfunction ViewModeButton({ label, mode, active, onClick }: {\n label: string; mode: ViewMode; active: boolean; onClick: () => void;\n}) {\n return (\n <button\n style={active ? viewModeStyles.segmentActive : viewModeStyles.segment}\n onClick={onClick}\n >\n {label}\n </button>\n );\n}\n\nexport const TitleBar = view(\n {\n model: prop.const<ExplorerModel>(),\n },\n (reader, props) => {\n const model = props.model;\n const leftVisible = model.leftSidebarVisible.read(reader);\n const rightVisible = model.rightSidebarVisible.read(reader);\n const isDarkTheme = model.isDarkTheme.read(reader);\n const selectedNode = model.selectedNode.read(reader);\n\n return (\n <div style={styles.titleBar}>\n <div style={styles.titleBarSection}>\n <TitleBarButton\n active={leftVisible}\n onClick={model.toggleLeftSidebar}\n title=\"Toggle left sidebar\"\n >\n <PanelLeftIcon />\n </TitleBarButton>\n </div>\n <div style={styles.titleBarCenter}>\n {model.daemonAvailable && <ViewModeSelector model={model} />}\n {selectedNode ? (\n <>\n <span style={{ color: 'var(--vscode-textLink-foreground)' }}>&lt;</span>\n <span>{selectedNode.name}</span>\n <span style={{ color: 'var(--vscode-textLink-foreground)' }}>/&gt;</span>\n </>\n ) : (\n <span style={{ color: 'var(--vscode-descriptionForeground)' }}>No component selected</span>\n )}\n </div>\n <div style={styles.titleBarSection}>\n <TitleBarButton\n active={false}\n onClick={model.toggleTheme}\n title={isDarkTheme ? 'Switch to light theme' : 'Switch to dark theme'}\n >\n {isDarkTheme ? <SunIcon /> : <MoonIcon />}\n </TitleBarButton>\n <TitleBarButton\n active={rightVisible}\n onClick={model.toggleRightSidebar}\n title=\"Toggle right sidebar\"\n >\n <PanelRightIcon />\n </TitleBarButton>\n </div>\n </div>\n );\n }\n);\n\nconst viewModeStyles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n marginRight: 12,\n } as React.CSSProperties,\n segmentedControl: {\n display: 'flex',\n borderRadius: 4,\n overflow: 'hidden',\n border: '1px solid var(--vscode-panel-border)',\n } as React.CSSProperties,\n segment: {\n padding: '2px 10px',\n fontSize: 11,\n fontWeight: 500,\n border: 'none',\n background: 'transparent',\n color: 'var(--vscode-descriptionForeground)',\n cursor: 'pointer',\n } as React.CSSProperties,\n segmentActive: {\n padding: '2px 10px',\n fontSize: 11,\n fontWeight: 500,\n border: 'none',\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n cursor: 'pointer',\n } as React.CSSProperties,\n sessionLinks: {\n display: 'flex',\n gap: 4,\n } as React.CSSProperties,\n sessionLink: {\n padding: '2px 8px',\n fontSize: 11,\n border: '1px solid var(--vscode-panel-border)',\n borderRadius: 4,\n background: 'transparent',\n color: 'var(--vscode-textLink-foreground)',\n cursor: 'pointer',\n } as React.CSSProperties,\n};\n","import * as React from 'react';\nimport { observableValue } from '@vscode/observables';\nimport { view, viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport { styles, mergeStyles } from './styles.js';\nimport { ChevronRightIcon, ChevronDownIcon, ComponentIcon, FolderIcon } from './icons.js';\nimport type { ExplorerModel } from './ExplorerModel.js';\nimport type { ExplorerTreeNode } from './types.js';\n\n// TreeView - renders a list of nodes\nexport const TreeView = view(\n {\n model: prop.const<ExplorerModel>(),\n nodes: prop.const<readonly ExplorerTreeNode[]>(),\n depth: prop.const<number>(),\n },\n (_reader, props) => (\n <>\n {props.nodes.map((node) => (\n <TreeItem key={node.id} model={props.model} node={node} depth={props.depth} />\n ))}\n </>\n )\n);\n\n// TreeItem - ViewModel for hover state\nclass TreeItemModel extends ViewModel({\n model: prop.const<ExplorerModel>(),\n node: prop.const<ExplorerTreeNode>(),\n depth: prop.const<number>(),\n}) {\n readonly isHovered = observableValue<boolean>(this, false);\n\n // Expose props for render function\n get explorerModel(): ExplorerModel { return this.props.model; }\n get treeNode(): ExplorerTreeNode { return this.props.node; }\n get treeDepth(): number { return this.props.depth; }\n\n setHovered = (hovered: boolean): void => {\n this.isHovered.set(hovered, undefined);\n };\n\n handleClick = (): void => {\n this.props.model.selectNode(this.props.node.id);\n };\n\n handleDoubleClick = (): void => {\n if (this._hasChildren) {\n this.props.model.toggleNodeExpanded(this.props.node.id);\n }\n };\n\n handleChevronClick = (e: React.MouseEvent): void => {\n e.stopPropagation();\n this.props.model.toggleNodeExpanded(this.props.node.id);\n };\n\n private get _hasChildren(): boolean {\n return !!(this.props.node.children && this.props.node.children.length > 0);\n }\n}\n\nexport const TreeItem = viewWithModel(TreeItemModel, {}, (reader, itemModel) => {\n const model = itemModel.explorerModel;\n const node = itemModel.treeNode;\n const depth = itemModel.treeDepth;\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren ? model.isNodeExpanded(node.id, reader) : false;\n const selectedId = model.selectedNodeId.read(reader);\n const isSelected = selectedId === node.id;\n const isHovered = itemModel.isHovered.read(reader);\n\n const itemStyle = mergeStyles(\n styles.treeItem,\n { paddingLeft: `${8 + depth * 12}px` },\n isSelected && styles.treeItemSelected,\n !isSelected && isHovered && styles.treeItemHover,\n );\n\n return (\n <>\n <div\n style={itemStyle}\n onClick={itemModel.handleClick}\n onDoubleClick={itemModel.handleDoubleClick}\n onMouseEnter={() => itemModel.setHovered(true)}\n onMouseLeave={() => itemModel.setHovered(false)}\n >\n {hasChildren ? (\n <div style={styles.treeItemChevron} onClick={itemModel.handleChevronClick}>\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </div>\n ) : (\n <div style={styles.treeItemChevronPlaceholder} />\n )}\n <div style={styles.treeItemIcon}>\n {node.type === 'folder' \n ? <FolderIcon style={{ color: 'var(--vscode-symbolIcon-folderForeground)' }} />\n : <ComponentIcon style={{ color: '#deb45b' }} />\n }\n </div>\n <span style={styles.treeItemLabel}>{node.name}</span>\n {hasChildren && (\n <span style={styles.treeItemCount}>{node.children!.length}</span>\n )}\n </div>\n {hasChildren && isExpanded && (\n <TreeView model={model} nodes={node.children!} depth={depth + 1} />\n )}\n </>\n );\n});\n","import { view, prop } from '@vscode/observables-react';\nimport { styles } from './styles.js';\nimport { TreeView } from './TreeView.js';\nimport type { ExplorerModel } from './ExplorerModel.js';\n\nexport const LeftSidebar = view(\n {\n model: prop.const<ExplorerModel>(),\n },\n (reader, props) => {\n const tree = props.model.tree.read(reader);\n return (\n <div style={styles.sidebar}>\n <div style={styles.sidebarHeader}>Explorer</div>\n <div style={styles.sidebarContent}>\n <TreeView model={props.model} nodes={tree.children ?? []} depth={0} />\n </div>\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { observableValue } from '@vscode/observables';\nimport { view, viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport { styles, mergeStyles } from './styles.js';\nimport type { ExplorerTreeNode } from './types.js';\n\n// ToggleSwitch with observable state\nclass ToggleSwitchModel extends ViewModel({}) {\n readonly checked = observableValue<boolean>(this, false);\n\n toggle = (): void => {\n this.checked.set(!this.checked.get(), undefined);\n };\n}\n\nconst ToggleSwitch = viewWithModel(ToggleSwitchModel, {}, (reader, model) => {\n const checked = model.checked.read(reader);\n\n const trackStyle: React.CSSProperties = {\n position: 'relative',\n width: '36px',\n height: '18px',\n backgroundColor: checked ? 'var(--vscode-button-background)' : 'var(--vscode-input-background)',\n borderRadius: '9px',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n border: '1px solid var(--vscode-input-border, transparent)',\n };\n\n const thumbStyle: React.CSSProperties = {\n position: 'absolute',\n top: '2px',\n left: checked ? '18px' : '2px',\n width: '12px',\n height: '12px',\n backgroundColor: 'var(--vscode-foreground)',\n borderRadius: '50%',\n transition: 'left 0.2s',\n };\n\n return (\n <div style={trackStyle} onClick={model.toggle}>\n <div style={thumbStyle} />\n </div>\n );\n});\n\n// PropertiesContent - shows mock properties for a component\nconst PropertiesContent = view(\n {\n node: prop.const<ExplorerTreeNode>(),\n },\n (_reader, props) => {\n if (props.node.type !== 'component') {\n return (\n <div style={{ padding: '12px', color: 'var(--vscode-descriptionForeground)', fontSize: '12px' }}>\n Select a component (not a folder) to view its properties\n </div>\n );\n }\n\n return (\n <div style={styles.propertiesPanel}>\n <div style={styles.propertyRow}>\n <div style={styles.propertyLabel}>\n children<span style={{ color: 'var(--vscode-descriptionForeground)' }}> : string</span>\n </div>\n <input\n type=\"text\"\n style={styles.propertyInput as React.CSSProperties}\n defaultValue=\"Click me\"\n placeholder=\"Enter text...\"\n />\n <div style={styles.propertyDescription}>Button text content</div>\n </div>\n\n <div style={styles.propertyRow}>\n <div style={styles.propertyLabel}>\n variant<span style={{ color: 'var(--vscode-descriptionForeground)' }}> : select</span>\n </div>\n <select style={styles.propertySelect as React.CSSProperties} defaultValue=\"default\">\n <option value=\"default\">default</option>\n <option value=\"primary\">primary</option>\n <option value=\"secondary\">secondary</option>\n <option value=\"destructive\">destructive</option>\n </select>\n <div style={styles.propertyDescription}>Visual style variant</div>\n </div>\n\n <div style={styles.propertyRow}>\n <div style={styles.propertyLabel}>\n size<span style={{ color: 'var(--vscode-descriptionForeground)' }}> : select</span>\n </div>\n <select style={styles.propertySelect as React.CSSProperties} defaultValue=\"default\">\n <option value=\"sm\">sm</option>\n <option value=\"default\">default</option>\n <option value=\"lg\">lg</option>\n </select>\n <div style={styles.propertyDescription}>Button size</div>\n </div>\n\n <div style={styles.propertyRow}>\n <div style={styles.propertyLabel}>\n disabled<span style={{ color: 'var(--vscode-descriptionForeground)' }}> : boolean</span>\n </div>\n <ToggleSwitch />\n <div style={styles.propertyDescription}>Disable the button</div>\n </div>\n </div>\n );\n }\n);\n\n// RightSidebar\nexport const RightSidebar = view(\n {\n selectedNode: prop.const<ExplorerTreeNode | undefined>(),\n },\n (_reader, props) => (\n <div style={mergeStyles(styles.sidebar, styles.sidebarRight)}>\n <div style={styles.sidebarHeader}>\n <span style={{ marginRight: '6px', color: 'var(--vscode-textLink-foreground)' }}>&lt;/&gt;</span>\n Props\n </div>\n <div style={styles.sidebarContent}>\n {props.selectedNode ? (\n <PropertiesContent node={props.selectedNode} />\n ) : (\n <div style={{ padding: '12px', color: 'var(--vscode-descriptionForeground)', fontSize: '12px' }}>\n Select a component to view its properties\n </div>\n )}\n </div>\n </div>\n )\n);\n","import * as React from 'react';\nimport { observableValue } from '@vscode/observables';\nimport { viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport type { ComponentDefinition, IDisposable } from '../core/index.js';\nimport { resolveViewport } from '../core/index.js';\nimport type { FixtureItem } from './ExplorerModel.js';\n\nclass FixturePreviewItemModel extends ViewModel({\n fixture: prop.const<FixtureItem>(),\n compact: prop.const<boolean | undefined>(),\n}) {\n private _containerRef: HTMLDivElement | null = null;\n private _shadowRoot: ShadowRoot | null = null;\n private _renderContainer: HTMLDivElement | null = null;\n private _disposable: IDisposable | (() => void) | null = null;\n private _resizeObserver: ResizeObserver | null = null;\n\n readonly measuredWidth = observableValue<number | undefined>(this, undefined);\n readonly measuredHeight = observableValue<number | undefined>(this, undefined);\n\n get fixture(): FixtureItem { return this.props.fixture; }\n get compact(): boolean { return this.props.compact ?? false; }\n\n setContainerRef = (el: HTMLDivElement | null): void => {\n if (el === this._containerRef) return;\n\n // Cleanup previous\n this._cleanup();\n\n this._containerRef = el;\n if (!el) return;\n\n const component = this.fixture.component;\n\n if (component.isolation === 'shadow-dom') {\n this._renderInShadowDom(el, component);\n } else {\n // For iframe isolation, render directly (iframe handles isolation)\n this._renderDirect(el, component);\n }\n\n // Set up resize observer on the render container (the actual content)\n // NOT the shadow host, which may have min-height set\n const elementToObserve = this._renderContainer ?? el;\n this._resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (height > 0) {\n this.measuredWidth.set(Math.round(width), undefined);\n this.measuredHeight.set(Math.round(height), undefined);\n }\n }\n });\n this._resizeObserver.observe(elementToObserve);\n };\n\n private _renderInShadowDom(container: HTMLDivElement, component: ComponentDefinition): void {\n // Reuse existing shadow root if present (shadow roots cannot be removed once attached)\n if (container.shadowRoot) {\n this._shadowRoot = container.shadowRoot;\n // Clear previous content\n while (this._shadowRoot.firstChild) {\n this._shadowRoot.removeChild(this._shadowRoot.firstChild);\n }\n this._shadowRoot.adoptedStyleSheets = [];\n } else {\n this._shadowRoot = container.attachShadow({ mode: 'open' });\n }\n\n // Inject styles if any\n if (component.styles) {\n for (const style of component.styles) {\n if (style.type === 'css') {\n const styleEl = document.createElement('style');\n styleEl.textContent = style.content;\n this._shadowRoot.appendChild(styleEl);\n } else if (style.type === 'url') {\n const linkEl = document.createElement('link');\n linkEl.rel = 'stylesheet';\n linkEl.href = style.href;\n this._shadowRoot.appendChild(linkEl);\n } else if (style.type === 'adopted') {\n this._shadowRoot.adoptedStyleSheets = [\n ...this._shadowRoot.adoptedStyleSheets,\n style.sheet,\n ];\n }\n }\n }\n\n // Create render container (transparent, checkered shows through)\n const renderContainer = document.createElement('div');\n renderContainer.style.display = 'inline-block';\n this._renderContainer = renderContainer;\n this._shadowRoot.appendChild(renderContainer);\n\n // Get default property values\n const props = this._getDefaultProps(component);\n this._disposable = component.render(renderContainer, props);\n }\n\n private _renderDirect(container: HTMLDivElement, component: ComponentDefinition): void {\n this._renderContainer = container;\n const props = this._getDefaultProps(component);\n this._disposable = component.render(container, props);\n }\n\n private _getDefaultProps(component: ComponentDefinition): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n for (const prop of component.properties) {\n props[prop.name] = prop.defaultValue;\n }\n return props;\n }\n\n private _cleanup(): void {\n if (this._disposable) {\n if (typeof this._disposable === 'function') {\n (this._disposable as () => void)();\n } else if (typeof this._disposable.dispose === 'function') {\n this._disposable.dispose();\n }\n }\n this._disposable = null;\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n this._shadowRoot = null;\n this._renderContainer = null;\n }\n\n dispose(): void {\n this._cleanup();\n }\n}\n\nexport const FixturePreviewItem = viewWithModel(\n FixturePreviewItemModel,\n {},\n (reader, model) => {\n const fixture = model.fixture;\n const component = fixture.component;\n const displayMode = component.displayMode;\n const measuredWidth = model.measuredWidth.read(reader);\n const measuredHeight = model.measuredHeight.read(reader);\n const compact = model.compact;\n\n // For page mode, use viewport dimensions\n let containerStyle: React.CSSProperties;\n if (displayMode.type === 'page') {\n const viewport = displayMode.viewports[0];\n const resolved = resolveViewport(viewport);\n containerStyle = {\n width: resolved.width,\n height: resolved.height,\n overflow: 'auto',\n };\n } else {\n // Component mode - natural size, let content determine dimensions\n containerStyle = {\n display: 'inline-block',\n };\n }\n\n const dimensionsText = measuredWidth && measuredHeight\n ? `${measuredWidth} × ${measuredHeight}`\n : '';\n\n const wrapperStyle = compact ? previewItemStyles.wrapperCompact : previewItemStyles.wrapper;\n const nameStyle = compact ? previewItemStyles.nameCompact : previewItemStyles.name;\n\n return (\n <div style={wrapperStyle}>\n <div style={previewItemStyles.labelRow}>\n <span style={nameStyle}>{fixture.name}</span>\n {!compact && dimensionsText && (\n <span style={previewItemStyles.dimensions}>{dimensionsText}</span>\n )}\n </div>\n <div style={getCanvasStyle(component.background)}>\n <div ref={model.setContainerRef} style={containerStyle} />\n </div>\n </div>\n );\n }\n);\n\n// Checkered pattern for transparency background (Figma-style)\nconst CHECKER_SIZE = 8;\n\nfunction createCheckerPattern(baseColor: string, checkerColor: string): string {\n return `\n linear-gradient(45deg, ${checkerColor} 25%, transparent 25%),\n linear-gradient(-45deg, ${checkerColor} 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, ${checkerColor} 75%),\n linear-gradient(-45deg, transparent 75%, ${checkerColor} 75%)\n `;\n}\n\nconst lightPattern = {\n backgroundColor: '#ffffff',\n backgroundImage: createCheckerPattern('#ffffff', '#e5e5e5'),\n};\n\nconst darkPattern = {\n backgroundColor: '#1e1e1e',\n backgroundImage: createCheckerPattern('#1e1e1e', '#2d2d2d'),\n};\n\nconst canvasBaseStyle: React.CSSProperties = {\n display: 'inline-block',\n padding: '12px',\n borderRadius: '4px',\n backgroundSize: `${CHECKER_SIZE * 2}px ${CHECKER_SIZE * 2}px`,\n backgroundPosition: `0 0, 0 ${CHECKER_SIZE}px, ${CHECKER_SIZE}px -${CHECKER_SIZE}px, -${CHECKER_SIZE}px 0`,\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.08)',\n};\n\nfunction getCanvasStyle(background: 'light' | 'dark'): React.CSSProperties {\n const pattern = background === 'dark' ? darkPattern : lightPattern;\n return {\n ...canvasBaseStyle,\n backgroundColor: pattern.backgroundColor,\n backgroundImage: pattern.backgroundImage,\n };\n}\n\nconst previewItemStyles = {\n wrapper: {\n marginBottom: '32px',\n } as React.CSSProperties,\n wrapperCompact: {\n marginBottom: '0',\n } as React.CSSProperties,\n labelRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: '8px',\n marginBottom: '8px',\n } as React.CSSProperties,\n name: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--vscode-foreground)',\n } as React.CSSProperties,\n nameCompact: {\n fontSize: '11px',\n fontWeight: 500,\n color: 'var(--vscode-descriptionForeground)',\n } as React.CSSProperties,\n dimensions: {\n fontSize: '11px',\n color: 'var(--vscode-descriptionForeground)',\n fontFamily: 'var(--vscode-editor-font-family, monospace)',\n } as React.CSSProperties,\n};\n","import * as React from 'react';\nimport { observableValue, autorun } from '@vscode/observables';\nimport { viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport type { DaemonModel, DaemonScreenshotResult } from '../daemon/index.js';\n\ntype ScreenshotState =\n\t| { readonly status: 'idle' }\n\t| { readonly status: 'loading' }\n\t| { readonly status: 'ready'; readonly data: DaemonScreenshotResult }\n\t| { readonly status: 'error'; readonly message: string };\n\nclass FixtureScreenshotModel extends ViewModel({\n\tfixtureId: prop.const<string>(),\n\tsessionName: prop.const<string>(),\n\tdaemon: prop.const<DaemonModel>(),\n}) {\n\treadonly screenshot = observableValue<ScreenshotState>(this, { status: 'idle' });\n\tprivate _fetchVersion = 0;\n\n\tget fixtureId() { return this.props.fixtureId; }\n\n\tconstructor(props: any) {\n\t\tsuper(props);\n\t\tthis._store.add(autorun(reader => {\n\t\t\tconst sourceTreeIds = this.props.daemon.sourceTreeIds.read(reader);\n\t\t\tconst stId = sourceTreeIds.get(this.props.sessionName);\n\t\t\tif (stId) {\n\t\t\t\tthis._fetchScreenshot();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate async _fetchScreenshot(): Promise<void> {\n\t\tconst version = ++this._fetchVersion;\n\t\tthis.screenshot.set({ status: 'loading' }, undefined);\n\t\ttry {\n\t\t\tconst data = await this.props.daemon.getScreenshot(this.props.sessionName, this.props.fixtureId);\n\t\t\tif (version === this._fetchVersion) {\n\t\t\t\tthis.screenshot.set({ status: 'ready', data }, undefined);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (version === this._fetchVersion) {\n\t\t\t\tthis.screenshot.set({ status: 'error', message: String(e) }, undefined);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Displays a single screenshot from the daemon, with loading/error states.\n * Re-fetches automatically when the session's sourceTreeId changes.\n */\nexport const FixtureScreenshotView = viewWithModel(\n\tFixtureScreenshotModel,\n\t{},\n\t(reader, model) => {\n\t\tconst state = model.screenshot.read(reader);\n\n\t\tif (state.status === 'idle' || state.status === 'loading') {\n\t\t\treturn (\n\t\t\t\t<div style={screenshotStyles.placeholder}>\n\t\t\t\t\t<div style={screenshotStyles.shimmer} />\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (state.status === 'error') {\n\t\t\treturn (\n\t\t\t\t<div style={screenshotStyles.error}>\n\t\t\t\t\t<span style={screenshotStyles.errorText}>Screenshot failed</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tconst { data } = state;\n\t\tif (!data.image) {\n\t\t\treturn (\n\t\t\t\t<div style={screenshotStyles.placeholder}>\n\t\t\t\t\t<span style={screenshotStyles.hashText}>{data.hash.slice(0, 12)}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<img\n\t\t\t\tsrc={`data:image/png;base64,${data.image}`}\n\t\t\t\tstyle={screenshotStyles.image}\n\t\t\t\talt={`Screenshot of ${model.fixtureId}`}\n\t\t\t/>\n\t\t);\n\t}\n);\n\nconst screenshotStyles = {\n\tplaceholder: {\n\t\tminHeight: 80,\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t\tjustifyContent: 'center',\n\t\tbackgroundColor: 'var(--vscode-editor-background)',\n\t\tborder: '1px solid var(--vscode-panel-border)',\n\t\tborderRadius: 4,\n\t\toverflow: 'hidden',\n\t} as React.CSSProperties,\n\tshimmer: {\n\t\twidth: '100%',\n\t\theight: 80,\n\t\tbackground: 'linear-gradient(90deg, var(--vscode-editor-background) 25%, var(--vscode-list-hoverBackground) 50%, var(--vscode-editor-background) 75%)',\n\t\tbackgroundSize: '200% 100%',\n\t\tanimation: 'shimmer 1.5s infinite',\n\t} as React.CSSProperties,\n\terror: {\n\t\tminHeight: 80,\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t\tjustifyContent: 'center',\n\t\tbackgroundColor: 'var(--vscode-inputValidation-errorBackground)',\n\t\tborder: '1px solid var(--vscode-inputValidation-errorBorder)',\n\t\tborderRadius: 4,\n\t} as React.CSSProperties,\n\terrorText: {\n\t\tfontSize: 12,\n\t\tcolor: 'var(--vscode-errorForeground)',\n\t} as React.CSSProperties,\n\thashText: {\n\t\tfontSize: 11,\n\t\tcolor: 'var(--vscode-descriptionForeground)',\n\t\tfontFamily: 'var(--vscode-editor-font-family, monospace)',\n\t} as React.CSSProperties,\n\timage: {\n\t\tmaxWidth: '100%',\n\t\tdisplay: 'block',\n\t\tborderRadius: 4,\n\t\tborder: '1px solid var(--vscode-panel-border)',\n\t} as React.CSSProperties,\n};\n","import * as React from 'react';\nimport { observableValue, autorun } from '@vscode/observables';\nimport { view, viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport type { DaemonModel } from '../daemon/index.js';\nimport type { ScreenshotComparisonItem } from './ExplorerModel.js';\nimport { FixtureScreenshotView } from './FixtureScreenshotView.js';\n\ntype ComparisonStatus =\n\t| { readonly status: 'loading' }\n\t| { readonly status: 'ready'; readonly match: boolean }\n\t| { readonly status: 'error'; readonly message: string };\n\n// ---------------------------------------------------------------------------\n// Single fixture comparison (current vs baseline side-by-side)\n// ---------------------------------------------------------------------------\n\nclass SingleComparisonModel extends ViewModel({\n\tfixtureId: prop.const<string>(),\n\tdaemon: prop.const<DaemonModel>(),\n\tbaselineSession: prop.const<string>(),\n\tcurrentSession: prop.const<string>(),\n}) {\n\treadonly comparisonStatus = observableValue<ComparisonStatus>(this, { status: 'loading' });\n\n\tget fixtureId() { return this.props.fixtureId; }\n\tget daemon() { return this.props.daemon; }\n\tget baselineSession() { return this.props.baselineSession; }\n\tget currentSession() { return this.props.currentSession; }\n\n\tconstructor(props: any) {\n\t\tsuper(props);\n\t\tthis._store.add(autorun(reader => {\n\t\t\tconst sourceTreeIds = this.props.daemon.sourceTreeIds.read(reader);\n\t\t\tconst baselineStId = sourceTreeIds.get(this.props.baselineSession);\n\t\t\tconst currentStId = sourceTreeIds.get(this.props.currentSession);\n\t\t\tif (baselineStId && currentStId) {\n\t\t\t\tthis._fetchComparison();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate async _fetchComparison(): Promise<void> {\n\t\tthis.comparisonStatus.set({ status: 'loading' }, undefined);\n\t\ttry {\n\t\t\tconst result = await this.props.daemon.compare(\n\t\t\t\tthis.props.fixtureId,\n\t\t\t\tthis.props.baselineSession,\n\t\t\t\tthis.props.currentSession,\n\t\t\t);\n\t\t\tthis.comparisonStatus.set({ status: 'ready', match: result.match }, undefined);\n\t\t} catch (e) {\n\t\t\tthis.comparisonStatus.set({ status: 'error', message: String(e) }, undefined);\n\t\t}\n\t}\n}\n\nconst SingleComparison = viewWithModel(\n\tSingleComparisonModel,\n\t{},\n\t(reader, model) => {\n\t\tconst status = model.comparisonStatus.read(reader);\n\n\t\tconst statusBadge = status.status === 'loading'\n\t\t\t? <span style={compStyles.badgeLoading}>comparing...</span>\n\t\t\t: status.status === 'error'\n\t\t\t\t? <span style={compStyles.badgeError}>error</span>\n\t\t\t\t: status.match\n\t\t\t\t\t? <span style={compStyles.badgeMatch}>✓ match</span>\n\t\t\t\t\t: <span style={compStyles.badgeChanged}>● changed</span>;\n\n\t\treturn (\n\t\t\t<div style={compStyles.fixtureRow}>\n\t\t\t\t<div style={compStyles.fixtureLabel}>\n\t\t\t\t\t<span style={compStyles.fixtureName}>{model.fixtureId}</span>\n\t\t\t\t\t{statusBadge}\n\t\t\t\t</div>\n\t\t\t\t<div style={compStyles.sideBySide}>\n\t\t\t\t\t<div style={compStyles.screenshotColumn}>\n\t\t\t\t\t\t<span style={compStyles.columnLabel}>Current</span>\n\t\t\t\t\t\t<FixtureScreenshotView\n\t\t\t\t\t\t\tfixtureId={model.fixtureId}\n\t\t\t\t\t\t\tsessionName={model.currentSession}\n\t\t\t\t\t\t\tdaemon={model.daemon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style={compStyles.screenshotColumn}>\n\t\t\t\t\t\t<span style={compStyles.columnLabel}>Baseline</span>\n\t\t\t\t\t\t<FixtureScreenshotView\n\t\t\t\t\t\t\tfixtureId={model.fixtureId}\n\t\t\t\t\t\t\tsessionName={model.baselineSession}\n\t\t\t\t\t\t\tdaemon={model.daemon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\n// ---------------------------------------------------------------------------\n// ScreenshotComparisonRow — renders a group of fixture comparisons\n// ---------------------------------------------------------------------------\n\nexport const ScreenshotComparisonRow = view(\n\t{\n\t\tname: prop.const<string>(),\n\t\tpath: prop.const<string>(),\n\t\titems: prop.const<readonly ScreenshotComparisonItem[]>(),\n\t\tdaemon: prop.const<DaemonModel>(),\n\t\tbaselineSession: prop.const<string>(),\n\t\tcurrentSession: prop.const<string>(),\n\t},\n\t(_reader, props) => {\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<div style={compStyles.groupHeader}>\n\t\t\t\t\t<span style={compStyles.groupTitle}>{props.path}</span>\n\t\t\t\t</div>\n\t\t\t\t<div style={compStyles.groupContent}>\n\t\t\t\t\t{props.items.map((item) => (\n\t\t\t\t\t\t<SingleComparison\n\t\t\t\t\t\t\tkey={item.fixtureId}\n\t\t\t\t\t\t\tfixtureId={item.fixtureId}\n\t\t\t\t\t\t\tdaemon={props.daemon}\n\t\t\t\t\t\t\tbaselineSession={props.baselineSession}\n\t\t\t\t\t\t\tcurrentSession={props.currentSession}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst compStyles = {\n\tgroupHeader: {\n\t\tmarginBottom: 12,\n\t} as React.CSSProperties,\n\tgroupTitle: {\n\t\tfontSize: 13,\n\t\tfontWeight: 500,\n\t\tcolor: 'var(--vscode-foreground)',\n\t} as React.CSSProperties,\n\tgroupContent: {\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'column',\n\t\tgap: 24,\n\t} as React.CSSProperties,\n\tfixtureRow: {\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'column',\n\t\tgap: 8,\n\t} as React.CSSProperties,\n\tfixtureLabel: {\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t\tgap: 8,\n\t} as React.CSSProperties,\n\tfixtureName: {\n\t\tfontSize: 12,\n\t\tfontWeight: 500,\n\t\tcolor: 'var(--vscode-foreground)',\n\t} as React.CSSProperties,\n\tsideBySide: {\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'row',\n\t\tgap: 16,\n\t} as React.CSSProperties,\n\tscreenshotColumn: {\n\t\tflex: 1,\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'column',\n\t\tgap: 4,\n\t\tminWidth: 0,\n\t} as React.CSSProperties,\n\tcolumnLabel: {\n\t\tfontSize: 11,\n\t\tfontWeight: 500,\n\t\tcolor: 'var(--vscode-descriptionForeground)',\n\t\ttextTransform: 'uppercase',\n\t\tletterSpacing: '0.05em',\n\t} as React.CSSProperties,\n\tbadgeMatch: {\n\t\tfontSize: 11,\n\t\tcolor: 'var(--vscode-testing-iconPassed)',\n\t\tfontWeight: 500,\n\t} as React.CSSProperties,\n\tbadgeChanged: {\n\t\tfontSize: 11,\n\t\tcolor: 'var(--vscode-testing-iconFailed)',\n\t\tfontWeight: 500,\n\t} as React.CSSProperties,\n\tbadgeLoading: {\n\t\tfontSize: 11,\n\t\tcolor: 'var(--vscode-descriptionForeground)',\n\t\tfontStyle: 'italic',\n\t} as React.CSSProperties,\n\tbadgeError: {\n\t\tfontSize: 11,\n\t\tcolor: 'var(--vscode-errorForeground)',\n\t\tfontWeight: 500,\n\t} as React.CSSProperties,\n};\n","const STORAGE_KEY = 'component-explorer:fixtureHeights';\nconst MAX_ENTRIES = 500;\n\ntype CachedHeights = Record<string, number>;\n\nlet _cache: CachedHeights | null = null;\n\nfunction loadCache(): CachedHeights {\n if (_cache !== null) return _cache;\n\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n _cache = JSON.parse(stored);\n return _cache!;\n }\n } catch { /* ignore */ }\n _cache = {};\n return _cache;\n}\n\nfunction saveCache(): void {\n if (_cache === null) return;\n\n try {\n const entries = Object.entries(_cache);\n if (entries.length > MAX_ENTRIES) {\n _cache = Object.fromEntries(entries.slice(-MAX_ENTRIES));\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(_cache));\n } catch { /* ignore */ }\n}\n\nexport function setCachedHeight(fixtureId: string, height: number): void {\n const cache = loadCache();\n cache[fixtureId] = height;\n saveCache();\n}\n\nexport function getAllCachedHeights(): ReadonlyMap<string, number> {\n return new Map(Object.entries(loadCache()));\n}\n","import * as React from 'react';\nimport { observableValue, derived } from '@vscode/observables';\nimport { view, viewWithModel, ViewModel, prop } from '@vscode/observables-react';\nimport type { ExplorerModel, PreviewRow } from './ExplorerModel.js';\nimport { FixturePreviewItem } from './FixturePreviewItem.js';\nimport { ScreenshotComparisonRow } from './ScreenshotComparisonRow.js';\nimport { getAllCachedHeights, setCachedHeight } from '../lib/fixtureSizeCache.js';\n\nconst ESTIMATED_ROW_HEIGHT = 280;\nconst ROW_GAP = 32;\nconst CONTENT_PADDING = 32;\nconst OVERSCAN_PX = 400;\n\nconst SCROLL_ANCHOR_KEY = 'component-explorer:scrollAnchors';\nconst MAX_ANCHOR_ENTRIES = 100;\n\n// ---------------------------------------------------------------------------\n// Scroll anchor persistence (row index + offset, not absolute scrollTop)\n// ---------------------------------------------------------------------------\n\ninterface ScrollAnchor {\n readonly rowIndex: number;\n readonly offsetFromViewport: number;\n}\n\nfunction loadScrollAnchors(): Record<string, ScrollAnchor> {\n try {\n const stored = localStorage.getItem(SCROLL_ANCHOR_KEY);\n if (stored) return JSON.parse(stored);\n } catch { /* ignore */ }\n return {};\n}\n\nfunction saveScrollAnchor(nodeId: string, anchor: ScrollAnchor): void {\n try {\n const all = loadScrollAnchors();\n all[nodeId] = anchor;\n const entries = Object.entries(all);\n const pruned = entries.length > MAX_ANCHOR_ENTRIES\n ? Object.fromEntries(entries.slice(-MAX_ANCHOR_ENTRIES))\n : all;\n localStorage.setItem(SCROLL_ANCHOR_KEY, JSON.stringify(pruned));\n } catch { /* ignore */ }\n}\n\nfunction getScrollAnchor(nodeId: string): ScrollAnchor | undefined {\n return loadScrollAnchors()[nodeId];\n}\n\n// ---------------------------------------------------------------------------\n// Layout computation (pure functions over data)\n// ---------------------------------------------------------------------------\n\ninterface RowLayout {\n readonly top: number;\n readonly height: number;\n}\n\nfunction getRowId(row: PreviewRow): string {\n return row.type === 'single' ? row.fixture.id : row.id;\n}\n\nfunction computeLayout(\n rows: readonly PreviewRow[],\n heightCache: ReadonlyMap<string, number>,\n): readonly RowLayout[] {\n const result: RowLayout[] = new Array(rows.length);\n let top = CONTENT_PADDING;\n for (let i = 0; i < rows.length; i++) {\n const height = heightCache.get(getRowId(rows[i])) ?? ESTIMATED_ROW_HEIGHT;\n result[i] = { top, height };\n top += height + ROW_GAP;\n }\n return result;\n}\n\nfunction layoutTotalHeight(layout: readonly RowLayout[]): number {\n if (layout.length === 0) return 0;\n const last = layout[layout.length - 1];\n return last.top + last.height + CONTENT_PADDING;\n}\n\n/** Binary search for first row whose bottom edge is >= y. */\nfunction findFirstVisibleRow(layout: readonly RowLayout[], y: number): number {\n let lo = 0;\n let hi = layout.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (layout[mid].top + layout[mid].height < y) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\n/** Find visible row range for a given scrollTop + viewportHeight. */\nfunction computeVisibleRange(\n layout: readonly RowLayout[],\n scrollTop: number,\n viewportHeight: number,\n): { readonly start: number; readonly end: number } {\n if (layout.length === 0) return { start: 0, end: 0 };\n const start = findFirstVisibleRow(layout, scrollTop - OVERSCAN_PX);\n let end = start;\n const bottom = scrollTop + viewportHeight + OVERSCAN_PX;\n while (end < layout.length && layout[end].top < bottom) {\n end++;\n }\n return { start, end };\n}\n\n/** Find the row closest to the viewport top edge. */\nfunction computeAnchor(\n layout: readonly RowLayout[],\n scrollTop: number,\n): ScrollAnchor | undefined {\n if (layout.length === 0) return undefined;\n const idx = findFirstVisibleRow(layout, scrollTop);\n const rowIndex = Math.min(idx, layout.length - 1);\n return {\n rowIndex,\n offsetFromViewport: layout[rowIndex].top - scrollTop,\n };\n}\n\n/** Compute scrollTop to restore an anchor. */\nfunction scrollTopForAnchor(\n layout: readonly RowLayout[],\n anchor: ScrollAnchor,\n): number {\n if (anchor.rowIndex >= layout.length) return 0;\n return layout[anchor.rowIndex].top - anchor.offsetFromViewport;\n}\n\n// ---------------------------------------------------------------------------\n// PreviewAreaModel\n// ---------------------------------------------------------------------------\n\nclass PreviewAreaModel extends ViewModel({\n model: prop.const<ExplorerModel>(),\n}) {\n private readonly _rowHeights = observableValue<ReadonlyMap<string, number>>(this, getAllCachedHeights());\n private readonly _scrollTop = observableValue<number>(this, 0);\n private readonly _viewportHeight = observableValue<number>(this, 0);\n\n private _scrollContainerRef: HTMLDivElement | null = null;\n private _resizeObserver: ResizeObserver | null = null;\n private _viewportResizeObserver: ResizeObserver | null = null;\n private _currentNodeId: string | undefined = undefined;\n private _scrollSaveTimeout: ReturnType<typeof setTimeout> | null = null;\n private _suppressScrollHandler = false;\n\n get explorerModel() { return this.props.model; }\n\n readonly layout = derived(this, (reader) => {\n const rows = this.explorerModel.selectedFixtures.read(reader);\n const heights = this._rowHeights.read(reader);\n return computeLayout(rows, heights);\n });\n\n readonly visibleRowRange = derived(this, (reader) => {\n const layout = this.layout.read(reader);\n const scrollTop = this._scrollTop.read(reader);\n const viewportHeight = this._viewportHeight.read(reader);\n return computeVisibleRange(layout, scrollTop, viewportHeight);\n });\n\n setScrollContainerRef = (el: HTMLDivElement | null): void => {\n if (this._scrollContainerRef) {\n this._scrollContainerRef.removeEventListener('scroll', this._handleScroll);\n }\n this._viewportResizeObserver?.disconnect();\n\n this._scrollContainerRef = el;\n if (!el) return;\n\n el.addEventListener('scroll', this._handleScroll, { passive: true });\n this._viewportHeight.set(el.clientHeight, undefined);\n\n this._viewportResizeObserver = new ResizeObserver(([entry]) => {\n this._viewportHeight.set(Math.round(entry.contentRect.height), undefined);\n });\n this._viewportResizeObserver.observe(el);\n\n this._restoreScrollPosition();\n };\n\n updateForSelection(nodeId: string | undefined): void {\n if (this._currentNodeId === nodeId) return;\n this._currentNodeId = nodeId;\n this._restoreScrollPosition();\n }\n\n private _restoreScrollPosition(): void {\n if (!this._scrollContainerRef || !this._currentNodeId) return;\n const anchor = getScrollAnchor(this._currentNodeId);\n if (!anchor) return;\n\n const layout = this.layout.get();\n const target = scrollTopForAnchor(layout, anchor);\n\n this._suppressScrollHandler = true;\n this._scrollContainerRef.scrollTop = target;\n this._scrollTop.set(target, undefined);\n requestAnimationFrame(() => { this._suppressScrollHandler = false; });\n }\n\n private _handleScroll = (): void => {\n if (!this._scrollContainerRef) return;\n this._scrollTop.set(this._scrollContainerRef.scrollTop, undefined);\n\n if (this._suppressScrollHandler || !this._currentNodeId) return;\n if (this._scrollSaveTimeout) clearTimeout(this._scrollSaveTimeout);\n this._scrollSaveTimeout = setTimeout(() => {\n if (!this._currentNodeId) return;\n const layout = this.layout.get();\n const anchor = computeAnchor(layout, this._scrollTop.get());\n if (anchor) saveScrollAnchor(this._currentNodeId, anchor);\n }, 150);\n };\n\n observeRowElement = (el: HTMLDivElement | null, id: string): void => {\n if (!el) return;\n if (!this._resizeObserver) {\n this._resizeObserver = new ResizeObserver((entries) => {\n const current = this._rowHeights.get();\n let newMap: Map<string, number> | undefined;\n for (const entry of entries) {\n const rid = entry.target.getAttribute('data-row-id');\n if (!rid) continue;\n const height = Math.round(entry.contentRect.height);\n if (height > 0 && current.get(rid) !== height) {\n if (!newMap) newMap = new Map(current);\n newMap.set(rid, height);\n setCachedHeight(rid, height);\n }\n }\n if (newMap) {\n // Capture anchor before layout changes\n const oldLayout = this.layout.get();\n const anchor = computeAnchor(oldLayout, this._scrollTop.get());\n\n this._rowHeights.set(newMap, undefined);\n\n // Re-anchor: adjust scrollTop so the row at viewport top stays put\n if (anchor && this._scrollContainerRef) {\n const newLayout = this.layout.get();\n const newScrollTop = scrollTopForAnchor(newLayout, anchor);\n this._suppressScrollHandler = true;\n this._scrollContainerRef.scrollTop = newScrollTop;\n this._scrollTop.set(newScrollTop, undefined);\n requestAnimationFrame(() => { this._suppressScrollHandler = false; });\n }\n }\n });\n }\n el.setAttribute('data-row-id', id);\n this._resizeObserver.observe(el);\n };\n\n dispose(): void {\n this._resizeObserver?.disconnect();\n this._viewportResizeObserver?.disconnect();\n if (this._scrollContainerRef) {\n this._scrollContainerRef.removeEventListener('scroll', this._handleScroll);\n }\n if (this._scrollSaveTimeout) clearTimeout(this._scrollSaveTimeout);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Views\n// ---------------------------------------------------------------------------\n\nexport const PreviewArea = viewWithModel(\n PreviewAreaModel,\n {},\n (reader, model) => {\n const rows = model.explorerModel.selectedFixtures.read(reader);\n const selectedNodeId = model.explorerModel.selectedNodeId.read(reader);\n const layout = model.layout.read(reader);\n const { start, end } = model.visibleRowRange.read(reader);\n\n model.updateForSelection(selectedNodeId);\n\n if (rows.length === 0) {\n return (\n <div style={styles.emptyState}>\n <span style={styles.emptyText}>Select a component or folder to preview</span>\n </div>\n );\n }\n\n const total = layoutTotalHeight(layout);\n\n return (\n <div ref={model.setScrollContainerRef} style={styles.scrollContainer}>\n <div style={{ position: 'relative', height: total }}>\n {rows.slice(start, end).map((row, i) => {\n const idx = start + i;\n const { top } = layout[idx];\n const id = getRowId(row);\n\n return (\n <div\n key={id}\n ref={(el) => model.observeRowElement(el, id)}\n style={{ position: 'absolute', top, left: CONTENT_PADDING, right: CONTENT_PADDING }}\n >\n {row.type === 'single' ? (\n <FixturePreviewItem fixture={row.fixture} compact={false} />\n ) : row.type === 'variants' ? (\n <VariantsRowView row={row} />\n ) : row.type === 'screenshot-comparison' && model.explorerModel.daemon ? (\n <ScreenshotComparisonRow\n name={row.name}\n path={row.path}\n items={row.items}\n daemon={model.explorerModel.daemon}\n baselineSession=\"baseline\"\n currentSession=\"current\"\n />\n ) : null}\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\ntype VariantsRowData = Extract<PreviewRow, { type: 'variants' }>;\n\nconst VariantsRowView = view(\n { row: prop.const<VariantsRowData>() },\n (_reader, props) => {\n const row = props.row;\n return (\n <div>\n <div style={styles.variantsHeader}>\n <span style={styles.variantsTitle}>{row.path}</span>\n </div>\n <div style={styles.variantsContent}>\n {row.fixtures.map((fixture) => (\n <FixturePreviewItem key={fixture.id} fixture={fixture} compact />\n ))}\n </div>\n </div>\n );\n }\n);\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = {\n scrollContainer: {\n flex: 1,\n overflow: 'auto',\n backgroundColor: 'var(--vscode-editor-background)',\n } as React.CSSProperties,\n emptyState: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--vscode-editor-background)',\n } as React.CSSProperties,\n emptyText: {\n color: 'var(--vscode-descriptionForeground)',\n fontSize: '14px',\n } as React.CSSProperties,\n variantsHeader: {\n marginBottom: '12px',\n } as React.CSSProperties,\n variantsTitle: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--vscode-foreground)',\n } as React.CSSProperties,\n variantsContent: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: '16px',\n } as React.CSSProperties,\n};\n","import { viewWithModel, prop } from '@vscode/observables-react';\nimport { FixtureRegistry, defineFixture, defineFixtureGroup } from '../core/index.js';\nimport { ExplorerModel } from './ExplorerModel.js';\nimport { TitleBar } from './TitleBar.js';\nimport { LeftSidebar } from './LeftSidebar.js';\nimport { RightSidebar } from './RightSidebar.js';\nimport { PreviewArea } from './PreviewArea.js';\nimport { styles } from './styles.js';\nimport type { DaemonModel } from '../daemon/index.js';\n\nexport const Explorer = viewWithModel(\n ExplorerModel,\n { daemonModel: prop.const<DaemonModel | undefined>() },\n (reader, model) => {\n const leftVisible = model.leftSidebarVisible.read(reader);\n const rightVisible = model.rightSidebarVisible.read(reader);\n const isDarkTheme = model.isDarkTheme.read(reader);\n const selectedNode = model.selectedNode.read(reader);\n\n const themeClass = isDarkTheme ? 'vscode-theme default-dark-plus' : 'vscode-theme default-light-plus';\n\n return (\n <div className={themeClass} style={styles.container}>\n {leftVisible && <LeftSidebar model={model} />}\n <div style={styles.centerArea}>\n <TitleBar model={model} />\n <PreviewArea model={model} />\n </div>\n {rightVisible && <RightSidebar selectedNode={selectedNode} />}\n </div>\n );\n }\n);\n\n/** Creates a demo registry with sample fixtures */\nfunction createDemoRegistry(): FixtureRegistry {\n const registry = new FixtureRegistry();\n \n registry.register('components/Button.fixture.tsx', defineFixtureGroup({\n Primary: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<button>Primary Button</button>';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n Icon: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<button>🔔 Icon Button</button>';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n }));\n \n registry.register('components/Input.fixture.tsx', defineFixtureGroup({\n Text: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<input type=\\\"text\\\" placeholder=\\\"Text Input\\\" />';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n Search: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<input type=\\\"search\\\" placeholder=\\\"Search...\\\" />';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n }));\n \n registry.register('components/Card.fixture.tsx', defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<div style=\\\"border: 1px solid #ccc; padding: 16px;\\\">Basic Card</div>';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }));\n \n registry.register('components/Feedback.fixture.tsx', defineFixtureGroup({\n Badge: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<span style=\\\"background: blue; color: white; padding: 2px 8px; border-radius: 4px;\\\">Badge</span>';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n Alert: defineFixture({\n render: (container: HTMLElement) => {\n container.innerHTML = '<div style=\\\"background: #ffffcc; padding: 8px; border: 1px solid #cc0;\\\">Alert message</div>';\n return { dispose: () => { container.innerHTML = ''; } };\n },\n }),\n }));\n \n return registry;\n}\n\n// Re-export with default registry convenience\nexport function ExplorerWithDefaults() {\n const registry = createDemoRegistry();\n return <Explorer registry={registry} daemonModel={undefined} />;\n}\n","// src/AsyncStream.ts\nvar AsyncStream = class _AsyncStream {\n constructor(iterator) {\n this.iterator = iterator;\n }\n static fromIterable(fn) {\n return new _AsyncStream(fn[Symbol.asyncIterator]());\n }\n static fromFn(fn) {\n return new _AsyncStream(fn());\n }\n [Symbol.asyncIterator]() {\n return this.iterator;\n }\n};\nvar MediaResponse = class {\n constructor(mimeType, data) {\n this.mimeType = mimeType;\n this.data = data;\n }\n};\n\nexport {\n AsyncStream,\n MediaResponse\n};\n//# sourceMappingURL=chunk-SGBCNXYH.mjs.map","import {\n AsyncStream\n} from \"./chunk-SGBCNXYH.mjs\";\n\n// src/client.ts\nvar ApiError = class extends Error {\n constructor(statusCode, method, message) {\n super(message);\n this.statusCode = statusCode;\n this.method = method;\n this.name = \"ApiError\";\n }\n};\nvar ProxyApiClient = class {\n constructor(_request) {\n this._request = _request;\n }\n _createProxy(prefix) {\n return new Proxy(() => {\n }, {\n apply: async (_target, _self, args) => {\n const result = await this._request(prefix, args[0]);\n return result;\n },\n get: (_target, prop) => {\n return this._createProxy(`${prefix}${prefix ? \"/\" : \"\"}${prop}`);\n }\n });\n }\n methods = this._createProxy(\"\");\n};\nfunction createFetchClient(baseUrl, options) {\n return new ProxyApiClient(async (method, arg) => {\n const result = await fetch(`${baseUrl}/${method}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.getHeaders?.()\n },\n body: JSON.stringify(arg)\n });\n if (result.status !== 200) {\n const data2 = await result.json().catch(() => null);\n let message;\n if (data2 && typeof data2 === \"object\" && \"errorMessage\" in data2) {\n message = `${data2.errorMessage}`;\n } else {\n message = `Error calling API method ${method}: ${JSON.stringify(data2)} (Status: ${result.status}, Status Text: ${result.statusText})`;\n }\n const error = new ApiError(result.status, method, message);\n options?.onError?.(error);\n throw error;\n }\n const contentType = result.headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"application/jsonl\")) {\n return AsyncStream.fromFn(async function* () {\n const reader = result.body?.getReader();\n if (!reader) {\n return;\n }\n let buffer = \"\";\n const decoder = new TextDecoder(\"utf-8\");\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n let eolIndex;\n while ((eolIndex = buffer.indexOf(\"\\n\")) >= 0) {\n const line = buffer.slice(0, eolIndex).trim();\n buffer = buffer.slice(eolIndex + 1);\n if (line.length > 0) {\n yield JSON.parse(line);\n }\n }\n }\n const finalLine = buffer.trim();\n if (finalLine.length > 0) {\n yield JSON.parse(finalLine);\n }\n });\n }\n const data = await result.json();\n return data;\n });\n}\nfunction createLocalClient(api, context) {\n return new ProxyApiClient(async (method, args) => {\n return await api.run(method, args, context);\n });\n}\n\nexport {\n ApiError,\n ProxyApiClient,\n createFetchClient,\n createLocalClient\n};\n//# sourceMappingURL=chunk-A5PE72HI.mjs.map","import { observableValue, type IObservable } from '@vscode/observables';\nimport { createFetchClient, type ProxyApiClient } from '@hediet/simple-api/client';\nimport type { DaemonApiType, DaemonEvent } from '@vscode/component-explorer-cli/daemon-types';\nimport type { DaemonConfig } from './DaemonConfig.js';\n\n/** Screenshot result from the daemon */\nexport type DaemonScreenshotResult = DaemonApiType['screenshots']['take']['TResult'];\n\n/** Comparison result from the daemon */\nexport type DaemonCompareResult = DaemonApiType['screenshots']['compare']['TResult'];\n\n/** Fixture info from the daemon */\nexport type DaemonFixtureInfo = DaemonApiType['fixtures']['list']['TResult'][number];\n\ninterface CachedScreenshot {\n\treadonly sourceTreeId: string;\n\treadonly data: DaemonScreenshotResult;\n}\n\n/**\n * Client-side model for interacting with the daemon.\n * Manages source tree IDs, screenshot caching, and the event stream.\n */\nexport class DaemonModel {\n\tprivate readonly _sourceTreeIds = observableValue<ReadonlyMap<string, string>>(this, new Map());\n\tprivate readonly _sessions = observableValue<readonly { name: string; serverUrl: string }[]>(this, []);\n\tprivate readonly _screenshotCache = new Map<string, CachedScreenshot>();\n\tprivate readonly _client: ProxyApiClient<DaemonApiType>;\n\tprivate _eventStreamAbort: AbortController | null = null;\n\n\treadonly sessionName: string;\n\n\t/** Observable map of sessionName → current sourceTreeId */\n\treadonly sourceTreeIds: IObservable<ReadonlyMap<string, string>> = this._sourceTreeIds;\n\n\t/** Observable list of sessions from the daemon */\n\treadonly sessions: IObservable<readonly { name: string; serverUrl: string }[]> = this._sessions;\n\n\tconstructor(readonly config: DaemonConfig) {\n\t\tthis.sessionName = config.sessionName;\n\t\tthis._client = createFetchClient<DaemonApiType>('/__explorer/daemon-api');\n\t}\n\n\t/**\n\t * Initializes the model: fetches initial session info and starts listening to events.\n\t * Call this once after construction.\n\t */\n\tasync initialize(): Promise<void> {\n\t\tawait this._fetchSessionInfos();\n\t\tthis._startEventStream();\n\t}\n\n\t/**\n\t * Get a screenshot for a fixture in a session, using cache when available.\n\t * Cache is keyed on sessionName + fixtureId and invalidated when sourceTreeId changes.\n\t */\n\tasync getScreenshot(sessionName: string, fixtureId: string): Promise<DaemonScreenshotResult> {\n\t\tconst sourceTreeId = this._sourceTreeIds.get().get(sessionName);\n\t\tif (!sourceTreeId) {\n\t\t\tthrow new Error(`No sourceTreeId known for session '${sessionName}'`);\n\t\t}\n\n\t\tconst cacheKey = `${sessionName}:${fixtureId}`;\n\t\tconst cached = this._screenshotCache.get(cacheKey);\n\t\tif (cached && cached.sourceTreeId === sourceTreeId) {\n\t\t\treturn cached.data;\n\t\t}\n\n\t\tconst result = await this._client.methods.screenshots.take({\n\t\t\tfixtureId,\n\t\t\tsessionName,\n\t\t\tsourceTreeId,\n\t\t\tincludeImage: true,\n\t\t});\n\n\t\tthis._screenshotCache.set(cacheKey, { sourceTreeId, data: result });\n\t\treturn result;\n\t}\n\n\t/**\n\t * Compare a fixture across two sessions. Returns match status and hashes (no images).\n\t */\n\tasync compare(fixtureId: string, baselineSessionName: string, currentSessionName: string): Promise<DaemonCompareResult> {\n\t\tconst baselineSourceTreeId = this._sourceTreeIds.get().get(baselineSessionName);\n\t\tconst currentSourceTreeId = this._sourceTreeIds.get().get(currentSessionName);\n\t\tif (!baselineSourceTreeId || !currentSourceTreeId) {\n\t\t\tthrow new Error(`Missing sourceTreeId for sessions`);\n\t\t}\n\t\treturn this._client.methods.screenshots.compare({\n\t\t\tfixtureId,\n\t\t\tbaselineSessionName,\n\t\t\tbaselineSourceTreeId,\n\t\t\tcurrentSessionName,\n\t\t\tcurrentSourceTreeId,\n\t\t\tincludeImages: false,\n\t\t});\n\t}\n\n\t/**\n\t * List fixtures from a session.\n\t */\n\tasync listFixtures(sessionName: string): Promise<readonly DaemonFixtureInfo[]> {\n\t\tconst sourceTreeId = this._sourceTreeIds.get().get(sessionName);\n\t\tif (!sourceTreeId) {\n\t\t\tthrow new Error(`No sourceTreeId known for session '${sessionName}'`);\n\t\t}\n\t\treturn this._client.methods.fixtures.list({ sessionName, sourceTreeId });\n\t}\n\n\t/**\n\t * Get the explorer URL for a different session (for session switching via full navigation).\n\t */\n\tgetSessionExplorerUrl(sessionName: string): string | undefined {\n\t\tconst session = this._sessions.get().find(s => s.name === sessionName);\n\t\tif (!session) return undefined;\n\t\treturn session.serverUrl + '/___explorer';\n\t}\n\n\tdispose(): void {\n\t\tthis._eventStreamAbort?.abort();\n\t\tthis._eventStreamAbort = null;\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Private\n\t// ---------------------------------------------------------------------------\n\n\tprivate async _fetchSessionInfos(): Promise<void> {\n\t\tconst sessions = await this._client.methods.sessions();\n\t\tconst map = new Map<string, string>();\n\t\tconst sessionList: { name: string; serverUrl: string }[] = [];\n\t\tfor (const s of sessions) {\n\t\t\tmap.set(s.name, s.sourceTreeId);\n\t\t\tsessionList.push({ name: s.name, serverUrl: s.serverUrl });\n\t\t}\n\t\tthis._sourceTreeIds.set(map, undefined);\n\t\tthis._sessions.set(sessionList, undefined);\n\t}\n\n\tprivate async _startEventStream(): Promise<void> {\n\t\tthis._eventStreamAbort = new AbortController();\n\t\tconst signal = this._eventStreamAbort.signal;\n\n\t\ttry {\n\t\t\tconst stream = await this._client.methods.events();\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (signal.aborted) break;\n\t\t\t\tthis._handleEvent(event as DaemonEvent);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (!signal.aborted) {\n\t\t\t\tconsole.error('[DaemonModel] Event stream error:', e);\n\t\t\t\t// Reconnect after a delay\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!signal.aborted) {\n\t\t\t\t\t\tthis._startEventStream();\n\t\t\t\t\t}\n\t\t\t\t}, 2000);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _handleEvent(event: DaemonEvent): void {\n\t\tif (event.type === 'source-change') {\n\t\t\t// Update sourceTreeId for the session\n\t\t\tconst current = new Map(this._sourceTreeIds.get());\n\t\t\tcurrent.set(event.sessionName, event.sourceTreeId);\n\t\t\tthis._sourceTreeIds.set(current, undefined);\n\n\t\t\t// Evict screenshot cache entries for this session\n\t\t\tfor (const key of this._screenshotCache.keys()) {\n\t\t\t\tif (key.startsWith(`${event.sessionName}:`)) {\n\t\t\t\t\tthis._screenshotCache.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Configuration injected by the daemon via the Vite plugin.\n * Set as `window.__EXPLORER_DAEMON__` when the explorer is served from a daemon-managed Vite server.\n */\nexport interface DaemonConfig {\n\t/** Name of the session this explorer instance belongs to (e.g. 'current' or 'baseline') */\n\treadonly sessionName: string;\n}\n\ndeclare global {\n\tinterface Window {\n\t\t__EXPLORER_DAEMON__?: DaemonConfig;\n\t}\n}\n\n/**\n * Reads daemon config from the global window object.\n * Returns undefined if the explorer is not running under a daemon.\n */\nexport function getDaemonConfig(): DaemonConfig | undefined {\n\treturn window.__EXPLORER_DAEMON__;\n}\n","/**\n * Viewer entry point\n * \n * This module exports everything needed by the Component Explorer viewer.\n * Projects should NOT import from this module - use '@vscode/component-explorer' instead.\n * \n * The viewer includes:\n * - ExplorerApp, Explorer component\n * - CliRuntime for screenshot mode\n * - All internal types and utilities\n */\n\n// Re-export everything from core (except it will be used by viewer)\nexport * from './core/index.js';\n\n// Styles\nimport './styles.css';\nimport './vscode-styles/default-dark-plus.css';\nimport './vscode-styles/default-light-plus.css';\n\n// Re-export fixtureApi types for convenience (consumers may need them)\nexport type {\n FixtureExport,\n SingleFixtureExport,\n FixtureGroupExport,\n FixtureVariantsExport,\n} from './core/fixtureApi.js';\n\nimport { FixtureRegistry, type FixtureExport, type FixtureModules } from './core/index.js';\nimport { createRoot } from 'react-dom/client';\nimport { createElement } from 'react';\nimport { Explorer } from './components/index.js';\nimport { DaemonModel, getDaemonConfig } from './daemon/index.js';\n\n// Main exports\nexport { Explorer, ExplorerWithDefaults, ExplorerModel } from './components/index.js';\nexport type { ExplorerTreeNode } from './components/index.js';\nexport { toExplorerTree } from './components/index.js';\n\n// Sub-components\nexport {\n TitleBar,\n TitleBarButton,\n LeftSidebar,\n RightSidebar,\n TreeView,\n TreeItem,\n} from './components/index.js';\n\n// Icons\nexport * from './components/icons.js';\n\n// Styles utilities\nexport { styles, mergeStyles } from './components/index.js';\n\n// Daemon exports\nexport { DaemonModel } from './daemon/index.js';\nexport type { DaemonScreenshotResult, DaemonCompareResult, DaemonFixtureInfo } from './daemon/DaemonModel.js';\n\n/**\n * The main Component Explorer application.\n * Create with `new ExplorerApp(element, fixtureModules)`.\n */\nexport class ExplorerApp {\n private readonly _root: ReturnType<typeof createRoot>;\n private readonly _registry = new FixtureRegistry();\n private readonly _daemonModel?: DaemonModel;\n\n constructor(element: HTMLElement, fixtureModules: FixtureModules) {\n this._populateRegistry(fixtureModules);\n this._daemonModel = this._initializeDaemonModel();\n this._root = createRoot(element);\n this._root.render(createElement(Explorer, { registry: this._registry, daemonModel: this._daemonModel }));\n }\n\n private _initializeDaemonModel(): DaemonModel | undefined {\n const daemonConfig = getDaemonConfig();\n if (!daemonConfig) {\n return undefined;\n }\n const model = new DaemonModel(daemonConfig);\n model.initialize().catch(err => {\n console.error('[ExplorerApp] Failed to initialize DaemonModel:', err);\n });\n return model;\n }\n\n private _populateRegistry(fixtureModules: FixtureModules): void {\n this._registry.clear();\n for (const [path, module] of Object.entries(fixtureModules)) {\n const fixture = module.default;\n if (fixture && typeof fixture === 'object') {\n this._registry.register(path, fixture as FixtureExport);\n }\n }\n }\n\n /**\n * Updates the fixtures. The UI will update automatically since the registry is observable.\n */\n updateFixtures(fixtureModules: FixtureModules): void {\n this._populateRegistry(fixtureModules);\n }\n\n /**\n * No-op for ExplorerApp (only meaningful for CliRuntime).\n * Present so the plugin's HMR wiring can call it polymorphically.\n */\n bumpVersion(): void {\n // Explorer uses observables; no version tracking needed.\n }\n\n /**\n * Unmounts the explorer and cleans up resources.\n */\n dispose(): void {\n this._daemonModel?.dispose();\n this._root.unmount();\n }\n}\n"],"names":["isSingleFixture","value","singleFixtureBrand","isFixtureGroup","fixtureGroupBrand","isFixtureVariants","fixtureVariantsBrand","parseFixtureExport","parseSingleFixture","parseFixtureGroup","parseFixtureVariants","createComponentDefinition","fixture","id","name","options","isComponentDefinition","VIEWPORT_SIZES","resolveViewport","preset","getDefaultPropertyValues","properties","values","prop","createFixtureTree","fixtures","root","filePath","fixtureExport","baseName","extractBaseName","addFixtureExportToTree","parent","pathSegments","componentNode","folderName","folderId","folder","_a","c","key","entry","variantsName","variantsNode","variant","childId","findNodeByPath","path","current","segment","collectComponents","node","components","child","globalObservableLogger","addLogger","logger","ComposedLogger","getLogger","globalObservableLoggerFn","setLogObservableFn","fn","logObservable","obs","loggers","observable","location","newCount","info","autorun","change","derived","transaction","DebugLocation","enabled","enable","ofCaller","ofNthCaller","n","Err","l","stack","DebugLocationImpl","parentIdx","lines","parseLine","fileName","line","column","stackLine","match","match2","DebugNameData","owner","debugNameSource","referenceFn","target","getDebugName","countPerName","cachedDebugName","data","cached","dbgName","computeDebugName","count","result","self","ownerStr","formatOwner","getFunctionName","findKey","obj","countPerClassName","ownerId","className","getClassName","ctor","fnSrc","_derived","_setDerivedOpts","_recomputeInitiallyAndOnChange","_setRecomputeInitiallyAndOnChange","recomputeInitiallyAndOnChange","_keepObserved","_setKeepObserved","keepObserved","_debugGetDependencyGraph","_setDebugGetDependencyGraph","debugGetDependencyGraph","ConvenientObservable","reader","fnOrOwner","fnOrUndefined","debugLocation","store","handleValue","BaseObservable","observer","len","deleted","hadLogger","toDisposable","BugIndicatingError","message","onBugIndicatingError","error","onUnexpectedError","strictEquals","a","b","isDefined","arg","DisposableStore","disposable","index","derivedStateToString","state","Derived","_debugNameData","_computeFn","_changeTracker","_handleLastObserverRemoved","_equalityComparator","d","_b","changeSummary","didChange","emptySet","_c","hadValue","oldValue","delayedStore","o","_d","e","r","_observable","propagateBeginUpdate","observers","shouldReact","wasUpToDate","shouldCallBeginUpdate","newValue","tx","computeFnOrOwner","computeFn","derivedOpts","derivedDisposable","computeFnOrUndefined","autorunStateToString","AutorunObserver","_runFn","handleBugIndicatingErrorRecovery","err","TransactionImpl","subtransaction","_fn","_getDebugName","updatingObservers","i","observableValue","nameOrOwner","initialValue","debugNameData","ObservableValue","_tx","observableFromEvent","args","event","getValue","FromEventObservable","_getValue","_getTransaction","didRunTransaction","batchEventsGlobally","didSet","KeepAliveObserver","_forceRecompute","_handleValue","consoleObservableLogger","logObservableToConsole","ConsoleObservableLogger","text","consoleTextToArgs","normalText","repeat","styled","formatValue","formatKind","changes","changedObservables","transactionName","styles","firstArg","process","t","item","kind","padStr","objToCss","styleObj","styleString","propName","propValue","style","availableLen","formatArray","formatObject","first","val","str","length","SimpleTypedRpcConnection","channelFactory","getHandler","_channelFactory","_getHandler","notificationData","m","requestData","requests","notifications","registerDebugChannel","channelId","createClient","g","queuedNotifications","curHost","channel","handler","createChannelFactoryFromDebugChannel","curClient","host","h","Throttler","timeoutMs","deepAssign","source","deepAssignDeleteNulls","DevToolsLogger","affected","txs","observerQueue","processedObservers","queue","observersToUpdate","observerState","base","changedDependencies","autorunInfo","declarationIds","observableId","decl","instanceId","jsonValue","update","type","decInfo","changeInfo","formattedValue","debugNamePostProcessor","Info","formatObservableInfo","indentLevel","alreadyListed","indent","dep","sourceObj","dependencies","FixtureRegistry","__publicField","tree","CliRuntime","_containerElement","fixtureModules","fixtureId","container","def","defaultProps","renderTarget","shadow","errors","originalError","originalWarn","errorHandler","rejectionHandler","reason","resolve","module","groupPath","results","nextPath","found","ManualChangesHandler","_run","_change","PropertyTransformerFactory","propConst","PropertyConstTransformerFactory","propObs","PropertyObsTransformerFactory","readableProp","_reader","v","isObservable","mapObject","ViewModelContextSymbol","BaseViewModel","props","getOrCreateViewModelContext","createContext","ViewModel","renderingCount","batchedUpdater","potentialChanges","rendering","unstable_batchedUpdates","viewIdx","ViewImpl","debugName","renderFactory","obsView","componentName","render","contexts","plusOne","x","createVM","forceUpdate","useReducer","useState","ctx","useContext","useEffect","view","p","readableProps","propValues","collectRequiredContexts","propsDesc","viewWithModel","viewModelCtor","propsOrRender","maybeRender","modelPropsDesc","requiredContexts","viewModelContext","allContexts","getContextValues","contextValues","providedModel","readableModelProps","k","model","modelProps","toExplorerTree","createLocalStorageObservable","storageKey","defaultValue","serialize","deserialize","stored","originalSet","ExplorerModel","nodeId","selectedNode","mode","sessionName","daemon","url","newSet","nodes","pathPrefix","childPath","items","mergeStyles","styleObjects","TitleBarButtonModel","hovered","TitleBarButton","isHovered","active","buttonStyle","jsx","ChevronRightIcon","ChevronDownIcon","ComponentIcon","FolderIcon","PanelLeftIcon","PanelRightIcon","SunIcon","MoonIcon","ViewModeSelector","viewMode","sessions","currentSession","otherSessions","s","jsxs","viewModeStyles","ViewModeButton","label","onClick","TitleBar","leftVisible","rightVisible","isDarkTheme","Fragment","TreeView","TreeItem","TreeItemModel","itemModel","depth","hasChildren","isExpanded","isSelected","itemStyle","LeftSidebar","ToggleSwitchModel","ToggleSwitch","checked","trackStyle","thumbStyle","PropertiesContent","RightSidebar","FixturePreviewItemModel","el","component","elementToObserve","entries","width","height","styleEl","linkEl","renderContainer","FixturePreviewItem","displayMode","measuredWidth","measuredHeight","compact","containerStyle","viewport","resolved","dimensionsText","wrapperStyle","previewItemStyles","nameStyle","getCanvasStyle","CHECKER_SIZE","createCheckerPattern","baseColor","checkerColor","lightPattern","darkPattern","canvasBaseStyle","background","pattern","FixtureScreenshotModel","version","FixtureScreenshotView","screenshotStyles","SingleComparisonModel","sourceTreeIds","baselineStId","currentStId","SingleComparison","status","statusBadge","compStyles","ScreenshotComparisonRow","STORAGE_KEY","MAX_ENTRIES","_cache","loadCache","saveCache","setCachedHeight","cache","getAllCachedHeights","ESTIMATED_ROW_HEIGHT","ROW_GAP","CONTENT_PADDING","OVERSCAN_PX","SCROLL_ANCHOR_KEY","MAX_ANCHOR_ENTRIES","loadScrollAnchors","saveScrollAnchor","anchor","all","pruned","getScrollAnchor","getRowId","row","computeLayout","rows","heightCache","top","layoutTotalHeight","layout","last","findFirstVisibleRow","y","lo","hi","mid","computeVisibleRange","scrollTop","viewportHeight","start","end","bottom","computeAnchor","idx","rowIndex","scrollTopForAnchor","PreviewAreaModel","heights","newMap","rid","oldLayout","newLayout","newScrollTop","PreviewArea","selectedNodeId","total","VariantsRowView","Explorer","createDemoRegistry","registry","defineFixtureGroup","defineFixture","ExplorerWithDefaults","AsyncStream","_AsyncStream","iterator","ApiError","statusCode","method","ProxyApiClient","_request","prefix","_target","_self","createFetchClient","baseUrl","data2","contentType","buffer","decoder","done","eolIndex","finalLine","DaemonModel","config","sourceTreeId","cacheKey","baselineSessionName","currentSessionName","baselineSourceTreeId","currentSourceTreeId","session","map","sessionList","signal","stream","getDaemonConfig","ExplorerApp","element","createRoot","createElement","daemonConfig"],"mappings":"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"}