@volter/editor-game 0.5.65 → 0.5.67
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/contributions/audio-unlock.service.ts +2 -2
- package/contributions/autoplay.service.ts +1 -1
- package/contributions/bridge.command.ts +3 -3
- package/contributions/canvas/component-board.service.ts +16 -0
- package/contributions/canvas/design-time-mount.service.ts +45 -0
- package/contributions/canvas-story-capture.service.ts +12 -0
- package/contributions/edit-mode-audio.service.ts +2 -2
- package/contributions/edit-mode-networking.service.ts +1 -1
- package/contributions/gameplay.command.ts +4 -4
- package/contributions/generation.service.ts +3 -3
- package/contributions/generations.status.tsx +1 -1
- package/contributions/godot.palette.json +99 -0
- package/contributions/godot.style.ts +82 -0
- package/contributions/godot.view.ts +75 -0
- package/contributions/ingest.service.ts +4 -4
- package/contributions/instances.command.ts +1 -1
- package/contributions/navmesh.menu.ts +1 -1
- package/contributions/network-observer.service.ts +14 -0
- package/contributions/play.command.ts +11 -5
- package/contributions/react/component-board.service.ts +1 -1
- package/contributions/react/design-time-mount.service.ts +1 -1
- package/contributions/react/react-inspector.service.ts +2 -2
- package/contributions/scene-document.service.ts +5 -5
- package/contributions/state-watch.menu.ts +1 -1
- package/contributions/state-watch.utility.tsx +1 -1
- package/contributions/team-playtest.service.ts +4 -4
- package/contributions/three/component-board.service.ts +1 -1
- package/contributions/three/component-verbs.command.ts +8 -8
- package/contributions/three/three-authoring.service.ts +8 -5
- package/contributions/three-story-capture.service.ts +12 -0
- package/contributions/unity.palette.json +102 -0
- package/contributions/unity.style.ts +72 -0
- package/contributions/unity.view.ts +82 -0
- package/contributions/unreal.palette.json +105 -0
- package/contributions/unreal.style.ts +66 -0
- package/contributions/unreal.view.ts +93 -0
- package/dist-node/serving.mjs +16 -0
- package/package.json +33 -16
- package/serving/index.ts +27 -0
- package/src/asset-budget/AssetBudgetPanel.tsx +1 -1
- package/src/asset-budget/asset-budget-model.ts +4 -4
- package/src/asset-budget/optimize-apply.ts +7 -7
- package/src/audio/AudioDebuggerPanel.tsx +1 -1
- package/src/bridge/dispatch.ts +16 -16
- package/src/bridge/live-frames.ts +1 -1
- package/src/bridge/screenshot.ts +6 -6
- package/src/build/BuildProfilesPanel.tsx +3 -3
- package/src/canvas/canvas-board/CanvasBoardDocument.tsx +676 -0
- package/src/canvas/canvas-board/canvas-board-model.ts +407 -0
- package/src/canvas/canvas-board/canvas-component-board.ts +56 -0
- package/src/canvas/canvas-design-mount.ts +524 -0
- package/src/canvas/design-time-canvas-mount.ts +79 -0
- package/src/coverage/live-authoring-surface.ts +6 -6
- package/src/coverage/live-project-verbs.ts +2 -2
- package/src/coverage/native-system-coverage.ts +6 -6
- package/src/coverage/root-coverage.ts +1 -1
- package/src/coverage/session-coverage.ts +5 -5
- package/src/design-system-stories/ApplicationChrome.stories.tsx +5 -5
- package/src/design-system-stories/InspectorNarrowBodies.stories.tsx +13 -53
- package/src/edit-mode/edit-mode-audio.ts +4 -4
- package/src/edit-mode/edit-mode-networking.ts +2 -2
- package/src/game-document/GameCaptureFrameButton.tsx +2 -2
- package/src/game-document/GameDocument.tsx +2 -2
- package/src/game-document/GamePanel.tsx +8 -8
- package/src/game-document/InstanceInspectorPicker.tsx +2 -2
- package/src/game-document/crowd-debug.ts +1 -1
- package/src/game-document/device-preview.ts +10 -11
- package/src/game-document/physics-debug.ts +1 -1
- package/src/generation/GenerationActivity.tsx +6 -8
- package/src/generation/generation-documents.tsx +8 -8
- package/src/generation/generation-jobs.ts +2 -2
- package/src/generation/generation-presentation.ts +1 -1
- package/src/host/adapter-reach.ts +1 -1
- package/src/host/adapter-runtime-bindings.ts +97 -6
- package/src/host/api/configurations.ts +2 -2
- package/src/host/authoring/babylon-authoring-adapter.ts +8 -8
- package/src/host/authoring/contract-hierarchy-authoring.ts +1 -1
- package/src/host/authoring/contract-scenes-stories.ts +1 -1
- package/src/host/authoring/creation-site-related.ts +2 -2
- package/src/host/authoring/ephemeral-persistence.ts +1 -1
- package/src/host/authoring/gesture-persist.ts +2 -2
- package/src/host/authoring/ingest-data-writer.ts +1 -1
- package/src/host/authoring/ingest-source-persistence.ts +8 -8
- package/src/host/authoring/mount-isolated-pixi-screen.ts +1 -1
- package/src/host/authoring/mounted-authoring.ts +4 -4
- package/src/host/authoring/phaser-live-authoring-adapter.ts +4 -4
- package/src/host/authoring/pixi-authoring-adapter.ts +42 -17
- package/src/host/authoring/pixi-creation-site-write-target.ts +2 -2
- package/src/host/authoring/pixi-live-write-target.ts +7 -7
- package/src/host/authoring/pixi-source-identity.ts +3 -3
- package/src/host/authoring/pixi-source-write-target.ts +1614 -0
- package/src/host/authoring/pixi-still-presentation.ts +2 -2
- package/src/host/authoring/pixi-structure-history.ts +3 -3
- package/src/host/authoring/pixi-transform-channels.ts +16 -14
- package/src/host/authoring/source-persistence-backend.ts +6 -6
- package/src/host/authoring/struct-write-pipe.ts +3 -3
- package/src/host/binding-resolver.ts +8 -9
- package/src/host/browser-transpile.ts +2 -2
- package/src/host/canvas-entry-runtime.ts +59 -48
- package/src/host/canvas-preview-frames.ts +482 -0
- package/src/host/components/CameraAuthoringOverlay.tsx +1 -1
- package/src/host/components/HeaderTelemetry.tsx +9 -16
- package/src/host/components/PixiIsolationSceneContent.tsx +17 -16
- package/src/host/components/ThreeIsolationSceneContent.tsx +5 -5
- package/src/host/components/frame-debugger-model.ts +2 -2
- package/src/host/components/header-telemetry-model.ts +2 -2
- package/src/host/components/scene-document.tsx +29 -61
- package/src/host/components/utility-view-state.ts +1 -1
- package/src/host/components/world-root-stage-binding.tsx +17 -26
- package/src/host/components/world-root-stage.ts +130 -63
- package/src/host/coverage/capability-coverage.ts +13 -1
- package/src/host/coverage/game-contract-seam-evidence.ts +1 -1
- package/src/host/coverage/project-verb-coverage.ts +2 -17
- package/src/host/coverage/system-adapter-coverage.ts +4 -5
- package/src/host/design-system-stories/fixtures/editor-runtime.tsx +14 -8
- package/src/host/document-preview-three.ts +2 -2
- package/src/host/entry-adjudication.ts +6 -6
- package/src/host/game-css-scope-transform.ts +4 -0
- package/src/host/game-module-access.ts +1 -1
- package/src/host/game-realm-page.ts +16 -8
- package/src/host/game-realm-reclaim.ts +1 -1
- package/src/host/gameplay-export.ts +25 -14
- package/src/host/gameplay-recording.ts +5 -5
- package/src/host/gated-globals.ts +6 -6
- package/src/host/history/json-history-resource.ts +3 -3
- package/src/host/instance-extract-actions.ts +1 -1
- package/src/host/instance-fork-actions.ts +1 -1
- package/src/host/projection/dom.ts +2 -2
- package/src/host/projection/pixi.ts +25 -3
- package/src/host/r3f-entry-runtime.ts +65 -34
- package/src/host/react-mount-runtime.ts +8 -49
- package/src/host/realm-services.ts +2 -2
- package/src/host/roots/canvas-root.tsx +361 -0
- package/src/host/roots/module-root.ts +1 -1
- package/src/host/roots/r3f-root.tsx +473 -0
- package/src/host/roots/react-root.ts +9 -43
- package/src/host/scene-view-drawability.ts +2 -2
- package/src/host/served-bundle-runtime-modules.ts +1 -19
- package/src/host/server-log-bridge.ts +3 -3
- package/src/host/stories/mounted-story-viewport-source.ts +1 -1
- package/src/host/stories/pixi-story-model.ts +30 -0
- package/src/host/stories/story-media-captures.ts +46 -0
- package/src/host/stories/story-media-presence.ts +3 -3
- package/src/host/stories/story-pixi-preview.ts +408 -0
- package/src/host/stories/story-three-preview.ts +806 -0
- package/src/host/stories/three-story-captures.ts +35 -0
- package/src/host/story-three-preview-runtime.ts +56 -0
- package/src/host/three-ingest-runtime.ts +1 -1
- package/src/host/use-active-performance-source.ts +3 -3
- package/src/host/viewport-pose-memory.ts +1 -1
- package/src/host/viewport-root-presentation.ts +6 -5
- package/src/ingest/active-ingest.ts +2 -2
- package/src/ingest/authoring/ingest-dom-surface-authoring.ts +4 -4
- package/src/ingest/authoring/ingest-root-adapter.ts +13 -13
- package/src/ingest/capture-wait-report.ts +1 -1
- package/src/ingest/deferred-ingest-play.ts +11 -10
- package/src/ingest/discovery-public-ingest.ts +2 -2
- package/src/ingest/ingest-boot-viewport.ts +6 -8
- package/src/ingest/ingest-canvas-scene-document.tsx +17 -16
- package/src/ingest/ingest-canvas-scene.ts +5 -8
- package/src/ingest/ingest-evidence-hook.ts +1 -1
- package/src/ingest/ingest-frame-snapshot.ts +1 -1
- package/src/ingest/ingest-play-control.ts +4 -4
- package/src/ingest/ingest-render-debug.ts +11 -11
- package/src/ingest/ingest-siblings.ts +16 -28
- package/src/ingest/module-mode.ts +18 -19
- package/src/ingest/mount-canvas-ingest-root.ts +27 -27
- package/src/ingest/mount-coverage.ts +4 -4
- package/src/ingest/mount-dom-ingest-root.ts +16 -16
- package/src/ingest/mount-ingest-root.ts +14 -14
- package/src/ingest/mount-three-ingest-root.ts +12 -12
- package/src/ingest/resolve-canvas.ts +1 -1
- package/src/ingest/served-html-boot.ts +1 -1
- package/src/ingest/surface-canvas.ts +1 -1
- package/src/ingest/unmount-ingest-root.ts +7 -7
- package/src/navmesh/navmesh-handler.ts +24 -16
- package/src/network/NetworkInspectorPanel.tsx +449 -14
- package/src/network/network-inspector-model.ts +14 -2
- package/src/play/play-log-events.ts +1 -1
- package/src/play/play-mode.ts +99 -142
- package/src/play/play-recording.ts +2 -2
- package/src/play/react-play-live-authoring.ts +3 -3
- package/src/play/run-selection.ts +93 -0
- package/src/play-bar/PlayBar.tsx +20 -39
- package/src/profiler/FrameDebuggerPanel.tsx +1 -1
- package/src/profiler/PerformancePanel.tsx +4 -4
- package/src/react/design-time-react-mount.ts +37 -85
- package/src/react/dom-authoring-adapter.ts +11 -11
- package/src/react/react-inspector-section.tsx +13 -13
- package/src/react/react-world-authoring-adapter.ts +31 -143
- package/src/react/story-documents/story-documents.tsx +18 -22
- package/src/react/ui-board-document.tsx +10 -11
- package/src/react/ui-component-board.ts +5 -5
- package/src/runtime/adapter/audio-meter.ts +21 -0
- package/src/runtime/adapter/first-party-audio-system.ts +230 -0
- package/src/runtime/adapter/ingest/contract-debug-adapter.ts +114 -0
- package/src/runtime/adapter/ingest/contract-system-adapters.ts +256 -0
- package/src/runtime/adapter/ingest/merge-debug-adapters.ts +197 -0
- package/src/runtime/adapter/ingest/observation-debug-adapter.ts +162 -0
- package/src/runtime/adapter/ingest/upstream-pin.ts +51 -0
- package/src/runtime/adapter/native-debug-module.ts +498 -0
- package/src/runtime/audio/bus-mixer.ts +161 -0
- package/src/runtime/audio/pose-guard.ts +80 -0
- package/src/runtime/core/frame-pacing.ts +126 -0
- package/src/runtime/core/game-loop.ts +225 -0
- package/src/runtime/core/game-scoped-slot.ts +28 -0
- package/src/runtime/core/seeded-random.ts +162 -0
- package/src/runtime/core/sim-clock.ts +391 -0
- package/src/runtime/core/system-runner.ts +269 -0
- package/src/runtime/core/types.ts +104 -0
- package/src/runtime/create-runtime.ts +1128 -0
- package/src/runtime/debug-bridge.ts +570 -0
- package/src/runtime/debug-registry.ts +899 -0
- package/src/runtime/dev/chrome-trace.ts +153 -0
- package/src/runtime/dev/instruments.ts +403 -0
- package/src/runtime/dev/logger.ts +119 -0
- package/src/runtime/dev/performance-profiler.ts +367 -0
- package/src/runtime/dev/register-render-vitals.ts +276 -0
- package/src/runtime/dev/render-census.ts +354 -0
- package/src/runtime/dev/render-debug-adapter.ts +218 -0
- package/src/runtime/dev/render-memory.ts +226 -0
- package/src/runtime/dev/render-vitals.ts +338 -0
- package/src/runtime/dev/static-batch-advisor.ts +188 -0
- package/src/runtime/dev/webgl-frame-capture.ts +366 -0
- package/src/runtime/dev/webgl-gpu-timer.ts +53 -0
- package/src/runtime/dev-build.ts +47 -0
- package/src/runtime/game.ts +1636 -0
- package/src/runtime/gameplay-rng-trap.ts +135 -0
- package/src/runtime/host-context.ts +64 -0
- package/src/runtime/input-router.ts +169 -0
- package/src/runtime/mount-manifest.ts +480 -0
- package/src/runtime/pixi/authoring.ts +706 -0
- package/src/runtime/pixi/ingest.ts +116 -0
- package/src/runtime/pixi/physics-registry.ts +49 -0
- package/src/runtime/pixi/render-pass-bracket.ts +117 -0
- package/src/runtime/pixi/scene-capture.ts +179 -0
- package/src/runtime/pixi/system-adapters.ts +69 -0
- package/src/runtime/playtest.ts +22 -0
- package/src/runtime/presentation.ts +141 -0
- package/src/runtime/render-control.ts +642 -0
- package/src/runtime/render-seed.ts +77 -0
- package/src/runtime/run-ticks-settled.ts +73 -0
- package/src/runtime/setup/setup-audio.ts +72 -0
- package/src/services/audio-pose-guard.ts +2 -2
- package/src/services/game-audio.ts +152 -0
- package/src/services/game-network.ts +657 -0
- package/src/services/game-physics.ts +334 -0
- package/src/state-watch/StateWatchPanel.tsx +1 -1
- package/src/three/authoring/camera-runtime-inspector-section.tsx +4 -3
- package/src/three/authoring/constraint-inspector-section.tsx +8 -7
- package/src/three/authoring/model-asset-inspector-section.tsx +14 -17
- package/src/three/authoring/oid-source-persistence.ts +13 -13
- package/src/three/authoring/r3f-design-session.ts +79 -61
- package/src/three/authoring/r3f-source-authoring-adapter.ts +112 -108
- package/src/three/authoring/reflection-probe-inspector-section.tsx +5 -4
- package/src/three/authoring/spatial-joint-handles.ts +1 -1
- package/src/three/authoring/spatial-lod-handles.ts +1 -1
- package/src/three/authoring/spatial-particle-handles.ts +1 -1
- package/src/three/authoring/three-authoring-adapter.ts +33 -33
- package/src/three/component-verbs/extract-menu.ts +8 -7
- package/src/three/component-verbs/fork-menu.ts +8 -7
- package/src/three/component-verbs/internals-menu.ts +3 -3
- package/src/three/drei-asset-caches.ts +13 -0
- package/src/three/story-documents/three-story-documents.tsx +24 -34
- package/src/three/three-board/ThreeBoardDocument.tsx +25 -25
- package/src/three/three-board/board-scene.ts +7 -7
- package/src/three/three-board/three-component-board.ts +5 -5
- package/contributions/react/pasteboard.action.ts +0 -41
- package/contributions/xstate-behavior.action.ts +0 -42
- package/contributions/xstate-behavior.document.tsx +0 -73
- package/contributions/xstate-behavior.inspector.tsx +0 -28
- package/contributions/xstate-behavior.menu.ts +0 -23
- package/src/react/pasteboard-materialize.ts +0 -154
- package/src/services/game-audio-unlock.ts +0 -48
- package/src/xstate/XStateBehaviorSection.tsx +0 -130
- package/src/xstate/XStateMachineInspector.tsx +0 -566
- package/src/xstate/character-animation-machine.fixture.ts +0 -74
- package/src/xstate/live-behaviors.ts +0 -106
- package/src/xstate/use-live-actor-state.ts +0 -44
- package/src/xstate/xstate-graph.ts +0 -235
- package/src/xstate/xstate-layout.ts +0 -76
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHAT PLAY RUNS BESIDE THE HOST: the run configuration the person chose (kept per checkout in the
|
|
3
|
+
* project-local document, the way an IDE remembers its launch configuration), started before the
|
|
4
|
+
* game mounts and stopped with it. One module, so the Play button and the relayed `play` verb start
|
|
5
|
+
* the same thing — a multiplayer game's `play + server` brings its room server up either way.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { editorHost } from '@volter/editor-sdk/host';
|
|
9
|
+
import {
|
|
10
|
+
type ConfigurationStatus,
|
|
11
|
+
listConfigurations,
|
|
12
|
+
startConfiguration,
|
|
13
|
+
stopConfiguration,
|
|
14
|
+
} from '../host/api/configurations';
|
|
15
|
+
import { setDesiredExtraInstances } from './play-mode';
|
|
16
|
+
|
|
17
|
+
/** The implicit configuration: mount every root in the host. */
|
|
18
|
+
export const PLAY_CONFIGURATION = 'play';
|
|
19
|
+
const RUN_SELECTION_SECTION = 'runSelection';
|
|
20
|
+
|
|
21
|
+
/** The configuration the person picked, or null when they have not. */
|
|
22
|
+
export function chosenRunConfiguration(): string | null {
|
|
23
|
+
return editorHost().projectLocalState.read<string>(RUN_SELECTION_SECTION) ?? null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function chooseRunConfiguration(id: string): void {
|
|
27
|
+
editorHost().projectLocalState.write(RUN_SELECTION_SECTION, id);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* What Play starts: the person's pick, else the first declared compound that runs the host
|
|
32
|
+
* (`play + server`), as an IDE opens on its first launch configuration; a project with none plays
|
|
33
|
+
* alone.
|
|
34
|
+
*/
|
|
35
|
+
export function selectedRunConfiguration(
|
|
36
|
+
declared: readonly ConfigurationStatus[],
|
|
37
|
+
chosen: string | null = chosenRunConfiguration(),
|
|
38
|
+
): string {
|
|
39
|
+
return (
|
|
40
|
+
chosen ??
|
|
41
|
+
declared.find((c) => c.role === 'run' && c.kind === 'compound' && c.run?.includes(PLAY_CONFIGURATION))?.id ??
|
|
42
|
+
PLAY_CONFIGURATION
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type RunStart =
|
|
47
|
+
| { readonly ok: true; readonly started: string | null }
|
|
48
|
+
| { readonly ok: false; readonly title: string; readonly detail: string };
|
|
49
|
+
|
|
50
|
+
let running: string | null = null;
|
|
51
|
+
|
|
52
|
+
/** Start the selected configuration's processes (nothing for bare `play`), and say whether Play may
|
|
53
|
+
* go on. */
|
|
54
|
+
export async function startSelectedRunConfiguration(): Promise<RunStart> {
|
|
55
|
+
const declared = await listConfigurations().catch(() => [] as ConfigurationStatus[]);
|
|
56
|
+
const id = selectedRunConfiguration(declared);
|
|
57
|
+
const selected = declared.find((c) => c.id === id);
|
|
58
|
+
if (!selected || id === PLAY_CONFIGURATION) return { ok: true, started: null };
|
|
59
|
+
let outcome: Awaited<ReturnType<typeof startConfiguration>>;
|
|
60
|
+
try {
|
|
61
|
+
outcome = await startConfiguration(selected.id);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return { ok: false, title: `Run "${selected.id}"`, detail: error instanceof Error ? error.message : String(error) };
|
|
64
|
+
}
|
|
65
|
+
if (!outcome.ready) {
|
|
66
|
+
return {
|
|
67
|
+
ok: false,
|
|
68
|
+
title: `Run "${selected.id}" is not ready`,
|
|
69
|
+
detail: Object.entries(outcome.logs)
|
|
70
|
+
.map(([name, lines]) => `${name}: ${lines.slice(-3).join(' | ') || 'no output'}`)
|
|
71
|
+
.join('\n'),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (selected.kind === 'compound' && selected.instances != null) {
|
|
75
|
+
setDesiredExtraInstances(Math.max(0, selected.instances - 1));
|
|
76
|
+
}
|
|
77
|
+
running = selected.id;
|
|
78
|
+
return { ok: true, started: selected.id };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Stop what the last Play started beside the host. */
|
|
82
|
+
export async function stopStartedRunConfiguration(): Promise<void> {
|
|
83
|
+
const id = running;
|
|
84
|
+
running = null;
|
|
85
|
+
if (!id) return;
|
|
86
|
+
await stopConfiguration(id).catch((error: unknown) =>
|
|
87
|
+
editorHost().notify({
|
|
88
|
+
tone: 'error',
|
|
89
|
+
title: `Stop "${id}"`,
|
|
90
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
}
|
package/src/play-bar/PlayBar.tsx
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { type ConfigurationStatus, listConfigurations } from '../host/api/configurations';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
chooseRunConfiguration,
|
|
4
|
+
chosenRunConfiguration,
|
|
5
|
+
PLAY_CONFIGURATION,
|
|
6
|
+
selectedRunConfiguration,
|
|
7
|
+
startSelectedRunConfiguration,
|
|
8
|
+
stopStartedRunConfiguration,
|
|
9
|
+
} from '../play/run-selection';
|
|
10
|
+
import { isGameplayExportActive, subscribeGameplayExport } from '@volter/editor-sdk/kit/gameplay-export-state';
|
|
8
11
|
import { PLAY_CONTROL_TEST_ID } from '../host/play-control-hook';
|
|
9
12
|
import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
|
|
10
13
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
|
|
@@ -31,7 +34,6 @@ import {
|
|
|
31
34
|
getRestartRequiredReason,
|
|
32
35
|
pausePlayMode,
|
|
33
36
|
resumePlayMode,
|
|
34
|
-
setDesiredExtraInstances,
|
|
35
37
|
stepPlayMode,
|
|
36
38
|
subscribeRestartRequired,
|
|
37
39
|
} from '../play/play-mode';
|
|
@@ -288,36 +290,17 @@ export function PlayBar({ placement = 'launcher' }: { placement?: 'launcher' | '
|
|
|
288
290
|
const selected = run.configurations.find((c) => c.id === run.selectedId) ?? null;
|
|
289
291
|
const instances = selected?.kind === 'compound' ? (selected.instances ?? null) : null;
|
|
290
292
|
const play = async () => {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
title: `Run "${selected.id}"`,
|
|
296
|
-
detail: error instanceof Error ? error.message : String(error),
|
|
297
|
-
});
|
|
298
|
-
return null;
|
|
299
|
-
});
|
|
300
|
-
if (!outcome) return;
|
|
301
|
-
if (!outcome.ready) {
|
|
302
|
-
editorHost().notify({
|
|
303
|
-
tone: 'error',
|
|
304
|
-
title: `Run "${selected.id}" is not ready`,
|
|
305
|
-
detail: Object.entries(outcome.logs)
|
|
306
|
-
.map(([id, lines]) => `${id}: ${lines.slice(-3).join(' | ') || 'no output'}`)
|
|
307
|
-
.join('\n'),
|
|
308
|
-
});
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
if (instances !== null) setDesiredExtraInstances(Math.max(0, instances - 1));
|
|
312
|
-
void run.refresh();
|
|
293
|
+
const start = await startSelectedRunConfiguration();
|
|
294
|
+
if (!start.ok) {
|
|
295
|
+
editorHost().notify({ tone: 'error', title: start.title, detail: start.detail });
|
|
296
|
+
return;
|
|
313
297
|
}
|
|
298
|
+
if (start.started) void run.refresh();
|
|
314
299
|
await enterPlayMode();
|
|
315
300
|
};
|
|
316
301
|
const stop = () => {
|
|
317
302
|
exitPlayMode();
|
|
318
|
-
|
|
319
|
-
void stopConfiguration(selected.id).then(() => run.refresh());
|
|
320
|
-
}
|
|
303
|
+
void stopStartedRunConfiguration().then(() => run.refresh());
|
|
321
304
|
};
|
|
322
305
|
return (
|
|
323
306
|
<PlayBarView
|
|
@@ -388,8 +371,7 @@ function PlayOptions() {
|
|
|
388
371
|
}
|
|
389
372
|
|
|
390
373
|
/** The implicit configuration: mount every root in the host. */
|
|
391
|
-
const PLAY_ID =
|
|
392
|
-
const RUN_SELECTION_SECTION = 'runSelection';
|
|
374
|
+
const PLAY_ID = PLAY_CONFIGURATION;
|
|
393
375
|
|
|
394
376
|
interface RunState {
|
|
395
377
|
readonly configurations: readonly ConfigurationStatus[];
|
|
@@ -403,9 +385,7 @@ interface RunState {
|
|
|
403
385
|
* document, the way an IDE remembers the chosen launch configuration. */
|
|
404
386
|
function useRunConfigurations(): RunState {
|
|
405
387
|
const [declared, setDeclared] = useState<readonly ConfigurationStatus[]>([]);
|
|
406
|
-
const [
|
|
407
|
-
() => editorHost().projectLocalState.read<string>(RUN_SELECTION_SECTION) ?? PLAY_ID,
|
|
408
|
-
);
|
|
388
|
+
const [chosenId, setChosenId] = useState<string | null>(chosenRunConfiguration);
|
|
409
389
|
const refresh = useCallback(async () => {
|
|
410
390
|
const list = await listConfigurations().catch(() => []);
|
|
411
391
|
setDeclared(list);
|
|
@@ -426,9 +406,10 @@ function useRunConfigurations(): RunState {
|
|
|
426
406
|
],
|
|
427
407
|
[declared],
|
|
428
408
|
);
|
|
409
|
+
const selectedId = selectedRunConfiguration(declared, chosenId);
|
|
429
410
|
const select = useCallback((id: string) => {
|
|
430
|
-
|
|
431
|
-
|
|
411
|
+
setChosenId(id);
|
|
412
|
+
chooseRunConfiguration(id);
|
|
432
413
|
}, []);
|
|
433
414
|
return { configurations, selectedId, select, refresh };
|
|
434
415
|
}
|
|
@@ -32,7 +32,7 @@ import { Button, themeVars } from '@volter/editor-sdk/widgets';
|
|
|
32
32
|
import type {
|
|
33
33
|
FrameCapture,
|
|
34
34
|
FrameCaptureDrawCall,
|
|
35
|
-
} from '
|
|
35
|
+
} from '../runtime/dev/webgl-frame-capture';
|
|
36
36
|
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
37
37
|
import {
|
|
38
38
|
captureFrame,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
type TimeSpentRow,
|
|
18
18
|
timeSpentRows,
|
|
19
19
|
} from '../host/components/frame-debugger-model';
|
|
20
|
-
import { isJsHeapReading, readJsHeap } from '@volter/editor-
|
|
20
|
+
import { isJsHeapReading, readJsHeap } from '@volter/editor-sdk/kit/js-heap';
|
|
21
21
|
import { useActivePerformanceSource } from '../host/use-active-performance-source';
|
|
22
22
|
import { editorHost, useHostAvailabilitySelector } from '@volter/editor-sdk/host';
|
|
23
23
|
import {
|
|
@@ -30,13 +30,13 @@ import {
|
|
|
30
30
|
spaceVar,
|
|
31
31
|
themeVars,
|
|
32
32
|
} from '@volter/editor-sdk/widgets';
|
|
33
|
-
import { buildChromeTrace } from '
|
|
33
|
+
import { buildChromeTrace } from '../runtime/dev/chrome-trace';
|
|
34
34
|
import type {
|
|
35
35
|
PerformanceFrame,
|
|
36
36
|
PerformanceProfiler,
|
|
37
37
|
PerformanceSnapshot,
|
|
38
|
-
} from '
|
|
39
|
-
import type { RenderMemorySnapshot } from '
|
|
38
|
+
} from '../runtime/dev/performance-profiler';
|
|
39
|
+
import type { RenderMemorySnapshot } from '../runtime/dev/render-memory';
|
|
40
40
|
import { useEffect, useRef, useState } from 'react';
|
|
41
41
|
import { createMainThreadBusySampler, type MainThreadBusySampler } from './main-thread-busy';
|
|
42
42
|
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* composed story of the project laid out as an isolated, labeled frame, with
|
|
5
5
|
* the root entry's own story (derived, never labeled — the story whose CSF
|
|
6
6
|
* `meta.component` is the entry's default export) as the frame it opens on.
|
|
7
|
-
* A project with no stories
|
|
8
|
-
* descriptor, fall back to mounting the entry once against an inert Game.
|
|
7
|
+
* A project with no stories falls back to mounting the entry once, bare.
|
|
9
8
|
*
|
|
10
9
|
* ## Why this is a package and not the host's
|
|
11
10
|
*
|
|
@@ -38,8 +37,7 @@
|
|
|
38
37
|
* them as `@volter/editor-game/react/…` and declares the dependency.
|
|
39
38
|
* - `@editor/authoring/react-story-board.ts` (the board geometry) —
|
|
40
39
|
* `@editor/components/RootSelectionOverlay.tsx:98`,
|
|
41
|
-
* `@editor/components/ReactCanvasControls.tsx:15
|
|
42
|
-
* `@editor/pasteboard-materialize.ts:20` and
|
|
40
|
+
* `@editor/components/ReactCanvasControls.tsx:15` and
|
|
43
41
|
* `@editor/canvas-board/CanvasBoardDocument.tsx:57` read its frame
|
|
44
42
|
* placements. Host chrome drawn OVER the board, which is a different
|
|
45
43
|
* question from how the board mounts.
|
|
@@ -59,36 +57,33 @@
|
|
|
59
57
|
import type {
|
|
60
58
|
DesignTimeRootDescriptor,
|
|
61
59
|
LayerMountResult,
|
|
62
|
-
} from '@volter/editor-
|
|
60
|
+
} from '@volter/editor-sdk/kit/authoring/design-time-layers';
|
|
63
61
|
import {
|
|
64
62
|
rememberedPortableStory,
|
|
65
63
|
rememberPortableStory,
|
|
66
|
-
} from '@volter/editor-
|
|
67
|
-
import type { DesignTimeMountContext } from '@volter/editor-
|
|
68
|
-
import { formatMountFailureMessage } from '@volter/editor-
|
|
69
|
-
import type { ReactStoryBoardSelectionIntent } from '@volter/editor-
|
|
70
|
-
import { createReactStoryBoard } from '@volter/editor-
|
|
64
|
+
} from '@volter/editor-sdk/kit/authoring/design-time-layers';
|
|
65
|
+
import type { DesignTimeMountContext } from '@volter/editor-sdk/kit/authoring/design-time-mount-registry';
|
|
66
|
+
import { formatMountFailureMessage } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
67
|
+
import type { ReactStoryBoardSelectionIntent } from '@volter/editor-sdk/kit/authoring/react-story-board';
|
|
68
|
+
import { createReactStoryBoard } from '@volter/editor-sdk/kit/authoring/react-story-board';
|
|
71
69
|
import {
|
|
72
70
|
getRootCanvasViewport,
|
|
73
71
|
setRootCanvasViewport,
|
|
74
|
-
} from '@volter/editor-
|
|
75
|
-
import { recordAuthoringConsumerUse } from '@volter/editor-
|
|
76
|
-
import { CrashNullBoundary } from '@volter/editor-
|
|
77
|
-
import { readProjectTextFile } from '@volter/editor-
|
|
78
|
-
import { editorConsole } from '@volter/editor-
|
|
79
|
-
import {
|
|
80
|
-
resolveReactRootMountRuntime,
|
|
81
|
-
resolveWorldProviderForProject,
|
|
82
|
-
} from '../host/react-mount-runtime';
|
|
72
|
+
} from '@volter/editor-sdk/kit/world-canvas-viewport-state';
|
|
73
|
+
import { recordAuthoringConsumerUse } from '@volter/editor-sdk/kit/authoring-seam-evidence';
|
|
74
|
+
import { CrashNullBoundary } from '@volter/editor-sdk/kit/crash-null-boundary';
|
|
75
|
+
import { readProjectTextFile } from '@volter/editor-sdk/kit/editor-api';
|
|
76
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
77
|
+
import { resolveReactRootMountRuntime } from '../host/react-mount-runtime';
|
|
83
78
|
import { activeRealmServices } from '../host/realm-services';
|
|
84
79
|
import { resolveReactAdapterRootComponent } from '../host/roots/react-root';
|
|
85
|
-
import { scopedGameStylesState } from '@volter/editor-
|
|
86
|
-
import { componentIdentityName } from '@volter/editor-
|
|
87
|
-
import { mountIsolatedStory } from '@volter/editor-
|
|
80
|
+
import { scopedGameStylesState } from '@volter/editor-sdk/kit/scoped-game-css';
|
|
81
|
+
import { componentIdentityName } from '@volter/editor-sdk/kit/stories/compose-project-stories';
|
|
82
|
+
import { mountIsolatedStory } from '@volter/editor-sdk/kit/stories/StoryPreviewMount';
|
|
88
83
|
import {
|
|
89
84
|
createStoryPresentationIndex,
|
|
90
85
|
storyBoardPresentation,
|
|
91
|
-
} from '@volter/editor-
|
|
86
|
+
} from '@volter/editor-sdk/kit/stories/story-presentation';
|
|
92
87
|
import {
|
|
93
88
|
getComponentPreviewStory,
|
|
94
89
|
getProjectPreviewStories,
|
|
@@ -97,15 +92,12 @@ import {
|
|
|
97
92
|
projectStoriesReady,
|
|
98
93
|
refreshProjectStories,
|
|
99
94
|
subscribeProjectStoryModules,
|
|
100
|
-
} from '@volter/editor-
|
|
101
|
-
import { domStoryBoardMembers } from '@volter/editor-
|
|
102
|
-
import { getDesignTokens } from '@volter/editor-
|
|
103
|
-
import { tierSourceWriteBackend } from '@volter/editor-
|
|
104
|
-
import { recordViewportFirstFrame } from '@volter/editor-
|
|
105
|
-
import { createAssetCache } from '@volter/threejs-runtime/assets';
|
|
106
|
-
import { createGameLoop } from '@volter/game-runtime/core/game-loop';
|
|
95
|
+
} from '@volter/editor-sdk/kit/stories/story-registry';
|
|
96
|
+
import { domStoryBoardMembers } from '@volter/editor-threejs/kit/stories/three-story-model';
|
|
97
|
+
import { getDesignTokens } from '@volter/editor-sdk/kit/ui-source/inspect';
|
|
98
|
+
import { tierSourceWriteBackend } from '@volter/editor-sdk/kit/ui-source/tier-source-write-backend';
|
|
99
|
+
import { recordViewportFirstFrame } from '@volter/editor-sdk/kit/viewport-activation-timings';
|
|
107
100
|
import type { ResolvedAdapterRoot } from '@volter/editor-project/manifest/load';
|
|
108
|
-
import { createGame, type GameInternal } from '@volter/game-runtime/runtime/game';
|
|
109
101
|
import { beginProjectMountEpoch } from '@volter/editor-sdk/session/project-module-url';
|
|
110
102
|
import type { ComponentType } from 'react';
|
|
111
103
|
import { type OidElementLike, ReactRootAuthoringAdapter } from './react-world-authoring-adapter';
|
|
@@ -168,35 +160,6 @@ async function seedRootViewportFromManifest(): Promise<void> {
|
|
|
168
160
|
// An unreadable manifest declares nothing; Fill stands.
|
|
169
161
|
}
|
|
170
162
|
}
|
|
171
|
-
/**
|
|
172
|
-
* The inert design-time Game stand-in (B1's one genuine design
|
|
173
|
-
* decision). A REAL `Game` — never a hand-typed duck-typed literal, mirroring
|
|
174
|
-
* this repo's own test convention (`packages/editor/test/adapter-conformance-kit.ts`'s
|
|
175
|
-
* `headlessGame()`) — built with a loop that is constructed but NEVER
|
|
176
|
-
* started/ticked, and with NO roots ever registered. This satisfies
|
|
177
|
-
* `useGame`/`useWorldState` (`@volter/game-runtime/react/world-state`, and any project's own
|
|
178
|
-
* re-export of it) without throwing, genuinely inertly:
|
|
179
|
-
* - `state.subscribe` never fires — nothing ever calls
|
|
180
|
-
* `GameStateBridgeInternal.bump()` (only `GameInternal.runFrame` does, and
|
|
181
|
-
* this Game's loop never runs a frame);
|
|
182
|
-
* - `state.frameVersion` stays `0` forever;
|
|
183
|
-
* - `queryByComponent`/`world()`/`roots` are empty/`null` because `roots`
|
|
184
|
-
* stays `[]` (nothing ever calls `registerRoot`).
|
|
185
|
-
* `defaultRoot`/`components`/`input`/`audio` throw descriptively if touched
|
|
186
|
-
* (same as any fresh `createGame()` before a world registers) — a HUD that
|
|
187
|
-
* reaches for those is out of scope for a design-time stand-in and SHOULD
|
|
188
|
-
* throw loudly, caught by the crash-null boundary below, degrading to the
|
|
189
|
-
* #18 error node rather than silently faking a value.
|
|
190
|
-
*
|
|
191
|
-
* B2 swaps this stand-in's DATA for story-sourced data (a `data`/services
|
|
192
|
-
* seam) — this function is the seam B2 replaces/extends, not a permanent
|
|
193
|
-
* fixture; it never constructs a live Game/sockets.
|
|
194
|
-
*/
|
|
195
|
-
function createDesignTimeGame(): GameInternal {
|
|
196
|
-
const loop = createGameLoop({ fixedTimestep: 1 / 60, maxSubSteps: 8, update: () => {} });
|
|
197
|
-
return createGame({ loop, assets: createAssetCache() });
|
|
198
|
-
}
|
|
199
|
-
|
|
200
163
|
/**
|
|
201
164
|
* A minimal `ResolvedAdapterRoot` satisfying `resolveReactAdapterRootComponent`
|
|
202
165
|
* (`../binding-resolver.ts`, which reads only `id`/`kind`/`entry` off
|
|
@@ -232,7 +195,7 @@ type EntryResolution = { ok: true; Entry: ComponentType } | { ok: false; error:
|
|
|
232
195
|
/**
|
|
233
196
|
* Load a React root's entry component ONCE per layer mount, without throwing.
|
|
234
197
|
* Both of this layer's paths need it: the derived default story is joined
|
|
235
|
-
* against this component's identity, and the
|
|
198
|
+
* against this component's identity, and the no-story fallback renders it.
|
|
236
199
|
* A failure is carried rather than thrown so the story board can still open
|
|
237
200
|
* over a project whose entry is broken; only the fallback (which has nothing
|
|
238
201
|
* else to render) rethrows it.
|
|
@@ -255,16 +218,14 @@ async function resolveEntryComponent(
|
|
|
255
218
|
/**
|
|
256
219
|
* React design-time mount — the entry
|
|
257
220
|
* via the EXISTING #31 loader (`resolveReactAdapterRootComponent`, reused
|
|
258
|
-
* verbatim),
|
|
259
|
-
* (`resolveWorldProviderForProject`) around the inert
|
|
260
|
-
* `createDesignTimeGame()` stand-in and a React error boundary.
|
|
221
|
+
* verbatim), rendered inside a React error boundary.
|
|
261
222
|
* `flushSync` forces the initial render/commit/error-boundary-recovery to
|
|
262
223
|
* finish before this call returns (mirrors `ingest-siblings.ts`'s
|
|
263
224
|
* `mountDefaultReactSibling`), so a throwing entry is caught HERE —
|
|
264
225
|
* synchronously — rather than discovered later on react's own schedule.
|
|
265
226
|
*
|
|
266
227
|
* Portable CSF stories take the board path above. This branch is only the
|
|
267
|
-
* explicit no-story fallback and mounts the entry once
|
|
228
|
+
* explicit no-story fallback and mounts the entry once.
|
|
268
229
|
* On success, it mints the world's live `ReactRootAuthoringAdapter` over this
|
|
269
230
|
* layer's now-mounted DOM — the adapter reflects
|
|
270
231
|
* an already-mounted root, it never mounts one itself; this function is the
|
|
@@ -298,8 +259,7 @@ export async function mountReactDesignLayer(
|
|
|
298
259
|
// Edit mode lays EVERY composed story of the project out as an isolated,
|
|
299
260
|
// labeled frame on one editor-only board — board membership is
|
|
300
261
|
// project-global, the project's own component gallery. Play still tears
|
|
301
|
-
// this entire surface down and mounts only the manifest entry
|
|
302
|
-
// real Game.
|
|
262
|
+
// this entire surface down and mounts only the manifest entry.
|
|
303
263
|
//
|
|
304
264
|
// A remount that the registry's own publish requested already has fresh
|
|
305
265
|
// stories: refreshing again would reload every story module in parallel —
|
|
@@ -316,7 +276,7 @@ export async function mountReactDesignLayer(
|
|
|
316
276
|
|
|
317
277
|
// The root's composed default preview is DERIVED, never labeled: it is the
|
|
318
278
|
// story whose CSF `meta.component` is this root entry's default-exported
|
|
319
|
-
// component. Resolve that component first (the same loader the
|
|
279
|
+
// component. Resolve that component first (the same loader the no-story
|
|
320
280
|
// fallback below reuses), then ask the registry for its story.
|
|
321
281
|
//
|
|
322
282
|
// The join is by component NAME, not function identity, and that is
|
|
@@ -352,7 +312,7 @@ export async function mountReactDesignLayer(
|
|
|
352
312
|
// is only what picks the INITIAL frame). Without this the derivation would
|
|
353
313
|
// silently gate the entire design surface — a broken entry would take every
|
|
354
314
|
// story down with it.
|
|
355
|
-
if (portableStories.length > 0
|
|
315
|
+
if (portableStories.length > 0) {
|
|
356
316
|
const rememberedStoryId = rememberedPortableStory(projectRoot, candidate.worldId);
|
|
357
317
|
// Remembered choice, else the derived default, else discovery order —
|
|
358
318
|
// the same "no explicit default falls back to first" rule the registry
|
|
@@ -612,21 +572,15 @@ export async function mountReactDesignLayer(
|
|
|
612
572
|
// (the caller degrades it to a #18 disclosure node).
|
|
613
573
|
if (!entry.ok) throw entry.error instanceof Error ? entry.error : new Error(String(entry.error));
|
|
614
574
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
`this root's entry component${entryComponentName ? ` (${entryComponentName}, ${candidate.path})` : ''} ` +
|
|
623
|
-
'to make it this root’s default preview. Falling back to the inert-Game preview.',
|
|
624
|
-
'authoring',
|
|
625
|
-
);
|
|
626
|
-
}
|
|
575
|
+
editorConsole.warn(
|
|
576
|
+
`[design-time-layers] React root "${candidate.worldId}" has no portable CSF preview — the ` +
|
|
577
|
+
'project declares no UI stories. Add a *.stories.tsx; give it a `meta.component` of ' +
|
|
578
|
+
`this root's entry component${entryComponentName ? ` (${entryComponentName}, ${candidate.path})` : ''} ` +
|
|
579
|
+
'to make it this root’s default preview. Falling back to rendering the entry bare.',
|
|
580
|
+
'authoring',
|
|
581
|
+
);
|
|
627
582
|
|
|
628
583
|
const Entry = entry.Entry;
|
|
629
|
-
const WorldProvider = await resolveWorldProviderForProject();
|
|
630
584
|
// C1 (phase-b/c1-react-mount): this layer's own react-world mount is a
|
|
631
585
|
// SECOND call site with the identical packaged-runtime dual-React-instance
|
|
632
586
|
// exposure `binding-resolver.ts`'s `ReactRootAdapter.mount()` has — under
|
|
@@ -634,14 +588,13 @@ export async function mountReactDesignLayer(
|
|
|
634
588
|
// from the PROJECT's own react, not this module's (removed) static
|
|
635
589
|
// imports. See `resolveReactRootMountRuntime`'s doc comment.
|
|
636
590
|
const { createElement, createRoot, flushSync } = await resolveReactRootMountRuntime();
|
|
637
|
-
const game = createDesignTimeGame();
|
|
638
591
|
const root = createRoot(layer);
|
|
639
592
|
const render = (onCaught: (error: unknown) => void): void => {
|
|
640
593
|
root.render(
|
|
641
594
|
createElement(CrashNullBoundary, {
|
|
642
595
|
key: '__entry__',
|
|
643
596
|
onCaught,
|
|
644
|
-
children: createElement(
|
|
597
|
+
children: createElement(Entry),
|
|
645
598
|
}),
|
|
646
599
|
);
|
|
647
600
|
};
|
|
@@ -674,7 +627,6 @@ export async function mountReactDesignLayer(
|
|
|
674
627
|
// but this keeps teardown clean).
|
|
675
628
|
adapter.disposeReactRootAdapter();
|
|
676
629
|
root.unmount();
|
|
677
|
-
game.dispose();
|
|
678
630
|
},
|
|
679
631
|
};
|
|
680
632
|
}
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
* mount ends — which is also when the edits themselves expire.
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
-
import { numericStyleValue } from '@volter/editor-
|
|
46
|
+
import { numericStyleValue } from '@volter/editor-sdk/css-numeric-style';
|
|
47
47
|
import { createEphemeralPersistence } from '../host/authoring/ephemeral-persistence';
|
|
48
|
-
import { LIVE_ONLY_DESTINATION } from '@volter/editor-
|
|
49
|
-
import type { EditorShellStore } from '@volter/editor-
|
|
48
|
+
import { LIVE_ONLY_DESTINATION } from '@volter/editor-sdk/kit/write-pipe';
|
|
49
|
+
import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
|
|
50
50
|
import { type JournalSubject, JsonHistoryResource } from '../host/history/json-history-resource';
|
|
51
51
|
import { DomProjector, structuralDomIdentity } from '../host/projection/dom';
|
|
52
|
-
import { browserOrInlineResolver, getComputedStyleValue } from '@volter/editor-
|
|
52
|
+
import { browserOrInlineResolver, getComputedStyleValue } from '@volter/editor-sdk/kit/ui-source/inspect';
|
|
53
53
|
import type {
|
|
54
54
|
AssetSubjectProvider,
|
|
55
55
|
AuthoringAdapter,
|
|
@@ -271,7 +271,7 @@ export class DomAuthoringAdapter implements AuthoringAdapter {
|
|
|
271
271
|
private readonly store: EditorShellStore,
|
|
272
272
|
opts: DomAuthoringOptions,
|
|
273
273
|
) {
|
|
274
|
-
const history = store.projectHistory;
|
|
274
|
+
const history = store.shell.projectHistory;
|
|
275
275
|
this.historyResource = history
|
|
276
276
|
? new JsonHistoryResource({
|
|
277
277
|
history,
|
|
@@ -372,8 +372,8 @@ export class DomAuthoringAdapter implements AuthoringAdapter {
|
|
|
372
372
|
};
|
|
373
373
|
|
|
374
374
|
readonly selection: SelectionProvider = {
|
|
375
|
-
get: () => [...this.store.selectedEntityIds],
|
|
376
|
-
set: (ids) => this.store.selectMultiple(ids),
|
|
375
|
+
get: () => [...this.store.shell.selectedEntityIds],
|
|
376
|
+
set: (ids) => this.store.shell.selectMultiple(ids),
|
|
377
377
|
};
|
|
378
378
|
|
|
379
379
|
/**
|
|
@@ -650,7 +650,7 @@ export class DomAuthoringAdapter implements AuthoringAdapter {
|
|
|
650
650
|
if (path === 'locked') {
|
|
651
651
|
if (value) this.lockedIds.add(id);
|
|
652
652
|
else this.lockedIds.delete(id);
|
|
653
|
-
this.store.notifyIngestEdit();
|
|
653
|
+
this.store.shell.notifyIngestEdit();
|
|
654
654
|
return;
|
|
655
655
|
}
|
|
656
656
|
if (path === 'visible') {
|
|
@@ -700,7 +700,7 @@ export class DomAuthoringAdapter implements AuthoringAdapter {
|
|
|
700
700
|
|
|
701
701
|
this.applyStyleToElement(n.el, prop, value);
|
|
702
702
|
this.recordStyleEdit(id, prop, value);
|
|
703
|
-
this.store.notifyIngestEdit();
|
|
703
|
+
this.store.shell.notifyIngestEdit();
|
|
704
704
|
|
|
705
705
|
return true;
|
|
706
706
|
}
|
|
@@ -747,11 +747,11 @@ export class DomAuthoringAdapter implements AuthoringAdapter {
|
|
|
747
747
|
this.applyStyleToElement(node.el, prop, values[prop] ?? '');
|
|
748
748
|
}
|
|
749
749
|
}
|
|
750
|
-
this.store.notifyIngestEdit();
|
|
750
|
+
this.store.shell.notifyIngestEdit();
|
|
751
751
|
}
|
|
752
752
|
|
|
753
753
|
subscribe(listener: () => void): () => void {
|
|
754
|
-
return this.store.subscribe(listener);
|
|
754
|
+
return this.store.shell.subscribe(listener);
|
|
755
755
|
}
|
|
756
756
|
|
|
757
757
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { setAuthoringSelection } from '@volter/editor-
|
|
1
|
+
import { setAuthoringSelection } from '@volter/editor-sdk/kit/authoring/consumer-actions';
|
|
2
2
|
import { faBookBookmark, faCode, faPalette } from '@fortawesome/free-solid-svg-icons';
|
|
3
3
|
import {
|
|
4
4
|
Button,
|
|
@@ -52,24 +52,24 @@ import {
|
|
|
52
52
|
activeBreakpoint,
|
|
53
53
|
setActiveBreakpoint,
|
|
54
54
|
subscribeBreakpoint,
|
|
55
|
-
} from '@volter/editor-
|
|
56
|
-
import { CompositeAuthoringAdapter } from '@volter/editor-
|
|
57
|
-
import { numericStyleValue, UNITLESS_NUMBER_PROPS } from '@volter/editor-
|
|
58
|
-
import { beginEyedropperSession } from '@volter/editor-
|
|
59
|
-
import { groupProperties } from '@volter/editor-
|
|
60
|
-
import { useEditorStore } from '@volter/editor-
|
|
61
|
-
import { createHmrRegistrationGroup } from '@volter/editor-
|
|
62
|
-
import { groupIcon } from '@volter/editor-
|
|
55
|
+
} from '@volter/editor-sdk/kit/breakpoint-state';
|
|
56
|
+
import { CompositeAuthoringAdapter } from '@volter/editor-sdk/kit/authoring/composite-authoring-adapter';
|
|
57
|
+
import { numericStyleValue, UNITLESS_NUMBER_PROPS } from '@volter/editor-sdk/css-numeric-style';
|
|
58
|
+
import { beginEyedropperSession } from '@volter/editor-sdk/kit/eyedropper-session';
|
|
59
|
+
import { groupProperties } from '@volter/editor-sdk/kit/inspector-property-grouping';
|
|
60
|
+
import { useEditorStore } from '@volter/editor-sdk/kit/editor-runtime';
|
|
61
|
+
import { createHmrRegistrationGroup } from '@volter/editor-sdk/kit/hmr-registration-group';
|
|
62
|
+
import { groupIcon } from '@volter/editor-sdk/kit/inspection/compose';
|
|
63
63
|
import {
|
|
64
64
|
GROUP_SECTION_ORDER,
|
|
65
65
|
groupSectionId,
|
|
66
66
|
type InspectionSection,
|
|
67
67
|
PROPERTIES_SECTION_ID,
|
|
68
68
|
PROPERTIES_SECTION_ORDER,
|
|
69
|
-
} from '@volter/editor-
|
|
70
|
-
import { registerInspectorSections } from '@volter/editor-
|
|
71
|
-
import { effectiveColorFromChain, getAvailableFonts } from '@volter/editor-
|
|
72
|
-
import type { OidEntry } from '@volter/editor-
|
|
69
|
+
} from '@volter/editor-sdk/kit/inspection-model';
|
|
70
|
+
import { registerInspectorSections } from '@volter/editor-sdk/kit/inspector-section-registry';
|
|
71
|
+
import { effectiveColorFromChain, getAvailableFonts } from '@volter/editor-sdk/kit/ui-source/inspect';
|
|
72
|
+
import type { OidEntry } from '@volter/editor-react/source/oid-transform';
|
|
73
73
|
import type { AuthoringAdapter, EditorNode, PropertyDescriptor } from '@volter/editor-project/adapter';
|
|
74
74
|
import {
|
|
75
75
|
AlignmentGrid,
|