@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
@@ -6,7 +6,26 @@ import {
6
6
  getRecentActionIds,
7
7
  pushRecentAction,
8
8
  } from '../action-registry';
9
- import { useEditorStore } from '../EditorContext';
9
+ import {
10
+ accentMuted,
11
+ bg,
12
+ border,
13
+ DisclosureIcon,
14
+ fontSize,
15
+ fontWeight,
16
+ radius,
17
+ scrim,
18
+ shadow,
19
+ TextInput,
20
+ text,
21
+ } from '../design-system';
22
+ import { useEditorStore, useHistoryCommandSnapshot, useHistoryCommands } from '../EditorContext';
23
+ import { zIndex } from '../z-index';
24
+ import { buildDataAssetActions } from './data-documents';
25
+ import { buildProjectOperationActions } from './project-operation-documents';
26
+ import { buildStoryActions } from './story-documents';
27
+ import { buildToolActions } from './tool-documents';
28
+ import { buildXStateMachineActions } from './xstate-documents';
10
29
 
11
30
  interface CommandPaletteProps {
12
31
  onClose: () => void;
@@ -36,16 +55,29 @@ const CATEGORY_ORDER = ['action', 'entity'];
36
55
 
37
56
  export function CommandPalette({ onClose }: CommandPaletteProps) {
38
57
  const store = useEditorStore();
58
+ const history = useHistoryCommands();
59
+ const historySnapshot = useHistoryCommandSnapshot();
39
60
  const [query, setQuery] = useState('');
40
61
  const [highlightIndex, setHighlightIndex] = useState(0);
41
62
  const inputRef = useRef<HTMLInputElement>(null);
42
63
  const listRef = useRef<HTMLDivElement>(null);
43
64
 
44
65
  const actions = useMemo(() => {
45
- const statics = buildStaticActions(store);
66
+ const statics = buildStaticActions(store, history, historySnapshot);
67
+ // W3 (workspace-shell §9/W3) — document-open discovery lives HERE now
68
+ // that the permanent bottom tabs are gone: data assets (one per
69
+ // discovered file), document-placement project tools, and live XState
70
+ // machines. All read live snapshots; the palette mounts fresh per open.
71
+ const documents = [
72
+ ...buildDataAssetActions(store),
73
+ ...buildProjectOperationActions(store),
74
+ ...buildStoryActions(store),
75
+ ...buildToolActions(store),
76
+ ...buildXStateMachineActions(),
77
+ ];
46
78
  const entities = buildEntityActions(store);
47
- return [...statics, ...entities];
48
- }, [store]);
79
+ return [...statics, ...documents, ...entities];
80
+ }, [store, history, historySnapshot]);
49
81
 
50
82
  const recentIds = useMemo(() => getRecentActionIds(), []);
51
83
 
@@ -124,13 +156,16 @@ export function CommandPalette({ onClose }: CommandPaletteProps) {
124
156
 
125
157
  return (
126
158
  <div
159
+ role="dialog"
160
+ aria-label="Command Palette"
161
+ data-testid="command-palette"
127
162
  style={overlayStyle}
128
163
  onMouseDown={(e) => {
129
164
  if (e.target === e.currentTarget) onClose();
130
165
  }}
131
166
  >
132
167
  <div style={paletteStyle}>
133
- <input
168
+ <TextInput
134
169
  ref={inputRef}
135
170
  type="text"
136
171
  value={query}
@@ -153,16 +188,20 @@ export function CommandPalette({ onClose }: CommandPaletteProps) {
153
188
  data-palette-item
154
189
  style={{
155
190
  ...rowStyle,
156
- background: isActive ? '#3c3c3c' : 'transparent',
191
+ background: isActive ? accentMuted : 'transparent',
157
192
  }}
158
- onMouseEnter={() => setHighlightIndex(idx)}
193
+ onPointerMove={() => setHighlightIndex(idx)}
159
194
  onMouseDown={(e) => {
160
195
  e.preventDefault();
161
196
  executeAction(action);
162
197
  }}
163
198
  >
164
199
  <span style={iconStyle}>
165
- {action.category === 'entity' ? '\u25CB' : '\u25B8'}
200
+ {action.category === 'entity' ? (
201
+ '\u25CB'
202
+ ) : (
203
+ <DisclosureIcon direction="right" />
204
+ )}
166
205
  </span>
167
206
  <span style={labelStyle}>{action.label}</span>
168
207
  {action.shortcut && <span style={shortcutStyle}>{action.shortcut}</span>}
@@ -177,37 +216,43 @@ export function CommandPalette({ onClose }: CommandPaletteProps) {
177
216
  );
178
217
  }
179
218
 
219
+ /** D-1: the Command Palette was the ONLY overlay in the app with zero
220
+ * backdrop dimming — it now uses the same dialog-family scrim, and
221
+ * `position: fixed` (like every sibling modal's scrim) so the dimming
222
+ * covers the whole app, not just the viewport panel it mounts inside. */
180
223
  const overlayStyle: React.CSSProperties = {
181
- position: 'absolute',
182
- top: 0,
183
- left: 0,
184
- right: 0,
185
- bottom: 0,
224
+ position: 'fixed',
225
+ inset: 0,
226
+ background: scrim,
186
227
  display: 'flex',
187
228
  justifyContent: 'center',
229
+ alignItems: 'flex-start',
188
230
  paddingTop: 60,
189
- zIndex: 10000,
231
+ zIndex: zIndex.modal,
190
232
  pointerEvents: 'auto',
191
233
  };
192
234
 
235
+ /** D-9: dialog-family chrome (bg-2 / border-2 / radius-lg / shadow-lg) —
236
+ * replaces the palette's one-off `#252526`/`#555`/radius-6 near-miss. */
193
237
  const paletteStyle: React.CSSProperties = {
194
238
  width: 500,
195
239
  maxHeight: 480,
196
- background: '#252526',
197
- border: '1px solid #555',
198
- borderRadius: 6,
199
- boxShadow: '0 8px 32px rgba(0,0,0,0.6)',
240
+ background: bg[2],
241
+ border: `1px solid ${border[2]}`,
242
+ borderRadius: radius.lg,
243
+ boxShadow: shadow.lg,
244
+ color: text[1],
200
245
  display: 'flex',
201
246
  flexDirection: 'column',
202
247
  overflow: 'hidden',
203
248
  };
204
249
 
205
250
  const inputStyle: React.CSSProperties = {
206
- background: '#1e1e1e',
251
+ background: bg.inset,
207
252
  border: 'none',
208
- borderBottom: '1px solid #444',
209
- color: '#c5c8ce',
210
- fontSize: 14,
253
+ borderBottom: `1px solid ${border[2]}`,
254
+ color: text[1],
255
+ fontSize: fontSize.xl,
211
256
  padding: '10px 14px',
212
257
  outline: 'none',
213
258
  fontFamily: 'inherit',
@@ -220,9 +265,9 @@ const resultsStyle: React.CSSProperties = {
220
265
  };
221
266
 
222
267
  const categoryHeaderStyle: React.CSSProperties = {
223
- fontSize: 11,
224
- fontWeight: 600,
225
- color: '#888',
268
+ fontSize: fontSize.base,
269
+ fontWeight: fontWeight.semibold,
270
+ color: text[2],
226
271
  textTransform: 'uppercase',
227
272
  padding: '6px 14px 2px',
228
273
  letterSpacing: 0.5,
@@ -237,8 +282,8 @@ const rowStyle: React.CSSProperties = {
237
282
  };
238
283
 
239
284
  const iconStyle: React.CSSProperties = {
240
- fontSize: 10,
241
- color: '#888',
285
+ fontSize: fontSize.sm,
286
+ color: text[3],
242
287
  width: 14,
243
288
  textAlign: 'center',
244
289
  flexShrink: 0,
@@ -252,14 +297,14 @@ const labelStyle: React.CSSProperties = {
252
297
  };
253
298
 
254
299
  const shortcutStyle: React.CSSProperties = {
255
- fontSize: 11,
256
- color: '#666',
300
+ fontSize: fontSize.base,
301
+ color: text[3],
257
302
  flexShrink: 0,
258
303
  fontFamily: 'inherit',
259
304
  };
260
305
 
261
306
  const emptyStyle: React.CSSProperties = {
262
307
  padding: '16px 14px',
263
- color: '#666',
308
+ color: text[3],
264
309
  textAlign: 'center',
265
310
  };
@@ -0,0 +1,55 @@
1
+ .vgai-console {
2
+ display: flex;
3
+ height: 100%;
4
+ flex-direction: column;
5
+ }
6
+ .vgai-console .vgai-toolbar {
7
+ flex: 0 0 auto;
8
+ }
9
+ .vgai-console-filter {
10
+ width: 140px;
11
+ margin-left: auto;
12
+ }
13
+ .vgai-console-list {
14
+ min-height: 0;
15
+ flex: 1;
16
+ overflow-y: auto;
17
+ font-family: var(--vgai-font-mono);
18
+ font-size: var(--vgai-font-base);
19
+ line-height: 18px;
20
+ }
21
+ .vgai-console-empty {
22
+ padding: var(--vgai-space-6) var(--vgai-space-4);
23
+ color: var(--vgai-content-dim);
24
+ font-style: italic;
25
+ }
26
+ .vgai-console-row {
27
+ display: flex;
28
+ align-items: flex-start;
29
+ padding: 1px var(--vgai-space-4);
30
+ border-bottom: var(--vgai-stroke-resting) solid var(--vgai-boundary-default);
31
+ }
32
+ .vgai-console-row[data-level="error"] {
33
+ background: var(--vgai-danger-faint);
34
+ }
35
+ .vgai-console-row:hover {
36
+ background: var(--vgai-neutral-hover);
37
+ }
38
+ .vgai-console-count {
39
+ flex: 0 0 auto;
40
+ margin-left: var(--vgai-space-3);
41
+ padding: 0 var(--vgai-space-2);
42
+ color: var(--vgai-content-muted);
43
+ background: var(--vgai-surface-raised);
44
+ border-radius: var(--vgai-radius-lg);
45
+ font-size: var(--vgai-font-sm);
46
+ }
47
+ .vgai-console [data-console-level="info"][aria-pressed="true"] {
48
+ color: var(--vgai-content-primary);
49
+ }
50
+ .vgai-console [data-console-level="warn"][aria-pressed="true"] {
51
+ color: var(--vgai-warn);
52
+ }
53
+ .vgai-console [data-console-level="error"][aria-pressed="true"] {
54
+ color: var(--vgai-danger);
55
+ }
@@ -5,16 +5,26 @@ import {
5
5
  faTimesCircle,
6
6
  faTrash,
7
7
  } from '@fortawesome/free-solid-svg-icons';
8
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
8
  import { useEffect, useRef, useState, useSyncExternalStore } from 'react';
10
9
  import { getActiveAuthoring } from '../authoring/active-adapter';
10
+ import {
11
+ Button,
12
+ EditorIcon,
13
+ EditorSurface,
14
+ EditorToolbar,
15
+ IconButton,
16
+ TextInput,
17
+ ToolbarDivider,
18
+ themeVars,
19
+ } from '../design-system';
11
20
  import { useEditorStore } from '../EditorContext';
12
21
  import { type ConsoleLevel, editorConsole } from '../editor-console';
22
+ import './ConsolePanel.css';
13
23
 
14
24
  const LEVEL_COLORS: Record<ConsoleLevel, string> = {
15
- info: '#c5c8ce',
16
- warn: '#FFD866',
17
- error: '#FF6B6B',
25
+ info: themeVars.content.primary,
26
+ warn: themeVars.semantic.warning,
27
+ error: themeVars.semantic.danger,
18
28
  };
19
29
 
20
30
  const SUBSYSTEM_COLORS: Record<string, string> = {
@@ -25,7 +35,7 @@ const SUBSYSTEM_COLORS: Record<string, string> = {
25
35
  audio: '#ab9df2',
26
36
  ai: '#ffd866',
27
37
  input: '#78dce8',
28
- core: '#c5c8ce',
38
+ core: themeVars.content.primary,
29
39
  };
30
40
 
31
41
  const LEVEL_ICONS = {
@@ -85,132 +95,79 @@ export function ConsolePanel() {
85
95
  const counts = editorConsole.counts;
86
96
 
87
97
  return (
88
- <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
98
+ <EditorSurface className="vgai-console">
89
99
  {/* Toolbar */}
90
- <div
91
- style={{
92
- display: 'flex',
93
- alignItems: 'center',
94
- gap: 4,
95
- padding: '3px 8px',
96
- borderBottom: '1px solid #333',
97
- flexShrink: 0,
98
- }}
99
- >
100
+ <EditorToolbar label="Console filters" compact>
100
101
  {/* Clear button */}
101
- <button
102
- type="button"
102
+ <IconButton
103
+ aria-label="Clear console"
104
+ size="compact"
103
105
  onClick={() => editorConsole.clear()}
104
106
  title="Clear console"
105
- style={{
106
- background: '#333',
107
- color: '#c5c8ce',
108
- border: '1px solid #444',
109
- borderRadius: 3,
110
- padding: '2px 6px',
111
- cursor: 'pointer',
112
- fontSize: 11,
113
- display: 'flex',
114
- alignItems: 'center',
115
- gap: 4,
116
- }}
117
107
  >
118
- <FontAwesomeIcon icon={faTrash} style={{ fontSize: 9 }} />
119
- </button>
108
+ <EditorIcon icon={faTrash} size="xs" />
109
+ </IconButton>
120
110
 
121
- <div style={{ width: 1, height: 16, background: '#444', margin: '0 2px' }} />
111
+ <ToolbarDivider />
122
112
 
123
113
  {/* Level filter toggles */}
124
114
  {(['info', 'warn', 'error'] as const).map((level) => (
125
- <button
115
+ <Button
126
116
  key={level}
127
- type="button"
117
+ variant="ghost"
118
+ size="compact"
119
+ aria-label={`Toggle ${level} messages`}
120
+ aria-pressed={showLevels[level]}
121
+ data-console-level={level}
128
122
  onClick={() => toggleLevel(level)}
129
- style={{
130
- background: showLevels[level] ? '#3a3a3a' : 'transparent',
131
- color: showLevels[level] ? LEVEL_COLORS[level] : '#555',
132
- border: `1px solid ${showLevels[level] ? '#555' : '#333'}`,
133
- borderRadius: 3,
134
- padding: '2px 6px',
135
- cursor: 'pointer',
136
- fontSize: 11,
137
- display: 'flex',
138
- alignItems: 'center',
139
- gap: 4,
140
- }}
141
123
  >
142
- <FontAwesomeIcon icon={LEVEL_ICONS[level]} style={{ fontSize: 9 }} />
124
+ <EditorIcon icon={LEVEL_ICONS[level]} size="xs" />
143
125
  {counts[level]}
144
- </button>
126
+ </Button>
145
127
  ))}
146
128
 
147
129
  {/* Search filter */}
148
- <input
149
- type="text"
130
+ {/* B-4: the one dock text-input style (`.vgai-input` — real hover/focus
131
+ states from the U0 sheet) instead of this file's own variant. */}
132
+ <TextInput
150
133
  placeholder="Filter..."
151
134
  value={filter}
152
135
  onChange={(e) => setFilter(e.target.value)}
153
- style={{
154
- marginLeft: 'auto',
155
- background: '#1e1e1e',
156
- color: '#c5c8ce',
157
- border: '1px solid #444',
158
- borderRadius: 3,
159
- padding: '2px 6px',
160
- fontSize: 11,
161
- width: 140,
162
- outline: 'none',
163
- }}
136
+ className="vgai-console-filter"
164
137
  />
165
- </div>
138
+ </EditorToolbar>
166
139
 
167
140
  {/* Message list */}
168
- <div
169
- ref={listRef}
170
- onScroll={handleScroll}
171
- style={{
172
- flex: 1,
173
- overflowY: 'auto',
174
- fontFamily: 'ui-monospace, "SF Mono", Monaco, "Cascadia Code", monospace',
175
- fontSize: 11,
176
- lineHeight: '18px',
177
- scrollbarWidth: 'none',
178
- }}
179
- >
180
- {filtered.length === 0 && (
181
- <div style={{ padding: '12px 8px', color: '#555', fontStyle: 'italic' }}>No messages</div>
182
- )}
141
+ <div ref={listRef} onScroll={handleScroll} className="vgai-console-list">
142
+ {filtered.length === 0 && <div className="vgai-console-empty">No messages</div>}
183
143
  {filtered.map((entry) => {
184
144
  const entityId =
185
145
  entry.metadata?.['entityId'] != null ? String(entry.metadata['entityId']) : null;
186
146
  const entity = entityId ? store.getEntityById(entityId) : null;
187
147
  const entityName = entity?.name ?? entityId;
188
148
 
149
+ // dangerFaint (NOT dangerMuted): resting row tint stays deliberately
150
+ // low-emphasis so stacked error rows read as a list, not a red wall.
189
151
  return (
190
152
  <div
191
153
  key={entry.id}
192
- style={{
193
- display: 'flex',
194
- alignItems: 'flex-start',
195
- padding: '1px 8px',
196
- borderBottom: '1px solid #2a2a2a',
197
- color: LEVEL_COLORS[entry.level],
198
- background: entry.level === 'error' ? 'rgba(255,107,107,0.06)' : 'transparent',
199
- }}
154
+ className="vgai-console-row"
155
+ data-level={entry.level}
156
+ style={{ color: LEVEL_COLORS[entry.level] }}
200
157
  >
201
- <span style={{ color: '#555', marginRight: 6, flexShrink: 0 }}>
158
+ <span style={{ color: themeVars.content.dim, marginRight: 6, flexShrink: 0 }}>
202
159
  {formatTime(entry.timestamp)}
203
160
  </span>
204
- <FontAwesomeIcon
161
+ <EditorIcon
205
162
  icon={LEVEL_ICONS[entry.level]}
206
163
  style={{ fontSize: 9, marginTop: 4, marginRight: 6, flexShrink: 0 }}
207
164
  />
208
165
  {entry.subsystem && (
209
166
  <span
210
167
  style={{
211
- background: `${SUBSYSTEM_COLORS[entry.subsystem] ?? '#888'}22`,
212
- color: SUBSYSTEM_COLORS[entry.subsystem] ?? '#888',
213
- borderRadius: 3,
168
+ background: `${SUBSYSTEM_COLORS[entry.subsystem] ?? themeVars.content.muted}22`,
169
+ color: SUBSYSTEM_COLORS[entry.subsystem] ?? themeVars.content.muted,
170
+ borderRadius: themeVars.shape.small,
214
171
  padding: '0 4px',
215
172
  fontSize: 10,
216
173
  marginRight: 6,
@@ -226,9 +183,9 @@ export function ConsolePanel() {
226
183
  <span
227
184
  onClick={() => selectAndFocusEntity(entityId)}
228
185
  style={{
229
- background: '#2a3a2a',
230
- color: '#a9dc76',
231
- borderRadius: 3,
186
+ background: themeVars.semantic.successMuted,
187
+ color: themeVars.semantic.success,
188
+ borderRadius: themeVars.shape.small,
232
189
  padding: '0 5px',
233
190
  fontSize: 10,
234
191
  marginLeft: 6,
@@ -240,33 +197,21 @@ export function ConsolePanel() {
240
197
  }}
241
198
  title={`Select and focus "${entityName}"`}
242
199
  >
243
- <FontAwesomeIcon icon={faCube} style={{ fontSize: 8 }} />
200
+ <EditorIcon icon={faCube} style={{ fontSize: 8 }} />
244
201
  {entityName}
245
202
  </span>
246
203
  )}
247
204
  {entry.source && (
248
- <span style={{ color: '#666', marginLeft: 6 }}>[{entry.source}]</span>
205
+ <span style={{ color: themeVars.content.dim, marginLeft: 6 }}>
206
+ [{entry.source}]
207
+ </span>
249
208
  )}
250
209
  </span>
251
- {entry.count > 1 && (
252
- <span
253
- style={{
254
- background: '#444',
255
- color: '#aaa',
256
- borderRadius: 8,
257
- padding: '0 5px',
258
- fontSize: 10,
259
- marginLeft: 6,
260
- flexShrink: 0,
261
- }}
262
- >
263
- {entry.count}
264
- </span>
265
- )}
210
+ {entry.count > 1 && <span className="vgai-console-count">{entry.count}</span>}
266
211
  </div>
267
212
  );
268
213
  })}
269
214
  </div>
270
- </div>
215
+ </EditorSurface>
271
216
  );
272
217
  }