@omiron33/omi-neuron-web 0.1.2 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{NeuronWeb-DG5ICk2K.d.cts → NeuronWeb-DHP0heLZ.d.cts} +4 -2
- package/dist/{NeuronWeb-DbcYoeQE.d.ts → NeuronWeb-jS_bg9lu.d.ts} +4 -2
- package/dist/{chunk-KC7V76I3.cjs → chunk-U7K7KQZG.cjs} +320 -69
- package/dist/chunk-U7K7KQZG.cjs.map +1 -0
- package/dist/{chunk-GPDX3O37.js → chunk-YFJMQCGE.js} +321 -70
- package/dist/chunk-YFJMQCGE.js.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/visualization/index.cjs +6 -6
- package/dist/visualization/index.d.cts +4 -2
- package/dist/visualization/index.d.ts +4 -2
- package/dist/visualization/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-GPDX3O37.js.map +0 -1
- package/dist/chunk-KC7V76I3.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/visualization/constants.ts","../src/visualization/scene/scene-manager.ts","../src/visualization/hooks/useSceneManager.ts","../src/visualization/scene/node-renderer.ts","../src/visualization/scene/edge-renderer.ts","../src/visualization/layouts/fuzzy-layout.ts","../src/visualization/interactions/interaction-manager.ts","../src/visualization/animations/animation-controller.ts","../src/visualization/NeuronWeb.tsx","../src/visualization/themes/theme-engine.ts"],"names":["THREE2","THREE3","baseRadius","THREE4","useState","useEffect","THREE5"],"mappings":"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","file":"chunk-YFJMQCGE.js","sourcesContent":["import type { NeuronWebTheme } from './types';\n\nexport const DEFAULT_THEME: NeuronWebTheme = {\n colors: {\n background: '#020314',\n domainColors: {},\n defaultDomainColor: '#c0c5ff',\n edgeDefault: '#4d4d55',\n edgeActive: '#c6d4ff',\n edgeSelected: '#ffffff',\n labelText: '#ffffff',\n labelBackground: 'rgba(5, 6, 31, 0.8)',\n },\n typography: {\n labelFontFamily: 'system-ui, sans-serif',\n labelFontSize: 12,\n labelFontWeight: '500',\n },\n effects: {\n starfieldEnabled: true,\n starfieldColor: '#ffffff',\n glowEnabled: true,\n glowIntensity: 0.6,\n ambientMotionEnabled: true,\n ambientMotionSpeed: 0.6,\n ambientMotionAmplitude: 0.25,\n edgeFlowEnabled: true,\n edgeFlowSpeed: 1.2,\n fogEnabled: true,\n fogColor: '#020314',\n fogNear: 24,\n fogFar: 160,\n },\n animation: {\n focusDuration: 800,\n transitionDuration: 650,\n easing: 'easeInOut',\n hoverScale: 1.12,\n selectedScale: 1.4,\n selectionPulseScale: 0.35,\n selectionPulseDuration: 520,\n hoverCardFadeDuration: 160,\n },\n};\n","import * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\n\nexport interface SceneConfig {\n backgroundColor: string;\n cameraFov?: number;\n cameraPosition: [number, number, number];\n cameraTarget: [number, number, number];\n minZoom: number;\n maxZoom: number;\n enableStarfield: boolean;\n starfieldCount: number;\n starfieldColor: string;\n pixelRatioCap: number;\n ambientLightIntensity?: number;\n keyLightIntensity?: number;\n fillLightIntensity?: number;\n fogEnabled?: boolean;\n fogColor?: string;\n fogNear?: number;\n fogFar?: number;\n}\n\nexport class SceneManager {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n renderer: THREE.WebGLRenderer;\n labelRenderer: CSS2DRenderer;\n controls: OrbitControls;\n private animationId: number | null = null;\n private lastFrameTime = 0;\n private elapsedTime = 0;\n private frameListeners = new Set<(delta: number, elapsed: number) => void>();\n private starfield: THREE.Points | null = null;\n private ambientLight: THREE.AmbientLight | null = null;\n private keyLight: THREE.DirectionalLight | null = null;\n private fillLight: THREE.PointLight | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n constructor(private container: HTMLElement, private config: SceneConfig) {\n this.scene = new THREE.Scene();\n this.camera = new THREE.PerspectiveCamera(config.cameraFov ?? 52, 1, 0.1, 220);\n this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n this.labelRenderer = new CSS2DRenderer();\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n }\n\n initialize(): void {\n const { cameraPosition, cameraTarget, backgroundColor } = this.config;\n this.scene.background = new THREE.Color(backgroundColor);\n if (this.config.fogEnabled) {\n const fogColor = this.config.fogColor ?? backgroundColor;\n this.scene.fog = new THREE.Fog(fogColor, this.config.fogNear ?? 32, this.config.fogFar ?? 200);\n }\n this.camera.position.set(...cameraPosition);\n this.controls.target.set(...cameraTarget);\n this.controls.minDistance = this.config.minZoom;\n this.controls.maxDistance = this.config.maxZoom;\n this.controls.update();\n\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, this.config.pixelRatioCap));\n this.renderer.outputColorSpace = THREE.SRGBColorSpace;\n this.renderer.toneMapping = THREE.NoToneMapping;\n this.renderer.toneMappingExposure = 1;\n this.renderer.setSize(this.container.clientWidth, this.container.clientHeight);\n this.renderer.domElement.style.position = 'absolute';\n this.renderer.domElement.style.top = '0';\n this.renderer.domElement.style.left = '0';\n this.renderer.domElement.style.width = '100%';\n this.renderer.domElement.style.height = '100%';\n this.labelRenderer.setSize(this.container.clientWidth, this.container.clientHeight);\n this.labelRenderer.domElement.style.position = 'absolute';\n this.labelRenderer.domElement.style.top = '0';\n this.labelRenderer.domElement.style.left = '0';\n this.labelRenderer.domElement.style.pointerEvents = 'none';\n this.labelRenderer.domElement.style.width = '100%';\n this.labelRenderer.domElement.style.height = '100%';\n\n this.container.appendChild(this.renderer.domElement);\n this.container.appendChild(this.labelRenderer.domElement);\n\n this.initLights();\n if (this.config.enableStarfield) {\n this.initStarfield();\n }\n\n window.addEventListener('resize', this.resize);\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.resize());\n this.resizeObserver.observe(this.container);\n }\n this.startAnimationLoop();\n }\n\n dispose(): void {\n this.stopAnimationLoop();\n window.removeEventListener('resize', this.resize);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.renderer.dispose();\n this.scene.clear();\n this.container.innerHTML = '';\n this.frameListeners.clear();\n this.starfield = null;\n this.ambientLight = null;\n this.keyLight = null;\n this.fillLight = null;\n }\n\n startAnimationLoop(): void {\n const loop = (time = performance.now()) => {\n if (!this.lastFrameTime) {\n this.lastFrameTime = time;\n }\n const delta = (time - this.lastFrameTime) / 1000;\n this.lastFrameTime = time;\n this.elapsedTime += delta;\n this.frameListeners.forEach((listener) => listener(delta, this.elapsedTime));\n this.render();\n this.animationId = requestAnimationFrame(loop);\n };\n loop();\n }\n\n stopAnimationLoop(): void {\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n }\n\n render(): void {\n this.controls.update();\n this.renderer.render(this.scene, this.camera);\n this.labelRenderer.render(this.scene, this.camera);\n }\n\n resize = (): void => {\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n if (!width || !height) return;\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height);\n this.labelRenderer.setSize(width, height);\n };\n\n updateBackground(color: string): void {\n this.scene.background = new THREE.Color(color);\n if (this.scene.fog && this.config.fogEnabled) {\n this.scene.fog.color = new THREE.Color(this.config.fogColor ?? color);\n }\n if (this.starfield) {\n (this.starfield.material as THREE.PointsMaterial).color = new THREE.Color(\n this.config.starfieldColor\n );\n }\n }\n\n updateCamera(position: [number, number, number]): void {\n this.camera.position.set(...position);\n }\n\n addFrameListener(listener: (delta: number, elapsed: number) => void): () => void {\n this.frameListeners.add(listener);\n return () => this.frameListeners.delete(listener);\n }\n\n getWorldPosition(screenX: number, screenY: number): THREE.Vector3 {\n return this.screenToWorld(screenX, screenY);\n }\n\n screenToWorld(x: number, y: number): THREE.Vector3 {\n const rect = this.container.getBoundingClientRect();\n const ndc = new THREE.Vector3(\n ((x - rect.left) / rect.width) * 2 - 1,\n -((y - rect.top) / rect.height) * 2 + 1,\n 0.5\n );\n ndc.unproject(this.camera);\n return ndc;\n }\n\n worldToScreen(position: THREE.Vector3): { x: number; y: number } {\n const vector = position.clone().project(this.camera);\n const rect = this.container.getBoundingClientRect();\n return {\n x: (vector.x * 0.5 + 0.5) * rect.width + rect.left,\n y: (-vector.y * 0.5 + 0.5) * rect.height + rect.top,\n };\n }\n\n onContextLost = () => {};\n onContextRestored = () => {};\n\n private initStarfield(): void {\n const count = Math.max(0, this.config.starfieldCount);\n if (!count) return;\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(count * 3);\n for (let i = 0; i < count; i += 1) {\n positions[i * 3] = THREE.MathUtils.randFloatSpread(70);\n positions[i * 3 + 1] = THREE.MathUtils.randFloatSpread(70);\n positions[i * 3 + 2] = THREE.MathUtils.randFloatSpread(70);\n }\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n const material = new THREE.PointsMaterial({\n color: this.config.starfieldColor,\n size: 0.22,\n sizeAttenuation: true,\n transparent: true,\n opacity: 0.5,\n depthWrite: false,\n });\n this.starfield = new THREE.Points(geometry, material);\n this.starfield.name = 'neuron-starfield';\n this.scene.add(this.starfield);\n }\n\n private initLights(): void {\n const ambientIntensity = this.config.ambientLightIntensity ?? 0.65;\n const keyIntensity = this.config.keyLightIntensity ?? 1.0;\n const fillIntensity = this.config.fillLightIntensity ?? 0.45;\n\n this.ambientLight = new THREE.AmbientLight('#ffffff', ambientIntensity);\n this.keyLight = new THREE.DirectionalLight('#b6c6ff', keyIntensity);\n this.keyLight.position.set(12, 18, 16);\n this.fillLight = new THREE.PointLight('#5c7aff', fillIntensity, 120, 2.2);\n this.fillLight.position.set(-18, -6, 10);\n\n this.scene.add(this.ambientLight, this.keyLight, this.fillLight);\n }\n}\n","import { useEffect, useState } from 'react';\nimport type { RefObject } from 'react';\nimport { SceneManager, type SceneConfig } from '../scene/scene-manager';\n\nexport function useSceneManager(\n containerRef: RefObject<HTMLElement | null>,\n config: SceneConfig\n): SceneManager | null {\n const [manager, setManager] = useState<SceneManager | null>(null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const sceneManager = new SceneManager(container, config);\n sceneManager.initialize();\n setManager(sceneManager);\n return () => {\n sceneManager.dispose();\n setManager(null);\n };\n }, [containerRef, config.backgroundColor]);\n\n return manager;\n}\n","import * as THREE from 'three';\nimport { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\nimport type { NeuronVisualNode, NodeTier } from '../../core/types';\n\nexport interface NodeRenderConfig {\n domainColors: Record<string, string>;\n defaultColor: string;\n baseScale: number;\n tierScales: Record<NodeTier, number>;\n glowIntensity: number;\n labelDistance: number;\n maxVisibleLabels: number;\n labelOffset?: [number, number, number];\n labelFontFamily: string;\n labelFontSize: number;\n labelFontWeight: string;\n labelTextColor: string;\n labelBackground: string;\n ambientMotionEnabled: boolean;\n ambientMotionAmplitude: number;\n ambientMotionSpeed: number;\n hoverScale: number;\n selectedScale: number;\n pulseScale: number;\n pulseDuration: number;\n}\n\ninterface NodeRenderState {\n sprite: THREE.Sprite;\n material: THREE.SpriteMaterial;\n label: CSS2DObject | null;\n basePosition: THREE.Vector3;\n baseScale: number;\n phase: number;\n baseColor: THREE.Color;\n hovered: boolean;\n selected: boolean;\n pulseStart: number | null;\n}\n\nexport class NodeRenderer {\n private group = new THREE.Group();\n private nodeStates = new Map<string, NodeRenderState>();\n private hoveredNodeId: string | null = null;\n private selectedNodeId: string | null = null;\n private glowTexture: THREE.Texture | null = null;\n private labelOffset = new THREE.Vector3(0, 0.65, 0);\n\n constructor(private scene: THREE.Scene, private config: NodeRenderConfig) {\n this.scene.add(this.group);\n this.glowTexture = this.createGlowTexture();\n if (config.labelOffset) {\n this.labelOffset.set(...config.labelOffset);\n }\n }\n\n renderNodes(nodes: NeuronVisualNode[]): void {\n this.clear();\n const shouldRenderLabels = this.config.maxVisibleLabels > 0 && this.config.labelDistance > 0;\n nodes.forEach((node) => {\n const color = new THREE.Color(\n this.config.domainColors[node.domain] ?? this.config.defaultColor\n );\n const material = new THREE.SpriteMaterial({\n map: this.glowTexture ?? undefined,\n color,\n transparent: true,\n opacity: 0.78,\n depthWrite: false,\n });\n const sprite = new THREE.Sprite(material);\n const position = new THREE.Vector3();\n if (node.position) {\n position.set(...node.position);\n }\n sprite.position.copy(position);\n const tierScale = node.tier ? this.config.tierScales[node.tier] ?? 1 : 1;\n const baseScale = this.config.baseScale * tierScale;\n sprite.scale.setScalar(baseScale);\n sprite.userData = { nodeId: node.id, nodeSlug: node.slug };\n this.group.add(sprite);\n let labelObject: CSS2DObject | null = null;\n if (shouldRenderLabels) {\n const labelElement = this.createLabelElement(node, color);\n labelObject = new CSS2DObject(labelElement);\n labelObject.position.copy(sprite.position).add(this.labelOffset);\n this.scene.add(labelObject);\n }\n this.nodeStates.set(node.id, {\n sprite,\n material,\n label: labelObject,\n basePosition: position.clone(),\n baseScale,\n phase: Math.random() * Math.PI * 2,\n baseColor: color,\n hovered: false,\n selected: false,\n pulseStart: null,\n });\n });\n }\n\n updateNode(nodeId: string, updates: Partial<NeuronVisualNode>): void {\n const state = this.nodeStates.get(nodeId);\n if (!state) return;\n if (updates.position) {\n state.basePosition.set(...updates.position);\n state.sprite.position.set(...updates.position);\n }\n if (updates.tier) {\n const tierScale = this.config.tierScales[updates.tier] ?? 1;\n state.baseScale = this.config.baseScale * tierScale;\n }\n if (updates.domain) {\n const color = new THREE.Color(\n this.config.domainColors[updates.domain] ?? this.config.defaultColor\n );\n state.baseColor = color;\n state.material.color = color;\n }\n }\n\n removeNode(nodeId: string): void {\n const state = this.nodeStates.get(nodeId);\n if (!state) return;\n if (state.label) {\n this.scene.remove(state.label);\n }\n this.group.remove(state.sprite);\n this.nodeStates.delete(nodeId);\n }\n\n clear(): void {\n this.nodeStates.forEach((state) => {\n if (state.label) {\n this.scene.remove(state.label);\n }\n });\n this.group.clear();\n this.nodeStates.clear();\n this.hoveredNodeId = null;\n this.selectedNodeId = null;\n }\n\n showNodes(nodeIds: string[]): void {\n nodeIds.forEach((id) => {\n const state = this.nodeStates.get(id);\n if (state) state.sprite.visible = true;\n });\n }\n\n hideNodes(nodeIds: string[]): void {\n nodeIds.forEach((id) => {\n const state = this.nodeStates.get(id);\n if (state) state.sprite.visible = false;\n });\n }\n\n setVisibleNodes(nodeIds: string[] | null): void {\n if (!nodeIds) {\n this.nodeStates.forEach((state) => {\n state.sprite.visible = true;\n });\n return;\n }\n const visibleSet = new Set(nodeIds);\n this.nodeStates.forEach((state, id) => {\n state.sprite.visible = visibleSet.has(id);\n });\n }\n\n updateLabelVisibility(camera: THREE.PerspectiveCamera): void {\n if (this.config.maxVisibleLabels <= 0 || this.config.labelDistance <= 0) {\n this.nodeStates.forEach((state) => {\n if (state.label) state.label.visible = false;\n });\n return;\n }\n\n const entries: Array<{ state: NodeRenderState; distance: number }> = [];\n this.nodeStates.forEach((state) => {\n if (!state.label) return;\n if (!state.sprite.visible) {\n state.label.visible = false;\n return;\n }\n const distance = camera.position.distanceTo(state.sprite.position);\n entries.push({ state, distance });\n });\n\n entries.sort((a, b) => a.distance - b.distance);\n entries.forEach((entry, index) => {\n const visible =\n entry.distance <= this.config.labelDistance && index < this.config.maxVisibleLabels;\n entry.state.label!.visible = visible;\n });\n }\n\n private createLabelElement(node: NeuronVisualNode, accent: THREE.Color): HTMLDivElement {\n const wrapper = document.createElement('div');\n wrapper.style.borderRadius = '10px';\n wrapper.style.border = '1px solid rgba(255, 255, 255, 0.12)';\n wrapper.style.background = this.config.labelBackground;\n wrapper.style.color = this.config.labelTextColor;\n wrapper.style.fontFamily = this.config.labelFontFamily;\n wrapper.style.fontSize = `${this.config.labelFontSize}px`;\n wrapper.style.fontWeight = this.config.labelFontWeight;\n wrapper.style.padding = '6px 8px';\n wrapper.style.boxShadow = '0 10px 30px rgba(5, 10, 20, 0.35)';\n wrapper.style.backdropFilter = 'blur(10px)';\n wrapper.style.pointerEvents = 'none';\n wrapper.style.maxWidth = '220px';\n\n const isInsight = node.tier === 'insight' || node.domain === 'insight';\n if (isInsight) {\n const accentBright = accent.clone().lerp(new THREE.Color('#ffffff'), 0.35);\n wrapper.style.border = `1px solid ${this.toRgba(accentBright, 0.6)}`;\n wrapper.style.background = this.toRgba(accent, 0.2);\n wrapper.style.color = this.toRgba(accentBright, 0.95);\n }\n\n const badgeRow = document.createElement('div');\n badgeRow.style.display = 'flex';\n badgeRow.style.flexWrap = 'wrap';\n badgeRow.style.gap = '4px';\n badgeRow.style.marginBottom = '4px';\n\n const makeBadge = (text: string, tone: 'accent' | 'muted') => {\n const badge = document.createElement('span');\n badge.textContent = text;\n badge.style.display = 'inline-flex';\n badge.style.alignItems = 'center';\n badge.style.gap = '4px';\n badge.style.borderRadius = '999px';\n badge.style.padding = '2px 6px';\n badge.style.fontSize = '0.6rem';\n badge.style.fontWeight = '600';\n badge.style.textTransform = 'uppercase';\n badge.style.letterSpacing = '0.2em';\n if (tone === 'accent') {\n badge.style.border = `1px solid ${this.toRgba(accent, 0.6)}`;\n badge.style.background = this.toRgba(accent, 0.4);\n badge.style.color = '#f5f7ff';\n } else {\n badge.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n badge.style.background = 'rgba(255, 255, 255, 0.08)';\n badge.style.color = 'rgba(255, 255, 255, 0.8)';\n }\n return badge;\n };\n\n if (isInsight) {\n badgeRow.appendChild(makeBadge('Insight', 'accent'));\n const statusRaw =\n (node.metadata?.status as string | undefined) ??\n (node.metadata?.draftNodeStatus as string | undefined) ??\n (node.metadata?.studyPathStatus as string | undefined);\n if (statusRaw) {\n const formatted = statusRaw\n .replace(/[_-]/g, ' ')\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n badgeRow.appendChild(makeBadge(formatted, 'muted'));\n }\n }\n\n if (badgeRow.childElementCount > 0) {\n wrapper.appendChild(badgeRow);\n }\n\n const title = document.createElement('div');\n title.textContent = node.label;\n title.style.fontSize = '0.8rem';\n title.style.fontWeight = '600';\n wrapper.appendChild(title);\n\n if (node.ref) {\n const reference = document.createElement('div');\n reference.textContent = node.ref;\n reference.style.fontSize = '0.65rem';\n reference.style.opacity = '0.7';\n wrapper.appendChild(reference);\n }\n\n return wrapper;\n }\n\n private toRgba(color: THREE.Color, alpha: number): string {\n const r = Math.round(color.r * 255);\n const g = Math.round(color.g * 255);\n const b = Math.round(color.b * 255);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n highlightNode(nodeId: string): void {\n this.setHoveredNode(nodeId);\n }\n\n unhighlightNode(nodeId: string): void {\n if (this.hoveredNodeId === nodeId) {\n this.setHoveredNode(null);\n }\n }\n\n clearHighlights(): void {\n this.setHoveredNode(null);\n }\n\n getNodePosition(nodeId: string): THREE.Vector3 | null {\n const state = this.nodeStates.get(nodeId);\n return state ? state.sprite.position.clone() : null;\n }\n\n getNodeObject(nodeId: string): THREE.Object3D | null {\n const state = this.nodeStates.get(nodeId);\n return state?.sprite ?? null;\n }\n\n getNodeObjects(): THREE.Object3D[] {\n return Array.from(this.nodeStates.values()).map((state) => state.sprite);\n }\n\n setHoveredNode(nodeId: string | null): void {\n if (this.hoveredNodeId === nodeId) return;\n if (this.hoveredNodeId) {\n const prev = this.nodeStates.get(this.hoveredNodeId);\n if (prev) prev.hovered = false;\n }\n this.hoveredNodeId = nodeId;\n if (nodeId) {\n const next = this.nodeStates.get(nodeId);\n if (next) next.hovered = true;\n }\n }\n\n setSelectedNode(nodeId: string | null): void {\n if (this.selectedNodeId === nodeId) return;\n if (this.selectedNodeId) {\n const prev = this.nodeStates.get(this.selectedNodeId);\n if (prev) prev.selected = false;\n }\n this.selectedNodeId = nodeId;\n if (nodeId) {\n const next = this.nodeStates.get(nodeId);\n if (next) next.selected = true;\n }\n }\n\n pulseNode(nodeId: string): void {\n const state = this.nodeStates.get(nodeId);\n if (!state) return;\n state.pulseStart = performance.now() / 1000;\n }\n\n update(_: number, elapsed: number): void {\n const now = performance.now() / 1000;\n this.nodeStates.forEach((state) => {\n if (this.config.ambientMotionEnabled) {\n const drift =\n Math.sin(elapsed * this.config.ambientMotionSpeed + state.phase) *\n this.config.ambientMotionAmplitude;\n const driftX =\n Math.cos(elapsed * this.config.ambientMotionSpeed * 0.6 + state.phase) *\n this.config.ambientMotionAmplitude *\n 0.45;\n const driftZ =\n Math.sin(elapsed * this.config.ambientMotionSpeed * 0.4 + state.phase) *\n this.config.ambientMotionAmplitude *\n 0.35;\n state.sprite.position.set(\n state.basePosition.x + driftX,\n state.basePosition.y + drift,\n state.basePosition.z + driftZ\n );\n } else {\n state.sprite.position.copy(state.basePosition);\n }\n\n if (state.label) {\n state.label.position.copy(state.sprite.position).add(this.labelOffset);\n }\n\n const hoverScale = state.hovered ? this.config.hoverScale : 1;\n const selectedScale = state.selected ? this.config.selectedScale : 1;\n let pulseScale = 0;\n if (state.pulseStart !== null) {\n const progress = (now - state.pulseStart) / this.config.pulseDuration;\n if (progress >= 1) {\n state.pulseStart = null;\n } else {\n pulseScale = Math.sin(progress * Math.PI) * this.config.pulseScale;\n }\n }\n const targetScale = state.baseScale * hoverScale * selectedScale * (1 + pulseScale);\n const currentScale = state.sprite.scale.x;\n const nextScale = currentScale + (targetScale - currentScale) * 0.18;\n state.sprite.scale.setScalar(nextScale);\n\n const material = state.material;\n const baseOpacity = 0.78;\n const hoverOpacity = Math.min(0.95, baseOpacity + 0.12);\n const selectedOpacity = 1;\n material.opacity = state.selected\n ? selectedOpacity\n : state.hovered\n ? hoverOpacity\n : baseOpacity;\n material.color.copy(state.baseColor);\n if (state.selected) {\n material.color.lerp(new THREE.Color('#ffffff'), 0.25);\n }\n });\n }\n\n dispose(): void {\n this.clear();\n this.scene.remove(this.group);\n this.glowTexture?.dispose();\n this.glowTexture = null;\n }\n\n private createGlowTexture(): THREE.Texture | null {\n const size = 256;\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n const gradient = ctx.createRadialGradient(size / 2, size / 2, 0, size / 2, size / 2, size / 2);\n gradient.addColorStop(0, 'rgba(255,255,255,0.95)');\n gradient.addColorStop(0.4, 'rgba(255,255,255,0.45)');\n gradient.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, size, size);\n const texture = new THREE.CanvasTexture(canvas);\n texture.colorSpace = THREE.SRGBColorSpace;\n return texture;\n }\n}\n","import * as THREE from 'three';\nimport type { NeuronVisualEdge } from '../../core/types';\n\nexport interface EdgeRenderConfig {\n defaultColor: string;\n activeColor: string;\n selectedColor: string;\n baseOpacity: number;\n strengthOpacityScale: boolean;\n edgeFlowEnabled: boolean;\n edgeFlowSpeed: number;\n}\n\ninterface EdgeRenderState {\n line: THREE.Line;\n baseOpacity: number;\n phase: number;\n}\n\nexport class EdgeRenderer {\n private group = new THREE.Group();\n private edgeStates = new Map<string, EdgeRenderState>();\n private focusEdges = new Set<string>();\n\n constructor(private scene: THREE.Scene, private config: EdgeRenderConfig) {\n this.scene.add(this.group);\n }\n\n renderEdges(edges: NeuronVisualEdge[], nodePositions: Map<string, THREE.Vector3>): void {\n this.clear();\n edges.forEach((edge) => {\n const from = nodePositions.get(edge.from);\n const to = nodePositions.get(edge.to);\n if (!from || !to) return;\n const geometry = new THREE.BufferGeometry().setFromPoints([from, to]);\n const opacity = this.config.strengthOpacityScale ? edge.strength : this.config.baseOpacity;\n const material = new THREE.LineBasicMaterial({\n color: this.config.defaultColor,\n transparent: true,\n opacity,\n depthWrite: false,\n });\n const line = new THREE.Line(geometry, material);\n line.userData = { edgeId: edge.id };\n this.group.add(line);\n this.edgeStates.set(edge.id, {\n line,\n baseOpacity: opacity,\n phase: Math.random() * Math.PI * 2,\n });\n });\n }\n\n updateEdge(edgeId: string, updates: Partial<NeuronVisualEdge>): void {\n const state = this.edgeStates.get(edgeId);\n if (!state) return;\n if (updates.strength !== undefined) {\n const opacity = this.config.strengthOpacityScale ? updates.strength : this.config.baseOpacity;\n state.baseOpacity = opacity;\n (state.line.material as THREE.LineBasicMaterial).opacity = opacity;\n }\n }\n\n removeEdge(edgeId: string): void {\n const state = this.edgeStates.get(edgeId);\n if (!state) return;\n this.group.remove(state.line);\n this.edgeStates.delete(edgeId);\n }\n\n clear(): void {\n this.group.clear();\n this.edgeStates.clear();\n this.focusEdges.clear();\n }\n\n filterByStrength(minStrength: number): void {\n this.edgeStates.forEach((state) => {\n state.line.visible = (state.line.material as THREE.LineBasicMaterial).opacity >= minStrength;\n });\n }\n\n filterByType(): void {\n // Not implemented in stub.\n }\n\n highlightEdge(edgeId: string): void {\n this.setFocusEdges([edgeId]);\n }\n\n highlightEdgesForNode(): void {\n // Not implemented in stub.\n }\n\n unhighlightEdge(edgeId: string): void {\n if (this.focusEdges.has(edgeId)) {\n this.focusEdges.delete(edgeId);\n }\n }\n\n clearHighlights(): void {\n this.focusEdges.clear();\n }\n\n showEdges(edgeIds: string[]): void {\n edgeIds.forEach((id) => {\n const state = this.edgeStates.get(id);\n if (state) state.line.visible = true;\n });\n }\n\n hideEdges(edgeIds: string[]): void {\n edgeIds.forEach((id) => {\n const state = this.edgeStates.get(id);\n if (state) state.line.visible = false;\n });\n }\n\n setFocusEdges(edgeIds: string[] | null): void {\n this.focusEdges = new Set(edgeIds ?? []);\n }\n\n update(_: number, elapsed: number): void {\n const hasFocus = this.focusEdges.size > 0;\n this.edgeStates.forEach((state, id) => {\n const material = state.line.material as THREE.LineBasicMaterial;\n const isFocused = this.focusEdges.has(id);\n let opacity = state.baseOpacity;\n if (hasFocus) {\n if (isFocused) {\n const pulse = this.config.edgeFlowEnabled\n ? Math.sin(elapsed * this.config.edgeFlowSpeed + state.phase) * 0.25 + 0.75\n : 1;\n opacity = Math.min(1, state.baseOpacity + pulse * 0.4);\n material.color = new THREE.Color(this.config.activeColor);\n } else {\n opacity = Math.max(0.05, state.baseOpacity * 0.2);\n material.color = new THREE.Color(this.config.defaultColor);\n }\n } else {\n if (this.config.edgeFlowEnabled) {\n const pulse = Math.sin(elapsed * this.config.edgeFlowSpeed + state.phase) * 0.15 + 0.85;\n opacity = Math.min(1, state.baseOpacity * pulse);\n }\n material.color = new THREE.Color(this.config.defaultColor);\n }\n material.opacity = opacity;\n });\n }\n\n dispose(): void {\n this.clear();\n this.scene.remove(this.group);\n }\n}\n","import type { NeuronVisualNode } from '../../core/types';\nimport type { NeuronLayoutOptions } from '../types';\n\nconst GOLDEN_ANGLE = Math.PI * (3 - Math.sqrt(5));\nconst ATLAS_POSITION_OVERRIDES: Record<string, [number, number, number]> = {\n uap: [6, 2, 2],\n ez1: [2, 4, 0],\n neph: [-3, 3, 2],\n jude6: [-1, 1.5, 2.5],\n '2p24': [1.2, 0.3, 2.6],\n aiimg: [4.6, -1.6, 1.8],\n rev13: [2.7, -2.8, 0.6],\n xhuman: [0.4, -3.4, -1.8],\n dan243: [-1.6, -2.1, -2.9],\n llm: [3.4, 0.3, -2.4],\n babel: [0.9, 1.4, -3.4],\n warfare: [-4.6, 0.4, -1.5],\n eph612: [-5.5, -1.7, 0.5],\n berea: [-0.2, 4.6, -1.3],\n pharm: [-3.1, -2.4, 1.2],\n testsp: [5.4, 3.2, 1.6],\n};\n\nfunction generateSpherePosition(index: number, total: number, radius: number): [number, number, number] {\n if (total <= 1) {\n return [0, 0, 0];\n }\n const offset = 2 / total;\n const increment = Math.PI * (3 - Math.sqrt(5));\n const y = 1 - index * offset;\n const r = Math.sqrt(Math.max(0, 1 - y * y));\n const phi = index * increment;\n return [Math.cos(phi) * r * radius, y * radius, Math.sin(phi) * r * radius];\n}\n\nfunction hashString(input: string): number {\n let hash = 2166136261;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n\nfunction mulberry32(seed: number): () => number {\n let t = seed;\n return () => {\n t += 0x6d2b79f5;\n let r = Math.imul(t ^ (t >>> 15), t | 1);\n r ^= r + Math.imul(r ^ (r >>> 7), r | 61);\n return ((r ^ (r >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nfunction buildSeed(baseSeed: string, nodeKey: string): () => number {\n return mulberry32(hashString(`${baseSeed}:${nodeKey}`));\n}\n\nexport function applyFuzzyLayout(\n nodes: NeuronVisualNode[],\n options: NeuronLayoutOptions = {}\n): NeuronVisualNode[] {\n const mode = options.mode ?? 'atlas';\n if (mode === 'positioned') {\n return nodes;\n }\n\n const needsLayout = nodes.some((node) => !node.position);\n if (mode === 'auto' && !needsLayout) {\n return nodes;\n }\n\n const spread = options.spread ?? 1;\n const overrides = { ...ATLAS_POSITION_OVERRIDES, ...(options.overrides ?? {}) };\n\n if (mode === 'atlas' || mode === 'auto') {\n const baseRadius = (options.radius ?? 12) * spread;\n const insightRadius = (options.insightRadius ?? Math.max(5, baseRadius * 0.4)) * spread;\n const canonicalNodes = nodes.filter(\n (node) => node.tier !== 'insight' && node.domain !== 'insight'\n );\n const insightNodes = nodes.filter(\n (node) => node.tier === 'insight' || node.domain === 'insight'\n );\n const canonicalPositions = new Map<string, [number, number, number]>();\n const insightPositions = new Map<string, [number, number, number]>();\n canonicalNodes.forEach((node, index) => {\n canonicalPositions.set(\n node.id,\n generateSpherePosition(index, canonicalNodes.length, baseRadius)\n );\n });\n insightNodes.forEach((node, index) => {\n insightPositions.set(\n node.id,\n generateSpherePosition(index, insightNodes.length || 1, insightRadius)\n );\n });\n\n return nodes.map((node) => {\n const override = overrides[node.id] ?? overrides[node.slug];\n if (node.position && !override) {\n return node;\n }\n if (override) {\n return { ...node, position: [...override] as [number, number, number] };\n }\n const fallback =\n (node.tier === 'insight' || node.domain === 'insight'\n ? insightPositions.get(node.id)\n : canonicalPositions.get(node.id)) ?? [0, 0, 0];\n return { ...node, position: fallback };\n });\n }\n\n const baseSeed = options.seed ?? 'omi-neuron-web';\n const count = Math.max(nodes.length, 1);\n const baseRadius = (options.radius ?? Math.max(4, Math.sqrt(count) * 2.4)) * spread;\n const jitter = (options.jitter ?? baseRadius * 0.12) * spread;\n const zSpread = (options.zSpread ?? baseRadius * 0.6) * spread;\n\n return nodes.map((node, index) => {\n const shouldApply = mode === 'fuzzy' || !node.position;\n if (!shouldApply) {\n return node;\n }\n\n const nodeKey = node.slug || node.id || String(index);\n const rand = buildSeed(baseSeed, nodeKey);\n const angle = rand() * Math.PI * 2 + index * GOLDEN_ANGLE * 0.05;\n const radius = baseRadius * Math.sqrt(rand());\n const jitterOffset = (rand() - 0.5) * jitter;\n const r = Math.max(0.6, radius + jitterOffset);\n const x = Math.cos(angle) * r;\n const y = Math.sin(angle) * r;\n const z = (rand() - 0.5) * zSpread;\n\n return { ...node, position: [x, y, z] };\n });\n}\n","import * as THREE from 'three';\nimport type { NeuronVisualEdge, NeuronVisualNode } from '../../core/types';\n\nexport interface InteractionConfig {\n enableHover: boolean;\n enableClick: boolean;\n enableDoubleClick: boolean;\n hoverDelay: number;\n doubleClickDelay: number;\n}\n\nexport class InteractionManager {\n private raycaster = new THREE.Raycaster();\n private pointer = new THREE.Vector2();\n private nodeObjects: THREE.Object3D[] = [];\n private edgeObjects: THREE.Object3D[] = [];\n private nodeLookup = new Map<string, NeuronVisualNode>();\n private edgeLookup = new Map<string, NeuronVisualEdge>();\n private hoverTimeout: number | null = null;\n private lastHoverId: string | null = null;\n private lastClickTime = 0;\n private lastClickId: string | null = null;\n\n onNodeHover: (node: NeuronVisualNode | null) => void = () => {};\n onNodeClick: (node: NeuronVisualNode) => void = () => {};\n onNodeDoubleClick: (node: NeuronVisualNode) => void = () => {};\n onEdgeClick: (edge: NeuronVisualEdge) => void = () => {};\n onBackgroundClick: () => void = () => {};\n\n constructor(\n private scene: THREE.Scene,\n private camera: THREE.Camera,\n private renderer: THREE.WebGLRenderer,\n private config: InteractionConfig\n ) {}\n\n onPointerMove(event: PointerEvent): void {\n if (!this.config.enableHover) return;\n this.updatePointer(event);\n const node = this.getIntersectedNode(this.pointer);\n if (this.hoverTimeout) {\n window.clearTimeout(this.hoverTimeout);\n }\n this.hoverTimeout = window.setTimeout(() => {\n if (node?.id !== this.lastHoverId) {\n this.lastHoverId = node?.id ?? null;\n this.onNodeHover(node);\n }\n }, this.config.hoverDelay);\n }\n\n onPointerDown(): void {}\n\n onPointerUp(event: PointerEvent): void {\n if (!this.config.enableClick) return;\n this.updatePointer(event);\n const node = this.getIntersectedNode(this.pointer);\n if (node) {\n const now = performance.now();\n const isDouble =\n this.config.enableDoubleClick &&\n now - this.lastClickTime < this.config.doubleClickDelay &&\n this.lastClickId === node.id;\n this.lastClickTime = now;\n this.lastClickId = node.id;\n if (isDouble) {\n this.onNodeDoubleClick(node);\n } else {\n this.onNodeClick(node);\n }\n } else {\n this.onBackgroundClick();\n }\n }\n\n onKeyDown(): void {}\n\n onPointerLeave(): void {\n if (!this.config.enableHover) return;\n if (this.hoverTimeout) {\n window.clearTimeout(this.hoverTimeout);\n }\n this.hoverTimeout = window.setTimeout(() => {\n if (this.lastHoverId !== null) {\n this.lastHoverId = null;\n this.onNodeHover(null);\n }\n }, Math.max(0, this.config.hoverDelay));\n }\n\n getIntersectedNode(point: THREE.Vector2): NeuronVisualNode | null {\n this.raycaster.setFromCamera(point, this.camera);\n const intersects = this.raycaster.intersectObjects(this.nodeObjects, true);\n if (!intersects.length) return null;\n const hit = intersects[0].object;\n if (!hit.userData?.nodeId) return null;\n return this.nodeLookup.get(hit.userData.nodeId) ?? null;\n }\n\n getIntersectedEdge(): NeuronVisualEdge | null {\n return null;\n }\n\n dispose(): void {\n if (this.hoverTimeout) {\n window.clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n setTargets(\n nodeObjects: THREE.Object3D[],\n nodeLookup: Map<string, NeuronVisualNode>,\n edgeObjects?: THREE.Object3D[],\n edgeLookup?: Map<string, NeuronVisualEdge>\n ): void {\n this.nodeObjects = nodeObjects;\n this.nodeLookup = nodeLookup;\n this.edgeObjects = edgeObjects ?? [];\n this.edgeLookup = edgeLookup ?? new Map();\n }\n\n private updatePointer(event: PointerEvent): void {\n const rect = this.renderer.domElement.getBoundingClientRect();\n this.pointer.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n this.pointer.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n }\n}\n","import * as THREE from 'three';\nimport type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\nexport interface AnimationConfig {\n focusDuration: number;\n transitionDuration: number;\n easing: 'linear' | 'easeInOut' | 'easeOut';\n}\n\ninterface CameraTween {\n startTime: number;\n duration: number;\n startPosition: THREE.Vector3;\n startTarget: THREE.Vector3;\n endPosition: THREE.Vector3;\n endTarget: THREE.Vector3;\n onComplete?: () => void;\n}\n\nexport class AnimationController {\n private focusTween: CameraTween | null = null;\n\n constructor(\n private camera: THREE.Camera,\n private controls: OrbitControls,\n private config: AnimationConfig\n ) {}\n\n focusOnNode(position: THREE.Vector3, callback?: () => void): void {\n const direction = this.camera.position.clone().sub(this.controls.target).normalize();\n const distance = this.camera.position.distanceTo(this.controls.target);\n const targetPosition = position.clone().add(direction.multiplyScalar(distance));\n this.focusOnPosition(targetPosition, position, callback);\n }\n\n focusOnPosition(position: THREE.Vector3, target: THREE.Vector3, callback?: () => void): void {\n const now = performance.now();\n this.focusTween = {\n startTime: now,\n duration: this.config.focusDuration,\n startPosition: this.camera.position.clone(),\n startTarget: this.controls.target.clone(),\n endPosition: position.clone(),\n endTarget: target.clone(),\n onComplete: callback,\n };\n }\n\n resetCamera(): void {\n this.controls.reset();\n }\n\n animateNodeAppear(): void {}\n\n animateNodeDisappear(): void {}\n\n animateNodesFilter(): void {}\n\n animatePath(): void {}\n\n stopPathAnimation(): void {}\n\n pause(): void {}\n\n resume(): void {}\n\n update(): void {\n if (!this.focusTween) return;\n const now = performance.now();\n const elapsed = Math.min(1, (now - this.focusTween.startTime) / this.focusTween.duration);\n const eased = this.applyEasing(elapsed);\n this.camera.position.lerpVectors(\n this.focusTween.startPosition,\n this.focusTween.endPosition,\n eased\n );\n this.controls.target.lerpVectors(\n this.focusTween.startTarget,\n this.focusTween.endTarget,\n eased\n );\n this.controls.update();\n if (elapsed >= 1) {\n const completion = this.focusTween.onComplete;\n this.focusTween = null;\n if (completion) completion();\n }\n }\n\n dispose(): void {}\n\n private applyEasing(value: number): number {\n if (this.config.easing === 'linear') return value;\n if (this.config.easing === 'easeOut') return 1 - Math.pow(1 - value, 2);\n // easeInOut\n return value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n }\n}\n","'use client';\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport * as THREE from 'three';\nimport type { NeuronWebProps } from './types';\nimport type { NeuronNode } from '../core/types';\nimport { DEFAULT_THEME } from './constants';\nimport { useSceneManager } from './hooks/useSceneManager';\nimport { NodeRenderer } from './scene/node-renderer';\nimport { EdgeRenderer } from './scene/edge-renderer';\nimport { applyFuzzyLayout } from './layouts/fuzzy-layout';\nimport { InteractionManager } from './interactions/interaction-manager';\nimport { AnimationController } from './animations/animation-controller';\n\nexport function NeuronWeb({\n graphData,\n className,\n style,\n fullHeight,\n isFullScreen,\n isLoading,\n error,\n renderEmptyState,\n renderLoadingState,\n ariaLabel,\n theme,\n layout,\n renderNodeHover,\n hoverCard,\n onNodeHover,\n onNodeClick,\n onNodeDoubleClick,\n onNodeFocused,\n onBackgroundClick,\n performanceMode,\n}: NeuronWebProps): React.ReactElement {\n const containerRef = useRef<HTMLDivElement>(null);\n const hoverCardRef = useRef<HTMLDivElement>(null);\n const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null);\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n const resolvedTheme = useMemo(\n () => ({\n ...DEFAULT_THEME,\n colors: { ...DEFAULT_THEME.colors, ...(theme?.colors ?? {}) },\n typography: { ...DEFAULT_THEME.typography, ...(theme?.typography ?? {}) },\n effects: { ...DEFAULT_THEME.effects, ...(theme?.effects ?? {}) },\n animation: { ...DEFAULT_THEME.animation, ...(theme?.animation ?? {}) },\n }),\n [theme]\n );\n\n const resolvedPerformanceMode = useMemo(() => {\n if (performanceMode && performanceMode !== 'auto') return performanceMode;\n const count = graphData.nodes.length;\n if (count > 360) return 'fallback';\n if (count > 180) return 'degraded';\n return 'normal';\n }, [performanceMode, graphData.nodes.length]);\n\n const sceneManager = useSceneManager(containerRef, {\n backgroundColor: resolvedTheme.colors.background,\n cameraFov: 52,\n cameraPosition: [4, 8, 20],\n cameraTarget: [0, 0, 0],\n minZoom: 4,\n maxZoom: 42,\n enableStarfield: resolvedTheme.effects.starfieldEnabled,\n starfieldCount: resolvedPerformanceMode === 'normal' ? 1200 : 700,\n starfieldColor: resolvedTheme.effects.starfieldColor,\n pixelRatioCap: 2,\n ambientLightIntensity: 0.9,\n keyLightIntensity: 0.6,\n fillLightIntensity: 0.4,\n fogEnabled: resolvedTheme.effects.fogEnabled,\n fogColor: resolvedTheme.effects.fogColor,\n fogNear: resolvedTheme.effects.fogNear,\n fogFar: resolvedTheme.effects.fogFar,\n });\n\n const nodeRenderer = useMemo(() => {\n if (!sceneManager) return null;\n return new NodeRenderer(sceneManager.scene, {\n domainColors: resolvedTheme.colors.domainColors,\n defaultColor: resolvedTheme.colors.defaultDomainColor,\n baseScale: 1.15,\n tierScales: {\n primary: 1.25,\n secondary: 1.1,\n tertiary: 0.95,\n insight: 1.05,\n },\n glowIntensity: resolvedTheme.effects.glowEnabled ? resolvedTheme.effects.glowIntensity : 0,\n labelDistance: resolvedPerformanceMode === 'normal' ? 26 : 0,\n maxVisibleLabels: resolvedPerformanceMode === 'normal' ? 80 : 0,\n labelOffset: [0, 0.65, 0],\n labelFontFamily: resolvedTheme.typography.labelFontFamily,\n labelFontSize: resolvedTheme.typography.labelFontSize,\n labelFontWeight: resolvedTheme.typography.labelFontWeight,\n labelTextColor: resolvedTheme.colors.labelText,\n labelBackground: resolvedTheme.colors.labelBackground,\n ambientMotionEnabled:\n resolvedTheme.effects.ambientMotionEnabled && resolvedPerformanceMode === 'normal',\n ambientMotionAmplitude: resolvedTheme.effects.ambientMotionAmplitude,\n ambientMotionSpeed: resolvedTheme.effects.ambientMotionSpeed,\n hoverScale: resolvedTheme.animation.hoverScale,\n selectedScale: resolvedTheme.animation.selectedScale,\n pulseScale: resolvedTheme.animation.selectionPulseScale,\n pulseDuration: resolvedTheme.animation.selectionPulseDuration / 1000,\n });\n }, [sceneManager, resolvedTheme, resolvedPerformanceMode]);\n\n const edgeRenderer = useMemo(() => {\n if (!sceneManager) return null;\n return new EdgeRenderer(sceneManager.scene, {\n defaultColor: resolvedTheme.colors.edgeDefault,\n activeColor: resolvedTheme.colors.edgeActive,\n selectedColor: resolvedTheme.colors.edgeSelected,\n baseOpacity: 0.45,\n strengthOpacityScale: true,\n edgeFlowEnabled:\n resolvedTheme.effects.edgeFlowEnabled && resolvedPerformanceMode === 'normal',\n edgeFlowSpeed: resolvedTheme.effects.edgeFlowSpeed,\n });\n }, [sceneManager, resolvedTheme, resolvedPerformanceMode]);\n\n const interactionManager = useMemo(() => {\n if (!sceneManager) return null;\n return new InteractionManager(sceneManager.scene, sceneManager.camera, sceneManager.renderer, {\n enableHover: true,\n enableClick: true,\n enableDoubleClick: true,\n hoverDelay: Math.max(40, resolvedTheme.animation.hoverCardFadeDuration * 0.6),\n doubleClickDelay: 280,\n });\n }, [sceneManager, resolvedTheme.animation.hoverCardFadeDuration]);\n\n const animationController = useMemo(() => {\n if (!sceneManager) return null;\n return new AnimationController(sceneManager.camera, sceneManager.controls, {\n focusDuration: resolvedTheme.animation.focusDuration,\n transitionDuration: resolvedTheme.animation.transitionDuration,\n easing: resolvedTheme.animation.easing as 'linear' | 'easeInOut' | 'easeOut',\n });\n }, [sceneManager, resolvedTheme]);\n\n const resolvedNodes = useMemo(\n () => applyFuzzyLayout(graphData.nodes, layout),\n [graphData.nodes, layout]\n );\n\n const nodeMap = useMemo(\n () => new Map(resolvedNodes.map((node) => [node.id, node])),\n [resolvedNodes]\n );\n\n const nodeSlugById = useMemo(() => {\n const map = new Map<string, string>();\n resolvedNodes.forEach((node) => map.set(node.id, node.slug));\n return map;\n }, [resolvedNodes]);\n\n const edgesBySlug = useMemo(() => {\n const map = new Map<string, string[]>();\n graphData.edges.forEach((edge) => {\n const add = (slug: string) => {\n const list = map.get(slug);\n if (list) list.push(edge.id);\n else map.set(slug, [edge.id]);\n };\n add(edge.from);\n add(edge.to);\n });\n return map;\n }, [graphData.edges]);\n\n const hoveredNode = hoveredNodeId ? nodeMap.get(hoveredNodeId) ?? null : null;\n const hoverCardEnabled =\n (hoverCard?.enabled ?? true) && resolvedPerformanceMode !== 'fallback';\n const hoverCardOffset = hoverCard?.offset ?? [18, 18];\n const hoverCardWidth = hoverCard?.width ?? 240;\n\n useEffect(() => {\n if (!sceneManager || !nodeRenderer || !edgeRenderer) return;\n nodeRenderer.renderNodes(resolvedNodes);\n const positions = new Map<string, THREE.Vector3>();\n resolvedNodes.forEach((node) => {\n if (!node.position) return;\n positions.set(node.slug, new THREE.Vector3(...node.position));\n });\n edgeRenderer.renderEdges(graphData.edges, positions);\n }, [resolvedNodes, graphData.edges, sceneManager, nodeRenderer, edgeRenderer]);\n\n useEffect(() => {\n if (!sceneManager) return;\n sceneManager.updateBackground(resolvedTheme.colors.background);\n }, [sceneManager, resolvedTheme.colors.background]);\n\n useEffect(() => {\n if (!sceneManager) return;\n sceneManager.controls.enableDamping = true;\n sceneManager.controls.dampingFactor = 0.08;\n }, [sceneManager]);\n\n useEffect(() => {\n if (!sceneManager) return;\n sceneManager.renderer.domElement.style.cursor = hoveredNodeId ? 'pointer' : 'grab';\n }, [sceneManager, hoveredNodeId]);\n\n useEffect(() => {\n if (!sceneManager || !nodeRenderer || !edgeRenderer) return;\n return sceneManager.addFrameListener((delta, elapsed) => {\n nodeRenderer.update(delta, elapsed);\n nodeRenderer.updateLabelVisibility(sceneManager.camera);\n edgeRenderer.update(delta, elapsed);\n animationController?.update();\n if (hoverCardRef.current && hoveredNodeId) {\n const position = nodeRenderer.getNodePosition(hoveredNodeId);\n const rect = containerRef.current?.getBoundingClientRect();\n if (position && rect) {\n const screen = sceneManager.worldToScreen(position);\n const cardWidth = hoverCardRef.current.offsetWidth;\n const cardHeight = hoverCardRef.current.offsetHeight;\n const rawX = screen.x - rect.left + hoverCardOffset[0];\n const rawY = screen.y - rect.top + hoverCardOffset[1];\n const maxX = Math.max(8, rect.width - cardWidth - 8);\n const maxY = Math.max(8, rect.height - cardHeight - 8);\n const x = Math.min(Math.max(rawX, 8), maxX);\n const y = Math.min(Math.max(rawY, 8), maxY);\n hoverCardRef.current.style.transform = `translate(${x}px, ${y}px)`;\n }\n }\n });\n }, [\n sceneManager,\n nodeRenderer,\n edgeRenderer,\n animationController,\n hoveredNodeId,\n hoverCardOffset,\n ]);\n\n useEffect(() => {\n if (!interactionManager || !nodeRenderer) return;\n interactionManager.setTargets(nodeRenderer.getNodeObjects(), nodeMap);\n }, [interactionManager, nodeRenderer, nodeMap]);\n\n useEffect(() => {\n if (!interactionManager || !nodeRenderer || !edgeRenderer) return;\n interactionManager.onNodeHover = (node) => {\n const nodeId = node?.id ?? null;\n setHoveredNodeId(nodeId);\n nodeRenderer.setHoveredNode(nodeId);\n if (nodeId) {\n const slug = nodeSlugById.get(nodeId);\n edgeRenderer.setFocusEdges(slug ? edgesBySlug.get(slug) ?? [] : []);\n } else {\n const selectedSlug = selectedNodeId ? nodeSlugById.get(selectedNodeId) : null;\n if (selectedSlug) {\n edgeRenderer.setFocusEdges(edgesBySlug.get(selectedSlug) ?? []);\n } else {\n edgeRenderer.setFocusEdges(null);\n }\n }\n if (onNodeHover) {\n onNodeHover(node ? (node as unknown as NeuronNode) : null);\n }\n };\n interactionManager.onNodeClick = (node) => {\n setSelectedNodeId(node.id);\n nodeRenderer.setSelectedNode(node.id);\n nodeRenderer.pulseNode(node.id);\n const slug = nodeSlugById.get(node.id);\n edgeRenderer.setFocusEdges(slug ? edgesBySlug.get(slug) ?? [] : []);\n if (onNodeClick) {\n onNodeClick(node as unknown as NeuronNode);\n }\n };\n interactionManager.onNodeDoubleClick = (node) => {\n const nodePosition = nodeRenderer.getNodePosition(node.id);\n if (nodePosition) {\n animationController?.focusOnNode(nodePosition, () => {\n if (onNodeFocused) onNodeFocused(node as unknown as NeuronNode);\n });\n }\n if (onNodeDoubleClick) {\n onNodeDoubleClick(node as unknown as NeuronNode);\n }\n };\n interactionManager.onBackgroundClick = () => {\n setSelectedNodeId(null);\n nodeRenderer.setSelectedNode(null);\n if (!hoveredNodeId) {\n edgeRenderer.setFocusEdges(null);\n }\n if (onBackgroundClick) onBackgroundClick();\n };\n }, [\n interactionManager,\n nodeRenderer,\n edgeRenderer,\n nodeSlugById,\n edgesBySlug,\n animationController,\n hoveredNodeId,\n selectedNodeId,\n onNodeHover,\n onNodeClick,\n onNodeDoubleClick,\n onNodeFocused,\n onBackgroundClick,\n ]);\n\n useEffect(() => {\n if (!sceneManager || !interactionManager) return;\n const element = sceneManager.renderer.domElement;\n const handleMove = (event: PointerEvent) => interactionManager.onPointerMove(event);\n const handleUp = (event: PointerEvent) => interactionManager.onPointerUp(event);\n const handleLeave = () => interactionManager.onPointerLeave();\n element.addEventListener('pointermove', handleMove);\n element.addEventListener('pointerup', handleUp);\n element.addEventListener('pointerleave', handleLeave);\n return () => {\n element.removeEventListener('pointermove', handleMove);\n element.removeEventListener('pointerup', handleUp);\n element.removeEventListener('pointerleave', handleLeave);\n };\n }, [sceneManager, interactionManager]);\n\n if (isLoading) {\n return (\n <div className={className} style={style} aria-label={ariaLabel}>\n {renderLoadingState ? renderLoadingState() : <div>Loading…</div>}\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className} style={style} aria-label={ariaLabel}>\n {renderEmptyState ? renderEmptyState() : <div>{error}</div>}\n </div>\n );\n }\n\n if (!resolvedNodes.length) {\n return (\n <div className={className} style={style} aria-label={ariaLabel}>\n {renderEmptyState ? renderEmptyState() : <div>No data</div>}\n </div>\n );\n }\n\n const resolvedStyle: React.CSSProperties = {\n position: isFullScreen ? 'fixed' : 'relative',\n inset: isFullScreen ? 0 : undefined,\n width: isFullScreen ? '100vw' : '100%',\n height: isFullScreen ? '100vh' : '100%',\n minHeight: !isFullScreen && fullHeight ? '100vh' : undefined,\n overflow: 'hidden',\n background: resolvedTheme.colors.background,\n ...style,\n };\n\n return (\n <div\n className={className}\n style={resolvedStyle}\n aria-label={ariaLabel}\n >\n <div\n ref={containerRef}\n style={{ position: 'absolute', inset: 0, width: '100%', height: '100%' }}\n />\n {hoverCardEnabled && hoveredNode && (\n <div\n ref={hoverCardRef}\n style={{\n position: 'absolute',\n width: hoverCardWidth,\n pointerEvents: 'none',\n padding: '12px 14px',\n borderRadius: 12,\n background:\n 'linear-gradient(135deg, rgba(11, 15, 35, 0.95) 0%, rgba(20, 24, 52, 0.9) 100%)',\n border: '1px solid rgba(120, 140, 255, 0.35)',\n boxShadow: '0 18px 45px rgba(5, 10, 30, 0.55)',\n color: resolvedTheme.colors.labelText,\n fontFamily: resolvedTheme.typography.labelFontFamily,\n fontSize: 12,\n zIndex: 4,\n opacity: 0.98,\n transition: `opacity ${resolvedTheme.animation.hoverCardFadeDuration}ms ease`,\n transform: `translate(${hoverCardOffset[0]}px, ${hoverCardOffset[1]}px)`,\n }}\n >\n {renderNodeHover ? (\n renderNodeHover(hoveredNode)\n ) : (\n <div>\n <div style={{ fontSize: 13, fontWeight: 600, marginBottom: 6 }}>\n {hoveredNode.label}\n </div>\n <div style={{ opacity: 0.75 }}>\n {typeof hoveredNode.metadata?.summary === 'string'\n ? hoveredNode.metadata.summary\n : 'Click to focus this node and explore connections.'}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { DEFAULT_THEME } from '../constants';\nimport type { NeuronWebTheme, NeuronWebThemeOverride } from '../types';\n\nexport class ThemeEngine {\n private theme: NeuronWebTheme;\n onThemeChange: (theme: NeuronWebTheme) => void = () => {};\n\n constructor(initialTheme?: NeuronWebThemeOverride) {\n this.theme = this.mergeTheme(DEFAULT_THEME, initialTheme);\n }\n\n getTheme(): NeuronWebTheme {\n return this.theme;\n }\n\n setTheme(theme: NeuronWebThemeOverride): void {\n this.theme = this.mergeTheme(this.theme, theme);\n this.onThemeChange(this.theme);\n }\n\n resetTheme(): void {\n this.theme = { ...DEFAULT_THEME };\n this.onThemeChange(this.theme);\n }\n\n setDomainColor(domain: string, color: string): void {\n this.theme.colors.domainColors[domain] = color;\n this.onThemeChange(this.theme);\n }\n\n setBackground(color: string): void {\n this.theme.colors.background = color;\n this.onThemeChange(this.theme);\n }\n\n setLabelStyle(style: Partial<NeuronWebTheme['typography']>): void {\n this.theme.typography = { ...this.theme.typography, ...style };\n this.onThemeChange(this.theme);\n }\n\n applyPreset(preset: 'dark' | 'light' | 'custom'): void {\n if (preset === 'light') {\n this.theme = this.mergeTheme(DEFAULT_THEME, {\n colors: { background: '#f7f7fb', labelText: '#111' },\n });\n } else if (preset === 'dark') {\n this.theme = { ...DEFAULT_THEME };\n }\n this.onThemeChange(this.theme);\n }\n\n saveToStorage(): void {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem('omi-neuron-theme', JSON.stringify(this.theme));\n }\n\n loadFromStorage(): void {\n if (typeof window === 'undefined') return;\n const stored = window.localStorage.getItem('omi-neuron-theme');\n if (stored) {\n this.theme = this.mergeTheme(this.theme, JSON.parse(stored) as NeuronWebTheme);\n }\n }\n\n private mergeTheme(base: NeuronWebTheme, next?: NeuronWebThemeOverride): NeuronWebTheme {\n if (!next) return { ...base };\n return {\n ...base,\n ...next,\n colors: { ...base.colors, ...(next.colors ?? {}) },\n typography: { ...base.typography, ...(next.typography ?? {}) },\n effects: { ...base.effects, ...(next.effects ?? {}) },\n animation: { ...base.animation, ...(next.animation ?? {}) },\n } as NeuronWebTheme;\n }\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkU7K7KQZG_cjs = require('./chunk-U7K7KQZG.cjs');
|
|
4
4
|
var chunkOBZGUYGW_cjs = require('./chunk-OBZGUYGW.cjs');
|
|
5
5
|
var chunkFXKXMSLY_cjs = require('./chunk-FXKXMSLY.cjs');
|
|
6
6
|
var chunkCOO66N7H_cjs = require('./chunk-COO66N7H.cjs');
|
|
@@ -656,7 +656,7 @@ var VERSION = "0.1.1";
|
|
|
656
656
|
|
|
657
657
|
Object.defineProperty(exports, "NeuronWeb", {
|
|
658
658
|
enumerable: true,
|
|
659
|
-
get: function () { return
|
|
659
|
+
get: function () { return chunkU7K7KQZG_cjs.NeuronWeb; }
|
|
660
660
|
});
|
|
661
661
|
Object.defineProperty(exports, "DEFAULT_ANALYSIS_SETTINGS", {
|
|
662
662
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -6,7 +6,7 @@ import { z } from 'zod';
|
|
|
6
6
|
import { D as Database, a as DatabaseConfig } from './database-B0vplyA4.cjs';
|
|
7
7
|
export { P as PoolStats } from './database-B0vplyA4.cjs';
|
|
8
8
|
export { Migration, MigrationRunner, MigrationStatus, migration001, migration002, migration003, migration004, migrations } from './migration/index.cjs';
|
|
9
|
-
export { e as NeuronLayoutMode, b as NeuronLayoutOptions, c as NeuronWeb, d as NeuronWebProps, N as NeuronWebTheme } from './NeuronWeb-
|
|
9
|
+
export { e as NeuronLayoutMode, b as NeuronLayoutOptions, c as NeuronWeb, d as NeuronWebProps, N as NeuronWebTheme } from './NeuronWeb-DHP0heLZ.cjs';
|
|
10
10
|
import * as React from 'react';
|
|
11
11
|
import React__default from 'react';
|
|
12
12
|
import 'pg';
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { z } from 'zod';
|
|
|
6
6
|
import { D as Database, a as DatabaseConfig } from './database-B0vplyA4.js';
|
|
7
7
|
export { P as PoolStats } from './database-B0vplyA4.js';
|
|
8
8
|
export { Migration, MigrationRunner, MigrationStatus, migration001, migration002, migration003, migration004, migrations } from './migration/index.js';
|
|
9
|
-
export { e as NeuronLayoutMode, b as NeuronLayoutOptions, c as NeuronWeb, d as NeuronWebProps, N as NeuronWebTheme } from './NeuronWeb-
|
|
9
|
+
export { e as NeuronLayoutMode, b as NeuronLayoutOptions, c as NeuronWeb, d as NeuronWebProps, N as NeuronWebTheme } from './NeuronWeb-jS_bg9lu.js';
|
|
10
10
|
import * as React from 'react';
|
|
11
11
|
import React__default from 'react';
|
|
12
12
|
import 'pg';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { NeuronWeb } from './chunk-
|
|
1
|
+
export { NeuronWeb } from './chunk-YFJMQCGE.js';
|
|
2
2
|
import { nodeCreateSchema, DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from './chunk-6LW4KNAU.js';
|
|
3
3
|
export { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS, ScoringEngine, analysisOptionsSchema, analysisRequestSchema, analysisSettingsSchema, buildDelete, buildInsert, buildSelect, buildUpdate, buildWhereClause, createDatabase, createDatabaseFromEnv, databaseSettingsSchema, domainConfigSchema, edgeCreateSchema, edgeEvidenceSchema, edgeFilterSchema, edgeUpdateSchema, expandGraphRequestSchema, findPathRequestSchema, findSimilarRequestSchema, getDatabase, getGraphParamsSchema, listEdgesParamsSchema, listNodesParamsSchema, neuronConfigSchema, neuronSettingsSchema, neuronSettingsUpdateSchema, nodeBatchCreateSchema, nodeCreateSchema, nodeFilterSchema, nodeTierSchema, nodeTypeConfigSchema, nodeUpdateSchema, paginationSchema, relationshipTypeConfigSchema, resetDatabaseSingleton, semanticSearchRequestSchema, visualizationSettingsSchema } from './chunk-6LW4KNAU.js';
|
|
4
4
|
export { DockerManager } from './chunk-TFLMPBX7.js';
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkU7K7KQZG_cjs = require('../chunk-U7K7KQZG.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
Object.defineProperty(exports, "DEFAULT_THEME", {
|
|
8
8
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
9
|
+
get: function () { return chunkU7K7KQZG_cjs.DEFAULT_THEME; }
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "NeuronWeb", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return chunkU7K7KQZG_cjs.NeuronWeb; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "SceneManager", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkU7K7KQZG_cjs.SceneManager; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "ThemeEngine", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkU7K7KQZG_cjs.ThemeEngine; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "applyFuzzyLayout", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkU7K7KQZG_cjs.applyFuzzyLayout; }
|
|
26
26
|
});
|
|
27
27
|
//# sourceMappingURL=index.cjs.map
|
|
28
28
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as NeuronWebTheme, a as NeuronWebThemeOverride, b as NeuronLayoutOptions } from '../NeuronWeb-
|
|
2
|
-
export { H as HoverCardOptions, e as NeuronLayoutMode, c as NeuronWeb, d as NeuronWebProps } from '../NeuronWeb-
|
|
1
|
+
import { N as NeuronWebTheme, a as NeuronWebThemeOverride, b as NeuronLayoutOptions } from '../NeuronWeb-DHP0heLZ.cjs';
|
|
2
|
+
export { H as HoverCardOptions, e as NeuronLayoutMode, c as NeuronWeb, d as NeuronWebProps } from '../NeuronWeb-DHP0heLZ.cjs';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
|
5
5
|
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
|
|
@@ -9,6 +9,7 @@ import 'react';
|
|
|
9
9
|
|
|
10
10
|
interface SceneConfig {
|
|
11
11
|
backgroundColor: string;
|
|
12
|
+
cameraFov?: number;
|
|
12
13
|
cameraPosition: [number, number, number];
|
|
13
14
|
cameraTarget: [number, number, number];
|
|
14
15
|
minZoom: number;
|
|
@@ -41,6 +42,7 @@ declare class SceneManager {
|
|
|
41
42
|
private ambientLight;
|
|
42
43
|
private keyLight;
|
|
43
44
|
private fillLight;
|
|
45
|
+
private resizeObserver;
|
|
44
46
|
constructor(container: HTMLElement, config: SceneConfig);
|
|
45
47
|
initialize(): void;
|
|
46
48
|
dispose(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as NeuronWebTheme, a as NeuronWebThemeOverride, b as NeuronLayoutOptions } from '../NeuronWeb-
|
|
2
|
-
export { H as HoverCardOptions, e as NeuronLayoutMode, c as NeuronWeb, d as NeuronWebProps } from '../NeuronWeb-
|
|
1
|
+
import { N as NeuronWebTheme, a as NeuronWebThemeOverride, b as NeuronLayoutOptions } from '../NeuronWeb-jS_bg9lu.js';
|
|
2
|
+
export { H as HoverCardOptions, e as NeuronLayoutMode, c as NeuronWeb, d as NeuronWebProps } from '../NeuronWeb-jS_bg9lu.js';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
|
5
5
|
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
|
|
@@ -9,6 +9,7 @@ import 'react';
|
|
|
9
9
|
|
|
10
10
|
interface SceneConfig {
|
|
11
11
|
backgroundColor: string;
|
|
12
|
+
cameraFov?: number;
|
|
12
13
|
cameraPosition: [number, number, number];
|
|
13
14
|
cameraTarget: [number, number, number];
|
|
14
15
|
minZoom: number;
|
|
@@ -41,6 +42,7 @@ declare class SceneManager {
|
|
|
41
42
|
private ambientLight;
|
|
42
43
|
private keyLight;
|
|
43
44
|
private fillLight;
|
|
45
|
+
private resizeObserver;
|
|
44
46
|
constructor(container: HTMLElement, config: SceneConfig);
|
|
45
47
|
initialize(): void;
|
|
46
48
|
dispose(): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { DEFAULT_THEME, NeuronWeb, SceneManager, ThemeEngine, applyFuzzyLayout } from '../chunk-
|
|
1
|
+
export { DEFAULT_THEME, NeuronWeb, SceneManager, ThemeEngine, applyFuzzyLayout } from '../chunk-YFJMQCGE.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED