@volter/sdk 0.0.0-stage → 0.5.203
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.
- package/LICENSE +202 -0
- package/NOTICE +20 -0
- package/README.md +38 -3
- package/package.json +510 -4
- package/src/account.ts +210 -0
- package/src/chrome.ts +88 -0
- package/src/client.ts +1646 -0
- package/src/commands.ts +66 -0
- package/src/contributions.ts +619 -0
- package/src/css-numeric-style.ts +97 -0
- package/src/document-probe.ts +282 -0
- package/src/editor-view.ts +225 -0
- package/src/extension.ts +40 -0
- package/src/generations.ts +178 -0
- package/src/host.ts +1157 -0
- package/src/http-transport.browser.ts +14 -0
- package/src/http-transport.node.ts +19 -0
- package/src/index.ts +131 -0
- package/src/kit/CapabilityCoverageSection.tsx +185 -0
- package/src/kit/account-client.ts +333 -0
- package/src/kit/action-registry.ts +317 -0
- package/src/kit/active-product.ts +76 -0
- package/src/kit/active-project.ts +155 -0
- package/src/kit/adapter-editor-config.ts +25 -0
- package/src/kit/adapter-module.ts +7 -0
- package/src/kit/adapter-observation.ts +49 -0
- package/src/kit/animation/animation-clock.ts +479 -0
- package/src/kit/animation/stage-transport.ts +385 -0
- package/src/kit/api/assets.ts +365 -0
- package/src/kit/api/project-open.ts +355 -0
- package/src/kit/api/project-source.ts +180 -0
- package/src/kit/api/project-state.ts +110 -0
- package/src/kit/api/relay.ts +270 -0
- package/src/kit/api/themes.ts +45 -0
- package/src/kit/api-asset-library-wire.ts +45 -0
- package/src/kit/api-base.ts +10 -0
- package/src/kit/api-build.ts +99 -0
- package/src/kit/api-git-wire.ts +56 -0
- package/src/kit/api-logs.ts +92 -0
- package/src/kit/api-project-identity.ts +74 -0
- package/src/kit/api-settings.ts +36 -0
- package/src/kit/api-worktrees.ts +205 -0
- package/src/kit/asset-capabilities.ts +344 -0
- package/src/kit/asset-compare-core.ts +171 -0
- package/src/kit/asset-editor-context.tsx +101 -0
- package/src/kit/asset-events.ts +96 -0
- package/src/kit/asset-inspector-actions.ts +87 -0
- package/src/kit/asset-selection-viewer-registry.ts +113 -0
- package/src/kit/asset-selection.ts +146 -0
- package/src/kit/asset-thumbnails.ts +25 -0
- package/src/kit/asset-viewers.ts +115 -0
- package/src/kit/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/kit/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/kit/asset-workflow/asset-ledger.ts +156 -0
- package/src/kit/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/kit/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/kit/asset-workflow/asset-types.ts +142 -0
- package/src/kit/asset-workflow/audio-preview-player.ts +193 -0
- package/src/kit/asset-workflow/audio-waveform.ts +22 -0
- package/src/kit/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/kit/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/kit/asset-workflow/image-view-scale.ts +31 -0
- package/src/kit/asset-workflow/import-contract.ts +124 -0
- package/src/kit/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/kit/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/kit/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/kit/asset-workflow/project-asset-commands.ts +20 -0
- package/src/kit/asset-workflow/project-content.ts +288 -0
- package/src/kit/asset-workflow/project-source-index.ts +545 -0
- package/src/kit/asset-workflow/thumbnail-system.ts +256 -0
- package/src/kit/authoring/active-adapter.ts +200 -0
- package/src/kit/authoring/active-systems.ts +422 -0
- package/src/kit/authoring/adapter-key.ts +18 -0
- package/src/kit/authoring/authoring-asset-url.ts +27 -0
- package/src/kit/authoring/bootstrap-state.ts +49 -0
- package/src/kit/authoring/boundary-authoring-adapter.ts +189 -0
- package/src/kit/authoring/canvas-scene-guides.ts +84 -0
- package/src/kit/authoring/composite-authoring-adapter.ts +2109 -0
- package/src/kit/authoring/consumer-actions.ts +531 -0
- package/src/kit/authoring/design-time-layers.ts +852 -0
- package/src/kit/authoring/design-time-mount-registry.ts +244 -0
- package/src/kit/authoring/edit-mode-authoring.ts +637 -0
- package/src/kit/authoring/empty-project-authoring.ts +22 -0
- package/src/kit/authoring/instance-source-menu.ts +135 -0
- package/src/kit/authoring/layered-pick.ts +185 -0
- package/src/kit/authoring/mounted-root-subjects.ts +146 -0
- package/src/kit/authoring/no-authoring-adapter.ts +59 -0
- package/src/kit/authoring/object3d-document-persistence.ts +122 -0
- package/src/kit/authoring/panel-authoring.ts +121 -0
- package/src/kit/authoring/project-authoring-session.ts +105 -0
- package/src/kit/authoring/provenance.ts +99 -0
- package/src/kit/authoring/react-canvas-navigation.ts +259 -0
- package/src/kit/authoring/react-design-canvas-style.ts +20 -0
- package/src/kit/authoring/react-story-board.ts +917 -0
- package/src/kit/authoring/selection-scope.ts +195 -0
- package/src/kit/authoring/shell-document-ops.ts +169 -0
- package/src/kit/authoring/story-board-chrome-fit.ts +107 -0
- package/src/kit/authoring/story-board-presentation.ts +111 -0
- package/src/kit/authoring/three-root.ts +67 -0
- package/src/kit/authoring/viewport-tool-context.ts +73 -0
- package/src/kit/authoring/viewport-tool-owner.ts +38 -0
- package/src/kit/authoring/world-session-state.ts +101 -0
- package/src/kit/authoring-seam-evidence.ts +300 -0
- package/src/kit/availability-tick.ts +66 -0
- package/src/kit/bitmap-label.ts +120 -0
- package/src/kit/boot-routing.ts +392 -0
- package/src/kit/breakpoint-state.ts +43 -0
- package/src/kit/build-identity.ts +16 -0
- package/src/kit/bytes-codec.ts +62 -0
- package/src/kit/cancellation-reason.ts +58 -0
- package/src/kit/canvas-frames.ts +88 -0
- package/src/kit/capture-camera-pose.ts +77 -0
- package/src/kit/capture-size.ts +88 -0
- package/src/kit/chrome-registry.ts +159 -0
- package/src/kit/chrome-slot-registry.ts +91 -0
- package/src/kit/collaboration-client.ts +264 -0
- package/src/kit/collaboration-presence.ts +41 -0
- package/src/kit/command-dispatch.ts +19 -0
- package/src/kit/command-listener.ts +2182 -0
- package/src/kit/command-registry.ts +71 -0
- package/src/kit/component-board-registry.ts +205 -0
- package/src/kit/component-states-registry.ts +199 -0
- package/src/kit/components/AlignToolbar.tsx +204 -0
- package/src/kit/components/ApplicationMenus.tsx +372 -0
- package/src/kit/components/AssetEditorShell.tsx +216 -0
- package/src/kit/components/AssetInspectorToolSection.tsx +124 -0
- package/src/kit/components/BoardRulers.tsx +354 -0
- package/src/kit/components/CanvasAddNodeDialogs.tsx +529 -0
- package/src/kit/components/CanvasSceneViewport.tsx +1195 -0
- package/src/kit/components/ChromeSlot.tsx +20 -0
- package/src/kit/components/CodeView.tsx +470 -0
- package/src/kit/components/CompactInspectorShell.tsx +39 -0
- package/src/kit/components/ConsolePanel.tsx +273 -0
- package/src/kit/components/GameplaySessionTimeline.tsx +295 -0
- package/src/kit/components/InspectionProjection.tsx +932 -0
- package/src/kit/components/Inspector.tsx +270 -0
- package/src/kit/components/InspectorCanvasPreview.tsx +35 -0
- package/src/kit/components/InspectorFieldsSection.tsx +290 -0
- package/src/kit/components/InspectorStoriesSection.tsx +92 -0
- package/src/kit/components/InspectorToolSection.tsx +96 -0
- package/src/kit/components/InspectorTransformSection.tsx +245 -0
- package/src/kit/components/LightExplorerPanel.tsx +433 -0
- package/src/kit/components/MediaProperties.tsx +145 -0
- package/src/kit/components/ProjectHeader.tsx +328 -0
- package/src/kit/components/ReactCanvasControls.tsx +358 -0
- package/src/kit/components/RootSelectionOverlay.tsx +3688 -0
- package/src/kit/components/RootTextEditor.tsx +79 -0
- package/src/kit/components/SaveStatus.tsx +70 -0
- package/src/kit/components/SurfaceCrashBoundary.tsx +105 -0
- package/src/kit/components/SurfaceStateOverlay.tsx +24 -0
- package/src/kit/components/ToolContributionSurfaces.tsx +49 -0
- package/src/kit/components/ToolHost.tsx +380 -0
- package/src/kit/components/Toolbar.tsx +811 -0
- package/src/kit/components/TransientHint.tsx +44 -0
- package/src/kit/components/VersionControlSection.tsx +470 -0
- package/src/kit/components/ViewportOverlaysMenu.tsx +177 -0
- package/src/kit/components/VolterLogo.tsx +18 -0
- package/src/kit/components/WorktreeSwitcher.tsx +712 -0
- package/src/kit/components/account-documents.tsx +1162 -0
- package/src/kit/components/asset-documents.tsx +794 -0
- package/src/kit/components/asset-editor-persistence.ts +216 -0
- package/src/kit/components/asset-selection-section.tsx +545 -0
- package/src/kit/components/asset-thumbnails.tsx +307 -0
- package/src/kit/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/kit/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/kit/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/kit/components/asset-viewers/JsonAssetDocument.tsx +98 -0
- package/src/kit/components/asset-viewers/OnlineAssetDetail.tsx +426 -0
- package/src/kit/components/asset-viewers/SourceAssetViewer.tsx +356 -0
- package/src/kit/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/kit/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/kit/components/asset-viewers/shader-source.ts +144 -0
- package/src/kit/components/board-guides.ts +150 -0
- package/src/kit/components/canvas-scene-hotkeys.ts +37 -0
- package/src/kit/components/canvas-temporary-pivot.ts +34 -0
- package/src/kit/components/core-utilities.tsx +94 -0
- package/src/kit/components/inspector-preview-section.tsx +223 -0
- package/src/kit/components/inspector-revert-label.ts +20 -0
- package/src/kit/components/inspector-selection.ts +42 -0
- package/src/kit/components/inspector-stories-gating.ts +171 -0
- package/src/kit/components/inspector-transform-subject.ts +11 -0
- package/src/kit/components/inspector-transform.ts +88 -0
- package/src/kit/components/kind-documents.tsx +544 -0
- package/src/kit/components/primitives/DraftColorInput.tsx +74 -0
- package/src/kit/components/project-tool-documents.tsx +402 -0
- package/src/kit/components/scene-documents.tsx +221 -0
- package/src/kit/components/status-contributions.tsx +407 -0
- package/src/kit/components/tool-documents.tsx +302 -0
- package/src/kit/components/tool-schema-form.tsx +262 -0
- package/src/kit/components/use-after-paint.ts +41 -0
- package/src/kit/components/use-project-image-assets.ts +86 -0
- package/src/kit/components/workspace-history.ts +32 -0
- package/src/kit/components/world-documents.tsx +570 -0
- package/src/kit/components/world-overlay-gestures.ts +1939 -0
- package/src/kit/composite-screenshot.ts +2238 -0
- package/src/kit/content-entry-source-registry.ts +184 -0
- package/src/kit/contribution-surfaces.ts +48 -0
- package/src/kit/coverage/canvas-reveal.ts +192 -0
- package/src/kit/coverage/design-time-surfaces.ts +101 -0
- package/src/kit/coverage/ontology-invariants.ts +466 -0
- package/src/kit/coverage/session-vitals.ts +503 -0
- package/src/kit/crash-null-boundary.ts +36 -0
- package/src/kit/creation-site-edit.ts +1491 -0
- package/src/kit/creation-site-registry.ts +160 -0
- package/src/kit/delegate-harness-registry.ts +134 -0
- package/src/kit/document-areas.ts +70 -0
- package/src/kit/document-context-registry.ts +193 -0
- package/src/kit/document-open-registry.ts +200 -0
- package/src/kit/document-play-extension.ts +221 -0
- package/src/kit/document-preview-source.ts +20 -0
- package/src/kit/document-renderer-session.ts +138 -0
- package/src/kit/document-stage-sessions.ts +26 -0
- package/src/kit/document-viewports.ts +120 -0
- package/src/kit/editor-api.ts +46 -0
- package/src/kit/editor-chrome-capture.ts +136 -0
- package/src/kit/editor-commands.ts +176 -0
- package/src/kit/editor-console.ts +580 -0
- package/src/kit/editor-current-view.ts +56 -0
- package/src/kit/editor-document-probe.ts +1166 -0
- package/src/kit/editor-git-client.ts +115 -0
- package/src/kit/editor-hotkeys.ts +728 -0
- package/src/kit/editor-lease-view.ts +39 -0
- package/src/kit/editor-lease.ts +415 -0
- package/src/kit/editor-mode.ts +19 -0
- package/src/kit/editor-notifications.ts +140 -0
- package/src/kit/editor-presence.ts +563 -0
- package/src/kit/editor-presentation-activity.ts +58 -0
- package/src/kit/editor-presentation-notice.ts +42 -0
- package/src/kit/editor-runtime.tsx +147 -0
- package/src/kit/editor-server-response.ts +86 -0
- package/src/kit/editor-session-attribution.ts +85 -0
- package/src/kit/editor-session-mode.ts +54 -0
- package/src/kit/editor-state-facets.ts +74 -0
- package/src/kit/editor-view-presentation.ts +777 -0
- package/src/kit/environment-images.ts +58 -0
- package/src/kit/eyedropper-session.ts +60 -0
- package/src/kit/files/file-provider.ts +62 -0
- package/src/kit/files/project-files.ts +270 -0
- package/src/kit/finders/index.ts +137 -0
- package/src/kit/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/kit/frame/frame-parts.ts +30 -0
- package/src/kit/framed-document-capture.ts +34 -0
- package/src/kit/game-globals-prelude.ts +143 -0
- package/src/kit/game-surface-defaults.ts +33 -0
- package/src/kit/gameplay-dom-recording.ts +318 -0
- package/src/kit/gameplay-export-state.ts +14 -0
- package/src/kit/gameplay-replay.ts +417 -0
- package/src/kit/gameplay-session-time.ts +9 -0
- package/src/kit/gameplay-sessions.ts +204 -0
- package/src/kit/hierarchy-component-marks.ts +298 -0
- package/src/kit/hierarchy-internals.ts +197 -0
- package/src/kit/hierarchy-kind-icon.ts +217 -0
- package/src/kit/hierarchy-menu-registry.ts +67 -0
- package/src/kit/hierarchy-node-rows.ts +307 -0
- package/src/kit/hierarchy-panel-view.ts +280 -0
- package/src/kit/hierarchy-projection.ts +76 -0
- package/src/kit/hierarchy-row-media.ts +45 -0
- package/src/kit/hierarchy-row-model.ts +308 -0
- package/src/kit/hierarchy-rows.ts +11 -0
- package/src/kit/hierarchy-walk.ts +86 -0
- package/src/kit/history/editor-session.ts +25 -0
- package/src/kit/history/history-commands.ts +147 -0
- package/src/kit/history/history-delegate.ts +187 -0
- package/src/kit/history/history-limit-notices.ts +43 -0
- package/src/kit/history/history-service.ts +1189 -0
- package/src/kit/history/persistence-coordinator.ts +35 -0
- package/src/kit/history/project-file-history.ts +386 -0
- package/src/kit/history/project-root-history-backends.ts +139 -0
- package/src/kit/history/resource-registry.ts +209 -0
- package/src/kit/history/snapshot-store.ts +103 -0
- package/src/kit/history/source-history-backend.ts +546 -0
- package/src/kit/history-types.ts +124 -0
- package/src/kit/hmr-registration-group.ts +67 -0
- package/src/kit/hmr-stable-react-context.ts +23 -0
- package/src/kit/hotkeys.ts +190 -0
- package/src/kit/inference-diagnostics.ts +69 -0
- package/src/kit/initial-project.ts +80 -0
- package/src/kit/inspection/active-subject.ts +571 -0
- package/src/kit/inspection/active-surface.ts +142 -0
- package/src/kit/inspection/compose-subject.ts +1055 -0
- package/src/kit/inspection/compose.ts +7 -0
- package/src/kit/inspection/display.ts +171 -0
- package/src/kit/inspection/document-subject.ts +109 -0
- package/src/kit/inspection/game-subject.ts +85 -0
- package/src/kit/inspection/null-subject.ts +119 -0
- package/src/kit/inspection/serialize.ts +357 -0
- package/src/kit/inspection/use-active-inspection.ts +180 -0
- package/src/kit/inspection-model.ts +542 -0
- package/src/kit/inspection-node-media.ts +58 -0
- package/src/kit/inspector-presentation.ts +203 -0
- package/src/kit/inspector-property-grouping.ts +64 -0
- package/src/kit/inspector-section-registry.ts +221 -0
- package/src/kit/instance-source-actions.ts +163 -0
- package/src/kit/js-heap.ts +71 -0
- package/src/kit/key-actions.ts +91 -0
- package/src/kit/keymap-presets.ts +428 -0
- package/src/kit/layout-policy.ts +31 -0
- package/src/kit/light-explorer-model.ts +134 -0
- package/src/kit/live-canvas-frame.ts +55 -0
- package/src/kit/live-document.ts +296 -0
- package/src/kit/live-gesture-lock.ts +50 -0
- package/src/kit/live-seam-evidence.ts +11 -0
- package/src/kit/live-session-registry.ts +220 -0
- package/src/kit/live-transition.ts +391 -0
- package/src/kit/manifest-project.ts +107 -0
- package/src/kit/module-fetch-diagnosis.ts +192 -0
- package/src/kit/mount-failure-report.ts +154 -0
- package/src/kit/native-selection-style.ts +497 -0
- package/src/kit/object3d-document-write-policy.ts +137 -0
- package/src/kit/packaged-runtime.ts +108 -0
- package/src/kit/palettes/maya.palette.json +57 -0
- package/src/kit/palettes/substance.palette.json +57 -0
- package/src/kit/performance-profiler.ts +367 -0
- package/src/kit/performance-sources.ts +69 -0
- package/src/kit/photograph-notice.ts +141 -0
- package/src/kit/play-boot-phase.ts +166 -0
- package/src/kit/play-camera-flight.ts +35 -0
- package/src/kit/png-encode.worker.ts +26 -0
- package/src/kit/presentation-surface.ts +248 -0
- package/src/kit/product-command.ts +90 -0
- package/src/kit/project-adapter.ts +1140 -0
- package/src/kit/project-asset-refresh.ts +23 -0
- package/src/kit/project-asset-roots.ts +68 -0
- package/src/kit/project-local-state.ts +151 -0
- package/src/kit/project-manager.ts +243 -0
- package/src/kit/project-module-changes.ts +201 -0
- package/src/kit/project-module-split.ts +270 -0
- package/src/kit/project-play-layers.ts +25 -0
- package/src/kit/project-provenance.ts +115 -0
- package/src/kit/project-ready.ts +42 -0
- package/src/kit/project-shape.ts +68 -0
- package/src/kit/project-tools.ts +107 -0
- package/src/kit/projection-types.ts +44 -0
- package/src/kit/readiness.ts +113 -0
- package/src/kit/renderer-resource-counts.ts +27 -0
- package/src/kit/reported-play-state.ts +90 -0
- package/src/kit/resolve-contributed-command.ts +14 -0
- package/src/kit/resolve-relative-specifier.ts +33 -0
- package/src/kit/retained-document-states.ts +91 -0
- package/src/kit/scene-document-plan.ts +320 -0
- package/src/kit/scene-live-open.ts +210 -0
- package/src/kit/scoped-game-css.ts +152 -0
- package/src/kit/served-url.ts +5 -0
- package/src/kit/session-close.ts +17 -0
- package/src/kit/session-tombstone.ts +127 -0
- package/src/kit/settings/settings-provider.ts +82 -0
- package/src/kit/settings-store.ts +348 -0
- package/src/kit/shell-document-state.ts +27 -0
- package/src/kit/shell-store-door.ts +45 -0
- package/src/kit/shell-store.ts +722 -0
- package/src/kit/source-conflict.ts +122 -0
- package/src/kit/stage-context.ts +377 -0
- package/src/kit/stage-invalidation.ts +25 -0
- package/src/kit/stage-store-registry.ts +69 -0
- package/src/kit/startup-failure.ts +80 -0
- package/src/kit/state-report-deferral.ts +73 -0
- package/src/kit/storage/host-files-storage.ts +97 -0
- package/src/kit/storage/http-storage.ts +174 -0
- package/src/kit/storage/index.ts +75 -0
- package/src/kit/storage/mem-storage.ts +158 -0
- package/src/kit/storage/path-lock.ts +44 -0
- package/src/kit/storage/paths.ts +26 -0
- package/src/kit/storage-types.ts +127 -0
- package/src/kit/stories/StoryPreviewMount.tsx +306 -0
- package/src/kit/stories/compose-project-stories.ts +255 -0
- package/src/kit/stories/prefabs-finder.ts +54 -0
- package/src/kit/stories/prefabs-from-stories.ts +182 -0
- package/src/kit/stories/project-story-regions.ts +24 -0
- package/src/kit/stories/story-capture.ts +579 -0
- package/src/kit/stories/story-declared-medium.ts +126 -0
- package/src/kit/stories/story-discovery.ts +176 -0
- package/src/kit/stories/story-dom-runtime.ts +78 -0
- package/src/kit/stories/story-grouping.ts +111 -0
- package/src/kit/stories/story-mount-turn.ts +27 -0
- package/src/kit/stories/story-presentation.ts +215 -0
- package/src/kit/stories/story-preview-component.ts +7 -0
- package/src/kit/stories/story-registry.ts +530 -0
- package/src/kit/stories-scope.ts +35 -0
- package/src/kit/story-document-openers.ts +36 -0
- package/src/kit/story-thumbnails.ts +47 -0
- package/src/kit/surface-keyboard.ts +101 -0
- package/src/kit/surface-state.ts +135 -0
- package/src/kit/system-seam-evidence.ts +72 -0
- package/src/kit/tab-census.ts +202 -0
- package/src/kit/tab-lifecycle-client.ts +227 -0
- package/src/kit/theme-library.ts +897 -0
- package/src/kit/theme-preference.ts +429 -0
- package/src/kit/three-viewport-presentation.ts +23 -0
- package/src/kit/tool-contribution-play.ts +74 -0
- package/src/kit/tool-loader.ts +1918 -0
- package/src/kit/transform-mode-request.ts +66 -0
- package/src/kit/transient-hint.ts +78 -0
- package/src/kit/transport-strip.tsx +174 -0
- package/src/kit/ui-source/adapter-region-includes.ts +238 -0
- package/src/kit/ui-source/file-region-resolver.ts +302 -0
- package/src/kit/ui-source/inspect.ts +775 -0
- package/src/kit/ui-source/source-write-backend.ts +605 -0
- package/src/kit/ui-source/tier-source-write-backend.ts +279 -0
- package/src/kit/user-local-state.ts +105 -0
- package/src/kit/viewport-activation-timings.ts +840 -0
- package/src/kit/viewport-editor-controls.ts +22 -0
- package/src/kit/viewport-presentation.ts +668 -0
- package/src/kit/viewport-surface-status.tsx +55 -0
- package/src/kit/wait-until.ts +37 -0
- package/src/kit/worker-call-metrics.ts +166 -0
- package/src/kit/workspace-areas.ts +191 -0
- package/src/kit/workspace-aux-commands.ts +11 -0
- package/src/kit/workspace-available-documents.ts +142 -0
- package/src/kit/workspace-core-utilities.ts +31 -0
- package/src/kit/workspace-document-ids.ts +59 -0
- package/src/kit/workspace-document-registry.ts +624 -0
- package/src/kit/workspace-document-restore.ts +146 -0
- package/src/kit/workspace-host-commands.ts +141 -0
- package/src/kit/workspace-persistence-gate.ts +40 -0
- package/src/kit/workspace-play-utilities.ts +44 -0
- package/src/kit/workspace-presets.ts +446 -0
- package/src/kit/workspace-regions.ts +276 -0
- package/src/kit/workspace-static-panels.ts +73 -0
- package/src/kit/workspace-status-registry.ts +121 -0
- package/src/kit/workspace-storage.ts +35 -0
- package/src/kit/workspace-style.ts +226 -0
- package/src/kit/workspace-utility-commands.ts +74 -0
- package/src/kit/workspace-utility-registry.ts +263 -0
- package/src/kit/world-adoption-event.ts +23 -0
- package/src/kit/world-adoption.ts +115 -0
- package/src/kit/world-canvas-viewport-state.ts +35 -0
- package/src/kit/world-document-routing.ts +104 -0
- package/src/kit/world-pan-state.ts +198 -0
- package/src/kit/write-pipe.ts +173 -0
- package/src/layout-arrangements.ts +5 -0
- package/src/layouts.tsx +108 -0
- package/src/looks.ts +16 -0
- package/src/project/output-roots.ts +73 -0
- package/src/project/tab-census.ts +155 -0
- package/src/project-tool-catalog.ts +104 -0
- package/src/selection.tsx +107 -0
- package/src/services.ts +18 -0
- package/src/session/build-report.ts +22 -0
- package/src/session/collaboration-types.ts +262 -0
- package/src/session/command-table.ts +327 -0
- package/src/session/discovery.ts +100 -0
- package/src/session/editor-brand.ts +48 -0
- package/src/session/editor-compatibility.ts +317 -0
- package/src/session/editor-control-lifecycle.ts +68 -0
- package/src/session/editor-control-protocol.ts +5 -0
- package/src/session/entrypoint-selection-readers.ts +66 -0
- package/src/session/entrypoint-selection-source.ts +120 -0
- package/src/session/game-css-scope.ts +30 -0
- package/src/session/hosted-attachment.ts +225 -0
- package/src/session/limited-view.ts +82 -0
- package/src/session/product-create.ts +24 -0
- package/src/session/product-locator.ts +478 -0
- package/src/session/project-module-url.ts +242 -0
- package/src/session/project-serving.ts +164 -0
- package/src/session/project-upgrade.ts +403 -0
- package/src/session/registry-format.ts +210 -0
- package/src/session/relative-path-guard.ts +56 -0
- package/src/session/scoped-game-css.ts +461 -0
- package/src/session/source-glob.ts +15 -0
- package/src/session/tool-contribution-convention.ts +123 -0
- package/src/session/workbench-locator.ts +712 -0
- package/src/session.ts +41 -0
- package/src/share.ts +160 -0
- package/src/source-analysis.ts +28 -0
- package/src/source-authoring.ts +439 -0
- package/src/tools/errors.ts +91 -0
- package/src/tools/provider-execution.ts +70 -0
- package/src/tools/registry.ts +341 -0
- package/src/tools/types.ts +159 -0
- package/src/transport.ts +100 -0
- package/src/types.ts +1693 -0
- package/src/views.ts +164 -0
- package/src/widgets/design-system.ts +93 -0
- package/src/widgets/editor-appearance.ts +151 -0
- package/src/widgets/editor-material.ts +83 -0
- package/src/widgets/icon-set-registry.ts +105 -0
- package/src/widgets/index.ts +71 -0
- package/src/widgets/inspector-widgets/AlignmentGrid.tsx +182 -0
- package/src/widgets/inspector-widgets/AssetSlotPicker.tsx +123 -0
- package/src/widgets/inspector-widgets/BorderEditor.tsx +309 -0
- package/src/widgets/inspector-widgets/ColorPicker.tsx +549 -0
- package/src/widgets/inspector-widgets/CurveEditor.tsx +359 -0
- package/src/widgets/inspector-widgets/FilterEditor.tsx +108 -0
- package/src/widgets/inspector-widgets/FontPicker.tsx +191 -0
- package/src/widgets/inspector-widgets/GradientEditor.tsx +623 -0
- package/src/widgets/inspector-widgets/ScrubbableInput.tsx +180 -0
- package/src/widgets/inspector-widgets/ShadowEditor.tsx +319 -0
- package/src/widgets/inspector-widgets/color-utils.ts +201 -0
- package/src/widgets/inspector-widgets/curve-utils.ts +212 -0
- package/src/widgets/inspector-widgets/index.ts +25 -0
- package/src/widgets/inspector-widgets/shared.tsx +140 -0
- package/src/widgets/interactive-edit-scope.ts +33 -0
- package/src/widgets/patterns/Dialog.tsx +140 -0
- package/src/widgets/patterns/Fields.tsx +44 -0
- package/src/widgets/patterns/List.tsx +25 -0
- package/src/widgets/patterns/StateSurface.tsx +40 -0
- package/src/widgets/patterns/Surfaces.tsx +122 -0
- package/src/widgets/patterns/Tabs.tsx +80 -0
- package/src/widgets/patterns/Toolbar.tsx +72 -0
- package/src/widgets/patterns/Tree.tsx +72 -0
- package/src/widgets/primitives/AnchoredMenu.tsx +260 -0
- package/src/widgets/primitives/Button.tsx +62 -0
- package/src/widgets/primitives/ColorInput.tsx +78 -0
- package/src/widgets/primitives/DraftTextInput.tsx +63 -0
- package/src/widgets/primitives/EditorIcon.tsx +157 -0
- package/src/widgets/primitives/FormControls.tsx +88 -0
- package/src/widgets/primitives/HoverPreview.tsx +96 -0
- package/src/widgets/primitives/JsonInput.tsx +113 -0
- package/src/widgets/primitives/Layout.tsx +100 -0
- package/src/widgets/primitives/Menu.tsx +161 -0
- package/src/widgets/primitives/NumberInput.tsx +169 -0
- package/src/widgets/primitives/Panel.tsx +80 -0
- package/src/widgets/primitives/SectionHeader.tsx +77 -0
- package/src/widgets/primitives/Text.tsx +54 -0
- package/src/widgets/primitives/ThemeRootPortal.tsx +52 -0
- package/src/widgets/primitives/Tooltip.tsx +204 -0
- package/src/widgets/primitives/Vec3Input.tsx +70 -0
- package/src/widgets/primitives/banner-tones.ts +32 -0
- package/src/widgets/primitives/clamp-to-viewport.ts +44 -0
- package/src/widgets/primitives/editor-icons.ts +254 -0
- package/src/widgets/primitives/panel-header-styles.ts +42 -0
- package/src/widgets/theme.ts +2841 -0
- package/src/widgets/z-index.ts +25 -0
|
@@ -0,0 +1,531 @@
|
|
|
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/project/adapter';
|
|
14
|
+
import {
|
|
15
|
+
recordAuthoringConsumerUse,
|
|
16
|
+
recordAuthoringWriteConsumerUse,
|
|
17
|
+
} from '@volter/sdk/kit/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 duplicateManyAuthoringNodes(
|
|
324
|
+
adapter: AuthoringAdapter,
|
|
325
|
+
nodeIds: readonly string[],
|
|
326
|
+
): StructuralWriteOutcome {
|
|
327
|
+
const provider = adapter.structure;
|
|
328
|
+
if (!provider?.duplicateMany) return;
|
|
329
|
+
return structureWrite(adapter, 'duplicateMany',
|
|
330
|
+
`the editor duplicated ${nodeIds.length} selected node(s) as one operation`,
|
|
331
|
+
() => provider.duplicateMany?.(nodeIds));
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export function reparentAuthoringNode(
|
|
335
|
+
adapter: AuthoringAdapter,
|
|
336
|
+
nodeId: string,
|
|
337
|
+
parentId: string | null,
|
|
338
|
+
): StructuralWriteOutcome {
|
|
339
|
+
const provider = adapter.structure;
|
|
340
|
+
if (!provider) return;
|
|
341
|
+
return structureWrite(
|
|
342
|
+
adapter,
|
|
343
|
+
'reparent',
|
|
344
|
+
`the editor reparented ${nodeId} under ${parentId ?? 'the document root'}`,
|
|
345
|
+
() => provider.reparent(nodeId, parentId),
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function reorderAuthoringNode(
|
|
350
|
+
adapter: AuthoringAdapter,
|
|
351
|
+
nodeId: string,
|
|
352
|
+
beforeSiblingId: string | null,
|
|
353
|
+
): StructuralWriteOutcome {
|
|
354
|
+
const provider = adapter.structure;
|
|
355
|
+
if (!provider?.reorder) return;
|
|
356
|
+
return structureWrite(
|
|
357
|
+
adapter,
|
|
358
|
+
'reorder',
|
|
359
|
+
`the editor reordered ${nodeId} before ${beforeSiblingId ?? 'the end'}`,
|
|
360
|
+
() => provider.reorder?.(nodeId, beforeSiblingId),
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export function wrapAuthoringNode(
|
|
365
|
+
adapter: AuthoringAdapter,
|
|
366
|
+
nodeId: string,
|
|
367
|
+
wrapperTag?: string,
|
|
368
|
+
): StructuralWriteOutcome {
|
|
369
|
+
const provider = adapter.structure;
|
|
370
|
+
if (!provider?.wrap) return;
|
|
371
|
+
return structureWrite(adapter, 'wrap', `the editor wrapped ${nodeId}`, () =>
|
|
372
|
+
provider.wrap?.(nodeId, wrapperTag),
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export function unwrapAuthoringNode(
|
|
377
|
+
adapter: AuthoringAdapter,
|
|
378
|
+
nodeId: string,
|
|
379
|
+
): StructuralWriteOutcome {
|
|
380
|
+
const provider = adapter.structure;
|
|
381
|
+
if (!provider?.unwrap) return;
|
|
382
|
+
return structureWrite(adapter, 'unwrap', `the editor unwrapped ${nodeId}`, () =>
|
|
383
|
+
provider.unwrap?.(nodeId),
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export function groupAuthoringNodes(
|
|
388
|
+
adapter: AuthoringAdapter,
|
|
389
|
+
nodeIds: readonly string[],
|
|
390
|
+
): StructuralIdWrite<string | null> {
|
|
391
|
+
const provider = adapter.structure;
|
|
392
|
+
if (!provider?.group) return { id: null, ack: undefined };
|
|
393
|
+
return structureIdWrite(
|
|
394
|
+
adapter,
|
|
395
|
+
'group',
|
|
396
|
+
`the editor grouped ${nodeIds.length} selected node(s)`,
|
|
397
|
+
() => provider.group?.(nodeIds) ?? { id: null, ack: undefined },
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export function ungroupAuthoringNode(
|
|
402
|
+
adapter: AuthoringAdapter,
|
|
403
|
+
nodeId: string,
|
|
404
|
+
): StructuralIdsWrite {
|
|
405
|
+
const provider = adapter.structure;
|
|
406
|
+
if (!provider?.ungroup) return { ids: [], ack: undefined };
|
|
407
|
+
const result = recordAuthoringConsumerUse({
|
|
408
|
+
adapter,
|
|
409
|
+
seam: 'editor.structure.ungroup',
|
|
410
|
+
stage: 'effect',
|
|
411
|
+
detail: `the editor ungrouped ${nodeId}`,
|
|
412
|
+
run: () => provider.ungroup?.(nodeId) ?? { ids: [], ack: undefined },
|
|
413
|
+
});
|
|
414
|
+
return {
|
|
415
|
+
...result,
|
|
416
|
+
ack: structureWrite(adapter, 'ungroup', `the editor ungrouped ${nodeId}`, () => result.ack),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export async function copyAuthoringNodes(
|
|
421
|
+
adapter: AuthoringAdapter,
|
|
422
|
+
nodeIds: readonly string[],
|
|
423
|
+
): Promise<boolean> {
|
|
424
|
+
const provider = adapter.structure;
|
|
425
|
+
if (!provider?.copy) return false;
|
|
426
|
+
return await recordAuthoringConsumerUse({
|
|
427
|
+
adapter,
|
|
428
|
+
seam: 'editor.structure.copy',
|
|
429
|
+
stage: 'effect',
|
|
430
|
+
detail: `the editor copied ${nodeIds.length} selected node(s)`,
|
|
431
|
+
run: () => provider.copy?.(nodeIds) ?? false,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
async function clipboardStructureWrite(
|
|
436
|
+
adapter: AuthoringAdapter,
|
|
437
|
+
verb: 'cut' | 'paste',
|
|
438
|
+
detail: string,
|
|
439
|
+
run: () => StructuralClipboardOutcome,
|
|
440
|
+
): Promise<false | WriteAck> {
|
|
441
|
+
const outcome = await recordAuthoringConsumerUse({
|
|
442
|
+
adapter,
|
|
443
|
+
seam: `editor.structure.${verb}`,
|
|
444
|
+
stage: 'effect',
|
|
445
|
+
detail,
|
|
446
|
+
run,
|
|
447
|
+
});
|
|
448
|
+
if (outcome === false) return false;
|
|
449
|
+
await structureWrite(adapter, verb, detail, () => outcome);
|
|
450
|
+
return outcome;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export function cutAuthoringNodes(
|
|
454
|
+
adapter: AuthoringAdapter,
|
|
455
|
+
nodeIds: readonly string[],
|
|
456
|
+
): Promise<false | WriteAck> {
|
|
457
|
+
const provider = adapter.structure;
|
|
458
|
+
if (!provider?.cut) return Promise.resolve(false);
|
|
459
|
+
return clipboardStructureWrite(
|
|
460
|
+
adapter,
|
|
461
|
+
'cut',
|
|
462
|
+
`the editor cut ${nodeIds.length} selected node(s)`,
|
|
463
|
+
() => provider.cut?.(nodeIds) ?? false,
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
export function pasteAuthoringNodes(
|
|
468
|
+
adapter: AuthoringAdapter,
|
|
469
|
+
parentId: string | null,
|
|
470
|
+
): Promise<false | WriteAck> {
|
|
471
|
+
const provider = adapter.structure;
|
|
472
|
+
if (!provider?.paste) return Promise.resolve(false);
|
|
473
|
+
return clipboardStructureWrite(
|
|
474
|
+
adapter,
|
|
475
|
+
'paste',
|
|
476
|
+
`the editor pasted nodes under ${parentId ?? 'the document root'}`,
|
|
477
|
+
() => provider.paste?.(parentId) ?? false,
|
|
478
|
+
);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* ADAPTER-OWNED SPATIAL HANDLES, evidence-recorded — the same consumer wrapper
|
|
483
|
+
* every seam above gets, for the provider the 3D viewport raycasts.
|
|
484
|
+
*
|
|
485
|
+
* It lives HERE rather than beside the DOM world overlay it was written next
|
|
486
|
+
* to (`components/world-overlay-gestures.ts`) because its OTHER caller is
|
|
487
|
+
* `editor-viewport.ts`, and that surface must not import the overlay's graph:
|
|
488
|
+
* the overlay reaches the composite adapter, the react-world adapter and the
|
|
489
|
+
* UI source inspector, which is 124 files for a WeakMap and three recorded
|
|
490
|
+
* calls (ARCHITECTURE-CORE §Editor chrome, "the viewport stack is separable").
|
|
491
|
+
* Nothing about the wrapper was overlay-specific; this is its family.
|
|
492
|
+
*/
|
|
493
|
+
const recordedSpatialHandles = new WeakMap<
|
|
494
|
+
AuthoringAdapter,
|
|
495
|
+
{ readonly provider: SpatialHandlesProvider; readonly recorded: SpatialHandlesProvider }
|
|
496
|
+
>();
|
|
497
|
+
|
|
498
|
+
/** Stable evidence-aware view of adapter-owned spatial handles. */
|
|
499
|
+
export function spatialHandlesForAdapter(owner: AuthoringAdapter): SpatialHandlesProvider | null {
|
|
500
|
+
const provider = owner.spatialHandles;
|
|
501
|
+
if (!provider) return null;
|
|
502
|
+
const cached = recordedSpatialHandles.get(owner);
|
|
503
|
+
if (cached?.provider === provider) return cached.recorded;
|
|
504
|
+
const recorded: SpatialHandlesProvider = {
|
|
505
|
+
layers: (id) =>
|
|
506
|
+
recordAuthoringConsumerUse({
|
|
507
|
+
adapter: owner,
|
|
508
|
+
seam: 'editor.spatialHandles.layers',
|
|
509
|
+
stage: 'operation',
|
|
510
|
+
detail: `the viewport read adapter-owned spatial layers for ${id}`,
|
|
511
|
+
run: () => provider.layers(id),
|
|
512
|
+
}),
|
|
513
|
+
preview: (id, handleId, worldPosition) =>
|
|
514
|
+
recordAuthoringConsumerUse({
|
|
515
|
+
adapter: owner,
|
|
516
|
+
seam: 'editor.spatialHandles.preview',
|
|
517
|
+
stage: 'effect',
|
|
518
|
+
detail: `the viewport previewed spatial handle ${handleId} for ${id}`,
|
|
519
|
+
run: () => provider.preview(id, handleId, worldPosition),
|
|
520
|
+
}),
|
|
521
|
+
commit: (id, handleId, worldPosition) =>
|
|
522
|
+
recordAuthoringWriteConsumerUse({
|
|
523
|
+
adapter: owner,
|
|
524
|
+
seam: 'editor.spatialHandles.commit',
|
|
525
|
+
detail: `the viewport committed spatial handle ${handleId} for ${id}`,
|
|
526
|
+
run: () => provider.commit(id, handleId, worldPosition),
|
|
527
|
+
}),
|
|
528
|
+
};
|
|
529
|
+
recordedSpatialHandles.set(owner, { provider, recorded });
|
|
530
|
+
return recorded;
|
|
531
|
+
}
|