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.
Files changed (37) hide show
  1. package/dist/core/atom-wrapper.d.ts +38 -0
  2. package/dist/core/common-types/axes.d.ts +3 -0
  3. package/dist/core/common-types/colors.d.ts +1 -0
  4. package/dist/core/common-types/drag-utils.d.ts +4 -0
  5. package/dist/core/common-types/interaction-events.d.ts +37 -0
  6. package/dist/core/common-types/item-registry.d.ts +49 -0
  7. package/dist/core/common-types/overlay.d.ts +3 -0
  8. package/dist/core/common-types/tags.d.ts +1 -0
  9. package/dist/core/common-types/vec2.d.ts +17 -0
  10. package/dist/core/common-types/vec3.d.ts +17 -0
  11. package/dist/core/item.d.ts +27 -0
  12. package/dist/core/items/axes3d.d.ts +39 -0
  13. package/dist/core/items/camera3d.d.ts +43 -0
  14. package/dist/core/items/grid3d.d.ts +47 -0
  15. package/dist/core/items/line3d.d.ts +37 -0
  16. package/dist/core/items/overlay3d.d.ts +51 -0
  17. package/dist/core/items/parametric-function3d.d.ts +45 -0
  18. package/dist/core/items/plane3d.d.ts +46 -0
  19. package/dist/core/items/point3d.d.ts +44 -0
  20. package/dist/core/items/sphere3d.d.ts +37 -0
  21. package/dist/core/items/vector3d.d.ts +52 -0
  22. package/dist/core/renderers/axes3d.d.ts +2 -0
  23. package/dist/core/renderers/camera3d.d.ts +2 -0
  24. package/dist/core/renderers/grid3d.d.ts +2 -0
  25. package/dist/core/renderers/index.d.ts +99 -0
  26. package/dist/core/renderers/line3d.d.ts +2 -0
  27. package/dist/core/renderers/overlay3d.d.ts +2 -0
  28. package/dist/core/renderers/parametric-function3d.d.ts +2 -0
  29. package/dist/core/renderers/plane3d.d.ts +2 -0
  30. package/dist/core/renderers/point3d.d.ts +2 -0
  31. package/dist/core/renderers/sphere3d.d.ts +2 -0
  32. package/dist/core/renderers/vector3d.d.ts +2 -0
  33. package/dist/core/scene3d.d.ts +23 -0
  34. package/dist/core/view3d.d.ts +78 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.js +27209 -0
  37. 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,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const axes3dRenderer: ItemRenderer<"axes3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const camera3dRenderer: ItemRenderer<"camera3d">;
@@ -0,0 +1,2 @@
1
+ import { type ItemRenderer } from "./index";
2
+ export declare const grid3dRenderer: ItemRenderer<"grid3d">;
@@ -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,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const line3dRenderer: ItemRenderer<"line3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const overlay3dRenderer: ItemRenderer<"overlay3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const parametricFunction3dRenderer: ItemRenderer<"parametricfunction3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const plane3dRenderer: ItemRenderer<"plane3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const point3dRenderer: ItemRenderer<"point3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const sphere3dRenderer: ItemRenderer<"sphere3d">;
@@ -0,0 +1,2 @@
1
+ import type { ItemRenderer } from "./index";
2
+ export declare const vector3dRenderer: ItemRenderer<"vector3d">;
@@ -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 {};
@@ -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";