@vgai/editor 0.2.0 → 0.4.0-canary.20260715.0

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 (430) hide show
  1. package/README.md +24 -0
  2. package/dist/assets/axe-C7YBtOuM.js +30 -0
  3. package/dist/assets/browserAll-DDtGGE48.js +1 -0
  4. package/dist/assets/create-runtime-DbTlBlKG.js +1 -0
  5. package/dist/assets/{game-BI111o5f.js → game-BE0r7DMI.js} +3 -3
  6. package/dist/assets/game-BdTHR2_X.js +1 -0
  7. package/dist/assets/{game-pt_1lQLv.js → game-C3iQGSqo.js} +1 -1
  8. package/dist/assets/game-CcHfYxjP.js +1 -0
  9. package/dist/assets/game-Cqzj_lpD.js +1 -0
  10. package/dist/assets/game-DSZdeCHu.js +1 -0
  11. package/dist/assets/game-Dch9sAPc.js +1 -0
  12. package/dist/assets/{game-xsOho_wg.js → game-SAFn90pA.js} +3 -3
  13. package/dist/assets/game-loop-DMIgSMV-.js +1 -0
  14. package/dist/assets/{game-source-CvidN7AB.js → game-source-Dk83w26t.js} +1 -1
  15. package/dist/assets/{index-Bp5cecD6.js → index-4idIsHHJ.js} +2 -2
  16. package/dist/assets/{index-DL7RcQ0n.js → index-C-LhOTBN.js} +1 -1
  17. package/dist/assets/{index-Cs8xwv3e.js → index-CDkxceqE.js} +1 -1
  18. package/dist/assets/index-CQEfi217.js +15412 -0
  19. package/dist/assets/index-Dvi-V0NE.css +1 -0
  20. package/dist/assets/ingest-siblings-s0P5I1Ub.js +1 -0
  21. package/dist/assets/mount-manifest-DXMOlF79.js +1 -0
  22. package/dist/assets/react-18-C9eHn8x1.js +1 -0
  23. package/dist/assets/webworkerAll-Fn0e-ouF.js +1 -0
  24. package/dist/assets/world-documents-GM0a9Kv7.js +1 -0
  25. package/dist/index.html +15 -13
  26. package/dist/ingest/racing-game/vgai.game.json +5 -4
  27. package/dist/ingest/simcity/vgai.game.json +5 -4
  28. package/dist/ingest/tanks/vgai.game.json +5 -4
  29. package/dist/project-scripts.bundle.js +3917 -0
  30. package/dist/scenes/untitled.vscn.json +2 -0
  31. package/dist-server/packaged.mjs +7697 -3435
  32. package/package.json +31 -4
  33. package/scripts/probe-reporter.ts +349 -0
  34. package/scripts/run-probe.ts +2260 -0
  35. package/server/asset-catalog-audit.ts +268 -0
  36. package/server/asset-catalog-v2.ts +146 -0
  37. package/server/asset-library-routes.ts +276 -58
  38. package/server/canonical-path.ts +1 -1
  39. package/server/dev.ts +148 -44
  40. package/server/editor-server.ts +888 -61
  41. package/server/editor-sse.ts +115 -4
  42. package/server/harness-chat-service.ts +796 -0
  43. package/server/local-asset-catalog.ts +157 -22
  44. package/server/packaged.ts +51 -21
  45. package/server/process-shutdown.ts +136 -0
  46. package/server/prod.ts +9 -6
  47. package/server/project-hmr-files.ts +41 -0
  48. package/server/project-operations.ts +343 -0
  49. package/server/project-optimize-deps-entries.ts +4 -4
  50. package/server/project-output-writer.ts +156 -0
  51. package/server/project-validation.ts +140 -0
  52. package/server/project-view.ts +8 -50
  53. package/server/server-utils.ts +75 -10
  54. package/server/session-registry.ts +12 -0
  55. package/src/EditorContext.tsx +107 -3
  56. package/src/action-registry.ts +115 -17
  57. package/src/adapter-resolver.ts +213 -478
  58. package/src/asset-events.ts +64 -1
  59. package/src/asset-preview.ts +906 -0
  60. package/src/asset-selection.ts +121 -0
  61. package/src/asset-workflow/asset-capabilities.ts +259 -0
  62. package/src/asset-workflow/asset-editor-errors.ts +46 -0
  63. package/src/asset-workflow/asset-import-pipeline.ts +176 -0
  64. package/src/asset-workflow/asset-library-query.ts +107 -0
  65. package/src/asset-workflow/asset-types.ts +192 -0
  66. package/src/asset-workflow/asset-workflow-quality.ts +65 -0
  67. package/src/asset-workflow/import-contract.ts +113 -0
  68. package/src/asset-workflow/model-conversion.ts +126 -0
  69. package/src/asset-workflow/model-inspection.ts +185 -0
  70. package/src/asset-workflow/project-asset-commands.ts +23 -0
  71. package/src/asset-workflow/project-asset-health.ts +153 -0
  72. package/src/asset-workflow/project-asset-operations.ts +119 -0
  73. package/src/asset-workflow/thumbnail-system.ts +172 -0
  74. package/src/authoring/active-systems.ts +15 -0
  75. package/src/authoring/boundary-authoring-adapter.ts +16 -5
  76. package/src/authoring/composite-authoring-adapter.ts +305 -124
  77. package/src/authoring/design-time-layers.ts +300 -117
  78. package/src/authoring/edit-mode-authoring.ts +278 -293
  79. package/src/authoring/embed-only-adapter.ts +4 -2
  80. package/src/authoring/first-party-hierarchy-menu.ts +7 -2
  81. package/src/authoring/first-party-inspector/AddSectionMenu.tsx +5 -12
  82. package/src/authoring/first-party-inspector/EnvironmentSection.tsx +53 -126
  83. package/src/authoring/first-party-inspector/HeaderSection.tsx +54 -65
  84. package/src/authoring/first-party-inspector/is-first-party-selection.ts +30 -11
  85. package/src/authoring/first-party-inspector/register.tsx +13 -2
  86. package/src/authoring/ingest-authoring-adapter.ts +142 -45
  87. package/src/authoring/mount-failure-report.ts +5 -5
  88. package/src/authoring/provenance.ts +41 -0
  89. package/src/authoring/react-dom-authoring-adapter.ts +92 -92
  90. package/src/authoring/react-inspector-section.tsx +489 -51
  91. package/src/authoring/react-world-authoring-adapter.ts +541 -306
  92. package/src/authoring/story-overlay.ts +1 -1
  93. package/src/authoring/story-types.ts +11 -0
  94. package/src/authoring/vgai-scene-authoring-adapter.ts +54 -25
  95. package/src/authoring/viewport-tool-context.ts +78 -0
  96. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  97. package/src/authoring/world-hidden-viewport.ts +186 -0
  98. package/src/authoring/world-pan-state.ts +33 -17
  99. package/src/authoring/world-session-state.ts +1 -1
  100. package/src/authoring/world2d-authoring-adapter.ts +109 -52
  101. package/src/availability-tick.ts +56 -0
  102. package/src/browser-play-entry.ts +5 -5
  103. package/src/browser-project-scripts.ts +1 -0
  104. package/src/build-identity.ts +15 -0
  105. package/src/command-listener.ts +893 -19
  106. package/src/components/AlignToolbar.tsx +74 -63
  107. package/src/components/AppRoot.tsx +193 -26
  108. package/src/components/ApplicationMenus.tsx +272 -0
  109. package/src/components/AssetBrowser.tsx +1450 -293
  110. package/src/components/AssetEditorShell.tsx +141 -0
  111. package/src/components/AssetImportDetails.tsx +218 -0
  112. package/src/components/AssetLibraryPanel.tsx +14 -0
  113. package/src/components/CameraInfo.tsx +11 -20
  114. package/src/components/CenterDocuments.tsx +585 -0
  115. package/src/components/CommandPalette.tsx +75 -30
  116. package/src/components/ConsolePanel.css +55 -0
  117. package/src/components/ConsolePanel.tsx +57 -112
  118. package/src/components/DebugConsolePanel.tsx +461 -0
  119. package/src/components/DebuggerPanel.tsx +165 -0
  120. package/src/components/DefaultEditorLayout.tsx +167 -231
  121. package/src/components/GameHierarchy.tsx +873 -290
  122. package/src/components/GamePerformanceOverlay.tsx +46 -0
  123. package/src/components/HarnessChatPanel.tsx +2352 -0
  124. package/src/components/HistoryPanel.tsx +226 -0
  125. package/src/components/Inspector.tsx +153 -99
  126. package/src/components/InspectorToolSection.tsx +6 -4
  127. package/src/components/MountFailureBanner.tsx +31 -48
  128. package/src/components/NetworkSection.tsx +25 -14
  129. package/src/components/OnlineAssetBrowser.tsx +794 -343
  130. package/src/components/OverlayReportBanner.tsx +38 -64
  131. package/src/components/PerformancePanel.tsx +206 -0
  132. package/src/components/PlayBar.tsx +93 -263
  133. package/src/components/PrefabSaveDialog.tsx +55 -127
  134. package/src/components/ProjectHeader.css +60 -0
  135. package/src/components/ProjectHeader.tsx +170 -105
  136. package/src/components/ProjectScreen.tsx +246 -184
  137. package/src/components/ReactCanvasControls.tsx +185 -0
  138. package/src/components/ResolutionPicker.tsx +85 -0
  139. package/src/components/RootActivateDialog.tsx +39 -68
  140. package/src/components/SaveDialog.tsx +55 -127
  141. package/src/components/SaveStatus.tsx +11 -29
  142. package/src/components/StartupLoadingScreen.tsx +96 -0
  143. package/src/components/StateWatchPanel.tsx +302 -0
  144. package/src/components/StatsOverlay.tsx +12 -5
  145. package/src/components/StatusBar.tsx +64 -0
  146. package/src/components/ThemeManagerDialog.css +89 -0
  147. package/src/components/ThemeManagerDialog.tsx +371 -0
  148. package/src/components/ToolHost.tsx +26 -15
  149. package/src/components/Toolbar.tsx +117 -214
  150. package/src/components/VgaiVoxelLogo.tsx +89 -0
  151. package/src/components/ViewportOverlay.tsx +97 -172
  152. package/src/components/ViewportPanel.tsx +130 -31
  153. package/src/components/WorkspaceDock.tsx +891 -0
  154. package/src/components/WorldSelectionOverlay.tsx +51 -63
  155. package/src/components/WorldTextEditor.tsx +9 -5
  156. package/src/components/asset-documents.tsx +390 -0
  157. package/src/components/asset-editor-persistence.ts +44 -0
  158. package/src/components/asset-selection-section.tsx +338 -0
  159. package/src/components/asset-viewers/AudioViewer.tsx +73 -21
  160. package/src/components/asset-viewers/GenericJsonViewer.tsx +26 -11
  161. package/src/components/asset-viewers/ImageViewer.tsx +43 -11
  162. package/src/components/asset-viewers/InputMapViewer.tsx +512 -134
  163. package/src/components/asset-viewers/MaterialAssetEditor.tsx +540 -0
  164. package/src/components/asset-viewers/ModelViewer.tsx +805 -121
  165. package/src/components/asset-viewers/OnlineAssetDetail.tsx +177 -60
  166. package/src/components/asset-viewers/SourceAssetViewer.tsx +121 -0
  167. package/src/components/asset-workflow.css +506 -0
  168. package/src/components/build-documents.tsx +696 -0
  169. package/src/components/core-utilities.tsx +75 -0
  170. package/src/components/data-documents.tsx +364 -0
  171. package/src/components/{DataPanel.tsx → data-editor.tsx} +138 -288
  172. package/src/components/debugger-panel-state.ts +57 -0
  173. package/src/components/inspector-widgets/AlignmentGrid.tsx +8 -14
  174. package/src/components/inspector-widgets/BorderEditor.tsx +41 -33
  175. package/src/components/inspector-widgets/ColorPicker.tsx +39 -39
  176. package/src/components/inspector-widgets/FontPicker.tsx +13 -21
  177. package/src/components/inspector-widgets/GradientEditor.tsx +11 -19
  178. package/src/components/inspector-widgets/ScrubbableInput.tsx +6 -3
  179. package/src/components/inspector-widgets/ShadowEditor.tsx +20 -33
  180. package/src/components/inspector-widgets/shared.tsx +90 -49
  181. package/src/components/inspectors/AnimationSection.tsx +39 -40
  182. package/src/components/inspectors/AudioSection.tsx +28 -39
  183. package/src/components/inspectors/BoneAttachmentSection.tsx +19 -24
  184. package/src/components/inspectors/CameraSection.tsx +14 -23
  185. package/src/components/inspectors/ComponentsSection.tsx +39 -43
  186. package/src/components/inspectors/JointsSection.tsx +34 -43
  187. package/src/components/inspectors/LightSection.tsx +90 -35
  188. package/src/components/inspectors/MaterialSection.tsx +137 -174
  189. package/src/components/inspectors/MeshSection.tsx +9 -17
  190. package/src/components/inspectors/NavigationSection.tsx +8 -15
  191. package/src/components/inspectors/ParticleSection.tsx +91 -76
  192. package/src/components/inspectors/PhysicsSection.tsx +42 -46
  193. package/src/components/inspectors/PostProcessingSection.tsx +28 -36
  194. package/src/components/inspectors/RenderingSection.tsx +12 -20
  195. package/src/components/inspectors/ShadowSection.tsx +7 -8
  196. package/src/components/inspectors/SplineSection.tsx +31 -42
  197. package/src/components/inspectors/TransformSection.tsx +14 -22
  198. package/src/components/patterns/Dialog.tsx +95 -0
  199. package/src/components/patterns/Fields.tsx +44 -0
  200. package/src/components/patterns/List.tsx +25 -0
  201. package/src/components/patterns/StateSurface.tsx +40 -0
  202. package/src/components/patterns/Surfaces.tsx +115 -0
  203. package/src/components/patterns/Tabs.tsx +80 -0
  204. package/src/components/patterns/Toolbar.tsx +51 -0
  205. package/src/components/patterns/Tree.tsx +72 -0
  206. package/src/components/primitives/Button.tsx +46 -0
  207. package/src/components/primitives/ColorInput.tsx +11 -47
  208. package/src/components/primitives/EditorIcon.tsx +99 -0
  209. package/src/components/primitives/FormControls.tsx +71 -0
  210. package/src/components/primitives/JsonInput.tsx +15 -2
  211. package/src/components/primitives/Layout.tsx +100 -0
  212. package/src/components/primitives/Menu.tsx +105 -0
  213. package/src/components/primitives/NumberInput.tsx +8 -35
  214. package/src/components/primitives/Panel.tsx +49 -44
  215. package/src/components/primitives/SectionHeader.tsx +10 -28
  216. package/src/components/primitives/Text.tsx +46 -0
  217. package/src/components/primitives/Tooltip.tsx +20 -12
  218. package/src/components/primitives/Vec3Input.tsx +3 -0
  219. package/src/components/primitives/banner-tones.ts +33 -0
  220. package/src/components/primitives/editor-icons.ts +102 -0
  221. package/src/components/primitives/panel-header-styles.ts +30 -0
  222. package/src/components/project-operation-documents.tsx +226 -0
  223. package/src/components/status-contributions.tsx +175 -0
  224. package/src/components/story-documents-register.ts +15 -0
  225. package/src/components/story-documents.tsx +1185 -0
  226. package/src/components/tool-documents.tsx +110 -0
  227. package/src/components/workspace-dock.css +293 -0
  228. package/src/components/workspace-history.ts +33 -0
  229. package/src/components/world-documents.tsx +145 -0
  230. package/src/components/xstate-documents.tsx +209 -0
  231. package/src/composite-screenshot.ts +248 -0
  232. package/src/design-system/index.ts +70 -0
  233. package/src/design-system-stories/Foundation.stories.tsx +183 -0
  234. package/src/design-system-stories/Patterns.stories.tsx +251 -0
  235. package/src/design-system-stories/Workspace.stories.tsx +538 -0
  236. package/src/doctor/report.ts +57 -13
  237. package/src/editor-api.ts +295 -31
  238. package/src/editor-compatibility.ts +200 -0
  239. package/src/editor-console.ts +35 -17
  240. package/src/editor-hotkeys.ts +85 -33
  241. package/src/editor-store.ts +538 -233
  242. package/src/editor-viewport.ts +160 -34
  243. package/src/entity-factory.ts +14 -3
  244. package/src/gizmo-registry.ts +21 -5
  245. package/src/harness-chat-editor-context.ts +37 -0
  246. package/src/harness-chat-indicator.ts +68 -0
  247. package/src/harness-chat-layout.ts +53 -0
  248. package/src/harness-chat-lifecycle.ts +170 -0
  249. package/src/harness-chat-reconnect.ts +85 -0
  250. package/src/harness-chat-types.ts +409 -0
  251. package/src/hierarchy-drop.ts +50 -0
  252. package/src/hierarchy-expansion-state.ts +100 -0
  253. package/src/hierarchy-menu-registry.ts +1 -1
  254. package/src/hierarchy-projection.ts +76 -0
  255. package/src/history/editor-session.ts +21 -0
  256. package/src/history/history-commands.ts +147 -0
  257. package/src/history/history-service.ts +904 -0
  258. package/src/history/json-history-resource.ts +165 -0
  259. package/src/history/persistence-coordinator.ts +35 -0
  260. package/src/history/project-file-history.ts +266 -0
  261. package/src/history/project-root-history-backends.ts +53 -0
  262. package/src/history/resource-registry.ts +209 -0
  263. package/src/history/snapshot-store.ts +108 -0
  264. package/src/history/source-history-backend.ts +374 -0
  265. package/src/history/types.ts +100 -0
  266. package/src/hmr-registration-group.ts +67 -0
  267. package/src/hmr-stable-react-context.ts +23 -0
  268. package/src/hosted-example.ts +12 -2
  269. package/src/hotkeys.ts +89 -18
  270. package/src/ingest/discovery-react.ts +9 -10
  271. package/src/ingest/discovery.ts +4 -4
  272. package/src/ingest/discovery2d.ts +5 -5
  273. package/src/ingest/games/bloom-composer/vgai.game.json +3 -3
  274. package/src/ingest/games/embed-bundle/vgai.game.json +3 -3
  275. package/src/ingest/games/games-fps/vgai.game.json +3 -3
  276. package/src/ingest/games/iframe-reachable/vgai.game.json +3 -3
  277. package/src/ingest/games/interactive-cubes/vgai.game.json +3 -3
  278. package/src/ingest/games/mismatched-three/vgai.game.json +3 -3
  279. package/src/ingest/games/own-three-bundled/vgai.game.json +3 -3
  280. package/src/ingest/games/pointerlock-maze/vgai.game.json +7 -4
  281. package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +3 -3
  282. package/src/ingest/games-2d/bunnymark/vgai.game.json +3 -3
  283. package/src/ingest/games-2d/flappy/vgai.game.json +3 -3
  284. package/src/ingest/games-2d/flappy-pixi/vgai.game.json +3 -3
  285. package/src/ingest/games-2d/puzzling-potions/vgai.game.json +3 -3
  286. package/src/ingest/games-2d/tilemap-camera/vgai.game.json +3 -3
  287. package/src/ingest/games-react/react-rpg/vgai.game.json +3 -3
  288. package/src/ingest/types.ts +1 -1
  289. package/src/ingest-mode.ts +47 -52
  290. package/src/ingest-siblings.ts +23 -33
  291. package/src/initial-scene.ts +1 -2
  292. package/src/main.tsx +16 -8
  293. package/src/manifest-project.ts +10 -12
  294. package/src/model-thumbnail.ts +261 -26
  295. package/src/module-mode.ts +44 -50
  296. package/src/play-log-events.ts +26 -0
  297. package/src/play-mode.ts +495 -401
  298. package/src/play-scene-adoption.ts +23 -0
  299. package/src/playground/main.ts +68 -24
  300. package/src/playwright-shim.ts +473 -0
  301. package/src/project-manager.ts +90 -10
  302. package/src/project-operations.ts +112 -0
  303. package/src/project-story-discovery.ts +25 -0
  304. package/src/project-tool-discovery.ts +43 -0
  305. package/src/scene-serializer.ts +0 -6
  306. package/src/scene-sync.ts +7 -2
  307. package/src/script-loader.ts +3 -3
  308. package/src/skeleton-helper.ts +57 -0
  309. package/src/storage/seed.ts +68 -8
  310. package/src/stories/StoryPreviewMount.tsx +265 -0
  311. package/src/stories/action-stories.fixture.tsx +44 -0
  312. package/src/stories/button-stories.fixture.tsx +50 -0
  313. package/src/stories/compose-project-stories.ts +182 -0
  314. package/src/stories/loader-stories.fixture.tsx +53 -0
  315. package/src/stories/story-discovery.ts +130 -0
  316. package/src/stories/story-registry.ts +146 -0
  317. package/src/theme-css.ts +1049 -0
  318. package/src/theme-library.ts +238 -0
  319. package/src/theme-preference.ts +130 -0
  320. package/src/theme.ts +527 -0
  321. package/src/tool-loader.ts +80 -24
  322. package/src/ui-source/inspect.ts +27 -4
  323. package/src/ui-source/source-write-backend.ts +83 -22
  324. package/src/widgets/index.ts +9 -18
  325. package/src/workspace-aux-commands.ts +11 -0
  326. package/src/workspace-dock-controller.ts +64 -0
  327. package/src/workspace-document-ids.ts +5 -0
  328. package/src/workspace-document-registry.ts +367 -0
  329. package/src/workspace-state-persistence.ts +455 -0
  330. package/src/workspace-status-registry.ts +110 -0
  331. package/src/workspace-utility-commands.ts +49 -0
  332. package/src/workspace-utility-registry.ts +161 -0
  333. package/src/world-document-routing.ts +16 -0
  334. package/src/xstate-inspect/XStateMachineInspector.tsx +544 -0
  335. package/src/xstate-inspect/character-animation-machine.fixture.ts +74 -0
  336. package/src/xstate-inspect/use-live-actor-state.ts +39 -0
  337. package/src/xstate-inspect/xstate-graph.ts +265 -0
  338. package/src/xstate-inspect/xstate-layout.ts +76 -0
  339. package/src/z-index.ts +26 -0
  340. package/template/.claude/skills/editor/SKILL.md +129 -90
  341. package/template/AGENTS.md +1110 -0
  342. package/template/CLAUDE.md +1 -512
  343. package/template/IDIOMS.md +50 -0
  344. package/template/check-idioms.ts +706 -0
  345. package/template/manifest-entry-modules-plugin.ts +53 -0
  346. package/template/package.json +13 -4
  347. package/template/public/scenes/default.scn2d.json +6 -0
  348. package/template/public/scenes/default.vscn.json +7 -1
  349. package/template/public/scenes/untitled.vscn.json +10 -0
  350. package/template/scripts/playtest.ts +40 -0
  351. package/template/server/loopback.ts +75 -0
  352. package/template/server/rooms/arena-room.ts +69 -1
  353. package/template/server/rooms/game-room.ts +68 -1
  354. package/template/src/data/README.md +9 -4
  355. package/template/src/data/data-ref.ts +35 -0
  356. package/template/src/data/tuning.schema.ts +1 -1
  357. package/template/src/main.ts +41 -62
  358. package/template/src/manifest-entry-modules.d.ts +3 -0
  359. package/template/src/operations/README.md +88 -0
  360. package/template/src/runtime/pixi-adapter.ts +24 -0
  361. package/template/src/scripts/components/data-spinner.ts +43 -2
  362. package/template/src/scripts/components/spin-lap-math.ts +27 -0
  363. package/template/src/tools/README.md +5 -3
  364. package/template/src/tools/example.tool.tsx +13 -7
  365. package/template/src/ui/Button.stories.tsx +66 -0
  366. package/template/src/ui/RebindPanel.tsx +2 -6
  367. package/template/src/ui/game.tsx +17 -0
  368. package/template/tests/acceptance/example.spec.ts +64 -0
  369. package/template/tests/logic/example.test.ts +31 -0
  370. package/template/tests/logic/room.test.ts +100 -0
  371. package/template/tests/tsconfig.json +30 -0
  372. package/template/validate-manifest.ts +5 -5
  373. package/template/validate-scenes.ts +50 -18
  374. package/template/vgai.game.json +20 -13
  375. package/template/vite.config.ts +77 -16
  376. package/vite-plugin-ui-oid.ts +261 -17
  377. package/dist/assets/CCDIKSolver-Dz-ysxZF.js +0 -1
  378. package/dist/assets/SelectionBox-BXsv_6aH.js +0 -1
  379. package/dist/assets/browser-project-scripts-DOru4L1x.js +0 -2
  380. package/dist/assets/browserAll-CEkWYlFk.js +0 -1
  381. package/dist/assets/create-runtime-DYIWr3va.js +0 -1
  382. package/dist/assets/data-asset-Bb9sIM7i.js +0 -5
  383. package/dist/assets/game-8SDZPPgH.js +0 -1
  384. package/dist/assets/game-CevorxyV.js +0 -1
  385. package/dist/assets/game-Di7XlywD.js +0 -1
  386. package/dist/assets/game-DjnCaw8R.js +0 -1
  387. package/dist/assets/game-Q9A0aXSV.js +0 -1
  388. package/dist/assets/index-CPVV6pjw.js +0 -1
  389. package/dist/assets/index-CpOnYyeD.js +0 -213
  390. package/dist/assets/index-Dr8H_6Rl.js +0 -1
  391. package/dist/assets/index-_bCaipUk.js +0 -13650
  392. package/dist/assets/ingest-siblings-Dz8eEqrV.js +0 -1
  393. package/dist/assets/mount-manifest-Bhk0ohsl.js +0 -1
  394. package/dist/assets/scene-query-BivAHhJu.js +0 -1
  395. package/dist/assets/webworkerAll-BLrH0F6F.js +0 -1
  396. package/dist/assets/xstate-animation-binding-1NGLmw6y.js +0 -1
  397. package/dist/assets/xstate.esm-BgUD33nl.js +0 -3
  398. package/src/authoring/scene-ui-layer.ts +0 -485
  399. package/src/authoring/ui-authoring-adapter.ts +0 -325
  400. package/src/authoring/ui-hierarchy-menu.ts +0 -40
  401. package/src/authoring/ui-inspector-sections.tsx +0 -156
  402. package/src/authoring/undo-timeline.ts +0 -145
  403. package/src/components/BottomPanel.tsx +0 -326
  404. package/src/components/BuildPanel.tsx +0 -455
  405. package/src/components/FolderTree.tsx +0 -179
  406. package/src/components/RightPanel.tsx +0 -166
  407. package/src/components/WorldContextMenu.tsx +0 -257
  408. package/src/components/asset-viewers/AssetViewer.tsx +0 -38
  409. package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +0 -129
  410. package/src/scene-ui-mode/active-scene-ui.ts +0 -58
  411. package/src/scene-ui-mode/scene-ui-palette-panel.tsx +0 -152
  412. package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +0 -29
  413. package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +0 -74
  414. package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +0 -49
  415. package/src/scene-ui-mode/ui-prefab-io.ts +0 -76
  416. package/src/ui-editor/inspector.tsx +0 -563
  417. package/src/ui-editor/node-ops.ts +0 -266
  418. package/src/ui-editor/overlay.tsx +0 -380
  419. package/src/ui-editor/palette.tsx +0 -114
  420. package/src/ui-editor/react-store.ts +0 -78
  421. package/src/ui-editor/timeline-panel.tsx +0 -443
  422. package/src/ui-editor/ui-edit-store.ts +0 -552
  423. package/src/ui-editor/ui-prefab.ts +0 -95
  424. package/template/project.json +0 -9
  425. package/template/src/scripts/main.ts +0 -94
  426. package/template/src/ui/DefaultHud.tsx +0 -40
  427. package/template/src/ui/game-state.tsx +0 -37
  428. package/template/src/ui/mount-default-hud.tsx +0 -19
  429. package/template/src/ui/mount-ui.ts +0 -15
  430. package/vite-plugin-react-world-provider.ts +0 -81
@@ -1,7 +1,7 @@
1
1
  import type { SceneMesh } from '@engine/scene/scene-types';
2
+ import { NumberInput, SectionHeader, Select } from '../../design-system';
2
3
  import { useEditorStore } from '../../EditorContext';
3
- import { NumberInput } from '../primitives/NumberInput';
4
- import { SectionHeader } from '../primitives/SectionHeader';
4
+ import { fieldLabelStyle, mixedStyle } from '../inspector-widgets/shared';
5
5
  import type { SectionProps } from './multi-edit-utils';
6
6
  import { commonNum, commonStr } from './multi-edit-utils';
7
7
 
@@ -42,8 +42,9 @@ export function MeshSection({ entities, ids }: SectionProps) {
42
42
  <SectionHeader label="Mesh">
43
43
  <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
44
44
  <div>
45
- <div style={{ fontSize: 10, color: '#8c8c8c', marginBottom: 2 }}>Type</div>
46
- <select
45
+ <div style={fieldLabelStyle}>Type</div>
46
+ <Select
47
+ className="vgai-select"
47
48
  value={meshType ?? ''}
48
49
  onChange={(e) => {
49
50
  const type = e.target.value as SceneMesh['type'];
@@ -53,20 +54,11 @@ export function MeshSection({ entities, ids }: SectionProps) {
53
54
  : { type };
54
55
  });
55
56
  }}
56
- style={{
57
- width: '100%',
58
- background: '#1e1e1e',
59
- color: meshType === null ? '#666' : '#c5c8ce',
60
- fontStyle: meshType === null ? 'italic' : 'normal',
61
- border: '1px solid #333',
62
- borderRadius: 2,
63
- padding: '3px 4px',
64
- fontSize: 12,
65
- }}
57
+ style={{ width: '100%', ...mixedStyle(meshType === null) }}
66
58
  >
67
59
  {meshType === null && (
68
60
  <option value="" disabled>
69
- (mixed)
61
+ —
70
62
  </option>
71
63
  )}
72
64
  {meshTypes.map((t) => (
@@ -74,11 +66,11 @@ export function MeshSection({ entities, ids }: SectionProps) {
74
66
  {t}
75
67
  </option>
76
68
  ))}
77
- </select>
69
+ </Select>
78
70
  </div>
79
71
  {labels.map((label, i) => (
80
72
  <div key={label}>
81
- <div style={{ fontSize: 10, color: '#8c8c8c', marginBottom: 2 }}>{label}</div>
73
+ <div style={fieldLabelStyle}>{label}</div>
82
74
  <NumberInput
83
75
  value={commonArgs[i] ?? null}
84
76
  onChange={(v) => {
@@ -1,5 +1,6 @@
1
+ import { SectionHeader, Select } from '../../design-system';
1
2
  import { useEditorStore } from '../../EditorContext';
2
- import { SectionHeader } from '../primitives/SectionHeader';
3
+ import { fieldLabelStyle, mixedStyle } from '../inspector-widgets/shared';
3
4
  import type { SectionProps } from './multi-edit-utils';
4
5
  import { commonStr } from './multi-edit-utils';
5
6
 
@@ -16,8 +17,9 @@ export function NavigationSection({ entities, ids }: SectionProps) {
16
17
  <SectionHeader label="Navigation" defaultOpen={false}>
17
18
  <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
18
19
  <div>
19
- <div style={{ fontSize: 10, color: '#8c8c8c', marginBottom: 2 }}>Role</div>
20
- <select
20
+ <div style={fieldLabelStyle}>Role</div>
21
+ <Select
22
+ className="vgai-select"
21
23
  value={role ?? ''}
22
24
  onChange={(e) => {
23
25
  const val = e.target.value;
@@ -29,20 +31,11 @@ export function NavigationSection({ entities, ids }: SectionProps) {
29
31
  }
30
32
  });
31
33
  }}
32
- style={{
33
- width: '100%',
34
- background: '#1e1e1e',
35
- color: role === null ? '#666' : '#c5c8ce',
36
- fontStyle: role === null ? 'italic' : 'normal',
37
- border: '1px solid #333',
38
- borderRadius: 2,
39
- padding: '3px 4px',
40
- fontSize: 12,
41
- }}
34
+ style={{ width: '100%', ...mixedStyle(role === null) }}
42
35
  >
43
36
  {role === null && (
44
37
  <option value="" disabled>
45
- (mixed)
38
+ —
46
39
  </option>
47
40
  )}
48
41
  {roles.map((r) => (
@@ -50,7 +43,7 @@ export function NavigationSection({ entities, ids }: SectionProps) {
50
43
  {r}
51
44
  </option>
52
45
  ))}
53
- </select>
46
+ </Select>
54
47
  </div>
55
48
  </div>
56
49
  </SectionHeader>
@@ -5,29 +5,26 @@ import type {
5
5
  EmitterShapeJSON,
6
6
  ValueGeneratorJSON,
7
7
  } from '@engine/scene/schema/particles';
8
+ import {
9
+ Button,
10
+ Checkbox,
11
+ ColorSwatchInput,
12
+ NumberInput,
13
+ SectionHeader,
14
+ Select,
15
+ TextInput,
16
+ themeVars,
17
+ } from '../../design-system';
8
18
  import { useEditorStore } from '../../EditorContext';
9
- import { NumberInput } from '../primitives/NumberInput';
10
- import { SectionHeader } from '../primitives/SectionHeader';
19
+ import { fieldLabelStyle, groupLabelStyle } from '../inspector-widgets/shared';
11
20
  import type { SectionProps } from './multi-edit-utils';
12
21
 
13
- const labelStyle: React.CSSProperties = { fontSize: 10, color: '#8c8c8c', marginBottom: 2 };
22
+ const labelStyle: React.CSSProperties = fieldLabelStyle;
14
23
  const subHeaderStyle: React.CSSProperties = {
15
- fontSize: 10,
16
- color: '#aaa',
17
- fontWeight: 600,
18
- textTransform: 'uppercase' as const,
24
+ ...groupLabelStyle,
19
25
  marginTop: 4,
20
26
  marginBottom: 4,
21
27
  };
22
- const selectStyle: React.CSSProperties = {
23
- width: '100%',
24
- background: '#1e1e1e',
25
- color: '#c5c8ce',
26
- border: '1px solid #333',
27
- borderRadius: 2,
28
- padding: '2px 4px',
29
- fontSize: 11,
30
- };
31
28
  const rowStyle: React.CSSProperties = { display: 'flex', gap: 4, alignItems: 'center' };
32
29
 
33
30
  // --- Value Generator Editor ---
@@ -47,7 +44,7 @@ function ValueGenEditor({
47
44
  <div>
48
45
  <div style={labelStyle}>{label}</div>
49
46
  <div style={{ display: 'flex', gap: 4, alignItems: 'center' }}>
50
- <select
47
+ <Select
51
48
  value={gen.type}
52
49
  onChange={(e) => {
53
50
  const t = e.target.value;
@@ -59,12 +56,13 @@ function ValueGenEditor({
59
56
  functions: [{ function: { p0: 1, p1: 0.67, p2: 0.33, p3: 0 }, start: 0 }],
60
57
  });
61
58
  }}
62
- style={{ ...selectStyle, width: 'auto', flex: '0 0 auto' }}
59
+ className="vgai-select"
60
+ style={{ width: 'auto', flex: '0 0 auto' }}
63
61
  >
64
62
  <option value="ConstantValue">Const</option>
65
63
  <option value="IntervalValue">Range</option>
66
64
  <option value="PiecewiseBezier">Curve</option>
67
- </select>
65
+ </Select>
68
66
  <div style={{ flex: 1, display: 'flex', gap: 2 }}>
69
67
  {gen.type === 'ConstantValue' && (
70
68
  <NumberInput
@@ -90,7 +88,7 @@ function ValueGenEditor({
90
88
  </>
91
89
  )}
92
90
  {gen.type === 'PiecewiseBezier' && (
93
- <span style={{ fontSize: 10, color: '#666', padding: '2px 4px' }}>
91
+ <span style={{ fontSize: 10, color: themeVars.content.dim, padding: '2px 4px' }}>
94
92
  {gen.functions.length} segment{gen.functions.length !== 1 ? 's' : ''}
95
93
  </span>
96
94
  )}
@@ -137,7 +135,7 @@ function ColorGenEditor({
137
135
  <div>
138
136
  <div style={labelStyle}>{label}</div>
139
137
  <div style={{ display: 'flex', gap: 4, alignItems: 'center' }}>
140
- <select
138
+ <Select
141
139
  value={gen.type}
142
140
  onChange={(e) => {
143
141
  const t = e.target.value;
@@ -150,24 +148,32 @@ function ColorGenEditor({
150
148
  b: { r: 1, g: 0, b: 0, a: 1 },
151
149
  });
152
150
  }}
153
- style={{ ...selectStyle, width: 'auto', flex: '0 0 auto' }}
151
+ className="vgai-select"
152
+ style={{ width: 'auto', flex: '0 0 auto' }}
154
153
  >
155
154
  <option value="ConstantColor">Solid</option>
156
155
  <option value="ColorRange">Range</option>
157
156
  <option value="Gradient">Gradient</option>
158
157
  <option value="RandomColorBetweenGradient">Rnd Gradient</option>
159
- </select>
158
+ </Select>
160
159
  <div style={{ flex: 1, display: 'flex', gap: 2, alignItems: 'center' }}>
161
160
  {gen.type === 'ConstantColor' && (
162
161
  <>
163
- <input
164
- type="color"
162
+ <ColorSwatchInput
165
163
  value={toHex(gen.color)}
166
164
  onChange={(e) => {
167
165
  const rgb = fromHex(e.target.value);
168
166
  onChange({ ...gen, color: { ...rgb, a: gen.color.a } });
169
167
  }}
170
- style={{ width: 28, height: 20, border: 'none', padding: 0, cursor: 'pointer' }}
168
+ style={{
169
+ width: 20,
170
+ height: 20,
171
+ border: `1px solid ${themeVars.boundary.default}`,
172
+ borderRadius: themeVars.shape.small,
173
+ background: 'transparent',
174
+ padding: 0,
175
+ cursor: 'pointer',
176
+ }}
171
177
  />
172
178
  <NumberInput
173
179
  value={gen.color.a}
@@ -179,28 +185,42 @@ function ColorGenEditor({
179
185
  )}
180
186
  {gen.type === 'ColorRange' && (
181
187
  <>
182
- <input
183
- type="color"
188
+ <ColorSwatchInput
184
189
  value={toHex(gen.a)}
185
190
  onChange={(e) => {
186
191
  const rgb = fromHex(e.target.value);
187
192
  onChange({ ...gen, a: { ...rgb, a: gen.a.a } });
188
193
  }}
189
- style={{ width: 28, height: 20, border: 'none', padding: 0, cursor: 'pointer' }}
194
+ style={{
195
+ width: 20,
196
+ height: 20,
197
+ border: `1px solid ${themeVars.boundary.default}`,
198
+ borderRadius: themeVars.shape.small,
199
+ background: 'transparent',
200
+ padding: 0,
201
+ cursor: 'pointer',
202
+ }}
190
203
  />
191
- <input
192
- type="color"
204
+ <ColorSwatchInput
193
205
  value={toHex(gen.b)}
194
206
  onChange={(e) => {
195
207
  const rgb = fromHex(e.target.value);
196
208
  onChange({ ...gen, b: { ...rgb, a: gen.b.a } });
197
209
  }}
198
- style={{ width: 28, height: 20, border: 'none', padding: 0, cursor: 'pointer' }}
210
+ style={{
211
+ width: 20,
212
+ height: 20,
213
+ border: `1px solid ${themeVars.boundary.default}`,
214
+ borderRadius: themeVars.shape.small,
215
+ background: 'transparent',
216
+ padding: 0,
217
+ cursor: 'pointer',
218
+ }}
199
219
  />
200
220
  </>
201
221
  )}
202
222
  {(gen.type === 'Gradient' || gen.type === 'RandomColorBetweenGradient') && (
203
- <span style={{ fontSize: 10, color: '#666', padding: '2px 4px' }}>
223
+ <span style={{ fontSize: 10, color: themeVars.content.dim, padding: '2px 4px' }}>
204
224
  (gradient editor)
205
225
  </span>
206
226
  )}
@@ -238,17 +258,18 @@ function ShapeEditor({
238
258
  <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
239
259
  <div>
240
260
  <div style={labelStyle}>Type</div>
241
- <select
261
+ <Select
242
262
  value={shape.type}
243
263
  onChange={(e) => onChange({ type: e.target.value as EmitterShapeJSON['type'] })}
244
- style={selectStyle}
264
+ className="vgai-select"
265
+ style={{ width: '100%' }}
245
266
  >
246
267
  {SHAPE_TYPES.map((t) => (
247
268
  <option key={t} value={t}>
248
269
  {t}
249
270
  </option>
250
271
  ))}
251
- </select>
272
+ </Select>
252
273
  </div>
253
274
  {shape.type !== 'point' && shape.type !== 'grid' && 'radius' in shape && (
254
275
  <div>
@@ -409,7 +430,7 @@ function BehaviorListEditor({
409
430
  }}
410
431
  >
411
432
  <span>Behaviors</span>
412
- <select
433
+ <Select
413
434
  value=""
414
435
  onChange={(e) => {
415
436
  if (e.target.value) {
@@ -417,7 +438,8 @@ function BehaviorListEditor({
417
438
  e.target.value = '';
418
439
  }
419
440
  }}
420
- style={{ ...selectStyle, width: 'auto', fontSize: 10, padding: '1px 2px' }}
441
+ className="vgai-select"
442
+ style={{ width: 'auto' }}
421
443
  >
422
444
  <option value="">+ Add</option>
423
445
  {BEHAVIOR_TYPES.map((t) => (
@@ -425,17 +447,17 @@ function BehaviorListEditor({
425
447
  {t}
426
448
  </option>
427
449
  ))}
428
- </select>
450
+ </Select>
429
451
  </div>
430
452
  {behaviors.map((b, i) => (
431
453
  <div
432
454
  key={`${b.type}-${i}`}
433
455
  style={{
434
- background: '#1e1e1e',
435
- borderRadius: 2,
456
+ background: themeVars.surface.inset,
457
+ borderRadius: themeVars.shape.small,
436
458
  padding: '4px 6px',
437
459
  marginBottom: 3,
438
- border: '1px solid #333',
460
+ border: `1px solid ${themeVars.boundary.default}`,
439
461
  }}
440
462
  >
441
463
  <div
@@ -446,21 +468,17 @@ function BehaviorListEditor({
446
468
  marginBottom: 2,
447
469
  }}
448
470
  >
449
- <span style={{ fontSize: 10, color: '#aaa', fontWeight: 600 }}>{b.type}</span>
450
- <button
471
+ <span style={{ fontSize: 10, color: themeVars.content.muted, fontWeight: 600 }}>
472
+ {b.type}
473
+ </span>
474
+ <Button
451
475
  type="button"
452
476
  onClick={() => onChange(behaviors.filter((_, j) => j !== i))}
453
- style={{
454
- background: 'none',
455
- border: 'none',
456
- color: '#666',
457
- cursor: 'pointer',
458
- fontSize: 12,
459
- padding: '0 2px',
460
- }}
477
+ variant="ghost"
478
+ size="compact"
461
479
  >
462
480
  ×
463
- </button>
481
+ </Button>
464
482
  </div>
465
483
  {/* Inline editing for common behaviors */}
466
484
  {b.type === 'ApplyForce' && (
@@ -506,7 +524,9 @@ function BehaviorListEditor({
506
524
  </div>
507
525
  ))}
508
526
  {behaviors.length === 0 && (
509
- <div style={{ fontSize: 10, color: '#555', padding: '2px 0' }}>No behaviors</div>
527
+ <div style={{ fontSize: 10, color: themeVars.content.dim, padding: '2px 0' }}>
528
+ No behaviors
529
+ </div>
510
530
  )}
511
531
  </div>
512
532
  );
@@ -537,11 +557,11 @@ export function ParticleSection({ entities }: SectionProps) {
537
557
  alignItems: 'center',
538
558
  gap: 4,
539
559
  fontSize: 11,
540
- color: '#c5c8ce',
560
+ color: themeVars.content.primary,
541
561
  }}
542
562
  >
543
- <input
544
- type="checkbox"
563
+ <Checkbox
564
+ className="vgai-checkbox"
545
565
  checked={particles.looping !== false}
546
566
  onChange={(e) => update({ looping: e.target.checked })}
547
567
  />
@@ -553,11 +573,11 @@ export function ParticleSection({ entities }: SectionProps) {
553
573
  alignItems: 'center',
554
574
  gap: 4,
555
575
  fontSize: 11,
556
- color: '#c5c8ce',
576
+ color: themeVars.content.primary,
557
577
  }}
558
578
  >
559
- <input
560
- type="checkbox"
579
+ <Checkbox
580
+ className="vgai-checkbox"
561
581
  checked={particles.worldSpace ?? false}
562
582
  onChange={(e) => update({ worldSpace: e.target.checked })}
563
583
  />
@@ -610,10 +630,11 @@ export function ParticleSection({ entities }: SectionProps) {
610
630
  {/* Render mode */}
611
631
  <div>
612
632
  <div style={labelStyle}>Render Mode</div>
613
- <select
633
+ <Select
614
634
  value={particles.renderMode ?? 'billboard'}
615
635
  onChange={(e) => update({ renderMode: e.target.value as SceneParticles['renderMode'] })}
616
- style={selectStyle}
636
+ className="vgai-select"
637
+ style={{ width: '100%' }}
617
638
  >
618
639
  <option value="billboard">Billboard</option>
619
640
  <option value="stretchedBillboard">Stretched</option>
@@ -621,14 +642,14 @@ export function ParticleSection({ entities }: SectionProps) {
621
642
  <option value="verticalBillboard">Vertical</option>
622
643
  <option value="mesh">Mesh</option>
623
644
  <option value="trail">Trail</option>
624
- </select>
645
+ </Select>
625
646
  </div>
626
647
 
627
648
  {/* Material */}
628
649
  <div style={subHeaderStyle}>Material</div>
629
650
  <div>
630
651
  <div style={labelStyle}>Blending</div>
631
- <select
652
+ <Select
632
653
  value={particles.material.blending ?? 'additive'}
633
654
  onChange={(e) =>
634
655
  update({
@@ -638,15 +659,16 @@ export function ParticleSection({ entities }: SectionProps) {
638
659
  },
639
660
  })
640
661
  }
641
- style={selectStyle}
662
+ className="vgai-select"
663
+ style={{ width: '100%' }}
642
664
  >
643
665
  <option value="additive">Additive</option>
644
666
  <option value="normal">Normal</option>
645
- </select>
667
+ </Select>
646
668
  </div>
647
669
  <div>
648
670
  <div style={labelStyle}>Texture</div>
649
- <input
671
+ <TextInput
650
672
  value={particles.material.map ?? ''}
651
673
  placeholder="path/to/sprite.png"
652
674
  onChange={(e) => {
@@ -658,15 +680,8 @@ export function ParticleSection({ entities }: SectionProps) {
658
680
  }
659
681
  update({ material: mat });
660
682
  }}
661
- style={{
662
- width: '100%',
663
- background: '#1e1e1e',
664
- color: '#c5c8ce',
665
- border: '1px solid #333',
666
- borderRadius: 2,
667
- padding: '2px 4px',
668
- fontSize: 11,
669
- }}
683
+ className="vgai-input"
684
+ style={{ width: '100%' }}
670
685
  />
671
686
  </div>
672
687