@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
@@ -49,17 +49,14 @@
49
49
  * without importing that Object3D-shaped apparatus), and is RETAINED in the
50
50
  * document — user data is never silently dropped (AC-K4).
51
51
  *
52
- * Undo/redo (D-K3, AC-K6) is adapter-local (`PendingUndo`, mirroring
53
- * `ReactWorldAuthoringAdapter`'s pattern) and self-registers with the
54
- * editor-global undo timeline (`./undo-timeline.ts`) exactly like every
55
- * other ingest/world adapter — so Ctrl+Z reaches it while it's the active
56
- * session, and its entries are dropped (not misapplied) once the session
57
- * ends (the route's teardown calls `unregisterUndoAdapter`).
52
+ * The overlay is one session-scoped JSON history resource. Exact before/after
53
+ * documents are journaled by HistoryService and expire when this mount ends.
58
54
  */
59
55
 
60
56
  import type {
61
57
  AuthoringAdapter,
62
58
  AuthoringCapabilities,
59
+ AuthoringProvenance,
63
60
  BoxEditProvider,
64
61
  ColorSampleProvider,
65
62
  DOMRectLike,
@@ -73,6 +70,7 @@ import type {
73
70
  SelectionProvider,
74
71
  } from '@engine/adapter';
75
72
  import type { EditorStore } from '../editor-store';
73
+ import { JsonHistoryResource } from '../history/json-history-resource';
76
74
  import { browserOrInlineResolver, getComputedStyleValue } from '../ui-source/inspect';
77
75
  import {
78
76
  cssColorToHex,
@@ -80,7 +78,6 @@ import {
80
78
  numericStyleValue,
81
79
  styleProp,
82
80
  } from './react-world-authoring-adapter';
83
- import { notifyUndoableOp, registerUndoAdapter } from './undo-timeline';
84
81
 
85
82
  /**
86
83
  * The minimal structural shape this adapter needs from a live DOM element —
@@ -234,9 +231,9 @@ export interface ReactDomAuthoringOptions {
234
231
  destination: string;
235
232
  }
236
233
 
237
- interface PendingUndo {
238
- undo: () => void;
239
- redo: () => void;
234
+ interface ReactDomHistoryState {
235
+ overlay: ReactDomOverlay;
236
+ styles: Record<string, Record<string, string>>;
240
237
  }
241
238
 
242
239
  export class ReactDomAuthoringAdapter implements AuthoringAdapter {
@@ -250,12 +247,18 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
250
247
  persist: true,
251
248
  };
252
249
 
250
+ readonly provenance: AuthoringProvenance = {
251
+ source: 'foreign',
252
+ label: 'overlay',
253
+ detail:
254
+ 'Unmodified ingested React game — style edits persist to an editor overlay; the game source is never written.',
255
+ };
256
+
253
257
  private readonly doc: ReactDomOverlay;
254
258
  private readonly persistFn: (overlay: ReactDomOverlay) => Promise<void>;
255
259
  private readonly destinationPath: string;
256
260
  private dirty = false;
257
- private readonly undoStack: PendingUndo[] = [];
258
- private readonly redoStack: PendingUndo[] = [];
261
+ private readonly historyResource: JsonHistoryResource<ReactDomHistoryState> | null;
259
262
  /** Synchronous-burst cache for `snapshot()` — see that method's doc. */
260
263
  private snapCache: DomTree | null = null;
261
264
  private snapInvalidationScheduled = false;
@@ -288,11 +291,22 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
288
291
  this.doc = opts.overlay;
289
292
  this.persistFn = opts.persist;
290
293
  this.destinationPath = opts.destination;
291
- // This adapter IS an undo/redo target the editor-global timeline
292
- // dispatches to (mirrors `ReactWorldAuthoringAdapter`'s identical call) —
293
- // the caller (the ingest route's teardown) unregisters it on session end.
294
- registerUndoAdapter(this);
295
294
  this.applyOverlayOnMount();
295
+ const history = store.projectHistory;
296
+ this.historyResource = history
297
+ ? new JsonHistoryResource({
298
+ history,
299
+ kind: 'overlay',
300
+ scope: 'project',
301
+ location: opts.destination.replace(/^\//, ''),
302
+ displayName: opts.destination,
303
+ capture: () => this.captureHistoryState(),
304
+ restore: async (state) => {
305
+ this.restoreHistoryState(state);
306
+ await this.persistFn(this.doc);
307
+ },
308
+ })
309
+ : null;
296
310
  }
297
311
 
298
312
  /**
@@ -346,6 +360,7 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
346
360
  return {
347
361
  id: n.id,
348
362
  label: labelFor(n.el, n.tag),
363
+ role: 'element',
349
364
  kind: n.tag,
350
365
  parentId: n.parentId,
351
366
  childIds: n.childIds,
@@ -387,13 +402,6 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
387
402
  this.doc[id] = entry;
388
403
  }
389
404
 
390
- private removeOverlayEntry(id: string, prop: string): void {
391
- const entry = this.doc[id];
392
- if (!entry) return;
393
- delete entry[prop];
394
- if (Object.keys(entry).length === 0) delete this.doc[id];
395
- }
396
-
397
405
  readonly hierarchy: HierarchyProvider = {
398
406
  roots: () => {
399
407
  const { nodes, rootIds } = this.snapshot();
@@ -443,6 +451,13 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
443
451
  // `ReactWorldAuthoringAdapter.pickable`'s identical fix and the
444
452
  // first-party `viewport-raycast.ts` locked-skip.
445
453
  if (this.lockedIds.has(node.id)) continue;
454
+ // The host layer is pointer-events:none at rest, so computed style
455
+ // would make every descendant appear non-interactive. Honor only the
456
+ // node's own explicit declaration: a transparent full-size wrapper
457
+ // must not swallow picks intended for a world below it.
458
+ if ((node.el.style as { pointerEvents?: unknown } | undefined)?.pointerEvents === 'none') {
459
+ continue;
460
+ }
446
461
  const rect = node.el.getBoundingClientRect?.();
447
462
  if (!rect) continue; // no live rect (test fixture, or unmounted) — never a candidate
448
463
  if (
@@ -574,9 +589,11 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
574
589
  */
575
590
  readonly boxEdit: BoxEditProvider = {
576
591
  begin: (id) => {
592
+ this.historyResource?.assertCanMutate();
577
593
  this.boxEditSession = { id, touched: new Map(), priorInline: new Map() };
578
594
  },
579
595
  apply: (id, patch) => {
596
+ this.historyResource?.assertCanMutate();
580
597
  const session = this.boxEditSession;
581
598
  if (!session || session.id !== id) return; // no open gesture for this id
582
599
  const n = this.snapshot().nodes.get(id);
@@ -626,20 +643,21 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
626
643
  touched: Map<string, string>,
627
644
  priorInline: Map<string, string>,
628
645
  ): void {
629
- const entries: PendingUndo[] = [];
646
+ this.historyResource?.assertCanMutate();
647
+ const before = this.captureHistoryState();
648
+ const beforeStyles = before.styles[id] ?? {};
649
+ before.styles[id] = beforeStyles;
650
+ for (const [prop, value] of priorInline) beforeStyles[prop] = value;
651
+ let changed = false;
630
652
  for (const [prop, value] of touched) {
631
- const entry = this.writeStyleEntry(id, prop, value, priorInline.get(prop));
632
- if (entry) entries.push(entry);
653
+ changed = this.writeStyleEntry(id, prop, value) || changed;
654
+ }
655
+ if (!changed) return;
656
+ if (this.historyResource) {
657
+ void this.historyResource
658
+ .record(`Edit ${touched.size} Styles`, before, this.captureHistoryState())
659
+ .catch(() => {});
633
660
  }
634
- if (entries.length === 0) return;
635
- this.pushUndo({
636
- undo: () => {
637
- for (let i = entries.length - 1; i >= 0; i--) entries[i]!.undo();
638
- },
639
- redo: () => {
640
- for (const entry of entries) entry.redo();
641
- },
642
- });
643
661
  }
644
662
 
645
663
  readonly inspector: InspectorProvider = {
@@ -689,88 +707,70 @@ export class ReactDomAuthoringAdapter implements AuthoringAdapter {
689
707
  };
690
708
 
691
709
  /**
692
- * T0 (spec 27 §4, B1) — the write body extracted from {@link writeStyle}, RETURNING
693
- * the resulting {@link PendingUndo} entry instead of pushing it, so a caller that
694
- * writes MULTIPLE props for one logical gesture ({@link commitBoxEdit}) can compose
695
- * them into a single undo entry itself. `writeStyle` (below) is now a one-line
696
- * wrapper — identical behavior for its existing single-prop caller (`inspector.set`).
710
+ * T0 (spec 27 §4, B1) — the write body extracted from {@link writeStyle}, returning
711
+ * whether the overlay changed so a multi-property box gesture can record once.
697
712
  * `priorInlineOverride`, when given, is used as the captured PRE-gesture inline value
698
713
  * instead of re-reading `n.el.style` — needed because `boxEdit.apply` already mutated
699
714
  * the live inline style for preview before `end` gets here (see `boxEditSession`'s
700
715
  * doc comment). D-K2's restore-BOTH-halves invariant (inline AND overlay) is
701
716
  * unchanged — only WHERE `prevInline` comes from differs when an override is given.
702
717
  */
703
- private writeStyleEntry(
704
- id: string,
705
- prop: string,
706
- value: string,
707
- priorInlineOverride?: string,
708
- ): PendingUndo | null {
718
+ private writeStyleEntry(id: string, prop: string, value: string): boolean {
709
719
  const n = this.snapshot().nodes.get(id);
710
- if (!n) return null;
711
- const prevRaw =
712
- priorInlineOverride !== undefined ? priorInlineOverride : styleProp(n.el.style, prop);
713
- const prevInline = prevRaw == null ? '' : String(prevRaw);
714
- const existingEntry = this.doc[id];
715
- const hadOverlayEntry = existingEntry ? Object.hasOwn(existingEntry, prop) : false;
716
- const prevOverlayValue = existingEntry?.[prop];
720
+ if (!n) return false;
717
721
 
718
722
  this.applyStyleToElement(n.el, prop, value);
719
723
  this.recordOverlayEntry(id, prop, value);
720
724
  this.dirty = true;
721
725
  this.store.notifyIngestEdit();
722
726
 
723
- return {
724
- undo: () => {
725
- // Re-resolve rather than cache the element ref — the DOM is live and
726
- // may have re-rendered since this entry was pushed (same discipline
727
- // as `ReactWorldAuthoringAdapter.applyStyleWrite`).
728
- const cur = this.snapshot().nodes.get(id);
729
- if (cur) this.applyStyleToElement(cur.el, prop, prevInline);
730
- if (hadOverlayEntry) this.recordOverlayEntry(id, prop, prevOverlayValue!);
731
- else this.removeOverlayEntry(id, prop);
732
- this.store.notifyIngestEdit();
733
- },
734
- redo: () => {
735
- const cur = this.snapshot().nodes.get(id);
736
- if (cur) this.applyStyleToElement(cur.el, prop, value);
737
- this.recordOverlayEntry(id, prop, value);
738
- this.store.notifyIngestEdit();
739
- },
740
- };
727
+ return true;
741
728
  }
742
729
 
743
730
  /**
744
731
  * D-K2: mutate the live element's inline style AND the overlay document,
745
- * mark dirty, push an adapter-local undo entry that restores BOTH the
746
- * prior inline value and the prior overlay-entry state (present, absent,
747
- * or a different value) — never just one half (AC-K6).
732
+ * then journal the complete overlay state as one session transaction.
748
733
  */
749
734
  private writeStyle(id: string, prop: string, value: string): void {
750
- const entry = this.writeStyleEntry(id, prop, value);
751
- if (entry) this.pushUndo(entry);
735
+ this.historyResource?.assertCanMutate();
736
+ const before = this.captureHistoryState();
737
+ if (!this.writeStyleEntry(id, prop, value)) return;
738
+ if (this.historyResource) {
739
+ void this.historyResource
740
+ .record(`Set ${prop}`, before, this.captureHistoryState())
741
+ .catch(() => {});
742
+ }
752
743
  }
753
744
 
754
- private pushUndo(entry: PendingUndo): void {
755
- this.undoStack.push(entry);
756
- this.redoStack.length = 0;
757
- notifyUndoableOp(this);
745
+ dispose(): void {
746
+ this.historyResource?.dispose();
758
747
  }
759
748
 
760
- undo(): boolean {
761
- const e = this.undoStack.pop();
762
- if (!e) return false;
763
- e.undo();
764
- this.redoStack.push(e);
765
- return true;
749
+ private captureHistoryState(): ReactDomHistoryState {
750
+ const styles: ReactDomHistoryState['styles'] = {};
751
+ for (const [id, node] of this.snapshot().nodes) {
752
+ const values: Record<string, string> = {};
753
+ for (const { prop } of STYLE_PROPERTIES) {
754
+ const value = styleProp(node.el.style, prop);
755
+ if (value !== '') values[prop] = String(value);
756
+ }
757
+ styles[id] = values;
758
+ }
759
+ return { overlay: structuredClone(this.doc), styles };
766
760
  }
767
761
 
768
- redo(): boolean {
769
- const e = this.redoStack.pop();
770
- if (!e) return false;
771
- e.redo();
772
- this.undoStack.push(e);
773
- return true;
762
+ private restoreHistoryState(state: ReactDomHistoryState): void {
763
+ for (const key of Object.keys(this.doc)) delete this.doc[key];
764
+ Object.assign(this.doc, structuredClone(state.overlay));
765
+ const { nodes } = this.snapshot();
766
+ for (const [id, node] of nodes) {
767
+ const values = state.styles[id] ?? {};
768
+ for (const { prop } of STYLE_PROPERTIES) {
769
+ this.applyStyleToElement(node.el, prop, values[prop] ?? '');
770
+ }
771
+ }
772
+ this.dirty = true;
773
+ this.store.notifyIngestEdit();
774
774
  }
775
775
 
776
776
  subscribe(listener: () => void): () => void {