@volter/editor-threejs 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.
Files changed (112) hide show
  1. package/NOTICE +2 -0
  2. package/contributions/animation-mixers.service.ts +20 -0
  3. package/contributions/animation-timeline.utility.tsx +44 -0
  4. package/contributions/three-integration.service.ts +13 -0
  5. package/dist-node/serving.mjs +405 -0
  6. package/package.json +113 -5
  7. package/serving/animation-live-module.ts +70 -0
  8. package/serving/animation-stamp.ts +88 -0
  9. package/serving/index.ts +14 -0
  10. package/serving/model-import-conversion.ts +344 -0
  11. package/src/adapter/ingest/scene-capture.ts +1 -23
  12. package/src/adapter/renderer-config.ts +3 -4
  13. package/src/adapter/three-contract.ts +72 -0
  14. package/src/animation/live-mixers.ts +55 -0
  15. package/src/ecs/object-marks.ts +1 -1
  16. package/src/ecs/user-data.ts +0 -16
  17. package/src/host-hierarchy-objects.ts +31 -0
  18. package/src/kit/animation/three-clips-subject.ts +190 -0
  19. package/src/kit/asset-compare.ts +294 -0
  20. package/src/kit/asset-preview-command.ts +265 -0
  21. package/src/kit/asset-preview-framing.ts +357 -0
  22. package/src/kit/asset-preview.ts +2802 -0
  23. package/src/kit/asset-workflow/model-inspection.ts +830 -0
  24. package/src/kit/authoring/component-instance-root.ts +171 -0
  25. package/src/kit/authoring/design-time-settle.ts +343 -0
  26. package/src/kit/authoring/live-object-transform.ts +62 -0
  27. package/src/kit/authoring/object3d-document-session-registry.ts +154 -0
  28. package/src/kit/authoring/object3d-document-session.ts +1965 -0
  29. package/src/kit/authoring/object3d-gesture-controller.ts +113 -0
  30. package/src/kit/authoring/quarks-particle-systems.ts +19 -0
  31. package/src/kit/authoring/shell-viewport-policy.ts +48 -0
  32. package/src/kit/authoring/source-object3d-authoring-adapter.ts +526 -0
  33. package/src/kit/authoring/three-projection-core.ts +226 -0
  34. package/src/kit/authoring/viewport-pick-context.ts +39 -0
  35. package/src/kit/authoring/viewport-raycast.ts +240 -0
  36. package/src/kit/authoring/world-hidden-viewport.ts +95 -0
  37. package/src/kit/camera-authoring.ts +175 -0
  38. package/src/kit/components/CameraInfo.tsx +56 -0
  39. package/src/kit/components/InspectorObjectPreview.tsx +57 -0
  40. package/src/kit/components/Object3DDocumentToolbar.tsx +549 -0
  41. package/src/kit/components/Object3DDocumentViewport.tsx +58 -0
  42. package/src/kit/components/StageHost.tsx +2547 -0
  43. package/src/kit/components/StageOverlays.tsx +21 -0
  44. package/src/kit/components/StatsOverlay.tsx +78 -0
  45. package/src/kit/components/ToolObject3DPreview.tsx +39 -0
  46. package/src/kit/components/ViewportFurniture.tsx +655 -0
  47. package/src/kit/components/ViewportOverlay.tsx +215 -0
  48. package/src/kit/components/ViewportShadingMenu.tsx +340 -0
  49. package/src/kit/components/ViewportViewMenu.tsx +155 -0
  50. package/src/kit/components/asset-viewers/EntityModelDocument.tsx +121 -0
  51. package/src/kit/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  52. package/src/kit/components/asset-viewers/LiveModuleDocument.tsx +395 -0
  53. package/src/kit/components/asset-viewers/LutAssetDocument.tsx +444 -0
  54. package/src/kit/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  55. package/src/kit/components/asset-viewers/Object3DPreview.tsx +356 -0
  56. package/src/kit/components/asset-viewers/QuarksAssetDocument.tsx +527 -0
  57. package/src/kit/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  58. package/src/kit/components/asset-viewers/three-asset-viewers.tsx +132 -0
  59. package/src/kit/components/object3d-contribution-surfaces.tsx +33 -0
  60. package/src/kit/components/stage-keyboard.tsx +40 -0
  61. package/src/kit/components/stage-overlay-set.tsx +105 -0
  62. package/src/kit/components/stage-presence-markers.ts +482 -0
  63. package/src/kit/components/stage-transform-chrome.ts +30 -0
  64. package/src/kit/components/stage-transform-tools.tsx +73 -0
  65. package/src/kit/components/stage-view-name.ts +30 -0
  66. package/src/kit/components/standard-viewport-dressing.ts +1042 -0
  67. package/src/kit/components/world-root-binding.ts +64 -0
  68. package/src/kit/constraint-helper.ts +338 -0
  69. package/src/kit/editor-shell-store.ts +814 -0
  70. package/src/kit/editor-viewport.ts +6621 -0
  71. package/src/kit/entity-lod.ts +31 -0
  72. package/src/kit/entity-object.ts +92 -0
  73. package/src/kit/hierarchy-mark-reader.ts +74 -0
  74. package/src/kit/instanced-presentation.ts +164 -0
  75. package/src/kit/live-module-source.ts +230 -0
  76. package/src/kit/model-thumbnail.ts +539 -0
  77. package/src/kit/play-camera-flight.ts +300 -0
  78. package/src/kit/projection/three.ts +898 -0
  79. package/src/kit/reflection-probe-helper.ts +142 -0
  80. package/src/kit/scene-document-viewport.ts +51 -0
  81. package/src/kit/scene-framing.ts +315 -0
  82. package/src/kit/scene-view-fog.ts +89 -0
  83. package/src/kit/spatial-handle-visuals.ts +332 -0
  84. package/src/kit/stories/three-story-model.ts +66 -0
  85. package/src/kit/three-canvas-render.ts +44 -0
  86. package/src/kit/three-hierarchy-row-media.ts +26 -0
  87. package/src/kit/three-inspection-media.ts +73 -0
  88. package/src/kit/three-integration.ts +86 -0
  89. package/src/kit/three-state.ts +33 -0
  90. package/src/kit/three-viewport/bone-selection-highlight.ts +119 -0
  91. package/src/kit/three-viewport/camera-fit.ts +41 -0
  92. package/src/kit/three-viewport/interactive-renderer.ts +132 -0
  93. package/src/kit/three-viewport/selection-brackets.ts +355 -0
  94. package/src/kit/three-viewport/selection-outline.ts +333 -0
  95. package/src/kit/three-viewport/skeleton-helper.ts +61 -0
  96. package/src/kit/three-viewport/source-color.ts +197 -0
  97. package/src/kit/three-viewport/studio-environment.ts +96 -0
  98. package/src/kit/trigger-volume-helper.ts +116 -0
  99. package/src/kit/viewport-actions.ts +128 -0
  100. package/src/kit/viewport-authoring-policy.ts +154 -0
  101. package/src/kit/viewport-commands.ts +318 -0
  102. package/src/kit/viewport-hotkeys.ts +119 -0
  103. package/src/kit/viewport-shading-boundary.ts +12 -0
  104. package/src/kit/viewport-status-facet.ts +53 -0
  105. package/src/object3d-contributions.ts +494 -0
  106. package/src/render/viewport-shading.ts +6 -2
  107. package/src/viewport/content-bounds.ts +38 -4
  108. package/src/viewport/environment.ts +16 -0
  109. package/src/viewport-api.ts +92 -0
  110. package/src/viewport-door.ts +237 -0
  111. package/src/animation/animation-clock.ts +0 -479
  112. package/src/animation/runtime-inspection.ts +0 -45
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The lazy boundary for a stage's overlays. The host names them; only a stage
3
+ * that actually has a shell above it (and therefore something for them to
4
+ * read) evaluates the module. See `stage-overlay-set.tsx` for what they are
5
+ * and `world-root-stage.ts`'s header for why the condition gates the LOAD.
6
+ */
7
+ import { lazy, Suspense } from 'react';
8
+ import type { StageOverlaySetProps } from './stage-overlay-set';
9
+
10
+ const LazyStageOverlaySet = lazy(async () => {
11
+ const module = await import('./stage-overlay-set');
12
+ return { default: module.StageOverlaySet };
13
+ });
14
+
15
+ export function StageOverlays(props: StageOverlaySetProps) {
16
+ return (
17
+ <Suspense fallback={null}>
18
+ <LazyStageOverlaySet {...props} />
19
+ </Suspense>
20
+ );
21
+ }
@@ -0,0 +1,78 @@
1
+ import { themeVars } from '@volter/editor-sdk/widgets';
2
+ import { useEffect, useState } from 'react';
3
+ import { useEditorStats } from '@volter/editor-sdk/kit/editor-runtime';
4
+ import { latestTabCensus } from '@volter/editor-sdk/kit/tab-census';
5
+
6
+ export function StatsOverlay() {
7
+ const stats = useEditorStats();
8
+ const [, setTick] = useState(0);
9
+ // The tab's resource census (tab-census.ts) — the SAME sample the heartbeat
10
+ // carries and a death line quotes, read here on the tick this overlay
11
+ // already runs. The author sees the cost while authoring it, which is the
12
+ // whole reason the census exists: the quality loop grades looks, and a
13
+ // renderer killed at Chrome's undocumented ceiling grades nothing.
14
+ const census = latestTabCensus();
15
+
16
+ useEffect(() => {
17
+ const id = setInterval(() => setTick((t) => t + 1), 200);
18
+ return () => clearInterval(id);
19
+ }, []);
20
+
21
+ return (
22
+ // V-10 — this was an EIGHTH one-off "dark panel"
23
+ // value (`rgba(0,0,0,0.7)`, flat black, no border) directly stacked
24
+ // above-right of ViewportOverlay's cluster and CameraInfo's pill in the
25
+ // same corner. Given the same border/radius treatment as its siblings so
26
+ // the whole corner reads as one family.
27
+ // P6-U6 (owner taste decision 3: HUD overlays → real islands): the paint
28
+ // moved to `.vgai-hud-overlay` so islands chrome can promote it to the
29
+ // shared glass-island material (compact tier); bars chrome paints the
30
+ // exact pre-U6 overlay-whisper recipe from the same class.
31
+ <div
32
+ className="vgai-hud-overlay vgai-chrome-island vgai-glass-island"
33
+ data-island-scale="compact"
34
+ data-hud-border="strong"
35
+ style={{
36
+ position: 'absolute',
37
+ // U6.5 F1/P2-18 — second HUD tier: below the viewport toolbar row.
38
+ // The var carries the glass breathing band (54px islands / 102px the
39
+ // floating header-island clearance, scoped in theme.css); the bare
40
+ // fallback is the pre-glass 48px so treatment-less chrome ("bars":
41
+ // graphite/classic/lite/reduced) stays pixel-identical to main.
42
+ top: 'var(--vgai-viewport-overlay-hud-top, 48px)',
43
+ right: 8,
44
+ padding: '6px 10px',
45
+ pointerEvents: 'auto',
46
+ fontSize: 'var(--vgai-font-base)',
47
+ color: themeVars.content.primary,
48
+ fontFamily: themeVars.typography.mono,
49
+ lineHeight: '16px',
50
+ }}
51
+ >
52
+ <div>FPS: {stats.fps.toFixed(0)}</div>
53
+ <div>Draw: {stats.drawCalls}</div>
54
+ <div>Tris: {stats.triangles.toLocaleString()}</div>
55
+ <div>Frame: {stats.frameTime.toFixed(1)}ms</div>
56
+ {census !== null && (
57
+ <>
58
+ <div>
59
+ Heap: {census.heapUsedMB === null ? 'n/a' : `${census.heapUsedMB.toFixed(0)}MB`}
60
+ {census.heapLimitMB === null ? '' : ` / ${census.heapLimitMB.toFixed(0)}MB`}
61
+ </div>
62
+ <div>Mount epochs: {census.mountEpochs}</div>
63
+ <div>
64
+ Canvas: {census.canvasMB.toFixed(1)}MB ×{census.canvases}
65
+ </div>
66
+ {/* Absent, never zeroed, when no game has registered a render-debug
67
+ adapter — "no textures" is a different claim from "unmeasured". */}
68
+ {census.textures !== undefined && (
69
+ <div>
70
+ GPU: {census.textures} tex, {census.geometries ?? 0} geo
71
+ {census.programs === undefined ? '' : `, ${census.programs} prog`}
72
+ </div>
73
+ )}
74
+ </>
75
+ )}
76
+ </div>
77
+ );
78
+ }
@@ -0,0 +1,39 @@
1
+ import type { ToolObject3DPreviewProps } from '../../object3d-contributions';
2
+ import { Object3DPreview } from './asset-viewers/Object3DPreview';
3
+
4
+ /**
5
+ * Editor-owned preview chrome for project-authored native Three.js sources.
6
+ * Object3DPreview owns renderer, camera, controls, animation, and
7
+ * teardown; the project owns only the raw build function and its resources.
8
+ */
9
+ export function ToolObject3DPreview({
10
+ build,
11
+ displayName = 'Object3D preview',
12
+ height = 360,
13
+ background,
14
+ showSkeleton = false,
15
+ cameraDirection,
16
+ showGrid,
17
+ useDefaultLighting,
18
+ exposure,
19
+ setupPreview,
20
+ active = true,
21
+ }: ToolObject3DPreviewProps) {
22
+ const customPresentation = setupPreview !== undefined;
23
+ return (
24
+ <div style={{ width: '100%', height, minHeight: 240 }}>
25
+ <Object3DPreview
26
+ sourceFactory={build}
27
+ displayName={displayName}
28
+ active={active}
29
+ showSkeleton={showSkeleton}
30
+ background={background}
31
+ cameraDirection={cameraDirection}
32
+ showGrid={showGrid ?? !customPresentation}
33
+ useDefaultLighting={useDefaultLighting ?? !customPresentation}
34
+ exposure={exposure}
35
+ setupPreview={setupPreview}
36
+ />
37
+ </div>
38
+ );
39
+ }