@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,12 +6,11 @@
6
6
  * format-neutral authoring contract so it works over ANY DOM-capable world
7
7
  * (react `data-oid`, ingested `react-dom`), not just the scene-UI silo.
8
8
  *
9
- * MOUNT SITE / COORDINATES (critical — see this file's `ViewportPanel.tsx`
10
- * call site): this component is rendered as a CHILD of `ViewportPanel`'s own
11
- * `containerRef` div — the EXACT SAME DOM element `design-time-layers.ts`'s
12
- * `mountDesignTimeLayers(container, …)` appends each react/pixi world's own
13
- * `position:absolute; inset:0` layer div into (`createLayerElement`,
14
- * `container.appendChild(layer)`). This component's own outer wrapper is
9
+ * MOUNT SITE / COORDINATES (critical): DOM worlds render this component as a
10
+ * child of their world document's host — the EXACT SAME DOM element
11
+ * `design-time-layers.ts` appends that world's `position:absolute; inset:0`
12
+ * layer into. The native Three scene retains a separate instance in
13
+ * `ViewportPanel`. This component's own outer wrapper is
15
14
  * ALSO `position:absolute; inset:0` inside that SAME parent, so its
16
15
  * `getBoundingClientRect()` is IDENTICAL to every world layer's — a
17
16
  * HOST-RELATIVE rect from `RectProvider.rect(id)` (host = the owning
@@ -87,13 +86,14 @@ import {
87
86
  subscribeWorldPan,
88
87
  } from '../authoring/world-pan-state';
89
88
  import { isWorldHidden } from '../authoring/world-session-state';
89
+ import { themeVars } from '../design-system';
90
90
  import { useEditorStore } from '../EditorContext';
91
91
  import { isIngestActive } from '../ingest-mode';
92
92
  import { isModuleModeActive } from '../module-mode';
93
93
  import { isPlayModeActive } from '../play-mode';
94
94
  import { effectiveColorFromChain } from '../ui-source/inspect';
95
+ import { zIndex } from '../z-index';
95
96
  import { AlignToolbar } from './AlignToolbar';
96
- import { WorldContextMenu, type WorldContextMenuState } from './WorldContextMenu';
97
97
  import { WorldTextEditor } from './WorldTextEditor';
98
98
  import {
99
99
  type AlignEntry,
@@ -138,14 +138,19 @@ import {
138
138
 
139
139
  export { rectForId } from './world-overlay-gestures';
140
140
 
141
+ // ACCENT ('#0d99ff') is a third independent "selection blue" alongside the
142
+ // toolbar's themeVars.accent.default (`#579EFF`) and the marquee/drop-overlay's same themeVars.accent.default
143
+ // (EDITOR-STYLE-AUDIT.md V-19) — flagged OUT-OF-SCOPE to change without a
144
+ // mixed-world (React/Pixi) test project to verify against; left as-is.
141
145
  const ACCENT = '#0d99ff';
142
- /** Strictly below `PlayBar`'s z100 / `ToolStrip`+`ViewportOverlay`'s z1000 —
143
- * mirrors `design-time-layers.ts`'s own `BASE_Z_INDEX` doc comment ("so
144
- * gizmo/orbit-controls/marquee chrome is never occluded") — and strictly
146
+ /** Strictly below `ToolStrip`+`ViewportOverlay`'s z1000 — mirrors
147
+ * `design-time-layers.ts`'s own `BASE_Z_INDEX` doc comment ("so canvas-local
148
+ * editing chrome is never occluded") — and strictly
145
149
  * above the design-time layers themselves (`BASE_Z_INDEX + i`, small N),
146
150
  * so this overlay's boxes/marquee always paint over the world content they
147
- * describe. */
148
- const Z_INDEX = 50;
151
+ * describe. V-12 — pure rename onto the canonical z-index scale
152
+ * (`zIndex.overlayLow`), same numeric value (50), no behavior change. */
153
+ const Z_INDEX = zIndex.overlayLow;
149
154
  const DRAG_THRESHOLD_PX = 5;
150
155
 
151
156
  interface Rect {
@@ -184,7 +189,7 @@ export function hasRectCapableChild(adapter: AuthoringAdapter): boolean {
184
189
  * for a composite, from each VISIBLE child's own `rects` provider — the
185
190
  * marquee's candidate pool. Walks each CHILD's OWN hierarchy
186
191
  * (`collectAllNodeIds`), never the composite's synthetic `world:<id>`
187
- * wrapper, so a group/game-root id is never a candidate. A session-hidden
192
+ * wrapper, so a group/organization id is never a candidate. A session-hidden
188
193
  * world (`world-session-state.ts`'s eye toggle, B1) contributes no
189
194
  * candidates — consistent with it being invisible/unpickable.
190
195
  *
@@ -314,7 +319,7 @@ function labelStyle(r: DOMRectLike): React.CSSProperties {
314
319
 
315
320
  const HANDLE_SIZE = 10;
316
321
 
317
- /** One of the 8 B2 resize handles — a small white/accent square centered on
322
+ /** One of the 8 B2 resize handles — a small white/themeVars.accent.default square centered on
318
323
  * its position on the selection rect (spec:317/§5 :465). */
319
324
  function handleStyle(center: { x: number; y: number }, cursor: string): React.CSSProperties {
320
325
  return {
@@ -371,6 +376,12 @@ function dimensionLabelStyle(rect: DOMRectLike): React.CSSProperties {
371
376
  };
372
377
  }
373
378
 
379
+ // Deliberate literals (U6 census): the padding/margin band pair, their label
380
+ // inks, the measurement pinks (`#ff2d92`/`#ff5fa2`) and the snap-guide red
381
+ // (`#f24822`) below are the industry-convention CANVAS-GUIDE language (green
382
+ // padding / orange margin / pink measure / red snap — Figma & devtools
383
+ // grammar), each deliberately distinct from the chrome tokens AND from the
384
+ // #0d99ff canvas-selection pair so guides never read as selection or chrome.
374
385
  const PADDING_BAND_COLOR = 'rgba(46, 204, 113, 0.25)';
375
386
  const MARGIN_BAND_COLOR = 'rgba(230, 126, 34, 0.25)';
376
387
 
@@ -905,8 +916,6 @@ export function WorldSelectionOverlay(): React.ReactNode {
905
916
  [],
906
917
  );
907
918
 
908
- // D3.a — the open canvas right-click context menu, or `null`.
909
- const [contextMenu, setContextMenu] = useState<WorldContextMenuState | null>(null);
910
919
  // D3.b — the currently-open inline text editor (double-clicked node), or
911
920
  // `null`. `textEditRef` mirrors the state for synchronous reads from
912
921
  // callbacks (same "ref mirrors state" convention `marqueeRef`/`setMarquee`
@@ -936,7 +945,7 @@ export function WorldSelectionOverlay(): React.ReactNode {
936
945
  // commit, so whether it landed or was refused can only be learned from a
937
946
  // LATER re-render. Stash the committed id+rect here the instant `commitTextEdit`
938
947
  // fires; the effect below consumes it on the next store notify (`editText`
939
- // calls `store.notifyIngestEdit()` unconditionally on both the success and the
948
+ // calls `store.notifyIngestEdit()` unconditionally on both the themeVars.semantic.success and the
940
949
  // refusal path) and checks `text.get` — which reports `null` for a refused id
941
950
  // (via the adapter's own `dynamicPaths` mark) — to decide whether to surface
942
951
  // the refused indicator instead of letting the edit silently vanish.
@@ -1010,10 +1019,16 @@ export function WorldSelectionOverlay(): React.ReactNode {
1010
1019
  setMarqueeState(r);
1011
1020
  }, []);
1012
1021
 
1013
- const toHostLocal = useCallback((clientX: number, clientY: number): { x: number; y: number } => {
1014
- const host = interactionRef.current?.getBoundingClientRect();
1015
- return { x: clientX - (host?.left ?? 0), y: clientY - (host?.top ?? 0) };
1016
- }, []);
1022
+ const toHostLocal = useCallback(
1023
+ (clientX: number, clientY: number): { x: number; y: number } => {
1024
+ const host = interactionRef.current?.getBoundingClientRect();
1025
+ return {
1026
+ x: (clientX - (host?.left ?? 0)) / pan.zoom,
1027
+ y: (clientY - (host?.top ?? 0)) / pan.zoom,
1028
+ };
1029
+ },
1030
+ [pan.zoom],
1031
+ );
1017
1032
 
1018
1033
  const bumpGesture = useCallback(() => setGestureTick((t) => t + 1), []);
1019
1034
 
@@ -1205,7 +1220,7 @@ export function WorldSelectionOverlay(): React.ReactNode {
1205
1220
  // literal key-HOLD state in this codebase). Matches `hotkeys.ts`'s own
1206
1221
  // not-typing guard exactly (input/textarea/select/contentEditable) so Space
1207
1222
  // still types a literal space character in any of those, never arming pan.
1208
- // A focused `<button>` is ALSO excluded so Space keeps its native
1223
+ // A focused `<Button>` is ALSO excluded so Space keeps its native
1209
1224
  // accessible "activate the focused control" behavior instead of arming pan
1210
1225
  // out from under it. `e.repeat` is ignored so an OS key-repeat storm is a
1211
1226
  // single no-op transition, not thousands of redundant `preventDefault`s.
@@ -1249,6 +1264,12 @@ export function WorldSelectionOverlay(): React.ReactNode {
1249
1264
  const onPointerDown = useCallback(
1250
1265
  (e: ReactPointerEvent<HTMLDivElement>) => {
1251
1266
  if (e.button !== 0) return;
1267
+ // Camera navigation is bound to the viewport container so right/middle
1268
+ // drags can pass through this DOM overlay. Keep left-button authoring
1269
+ // gestures owned here: OrbitControls captures every pointer it sees,
1270
+ // including left clicks, which would otherwise retarget pointerup to
1271
+ // the container before this overlay can finish selection/marquee/edit.
1272
+ e.stopPropagation();
1252
1273
  // D4 (spec27 §8 "space-pan" row) — a press while Space is held ARMS a
1253
1274
  // pan-drag instead of the ordinary pick/select/marquee/eyedropper flow
1254
1275
  // below, which it skips entirely (never fights another gesture for the
@@ -1489,23 +1510,6 @@ export function WorldSelectionOverlay(): React.ReactNode {
1489
1510
  setHoverId(null);
1490
1511
  }, []);
1491
1512
 
1492
- // D3.a — right-click picks the node (rule zero: through `pickTopmost`, the
1493
- // SAME primitive A3's click-select uses — never `elementFromPoint`) and
1494
- // opens the canvas context menu at the click point. A miss (empty space)
1495
- // opens nothing.
1496
- const onContextMenu = useCallback(
1497
- (e: ReactMouseEvent<HTMLDivElement>) => {
1498
- e.preventDefault();
1499
- const hitId = pickTopmost(store, e.clientX, e.clientY);
1500
- if (!hitId) {
1501
- setContextMenu(null);
1502
- return;
1503
- }
1504
- setContextMenu({ x: e.clientX, y: e.clientY, nodeId: hitId });
1505
- },
1506
- [store],
1507
- );
1508
-
1509
1513
  // D3.b — double-click picks the node and opens the inline text editor
1510
1514
  // through `adapter.text` (owner-routed — `textForId`), rule zero: no DOM
1511
1515
  // read of the node's own text happens here, only the contract's own
@@ -1619,7 +1623,7 @@ export function WorldSelectionOverlay(): React.ReactNode {
1619
1623
  const alignEntries = computeMultiSelectionAlign(adapter, selectedIds);
1620
1624
 
1621
1625
  // D3.c — every currently-empty container hint reachable from the active
1622
- // adapter (owner-routed per child, session-hidden worlds excluded — see
1626
+ // adapter (owner-routed per child, session-hidden roots excluded — see
1623
1627
  // `emptyContainerHintsFor`'s doc comment). Cached (see `emptyHintsCacheRef`
1624
1628
  // above) so a hover-only re-render reuses the last computed hints instead
1625
1629
  // of re-walking + re-measuring the whole tree.
@@ -1651,6 +1655,7 @@ export function WorldSelectionOverlay(): React.ReactNode {
1651
1655
  // unit with the world content it describes — `undefined` at rest
1652
1656
  // (pan=0,0) keeps this byte-identical to pre-pan markup.
1653
1657
  transform: panTransformValue(pan),
1658
+ transformOrigin: '0 0',
1654
1659
  }}
1655
1660
  >
1656
1661
  <div
@@ -1662,12 +1667,11 @@ export function WorldSelectionOverlay(): React.ReactNode {
1662
1667
  pointerEvents: 'auto',
1663
1668
  cursor: interactionCursor(isPanning, spaceHeld, eyedropperActive, !!marquee),
1664
1669
  }}
1665
- onPointerDown={onPointerDown}
1670
+ onPointerDownCapture={onPointerDown}
1666
1671
  onPointerMove={onPointerMove}
1667
1672
  onPointerUp={onPointerUp}
1668
1673
  onPointerCancel={onPointerCancel}
1669
1674
  onPointerLeave={onPointerLeave}
1670
- onContextMenu={onContextMenu}
1671
1675
  onDoubleClick={onDoubleClick}
1672
1676
  />
1673
1677
  {/* D3.c — dashed empty-container placeholders, visual hints only. */}
@@ -1683,6 +1687,7 @@ export function WorldSelectionOverlay(): React.ReactNode {
1683
1687
  top: hint.rect.y,
1684
1688
  width: hint.rect.width,
1685
1689
  height: hint.rect.height,
1690
+ // text-2 at 0.7 alpha — a quiet non-interactive hint outline.
1686
1691
  border: '1px dashed rgba(154, 160, 166, 0.7)',
1687
1692
  boxSizing: 'border-box',
1688
1693
  pointerEvents: 'none',
@@ -1783,9 +1788,6 @@ export function WorldSelectionOverlay(): React.ReactNode {
1783
1788
  </>
1784
1789
  )}
1785
1790
  <D3Affordances
1786
- adapter={adapter}
1787
- contextMenu={contextMenu}
1788
- onCloseContextMenu={() => setContextMenu(null)}
1789
1791
  textEdit={textEdit}
1790
1792
  onCommitTextEdit={commitTextEdit}
1791
1793
  onCancelTextEdit={cancelTextEdit}
@@ -1898,17 +1900,14 @@ function D2Affordances(props: {
1898
1900
  }
1899
1901
 
1900
1902
  /**
1901
- * D3Affordances — the D3.a/b/d overlay bits (context menu, inline text
1902
- * editor + its refusal indicator, eyedropper swatch), factored into its OWN
1903
+ * D3Affordances — the D3.b/d overlay bits (inline text editor + its refusal
1904
+ * indicator, eyedropper swatch), factored into its OWN
1903
1905
  * component purely to keep `WorldSelectionOverlay`'s own cognitive
1904
1906
  * complexity down (each is an independent, mutually-exclusive-in-practice
1905
1907
  * conditional render — bundling them here costs the PARENT nothing beyond
1906
1908
  * one element reference). No behavior change from having them inline.
1907
1909
  */
1908
1910
  function D3Affordances(props: {
1909
- adapter: AuthoringAdapter;
1910
- contextMenu: WorldContextMenuState | null;
1911
- onCloseContextMenu: () => void;
1912
1911
  textEdit: { id: string; rect: DOMRectLike; initialText: string } | null;
1913
1912
  onCommitTextEdit: (text: string) => void;
1914
1913
  onCancelTextEdit: () => void;
@@ -1917,9 +1916,6 @@ function D3Affordances(props: {
1917
1916
  eyedropperPreview: { x: number; y: number; color: string | null } | null;
1918
1917
  }): React.ReactNode {
1919
1918
  const {
1920
- adapter,
1921
- contextMenu,
1922
- onCloseContextMenu,
1923
1919
  textEdit,
1924
1920
  onCommitTextEdit,
1925
1921
  onCancelTextEdit,
@@ -1929,14 +1925,6 @@ function D3Affordances(props: {
1929
1925
  } = props;
1930
1926
  return (
1931
1927
  <>
1932
- {/* D3.a — canvas right-click context menu. `WorldContextMenu` portals
1933
- itself to `document.body` (pan-seam fix — see its own doc comment),
1934
- so unlike the other D3 affordances below it needs no
1935
- `pointerEvents: 'auto'` wrapper here: it never actually mounts as a
1936
- DOM descendant of this (`pointerEvents: 'none'`) overlay tree. */}
1937
- {contextMenu && (
1938
- <WorldContextMenu adapter={adapter} state={contextMenu} onClose={onCloseContextMenu} />
1939
- )}
1940
1928
  {/* D3.b — the inline text editor (double-click), or the loud "not
1941
1929
  editable" refusal indicator for a dynamic/child-bearing body. */}
1942
1930
  {textEdit && (
@@ -1959,9 +1947,9 @@ function D3Affordances(props: {
1959
1947
  top: textEditRefused.rect.y,
1960
1948
  width: Math.max(textEditRefused.rect.width, 40),
1961
1949
  height: Math.max(textEditRefused.rect.height, 20),
1962
- border: '2px dashed #ff6b6b',
1950
+ border: `2px dashed ${themeVars.semantic.danger}`,
1963
1951
  boxSizing: 'border-box',
1964
- background: 'rgba(255, 107, 107, 0.12)',
1952
+ background: themeVars.semantic.dangerMuted,
1965
1953
  pointerEvents: 'none',
1966
1954
  }}
1967
1955
  />
@@ -9,6 +9,8 @@
9
9
  * reach of its own.
10
10
  */
11
11
  import { useEffect, useRef, useState } from 'react';
12
+ import { themeVars } from '../design-system';
13
+ import { zIndex } from '../z-index';
12
14
 
13
15
  export interface WorldTextEditorProps {
14
16
  rect: { x: number; y: number; width: number; height: number };
@@ -69,17 +71,19 @@ export function WorldTextEditor({
69
71
  width: Math.max(rect.width, 40),
70
72
  height: Math.max(rect.height, 20),
71
73
  boxSizing: 'border-box',
72
- zIndex: 60,
74
+ zIndex: zIndex.overlayLow,
73
75
  pointerEvents: 'auto',
74
76
  resize: 'none',
75
77
  font: 'inherit',
76
- fontSize: 13,
78
+ fontSize: 'var(--vgai-font-lg)',
77
79
  lineHeight: 1.3,
78
80
  padding: 2,
79
- border: '2px solid #0d99ff',
81
+ // D-8: dark input convention (was a bright white light-mode box over
82
+ // the all-dark app) + D-4: the canonical themeVars.accent.default, not one-off #0d99ff.
83
+ border: `2px solid ${themeVars.accent.default}`,
80
84
  outline: 'none',
81
- background: '#fff',
82
- color: '#111',
85
+ background: themeVars.surface.inset,
86
+ color: themeVars.content.primary,
83
87
  }}
84
88
  />
85
89
  );