@vgai/editor 0.2.0 → 0.4.0-canary.20260715.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/README.md +24 -0
  2. package/dist/assets/axe-C7YBtOuM.js +30 -0
  3. package/dist/assets/browserAll-DDtGGE48.js +1 -0
  4. package/dist/assets/create-runtime-DbTlBlKG.js +1 -0
  5. package/dist/assets/{game-BI111o5f.js → game-BE0r7DMI.js} +3 -3
  6. package/dist/assets/game-BdTHR2_X.js +1 -0
  7. package/dist/assets/{game-pt_1lQLv.js → game-C3iQGSqo.js} +1 -1
  8. package/dist/assets/game-CcHfYxjP.js +1 -0
  9. package/dist/assets/game-Cqzj_lpD.js +1 -0
  10. package/dist/assets/game-DSZdeCHu.js +1 -0
  11. package/dist/assets/game-Dch9sAPc.js +1 -0
  12. package/dist/assets/{game-xsOho_wg.js → game-SAFn90pA.js} +3 -3
  13. package/dist/assets/game-loop-DMIgSMV-.js +1 -0
  14. package/dist/assets/{game-source-CvidN7AB.js → game-source-Dk83w26t.js} +1 -1
  15. package/dist/assets/{index-Bp5cecD6.js → index-4idIsHHJ.js} +2 -2
  16. package/dist/assets/{index-DL7RcQ0n.js → index-C-LhOTBN.js} +1 -1
  17. package/dist/assets/{index-Cs8xwv3e.js → index-CDkxceqE.js} +1 -1
  18. package/dist/assets/index-CQEfi217.js +15412 -0
  19. package/dist/assets/index-Dvi-V0NE.css +1 -0
  20. package/dist/assets/ingest-siblings-s0P5I1Ub.js +1 -0
  21. package/dist/assets/mount-manifest-DXMOlF79.js +1 -0
  22. package/dist/assets/react-18-C9eHn8x1.js +1 -0
  23. package/dist/assets/webworkerAll-Fn0e-ouF.js +1 -0
  24. package/dist/assets/world-documents-GM0a9Kv7.js +1 -0
  25. package/dist/index.html +15 -13
  26. package/dist/ingest/racing-game/vgai.game.json +5 -4
  27. package/dist/ingest/simcity/vgai.game.json +5 -4
  28. package/dist/ingest/tanks/vgai.game.json +5 -4
  29. package/dist/project-scripts.bundle.js +3917 -0
  30. package/dist/scenes/untitled.vscn.json +2 -0
  31. package/dist-server/packaged.mjs +7697 -3435
  32. package/package.json +31 -4
  33. package/scripts/probe-reporter.ts +349 -0
  34. package/scripts/run-probe.ts +2260 -0
  35. package/server/asset-catalog-audit.ts +268 -0
  36. package/server/asset-catalog-v2.ts +146 -0
  37. package/server/asset-library-routes.ts +276 -58
  38. package/server/canonical-path.ts +1 -1
  39. package/server/dev.ts +148 -44
  40. package/server/editor-server.ts +888 -61
  41. package/server/editor-sse.ts +115 -4
  42. package/server/harness-chat-service.ts +796 -0
  43. package/server/local-asset-catalog.ts +157 -22
  44. package/server/packaged.ts +51 -21
  45. package/server/process-shutdown.ts +136 -0
  46. package/server/prod.ts +9 -6
  47. package/server/project-hmr-files.ts +41 -0
  48. package/server/project-operations.ts +343 -0
  49. package/server/project-optimize-deps-entries.ts +4 -4
  50. package/server/project-output-writer.ts +156 -0
  51. package/server/project-validation.ts +140 -0
  52. package/server/project-view.ts +8 -50
  53. package/server/server-utils.ts +75 -10
  54. package/server/session-registry.ts +12 -0
  55. package/src/EditorContext.tsx +107 -3
  56. package/src/action-registry.ts +115 -17
  57. package/src/adapter-resolver.ts +213 -478
  58. package/src/asset-events.ts +64 -1
  59. package/src/asset-preview.ts +906 -0
  60. package/src/asset-selection.ts +121 -0
  61. package/src/asset-workflow/asset-capabilities.ts +259 -0
  62. package/src/asset-workflow/asset-editor-errors.ts +46 -0
  63. package/src/asset-workflow/asset-import-pipeline.ts +176 -0
  64. package/src/asset-workflow/asset-library-query.ts +107 -0
  65. package/src/asset-workflow/asset-types.ts +192 -0
  66. package/src/asset-workflow/asset-workflow-quality.ts +65 -0
  67. package/src/asset-workflow/import-contract.ts +113 -0
  68. package/src/asset-workflow/model-conversion.ts +126 -0
  69. package/src/asset-workflow/model-inspection.ts +185 -0
  70. package/src/asset-workflow/project-asset-commands.ts +23 -0
  71. package/src/asset-workflow/project-asset-health.ts +153 -0
  72. package/src/asset-workflow/project-asset-operations.ts +119 -0
  73. package/src/asset-workflow/thumbnail-system.ts +172 -0
  74. package/src/authoring/active-systems.ts +15 -0
  75. package/src/authoring/boundary-authoring-adapter.ts +16 -5
  76. package/src/authoring/composite-authoring-adapter.ts +305 -124
  77. package/src/authoring/design-time-layers.ts +300 -117
  78. package/src/authoring/edit-mode-authoring.ts +278 -293
  79. package/src/authoring/embed-only-adapter.ts +4 -2
  80. package/src/authoring/first-party-hierarchy-menu.ts +7 -2
  81. package/src/authoring/first-party-inspector/AddSectionMenu.tsx +5 -12
  82. package/src/authoring/first-party-inspector/EnvironmentSection.tsx +53 -126
  83. package/src/authoring/first-party-inspector/HeaderSection.tsx +54 -65
  84. package/src/authoring/first-party-inspector/is-first-party-selection.ts +30 -11
  85. package/src/authoring/first-party-inspector/register.tsx +13 -2
  86. package/src/authoring/ingest-authoring-adapter.ts +142 -45
  87. package/src/authoring/mount-failure-report.ts +5 -5
  88. package/src/authoring/provenance.ts +41 -0
  89. package/src/authoring/react-dom-authoring-adapter.ts +92 -92
  90. package/src/authoring/react-inspector-section.tsx +489 -51
  91. package/src/authoring/react-world-authoring-adapter.ts +541 -306
  92. package/src/authoring/story-overlay.ts +1 -1
  93. package/src/authoring/story-types.ts +11 -0
  94. package/src/authoring/vgai-scene-authoring-adapter.ts +54 -25
  95. package/src/authoring/viewport-tool-context.ts +78 -0
  96. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  97. package/src/authoring/world-hidden-viewport.ts +186 -0
  98. package/src/authoring/world-pan-state.ts +33 -17
  99. package/src/authoring/world-session-state.ts +1 -1
  100. package/src/authoring/world2d-authoring-adapter.ts +109 -52
  101. package/src/availability-tick.ts +56 -0
  102. package/src/browser-play-entry.ts +5 -5
  103. package/src/browser-project-scripts.ts +1 -0
  104. package/src/build-identity.ts +15 -0
  105. package/src/command-listener.ts +893 -19
  106. package/src/components/AlignToolbar.tsx +74 -63
  107. package/src/components/AppRoot.tsx +193 -26
  108. package/src/components/ApplicationMenus.tsx +272 -0
  109. package/src/components/AssetBrowser.tsx +1450 -293
  110. package/src/components/AssetEditorShell.tsx +141 -0
  111. package/src/components/AssetImportDetails.tsx +218 -0
  112. package/src/components/AssetLibraryPanel.tsx +14 -0
  113. package/src/components/CameraInfo.tsx +11 -20
  114. package/src/components/CenterDocuments.tsx +585 -0
  115. package/src/components/CommandPalette.tsx +75 -30
  116. package/src/components/ConsolePanel.css +55 -0
  117. package/src/components/ConsolePanel.tsx +57 -112
  118. package/src/components/DebugConsolePanel.tsx +461 -0
  119. package/src/components/DebuggerPanel.tsx +165 -0
  120. package/src/components/DefaultEditorLayout.tsx +167 -231
  121. package/src/components/GameHierarchy.tsx +873 -290
  122. package/src/components/GamePerformanceOverlay.tsx +46 -0
  123. package/src/components/HarnessChatPanel.tsx +2352 -0
  124. package/src/components/HistoryPanel.tsx +226 -0
  125. package/src/components/Inspector.tsx +153 -99
  126. package/src/components/InspectorToolSection.tsx +6 -4
  127. package/src/components/MountFailureBanner.tsx +31 -48
  128. package/src/components/NetworkSection.tsx +25 -14
  129. package/src/components/OnlineAssetBrowser.tsx +794 -343
  130. package/src/components/OverlayReportBanner.tsx +38 -64
  131. package/src/components/PerformancePanel.tsx +206 -0
  132. package/src/components/PlayBar.tsx +93 -263
  133. package/src/components/PrefabSaveDialog.tsx +55 -127
  134. package/src/components/ProjectHeader.css +60 -0
  135. package/src/components/ProjectHeader.tsx +170 -105
  136. package/src/components/ProjectScreen.tsx +246 -184
  137. package/src/components/ReactCanvasControls.tsx +185 -0
  138. package/src/components/ResolutionPicker.tsx +85 -0
  139. package/src/components/RootActivateDialog.tsx +39 -68
  140. package/src/components/SaveDialog.tsx +55 -127
  141. package/src/components/SaveStatus.tsx +11 -29
  142. package/src/components/StartupLoadingScreen.tsx +96 -0
  143. package/src/components/StateWatchPanel.tsx +302 -0
  144. package/src/components/StatsOverlay.tsx +12 -5
  145. package/src/components/StatusBar.tsx +64 -0
  146. package/src/components/ThemeManagerDialog.css +89 -0
  147. package/src/components/ThemeManagerDialog.tsx +371 -0
  148. package/src/components/ToolHost.tsx +26 -15
  149. package/src/components/Toolbar.tsx +117 -214
  150. package/src/components/VgaiVoxelLogo.tsx +89 -0
  151. package/src/components/ViewportOverlay.tsx +97 -172
  152. package/src/components/ViewportPanel.tsx +130 -31
  153. package/src/components/WorkspaceDock.tsx +891 -0
  154. package/src/components/WorldSelectionOverlay.tsx +51 -63
  155. package/src/components/WorldTextEditor.tsx +9 -5
  156. package/src/components/asset-documents.tsx +390 -0
  157. package/src/components/asset-editor-persistence.ts +44 -0
  158. package/src/components/asset-selection-section.tsx +338 -0
  159. package/src/components/asset-viewers/AudioViewer.tsx +73 -21
  160. package/src/components/asset-viewers/GenericJsonViewer.tsx +26 -11
  161. package/src/components/asset-viewers/ImageViewer.tsx +43 -11
  162. package/src/components/asset-viewers/InputMapViewer.tsx +512 -134
  163. package/src/components/asset-viewers/MaterialAssetEditor.tsx +540 -0
  164. package/src/components/asset-viewers/ModelViewer.tsx +805 -121
  165. package/src/components/asset-viewers/OnlineAssetDetail.tsx +177 -60
  166. package/src/components/asset-viewers/SourceAssetViewer.tsx +121 -0
  167. package/src/components/asset-workflow.css +506 -0
  168. package/src/components/build-documents.tsx +696 -0
  169. package/src/components/core-utilities.tsx +75 -0
  170. package/src/components/data-documents.tsx +364 -0
  171. package/src/components/{DataPanel.tsx → data-editor.tsx} +138 -288
  172. package/src/components/debugger-panel-state.ts +57 -0
  173. package/src/components/inspector-widgets/AlignmentGrid.tsx +8 -14
  174. package/src/components/inspector-widgets/BorderEditor.tsx +41 -33
  175. package/src/components/inspector-widgets/ColorPicker.tsx +39 -39
  176. package/src/components/inspector-widgets/FontPicker.tsx +13 -21
  177. package/src/components/inspector-widgets/GradientEditor.tsx +11 -19
  178. package/src/components/inspector-widgets/ScrubbableInput.tsx +6 -3
  179. package/src/components/inspector-widgets/ShadowEditor.tsx +20 -33
  180. package/src/components/inspector-widgets/shared.tsx +90 -49
  181. package/src/components/inspectors/AnimationSection.tsx +39 -40
  182. package/src/components/inspectors/AudioSection.tsx +28 -39
  183. package/src/components/inspectors/BoneAttachmentSection.tsx +19 -24
  184. package/src/components/inspectors/CameraSection.tsx +14 -23
  185. package/src/components/inspectors/ComponentsSection.tsx +39 -43
  186. package/src/components/inspectors/JointsSection.tsx +34 -43
  187. package/src/components/inspectors/LightSection.tsx +90 -35
  188. package/src/components/inspectors/MaterialSection.tsx +137 -174
  189. package/src/components/inspectors/MeshSection.tsx +9 -17
  190. package/src/components/inspectors/NavigationSection.tsx +8 -15
  191. package/src/components/inspectors/ParticleSection.tsx +91 -76
  192. package/src/components/inspectors/PhysicsSection.tsx +42 -46
  193. package/src/components/inspectors/PostProcessingSection.tsx +28 -36
  194. package/src/components/inspectors/RenderingSection.tsx +12 -20
  195. package/src/components/inspectors/ShadowSection.tsx +7 -8
  196. package/src/components/inspectors/SplineSection.tsx +31 -42
  197. package/src/components/inspectors/TransformSection.tsx +14 -22
  198. package/src/components/patterns/Dialog.tsx +95 -0
  199. package/src/components/patterns/Fields.tsx +44 -0
  200. package/src/components/patterns/List.tsx +25 -0
  201. package/src/components/patterns/StateSurface.tsx +40 -0
  202. package/src/components/patterns/Surfaces.tsx +115 -0
  203. package/src/components/patterns/Tabs.tsx +80 -0
  204. package/src/components/patterns/Toolbar.tsx +51 -0
  205. package/src/components/patterns/Tree.tsx +72 -0
  206. package/src/components/primitives/Button.tsx +46 -0
  207. package/src/components/primitives/ColorInput.tsx +11 -47
  208. package/src/components/primitives/EditorIcon.tsx +99 -0
  209. package/src/components/primitives/FormControls.tsx +71 -0
  210. package/src/components/primitives/JsonInput.tsx +15 -2
  211. package/src/components/primitives/Layout.tsx +100 -0
  212. package/src/components/primitives/Menu.tsx +105 -0
  213. package/src/components/primitives/NumberInput.tsx +8 -35
  214. package/src/components/primitives/Panel.tsx +49 -44
  215. package/src/components/primitives/SectionHeader.tsx +10 -28
  216. package/src/components/primitives/Text.tsx +46 -0
  217. package/src/components/primitives/Tooltip.tsx +20 -12
  218. package/src/components/primitives/Vec3Input.tsx +3 -0
  219. package/src/components/primitives/banner-tones.ts +33 -0
  220. package/src/components/primitives/editor-icons.ts +102 -0
  221. package/src/components/primitives/panel-header-styles.ts +30 -0
  222. package/src/components/project-operation-documents.tsx +226 -0
  223. package/src/components/status-contributions.tsx +175 -0
  224. package/src/components/story-documents-register.ts +15 -0
  225. package/src/components/story-documents.tsx +1185 -0
  226. package/src/components/tool-documents.tsx +110 -0
  227. package/src/components/workspace-dock.css +293 -0
  228. package/src/components/workspace-history.ts +33 -0
  229. package/src/components/world-documents.tsx +145 -0
  230. package/src/components/xstate-documents.tsx +209 -0
  231. package/src/composite-screenshot.ts +248 -0
  232. package/src/design-system/index.ts +70 -0
  233. package/src/design-system-stories/Foundation.stories.tsx +183 -0
  234. package/src/design-system-stories/Patterns.stories.tsx +251 -0
  235. package/src/design-system-stories/Workspace.stories.tsx +538 -0
  236. package/src/doctor/report.ts +57 -13
  237. package/src/editor-api.ts +295 -31
  238. package/src/editor-compatibility.ts +200 -0
  239. package/src/editor-console.ts +35 -17
  240. package/src/editor-hotkeys.ts +85 -33
  241. package/src/editor-store.ts +538 -233
  242. package/src/editor-viewport.ts +160 -34
  243. package/src/entity-factory.ts +14 -3
  244. package/src/gizmo-registry.ts +21 -5
  245. package/src/harness-chat-editor-context.ts +37 -0
  246. package/src/harness-chat-indicator.ts +68 -0
  247. package/src/harness-chat-layout.ts +53 -0
  248. package/src/harness-chat-lifecycle.ts +170 -0
  249. package/src/harness-chat-reconnect.ts +85 -0
  250. package/src/harness-chat-types.ts +409 -0
  251. package/src/hierarchy-drop.ts +50 -0
  252. package/src/hierarchy-expansion-state.ts +100 -0
  253. package/src/hierarchy-menu-registry.ts +1 -1
  254. package/src/hierarchy-projection.ts +76 -0
  255. package/src/history/editor-session.ts +21 -0
  256. package/src/history/history-commands.ts +147 -0
  257. package/src/history/history-service.ts +904 -0
  258. package/src/history/json-history-resource.ts +165 -0
  259. package/src/history/persistence-coordinator.ts +35 -0
  260. package/src/history/project-file-history.ts +266 -0
  261. package/src/history/project-root-history-backends.ts +53 -0
  262. package/src/history/resource-registry.ts +209 -0
  263. package/src/history/snapshot-store.ts +108 -0
  264. package/src/history/source-history-backend.ts +374 -0
  265. package/src/history/types.ts +100 -0
  266. package/src/hmr-registration-group.ts +67 -0
  267. package/src/hmr-stable-react-context.ts +23 -0
  268. package/src/hosted-example.ts +12 -2
  269. package/src/hotkeys.ts +89 -18
  270. package/src/ingest/discovery-react.ts +9 -10
  271. package/src/ingest/discovery.ts +4 -4
  272. package/src/ingest/discovery2d.ts +5 -5
  273. package/src/ingest/games/bloom-composer/vgai.game.json +3 -3
  274. package/src/ingest/games/embed-bundle/vgai.game.json +3 -3
  275. package/src/ingest/games/games-fps/vgai.game.json +3 -3
  276. package/src/ingest/games/iframe-reachable/vgai.game.json +3 -3
  277. package/src/ingest/games/interactive-cubes/vgai.game.json +3 -3
  278. package/src/ingest/games/mismatched-three/vgai.game.json +3 -3
  279. package/src/ingest/games/own-three-bundled/vgai.game.json +3 -3
  280. package/src/ingest/games/pointerlock-maze/vgai.game.json +7 -4
  281. package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +3 -3
  282. package/src/ingest/games-2d/bunnymark/vgai.game.json +3 -3
  283. package/src/ingest/games-2d/flappy/vgai.game.json +3 -3
  284. package/src/ingest/games-2d/flappy-pixi/vgai.game.json +3 -3
  285. package/src/ingest/games-2d/puzzling-potions/vgai.game.json +3 -3
  286. package/src/ingest/games-2d/tilemap-camera/vgai.game.json +3 -3
  287. package/src/ingest/games-react/react-rpg/vgai.game.json +3 -3
  288. package/src/ingest/types.ts +1 -1
  289. package/src/ingest-mode.ts +47 -52
  290. package/src/ingest-siblings.ts +23 -33
  291. package/src/initial-scene.ts +1 -2
  292. package/src/main.tsx +16 -8
  293. package/src/manifest-project.ts +10 -12
  294. package/src/model-thumbnail.ts +261 -26
  295. package/src/module-mode.ts +44 -50
  296. package/src/play-log-events.ts +26 -0
  297. package/src/play-mode.ts +495 -401
  298. package/src/play-scene-adoption.ts +23 -0
  299. package/src/playground/main.ts +68 -24
  300. package/src/playwright-shim.ts +473 -0
  301. package/src/project-manager.ts +90 -10
  302. package/src/project-operations.ts +112 -0
  303. package/src/project-story-discovery.ts +25 -0
  304. package/src/project-tool-discovery.ts +43 -0
  305. package/src/scene-serializer.ts +0 -6
  306. package/src/scene-sync.ts +7 -2
  307. package/src/script-loader.ts +3 -3
  308. package/src/skeleton-helper.ts +57 -0
  309. package/src/storage/seed.ts +68 -8
  310. package/src/stories/StoryPreviewMount.tsx +265 -0
  311. package/src/stories/action-stories.fixture.tsx +44 -0
  312. package/src/stories/button-stories.fixture.tsx +50 -0
  313. package/src/stories/compose-project-stories.ts +182 -0
  314. package/src/stories/loader-stories.fixture.tsx +53 -0
  315. package/src/stories/story-discovery.ts +130 -0
  316. package/src/stories/story-registry.ts +146 -0
  317. package/src/theme-css.ts +1049 -0
  318. package/src/theme-library.ts +238 -0
  319. package/src/theme-preference.ts +130 -0
  320. package/src/theme.ts +527 -0
  321. package/src/tool-loader.ts +80 -24
  322. package/src/ui-source/inspect.ts +27 -4
  323. package/src/ui-source/source-write-backend.ts +83 -22
  324. package/src/widgets/index.ts +9 -18
  325. package/src/workspace-aux-commands.ts +11 -0
  326. package/src/workspace-dock-controller.ts +64 -0
  327. package/src/workspace-document-ids.ts +5 -0
  328. package/src/workspace-document-registry.ts +367 -0
  329. package/src/workspace-state-persistence.ts +455 -0
  330. package/src/workspace-status-registry.ts +110 -0
  331. package/src/workspace-utility-commands.ts +49 -0
  332. package/src/workspace-utility-registry.ts +161 -0
  333. package/src/world-document-routing.ts +16 -0
  334. package/src/xstate-inspect/XStateMachineInspector.tsx +544 -0
  335. package/src/xstate-inspect/character-animation-machine.fixture.ts +74 -0
  336. package/src/xstate-inspect/use-live-actor-state.ts +39 -0
  337. package/src/xstate-inspect/xstate-graph.ts +265 -0
  338. package/src/xstate-inspect/xstate-layout.ts +76 -0
  339. package/src/z-index.ts +26 -0
  340. package/template/.claude/skills/editor/SKILL.md +129 -90
  341. package/template/AGENTS.md +1110 -0
  342. package/template/CLAUDE.md +1 -512
  343. package/template/IDIOMS.md +50 -0
  344. package/template/check-idioms.ts +706 -0
  345. package/template/manifest-entry-modules-plugin.ts +53 -0
  346. package/template/package.json +13 -4
  347. package/template/public/scenes/default.scn2d.json +6 -0
  348. package/template/public/scenes/default.vscn.json +7 -1
  349. package/template/public/scenes/untitled.vscn.json +10 -0
  350. package/template/scripts/playtest.ts +40 -0
  351. package/template/server/loopback.ts +75 -0
  352. package/template/server/rooms/arena-room.ts +69 -1
  353. package/template/server/rooms/game-room.ts +68 -1
  354. package/template/src/data/README.md +9 -4
  355. package/template/src/data/data-ref.ts +35 -0
  356. package/template/src/data/tuning.schema.ts +1 -1
  357. package/template/src/main.ts +41 -62
  358. package/template/src/manifest-entry-modules.d.ts +3 -0
  359. package/template/src/operations/README.md +88 -0
  360. package/template/src/runtime/pixi-adapter.ts +24 -0
  361. package/template/src/scripts/components/data-spinner.ts +43 -2
  362. package/template/src/scripts/components/spin-lap-math.ts +27 -0
  363. package/template/src/tools/README.md +5 -3
  364. package/template/src/tools/example.tool.tsx +13 -7
  365. package/template/src/ui/Button.stories.tsx +66 -0
  366. package/template/src/ui/RebindPanel.tsx +2 -6
  367. package/template/src/ui/game.tsx +17 -0
  368. package/template/tests/acceptance/example.spec.ts +64 -0
  369. package/template/tests/logic/example.test.ts +31 -0
  370. package/template/tests/logic/room.test.ts +100 -0
  371. package/template/tests/tsconfig.json +30 -0
  372. package/template/validate-manifest.ts +5 -5
  373. package/template/validate-scenes.ts +50 -18
  374. package/template/vgai.game.json +20 -13
  375. package/template/vite.config.ts +77 -16
  376. package/vite-plugin-ui-oid.ts +261 -17
  377. package/dist/assets/CCDIKSolver-Dz-ysxZF.js +0 -1
  378. package/dist/assets/SelectionBox-BXsv_6aH.js +0 -1
  379. package/dist/assets/browser-project-scripts-DOru4L1x.js +0 -2
  380. package/dist/assets/browserAll-CEkWYlFk.js +0 -1
  381. package/dist/assets/create-runtime-DYIWr3va.js +0 -1
  382. package/dist/assets/data-asset-Bb9sIM7i.js +0 -5
  383. package/dist/assets/game-8SDZPPgH.js +0 -1
  384. package/dist/assets/game-CevorxyV.js +0 -1
  385. package/dist/assets/game-Di7XlywD.js +0 -1
  386. package/dist/assets/game-DjnCaw8R.js +0 -1
  387. package/dist/assets/game-Q9A0aXSV.js +0 -1
  388. package/dist/assets/index-CPVV6pjw.js +0 -1
  389. package/dist/assets/index-CpOnYyeD.js +0 -213
  390. package/dist/assets/index-Dr8H_6Rl.js +0 -1
  391. package/dist/assets/index-_bCaipUk.js +0 -13650
  392. package/dist/assets/ingest-siblings-Dz8eEqrV.js +0 -1
  393. package/dist/assets/mount-manifest-Bhk0ohsl.js +0 -1
  394. package/dist/assets/scene-query-BivAHhJu.js +0 -1
  395. package/dist/assets/webworkerAll-BLrH0F6F.js +0 -1
  396. package/dist/assets/xstate-animation-binding-1NGLmw6y.js +0 -1
  397. package/dist/assets/xstate.esm-BgUD33nl.js +0 -3
  398. package/src/authoring/scene-ui-layer.ts +0 -485
  399. package/src/authoring/ui-authoring-adapter.ts +0 -325
  400. package/src/authoring/ui-hierarchy-menu.ts +0 -40
  401. package/src/authoring/ui-inspector-sections.tsx +0 -156
  402. package/src/authoring/undo-timeline.ts +0 -145
  403. package/src/components/BottomPanel.tsx +0 -326
  404. package/src/components/BuildPanel.tsx +0 -455
  405. package/src/components/FolderTree.tsx +0 -179
  406. package/src/components/RightPanel.tsx +0 -166
  407. package/src/components/WorldContextMenu.tsx +0 -257
  408. package/src/components/asset-viewers/AssetViewer.tsx +0 -38
  409. package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +0 -129
  410. package/src/scene-ui-mode/active-scene-ui.ts +0 -58
  411. package/src/scene-ui-mode/scene-ui-palette-panel.tsx +0 -152
  412. package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +0 -29
  413. package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +0 -74
  414. package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +0 -49
  415. package/src/scene-ui-mode/ui-prefab-io.ts +0 -76
  416. package/src/ui-editor/inspector.tsx +0 -563
  417. package/src/ui-editor/node-ops.ts +0 -266
  418. package/src/ui-editor/overlay.tsx +0 -380
  419. package/src/ui-editor/palette.tsx +0 -114
  420. package/src/ui-editor/react-store.ts +0 -78
  421. package/src/ui-editor/timeline-panel.tsx +0 -443
  422. package/src/ui-editor/ui-edit-store.ts +0 -552
  423. package/src/ui-editor/ui-prefab.ts +0 -95
  424. package/template/project.json +0 -9
  425. package/template/src/scripts/main.ts +0 -94
  426. package/template/src/ui/DefaultHud.tsx +0 -40
  427. package/template/src/ui/game-state.tsx +0 -37
  428. package/template/src/ui/mount-default-hud.tsx +0 -19
  429. package/template/src/ui/mount-ui.ts +0 -15
  430. package/vite-plugin-react-world-provider.ts +0 -81
@@ -1,152 +0,0 @@
1
- /**
2
- * E1.a (spec-27 §7 E1 / §9 "UIEditor chrome, palette, … MIGRATE" row) — the
3
- * UI-node creation palette, surfaced in the MAIN editor (`editor.html`) for
4
- * whichever world's scene-UI child is currently live. Reuses `ui-editor/
5
- * palette.tsx`'s `UIPalette` (the harness component) UNCHANGED — its only
6
- * prop is `store: UIEditStore`, so pointing it at the SAME `UIEditStore`
7
- * instance `edit-mode-authoring.ts`'s `buildUIChild` constructed for the open
8
- * scene wires creation through the real undo timeline (`UIEditStore`'s
9
- * constructor already calls `registerUndoAdapter(this)`) and the real
10
- * `.vscn` autosave (`onCommit` → `EditorStore.setSceneUI`) for free — no new
11
- * store, no new undo plumbing.
12
- *
13
- * Also carries the E1.c "instantiate a saved prefab" surface (§8 "Scene-UI
14
- * extras: … prefabs"): a list of `.uiprefab.json` assets under `ui-prefabs/`
15
- * with a one-click instantiate into the current selection (or the first
16
- * root) — the SAME "target the selected container, else first root" rule
17
- * `scene-ui-layer.ts`'s registry component-insert strip (`componentStrip`)
18
- * uses: a selection that isn't a container falls straight through to the
19
- * first root. This is NOT the palette's own `add()` (`ui-editor/palette.tsx`),
20
- * which has an extra middle tier — a selection that isn't a container falls
21
- * back to that selection's PARENT first, and only THEN to the first root.
22
- * (The SAVE half of the prefab flow is the hierarchy context-menu item,
23
- * `ui-prefab-hierarchy-menu.ts` + `ui-prefab-dialog-host.tsx`.)
24
- *
25
- * Renders nothing when no scene-UI child is installed (§3.1's install gate —
26
- * a ui-less scene has nothing to author here yet; see `ui-hierarchy-menu.ts`'s
27
- * "Add UI Canvas" action for how a scene gets its first one).
28
- */
29
-
30
- import { useEffect, useState } from 'react';
31
- import type { UIAuthoringAdapter } from '../authoring/ui-authoring-adapter';
32
- import { Panel } from '../components/primitives/Panel';
33
- import { findNode } from '../ui-editor/node-ops';
34
- import { UIPalette } from '../ui-editor/palette';
35
- import { instantiateUIPrefab } from '../ui-editor/ui-prefab';
36
- import { useActiveSceneUIAdapter } from './active-scene-ui';
37
- import {
38
- fetchUIPrefabFile,
39
- listUIPrefabAssets,
40
- UI_PREFAB_SAVED_EVENT,
41
- type UIPrefabAssetEntry,
42
- } from './ui-prefab-io';
43
-
44
- /** Mirrors `ui-editor/palette.tsx`'s own unexported `isContainer` / the
45
- * identical set in `authoring/scene-ui-layer.ts` — an instantiated prefab
46
- * nests under the selected container, else the first root. */
47
- const CONTAINER_KINDS = new Set([
48
- 'canvas',
49
- 'box',
50
- 'grid',
51
- 'stack',
52
- 'scroll',
53
- 'panel',
54
- 'center',
55
- 'wrap',
56
- 'aspect',
57
- 'sizebox',
58
- 'tab',
59
- ]);
60
-
61
- export function SceneUIPalettePanel(): React.ReactNode {
62
- const adapter = useActiveSceneUIAdapter();
63
- if (!adapter) return null;
64
- return (
65
- <Panel
66
- name="UI Palette"
67
- data-testid="scene-ui-palette-panel"
68
- style={{ width: 200, borderRight: '1px solid #333', overflowY: 'auto' }}
69
- >
70
- <UIPalette store={adapter.uiStore} />
71
- <ScenePrefabsSection adapter={adapter} />
72
- </Panel>
73
- );
74
- }
75
-
76
- function ScenePrefabsSection({ adapter }: { adapter: UIAuthoringAdapter }): React.ReactNode {
77
- const [prefabs, setPrefabs] = useState<UIPrefabAssetEntry[]>([]);
78
-
79
- useEffect(() => {
80
- let cancelled = false;
81
- const refresh = () => {
82
- void listUIPrefabAssets().then((list) => {
83
- if (!cancelled) setPrefabs(list);
84
- });
85
- };
86
- refresh();
87
- window.addEventListener(UI_PREFAB_SAVED_EVENT, refresh);
88
- return () => {
89
- cancelled = true;
90
- window.removeEventListener(UI_PREFAB_SAVED_EVENT, refresh);
91
- };
92
- }, []);
93
-
94
- const store = adapter.uiStore;
95
-
96
- const instantiate = async (entry: UIPrefabAssetEntry): Promise<void> => {
97
- const prefab = await fetchUIPrefabFile(entry.path);
98
- if (!prefab) return;
99
- const instance = instantiateUIPrefab(prefab);
100
- const primary = store.primary;
101
- const primaryLoc = primary ? findNode(store.roots, primary) : null;
102
- const parentId =
103
- primaryLoc && CONTAINER_KINDS.has(primaryLoc.node.kind)
104
- ? primary!
105
- : ((store.roots[0]?.id as string | undefined) ?? null);
106
- if (parentId) store.addNodeValue(parentId, instance);
107
- };
108
-
109
- return (
110
- <div data-testid="scene-ui-prefabs" style={{ padding: 8, fontFamily: 'monospace' }}>
111
- <div
112
- style={{
113
- fontSize: 10,
114
- textTransform: 'uppercase',
115
- color: '#888',
116
- margin: '4px 0',
117
- letterSpacing: 0.5,
118
- }}
119
- >
120
- Prefabs
121
- </div>
122
- {prefabs.length === 0 && (
123
- <div style={{ color: '#666', fontSize: 10 }}>
124
- none yet — right-click a node → "Save UI Node as Prefab..."
125
- </div>
126
- )}
127
- <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>
128
- {prefabs.map((entry) => (
129
- <button
130
- key={entry.path}
131
- type="button"
132
- data-testid={`ui-prefab-instantiate-${entry.name}`}
133
- title={`instantiate ${entry.name}`}
134
- onClick={() => void instantiate(entry)}
135
- style={{
136
- background: '#262626',
137
- color: '#ccc',
138
- border: '1px solid #3a3a3a',
139
- borderRadius: 3,
140
- padding: '3px 7px',
141
- fontSize: 11,
142
- cursor: 'pointer',
143
- fontFamily: 'monospace',
144
- }}
145
- >
146
- {entry.name}
147
- </button>
148
- ))}
149
- </div>
150
- </div>
151
- );
152
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * E1.b (spec-27 §7 E1 / §9 "…, timeline, …" MIGRATE row) — the keyframe/dope-
3
- * sheet editor (`ui-editor/timeline-panel.tsx`'s `UITimeline`, reused
4
- * UNCHANGED) mounted as a dockable bottom-panel tab in the unified editor
5
- * (`components/BottomPanel.tsx`), for the currently active scene-UI child.
6
- *
7
- * Shares the SAME `UIEditStore` (so keyframe/track/clip edits are undoable +
8
- * autosaved through the exact path the palette/inspector use) AND the SAME
9
- * `UIAnimationController` the design-time stage plays back against
10
- * (`UIAuthoringAdapter.anim` — see that field's doc comment for why the
11
- * stage and the timeline can't each own their own controller instance:
12
- * scrubbing here must move the SAME preview the stage renders).
13
- */
14
-
15
- import { UITimeline } from '../ui-editor/timeline-panel';
16
- import { useActiveSceneUIAdapter } from './active-scene-ui';
17
-
18
- export function SceneUITimelineTab(): React.ReactNode {
19
- const adapter = useActiveSceneUIAdapter();
20
- if (!adapter) {
21
- return (
22
- <div style={{ padding: 12, color: '#777', fontSize: 12, fontFamily: 'monospace' }}>
23
- No scene-UI world is open in this project — right-click a scene root in the hierarchy and
24
- choose "Add UI Canvas" to author one.
25
- </div>
26
- );
27
- }
28
- return <UITimeline store={adapter.uiStore} anim={adapter.anim} />;
29
- }
@@ -1,74 +0,0 @@
1
- /**
2
- * E1.c (spec-27 §7 E1) — the "Save UI Node as Prefab..." dialog, mounted once
3
- * (see `components/DefaultEditorLayout.tsx`) alongside the 3D
4
- * `PrefabSaveDialog` it shares its component with (parameterized — `extension`/
5
- * `defaultFolder`/`title`, see that file). Listens for
6
- * `ui-prefab-hierarchy-menu.ts`'s `UI_SAVE_AS_PREFAB_EVENT`, extracts the
7
- * chosen node from the ACTIVE scene-UI child's live tree at save time (not at
8
- * event-dispatch time — the tree may have changed since the context-menu
9
- * click), and writes a `.uiprefab.json` via `ui-prefab-io.ts`.
10
- */
11
-
12
- import { useCallback, useEffect, useState } from 'react';
13
- import { PrefabSaveDialog } from '../components/PrefabSaveDialog';
14
- import { findNode } from '../ui-editor/node-ops';
15
- import { resolveActiveSceneUIAdapter } from './active-scene-ui';
16
- import { UI_SAVE_AS_PREFAB_EVENT, type UISaveAsPrefabDetail } from './ui-prefab-hierarchy-menu';
17
- import {
18
- buildUIPrefabFile,
19
- saveUIPrefabToServer,
20
- UI_PREFAB_DIR,
21
- UI_PREFAB_EXTENSION,
22
- UI_PREFAB_SAVED_EVENT,
23
- } from './ui-prefab-io';
24
-
25
- /** `a-z0-9-` filename hint from a node's display name — purely cosmetic
26
- * (the folder/filename fields stay freely editable), mirrors the 3D dialog's
27
- * own `entity.name` default-name usage (`DefaultEditorLayout.tsx`). */
28
- function slugify(name: string): string {
29
- const slug = name
30
- .toLowerCase()
31
- .replace(/[^a-z0-9]+/g, '-')
32
- .replace(/^-+|-+$/g, '');
33
- return slug || 'ui-prefab';
34
- }
35
-
36
- export function UIPrefabDialogHost(): React.ReactNode {
37
- const [pending, setPending] = useState<UISaveAsPrefabDetail | null>(null);
38
-
39
- useEffect(() => {
40
- const handler = (e: Event) => {
41
- setPending((e as CustomEvent<UISaveAsPrefabDetail>).detail);
42
- };
43
- window.addEventListener(UI_SAVE_AS_PREFAB_EVENT, handler);
44
- return () => window.removeEventListener(UI_SAVE_AS_PREFAB_EVENT, handler);
45
- }, []);
46
-
47
- const handleSave = useCallback(
48
- (relPath: string) => {
49
- const detail = pending;
50
- setPending(null);
51
- if (!detail) return;
52
- const adapter = resolveActiveSceneUIAdapter();
53
- const loc = adapter ? findNode(adapter.uiStore.roots, detail.nodeId) : null;
54
- if (!loc) return;
55
- const prefab = buildUIPrefabFile(detail.name, loc.node);
56
- void saveUIPrefabToServer(prefab, relPath).then((ok) => {
57
- if (ok) window.dispatchEvent(new CustomEvent(UI_PREFAB_SAVED_EVENT));
58
- });
59
- },
60
- [pending],
61
- );
62
-
63
- if (!pending) return null;
64
- return (
65
- <PrefabSaveDialog
66
- defaultName={slugify(pending.name)}
67
- extension={UI_PREFAB_EXTENSION}
68
- defaultFolder={UI_PREFAB_DIR}
69
- title="Save UI Node as Prefab"
70
- onSave={handleSave}
71
- onCancel={() => setPending(null)}
72
- />
73
- );
74
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * "Save UI Node as Prefab..." hierarchy context-menu item (E1.c, spec-27 §7
3
- * E1) — the scene-UI counterpart of `authoring/first-party-hierarchy-menu.ts`'s
4
- * 3D prefab Save-as-Prefab action, registered through the SAME permanent
5
- * escape hatch (`hierarchy-menu-registry.ts`, C2-blessed): `GameHierarchy`
6
- * (the contract-only shell) never learns a UI tree exists, it only renders
7
- * whatever this registration contributes for a matched row.
8
- *
9
- * Scoped to a node the ACTIVE scene-UI child's `UIEditStore` actually owns
10
- * (`resolveActiveSceneUIAdapter` + `findNode`) — never matches a 3D entity or
11
- * a foreign ingest/boundary node, and never fires when no scene-UI child is
12
- * installed at all.
13
- */
14
-
15
- import { registerHierarchyMenuItems } from '../hierarchy-menu-registry';
16
- import { findNode } from '../ui-editor/node-ops';
17
- import { resolveActiveSceneUIAdapter } from './active-scene-ui';
18
-
19
- /** Dispatched (on `window`) when the user picks "Save UI Node as Prefab..." —
20
- * `scene-ui-mode/ui-prefab-dialog-host.tsx` is the one listener, mirroring
21
- * `first-party-hierarchy-menu.ts`'s `editor:save-as-prefab` convention. */
22
- export const UI_SAVE_AS_PREFAB_EVENT = 'editor:ui-save-as-prefab';
23
-
24
- export interface UISaveAsPrefabDetail {
25
- readonly nodeId: string;
26
- readonly name: string;
27
- }
28
-
29
- registerHierarchyMenuItems(
30
- (ctx) => {
31
- const adapter = resolveActiveSceneUIAdapter();
32
- return !!adapter && !!findNode(adapter.uiStore.roots, ctx.nodeId);
33
- },
34
- (ctx) => {
35
- const adapter = resolveActiveSceneUIAdapter();
36
- const loc = adapter ? findNode(adapter.uiStore.roots, ctx.nodeId) : null;
37
- if (!loc) return [];
38
- return [
39
- {
40
- label: 'Save UI Node as Prefab...',
41
- color: '#60a5fa',
42
- action: () => {
43
- const detail: UISaveAsPrefabDetail = { nodeId: ctx.nodeId, name: loc.node.name };
44
- window.dispatchEvent(new CustomEvent(UI_SAVE_AS_PREFAB_EVENT, { detail }));
45
- },
46
- },
47
- ];
48
- },
49
- );
@@ -1,76 +0,0 @@
1
- /**
2
- * E1.c (spec-27 §7 E1 / §8 "Scene-UI extras: prefabs" / §9 `ui-prefab.ts`
3
- * MIGRATE row) — the save/list/fetch I/O the pure `ui-editor/ui-prefab.ts`
4
- * functions (`instantiateUIPrefab`, unit-tested, no UI surface) never got: the
5
- * harness exposed `instantiateUIPrefab` on `window.__uiRuntime` for e2e/proof
6
- * scripts only (`ui-editor/harness.tsx`) — no author-facing save/instantiate
7
- * flow existed anywhere before this unit. Mirrors the 3D prefab I/O
8
- * (`components/DefaultEditorLayout.tsx`'s `savePrefabToServer`/
9
- * `fetchPrefabFile`) but for `.uiprefab.json` (`UIPrefabFileSchema`,
10
- * `packages/engine/src/scene/schema/ui.ts:590`) under a sibling `ui-prefabs/`
11
- * folder convention (the 3D convention is `prefabs/`, `PrefabSaveDialog.tsx`'s
12
- * default folder).
13
- */
14
-
15
- import type { UINode } from '@engine/scene/schema';
16
- import { type UIPrefabFile, UIPrefabFileSchema } from '@engine/scene/schema';
17
- import { listAssets, readProjectTextFile, saveFile } from '../editor-api';
18
-
19
- /** Default folder a UI prefab saves to / is listed from — sibling of the 3D
20
- * `prefabs/` convention, never mixed with it (different file schema). */
21
- export const UI_PREFAB_DIR = 'ui-prefabs';
22
- export const UI_PREFAB_EXTENSION = 'uiprefab.json';
23
-
24
- /** Validate a raw parsed JSON object as a `.uiprefab.json` file. Throws a
25
- * `ZodError` on an invalid shape — callers decide how to surface that. */
26
- export function parseUIPrefabFile(json: unknown): UIPrefabFile {
27
- return UIPrefabFileSchema.parse(json);
28
- }
29
-
30
- /** Build a fresh (version 1) `UIPrefabFile` around a UI node subtree. The
31
- * node's OWN ids are kept as authored — `instantiateUIPrefab` (`ui-prefab.ts`)
32
- * is what regenerates fresh ids, at INSTANTIATE time, not save time. */
33
- export function buildUIPrefabFile(name: string, root: UINode): UIPrefabFile {
34
- return { version: 1, name, root };
35
- }
36
-
37
- /** Save a `.uiprefab.json` to disk via the editor server API (same
38
- * storage-backend seam every other project file write uses). */
39
- export async function saveUIPrefabToServer(prefab: UIPrefabFile, path: string): Promise<boolean> {
40
- return saveFile(path, JSON.stringify(prefab, null, 2));
41
- }
42
-
43
- /** Fetch + validate a `.uiprefab.json` for an instantiate action. `null` on a
44
- * missing file OR one that fails schema validation (never throws). */
45
- export async function fetchUIPrefabFile(path: string): Promise<UIPrefabFile | null> {
46
- const text = await readProjectTextFile(path);
47
- if (text === null) return null;
48
- try {
49
- return parseUIPrefabFile(JSON.parse(text));
50
- } catch {
51
- return null;
52
- }
53
- }
54
-
55
- export interface UIPrefabAssetEntry {
56
- /** Display name (filename minus the `.uiprefab.json` suffix). */
57
- name: string;
58
- /** Project-relative path, ready for `fetchUIPrefabFile`. */
59
- path: string;
60
- }
61
-
62
- /** Every `.uiprefab.json` file in {@link UI_PREFAB_DIR} (empty array if the
63
- * folder doesn't exist yet — `listAssets` already degrades that way). */
64
- export async function listUIPrefabAssets(): Promise<UIPrefabAssetEntry[]> {
65
- const entries = await listAssets('', UI_PREFAB_DIR);
66
- return entries
67
- .filter((e) => e.type === 'file' && e.name.endsWith(`.${UI_PREFAB_EXTENSION}`))
68
- .map((e) => ({
69
- name: e.name.slice(0, -(UI_PREFAB_EXTENSION.length + 1)),
70
- path: `${UI_PREFAB_DIR}/${e.name}`,
71
- }));
72
- }
73
-
74
- /** Dispatched after a UI prefab is successfully saved, so any open "instantiate"
75
- * picker (the palette's prefabs section) refreshes its list without a reopen. */
76
- export const UI_PREFAB_SAVED_EVENT = 'editor:ui-prefab-saved';