@volter/editor-threejs 0.5.66 → 0.5.68

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 (99) hide show
  1. package/contributions/animation-timeline.utility.tsx +44 -0
  2. package/contributions/three-integration.service.ts +13 -0
  3. package/package.json +96 -6
  4. package/src/adapter/renderer-config.ts +3 -4
  5. package/src/adapter/three-contract.ts +72 -0
  6. package/src/ecs/object-marks.ts +1 -1
  7. package/src/ecs/user-data.ts +0 -9
  8. package/src/host-hierarchy-objects.ts +31 -0
  9. package/src/kit/animation/three-clips-subject.ts +190 -0
  10. package/src/kit/asset-compare.ts +294 -0
  11. package/src/kit/asset-preview-command.ts +265 -0
  12. package/src/kit/asset-preview-framing.ts +357 -0
  13. package/src/kit/asset-preview.ts +2802 -0
  14. package/src/kit/asset-workflow/model-inspection.ts +830 -0
  15. package/src/kit/authoring/component-instance-root.ts +171 -0
  16. package/src/kit/authoring/design-time-settle.ts +343 -0
  17. package/src/kit/authoring/live-object-transform.ts +62 -0
  18. package/src/kit/authoring/object3d-document-session-registry.ts +154 -0
  19. package/src/kit/authoring/object3d-document-session.ts +1965 -0
  20. package/src/kit/authoring/object3d-gesture-controller.ts +113 -0
  21. package/src/kit/authoring/quarks-particle-systems.ts +19 -0
  22. package/src/kit/authoring/shell-viewport-policy.ts +48 -0
  23. package/src/kit/authoring/source-object3d-authoring-adapter.ts +526 -0
  24. package/src/kit/authoring/three-projection-core.ts +226 -0
  25. package/src/kit/authoring/viewport-pick-context.ts +39 -0
  26. package/src/kit/authoring/viewport-raycast.ts +240 -0
  27. package/src/kit/authoring/world-hidden-viewport.ts +95 -0
  28. package/src/kit/camera-authoring.ts +175 -0
  29. package/src/kit/components/CameraInfo.tsx +56 -0
  30. package/src/kit/components/InspectorObjectPreview.tsx +57 -0
  31. package/src/kit/components/Object3DDocumentToolbar.tsx +549 -0
  32. package/src/kit/components/Object3DDocumentViewport.tsx +58 -0
  33. package/src/kit/components/StageHost.tsx +2547 -0
  34. package/src/kit/components/StageOverlays.tsx +21 -0
  35. package/src/kit/components/StatsOverlay.tsx +78 -0
  36. package/src/kit/components/ToolObject3DPreview.tsx +39 -0
  37. package/src/kit/components/ViewportFurniture.tsx +655 -0
  38. package/src/kit/components/ViewportOverlay.tsx +215 -0
  39. package/src/kit/components/ViewportShadingMenu.tsx +340 -0
  40. package/src/kit/components/ViewportViewMenu.tsx +155 -0
  41. package/src/kit/components/asset-viewers/EntityModelDocument.tsx +121 -0
  42. package/src/kit/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  43. package/src/kit/components/asset-viewers/LiveModuleDocument.tsx +395 -0
  44. package/src/kit/components/asset-viewers/LutAssetDocument.tsx +444 -0
  45. package/src/kit/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  46. package/src/kit/components/asset-viewers/Object3DPreview.tsx +356 -0
  47. package/src/kit/components/asset-viewers/QuarksAssetDocument.tsx +527 -0
  48. package/src/kit/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  49. package/src/kit/components/asset-viewers/three-asset-viewers.tsx +132 -0
  50. package/src/kit/components/object3d-contribution-surfaces.tsx +33 -0
  51. package/src/kit/components/stage-keyboard.tsx +40 -0
  52. package/src/kit/components/stage-overlay-set.tsx +105 -0
  53. package/src/kit/components/stage-presence-markers.ts +482 -0
  54. package/src/kit/components/stage-transform-chrome.ts +30 -0
  55. package/src/kit/components/stage-transform-tools.tsx +73 -0
  56. package/src/kit/components/stage-view-name.ts +30 -0
  57. package/src/kit/components/standard-viewport-dressing.ts +1042 -0
  58. package/src/kit/components/world-root-binding.ts +64 -0
  59. package/src/kit/constraint-helper.ts +338 -0
  60. package/src/kit/editor-shell-store.ts +814 -0
  61. package/src/kit/editor-viewport.ts +6621 -0
  62. package/src/kit/entity-lod.ts +31 -0
  63. package/src/kit/entity-object.ts +92 -0
  64. package/src/kit/hierarchy-mark-reader.ts +74 -0
  65. package/src/kit/instanced-presentation.ts +164 -0
  66. package/src/kit/live-module-source.ts +230 -0
  67. package/src/kit/model-thumbnail.ts +539 -0
  68. package/src/kit/play-camera-flight.ts +300 -0
  69. package/src/kit/projection/three.ts +898 -0
  70. package/src/kit/reflection-probe-helper.ts +142 -0
  71. package/src/kit/scene-document-viewport.ts +51 -0
  72. package/src/kit/scene-framing.ts +315 -0
  73. package/src/kit/scene-view-fog.ts +89 -0
  74. package/src/kit/spatial-handle-visuals.ts +332 -0
  75. package/src/kit/stories/three-story-model.ts +66 -0
  76. package/src/kit/three-canvas-render.ts +44 -0
  77. package/src/kit/three-hierarchy-row-media.ts +26 -0
  78. package/src/kit/three-inspection-media.ts +73 -0
  79. package/src/kit/three-integration.ts +86 -0
  80. package/src/kit/three-state.ts +33 -0
  81. package/src/kit/three-viewport/bone-selection-highlight.ts +119 -0
  82. package/src/kit/three-viewport/camera-fit.ts +41 -0
  83. package/src/kit/three-viewport/interactive-renderer.ts +132 -0
  84. package/src/kit/three-viewport/selection-brackets.ts +355 -0
  85. package/src/kit/three-viewport/selection-outline.ts +333 -0
  86. package/src/kit/three-viewport/skeleton-helper.ts +61 -0
  87. package/src/kit/three-viewport/source-color.ts +197 -0
  88. package/src/kit/three-viewport/studio-environment.ts +96 -0
  89. package/src/kit/trigger-volume-helper.ts +116 -0
  90. package/src/kit/viewport-actions.ts +128 -0
  91. package/src/kit/viewport-authoring-policy.ts +154 -0
  92. package/src/kit/viewport-commands.ts +318 -0
  93. package/src/kit/viewport-hotkeys.ts +119 -0
  94. package/src/kit/viewport-shading-boundary.ts +12 -0
  95. package/src/kit/viewport-status-facet.ts +53 -0
  96. package/src/object3d-contributions.ts +494 -0
  97. package/src/render/viewport-shading.ts +6 -2
  98. package/src/viewport-api.ts +92 -0
  99. package/src/viewport-door.ts +237 -0
@@ -0,0 +1,113 @@
1
+ import type { ToolObject3DGesture, ToolObject3DPointerEvent } from '../../object3d-contributions';
2
+
3
+ export interface Object3DGestureControllerOptions {
4
+ readonly begin: (event: ToolObject3DPointerEvent) => ToolObject3DGesture | null;
5
+ readonly persist: (label?: string) => Promise<void>;
6
+ readonly reportError: (error: unknown) => void;
7
+ }
8
+
9
+ /** Exactly one project gesture at a time; every terminal path is explicit. */
10
+ export class Object3DGestureController {
11
+ private active: { pointerId: number; gesture: ToolObject3DGesture } | null = null;
12
+ private settling = false;
13
+ private readonly idleWaiters = new Set<() => void>();
14
+
15
+ constructor(private readonly options: Object3DGestureControllerOptions) {}
16
+
17
+ begin(event: ToolObject3DPointerEvent): boolean {
18
+ if (this.active || this.settling) return false;
19
+ try {
20
+ const gesture = this.options.begin(event);
21
+ if (!gesture) return false;
22
+ this.active = { pointerId: event.pointerId, gesture };
23
+ return true;
24
+ } catch (error) {
25
+ this.options.reportError(error);
26
+ return false;
27
+ }
28
+ }
29
+
30
+ update(event: ToolObject3DPointerEvent): void {
31
+ if (!this.active || this.active.pointerId !== event.pointerId) return;
32
+ try {
33
+ this.active.gesture.update(event);
34
+ } catch (error) {
35
+ void this.cancelWithError(error);
36
+ }
37
+ }
38
+
39
+ async commit(event: ToolObject3DPointerEvent): Promise<boolean> {
40
+ const active = this.take(event.pointerId);
41
+ if (!active) return false;
42
+ this.settling = true;
43
+ try {
44
+ await active.commit(event);
45
+ await this.options.persist(active.label);
46
+ return true;
47
+ } catch (error) {
48
+ try {
49
+ await active.cancel();
50
+ } catch (cancelError) {
51
+ this.options.reportError({ operationError: error, rollbackError: cancelError });
52
+ return false;
53
+ }
54
+ this.options.reportError(error);
55
+ return false;
56
+ } finally {
57
+ this.settling = false;
58
+ for (const resolve of this.idleWaiters) resolve();
59
+ this.idleWaiters.clear();
60
+ }
61
+ }
62
+
63
+ async cancel(pointerId?: number): Promise<boolean> {
64
+ const active = this.take(pointerId);
65
+ if (!active) return false;
66
+ this.settling = true;
67
+ try {
68
+ await active.cancel();
69
+ return true;
70
+ } catch (error) {
71
+ this.options.reportError(error);
72
+ return false;
73
+ } finally {
74
+ this.settling = false;
75
+ for (const resolve of this.idleWaiters) resolve();
76
+ this.idleWaiters.clear();
77
+ }
78
+ }
79
+
80
+ /** A source handoff waits for persistence/rollback, including pointer-up work. */
81
+ async settle(): Promise<void> {
82
+ if (this.active) await this.cancel();
83
+ if (this.settling) await new Promise<void>((resolve) => this.idleWaiters.add(resolve));
84
+ }
85
+
86
+ hasActiveGesture(): boolean {
87
+ return this.active !== null;
88
+ }
89
+
90
+ private take(pointerId?: number): ToolObject3DGesture | null {
91
+ if (!this.active || (pointerId !== undefined && this.active.pointerId !== pointerId))
92
+ return null;
93
+ const gesture = this.active.gesture;
94
+ this.active = null;
95
+ return gesture;
96
+ }
97
+
98
+ private async cancelWithError(error: unknown): Promise<void> {
99
+ const active = this.take();
100
+ if (!active) return;
101
+ this.settling = true;
102
+ try {
103
+ await active.cancel();
104
+ this.options.reportError(error);
105
+ } catch (rollbackError) {
106
+ this.options.reportError({ operationError: error, rollbackError });
107
+ } finally {
108
+ this.settling = false;
109
+ for (const resolve of this.idleWaiters) resolve();
110
+ this.idleWaiters.clear();
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,19 @@
1
+ import type * as THREE from 'three';
2
+ import type { ParticleSystem } from 'three.quarks';
3
+
4
+ /** Native three.quarks systems owned by ParticleEmitter nodes in this graph.
5
+ * Detection is structural because a project can bring its own compatible
6
+ * three.quarks module instance; `instanceof` would make that ordinary case
7
+ * disappear across package boundaries. */
8
+ export function quarksParticleSystems(root: THREE.Object3D): ParticleSystem[] {
9
+ const systems: ParticleSystem[] = [];
10
+ const seen = new Set<ParticleSystem>();
11
+ root.traverse((object) => {
12
+ if (object.type !== 'ParticleEmitter') return;
13
+ const system = (object as THREE.Object3D & { system?: ParticleSystem }).system;
14
+ if (!system || typeof system.getRendererSettings !== 'function' || seen.has(system)) return;
15
+ seen.add(system);
16
+ systems.push(system);
17
+ });
18
+ return systems;
19
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * THE SHELL'S ANSWERS to `ViewportAuthoringPolicy` — the composition the
3
+ * editor installs at boot (`EditorContext.tsx`'s `EditorProvider`).
4
+ *
5
+ * Every member here is a one-line delegation to the module that already owned
6
+ * that answer. Nothing moved and nothing was reimplemented: the point of the
7
+ * seam is only that `editor-viewport.ts` no longer imports these modules, so
8
+ * the gizmo viewport does not carry the composite adapter, the workspace
9
+ * document registry, or the layered-pick walk in its own closure
10
+ * (ARCHITECTURE-CORE §Editor chrome, "the viewport stack is separable").
11
+ *
12
+ * This file is the shell side of that boundary and is free to import all of
13
+ * them.
14
+ */
15
+
16
+ import type { ViewportAuthoringPolicy } from '../viewport-authoring-policy';
17
+ import { getActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
18
+ import { CompositeAuthoringAdapter } from '@volter/editor-sdk/kit/authoring/composite-authoring-adapter';
19
+ import { pickTopmost } from '@volter/editor-sdk/kit/authoring/layered-pick';
20
+ import { resolvePanelAuthoring } from '@volter/editor-sdk/kit/authoring/panel-authoring';
21
+ import { isViewportToolContextVisible, resolveViewportToolContext } from '@volter/editor-sdk/kit/authoring/viewport-tool-context';
22
+ import {
23
+ applyRootHiddenVisibility,
24
+ isThreejsSurfaceVisible,
25
+ resolveThreeViewportRootId,
26
+ suppressRootEnvironment,
27
+ } from './world-hidden-viewport';
28
+
29
+ export const SHELL_VIEWPORT_AUTHORING_POLICY: ViewportAuthoringPolicy = {
30
+ activeAuthoring: (store) => getActiveAuthoring(store),
31
+ panelAuthoring: (store) => resolvePanelAuthoring(store).adapter,
32
+ pick: (store, clientX, clientY, intent) => pickTopmost(store, clientX, clientY, { intent }),
33
+ toolOwner: (adapter, selectedIds) => resolveViewportToolContext(adapter, selectedIds),
34
+ // Both halves of "is this owner painted here" — visibility says a three
35
+ // surface is drawn at all, selection ownership says it is the world being
36
+ // edited. The viewport ANDs the result with `kind === 'three'`, exactly as it
37
+ // did when it called these two itself.
38
+ toolOwnerPainted: (store, owner) =>
39
+ isThreejsSurfaceVisible(store) && isViewportToolContextVisible(store, owner),
40
+ threeSurfaceShowing: (store, adapter) =>
41
+ isThreejsSurfaceVisible(store) &&
42
+ (adapter instanceof CompositeAuthoringAdapter
43
+ ? adapter.childAdapters().some((child) => child.kind === 'three')
44
+ : !adapter.rects && typeof adapter.hierarchy.object3D === 'function'),
45
+ threeViewportRootId: (store) => resolveThreeViewportRootId(store),
46
+ applyRootHiddenVisibility,
47
+ suppressRootEnvironment,
48
+ };