uzay 0.1.0
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/dist/core/atom-wrapper.d.ts +38 -0
- package/dist/core/common-types/axes.d.ts +3 -0
- package/dist/core/common-types/colors.d.ts +1 -0
- package/dist/core/common-types/drag-utils.d.ts +4 -0
- package/dist/core/common-types/interaction-events.d.ts +37 -0
- package/dist/core/common-types/item-registry.d.ts +49 -0
- package/dist/core/common-types/overlay.d.ts +3 -0
- package/dist/core/common-types/tags.d.ts +1 -0
- package/dist/core/common-types/vec2.d.ts +17 -0
- package/dist/core/common-types/vec3.d.ts +17 -0
- package/dist/core/item.d.ts +27 -0
- package/dist/core/items/axes3d.d.ts +39 -0
- package/dist/core/items/camera3d.d.ts +43 -0
- package/dist/core/items/grid3d.d.ts +47 -0
- package/dist/core/items/line3d.d.ts +37 -0
- package/dist/core/items/overlay3d.d.ts +51 -0
- package/dist/core/items/parametric-function3d.d.ts +45 -0
- package/dist/core/items/plane3d.d.ts +46 -0
- package/dist/core/items/point3d.d.ts +44 -0
- package/dist/core/items/sphere3d.d.ts +37 -0
- package/dist/core/items/vector3d.d.ts +52 -0
- package/dist/core/renderers/axes3d.d.ts +2 -0
- package/dist/core/renderers/camera3d.d.ts +2 -0
- package/dist/core/renderers/grid3d.d.ts +2 -0
- package/dist/core/renderers/index.d.ts +99 -0
- package/dist/core/renderers/line3d.d.ts +2 -0
- package/dist/core/renderers/overlay3d.d.ts +2 -0
- package/dist/core/renderers/parametric-function3d.d.ts +2 -0
- package/dist/core/renderers/plane3d.d.ts +2 -0
- package/dist/core/renderers/point3d.d.ts +2 -0
- package/dist/core/renderers/sphere3d.d.ts +2 -0
- package/dist/core/renderers/vector3d.d.ts +2 -0
- package/dist/core/scene3d.d.ts +23 -0
- package/dist/core/view3d.d.ts +78 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +27209 -0
- package/package.json +42 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { PointDraggableDir } from "../common-types/axes";
|
|
2
|
+
import type { Color } from "../common-types/colors";
|
|
3
|
+
import type { ItemTags } from "../common-types/tags";
|
|
4
|
+
import { type Vec3 } from "../common-types/vec3";
|
|
5
|
+
import { BaseItem } from "../item";
|
|
6
|
+
import type { AtomLikeOptions, Field } from "../atom-wrapper";
|
|
7
|
+
import type { Scene3D } from "../scene3d";
|
|
8
|
+
import type { DragEvent } from "../common-types/interaction-events";
|
|
9
|
+
export type PointerEvents = "auto" | "none";
|
|
10
|
+
export type Vector3DFields = {
|
|
11
|
+
tags: ItemTags;
|
|
12
|
+
origin: Vec3;
|
|
13
|
+
vector: Vec3;
|
|
14
|
+
draggable: PointDraggableDir;
|
|
15
|
+
color: Color;
|
|
16
|
+
thickness: number;
|
|
17
|
+
headLength: number;
|
|
18
|
+
headWidth: number;
|
|
19
|
+
pointerEvents: PointerEvents;
|
|
20
|
+
};
|
|
21
|
+
export type Vector3DOptions = AtomLikeOptions<Vector3DFields>;
|
|
22
|
+
export declare class Vector3D<Opts extends Vector3DOptions = {}> extends BaseItem<Vector3DFields, "vector3d"> {
|
|
23
|
+
kind: "vector3d";
|
|
24
|
+
warnedReadOnly: boolean;
|
|
25
|
+
private _dragOffset;
|
|
26
|
+
tags: Field<ItemTags, "tags", Opts>;
|
|
27
|
+
origin: Field<Vec3, "origin", Opts>;
|
|
28
|
+
vector: Field<Vec3, "vector", Opts>;
|
|
29
|
+
draggable: Field<PointDraggableDir, "draggable", Opts>;
|
|
30
|
+
color: Field<Color, "color", Opts>;
|
|
31
|
+
thickness: Field<number, "thickness", Opts>;
|
|
32
|
+
headLength: Field<number, "headLength", Opts>;
|
|
33
|
+
headWidth: Field<number, "headWidth", Opts>;
|
|
34
|
+
pointerEvents: Field<PointerEvents, "pointerEvents", Opts>;
|
|
35
|
+
constructor(scene: Scene3D, options?: Opts & Vector3DOptions);
|
|
36
|
+
getItemSnapshot(): {
|
|
37
|
+
id: string;
|
|
38
|
+
kind: "vector3d";
|
|
39
|
+
isDirty: boolean;
|
|
40
|
+
tags: ItemTags;
|
|
41
|
+
origin: Vec3;
|
|
42
|
+
vector: Vec3;
|
|
43
|
+
draggable: PointDraggableDir;
|
|
44
|
+
color: string;
|
|
45
|
+
thickness: number;
|
|
46
|
+
headLength: number;
|
|
47
|
+
headWidth: number;
|
|
48
|
+
pointerEvents: PointerEvents;
|
|
49
|
+
};
|
|
50
|
+
getCursorState(): "grab" | null;
|
|
51
|
+
handleDrag(event: DragEvent<"vector3d">): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
import { CSS2DObject } from "three/addons/renderers/CSS2DRenderer.js";
|
|
3
|
+
import type { ItemKind, ItemSnapshot } from "../common-types/item-registry";
|
|
4
|
+
import { Line2 } from "three/addons/lines/Line2.js";
|
|
5
|
+
import { LineGeometry } from "three/addons/lines/LineGeometry.js";
|
|
6
|
+
import { LineMaterial } from "three/addons/lines/LineMaterial.js";
|
|
7
|
+
export declare const pointScaleDown = 25;
|
|
8
|
+
export declare const lineThicknessScaleDown = 25;
|
|
9
|
+
export type ThreeSceneTypes = {
|
|
10
|
+
point3d: {
|
|
11
|
+
kind: "point3d";
|
|
12
|
+
geometry: THREE.SphereGeometry;
|
|
13
|
+
material: THREE.MeshPhongMaterial;
|
|
14
|
+
mesh: THREE.Mesh<THREE.SphereGeometry, THREE.MeshPhongMaterial>;
|
|
15
|
+
};
|
|
16
|
+
line3d: {
|
|
17
|
+
kind: "line3d";
|
|
18
|
+
curve: THREE.CatmullRomCurve3;
|
|
19
|
+
geometry: THREE.TubeGeometry;
|
|
20
|
+
material: THREE.MeshPhongMaterial;
|
|
21
|
+
mesh: THREE.Mesh<THREE.TubeGeometry, THREE.MeshPhongMaterial>;
|
|
22
|
+
};
|
|
23
|
+
camera3d: {
|
|
24
|
+
kind: "camera3d";
|
|
25
|
+
};
|
|
26
|
+
parametricfunction3d: {
|
|
27
|
+
kind: "parametricfunction3d";
|
|
28
|
+
curve: THREE.CatmullRomCurve3;
|
|
29
|
+
geometry: THREE.TubeGeometry;
|
|
30
|
+
material: THREE.MeshPhongMaterial;
|
|
31
|
+
mesh: THREE.Mesh<THREE.TubeGeometry, THREE.MeshPhongMaterial>;
|
|
32
|
+
};
|
|
33
|
+
axes3d: {
|
|
34
|
+
kind: "axes3d";
|
|
35
|
+
x: {
|
|
36
|
+
curve: THREE.CatmullRomCurve3;
|
|
37
|
+
geometry: THREE.TubeGeometry;
|
|
38
|
+
material: THREE.MeshBasicMaterial;
|
|
39
|
+
mesh: THREE.Mesh<THREE.TubeGeometry, THREE.MeshBasicMaterial>;
|
|
40
|
+
};
|
|
41
|
+
y: {
|
|
42
|
+
curve: THREE.CatmullRomCurve3;
|
|
43
|
+
geometry: THREE.TubeGeometry;
|
|
44
|
+
material: THREE.MeshBasicMaterial;
|
|
45
|
+
mesh: THREE.Mesh<THREE.TubeGeometry, THREE.MeshBasicMaterial>;
|
|
46
|
+
};
|
|
47
|
+
z: {
|
|
48
|
+
curve: THREE.CatmullRomCurve3;
|
|
49
|
+
geometry: THREE.TubeGeometry;
|
|
50
|
+
material: THREE.MeshBasicMaterial;
|
|
51
|
+
mesh: THREE.Mesh<THREE.TubeGeometry, THREE.MeshBasicMaterial>;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
grid3d: {
|
|
55
|
+
kind: "grid3d";
|
|
56
|
+
geometry: LineGeometry;
|
|
57
|
+
material: LineMaterial;
|
|
58
|
+
mesh: Line2;
|
|
59
|
+
};
|
|
60
|
+
sphere3d: {
|
|
61
|
+
kind: "sphere3d";
|
|
62
|
+
geometry: THREE.SphereGeometry;
|
|
63
|
+
material: THREE.MeshPhongMaterial;
|
|
64
|
+
mesh: THREE.Mesh<THREE.SphereGeometry, THREE.MeshPhongMaterial>;
|
|
65
|
+
};
|
|
66
|
+
vector3d: {
|
|
67
|
+
kind: "vector3d";
|
|
68
|
+
group: THREE.Group;
|
|
69
|
+
shaftGeometry: THREE.CylinderGeometry;
|
|
70
|
+
headGeometry: THREE.ConeGeometry;
|
|
71
|
+
material: THREE.MeshPhongMaterial;
|
|
72
|
+
shaftMesh: THREE.Mesh;
|
|
73
|
+
headMesh: THREE.Mesh;
|
|
74
|
+
};
|
|
75
|
+
overlay3d: {
|
|
76
|
+
kind: "overlay3d";
|
|
77
|
+
cssObject: CSS2DObject;
|
|
78
|
+
element: HTMLDivElement;
|
|
79
|
+
};
|
|
80
|
+
plane3d: {
|
|
81
|
+
kind: "plane3d";
|
|
82
|
+
geometry: THREE.PlaneGeometry;
|
|
83
|
+
material: THREE.MeshPhongMaterial;
|
|
84
|
+
mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshPhongMaterial>;
|
|
85
|
+
edgeGeometry?: THREE.EdgesGeometry;
|
|
86
|
+
edgeMaterial?: THREE.LineBasicMaterial;
|
|
87
|
+
edgeLines?: THREE.LineSegments;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
export type ThreeSceneObject<K extends ItemKind = ItemKind> = ThreeSceneTypes[K];
|
|
91
|
+
export type ItemRenderer<K extends ItemKind> = {
|
|
92
|
+
create(item: ItemSnapshot<K>, threeScene: THREE.Scene): ThreeSceneTypes[K];
|
|
93
|
+
update(item: ItemSnapshot<K>, obj: ThreeSceneTypes[K]): void;
|
|
94
|
+
dispose?(obj: ThreeSceneTypes[K], threeScene: THREE.Scene): void;
|
|
95
|
+
};
|
|
96
|
+
export declare const rendererRegistry: {
|
|
97
|
+
[K in ItemKind]: ItemRenderer<K>;
|
|
98
|
+
};
|
|
99
|
+
export declare function getRenderer<K extends ItemKind>(kind: K): ItemRenderer<K>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ItemId, type ItemSnapshot } from "./common-types/item-registry";
|
|
2
|
+
import { type ItemKind, type Item, type ItemOptions, type ItemInstance } from "./common-types/item-registry";
|
|
3
|
+
import type { SceneAtomFunction, BoundAtom, Store } from "./atom-wrapper";
|
|
4
|
+
import type { Atom, PrimitiveAtom } from "jotai";
|
|
5
|
+
export type SceneSnapshot = {
|
|
6
|
+
itemSnapshots: Map<ItemId, ItemSnapshot>;
|
|
7
|
+
};
|
|
8
|
+
export declare class Scene3D {
|
|
9
|
+
store: Store;
|
|
10
|
+
items: Map<ItemId, Item>;
|
|
11
|
+
atom: SceneAtomFunction;
|
|
12
|
+
invalidateSceneListeners: Set<() => void>;
|
|
13
|
+
listenForSceneInvalidation(cb: () => void): () => void;
|
|
14
|
+
invalidateScene(): void;
|
|
15
|
+
constructor();
|
|
16
|
+
create<K extends ItemKind, Opts extends ItemOptions<K>>(kind: K, options: Opts, ..._check: Opts extends ItemOptions<K> ? [] : ["Invalid options for kind"]): ItemInstance<K, Opts>;
|
|
17
|
+
remove<T extends Item>(item: T): void;
|
|
18
|
+
atomize<V, A extends Atom<V>>(value: BoundAtom<A>): BoundAtom<A>;
|
|
19
|
+
atomize<T>(value: T): BoundAtom<PrimitiveAtom<T>>;
|
|
20
|
+
getSceneSnapshot(): SceneSnapshot;
|
|
21
|
+
getCamera(cameraId: ItemId): import("..").Camera3D<import("./atom-wrapper").AtomLikeOptions<import("./items/camera3d").Camera3DFields>>;
|
|
22
|
+
renderComplete(): void;
|
|
23
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
|
|
3
|
+
import { CSS2DRenderer } from "three/addons/renderers/CSS2DRenderer.js";
|
|
4
|
+
import type { Camera3D, Camera3DFields } from "./items/camera3d";
|
|
5
|
+
import type { Scene3D, SceneSnapshot } from "./scene3d";
|
|
6
|
+
import { Vec3 } from "./common-types/vec3";
|
|
7
|
+
import type { ItemId, ItemSnapshot } from "./common-types/item-registry";
|
|
8
|
+
import type { AtomLikeOptions } from "./atom-wrapper";
|
|
9
|
+
import { type ThreeSceneObject } from "./renderers";
|
|
10
|
+
import type { InteractionEvent, InteractionEventType } from "./common-types/interaction-events";
|
|
11
|
+
import type { PointDraggableDir } from "./common-types/axes";
|
|
12
|
+
export declare class View3D {
|
|
13
|
+
scene: Scene3D;
|
|
14
|
+
activeCam: Camera3D<AtomLikeOptions<Camera3DFields>>;
|
|
15
|
+
containerElem: HTMLElement;
|
|
16
|
+
threeScene: THREE.Scene;
|
|
17
|
+
threeCamera: THREE.PerspectiveCamera;
|
|
18
|
+
threeOrbitControls: OrbitControls;
|
|
19
|
+
threeRenderer: THREE.WebGLRenderer;
|
|
20
|
+
css2dRenderer: CSS2DRenderer;
|
|
21
|
+
frameScheduled: boolean;
|
|
22
|
+
threeMeshes: Map<ItemId, ThreeSceneObject>;
|
|
23
|
+
ambientLight: THREE.AmbientLight;
|
|
24
|
+
directionalLight: THREE.DirectionalLight;
|
|
25
|
+
unsubscribeSceneInvalidation: (() => void) | null;
|
|
26
|
+
lastSceneSnapshot: SceneSnapshot;
|
|
27
|
+
raycaster: THREE.Raycaster;
|
|
28
|
+
pointer: THREE.Vector2;
|
|
29
|
+
dragState: {
|
|
30
|
+
itemId: ItemId;
|
|
31
|
+
constraint: PointDraggableDir;
|
|
32
|
+
startWorldPosition: Vec3;
|
|
33
|
+
lastWorldPosition: Vec3;
|
|
34
|
+
} | null;
|
|
35
|
+
pointerDownInfo: {
|
|
36
|
+
itemId: ItemId;
|
|
37
|
+
screenPosition: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
};
|
|
41
|
+
time: number;
|
|
42
|
+
} | null;
|
|
43
|
+
hoveredItemId: ItemId | null;
|
|
44
|
+
sizer: ReturnType<typeof createResponsiveThreeSizer>;
|
|
45
|
+
constructor(scene: Scene3D, activeCamId: ItemId, containerElem: HTMLElement);
|
|
46
|
+
changeActiveCam(cameraId: ItemId): void;
|
|
47
|
+
onSceneChanged(): void;
|
|
48
|
+
createItem(item: ItemSnapshot): void;
|
|
49
|
+
updateItem(item: ItemSnapshot): void;
|
|
50
|
+
removeItem(id: ItemId): void;
|
|
51
|
+
requestRender(): void;
|
|
52
|
+
_render(): void;
|
|
53
|
+
raycastItem(event: PointerEvent): {
|
|
54
|
+
itemId: ItemId;
|
|
55
|
+
worldPosition: Vec3;
|
|
56
|
+
} | null;
|
|
57
|
+
dispatchEvent<E extends InteractionEventType>(eventType: E, event: InteractionEvent): void;
|
|
58
|
+
getItemDragConstraint(snapshot: ItemSnapshot): PointDraggableDir | null;
|
|
59
|
+
screenToWorld(event: PointerEvent, referencePoint: Vec3, constraint: PointDraggableDir): Vec3;
|
|
60
|
+
closestPointOnAxis(ray: THREE.Ray, axisOrigin: THREE.Vector3, axisDir: THREE.Vector3): THREE.Vector3;
|
|
61
|
+
private getCurrentRay;
|
|
62
|
+
updateCursor(): void;
|
|
63
|
+
onPointerDown: (event: PointerEvent) => void;
|
|
64
|
+
onPointerMove: (event: PointerEvent) => void;
|
|
65
|
+
onPointerUp: (event: PointerEvent) => void;
|
|
66
|
+
onPointerLeave: (_event: PointerEvent) => void;
|
|
67
|
+
dispose(): void;
|
|
68
|
+
}
|
|
69
|
+
declare function createResponsiveThreeSizer({ container, renderer, camera, onResize, }: {
|
|
70
|
+
container: HTMLElement;
|
|
71
|
+
renderer: THREE.WebGLRenderer;
|
|
72
|
+
camera: THREE.PerspectiveCamera;
|
|
73
|
+
onResize: () => void;
|
|
74
|
+
}): {
|
|
75
|
+
applyIfNeeded: () => void;
|
|
76
|
+
dispose: () => void;
|
|
77
|
+
};
|
|
78
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { Scene3D } from "./core/scene3d";
|
|
2
|
+
export { View3D } from "./core/view3d";
|
|
3
|
+
export { vec3, Vec3 } from "./core/common-types/vec3";
|
|
4
|
+
export { vec2, Vec2 } from "./core/common-types/vec2";
|
|
5
|
+
export { Point3D } from "./core/items/point3d";
|
|
6
|
+
export { Line3D } from "./core/items/line3d";
|
|
7
|
+
export { Sphere3D } from "./core/items/sphere3d";
|
|
8
|
+
export { Axes3D } from "./core/items/axes3d";
|
|
9
|
+
export { Grid3D } from "./core/items/grid3d";
|
|
10
|
+
export { Camera3D } from "./core/items/camera3d";
|
|
11
|
+
export { ParametricFunction3D } from "./core/items/parametric-function3d";
|
|
12
|
+
export { Vector3D } from "./core/items/vector3d";
|
|
13
|
+
export { Overlay3D } from "./core/items/overlay3d";
|
|
14
|
+
export { Plane3D } from "./core/items/plane3d";
|
|
15
|
+
export type { BoundAtom, SceneAtom, AtomLikeInput } from "./core/atom-wrapper";
|
|
16
|
+
export type { ItemKind, ItemId, ItemOptions, ItemInstance, ItemSnapshot } from "./core/common-types/item-registry";
|
|
17
|
+
export type { DragEvent, ClickEvent, HoverEvent, DragHandler, ClickHandler, HoverHandler } from "./core/common-types/interaction-events";
|
|
18
|
+
export type { OverlayFormat, OverlayAnchor } from "./core/common-types/overlay";
|