@volter/editor-core 0.5.57

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 (719) hide show
  1. package/BUNDLED_NOTICES +1527 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-APACHE +202 -0
  4. package/NOTICE +18 -0
  5. package/README.md +24 -0
  6. package/dist/build/chunk-JS4D4XZ3.js +175 -0
  7. package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
  8. package/dist/build/vite-plugin-product-contributions.js +100 -0
  9. package/dist/build/vite-plugin-product-contributions.js.map +7 -0
  10. package/dist/build/vite-plugin-shared-react.js +25 -0
  11. package/dist/build/vite-plugin-shared-react.js.map +7 -0
  12. package/dist/build/vite-plugin-shared-three.js +86 -0
  13. package/dist/build/vite-plugin-shared-three.js.map +7 -0
  14. package/dist/server/chunk-KMJC7AGO.js +98 -0
  15. package/dist/server/chunk-KMJC7AGO.js.map +7 -0
  16. package/dist/server/chunk-PSILUMGS.js +46 -0
  17. package/dist/server/chunk-PSILUMGS.js.map +7 -0
  18. package/dist/server/frame-proxy.js +255 -0
  19. package/dist/server/frame-proxy.js.map +7 -0
  20. package/dist/server/open-browser.js +53 -0
  21. package/dist/server/open-browser.js.map +7 -0
  22. package/dist/server/process-shutdown.js +127 -0
  23. package/dist/server/process-shutdown.js.map +7 -0
  24. package/dist/server/session-registry.js +141 -0
  25. package/dist/server/session-registry.js.map +7 -0
  26. package/dist/server/spawn-opener.js +11 -0
  27. package/dist/server/spawn-opener.js.map +7 -0
  28. package/dist/server/worktree-identity.js +11 -0
  29. package/dist/server/worktree-identity.js.map +7 -0
  30. package/dist-server/packaged.mjs +88816 -0
  31. package/package.json +118 -0
  32. package/scripts/build-plugins.mjs +14 -0
  33. package/scripts/build-server.mjs +26 -0
  34. package/scripts/build-session.mjs +9 -0
  35. package/server/account-credentials.ts +60 -0
  36. package/server/account-service.ts +1434 -0
  37. package/server/adapter-region-includes.ts +47 -0
  38. package/server/asset-catalog-v2.ts +175 -0
  39. package/server/asset-history-snapshots.ts +196 -0
  40. package/server/asset-ledger-store.ts +195 -0
  41. package/server/asset-library-routes.ts +1595 -0
  42. package/server/blender-wasm-artifact.ts +430 -0
  43. package/server/boot-timings.ts +106 -0
  44. package/server/canonical-path.ts +50 -0
  45. package/server/checkout-workspace-preflight.ts +349 -0
  46. package/server/cloud-asset-catalog.ts +158 -0
  47. package/server/coding-inference-launch.ts +237 -0
  48. package/server/collaboration-account-client.ts +202 -0
  49. package/server/collaboration-attribution.ts +122 -0
  50. package/server/collaboration-session.ts +934 -0
  51. package/server/comfyui-bridge.ts +248 -0
  52. package/server/console-ledger.ts +499 -0
  53. package/server/creation-site-transform.ts +304 -0
  54. package/server/creation-site-write.ts +648 -0
  55. package/server/data-file-serialize.ts +158 -0
  56. package/server/editor-brand-html.ts +72 -0
  57. package/server/editor-control-socket.ts +366 -0
  58. package/server/editor-server-options.ts +190 -0
  59. package/server/editor-server.ts +1483 -0
  60. package/server/editor-sse.ts +352 -0
  61. package/server/engine-provenance.ts +169 -0
  62. package/server/engine-source-restart.ts +117 -0
  63. package/server/frame-bridge.ts +115 -0
  64. package/server/frame-proxy.ts +490 -0
  65. package/server/frame-workbench.ts +259 -0
  66. package/server/frontend-handoff.ts +229 -0
  67. package/server/game-globals-shadow.ts +113 -0
  68. package/server/gameplay-session-retention.ts +149 -0
  69. package/server/gameplay-sessions.ts +123 -0
  70. package/server/generation-jobs.ts +201 -0
  71. package/server/generation-reconciler.ts +137 -0
  72. package/server/generative-execution-context.ts +59 -0
  73. package/server/git-workflow.ts +612 -0
  74. package/server/harness-chat-caller.ts +36 -0
  75. package/server/harness-chat-service.ts +1681 -0
  76. package/server/idle-shutdown.ts +170 -0
  77. package/server/js-profiling-policy.ts +52 -0
  78. package/server/launcher-settings.ts +84 -0
  79. package/server/local-asset-catalog.ts +410 -0
  80. package/server/managed-account-defaults.ts +22 -0
  81. package/server/mock-control-plane.ts +540 -0
  82. package/server/model-import-conversion.ts +345 -0
  83. package/server/native-credential-store.ts +162 -0
  84. package/server/open-browser.ts +118 -0
  85. package/server/packaged.ts +1192 -0
  86. package/server/play-stall.ts +126 -0
  87. package/server/process-shutdown.ts +218 -0
  88. package/server/product-presets.ts +55 -0
  89. package/server/project-build-artifact.ts +95 -0
  90. package/server/project-components.ts +100 -0
  91. package/server/project-dependency-invalidation.ts +114 -0
  92. package/server/project-file-scan.ts +235 -0
  93. package/server/project-hmr-files.ts +215 -0
  94. package/server/project-install-roots.ts +210 -0
  95. package/server/project-kinds.ts +71 -0
  96. package/server/project-mcp-servers.ts +82 -0
  97. package/server/project-module-freshness.ts +109 -0
  98. package/server/project-module-instance.ts +375 -0
  99. package/server/project-optimize-deps-entries.ts +827 -0
  100. package/server/project-output-writer.ts +679 -0
  101. package/server/project-package-origin.ts +63 -0
  102. package/server/project-root-surface.ts +831 -0
  103. package/server/project-scratch-path.ts +47 -0
  104. package/server/project-script-hmr.ts +619 -0
  105. package/server/project-serving-plugins.ts +236 -0
  106. package/server/project-tools.ts +653 -0
  107. package/server/project-validation.ts +250 -0
  108. package/server/project-verbs.ts +127 -0
  109. package/server/project-view.ts +52 -0
  110. package/server/project-watch.ts +1134 -0
  111. package/server/project-work-coordinator.ts +288 -0
  112. package/server/provider-credentials.ts +331 -0
  113. package/server/recent-projects-store.ts +98 -0
  114. package/server/redact-secrets.ts +71 -0
  115. package/server/repository-presence.ts +267 -0
  116. package/server/routes/account.ts +357 -0
  117. package/server/routes/agents.ts +60 -0
  118. package/server/routes/assets.ts +154 -0
  119. package/server/routes/build.ts +13 -0
  120. package/server/routes/collaboration.ts +595 -0
  121. package/server/routes/configurations.ts +419 -0
  122. package/server/routes/context.ts +264 -0
  123. package/server/routes/control-plane.ts +1811 -0
  124. package/server/routes/logs.ts +272 -0
  125. package/server/routes/project-identity.ts +302 -0
  126. package/server/routes/project-open.ts +429 -0
  127. package/server/routes/project-source.ts +686 -0
  128. package/server/routes/project-state.ts +383 -0
  129. package/server/routes/relay.ts +1029 -0
  130. package/server/routes/route-helpers.ts +29 -0
  131. package/server/routes/served-modules.ts +138 -0
  132. package/server/routes/session-tabs.ts +196 -0
  133. package/server/routes/settings.ts +121 -0
  134. package/server/routes/share-control.ts +486 -0
  135. package/server/routes/themes.ts +116 -0
  136. package/server/routes/tools.ts +230 -0
  137. package/server/routes/worktrees.ts +595 -0
  138. package/server/scoped-game-css.ts +461 -0
  139. package/server/server-utils.ts +1194 -0
  140. package/server/session-product.ts +112 -0
  141. package/server/session-registry.ts +230 -0
  142. package/server/share-claims.ts +138 -0
  143. package/server/share-host.ts +526 -0
  144. package/server/share-session-gateway.ts +1362 -0
  145. package/server/share-tunnel.ts +123 -0
  146. package/server/spawn-opener.ts +74 -0
  147. package/server/support/play/log-format.ts +76 -0
  148. package/server/support/play/session-record.ts +199 -0
  149. package/server/support/project/build-discipline.ts +718 -0
  150. package/server/support/project/inspection-node.ts +119 -0
  151. package/server/support/project/log-naming.ts +54 -0
  152. package/server/support/project/provenance.ts +290 -0
  153. package/server/support/project/run-name.ts +18 -0
  154. package/server/support/project/session-journal.ts +830 -0
  155. package/server/support/project/shared.ts +327 -0
  156. package/server/tab-bootstrap.ts +62 -0
  157. package/server/tab-heartbeat.ts +477 -0
  158. package/server/tab-lifecycle.ts +550 -0
  159. package/server/tab-presence.ts +1508 -0
  160. package/server/team-agent-mirror.ts +95 -0
  161. package/server/twin-auth.ts +138 -0
  162. package/server/vendored-lock-recorder.ts +968 -0
  163. package/server/worktree-identity.ts +121 -0
  164. package/server/worktree-management.ts +398 -0
  165. package/server/worktree-retention.d.mts +13 -0
  166. package/server/worktree-retention.mjs +205 -0
  167. package/src/EditorContext.tsx +169 -0
  168. package/src/account.ts +333 -0
  169. package/src/action-registry.ts +532 -0
  170. package/src/active-product.ts +74 -0
  171. package/src/active-project.ts +155 -0
  172. package/src/adapter-editor-config.ts +25 -0
  173. package/src/adapter-observation.ts +49 -0
  174. package/src/animation/stage-transport.ts +379 -0
  175. package/src/animation/three-clips-subject.ts +172 -0
  176. package/src/api/asset-library-wire.ts +45 -0
  177. package/src/api/assets.ts +365 -0
  178. package/src/api/base.ts +10 -0
  179. package/src/api/build.ts +99 -0
  180. package/src/api/git-wire.ts +56 -0
  181. package/src/api/logs.ts +92 -0
  182. package/src/api/project-identity.ts +74 -0
  183. package/src/api/project-open.ts +355 -0
  184. package/src/api/project-source.ts +162 -0
  185. package/src/api/project-state.ts +107 -0
  186. package/src/api/relay.ts +268 -0
  187. package/src/api/settings.ts +36 -0
  188. package/src/api/themes.ts +45 -0
  189. package/src/api/worktrees.ts +257 -0
  190. package/src/asset-compare-core.ts +171 -0
  191. package/src/asset-compare.ts +294 -0
  192. package/src/asset-editor-context.tsx +100 -0
  193. package/src/asset-events.ts +97 -0
  194. package/src/asset-inspector-actions.ts +87 -0
  195. package/src/asset-preview-framing.ts +357 -0
  196. package/src/asset-preview.ts +2802 -0
  197. package/src/asset-selection-viewer-registry.ts +113 -0
  198. package/src/asset-selection.ts +133 -0
  199. package/src/asset-workflow/asset-capabilities.ts +344 -0
  200. package/src/asset-workflow/asset-import-jobs.ts +106 -0
  201. package/src/asset-workflow/asset-ledger-backend.ts +126 -0
  202. package/src/asset-workflow/asset-ledger.ts +156 -0
  203. package/src/asset-workflow/asset-materialization-report.ts +140 -0
  204. package/src/asset-workflow/asset-pack-manifest.ts +320 -0
  205. package/src/asset-workflow/asset-types.ts +142 -0
  206. package/src/asset-workflow/asset-workflow-quality.ts +61 -0
  207. package/src/asset-workflow/audio-preview-player.ts +193 -0
  208. package/src/asset-workflow/audio-waveform.ts +22 -0
  209. package/src/asset-workflow/cloud-asset-client.ts +263 -0
  210. package/src/asset-workflow/folder-preview.ts +345 -0
  211. package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
  212. package/src/asset-workflow/image-view-scale.ts +32 -0
  213. package/src/asset-workflow/import-contract.ts +124 -0
  214. package/src/asset-workflow/ledger-write-lock.ts +244 -0
  215. package/src/asset-workflow/model-inspection.ts +818 -0
  216. package/src/asset-workflow/pixi-spritesheet.ts +197 -0
  217. package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
  218. package/src/asset-workflow/project-asset-commands.ts +23 -0
  219. package/src/asset-workflow/project-asset-health.ts +139 -0
  220. package/src/asset-workflow/project-asset-operations.ts +154 -0
  221. package/src/asset-workflow/project-asset-roots.ts +68 -0
  222. package/src/asset-workflow/project-content.ts +288 -0
  223. package/src/asset-workflow/project-source-index.ts +550 -0
  224. package/src/asset-workflow/thumbnail-system.ts +256 -0
  225. package/src/authoring/active-adapter.ts +199 -0
  226. package/src/authoring/active-systems.ts +422 -0
  227. package/src/authoring/adapter-key.ts +18 -0
  228. package/src/authoring/authoring-asset-url.ts +27 -0
  229. package/src/authoring/bootstrap-state.ts +49 -0
  230. package/src/authoring/boundary-authoring-adapter.ts +184 -0
  231. package/src/authoring/breakpoint-state.ts +43 -0
  232. package/src/authoring/canvas-scene-guides.ts +76 -0
  233. package/src/authoring/component-instance-root.ts +171 -0
  234. package/src/authoring/composite-authoring-adapter.ts +2110 -0
  235. package/src/authoring/consumer-actions.ts +520 -0
  236. package/src/authoring/css-numeric-style.ts +97 -0
  237. package/src/authoring/design-time-layers.ts +849 -0
  238. package/src/authoring/design-time-mount-registry.ts +235 -0
  239. package/src/authoring/design-time-settle.ts +343 -0
  240. package/src/authoring/edit-mode-authoring.ts +619 -0
  241. package/src/authoring/eyedropper-session.ts +60 -0
  242. package/src/authoring/instance-source-menu-register.ts +13 -0
  243. package/src/authoring/instance-source-menu.ts +135 -0
  244. package/src/authoring/layered-pick.ts +183 -0
  245. package/src/authoring/live-gesture-lock.ts +50 -0
  246. package/src/authoring/live-object-transform.ts +62 -0
  247. package/src/authoring/mount-failure-report.ts +154 -0
  248. package/src/authoring/mounted-root-subjects.ts +144 -0
  249. package/src/authoring/no-authoring-adapter.ts +55 -0
  250. package/src/authoring/null-inspection-subjects.tsx +75 -0
  251. package/src/authoring/object3d-document-persistence.ts +106 -0
  252. package/src/authoring/object3d-document-session-registry.ts +120 -0
  253. package/src/authoring/object3d-document-session.ts +1326 -0
  254. package/src/authoring/object3d-gesture-controller.ts +113 -0
  255. package/src/authoring/panel-authoring.ts +121 -0
  256. package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
  257. package/src/authoring/prefab-instance-section-model.ts +55 -0
  258. package/src/authoring/project-authoring-session.ts +105 -0
  259. package/src/authoring/provenance.ts +99 -0
  260. package/src/authoring/quarks-particle-systems.ts +19 -0
  261. package/src/authoring/react-canvas-navigation.ts +255 -0
  262. package/src/authoring/react-design-canvas-style.ts +20 -0
  263. package/src/authoring/react-story-board.ts +937 -0
  264. package/src/authoring/selection-scope.ts +195 -0
  265. package/src/authoring/shell-document-ops.ts +169 -0
  266. package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
  267. package/src/authoring/shell-viewport-policy.ts +48 -0
  268. package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
  269. package/src/authoring/stories-scope.ts +35 -0
  270. package/src/authoring/story-board-chrome-fit.ts +107 -0
  271. package/src/authoring/story-board-presentation.ts +111 -0
  272. package/src/authoring/three-projection-core.ts +226 -0
  273. package/src/authoring/viewport-pick-context.ts +40 -0
  274. package/src/authoring/viewport-raycast.ts +240 -0
  275. package/src/authoring/viewport-tool-context.ts +73 -0
  276. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  277. package/src/authoring/world-hidden-viewport.ts +152 -0
  278. package/src/authoring/world-pan-state.ts +198 -0
  279. package/src/authoring/world-session-state.ts +101 -0
  280. package/src/authoring/write-pipe.ts +173 -0
  281. package/src/availability-tick.ts +66 -0
  282. package/src/bitmap-label.ts +120 -0
  283. package/src/blender-tab-metrics.ts +161 -0
  284. package/src/board-open-actions.ts +20 -0
  285. package/src/boot-routing.ts +391 -0
  286. package/src/build-identity.ts +15 -0
  287. package/src/bytes-codec.ts +62 -0
  288. package/src/camera-authoring.ts +175 -0
  289. package/src/cancellation-reason.ts +58 -0
  290. package/src/canvas-preview-frames.ts +482 -0
  291. package/src/capture-camera-pose.ts +77 -0
  292. package/src/chrome-registry.ts +159 -0
  293. package/src/chrome-slot-registry.ts +91 -0
  294. package/src/collaboration-client.ts +264 -0
  295. package/src/collaboration-presence.ts +41 -0
  296. package/src/command-dispatch.ts +19 -0
  297. package/src/command-listener.ts +2743 -0
  298. package/src/command-registry.ts +70 -0
  299. package/src/component-board-registry.ts +205 -0
  300. package/src/component-states-registry.ts +200 -0
  301. package/src/components/AgentPresentationNotice.tsx +75 -0
  302. package/src/components/AlignToolbar.tsx +204 -0
  303. package/src/components/AppRoot.tsx +394 -0
  304. package/src/components/ApplicationMenus.tsx +415 -0
  305. package/src/components/AssetBrowser.tsx +2843 -0
  306. package/src/components/AssetEditorShell.tsx +216 -0
  307. package/src/components/AssetInspectorToolSection.tsx +124 -0
  308. package/src/components/BoardRulers.tsx +354 -0
  309. package/src/components/CameraInfo.tsx +81 -0
  310. package/src/components/CanvasSceneViewport.tsx +556 -0
  311. package/src/components/CapabilityCoverageSection.tsx +185 -0
  312. package/src/components/CenterDocuments.tsx +22 -0
  313. package/src/components/ChromeSlot.tsx +20 -0
  314. package/src/components/CodeView.tsx +470 -0
  315. package/src/components/CollaborationHeaderControl.css +74 -0
  316. package/src/components/CompactInspectorCard.tsx +190 -0
  317. package/src/components/CompactInspectorShell.tsx +39 -0
  318. package/src/components/ConsolePanel.css +55 -0
  319. package/src/components/ConsolePanel.tsx +270 -0
  320. package/src/components/DefaultEditorLayout.tsx +106 -0
  321. package/src/components/DocumentHeaderStrip.tsx +96 -0
  322. package/src/components/DocumentShelfRail.tsx +45 -0
  323. package/src/components/DocumentThumbnail.tsx +345 -0
  324. package/src/components/EditorLeaseGuard.tsx +372 -0
  325. package/src/components/ErrorBanner.tsx +123 -0
  326. package/src/components/FolderPreviewTile.tsx +159 -0
  327. package/src/components/GameHierarchy.tsx +3842 -0
  328. package/src/components/GameplaySessionTimeline.tsx +295 -0
  329. package/src/components/InspectionProjection.tsx +968 -0
  330. package/src/components/Inspector.tsx +233 -0
  331. package/src/components/InspectorCanvasPreview.tsx +35 -0
  332. package/src/components/InspectorFieldsSection.tsx +290 -0
  333. package/src/components/InspectorObjectPreview.tsx +57 -0
  334. package/src/components/InspectorStoriesSection.tsx +92 -0
  335. package/src/components/InspectorToolSection.tsx +96 -0
  336. package/src/components/InspectorTransformSection.tsx +245 -0
  337. package/src/components/LightExplorerPanel.tsx +433 -0
  338. package/src/components/MediaProperties.tsx +145 -0
  339. package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
  340. package/src/components/Object3DDocumentToolbar.css +100 -0
  341. package/src/components/Object3DDocumentToolbar.tsx +454 -0
  342. package/src/components/Object3DDocumentViewport.tsx +58 -0
  343. package/src/components/ProjectHeader.css +617 -0
  344. package/src/components/ProjectHeader.tsx +328 -0
  345. package/src/components/ProjectLayout.tsx +249 -0
  346. package/src/components/ReactCanvasControls.tsx +284 -0
  347. package/src/components/RootSelectionOverlay.tsx +3162 -0
  348. package/src/components/RootTextEditor.tsx +79 -0
  349. package/src/components/SaveStatus.tsx +70 -0
  350. package/src/components/StageHost.tsx +1954 -0
  351. package/src/components/StageOverlays.tsx +21 -0
  352. package/src/components/StartupErrorScreen.tsx +76 -0
  353. package/src/components/StartupLoadingScreen.tsx +65 -0
  354. package/src/components/StatsOverlay.tsx +78 -0
  355. package/src/components/SurfaceStateOverlay.tsx +24 -0
  356. package/src/components/ToolContributionSurfaces.tsx +65 -0
  357. package/src/components/ToolHost.tsx +370 -0
  358. package/src/components/ToolObject3DPreview.tsx +39 -0
  359. package/src/components/Toolbar.tsx +595 -0
  360. package/src/components/TransientHint.tsx +44 -0
  361. package/src/components/TransportStrip.tsx +174 -0
  362. package/src/components/VersionControlSection.tsx +470 -0
  363. package/src/components/VgaiLogo.css +83 -0
  364. package/src/components/VgaiLogo.tsx +35 -0
  365. package/src/components/ViewportControlsHint.tsx +60 -0
  366. package/src/components/ViewportFurniture.tsx +401 -0
  367. package/src/components/ViewportOverlay.tsx +145 -0
  368. package/src/components/ViewportOverlaysMenu.tsx +153 -0
  369. package/src/components/ViewportShadingMenu.tsx +300 -0
  370. package/src/components/ViewportViewMenu.tsx +101 -0
  371. package/src/components/WorkspaceDocumentSurface.tsx +204 -0
  372. package/src/components/WorkspaceUtilitySurface.tsx +22 -0
  373. package/src/components/WorktreeSwitcher.css +239 -0
  374. package/src/components/WorktreeSwitcher.tsx +890 -0
  375. package/src/components/account-documents.tsx +1162 -0
  376. package/src/components/asset-documents.tsx +812 -0
  377. package/src/components/asset-editor-persistence.ts +216 -0
  378. package/src/components/asset-selection-section.tsx +535 -0
  379. package/src/components/asset-thumbnails.tsx +312 -0
  380. package/src/components/asset-viewers/AudioViewer.tsx +201 -0
  381. package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
  382. package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  383. package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
  384. package/src/components/asset-viewers/ImageViewer.tsx +300 -0
  385. package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
  386. package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
  387. package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
  388. package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  389. package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
  390. package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
  391. package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
  392. package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
  393. package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  394. package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
  395. package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
  396. package/src/components/asset-viewers/VideoViewer.tsx +101 -0
  397. package/src/components/asset-viewers/shader-source.ts +144 -0
  398. package/src/components/asset-workflow.css +731 -0
  399. package/src/components/board-guides.ts +150 -0
  400. package/src/components/compact-inspector.css +539 -0
  401. package/src/components/core-utilities.tsx +90 -0
  402. package/src/components/editor-notifications.css +40 -0
  403. package/src/components/engine-workspace.css +274 -0
  404. package/src/components/inspector-preview-section.tsx +238 -0
  405. package/src/components/inspector-property-grouping.ts +64 -0
  406. package/src/components/inspector-revert-label.ts +20 -0
  407. package/src/components/inspector-selection.ts +42 -0
  408. package/src/components/inspector-stories-gating.ts +171 -0
  409. package/src/components/inspector-transform-subject.ts +11 -0
  410. package/src/components/inspector-transform.ts +75 -0
  411. package/src/components/kind-documents.tsx +500 -0
  412. package/src/components/palette-action-publisher.tsx +140 -0
  413. package/src/components/primitives/DraftColorInput.tsx +74 -0
  414. package/src/components/product-shell.css +1829 -0
  415. package/src/components/project-tool-documents.tsx +410 -0
  416. package/src/components/scene-documents.tsx +223 -0
  417. package/src/components/stage-keyboard.tsx +37 -0
  418. package/src/components/stage-overlay-set.tsx +107 -0
  419. package/src/components/stage-presence-markers.ts +478 -0
  420. package/src/components/standard-viewport-dressing.ts +417 -0
  421. package/src/components/status-contributions.tsx +403 -0
  422. package/src/components/tool-documents.tsx +309 -0
  423. package/src/components/tool-schema-form.tsx +262 -0
  424. package/src/components/use-after-paint.ts +41 -0
  425. package/src/components/use-project-image-assets.ts +86 -0
  426. package/src/components/viewport-header-controls.css +90 -0
  427. package/src/components/viewport-surface-status.tsx +55 -0
  428. package/src/components/workspace-history.ts +32 -0
  429. package/src/components/workspace-static-panel-registry.tsx +152 -0
  430. package/src/components/workspace-surfaces.css +621 -0
  431. package/src/components/world-documents.tsx +586 -0
  432. package/src/components/world-overlay-gestures.ts +1694 -0
  433. package/src/composite-screenshot.ts +1641 -0
  434. package/src/console-sync.ts +131 -0
  435. package/src/constraint-helper.ts +338 -0
  436. package/src/content-entry-source-registry.ts +184 -0
  437. package/src/coverage/authoring-seam-evidence.ts +300 -0
  438. package/src/coverage/canvas-reveal.ts +192 -0
  439. package/src/coverage/design-time-surfaces.ts +101 -0
  440. package/src/coverage/live-seam-evidence.ts +11 -0
  441. package/src/coverage/ontology-invariants.ts +466 -0
  442. package/src/coverage/session-vitals.ts +501 -0
  443. package/src/coverage/system-seam-evidence.ts +72 -0
  444. package/src/crash-null-boundary.ts +36 -0
  445. package/src/creation-site-edit.ts +1479 -0
  446. package/src/creation-site-registry.ts +160 -0
  447. package/src/delegate-harness-registry.ts +143 -0
  448. package/src/document-context-registry.ts +177 -0
  449. package/src/document-open-registry.ts +200 -0
  450. package/src/document-preview-source.ts +20 -0
  451. package/src/document-renderer-session.ts +138 -0
  452. package/src/editor-api.ts +46 -0
  453. package/src/editor-chrome-capture.ts +139 -0
  454. package/src/editor-commands.ts +164 -0
  455. package/src/editor-console.ts +563 -0
  456. package/src/editor-current-view.ts +82 -0
  457. package/src/editor-document-probe.ts +881 -0
  458. package/src/editor-git-client.ts +115 -0
  459. package/src/editor-host-door.ts +462 -0
  460. package/src/editor-hotkeys.ts +842 -0
  461. package/src/editor-lease-view.ts +39 -0
  462. package/src/editor-lease.ts +415 -0
  463. package/src/editor-mode.ts +19 -0
  464. package/src/editor-notifications.ts +140 -0
  465. package/src/editor-presence.ts +563 -0
  466. package/src/editor-presentation-activity.ts +50 -0
  467. package/src/editor-presentation-notice.ts +42 -0
  468. package/src/editor-runtime.tsx +145 -0
  469. package/src/editor-server-response.ts +86 -0
  470. package/src/editor-session-attribution.ts +75 -0
  471. package/src/editor-session-mode.ts +54 -0
  472. package/src/editor-shell-store.ts +1304 -0
  473. package/src/editor-state-facets.ts +74 -0
  474. package/src/editor-styles.css +33 -0
  475. package/src/editor-view-presentation.ts +810 -0
  476. package/src/editor-viewport.ts +5302 -0
  477. package/src/entity-lod.ts +31 -0
  478. package/src/entity-object.ts +91 -0
  479. package/src/files/file-provider.ts +62 -0
  480. package/src/files/project-files.ts +264 -0
  481. package/src/finders/index.ts +136 -0
  482. package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
  483. package/src/frame/bridge.tsx +1408 -0
  484. package/src/frame/product.ts +77 -0
  485. package/src/gameplay-dom-recording.ts +319 -0
  486. package/src/gameplay-export-state.ts +14 -0
  487. package/src/gameplay-replay.ts +417 -0
  488. package/src/gameplay-session-time.ts +9 -0
  489. package/src/gameplay-sessions.ts +204 -0
  490. package/src/harness-chat-types.ts +253 -0
  491. package/src/hierarchy-component-marks.ts +298 -0
  492. package/src/hierarchy-drop.ts +91 -0
  493. package/src/hierarchy-expansion-state.ts +80 -0
  494. package/src/hierarchy-header-slot.ts +52 -0
  495. package/src/hierarchy-internals.ts +197 -0
  496. package/src/hierarchy-kind-icon.ts +217 -0
  497. package/src/hierarchy-mark-reader.ts +73 -0
  498. package/src/hierarchy-menu-registry.ts +67 -0
  499. package/src/hierarchy-node-rows.ts +307 -0
  500. package/src/hierarchy-panel-view.ts +280 -0
  501. package/src/hierarchy-projection.ts +76 -0
  502. package/src/hierarchy-row-cache.ts +243 -0
  503. package/src/hierarchy-row-model.ts +308 -0
  504. package/src/hierarchy-rows.ts +11 -0
  505. package/src/hierarchy-walk.ts +86 -0
  506. package/src/history/editor-session.ts +25 -0
  507. package/src/history/history-commands.ts +147 -0
  508. package/src/history/history-delegate.ts +163 -0
  509. package/src/history/history-limit-notices.ts +43 -0
  510. package/src/history/history-service.ts +1173 -0
  511. package/src/history/persistence-coordinator.ts +35 -0
  512. package/src/history/project-file-history.ts +386 -0
  513. package/src/history/project-root-history-backends.ts +139 -0
  514. package/src/history/resource-registry.ts +209 -0
  515. package/src/history/snapshot-store.ts +103 -0
  516. package/src/history/source-history-backend.ts +546 -0
  517. package/src/history/types.ts +124 -0
  518. package/src/hmr-registration-group.ts +67 -0
  519. package/src/hmr-stable-react-context.ts +23 -0
  520. package/src/hotkeys.ts +188 -0
  521. package/src/inference-diagnostics.ts +69 -0
  522. package/src/initial-project.ts +80 -0
  523. package/src/inspection/active-subject.ts +578 -0
  524. package/src/inspection/active-surface.ts +142 -0
  525. package/src/inspection/compose.ts +1064 -0
  526. package/src/inspection/display.ts +170 -0
  527. package/src/inspection/document-subject.ts +109 -0
  528. package/src/inspection/game-subject.ts +85 -0
  529. package/src/inspection/model.ts +542 -0
  530. package/src/inspection/null-subject.ts +115 -0
  531. package/src/inspection/serialize.ts +357 -0
  532. package/src/inspection/use-active-inspection.ts +180 -0
  533. package/src/inspector-presentation.ts +201 -0
  534. package/src/inspector-section-registry.ts +221 -0
  535. package/src/instance-source-actions.ts +163 -0
  536. package/src/instanced-presentation.ts +164 -0
  537. package/src/js-heap.ts +71 -0
  538. package/src/key-actions.ts +91 -0
  539. package/src/keymap-presets.ts +401 -0
  540. package/src/layout-policy.ts +31 -0
  541. package/src/learn-links.ts +73 -0
  542. package/src/light-explorer-model.ts +134 -0
  543. package/src/live-canvas-frame.ts +55 -0
  544. package/src/live-document.ts +279 -0
  545. package/src/live-module-source.ts +230 -0
  546. package/src/live-session-registry.ts +220 -0
  547. package/src/live-transition.ts +633 -0
  548. package/src/manifest-project.ts +107 -0
  549. package/src/model-thumbnail.ts +523 -0
  550. package/src/native-selection-style.ts +202 -0
  551. package/src/object3d-document-write-policy.ts +137 -0
  552. package/src/packaged-runtime.ts +108 -0
  553. package/src/palettes/maya.palette.json +57 -0
  554. package/src/palettes/substance.palette.json +57 -0
  555. package/src/pasteboard-module.ts +81 -0
  556. package/src/performance-profiler.ts +367 -0
  557. package/src/performance-sources.ts +69 -0
  558. package/src/play-boot-phase.ts +145 -0
  559. package/src/presentation-surface.ts +248 -0
  560. package/src/project-adapter.ts +1143 -0
  561. package/src/project-asset-refresh.ts +26 -0
  562. package/src/project-declaration-refresh.ts +31 -0
  563. package/src/project-local-state.ts +118 -0
  564. package/src/project-manager.ts +243 -0
  565. package/src/project-module-changes.ts +163 -0
  566. package/src/project-module-split.ts +266 -0
  567. package/src/project-provenance.ts +115 -0
  568. package/src/project-ready.ts +42 -0
  569. package/src/project-session-reset.ts +67 -0
  570. package/src/project-shape.ts +68 -0
  571. package/src/project-tool-discovery.ts +66 -0
  572. package/src/project-tools.ts +107 -0
  573. package/src/project-work-types.ts +149 -0
  574. package/src/projection/three.ts +898 -0
  575. package/src/projection/types.ts +44 -0
  576. package/src/readiness.ts +113 -0
  577. package/src/reflection-probe-helper.ts +142 -0
  578. package/src/reported-play-state.ts +90 -0
  579. package/src/resolve-relative-specifier.ts +33 -0
  580. package/src/scene-document-plan.ts +315 -0
  581. package/src/scene-framing.ts +315 -0
  582. package/src/scene-live-open.ts +210 -0
  583. package/src/scene-view-fog.ts +89 -0
  584. package/src/scoped-game-css.ts +152 -0
  585. package/src/session-orphan-record.ts +193 -0
  586. package/src/session-tombstone.ts +126 -0
  587. package/src/settings/settings-provider.ts +82 -0
  588. package/src/settings-store.ts +345 -0
  589. package/src/shared-view-restore.ts +42 -0
  590. package/src/shell-store-door.ts +45 -0
  591. package/src/source-conflict.ts +122 -0
  592. package/src/spatial-handle-visuals.ts +332 -0
  593. package/src/stage-context.ts +341 -0
  594. package/src/stage-store-registry.ts +63 -0
  595. package/src/stale-chunk-recovery.ts +34 -0
  596. package/src/state-report-deferral.ts +73 -0
  597. package/src/storage/host-files-storage.ts +97 -0
  598. package/src/storage/http-storage.ts +174 -0
  599. package/src/storage/index.ts +75 -0
  600. package/src/storage/mem-storage.ts +149 -0
  601. package/src/storage/path-lock.ts +44 -0
  602. package/src/storage/paths.ts +26 -0
  603. package/src/storage/types.ts +116 -0
  604. package/src/stories/StoryComponentThumbnail.tsx +184 -0
  605. package/src/stories/StoryPreviewMount.tsx +306 -0
  606. package/src/stories/component-content-source.tsx +106 -0
  607. package/src/stories/component-states-source.ts +78 -0
  608. package/src/stories/compose-project-stories.ts +255 -0
  609. package/src/stories/pixi-story-model.ts +30 -0
  610. package/src/stories/prefabs-finder.ts +54 -0
  611. package/src/stories/prefabs-from-stories.ts +182 -0
  612. package/src/stories/project-story-discovery.ts +78 -0
  613. package/src/stories/project-story-regions.ts +24 -0
  614. package/src/stories/story-actions.ts +54 -0
  615. package/src/stories/story-capture-command.ts +124 -0
  616. package/src/stories/story-capture.ts +584 -0
  617. package/src/stories/story-declared-medium.ts +126 -0
  618. package/src/stories/story-discovery.ts +176 -0
  619. package/src/stories/story-document-openers.ts +36 -0
  620. package/src/stories/story-dom-runtime.ts +78 -0
  621. package/src/stories/story-grouping.ts +111 -0
  622. package/src/stories/story-lane.ts +88 -0
  623. package/src/stories/story-mount-turn.ts +27 -0
  624. package/src/stories/story-opener.ts +260 -0
  625. package/src/stories/story-pixi-preview.ts +408 -0
  626. package/src/stories/story-presentation.ts +215 -0
  627. package/src/stories/story-registry.ts +517 -0
  628. package/src/stories/story-three-preview.ts +807 -0
  629. package/src/stories/three-story-model.ts +96 -0
  630. package/src/story-three-preview-runtime.ts +56 -0
  631. package/src/surface-keyboard.ts +112 -0
  632. package/src/surface-state.ts +124 -0
  633. package/src/tab-bootstrap.js +628 -0
  634. package/src/tab-census.ts +198 -0
  635. package/src/tab-lifecycle-client.ts +196 -0
  636. package/src/theme-library.ts +844 -0
  637. package/src/theme-preference.ts +378 -0
  638. package/src/theme.css +3437 -0
  639. package/src/three-viewport/bone-selection-highlight.ts +119 -0
  640. package/src/three-viewport/camera-fit.ts +41 -0
  641. package/src/three-viewport/interactive-renderer.ts +132 -0
  642. package/src/three-viewport/selection-brackets.ts +310 -0
  643. package/src/three-viewport/selection-outline.ts +183 -0
  644. package/src/three-viewport/skeleton-helper.ts +61 -0
  645. package/src/three-viewport/source-color.ts +167 -0
  646. package/src/three-viewport/studio-environment.ts +96 -0
  647. package/src/three-viewport-presentation.ts +23 -0
  648. package/src/tool-contribution-play.ts +74 -0
  649. package/src/tool-loader.ts +1798 -0
  650. package/src/transform-mode-request.ts +57 -0
  651. package/src/transient-hint.ts +78 -0
  652. package/src/trigger-volume-helper.ts +116 -0
  653. package/src/ui-source/adapter-region-includes.ts +241 -0
  654. package/src/ui-source/ensure-import.ts +132 -0
  655. package/src/ui-source/file-region-resolver.ts +302 -0
  656. package/src/ui-source/inspect.ts +775 -0
  657. package/src/ui-source/oid-transform.ts +1845 -0
  658. package/src/ui-source/plan-csf-story.ts +196 -0
  659. package/src/ui-source/plan-extract-component.ts +421 -0
  660. package/src/ui-source/plan-fork-component.ts +621 -0
  661. package/src/ui-source/plan-named-style.ts +95 -0
  662. package/src/ui-source/plan-source-edit.ts +353 -0
  663. package/src/ui-source/r3f-contract-resolver.ts +327 -0
  664. package/src/ui-source/r3f-diagnostic-index.ts +165 -0
  665. package/src/ui-source/r3f-environment-binding.ts +133 -0
  666. package/src/ui-source/r3f-joint-binding.ts +251 -0
  667. package/src/ui-source/r3f-lod-binding.ts +91 -0
  668. package/src/ui-source/r3f-particle-binding.ts +235 -0
  669. package/src/ui-source/r3f-physics-binding.ts +483 -0
  670. package/src/ui-source/r3f-project-contracts.ts +444 -0
  671. package/src/ui-source/relative-import-specifier.ts +34 -0
  672. package/src/ui-source/reparent-guard.ts +544 -0
  673. package/src/ui-source/source-edit-request.ts +97 -0
  674. package/src/ui-source/source-write-backend.ts +618 -0
  675. package/src/ui-source/syntactic-prop-specs.ts +296 -0
  676. package/src/ui-source/tier-source-write-backend.ts +279 -0
  677. package/src/ui-source/ts-ast.ts +171 -0
  678. package/src/ui-source/utility-class-support.ts +169 -0
  679. package/src/ui-source/write-component-default.ts +133 -0
  680. package/src/ui-source/writer.ts +1989 -0
  681. package/src/viewport-activation-timings.ts +840 -0
  682. package/src/viewport-authoring-policy.ts +186 -0
  683. package/src/viewport-controls-hint.ts +57 -0
  684. package/src/viewport-door.ts +237 -0
  685. package/src/viewport-shading-boundary.ts +12 -0
  686. package/src/vite-error-surface.ts +141 -0
  687. package/src/wait-until.ts +37 -0
  688. package/src/workspace-areas.ts +156 -0
  689. package/src/workspace-aux-commands.ts +11 -0
  690. package/src/workspace-available-documents.ts +127 -0
  691. package/src/workspace-core-utilities.ts +31 -0
  692. package/src/workspace-document-ids.ts +59 -0
  693. package/src/workspace-document-registry.ts +612 -0
  694. package/src/workspace-document-restore.ts +145 -0
  695. package/src/workspace-host-commands.ts +141 -0
  696. package/src/workspace-persistence-gate.ts +40 -0
  697. package/src/workspace-play-utilities.ts +44 -0
  698. package/src/workspace-presets.ts +425 -0
  699. package/src/workspace-regions.ts +294 -0
  700. package/src/workspace-state-persistence.ts +536 -0
  701. package/src/workspace-static-panels.ts +73 -0
  702. package/src/workspace-status-registry.ts +121 -0
  703. package/src/workspace-style.ts +239 -0
  704. package/src/workspace-utility-commands.ts +74 -0
  705. package/src/workspace-utility-registry.ts +263 -0
  706. package/src/workspace-viewport-rect.ts +97 -0
  707. package/src/world-adoption.ts +115 -0
  708. package/src/world-document-routing.ts +104 -0
  709. package/vite-plugin-creation-site-write.ts +184 -0
  710. package/vite-plugin-creation-site.ts +80 -0
  711. package/vite-plugin-game-static.ts +303 -0
  712. package/vite-plugin-module-doorways.ts +336 -0
  713. package/vite-plugin-product-contributions.ts +197 -0
  714. package/vite-plugin-project-game-static.ts +125 -0
  715. package/vite-plugin-project-jsx-js.ts +65 -0
  716. package/vite-plugin-project-root-absolute-assets.ts +359 -0
  717. package/vite-plugin-shared-react.ts +420 -0
  718. package/vite-plugin-shared-three.ts +203 -0
  719. package/vite-plugin-ui-oid.ts +2106 -0
@@ -0,0 +1,520 @@
1
+ import type {
2
+ AssetDropContext,
3
+ AuthoringAdapter,
4
+ ComponentInstanceApplyResult,
5
+ SpatialHandlesProvider,
6
+ StructuralClipboardOutcome,
7
+ StructuralIdsWrite,
8
+ StructuralIdWrite,
9
+ StructuralWriteOutcome,
10
+ Transform,
11
+ TransformChannel,
12
+ WriteAck,
13
+ } from '@volter/editor-project/adapter';
14
+ import {
15
+ recordAuthoringConsumerUse,
16
+ recordAuthoringWriteConsumerUse,
17
+ } from '../coverage/authoring-seam-evidence';
18
+
19
+ export function setAuthoringSelection(
20
+ adapter: AuthoringAdapter,
21
+ nodeIds: readonly string[],
22
+ options?: { intent?: 'semantic' | 'exact' },
23
+ ): boolean {
24
+ const provider = adapter.selection;
25
+ if (!provider) return false;
26
+ recordAuthoringConsumerUse({
27
+ adapter,
28
+ seam: 'editor.selection.set',
29
+ stage: 'effect',
30
+ detail: `the editor selected ${nodeIds.length} authoring subject(s)`,
31
+ run: () => provider.set([...nodeIds], options),
32
+ });
33
+ return true;
34
+ }
35
+
36
+ export function beginAuthoringTransformEdit(adapter: AuthoringAdapter, nodeId: string): boolean {
37
+ const provider = adapter.transforms;
38
+ if (!provider) return false;
39
+ recordAuthoringConsumerUse({
40
+ adapter,
41
+ seam: 'editor.transforms.beginEdit',
42
+ stage: 'effect',
43
+ detail: `the editor began a transform gesture on ${nodeId}`,
44
+ run: () => provider.beginEdit(nodeId),
45
+ });
46
+ return true;
47
+ }
48
+
49
+ export function applyAuthoringTransform(
50
+ adapter: AuthoringAdapter,
51
+ nodeId: string,
52
+ transform: Transform,
53
+ ): boolean {
54
+ const provider = adapter.transforms;
55
+ if (!provider) return false;
56
+ recordAuthoringConsumerUse({
57
+ adapter,
58
+ seam: 'editor.transforms.apply',
59
+ stage: 'effect',
60
+ detail: `the editor applied a transform to ${nodeId}`,
61
+ run: () => provider.apply(nodeId, transform),
62
+ });
63
+ return true;
64
+ }
65
+
66
+ export function endAuthoringTransformEdit(
67
+ adapter: AuthoringAdapter,
68
+ nodeId: string,
69
+ ): StructuralWriteOutcome {
70
+ const provider = adapter.transforms;
71
+ if (!provider) return;
72
+ return recordAuthoringWriteConsumerUse({
73
+ adapter,
74
+ seam: 'editor.transforms.endEdit',
75
+ detail: `the editor completed a transform gesture on ${nodeId}`,
76
+ run: () => provider.endEdit(nodeId),
77
+ });
78
+ }
79
+
80
+ export function removeAuthoringTransform(
81
+ adapter: AuthoringAdapter,
82
+ nodeId: string,
83
+ channel: TransformChannel,
84
+ ): StructuralWriteOutcome {
85
+ const remove = adapter.transforms?.remove;
86
+ if (!remove) return;
87
+ return recordAuthoringWriteConsumerUse({
88
+ adapter,
89
+ seam: 'editor.transforms.remove',
90
+ detail: `the editor removed transform ${channel} from ${nodeId}`,
91
+ run: () => remove(nodeId, channel),
92
+ });
93
+ }
94
+
95
+ /** The explicit Play→source gesture. Ordinary transform edits never call this;
96
+ * the Inspector action is the sole shell consumer. */
97
+ export function commitAuthoringTransformSource(
98
+ adapter: AuthoringAdapter,
99
+ nodeId: string,
100
+ ): StructuralWriteOutcome {
101
+ const provider = adapter.transforms?.sourceCommit;
102
+ if (!provider) return;
103
+ return recordAuthoringWriteConsumerUse({
104
+ adapter,
105
+ seam: 'editor.transforms.sourceCommit',
106
+ detail: `the user committed the live transform of ${nodeId} to source`,
107
+ run: () => provider.commit(nodeId),
108
+ });
109
+ }
110
+
111
+ /** Save one adapter-owned document through its native persistence provider.
112
+ * A clean save may still let the provider flush bookkeeping, but it cannot
113
+ * manufacture evidence that bytes round-tripped. Composite adapters call this
114
+ * again at the child boundary, so one shell action records both the composite
115
+ * and the exact dirty root that actually saved. */
116
+ export async function saveAuthoringDocument(
117
+ adapter: AuthoringAdapter,
118
+ detail = 'the editor saved the active authoring document',
119
+ ): Promise<void> {
120
+ const provider = adapter.persistence;
121
+ if (!provider) return;
122
+ if (!provider.isDirty()) {
123
+ await provider.save();
124
+ return;
125
+ }
126
+ await recordAuthoringConsumerUse({
127
+ adapter,
128
+ seam: 'editor.persistence.save',
129
+ stage: 'round-trip',
130
+ detail: `${detail} to ${provider.destination}`,
131
+ run: () => provider.save(),
132
+ });
133
+ }
134
+
135
+ /** Write one Inspector field through the provider that owns it and retain the
136
+ * provider's own acknowledgement. Every Inspector-shaped surface uses this
137
+ * action so coverage and write truth do not depend on which panel initiated
138
+ * the same edit. */
139
+ export function setAuthoringInspectorField(
140
+ adapter: AuthoringAdapter,
141
+ nodeId: string,
142
+ path: string,
143
+ value: unknown,
144
+ ): StructuralWriteOutcome {
145
+ const provider = adapter.inspector;
146
+ if (!provider) return;
147
+ return recordAuthoringWriteConsumerUse({
148
+ adapter,
149
+ seam: 'editor.inspector.set',
150
+ detail: `the editor wrote ${path} on ${nodeId}`,
151
+ run: () => provider.set(nodeId, path, value),
152
+ });
153
+ }
154
+
155
+ export function removeAuthoringInspectorField(
156
+ adapter: AuthoringAdapter,
157
+ nodeId: string,
158
+ path: string,
159
+ ): StructuralWriteOutcome {
160
+ const remove = adapter.inspector?.remove;
161
+ if (!remove) return;
162
+ return recordAuthoringWriteConsumerUse({
163
+ adapter,
164
+ seam: 'editor.inspector.remove',
165
+ detail: `the editor removed ${path} from ${nodeId}`,
166
+ run: () => remove(nodeId, path),
167
+ });
168
+ }
169
+
170
+ /** Route one accepted asset drop through its real adapter and retain exactly
171
+ * the strength of the provider's own acknowledgement. Composite adapters use
172
+ * this again at their child boundary, so per-root coverage follows ownership
173
+ * instead of stopping at the shell router. */
174
+ export function dropAuthoringAsset(
175
+ adapter: AuthoringAdapter,
176
+ nodeId: string,
177
+ assetPath: string,
178
+ context?: AssetDropContext,
179
+ ): StructuralWriteOutcome {
180
+ const provider = adapter.assetDrop;
181
+ if (!provider) return;
182
+ return recordAuthoringWriteConsumerUse({
183
+ adapter,
184
+ seam: 'editor.assetDrop.drop',
185
+ detail: `the editor dropped ${assetPath} on ${nodeId || 'the root'}`,
186
+ run: () =>
187
+ context === undefined
188
+ ? provider.drop(nodeId, assetPath)
189
+ : provider.drop(nodeId, assetPath, context),
190
+ });
191
+ }
192
+
193
+ export function openAuthoringComponent(adapter: AuthoringAdapter, nodeId: string): void {
194
+ const provider = adapter.instances;
195
+ if (!provider?.openComponent) return;
196
+ recordAuthoringConsumerUse({
197
+ adapter,
198
+ seam: 'editor.instances.openComponent',
199
+ stage: 'effect',
200
+ detail: `the Inspector opened the component owning ${nodeId}`,
201
+ run: () => provider.openComponent?.(nodeId),
202
+ });
203
+ }
204
+
205
+ export function revertAuthoringInstance(
206
+ adapter: AuthoringAdapter,
207
+ nodeId: string,
208
+ paths: readonly string[],
209
+ ): Promise<WriteAck | undefined> {
210
+ const provider = adapter.instances;
211
+ if (!provider) return Promise.resolve(undefined);
212
+ return Promise.resolve(
213
+ recordAuthoringWriteConsumerUse({
214
+ adapter,
215
+ seam: 'editor.instances.revert',
216
+ detail: `the Inspector reverted ${paths.length} override(s) on ${nodeId}`,
217
+ run: () => provider.revert(nodeId, paths),
218
+ }),
219
+ ).then((ack) => ack ?? undefined);
220
+ }
221
+
222
+ export async function applyAuthoringInstanceToComponent(
223
+ adapter: AuthoringAdapter,
224
+ nodeId: string,
225
+ path: string,
226
+ ): Promise<ComponentInstanceApplyResult> {
227
+ const provider = adapter.instances;
228
+ if (!provider) return { changed: false, message: 'This subject has no component instance.' };
229
+ const result = await provider.applyToComponent(nodeId, path);
230
+ await recordAuthoringWriteConsumerUse({
231
+ adapter,
232
+ seam: 'editor.instances.applyToComponent',
233
+ detail: `the Inspector applied ${path} from ${nodeId} to its component`,
234
+ run: () => result.write,
235
+ });
236
+ return result;
237
+ }
238
+
239
+ function structureWrite(
240
+ adapter: AuthoringAdapter,
241
+ verb: string,
242
+ detail: string,
243
+ run: () => StructuralWriteOutcome,
244
+ ): StructuralWriteOutcome {
245
+ return recordAuthoringWriteConsumerUse({
246
+ adapter,
247
+ seam: `editor.structure.${verb}`,
248
+ detail,
249
+ run,
250
+ });
251
+ }
252
+
253
+ function structureIdWrite<Id extends string | null>(
254
+ adapter: AuthoringAdapter,
255
+ verb: string,
256
+ detail: string,
257
+ run: () => StructuralIdWrite<Id>,
258
+ ): StructuralIdWrite<Id> {
259
+ const result = recordAuthoringConsumerUse({
260
+ adapter,
261
+ seam: `editor.structure.${verb}`,
262
+ stage: 'effect',
263
+ detail,
264
+ run,
265
+ });
266
+ return {
267
+ ...result,
268
+ ack: structureWrite(adapter, verb, detail, () => result.ack),
269
+ };
270
+ }
271
+
272
+ export function createAuthoringNode(
273
+ adapter: AuthoringAdapter,
274
+ kind: string,
275
+ parentId?: string,
276
+ ): StructuralIdWrite {
277
+ const provider = adapter.structure;
278
+ if (!provider) return { id: '', ack: undefined };
279
+ return structureIdWrite(
280
+ adapter,
281
+ 'create',
282
+ `the editor created a ${kind} under ${parentId ?? 'the document root'}`,
283
+ () => provider.create(kind, parentId),
284
+ );
285
+ }
286
+
287
+ export function removeAuthoringNode(
288
+ adapter: AuthoringAdapter,
289
+ nodeId: string,
290
+ ): StructuralWriteOutcome {
291
+ const provider = adapter.structure;
292
+ if (!provider) return;
293
+ return structureWrite(adapter, 'remove', `the editor removed ${nodeId}`, () =>
294
+ provider.remove(nodeId),
295
+ );
296
+ }
297
+
298
+ export function removeManyAuthoringNodes(
299
+ adapter: AuthoringAdapter,
300
+ nodeIds: readonly string[],
301
+ ): StructuralWriteOutcome {
302
+ const provider = adapter.structure;
303
+ if (!provider?.removeMany) return;
304
+ return structureWrite(
305
+ adapter,
306
+ 'removeMany',
307
+ `the editor removed ${nodeIds.length} selected node(s) as one operation`,
308
+ () => provider.removeMany?.(nodeIds),
309
+ );
310
+ }
311
+
312
+ export function duplicateAuthoringNode(
313
+ adapter: AuthoringAdapter,
314
+ nodeId: string,
315
+ ): StructuralIdWrite {
316
+ const provider = adapter.structure;
317
+ if (!provider) return { id: nodeId, ack: undefined };
318
+ return structureIdWrite(adapter, 'duplicate', `the editor duplicated ${nodeId}`, () =>
319
+ provider.duplicate(nodeId),
320
+ );
321
+ }
322
+
323
+ export function reparentAuthoringNode(
324
+ adapter: AuthoringAdapter,
325
+ nodeId: string,
326
+ parentId: string | null,
327
+ ): StructuralWriteOutcome {
328
+ const provider = adapter.structure;
329
+ if (!provider) return;
330
+ return structureWrite(
331
+ adapter,
332
+ 'reparent',
333
+ `the editor reparented ${nodeId} under ${parentId ?? 'the document root'}`,
334
+ () => provider.reparent(nodeId, parentId),
335
+ );
336
+ }
337
+
338
+ export function reorderAuthoringNode(
339
+ adapter: AuthoringAdapter,
340
+ nodeId: string,
341
+ beforeSiblingId: string | null,
342
+ ): StructuralWriteOutcome {
343
+ const provider = adapter.structure;
344
+ if (!provider?.reorder) return;
345
+ return structureWrite(
346
+ adapter,
347
+ 'reorder',
348
+ `the editor reordered ${nodeId} before ${beforeSiblingId ?? 'the end'}`,
349
+ () => provider.reorder?.(nodeId, beforeSiblingId),
350
+ );
351
+ }
352
+
353
+ export function wrapAuthoringNode(
354
+ adapter: AuthoringAdapter,
355
+ nodeId: string,
356
+ wrapperTag?: string,
357
+ ): StructuralWriteOutcome {
358
+ const provider = adapter.structure;
359
+ if (!provider?.wrap) return;
360
+ return structureWrite(adapter, 'wrap', `the editor wrapped ${nodeId}`, () =>
361
+ provider.wrap?.(nodeId, wrapperTag),
362
+ );
363
+ }
364
+
365
+ export function unwrapAuthoringNode(
366
+ adapter: AuthoringAdapter,
367
+ nodeId: string,
368
+ ): StructuralWriteOutcome {
369
+ const provider = adapter.structure;
370
+ if (!provider?.unwrap) return;
371
+ return structureWrite(adapter, 'unwrap', `the editor unwrapped ${nodeId}`, () =>
372
+ provider.unwrap?.(nodeId),
373
+ );
374
+ }
375
+
376
+ export function groupAuthoringNodes(
377
+ adapter: AuthoringAdapter,
378
+ nodeIds: readonly string[],
379
+ ): StructuralIdWrite<string | null> {
380
+ const provider = adapter.structure;
381
+ if (!provider?.group) return { id: null, ack: undefined };
382
+ return structureIdWrite(
383
+ adapter,
384
+ 'group',
385
+ `the editor grouped ${nodeIds.length} selected node(s)`,
386
+ () => provider.group?.(nodeIds) ?? { id: null, ack: undefined },
387
+ );
388
+ }
389
+
390
+ export function ungroupAuthoringNode(
391
+ adapter: AuthoringAdapter,
392
+ nodeId: string,
393
+ ): StructuralIdsWrite {
394
+ const provider = adapter.structure;
395
+ if (!provider?.ungroup) return { ids: [], ack: undefined };
396
+ const result = recordAuthoringConsumerUse({
397
+ adapter,
398
+ seam: 'editor.structure.ungroup',
399
+ stage: 'effect',
400
+ detail: `the editor ungrouped ${nodeId}`,
401
+ run: () => provider.ungroup?.(nodeId) ?? { ids: [], ack: undefined },
402
+ });
403
+ return {
404
+ ...result,
405
+ ack: structureWrite(adapter, 'ungroup', `the editor ungrouped ${nodeId}`, () => result.ack),
406
+ };
407
+ }
408
+
409
+ export async function copyAuthoringNodes(
410
+ adapter: AuthoringAdapter,
411
+ nodeIds: readonly string[],
412
+ ): Promise<boolean> {
413
+ const provider = adapter.structure;
414
+ if (!provider?.copy) return false;
415
+ return await recordAuthoringConsumerUse({
416
+ adapter,
417
+ seam: 'editor.structure.copy',
418
+ stage: 'effect',
419
+ detail: `the editor copied ${nodeIds.length} selected node(s)`,
420
+ run: () => provider.copy?.(nodeIds) ?? false,
421
+ });
422
+ }
423
+
424
+ async function clipboardStructureWrite(
425
+ adapter: AuthoringAdapter,
426
+ verb: 'cut' | 'paste',
427
+ detail: string,
428
+ run: () => StructuralClipboardOutcome,
429
+ ): Promise<false | WriteAck> {
430
+ const outcome = await recordAuthoringConsumerUse({
431
+ adapter,
432
+ seam: `editor.structure.${verb}`,
433
+ stage: 'effect',
434
+ detail,
435
+ run,
436
+ });
437
+ if (outcome === false) return false;
438
+ await structureWrite(adapter, verb, detail, () => outcome);
439
+ return outcome;
440
+ }
441
+
442
+ export function cutAuthoringNodes(
443
+ adapter: AuthoringAdapter,
444
+ nodeIds: readonly string[],
445
+ ): Promise<false | WriteAck> {
446
+ const provider = adapter.structure;
447
+ if (!provider?.cut) return Promise.resolve(false);
448
+ return clipboardStructureWrite(
449
+ adapter,
450
+ 'cut',
451
+ `the editor cut ${nodeIds.length} selected node(s)`,
452
+ () => provider.cut?.(nodeIds) ?? false,
453
+ );
454
+ }
455
+
456
+ export function pasteAuthoringNodes(
457
+ adapter: AuthoringAdapter,
458
+ parentId: string | null,
459
+ ): Promise<false | WriteAck> {
460
+ const provider = adapter.structure;
461
+ if (!provider?.paste) return Promise.resolve(false);
462
+ return clipboardStructureWrite(
463
+ adapter,
464
+ 'paste',
465
+ `the editor pasted nodes under ${parentId ?? 'the document root'}`,
466
+ () => provider.paste?.(parentId) ?? false,
467
+ );
468
+ }
469
+
470
+ /**
471
+ * ADAPTER-OWNED SPATIAL HANDLES, evidence-recorded — the same consumer wrapper
472
+ * every seam above gets, for the provider the 3D viewport raycasts.
473
+ *
474
+ * It lives HERE rather than beside the DOM world overlay it was written next
475
+ * to (`components/world-overlay-gestures.ts`) because its OTHER caller is
476
+ * `editor-viewport.ts`, and that surface must not import the overlay's graph:
477
+ * the overlay reaches the composite adapter, the react-world adapter and the
478
+ * UI source inspector, which is 124 files for a WeakMap and three recorded
479
+ * calls (ARCHITECTURE-CORE §Editor chrome, "the viewport stack is separable").
480
+ * Nothing about the wrapper was overlay-specific; this is its family.
481
+ */
482
+ const recordedSpatialHandles = new WeakMap<
483
+ AuthoringAdapter,
484
+ { readonly provider: SpatialHandlesProvider; readonly recorded: SpatialHandlesProvider }
485
+ >();
486
+
487
+ /** Stable evidence-aware view of adapter-owned spatial handles. */
488
+ export function spatialHandlesForAdapter(owner: AuthoringAdapter): SpatialHandlesProvider | null {
489
+ const provider = owner.spatialHandles;
490
+ if (!provider) return null;
491
+ const cached = recordedSpatialHandles.get(owner);
492
+ if (cached?.provider === provider) return cached.recorded;
493
+ const recorded: SpatialHandlesProvider = {
494
+ layers: (id) =>
495
+ recordAuthoringConsumerUse({
496
+ adapter: owner,
497
+ seam: 'editor.spatialHandles.layers',
498
+ stage: 'operation',
499
+ detail: `the viewport read adapter-owned spatial layers for ${id}`,
500
+ run: () => provider.layers(id),
501
+ }),
502
+ preview: (id, handleId, worldPosition) =>
503
+ recordAuthoringConsumerUse({
504
+ adapter: owner,
505
+ seam: 'editor.spatialHandles.preview',
506
+ stage: 'effect',
507
+ detail: `the viewport previewed spatial handle ${handleId} for ${id}`,
508
+ run: () => provider.preview(id, handleId, worldPosition),
509
+ }),
510
+ commit: (id, handleId, worldPosition) =>
511
+ recordAuthoringWriteConsumerUse({
512
+ adapter: owner,
513
+ seam: 'editor.spatialHandles.commit',
514
+ detail: `the viewport committed spatial handle ${handleId} for ${id}`,
515
+ run: () => provider.commit(id, handleId, worldPosition),
516
+ }),
517
+ };
518
+ recordedSpatialHandles.set(owner, { provider, recorded });
519
+ return recorded;
520
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * THE ONE PLACE that knows a CSS numeric style value is not the same thing as
3
+ * its CSS TEXT.
4
+ *
5
+ * React's own rule (`dangerousStyleValue`): a NUMBER style value is emitted
6
+ * verbatim when it is `0` or the property is unitless, and suffixed with `px`
7
+ * otherwise. So `style={{ width: 300 }}` paints 300px while
8
+ * `style={{ width: '300' }}` paints NOTHING — the CSSOM rejects a unitless
9
+ * length and keeps the previous value.
10
+ *
11
+ * That is why the inspector's numeric descriptors must reach source as
12
+ * NUMBERS: stringifying `300` on the way to the writer produced
13
+ * `width: '300'`, which React passed through verbatim, which the CSSOM
14
+ * rejected — a write that changed source, changed nothing on screen, and
15
+ * acked `persisted: true`.
16
+ *
17
+ * The two consumers are the two halves of one write: the SOURCE (a bare `300`
18
+ * in the JSX style object, which React px-ifies at render) and the LIVE inline
19
+ * patch / CSS-file declaration (which are CSS TEXT and need the unit spelled).
20
+ * {@link cssTextForStyleValue} is the second half.
21
+ */
22
+
23
+ /**
24
+ * Properties whose numeric value is unitless in CSS — the exact set the
25
+ * inspector's numeric widgets already print with no `px` suffix.
26
+ *
27
+ * Deliberately the SHIPPED list rather than React's full internal table: this
28
+ * set covers every `type: 'number'` descriptor the adapters declare
29
+ * (`STYLE_PROPERTIES`), and a descriptor added outside it would be wrong in
30
+ * the widget's suffix before it was wrong here.
31
+ */
32
+ export const UNITLESS_NUMBER_PROPS: ReadonlySet<string> = new Set([
33
+ 'opacity',
34
+ 'zIndex',
35
+ 'flexGrow',
36
+ 'flexShrink',
37
+ // React's own unitless set includes these two, and px-ifying them writes
38
+ // INVALID CSS the browser silently drops (blind re-walk: extracting a
39
+ // class from an element with `fontWeight: 900` emitted
40
+ // `font-weight: 900px`, losing the weight). A numeric lineHeight is the
41
+ // unitless multiplier form — px-ifying it changes meaning, not just
42
+ // validity.
43
+ 'fontWeight',
44
+ 'lineHeight',
45
+ ]);
46
+
47
+ /**
48
+ * THE READ HALF of the same rule: parse a real `CSSStyleDeclaration`'s
49
+ * length-property VALUE (always a unit-suffixed STRING, e.g. `"16px"` — CSSOM
50
+ * never hands back a bare number) into the plain number a `type: 'number'`
51
+ * `PropertyDescriptor` needs to render/edit correctly (`Inspector.tsx`'s
52
+ * generic renderer does `typeof v === 'number' ? … : 0` — without this parse,
53
+ * EVERY numeric style field would silently display `0` against a real browser
54
+ * DOM, even though plain-object `style: {}` fixtures never caught it, because
55
+ * a hand-built fixture can hold a bare JS number directly). Strips a trailing
56
+ * CSS unit (`px`/`em`/`rem`/`%`/`vh`/`vw`, mirroring `ui-source/writer.ts`'s
57
+ * own `LITERAL_RE` unit set); a value already handed over AS a number (or
58
+ * `undefined`/unset) passes through unchanged.
59
+ *
60
+ * It lived in `react-world-authoring-adapter.ts` until 2026-09-18 and moved
61
+ * here for the reason this module's header states — this is the one place that
62
+ * knows CSS numeric value and CSS text are different things — and because one
63
+ * host module that is NOT the React surface reads it: the overlay gesture bus
64
+ * (`components/world-overlay-gestures.ts`) parses a computed border width to
65
+ * place a resize handle. That single edge dragged the whole 3,848-line React
66
+ * root adapter into every editor boot (phase 1 of the open-source launch).
67
+ */
68
+ export function numericStyleValue(raw: unknown): number | undefined {
69
+ if (typeof raw === 'number') return raw;
70
+ if (typeof raw !== 'string' || raw === '') return undefined;
71
+ const parsed = Number.parseFloat(raw);
72
+ return Number.isNaN(parsed) ? undefined : parsed;
73
+ }
74
+
75
+ /** Numeric inspector edits change the magnitude of an authored CSS dimension.
76
+ * Keep relative units; ordinary React numbers and px values remain numbers. */
77
+ export function preserveNumericStyleUnit(
78
+ value: string | number,
79
+ authored: unknown,
80
+ ): string | number {
81
+ if (typeof value !== 'number' || typeof authored !== 'string') return value;
82
+ const unit = authored.trim().match(/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?([a-z]+|%)$/i)?.[1];
83
+ return unit && unit.toLowerCase() !== 'px' ? `${value}${unit}` : value;
84
+ }
85
+
86
+ /**
87
+ * The CSS TEXT for a style value — React's `dangerousStyleValue` rule.
88
+ *
89
+ * A string passes through untouched (it is already CSS text — `'12px'`,
90
+ * `'var(--brand)'`, `'50%'`). A number becomes `${n}px` unless it is `0` or
91
+ * the property is unitless.
92
+ */
93
+ export function cssTextForStyleValue(prop: string, value: string | number): string {
94
+ if (typeof value !== 'number') return value;
95
+ if (value === 0 || UNITLESS_NUMBER_PROPS.has(prop)) return String(value);
96
+ return `${value}px`;
97
+ }