@volter/editor-core 0.5.57

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 (719) hide show
  1. package/BUNDLED_NOTICES +1527 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-APACHE +202 -0
  4. package/NOTICE +18 -0
  5. package/README.md +24 -0
  6. package/dist/build/chunk-JS4D4XZ3.js +175 -0
  7. package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
  8. package/dist/build/vite-plugin-product-contributions.js +100 -0
  9. package/dist/build/vite-plugin-product-contributions.js.map +7 -0
  10. package/dist/build/vite-plugin-shared-react.js +25 -0
  11. package/dist/build/vite-plugin-shared-react.js.map +7 -0
  12. package/dist/build/vite-plugin-shared-three.js +86 -0
  13. package/dist/build/vite-plugin-shared-three.js.map +7 -0
  14. package/dist/server/chunk-KMJC7AGO.js +98 -0
  15. package/dist/server/chunk-KMJC7AGO.js.map +7 -0
  16. package/dist/server/chunk-PSILUMGS.js +46 -0
  17. package/dist/server/chunk-PSILUMGS.js.map +7 -0
  18. package/dist/server/frame-proxy.js +255 -0
  19. package/dist/server/frame-proxy.js.map +7 -0
  20. package/dist/server/open-browser.js +53 -0
  21. package/dist/server/open-browser.js.map +7 -0
  22. package/dist/server/process-shutdown.js +127 -0
  23. package/dist/server/process-shutdown.js.map +7 -0
  24. package/dist/server/session-registry.js +141 -0
  25. package/dist/server/session-registry.js.map +7 -0
  26. package/dist/server/spawn-opener.js +11 -0
  27. package/dist/server/spawn-opener.js.map +7 -0
  28. package/dist/server/worktree-identity.js +11 -0
  29. package/dist/server/worktree-identity.js.map +7 -0
  30. package/dist-server/packaged.mjs +88816 -0
  31. package/package.json +118 -0
  32. package/scripts/build-plugins.mjs +14 -0
  33. package/scripts/build-server.mjs +26 -0
  34. package/scripts/build-session.mjs +9 -0
  35. package/server/account-credentials.ts +60 -0
  36. package/server/account-service.ts +1434 -0
  37. package/server/adapter-region-includes.ts +47 -0
  38. package/server/asset-catalog-v2.ts +175 -0
  39. package/server/asset-history-snapshots.ts +196 -0
  40. package/server/asset-ledger-store.ts +195 -0
  41. package/server/asset-library-routes.ts +1595 -0
  42. package/server/blender-wasm-artifact.ts +430 -0
  43. package/server/boot-timings.ts +106 -0
  44. package/server/canonical-path.ts +50 -0
  45. package/server/checkout-workspace-preflight.ts +349 -0
  46. package/server/cloud-asset-catalog.ts +158 -0
  47. package/server/coding-inference-launch.ts +237 -0
  48. package/server/collaboration-account-client.ts +202 -0
  49. package/server/collaboration-attribution.ts +122 -0
  50. package/server/collaboration-session.ts +934 -0
  51. package/server/comfyui-bridge.ts +248 -0
  52. package/server/console-ledger.ts +499 -0
  53. package/server/creation-site-transform.ts +304 -0
  54. package/server/creation-site-write.ts +648 -0
  55. package/server/data-file-serialize.ts +158 -0
  56. package/server/editor-brand-html.ts +72 -0
  57. package/server/editor-control-socket.ts +366 -0
  58. package/server/editor-server-options.ts +190 -0
  59. package/server/editor-server.ts +1483 -0
  60. package/server/editor-sse.ts +352 -0
  61. package/server/engine-provenance.ts +169 -0
  62. package/server/engine-source-restart.ts +117 -0
  63. package/server/frame-bridge.ts +115 -0
  64. package/server/frame-proxy.ts +490 -0
  65. package/server/frame-workbench.ts +259 -0
  66. package/server/frontend-handoff.ts +229 -0
  67. package/server/game-globals-shadow.ts +113 -0
  68. package/server/gameplay-session-retention.ts +149 -0
  69. package/server/gameplay-sessions.ts +123 -0
  70. package/server/generation-jobs.ts +201 -0
  71. package/server/generation-reconciler.ts +137 -0
  72. package/server/generative-execution-context.ts +59 -0
  73. package/server/git-workflow.ts +612 -0
  74. package/server/harness-chat-caller.ts +36 -0
  75. package/server/harness-chat-service.ts +1681 -0
  76. package/server/idle-shutdown.ts +170 -0
  77. package/server/js-profiling-policy.ts +52 -0
  78. package/server/launcher-settings.ts +84 -0
  79. package/server/local-asset-catalog.ts +410 -0
  80. package/server/managed-account-defaults.ts +22 -0
  81. package/server/mock-control-plane.ts +540 -0
  82. package/server/model-import-conversion.ts +345 -0
  83. package/server/native-credential-store.ts +162 -0
  84. package/server/open-browser.ts +118 -0
  85. package/server/packaged.ts +1192 -0
  86. package/server/play-stall.ts +126 -0
  87. package/server/process-shutdown.ts +218 -0
  88. package/server/product-presets.ts +55 -0
  89. package/server/project-build-artifact.ts +95 -0
  90. package/server/project-components.ts +100 -0
  91. package/server/project-dependency-invalidation.ts +114 -0
  92. package/server/project-file-scan.ts +235 -0
  93. package/server/project-hmr-files.ts +215 -0
  94. package/server/project-install-roots.ts +210 -0
  95. package/server/project-kinds.ts +71 -0
  96. package/server/project-mcp-servers.ts +82 -0
  97. package/server/project-module-freshness.ts +109 -0
  98. package/server/project-module-instance.ts +375 -0
  99. package/server/project-optimize-deps-entries.ts +827 -0
  100. package/server/project-output-writer.ts +679 -0
  101. package/server/project-package-origin.ts +63 -0
  102. package/server/project-root-surface.ts +831 -0
  103. package/server/project-scratch-path.ts +47 -0
  104. package/server/project-script-hmr.ts +619 -0
  105. package/server/project-serving-plugins.ts +236 -0
  106. package/server/project-tools.ts +653 -0
  107. package/server/project-validation.ts +250 -0
  108. package/server/project-verbs.ts +127 -0
  109. package/server/project-view.ts +52 -0
  110. package/server/project-watch.ts +1134 -0
  111. package/server/project-work-coordinator.ts +288 -0
  112. package/server/provider-credentials.ts +331 -0
  113. package/server/recent-projects-store.ts +98 -0
  114. package/server/redact-secrets.ts +71 -0
  115. package/server/repository-presence.ts +267 -0
  116. package/server/routes/account.ts +357 -0
  117. package/server/routes/agents.ts +60 -0
  118. package/server/routes/assets.ts +154 -0
  119. package/server/routes/build.ts +13 -0
  120. package/server/routes/collaboration.ts +595 -0
  121. package/server/routes/configurations.ts +419 -0
  122. package/server/routes/context.ts +264 -0
  123. package/server/routes/control-plane.ts +1811 -0
  124. package/server/routes/logs.ts +272 -0
  125. package/server/routes/project-identity.ts +302 -0
  126. package/server/routes/project-open.ts +429 -0
  127. package/server/routes/project-source.ts +686 -0
  128. package/server/routes/project-state.ts +383 -0
  129. package/server/routes/relay.ts +1029 -0
  130. package/server/routes/route-helpers.ts +29 -0
  131. package/server/routes/served-modules.ts +138 -0
  132. package/server/routes/session-tabs.ts +196 -0
  133. package/server/routes/settings.ts +121 -0
  134. package/server/routes/share-control.ts +486 -0
  135. package/server/routes/themes.ts +116 -0
  136. package/server/routes/tools.ts +230 -0
  137. package/server/routes/worktrees.ts +595 -0
  138. package/server/scoped-game-css.ts +461 -0
  139. package/server/server-utils.ts +1194 -0
  140. package/server/session-product.ts +112 -0
  141. package/server/session-registry.ts +230 -0
  142. package/server/share-claims.ts +138 -0
  143. package/server/share-host.ts +526 -0
  144. package/server/share-session-gateway.ts +1362 -0
  145. package/server/share-tunnel.ts +123 -0
  146. package/server/spawn-opener.ts +74 -0
  147. package/server/support/play/log-format.ts +76 -0
  148. package/server/support/play/session-record.ts +199 -0
  149. package/server/support/project/build-discipline.ts +718 -0
  150. package/server/support/project/inspection-node.ts +119 -0
  151. package/server/support/project/log-naming.ts +54 -0
  152. package/server/support/project/provenance.ts +290 -0
  153. package/server/support/project/run-name.ts +18 -0
  154. package/server/support/project/session-journal.ts +830 -0
  155. package/server/support/project/shared.ts +327 -0
  156. package/server/tab-bootstrap.ts +62 -0
  157. package/server/tab-heartbeat.ts +477 -0
  158. package/server/tab-lifecycle.ts +550 -0
  159. package/server/tab-presence.ts +1508 -0
  160. package/server/team-agent-mirror.ts +95 -0
  161. package/server/twin-auth.ts +138 -0
  162. package/server/vendored-lock-recorder.ts +968 -0
  163. package/server/worktree-identity.ts +121 -0
  164. package/server/worktree-management.ts +398 -0
  165. package/server/worktree-retention.d.mts +13 -0
  166. package/server/worktree-retention.mjs +205 -0
  167. package/src/EditorContext.tsx +169 -0
  168. package/src/account.ts +333 -0
  169. package/src/action-registry.ts +532 -0
  170. package/src/active-product.ts +74 -0
  171. package/src/active-project.ts +155 -0
  172. package/src/adapter-editor-config.ts +25 -0
  173. package/src/adapter-observation.ts +49 -0
  174. package/src/animation/stage-transport.ts +379 -0
  175. package/src/animation/three-clips-subject.ts +172 -0
  176. package/src/api/asset-library-wire.ts +45 -0
  177. package/src/api/assets.ts +365 -0
  178. package/src/api/base.ts +10 -0
  179. package/src/api/build.ts +99 -0
  180. package/src/api/git-wire.ts +56 -0
  181. package/src/api/logs.ts +92 -0
  182. package/src/api/project-identity.ts +74 -0
  183. package/src/api/project-open.ts +355 -0
  184. package/src/api/project-source.ts +162 -0
  185. package/src/api/project-state.ts +107 -0
  186. package/src/api/relay.ts +268 -0
  187. package/src/api/settings.ts +36 -0
  188. package/src/api/themes.ts +45 -0
  189. package/src/api/worktrees.ts +257 -0
  190. package/src/asset-compare-core.ts +171 -0
  191. package/src/asset-compare.ts +294 -0
  192. package/src/asset-editor-context.tsx +100 -0
  193. package/src/asset-events.ts +97 -0
  194. package/src/asset-inspector-actions.ts +87 -0
  195. package/src/asset-preview-framing.ts +357 -0
  196. package/src/asset-preview.ts +2802 -0
  197. package/src/asset-selection-viewer-registry.ts +113 -0
  198. package/src/asset-selection.ts +133 -0
  199. package/src/asset-workflow/asset-capabilities.ts +344 -0
  200. package/src/asset-workflow/asset-import-jobs.ts +106 -0
  201. package/src/asset-workflow/asset-ledger-backend.ts +126 -0
  202. package/src/asset-workflow/asset-ledger.ts +156 -0
  203. package/src/asset-workflow/asset-materialization-report.ts +140 -0
  204. package/src/asset-workflow/asset-pack-manifest.ts +320 -0
  205. package/src/asset-workflow/asset-types.ts +142 -0
  206. package/src/asset-workflow/asset-workflow-quality.ts +61 -0
  207. package/src/asset-workflow/audio-preview-player.ts +193 -0
  208. package/src/asset-workflow/audio-waveform.ts +22 -0
  209. package/src/asset-workflow/cloud-asset-client.ts +263 -0
  210. package/src/asset-workflow/folder-preview.ts +345 -0
  211. package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
  212. package/src/asset-workflow/image-view-scale.ts +32 -0
  213. package/src/asset-workflow/import-contract.ts +124 -0
  214. package/src/asset-workflow/ledger-write-lock.ts +244 -0
  215. package/src/asset-workflow/model-inspection.ts +818 -0
  216. package/src/asset-workflow/pixi-spritesheet.ts +197 -0
  217. package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
  218. package/src/asset-workflow/project-asset-commands.ts +23 -0
  219. package/src/asset-workflow/project-asset-health.ts +139 -0
  220. package/src/asset-workflow/project-asset-operations.ts +154 -0
  221. package/src/asset-workflow/project-asset-roots.ts +68 -0
  222. package/src/asset-workflow/project-content.ts +288 -0
  223. package/src/asset-workflow/project-source-index.ts +550 -0
  224. package/src/asset-workflow/thumbnail-system.ts +256 -0
  225. package/src/authoring/active-adapter.ts +199 -0
  226. package/src/authoring/active-systems.ts +422 -0
  227. package/src/authoring/adapter-key.ts +18 -0
  228. package/src/authoring/authoring-asset-url.ts +27 -0
  229. package/src/authoring/bootstrap-state.ts +49 -0
  230. package/src/authoring/boundary-authoring-adapter.ts +184 -0
  231. package/src/authoring/breakpoint-state.ts +43 -0
  232. package/src/authoring/canvas-scene-guides.ts +76 -0
  233. package/src/authoring/component-instance-root.ts +171 -0
  234. package/src/authoring/composite-authoring-adapter.ts +2110 -0
  235. package/src/authoring/consumer-actions.ts +520 -0
  236. package/src/authoring/css-numeric-style.ts +97 -0
  237. package/src/authoring/design-time-layers.ts +849 -0
  238. package/src/authoring/design-time-mount-registry.ts +235 -0
  239. package/src/authoring/design-time-settle.ts +343 -0
  240. package/src/authoring/edit-mode-authoring.ts +619 -0
  241. package/src/authoring/eyedropper-session.ts +60 -0
  242. package/src/authoring/instance-source-menu-register.ts +13 -0
  243. package/src/authoring/instance-source-menu.ts +135 -0
  244. package/src/authoring/layered-pick.ts +183 -0
  245. package/src/authoring/live-gesture-lock.ts +50 -0
  246. package/src/authoring/live-object-transform.ts +62 -0
  247. package/src/authoring/mount-failure-report.ts +154 -0
  248. package/src/authoring/mounted-root-subjects.ts +144 -0
  249. package/src/authoring/no-authoring-adapter.ts +55 -0
  250. package/src/authoring/null-inspection-subjects.tsx +75 -0
  251. package/src/authoring/object3d-document-persistence.ts +106 -0
  252. package/src/authoring/object3d-document-session-registry.ts +120 -0
  253. package/src/authoring/object3d-document-session.ts +1326 -0
  254. package/src/authoring/object3d-gesture-controller.ts +113 -0
  255. package/src/authoring/panel-authoring.ts +121 -0
  256. package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
  257. package/src/authoring/prefab-instance-section-model.ts +55 -0
  258. package/src/authoring/project-authoring-session.ts +105 -0
  259. package/src/authoring/provenance.ts +99 -0
  260. package/src/authoring/quarks-particle-systems.ts +19 -0
  261. package/src/authoring/react-canvas-navigation.ts +255 -0
  262. package/src/authoring/react-design-canvas-style.ts +20 -0
  263. package/src/authoring/react-story-board.ts +937 -0
  264. package/src/authoring/selection-scope.ts +195 -0
  265. package/src/authoring/shell-document-ops.ts +169 -0
  266. package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
  267. package/src/authoring/shell-viewport-policy.ts +48 -0
  268. package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
  269. package/src/authoring/stories-scope.ts +35 -0
  270. package/src/authoring/story-board-chrome-fit.ts +107 -0
  271. package/src/authoring/story-board-presentation.ts +111 -0
  272. package/src/authoring/three-projection-core.ts +226 -0
  273. package/src/authoring/viewport-pick-context.ts +40 -0
  274. package/src/authoring/viewport-raycast.ts +240 -0
  275. package/src/authoring/viewport-tool-context.ts +73 -0
  276. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  277. package/src/authoring/world-hidden-viewport.ts +152 -0
  278. package/src/authoring/world-pan-state.ts +198 -0
  279. package/src/authoring/world-session-state.ts +101 -0
  280. package/src/authoring/write-pipe.ts +173 -0
  281. package/src/availability-tick.ts +66 -0
  282. package/src/bitmap-label.ts +120 -0
  283. package/src/blender-tab-metrics.ts +161 -0
  284. package/src/board-open-actions.ts +20 -0
  285. package/src/boot-routing.ts +391 -0
  286. package/src/build-identity.ts +15 -0
  287. package/src/bytes-codec.ts +62 -0
  288. package/src/camera-authoring.ts +175 -0
  289. package/src/cancellation-reason.ts +58 -0
  290. package/src/canvas-preview-frames.ts +482 -0
  291. package/src/capture-camera-pose.ts +77 -0
  292. package/src/chrome-registry.ts +159 -0
  293. package/src/chrome-slot-registry.ts +91 -0
  294. package/src/collaboration-client.ts +264 -0
  295. package/src/collaboration-presence.ts +41 -0
  296. package/src/command-dispatch.ts +19 -0
  297. package/src/command-listener.ts +2743 -0
  298. package/src/command-registry.ts +70 -0
  299. package/src/component-board-registry.ts +205 -0
  300. package/src/component-states-registry.ts +200 -0
  301. package/src/components/AgentPresentationNotice.tsx +75 -0
  302. package/src/components/AlignToolbar.tsx +204 -0
  303. package/src/components/AppRoot.tsx +394 -0
  304. package/src/components/ApplicationMenus.tsx +415 -0
  305. package/src/components/AssetBrowser.tsx +2843 -0
  306. package/src/components/AssetEditorShell.tsx +216 -0
  307. package/src/components/AssetInspectorToolSection.tsx +124 -0
  308. package/src/components/BoardRulers.tsx +354 -0
  309. package/src/components/CameraInfo.tsx +81 -0
  310. package/src/components/CanvasSceneViewport.tsx +556 -0
  311. package/src/components/CapabilityCoverageSection.tsx +185 -0
  312. package/src/components/CenterDocuments.tsx +22 -0
  313. package/src/components/ChromeSlot.tsx +20 -0
  314. package/src/components/CodeView.tsx +470 -0
  315. package/src/components/CollaborationHeaderControl.css +74 -0
  316. package/src/components/CompactInspectorCard.tsx +190 -0
  317. package/src/components/CompactInspectorShell.tsx +39 -0
  318. package/src/components/ConsolePanel.css +55 -0
  319. package/src/components/ConsolePanel.tsx +270 -0
  320. package/src/components/DefaultEditorLayout.tsx +106 -0
  321. package/src/components/DocumentHeaderStrip.tsx +96 -0
  322. package/src/components/DocumentShelfRail.tsx +45 -0
  323. package/src/components/DocumentThumbnail.tsx +345 -0
  324. package/src/components/EditorLeaseGuard.tsx +372 -0
  325. package/src/components/ErrorBanner.tsx +123 -0
  326. package/src/components/FolderPreviewTile.tsx +159 -0
  327. package/src/components/GameHierarchy.tsx +3842 -0
  328. package/src/components/GameplaySessionTimeline.tsx +295 -0
  329. package/src/components/InspectionProjection.tsx +968 -0
  330. package/src/components/Inspector.tsx +233 -0
  331. package/src/components/InspectorCanvasPreview.tsx +35 -0
  332. package/src/components/InspectorFieldsSection.tsx +290 -0
  333. package/src/components/InspectorObjectPreview.tsx +57 -0
  334. package/src/components/InspectorStoriesSection.tsx +92 -0
  335. package/src/components/InspectorToolSection.tsx +96 -0
  336. package/src/components/InspectorTransformSection.tsx +245 -0
  337. package/src/components/LightExplorerPanel.tsx +433 -0
  338. package/src/components/MediaProperties.tsx +145 -0
  339. package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
  340. package/src/components/Object3DDocumentToolbar.css +100 -0
  341. package/src/components/Object3DDocumentToolbar.tsx +454 -0
  342. package/src/components/Object3DDocumentViewport.tsx +58 -0
  343. package/src/components/ProjectHeader.css +617 -0
  344. package/src/components/ProjectHeader.tsx +328 -0
  345. package/src/components/ProjectLayout.tsx +249 -0
  346. package/src/components/ReactCanvasControls.tsx +284 -0
  347. package/src/components/RootSelectionOverlay.tsx +3162 -0
  348. package/src/components/RootTextEditor.tsx +79 -0
  349. package/src/components/SaveStatus.tsx +70 -0
  350. package/src/components/StageHost.tsx +1954 -0
  351. package/src/components/StageOverlays.tsx +21 -0
  352. package/src/components/StartupErrorScreen.tsx +76 -0
  353. package/src/components/StartupLoadingScreen.tsx +65 -0
  354. package/src/components/StatsOverlay.tsx +78 -0
  355. package/src/components/SurfaceStateOverlay.tsx +24 -0
  356. package/src/components/ToolContributionSurfaces.tsx +65 -0
  357. package/src/components/ToolHost.tsx +370 -0
  358. package/src/components/ToolObject3DPreview.tsx +39 -0
  359. package/src/components/Toolbar.tsx +595 -0
  360. package/src/components/TransientHint.tsx +44 -0
  361. package/src/components/TransportStrip.tsx +174 -0
  362. package/src/components/VersionControlSection.tsx +470 -0
  363. package/src/components/VgaiLogo.css +83 -0
  364. package/src/components/VgaiLogo.tsx +35 -0
  365. package/src/components/ViewportControlsHint.tsx +60 -0
  366. package/src/components/ViewportFurniture.tsx +401 -0
  367. package/src/components/ViewportOverlay.tsx +145 -0
  368. package/src/components/ViewportOverlaysMenu.tsx +153 -0
  369. package/src/components/ViewportShadingMenu.tsx +300 -0
  370. package/src/components/ViewportViewMenu.tsx +101 -0
  371. package/src/components/WorkspaceDocumentSurface.tsx +204 -0
  372. package/src/components/WorkspaceUtilitySurface.tsx +22 -0
  373. package/src/components/WorktreeSwitcher.css +239 -0
  374. package/src/components/WorktreeSwitcher.tsx +890 -0
  375. package/src/components/account-documents.tsx +1162 -0
  376. package/src/components/asset-documents.tsx +812 -0
  377. package/src/components/asset-editor-persistence.ts +216 -0
  378. package/src/components/asset-selection-section.tsx +535 -0
  379. package/src/components/asset-thumbnails.tsx +312 -0
  380. package/src/components/asset-viewers/AudioViewer.tsx +201 -0
  381. package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
  382. package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  383. package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
  384. package/src/components/asset-viewers/ImageViewer.tsx +300 -0
  385. package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
  386. package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
  387. package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
  388. package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  389. package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
  390. package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
  391. package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
  392. package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
  393. package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  394. package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
  395. package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
  396. package/src/components/asset-viewers/VideoViewer.tsx +101 -0
  397. package/src/components/asset-viewers/shader-source.ts +144 -0
  398. package/src/components/asset-workflow.css +731 -0
  399. package/src/components/board-guides.ts +150 -0
  400. package/src/components/compact-inspector.css +539 -0
  401. package/src/components/core-utilities.tsx +90 -0
  402. package/src/components/editor-notifications.css +40 -0
  403. package/src/components/engine-workspace.css +274 -0
  404. package/src/components/inspector-preview-section.tsx +238 -0
  405. package/src/components/inspector-property-grouping.ts +64 -0
  406. package/src/components/inspector-revert-label.ts +20 -0
  407. package/src/components/inspector-selection.ts +42 -0
  408. package/src/components/inspector-stories-gating.ts +171 -0
  409. package/src/components/inspector-transform-subject.ts +11 -0
  410. package/src/components/inspector-transform.ts +75 -0
  411. package/src/components/kind-documents.tsx +500 -0
  412. package/src/components/palette-action-publisher.tsx +140 -0
  413. package/src/components/primitives/DraftColorInput.tsx +74 -0
  414. package/src/components/product-shell.css +1829 -0
  415. package/src/components/project-tool-documents.tsx +410 -0
  416. package/src/components/scene-documents.tsx +223 -0
  417. package/src/components/stage-keyboard.tsx +37 -0
  418. package/src/components/stage-overlay-set.tsx +107 -0
  419. package/src/components/stage-presence-markers.ts +478 -0
  420. package/src/components/standard-viewport-dressing.ts +417 -0
  421. package/src/components/status-contributions.tsx +403 -0
  422. package/src/components/tool-documents.tsx +309 -0
  423. package/src/components/tool-schema-form.tsx +262 -0
  424. package/src/components/use-after-paint.ts +41 -0
  425. package/src/components/use-project-image-assets.ts +86 -0
  426. package/src/components/viewport-header-controls.css +90 -0
  427. package/src/components/viewport-surface-status.tsx +55 -0
  428. package/src/components/workspace-history.ts +32 -0
  429. package/src/components/workspace-static-panel-registry.tsx +152 -0
  430. package/src/components/workspace-surfaces.css +621 -0
  431. package/src/components/world-documents.tsx +586 -0
  432. package/src/components/world-overlay-gestures.ts +1694 -0
  433. package/src/composite-screenshot.ts +1641 -0
  434. package/src/console-sync.ts +131 -0
  435. package/src/constraint-helper.ts +338 -0
  436. package/src/content-entry-source-registry.ts +184 -0
  437. package/src/coverage/authoring-seam-evidence.ts +300 -0
  438. package/src/coverage/canvas-reveal.ts +192 -0
  439. package/src/coverage/design-time-surfaces.ts +101 -0
  440. package/src/coverage/live-seam-evidence.ts +11 -0
  441. package/src/coverage/ontology-invariants.ts +466 -0
  442. package/src/coverage/session-vitals.ts +501 -0
  443. package/src/coverage/system-seam-evidence.ts +72 -0
  444. package/src/crash-null-boundary.ts +36 -0
  445. package/src/creation-site-edit.ts +1479 -0
  446. package/src/creation-site-registry.ts +160 -0
  447. package/src/delegate-harness-registry.ts +143 -0
  448. package/src/document-context-registry.ts +177 -0
  449. package/src/document-open-registry.ts +200 -0
  450. package/src/document-preview-source.ts +20 -0
  451. package/src/document-renderer-session.ts +138 -0
  452. package/src/editor-api.ts +46 -0
  453. package/src/editor-chrome-capture.ts +139 -0
  454. package/src/editor-commands.ts +164 -0
  455. package/src/editor-console.ts +563 -0
  456. package/src/editor-current-view.ts +82 -0
  457. package/src/editor-document-probe.ts +881 -0
  458. package/src/editor-git-client.ts +115 -0
  459. package/src/editor-host-door.ts +462 -0
  460. package/src/editor-hotkeys.ts +842 -0
  461. package/src/editor-lease-view.ts +39 -0
  462. package/src/editor-lease.ts +415 -0
  463. package/src/editor-mode.ts +19 -0
  464. package/src/editor-notifications.ts +140 -0
  465. package/src/editor-presence.ts +563 -0
  466. package/src/editor-presentation-activity.ts +50 -0
  467. package/src/editor-presentation-notice.ts +42 -0
  468. package/src/editor-runtime.tsx +145 -0
  469. package/src/editor-server-response.ts +86 -0
  470. package/src/editor-session-attribution.ts +75 -0
  471. package/src/editor-session-mode.ts +54 -0
  472. package/src/editor-shell-store.ts +1304 -0
  473. package/src/editor-state-facets.ts +74 -0
  474. package/src/editor-styles.css +33 -0
  475. package/src/editor-view-presentation.ts +810 -0
  476. package/src/editor-viewport.ts +5302 -0
  477. package/src/entity-lod.ts +31 -0
  478. package/src/entity-object.ts +91 -0
  479. package/src/files/file-provider.ts +62 -0
  480. package/src/files/project-files.ts +264 -0
  481. package/src/finders/index.ts +136 -0
  482. package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
  483. package/src/frame/bridge.tsx +1408 -0
  484. package/src/frame/product.ts +77 -0
  485. package/src/gameplay-dom-recording.ts +319 -0
  486. package/src/gameplay-export-state.ts +14 -0
  487. package/src/gameplay-replay.ts +417 -0
  488. package/src/gameplay-session-time.ts +9 -0
  489. package/src/gameplay-sessions.ts +204 -0
  490. package/src/harness-chat-types.ts +253 -0
  491. package/src/hierarchy-component-marks.ts +298 -0
  492. package/src/hierarchy-drop.ts +91 -0
  493. package/src/hierarchy-expansion-state.ts +80 -0
  494. package/src/hierarchy-header-slot.ts +52 -0
  495. package/src/hierarchy-internals.ts +197 -0
  496. package/src/hierarchy-kind-icon.ts +217 -0
  497. package/src/hierarchy-mark-reader.ts +73 -0
  498. package/src/hierarchy-menu-registry.ts +67 -0
  499. package/src/hierarchy-node-rows.ts +307 -0
  500. package/src/hierarchy-panel-view.ts +280 -0
  501. package/src/hierarchy-projection.ts +76 -0
  502. package/src/hierarchy-row-cache.ts +243 -0
  503. package/src/hierarchy-row-model.ts +308 -0
  504. package/src/hierarchy-rows.ts +11 -0
  505. package/src/hierarchy-walk.ts +86 -0
  506. package/src/history/editor-session.ts +25 -0
  507. package/src/history/history-commands.ts +147 -0
  508. package/src/history/history-delegate.ts +163 -0
  509. package/src/history/history-limit-notices.ts +43 -0
  510. package/src/history/history-service.ts +1173 -0
  511. package/src/history/persistence-coordinator.ts +35 -0
  512. package/src/history/project-file-history.ts +386 -0
  513. package/src/history/project-root-history-backends.ts +139 -0
  514. package/src/history/resource-registry.ts +209 -0
  515. package/src/history/snapshot-store.ts +103 -0
  516. package/src/history/source-history-backend.ts +546 -0
  517. package/src/history/types.ts +124 -0
  518. package/src/hmr-registration-group.ts +67 -0
  519. package/src/hmr-stable-react-context.ts +23 -0
  520. package/src/hotkeys.ts +188 -0
  521. package/src/inference-diagnostics.ts +69 -0
  522. package/src/initial-project.ts +80 -0
  523. package/src/inspection/active-subject.ts +578 -0
  524. package/src/inspection/active-surface.ts +142 -0
  525. package/src/inspection/compose.ts +1064 -0
  526. package/src/inspection/display.ts +170 -0
  527. package/src/inspection/document-subject.ts +109 -0
  528. package/src/inspection/game-subject.ts +85 -0
  529. package/src/inspection/model.ts +542 -0
  530. package/src/inspection/null-subject.ts +115 -0
  531. package/src/inspection/serialize.ts +357 -0
  532. package/src/inspection/use-active-inspection.ts +180 -0
  533. package/src/inspector-presentation.ts +201 -0
  534. package/src/inspector-section-registry.ts +221 -0
  535. package/src/instance-source-actions.ts +163 -0
  536. package/src/instanced-presentation.ts +164 -0
  537. package/src/js-heap.ts +71 -0
  538. package/src/key-actions.ts +91 -0
  539. package/src/keymap-presets.ts +401 -0
  540. package/src/layout-policy.ts +31 -0
  541. package/src/learn-links.ts +73 -0
  542. package/src/light-explorer-model.ts +134 -0
  543. package/src/live-canvas-frame.ts +55 -0
  544. package/src/live-document.ts +279 -0
  545. package/src/live-module-source.ts +230 -0
  546. package/src/live-session-registry.ts +220 -0
  547. package/src/live-transition.ts +633 -0
  548. package/src/manifest-project.ts +107 -0
  549. package/src/model-thumbnail.ts +523 -0
  550. package/src/native-selection-style.ts +202 -0
  551. package/src/object3d-document-write-policy.ts +137 -0
  552. package/src/packaged-runtime.ts +108 -0
  553. package/src/palettes/maya.palette.json +57 -0
  554. package/src/palettes/substance.palette.json +57 -0
  555. package/src/pasteboard-module.ts +81 -0
  556. package/src/performance-profiler.ts +367 -0
  557. package/src/performance-sources.ts +69 -0
  558. package/src/play-boot-phase.ts +145 -0
  559. package/src/presentation-surface.ts +248 -0
  560. package/src/project-adapter.ts +1143 -0
  561. package/src/project-asset-refresh.ts +26 -0
  562. package/src/project-declaration-refresh.ts +31 -0
  563. package/src/project-local-state.ts +118 -0
  564. package/src/project-manager.ts +243 -0
  565. package/src/project-module-changes.ts +163 -0
  566. package/src/project-module-split.ts +266 -0
  567. package/src/project-provenance.ts +115 -0
  568. package/src/project-ready.ts +42 -0
  569. package/src/project-session-reset.ts +67 -0
  570. package/src/project-shape.ts +68 -0
  571. package/src/project-tool-discovery.ts +66 -0
  572. package/src/project-tools.ts +107 -0
  573. package/src/project-work-types.ts +149 -0
  574. package/src/projection/three.ts +898 -0
  575. package/src/projection/types.ts +44 -0
  576. package/src/readiness.ts +113 -0
  577. package/src/reflection-probe-helper.ts +142 -0
  578. package/src/reported-play-state.ts +90 -0
  579. package/src/resolve-relative-specifier.ts +33 -0
  580. package/src/scene-document-plan.ts +315 -0
  581. package/src/scene-framing.ts +315 -0
  582. package/src/scene-live-open.ts +210 -0
  583. package/src/scene-view-fog.ts +89 -0
  584. package/src/scoped-game-css.ts +152 -0
  585. package/src/session-orphan-record.ts +193 -0
  586. package/src/session-tombstone.ts +126 -0
  587. package/src/settings/settings-provider.ts +82 -0
  588. package/src/settings-store.ts +345 -0
  589. package/src/shared-view-restore.ts +42 -0
  590. package/src/shell-store-door.ts +45 -0
  591. package/src/source-conflict.ts +122 -0
  592. package/src/spatial-handle-visuals.ts +332 -0
  593. package/src/stage-context.ts +341 -0
  594. package/src/stage-store-registry.ts +63 -0
  595. package/src/stale-chunk-recovery.ts +34 -0
  596. package/src/state-report-deferral.ts +73 -0
  597. package/src/storage/host-files-storage.ts +97 -0
  598. package/src/storage/http-storage.ts +174 -0
  599. package/src/storage/index.ts +75 -0
  600. package/src/storage/mem-storage.ts +149 -0
  601. package/src/storage/path-lock.ts +44 -0
  602. package/src/storage/paths.ts +26 -0
  603. package/src/storage/types.ts +116 -0
  604. package/src/stories/StoryComponentThumbnail.tsx +184 -0
  605. package/src/stories/StoryPreviewMount.tsx +306 -0
  606. package/src/stories/component-content-source.tsx +106 -0
  607. package/src/stories/component-states-source.ts +78 -0
  608. package/src/stories/compose-project-stories.ts +255 -0
  609. package/src/stories/pixi-story-model.ts +30 -0
  610. package/src/stories/prefabs-finder.ts +54 -0
  611. package/src/stories/prefabs-from-stories.ts +182 -0
  612. package/src/stories/project-story-discovery.ts +78 -0
  613. package/src/stories/project-story-regions.ts +24 -0
  614. package/src/stories/story-actions.ts +54 -0
  615. package/src/stories/story-capture-command.ts +124 -0
  616. package/src/stories/story-capture.ts +584 -0
  617. package/src/stories/story-declared-medium.ts +126 -0
  618. package/src/stories/story-discovery.ts +176 -0
  619. package/src/stories/story-document-openers.ts +36 -0
  620. package/src/stories/story-dom-runtime.ts +78 -0
  621. package/src/stories/story-grouping.ts +111 -0
  622. package/src/stories/story-lane.ts +88 -0
  623. package/src/stories/story-mount-turn.ts +27 -0
  624. package/src/stories/story-opener.ts +260 -0
  625. package/src/stories/story-pixi-preview.ts +408 -0
  626. package/src/stories/story-presentation.ts +215 -0
  627. package/src/stories/story-registry.ts +517 -0
  628. package/src/stories/story-three-preview.ts +807 -0
  629. package/src/stories/three-story-model.ts +96 -0
  630. package/src/story-three-preview-runtime.ts +56 -0
  631. package/src/surface-keyboard.ts +112 -0
  632. package/src/surface-state.ts +124 -0
  633. package/src/tab-bootstrap.js +628 -0
  634. package/src/tab-census.ts +198 -0
  635. package/src/tab-lifecycle-client.ts +196 -0
  636. package/src/theme-library.ts +844 -0
  637. package/src/theme-preference.ts +378 -0
  638. package/src/theme.css +3437 -0
  639. package/src/three-viewport/bone-selection-highlight.ts +119 -0
  640. package/src/three-viewport/camera-fit.ts +41 -0
  641. package/src/three-viewport/interactive-renderer.ts +132 -0
  642. package/src/three-viewport/selection-brackets.ts +310 -0
  643. package/src/three-viewport/selection-outline.ts +183 -0
  644. package/src/three-viewport/skeleton-helper.ts +61 -0
  645. package/src/three-viewport/source-color.ts +167 -0
  646. package/src/three-viewport/studio-environment.ts +96 -0
  647. package/src/three-viewport-presentation.ts +23 -0
  648. package/src/tool-contribution-play.ts +74 -0
  649. package/src/tool-loader.ts +1798 -0
  650. package/src/transform-mode-request.ts +57 -0
  651. package/src/transient-hint.ts +78 -0
  652. package/src/trigger-volume-helper.ts +116 -0
  653. package/src/ui-source/adapter-region-includes.ts +241 -0
  654. package/src/ui-source/ensure-import.ts +132 -0
  655. package/src/ui-source/file-region-resolver.ts +302 -0
  656. package/src/ui-source/inspect.ts +775 -0
  657. package/src/ui-source/oid-transform.ts +1845 -0
  658. package/src/ui-source/plan-csf-story.ts +196 -0
  659. package/src/ui-source/plan-extract-component.ts +421 -0
  660. package/src/ui-source/plan-fork-component.ts +621 -0
  661. package/src/ui-source/plan-named-style.ts +95 -0
  662. package/src/ui-source/plan-source-edit.ts +353 -0
  663. package/src/ui-source/r3f-contract-resolver.ts +327 -0
  664. package/src/ui-source/r3f-diagnostic-index.ts +165 -0
  665. package/src/ui-source/r3f-environment-binding.ts +133 -0
  666. package/src/ui-source/r3f-joint-binding.ts +251 -0
  667. package/src/ui-source/r3f-lod-binding.ts +91 -0
  668. package/src/ui-source/r3f-particle-binding.ts +235 -0
  669. package/src/ui-source/r3f-physics-binding.ts +483 -0
  670. package/src/ui-source/r3f-project-contracts.ts +444 -0
  671. package/src/ui-source/relative-import-specifier.ts +34 -0
  672. package/src/ui-source/reparent-guard.ts +544 -0
  673. package/src/ui-source/source-edit-request.ts +97 -0
  674. package/src/ui-source/source-write-backend.ts +618 -0
  675. package/src/ui-source/syntactic-prop-specs.ts +296 -0
  676. package/src/ui-source/tier-source-write-backend.ts +279 -0
  677. package/src/ui-source/ts-ast.ts +171 -0
  678. package/src/ui-source/utility-class-support.ts +169 -0
  679. package/src/ui-source/write-component-default.ts +133 -0
  680. package/src/ui-source/writer.ts +1989 -0
  681. package/src/viewport-activation-timings.ts +840 -0
  682. package/src/viewport-authoring-policy.ts +186 -0
  683. package/src/viewport-controls-hint.ts +57 -0
  684. package/src/viewport-door.ts +237 -0
  685. package/src/viewport-shading-boundary.ts +12 -0
  686. package/src/vite-error-surface.ts +141 -0
  687. package/src/wait-until.ts +37 -0
  688. package/src/workspace-areas.ts +156 -0
  689. package/src/workspace-aux-commands.ts +11 -0
  690. package/src/workspace-available-documents.ts +127 -0
  691. package/src/workspace-core-utilities.ts +31 -0
  692. package/src/workspace-document-ids.ts +59 -0
  693. package/src/workspace-document-registry.ts +612 -0
  694. package/src/workspace-document-restore.ts +145 -0
  695. package/src/workspace-host-commands.ts +141 -0
  696. package/src/workspace-persistence-gate.ts +40 -0
  697. package/src/workspace-play-utilities.ts +44 -0
  698. package/src/workspace-presets.ts +425 -0
  699. package/src/workspace-regions.ts +294 -0
  700. package/src/workspace-state-persistence.ts +536 -0
  701. package/src/workspace-static-panels.ts +73 -0
  702. package/src/workspace-status-registry.ts +121 -0
  703. package/src/workspace-style.ts +239 -0
  704. package/src/workspace-utility-commands.ts +74 -0
  705. package/src/workspace-utility-registry.ts +263 -0
  706. package/src/workspace-viewport-rect.ts +97 -0
  707. package/src/world-adoption.ts +115 -0
  708. package/src/world-document-routing.ts +104 -0
  709. package/vite-plugin-creation-site-write.ts +184 -0
  710. package/vite-plugin-creation-site.ts +80 -0
  711. package/vite-plugin-game-static.ts +303 -0
  712. package/vite-plugin-module-doorways.ts +336 -0
  713. package/vite-plugin-product-contributions.ts +197 -0
  714. package/vite-plugin-project-game-static.ts +125 -0
  715. package/vite-plugin-project-jsx-js.ts +65 -0
  716. package/vite-plugin-project-root-absolute-assets.ts +359 -0
  717. package/vite-plugin-shared-react.ts +420 -0
  718. package/vite-plugin-shared-three.ts +203 -0
  719. package/vite-plugin-ui-oid.ts +2106 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The editor's built-in DRAWER utilities, registered through the same
3
+ * W0 workspace-utility registry every other utility uses, so the utility
4
+ * region is registry-driven end to end:
5
+ *
6
+ * - **Console** (B3): always available; its error/warn count becomes the
7
+ * registry `badge()` in the open tab, plus the three standard level counts
8
+ * in the status line while the drawer is hidden.
9
+ * Ordinary log traffic never auto-opens the region; only actionable
10
+ * failures reveal it automatically (today: a world that failed to mount —
11
+ * `workspace-utility-commands.ts`).
12
+ * Animation and Behavior are deliberately absent: each is an authored center
13
+ * document (animation inside its owning Asset Lab; XState as an inspect-only
14
+ * Behavior document), not a global debugger drawer instrument.
15
+ * The Profiler bench and State Watch are deliberately absent: both moved to
16
+ * `@vgai/game` as the `profiler.utility` / `state-watch.utility`
17
+ * contributions (WORKBENCH.md §The invariants — the host imports no package).
18
+ * GENERATIONS is absent for the same reason: the paid-provider lane's gallery
19
+ * is `@vgai/game`'s `generation.service.ts`, which registers the tab (badge and
20
+ * all) through this same registry.
21
+ * *
22
+ * PROBLEMS (§4.1 mock's `Problems` tab) is deliberately NOT registered —
23
+ * the W4 decision, recorded in the inventory: no truthful problem SOURCE
24
+ * exists today (there is no in-editor typecheck surface; scene-validation
25
+ * and mount failures already surface as console errors plus their own
26
+ * status-bar items), and
27
+ * §4.3's spirit forbids fabricating a surface with nothing real to feed it.
28
+ * The status bar's console counters (`status-contributions.tsx`) read the
29
+ * same real source — the truthful signal that does exist. A real Problems
30
+ * utility lands when a real diagnostics source does.
31
+ *
32
+ * Idempotent-ensure idiom mirrors `build-documents.tsx`'s
33
+ * `ensureBuildContributionsRegistered`.
34
+ */
35
+
36
+ import { editorConsole } from '../editor-console';
37
+ import { createHmrRegistrationGroup } from '../hmr-registration-group';
38
+ import { CORE_WORKSPACE_UTILITIES } from '../workspace-core-utilities';
39
+ import {
40
+ registerWorkspaceUtility,
41
+ type WorkspaceUtilityBadge,
42
+ } from '../workspace-utility-registry';
43
+ import { ConsolePanel } from './ConsolePanel';
44
+ import { LightExplorerPanel } from './LightExplorerPanel';
45
+
46
+ const registrationGroup = createHmrRegistrationGroup(import.meta.hot, 'core-utilities');
47
+
48
+ /** The Console tab's attention badge: error count (error severity) else
49
+ * warn count (warn severity) else none. Exported for tests. */
50
+ export function consoleUtilityBadge(): WorkspaceUtilityBadge | null {
51
+ const { error, warn } = editorConsole.counts;
52
+ if (error > 0) return { count: error + warn, severity: 'error' };
53
+ if (warn > 0) return { count: warn, severity: 'warn' };
54
+ return null;
55
+ }
56
+
57
+ /** Idempotent one-time registration of the built-in workspace utilities. */
58
+ export function ensureCoreUtilitiesRegistered(): void {
59
+ registrationGroup.ensure((track) => {
60
+ track(
61
+ registerWorkspaceUtility({
62
+ ...CORE_WORKSPACE_UTILITIES.console,
63
+ order: -100, // first utility tab, matching the §4.1 mock's tab order
64
+ Content: ConsolePanel,
65
+ badge: consoleUtilityBadge,
66
+ subscribeBadge: editorConsole.subscribe,
67
+ badgeSnapshot: editorConsole.getSnapshot,
68
+ visibleByDefault: false,
69
+ closeable: true,
70
+ }),
71
+ );
72
+ track(
73
+ // Scene-wide light inventory over the active authoring adapter's real
74
+ // hierarchy + inspector fields. Closed by default and opened from the
75
+ // viewport display toolbar or Window menu; no parallel light registry.
76
+ registerWorkspaceUtility({
77
+ ...CORE_WORKSPACE_UTILITIES.lightExplorer,
78
+ order: 21,
79
+ Content: LightExplorerPanel,
80
+ visibleByDefault: false,
81
+ closeable: true,
82
+ }),
83
+ );
84
+ });
85
+ }
86
+
87
+ /** Test-only: allow re-registration after a registry reset. */
88
+ export function __resetCoreUtilitiesForTest(): void {
89
+ registrationGroup.reset();
90
+ }
@@ -0,0 +1,40 @@
1
+ /* The notification stack: bottom right, clear of the status bar, newest at
2
+ the bottom. A card is the banner's paint with VS Code's two-row layout —
3
+ the message across the full width, the actions on their own row beneath,
4
+ right-aligned — and an OPAQUE surface, because it sits over whatever is
5
+ there (measured: the conversation composer). */
6
+ .vgai-notifications {
7
+ position: fixed;
8
+ right: var(--vgai-space-4);
9
+ bottom: calc(var(--vgai-status-bar-height, 28px) + var(--vgai-space-4));
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: flex-end;
13
+ gap: var(--vgai-space-2);
14
+ width: min(420px, calc(100vw - 2 * var(--vgai-space-4)));
15
+ z-index: var(--vgai-z-toast, 1100);
16
+ pointer-events: none;
17
+ }
18
+ .vgai-notifications .vgai-notification {
19
+ width: 100%;
20
+ flex-wrap: wrap;
21
+ pointer-events: auto;
22
+ background-color: var(--vgai-surface-raised);
23
+ backdrop-filter: none;
24
+ -webkit-backdrop-filter: none;
25
+ box-shadow: var(--vgai-shadow-lg, 0 8px 24px rgba(0, 0, 0, 0.35));
26
+ }
27
+ .vgai-notifications .vgai-notification .vgai-banner-content {
28
+ flex: 1 1 0;
29
+ min-width: 0;
30
+ }
31
+ .vgai-notifications .vgai-notification .vgai-banner-actions {
32
+ flex: 1 1 100%;
33
+ justify-content: flex-end;
34
+ margin-top: var(--vgai-space-2);
35
+ }
36
+ .vgai-notification-detail {
37
+ display: block;
38
+ margin-top: var(--vgai-space-1);
39
+ color: var(--vgai-content-muted);
40
+ }
@@ -0,0 +1,274 @@
1
+ .vgai-engine-workspace {
2
+ display: grid;
3
+ grid-template-columns: 210px minmax(380px, 1fr) 240px;
4
+ min-width: 0;
5
+ min-height: 0;
6
+ height: 100%;
7
+ background: var(--vgai-surface-inset);
8
+ color: var(--vgai-content-primary);
9
+ }
10
+
11
+ .vgai-engine-workspace > * {
12
+ min-width: 0;
13
+ min-height: 0;
14
+ }
15
+
16
+ .vgai-engine-workspace[data-testid="behavior-utility"] > .vgai-engine-graph {
17
+ grid-column: 2 / 4;
18
+ }
19
+
20
+ .vgai-engine-browser,
21
+ .vgai-engine-details {
22
+ overflow: auto;
23
+ background: var(--vgai-surface-panel);
24
+ }
25
+
26
+ .vgai-engine-browser {
27
+ border-right: 1px solid var(--vgai-boundary-default);
28
+ }
29
+
30
+ .vgai-engine-details {
31
+ border-left: 1px solid var(--vgai-boundary-default);
32
+ }
33
+
34
+ .vgai-engine-pane-heading {
35
+ height: 25px;
36
+ padding: 0 var(--vgai-space-4);
37
+ display: flex;
38
+ align-items: center;
39
+ border-bottom: 1px solid var(--vgai-boundary-default);
40
+ background: var(--vgai-surface-chrome);
41
+ color: var(--vgai-content-dim);
42
+ font-size: var(--vgai-font-sm);
43
+ font-weight: 700;
44
+ letter-spacing: 0.45px;
45
+ text-transform: uppercase;
46
+ }
47
+
48
+ .vgai-engine-browser-row {
49
+ width: 100%;
50
+ min-height: 31px;
51
+ padding: var(--vgai-space-2) var(--vgai-space-4);
52
+ border-radius: 0;
53
+ display: grid;
54
+ justify-items: start;
55
+ border-bottom: 1px solid var(--vgai-boundary-default);
56
+ }
57
+
58
+ .vgai-engine-browser-row > span:first-child {
59
+ color: var(--vgai-content-primary);
60
+ font-size: var(--vgai-font-base);
61
+ }
62
+
63
+ .vgai-engine-browser-row > span:last-child {
64
+ color: var(--vgai-content-dim);
65
+ font-size: var(--vgai-font-xs);
66
+ font-family: var(--vgai-font-mono);
67
+ }
68
+
69
+ .vgai-engine-browser-row[data-selected="true"] {
70
+ background: var(--vgai-selection-bg);
71
+ box-shadow: inset 2px 0 var(--vgai-accent);
72
+ }
73
+
74
+ .vgai-engine-property-row,
75
+ .vgai-engine-empty-row {
76
+ min-height: 25px;
77
+ padding: 5px 8px;
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: space-between;
81
+ gap: var(--vgai-space-4);
82
+ border-bottom: 1px solid var(--vgai-boundary-default);
83
+ font-size: var(--vgai-font-xs);
84
+ }
85
+
86
+ .vgai-engine-property-row > span:last-child {
87
+ color: var(--vgai-content-muted);
88
+ font-family: var(--vgai-font-mono);
89
+ }
90
+
91
+ .vgai-engine-empty-row {
92
+ color: var(--vgai-content-dim);
93
+ font-style: italic;
94
+ }
95
+
96
+ .vgai-engine-graph {
97
+ display: flex;
98
+ flex-direction: column;
99
+ overflow: hidden;
100
+ background-color: var(--vgai-surface-inset);
101
+ background-image: radial-gradient(var(--vgai-boundary-default) 0.7px, transparent 0.7px);
102
+ background-size: 16px 16px;
103
+ }
104
+
105
+ .vgai-engine-graph-toolbar {
106
+ height: 29px;
107
+ flex: 0 0 auto;
108
+ display: flex;
109
+ align-items: center;
110
+ gap: var(--vgai-space-6);
111
+ padding: 0 9px;
112
+ border-bottom: 1px solid var(--vgai-boundary-default);
113
+ background: var(--vgai-surface-panel);
114
+ font-size: var(--vgai-font-sm);
115
+ }
116
+
117
+ .vgai-engine-graph-toolbar > span:nth-child(2) {
118
+ color: var(--vgai-content-dim);
119
+ }
120
+
121
+ .vgai-runtime-indicator {
122
+ margin-left: auto;
123
+ color: var(--vgai-accent);
124
+ font-size: var(--vgai-font-xs);
125
+ font-weight: 700;
126
+ }
127
+
128
+ .vgai-runtime-indicator[data-live="true"] {
129
+ color: var(--vgai-success);
130
+ }
131
+
132
+ .vgai-engine-details dl {
133
+ display: grid;
134
+ grid-template-columns: 70px minmax(0, 1fr);
135
+ margin: 0;
136
+ font-size: var(--vgai-font-sm);
137
+ }
138
+
139
+ .vgai-engine-details dt,
140
+ .vgai-engine-details dd {
141
+ margin: 0;
142
+ min-height: 25px;
143
+ padding: var(--vgai-space-3) var(--vgai-space-4);
144
+ border-bottom: 1px solid var(--vgai-boundary-default);
145
+ }
146
+
147
+ .vgai-engine-details dt {
148
+ color: var(--vgai-content-dim);
149
+ }
150
+
151
+ .vgai-engine-details dd {
152
+ overflow: hidden;
153
+ color: var(--vgai-content-primary);
154
+ font-family: var(--vgai-font-mono);
155
+ text-overflow: ellipsis;
156
+ }
157
+
158
+ .vgai-mixer-canvas {
159
+ overflow: auto;
160
+ padding: 14px;
161
+ }
162
+
163
+ .vgai-mixer-action-table,
164
+ .vgai-mixer-transition {
165
+ border: 1px solid var(--vgai-boundary-default);
166
+ background: var(--vgai-surface-panel);
167
+ }
168
+
169
+ .vgai-mixer-transition {
170
+ margin-bottom: var(--vgai-space-6);
171
+ padding: 9px;
172
+ }
173
+
174
+ .vgai-mixer-transition > div,
175
+ .vgai-mixer-transition > small {
176
+ display: flex;
177
+ justify-content: space-between;
178
+ gap: var(--vgai-space-5);
179
+ }
180
+
181
+ .vgai-mixer-transition > i {
182
+ display: block;
183
+ height: 6px;
184
+ margin: 7px 0;
185
+ background: var(--vgai-boundary-default);
186
+ }
187
+
188
+ .vgai-mixer-transition > i > span {
189
+ display: block;
190
+ height: 100%;
191
+ background: var(--vgai-accent);
192
+ }
193
+
194
+ .vgai-mixer-transition > small {
195
+ color: var(--vgai-content-muted);
196
+ font-family: var(--vgai-font-mono);
197
+ }
198
+
199
+ .vgai-mixer-transition-history {
200
+ display: grid;
201
+ gap: var(--vgai-space-1);
202
+ padding: var(--vgai-space-3) var(--vgai-space-4);
203
+ border-bottom: 1px solid var(--vgai-boundary-default);
204
+ font-size: var(--vgai-font-xs);
205
+ }
206
+
207
+ .vgai-mixer-transition-history > span,
208
+ .vgai-mixer-transition-history > small {
209
+ color: var(--vgai-content-muted);
210
+ }
211
+
212
+ .vgai-mixer-transition-history > b {
213
+ overflow: hidden;
214
+ font-family: var(--vgai-font-mono);
215
+ font-weight: 500;
216
+ text-overflow: ellipsis;
217
+ white-space: nowrap;
218
+ }
219
+
220
+ .vgai-mixer-table-head,
221
+ .vgai-mixer-action-row {
222
+ display: grid;
223
+ grid-template-columns: minmax(130px, 1fr) minmax(120px, 1fr) 64px 64px;
224
+ }
225
+
226
+ .vgai-mixer-table-head {
227
+ color: var(--vgai-content-dim);
228
+ background: var(--vgai-surface-chrome);
229
+ font-size: var(--vgai-font-xs);
230
+ font-weight: 700;
231
+ text-transform: uppercase;
232
+ }
233
+
234
+ .vgai-mixer-table-head span,
235
+ .vgai-mixer-action-row > span {
236
+ min-width: 0;
237
+ padding: var(--vgai-space-3) var(--vgai-space-4);
238
+ border-right: 1px solid var(--vgai-boundary-default);
239
+ border-bottom: 1px solid var(--vgai-boundary-default);
240
+ }
241
+
242
+ .vgai-mixer-action-row {
243
+ font-size: var(--vgai-font-sm);
244
+ font-family: var(--vgai-font-mono);
245
+ }
246
+
247
+ .vgai-mixer-weight {
248
+ position: relative;
249
+ display: flex;
250
+ align-items: center;
251
+ background: var(--vgai-surface-inset);
252
+ }
253
+
254
+ .vgai-mixer-weight i {
255
+ position: absolute;
256
+ inset: 4px auto 4px 4px;
257
+ background: color-mix(in srgb, var(--vgai-success) 40%, transparent);
258
+ }
259
+
260
+ .vgai-mixer-weight b {
261
+ position: relative;
262
+ margin-left: auto;
263
+ font-weight: 500;
264
+ }
265
+
266
+ @media (max-width: 950px) {
267
+ .vgai-engine-workspace {
268
+ grid-template-columns: 170px minmax(320px, 1fr);
269
+ }
270
+
271
+ .vgai-engine-details {
272
+ display: none;
273
+ }
274
+ }
@@ -0,0 +1,238 @@
1
+ /**
2
+ * The PREVIEW section's body — a live square view of whatever the subject is,
3
+ * with the subject's `preview`-placed verbs sitting in the box over it.
4
+ *
5
+ * It lives in its own light module for one reason: `inspection/compose.ts`
6
+ * builds the preview section, and the preview drags the whole render stack
7
+ * (three.quarks, realism-effects) behind it. The heavy component stays behind
8
+ * `lazy()` here, so a headless composer — every unit test of the model, and
9
+ * `editor.inspect`, which never renders — pays nothing for it.
10
+ *
11
+ * `render` fills its host at any size, which is what lets the section body and
12
+ * the minimized card's round thumb be the SAME function off the SAME subject
13
+ * (`components/CompactInspectorCard.tsx`) rather than two derivations of what
14
+ * the thing looks like. What differs between those hosts is CHROME, not the
15
+ * picture — see {@link InspectionPreviewMode}.
16
+ */
17
+
18
+ import { Button } from '@volter/editor-sdk/widgets';
19
+ import { lazy, Suspense } from 'react';
20
+ import type * as THREE from 'three';
21
+ import type { ContentEntry, ContentEntrySource } from '../content-entry-source-registry';
22
+ import type { InspectionAction, InspectionPreviewMode } from '../inspection/model';
23
+ import { useAfterPaint } from './use-after-paint';
24
+
25
+ const InspectorObjectPreview = lazy(() =>
26
+ import('./InspectorObjectPreview').then((m) => ({ default: m.InspectorObjectPreview })),
27
+ );
28
+ const InspectorCanvasPreview = lazy(() =>
29
+ import('./InspectorCanvasPreview').then((m) => ({ default: m.InspectorCanvasPreview })),
30
+ );
31
+
32
+ export function InspectorPreviewBody({
33
+ object,
34
+ displayName,
35
+ previewKey,
36
+ actions,
37
+ mode = 'section',
38
+ }: {
39
+ /** The live object to preview. The composer only builds a preview section
40
+ * when it HAS one, so this is never a lookup that can come up empty — the
41
+ * honest alternative to a fabricated render is no section at all. */
42
+ readonly object: THREE.Object3D;
43
+ readonly displayName: string;
44
+ /** Stable identity for the isolated preview document (the subject's node
45
+ * id) — remounts when the subject changes, not on every compose. */
46
+ readonly previewKey: string;
47
+ readonly actions: readonly InspectionAction[];
48
+ /** Which host this is rendering into. Default `section` — the full box. */
49
+ readonly mode?: InspectionPreviewMode;
50
+ }) {
51
+ // A thumbnail host is a small clipped shape that owns its own single press,
52
+ // so the body gives it the PICTURE and nothing else: it fills the host
53
+ // exactly, and the verbs stay in the section, which is where they are
54
+ // reachable and readable.
55
+ const thumbnail = mode === 'thumbnail';
56
+ // The picture arrives a frame after the box does: mounting it is scene and GL
57
+ // work, and doing it in the selection's own commit is what used to make the
58
+ // whole inspector wait on it (`components/use-after-paint.ts`).
59
+ const showPicture = useAfterPaint(previewKey);
60
+ return (
61
+ <div
62
+ data-testid={thumbnail ? 'inspection-preview-thumbnail' : 'inspection-preview'}
63
+ style={
64
+ thumbnail
65
+ ? { position: 'absolute', inset: 0, overflow: 'hidden' }
66
+ : {
67
+ position: 'relative',
68
+ width: 'calc(100% - 24px)',
69
+ aspectRatio: '1 / 1',
70
+ flexShrink: 0,
71
+ margin: 12,
72
+ overflow: 'hidden',
73
+ border: '1px solid var(--vgai-structural-divider)',
74
+ borderRadius: 'var(--dv-group-border-radius, 8px)',
75
+ }
76
+ }
77
+ >
78
+ {showPicture && (
79
+ <Suspense fallback={null}>
80
+ <InspectorObjectPreview
81
+ previewKey={previewKey}
82
+ object={object}
83
+ displayName={displayName}
84
+ fill
85
+ />
86
+ </Suspense>
87
+ )}
88
+ {!thumbnail &&
89
+ actions.map((action) => (
90
+ <Button
91
+ key={action.id}
92
+ data-testid={action.id}
93
+ size="compact"
94
+ disabled={action.disabled}
95
+ title={action.title}
96
+ onClick={action.run}
97
+ style={{ position: 'absolute', right: 8, bottom: 8 }}
98
+ >
99
+ {action.label}
100
+ </Button>
101
+ ))}
102
+ </div>
103
+ );
104
+ }
105
+
106
+ /** The same Preview-section chrome around a COMPONENT's own picture, painted by
107
+ * whichever content source admits it (`content-entry-source-registry.ts`).
108
+ * Canvas entities are Pixi display objects rather than Object3Ds, so the
109
+ * picture Content already shows is the honest preview authority here too; the
110
+ * shell never substitutes the Transform icon for a picture, and never knows
111
+ * what the picture IS. */
112
+ export function InspectorComponentPreviewBody({
113
+ source,
114
+ entry,
115
+ previewKey,
116
+ actions,
117
+ mode = 'section',
118
+ }: {
119
+ readonly source: ContentEntrySource;
120
+ readonly entry: ContentEntry;
121
+ readonly previewKey: string;
122
+ readonly actions: readonly InspectionAction[];
123
+ readonly mode?: InspectionPreviewMode;
124
+ }) {
125
+ const thumbnail = mode === 'thumbnail';
126
+ const showPicture = useAfterPaint(previewKey);
127
+ return (
128
+ <div
129
+ data-testid={thumbnail ? 'inspection-preview-thumbnail' : 'inspection-preview'}
130
+ style={
131
+ thumbnail
132
+ ? { position: 'absolute', inset: 0, overflow: 'hidden' }
133
+ : {
134
+ position: 'relative',
135
+ width: 'calc(100% - 24px)',
136
+ aspectRatio: '1 / 1',
137
+ flexShrink: 0,
138
+ margin: 12,
139
+ overflow: 'hidden',
140
+ border: '1px solid var(--vgai-structural-divider)',
141
+ borderRadius: 'var(--dv-group-border-radius, 8px)',
142
+ }
143
+ }
144
+ >
145
+ {showPicture && (
146
+ <div
147
+ style={{
148
+ position: 'absolute',
149
+ inset: 0,
150
+ overflow: 'hidden',
151
+ background: 'var(--vgai-bg-inset)',
152
+ }}
153
+ >
154
+ <source.Thumbnail
155
+ entry={entry}
156
+ previewRevision={0}
157
+ width={thumbnail ? 96 : 256}
158
+ height={thumbnail ? 96 : 256}
159
+ />
160
+ </div>
161
+ )}
162
+ {!thumbnail &&
163
+ actions.map((action) => (
164
+ <Button
165
+ key={action.id}
166
+ data-testid={action.id}
167
+ size="compact"
168
+ disabled={action.disabled}
169
+ title={action.title}
170
+ onClick={action.run}
171
+ style={{ position: 'absolute', right: 8, bottom: 8 }}
172
+ >
173
+ {action.label}
174
+ </Button>
175
+ ))}
176
+ </div>
177
+ );
178
+ }
179
+
180
+ /** The selected live Canvas subtree in the same Preview-section shell used by
181
+ * Three and by story fallbacks. */
182
+ export function InspectorCanvasPreviewBody({
183
+ capture,
184
+ previewKey,
185
+ actions,
186
+ mode = 'section',
187
+ }: {
188
+ readonly capture: (size: number) => Promise<string | null>;
189
+ readonly previewKey: string;
190
+ readonly actions: readonly InspectionAction[];
191
+ readonly mode?: InspectionPreviewMode;
192
+ }) {
193
+ const thumbnail = mode === 'thumbnail';
194
+ const showPicture = useAfterPaint(previewKey);
195
+ return (
196
+ <div
197
+ data-testid={thumbnail ? 'inspection-preview-thumbnail' : 'inspection-preview'}
198
+ style={
199
+ thumbnail
200
+ ? { position: 'absolute', inset: 0, overflow: 'hidden' }
201
+ : {
202
+ position: 'relative',
203
+ width: 'calc(100% - 24px)',
204
+ aspectRatio: '1 / 1',
205
+ flexShrink: 0,
206
+ margin: 12,
207
+ overflow: 'hidden',
208
+ border: '1px solid var(--vgai-structural-divider)',
209
+ borderRadius: 'var(--dv-group-border-radius, 8px)',
210
+ }
211
+ }
212
+ >
213
+ {showPicture && (
214
+ <Suspense fallback={null}>
215
+ <InspectorCanvasPreview
216
+ capture={capture}
217
+ previewKey={previewKey}
218
+ size={thumbnail ? 96 : 256}
219
+ />
220
+ </Suspense>
221
+ )}
222
+ {!thumbnail &&
223
+ actions.map((action) => (
224
+ <Button
225
+ key={action.id}
226
+ data-testid={action.id}
227
+ size="compact"
228
+ disabled={action.disabled}
229
+ title={action.title}
230
+ onClick={action.run}
231
+ style={{ position: 'absolute', right: 8, bottom: 8 }}
232
+ >
233
+ {action.label}
234
+ </Button>
235
+ ))}
236
+ </div>
237
+ );
238
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Pure grouping logic behind the generic adapter-driven inspector's
3
+ * `PropertyDescriptor.group?` rendering (T3.4 slice 2). Extracted out of
4
+ * `Inspector.tsx`'s (formerly `IngestPanels.tsx`'s `GenericInspector`)
5
+ * inspector shell component (a react component with no jsdom/testing-library
6
+ * in this repo — `vitest.config.ts` runs `environment: 'node'`) so this can
7
+ * be unit-tested directly as data-in/data-out, matching the repo's existing
8
+ * "test the pure logic headlessly" convention.
9
+ *
10
+ * Ungrouped fields keep their original relative order (byte-stable with the
11
+ * pre-`group` flat-list rendering); named groups are returned in FIRST-SEEN
12
+ * order, each carrying a slugified, testid-safe `groupId` (lowercase,
13
+ * non-alphanumeric runs collapsed to a single `-`, no leading/trailing `-`).
14
+ */
15
+
16
+ import type { PropertyDescriptor } from '@volter/editor-project/adapter';
17
+
18
+ export interface PropertyGroup {
19
+ name: string;
20
+ /** Slugified group name — the suffix of the rendered section's
21
+ * `data-testid="ingest-group-<groupId>"`. */
22
+ groupId: string;
23
+ properties: PropertyDescriptor[];
24
+ }
25
+
26
+ export interface GroupedProperties {
27
+ ungrouped: PropertyDescriptor[];
28
+ groups: PropertyGroup[];
29
+ }
30
+
31
+ /** Lowercase, non-alphanumeric runs -> single `-`, no leading/trailing `-`. */
32
+ export function slugifyGroupName(name: string): string {
33
+ return name
34
+ .toLowerCase()
35
+ .replace(/[^a-z0-9]+/g, '-')
36
+ .replace(/^-+|-+$/g, '');
37
+ }
38
+
39
+ export function groupProperties(props: readonly PropertyDescriptor[]): GroupedProperties {
40
+ const ungrouped: PropertyDescriptor[] = [];
41
+ const order: string[] = [];
42
+ const byName = new Map<string, PropertyDescriptor[]>();
43
+
44
+ for (const p of props) {
45
+ if (p.group) {
46
+ if (!byName.has(p.group)) {
47
+ byName.set(p.group, []);
48
+ order.push(p.group);
49
+ }
50
+ byName.get(p.group)!.push(p);
51
+ } else {
52
+ ungrouped.push(p);
53
+ }
54
+ }
55
+
56
+ return {
57
+ ungrouped,
58
+ groups: order.map((name) => ({
59
+ name,
60
+ groupId: slugifyGroupName(name),
61
+ properties: byName.get(name)!,
62
+ })),
63
+ };
64
+ }