@tresjs/core 4.1.0 → 4.2.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.
@@ -1,10 +1,10 @@
1
- import { Intersection, Object3D } from 'three';
2
- import { Ref, ShallowRef } from 'vue';
3
- import { TresEvent } from 'src/types';
1
+ import { Intersection, Object3D, Object3DEventMap } from 'three';
2
+ import { ShallowRef } from 'vue';
3
+ import { TresEvent, TresInstance } from 'src/types';
4
4
  import { TresContext } from '../useTresContextProvider';
5
5
 
6
- export declare const useRaycaster: (objectsWithEvents: Ref<Object3D[]>, ctx: TresContext) => {
7
- intersects: ShallowRef<Intersection<Object3D<import('three').Object3DEventMap>>[]>;
6
+ export declare const useRaycaster: (objectsWithEvents: ShallowRef<TresInstance[]>, ctx: TresContext) => {
7
+ intersects: ShallowRef<Intersection<Object3D<Object3DEventMap>>[]>;
8
8
  onClick: (fn: (value: TresEvent) => void) => () => void;
9
9
  onDblClick: (fn: (value: TresEvent) => void) => () => void;
10
10
  onContextMenu: (fn: (value: TresEvent) => void) => () => void;
@@ -70,6 +70,11 @@ export interface UseRendererOptions extends TransformToMaybeRefOrGetter<WebGLRen
70
70
  windowSize?: MaybeRefOrGetter<boolean | string>;
71
71
  preset?: MaybeRefOrGetter<RendererPresetsType>;
72
72
  renderMode?: MaybeRefOrGetter<'always' | 'on-demand' | 'manual'>;
73
+ /**
74
+ * A `number` sets the renderer's device pixel ratio.
75
+ * `[number, number]` clamp's the renderer's device pixel ratio.
76
+ */
77
+ dpr?: MaybeRefOrGetter<number | [number, number]>;
73
78
  }
74
79
  export declare function useRenderer({ canvas, options, contextParts: { sizes, render, invalidate, advance }, }: {
75
80
  canvas: MaybeRef<HTMLCanvasElement>;
@@ -2,7 +2,6 @@ import { Camera, EventDispatcher, WebGLRenderer, Raycaster } from 'three';
2
2
  import { ComputedRef, DeepReadonly, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
3
3
  import { UseRendererOptions } from '../useRenderer';
4
4
  import { EmitEventFn, TresObject, TresScene } from '../../types';
5
- import { EventProps } from '../usePointerEventHandler';
6
5
  import { TresEventManager } from '../useTresEventManager';
7
6
  import { SizesType } from '../useSizes';
8
7
  import { RendererLoop } from '../../core/loop';
@@ -62,7 +61,7 @@ export interface TresContext {
62
61
  setCameraActive: (cameraOrUuid: Camera | string) => void;
63
62
  deregisterCamera: (maybeCamera: unknown) => void;
64
63
  eventManager?: TresEventManager;
65
- registerObjectAtPointerEventHandler?: (object: TresObject & EventProps) => void;
64
+ registerObjectAtPointerEventHandler?: (object: TresObject) => void;
66
65
  deregisterObjectAtPointerEventHandler?: (object: TresObject) => void;
67
66
  registerBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
68
67
  deregisterBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
@@ -12,11 +12,15 @@ export interface TresEventManager {
12
12
  * So we need to track them separately
13
13
  * Note: These are used in nodeOps
14
14
  */
15
+ registerObject: (object: unknown) => void;
16
+ deregisterObject: (object: unknown) => void;
15
17
  registerPointerMissedObject: (object: unknown) => void;
16
18
  deregisterPointerMissedObject: (object: unknown) => void;
17
19
  }
18
20
  export declare function useTresEventManager(scene: Scene, context: TresContext, emit: EmitEventFn): {
19
21
  forceUpdate: () => void;
22
+ registerObject: (maybeTresObject: unknown) => void;
23
+ deregisterObject: (maybeTresObject: unknown) => void;
20
24
  registerPointerMissedObject: (maybeTresObject: unknown) => void;
21
25
  deregisterPointerMissedObject: (maybeTresObject: unknown) => void;
22
26
  };
@@ -2,8 +2,9 @@ import { DefineComponent, VNode, VNodeRef } from 'vue';
2
2
  import { TresContext } from '../composables/useTresContextProvider';
3
3
 
4
4
  import type * as THREE from 'three';
5
- export type AttachFnType<O = any> = (parent: any, self: O) => () => void;
6
- export type AttachType<O = any> = string | AttachFnType<O>;
5
+ export type AttachFnType = (parent: any, self: TresInstance) => () => void;
6
+ export type AttachType = string | AttachFnType;
7
+ export type DisposeType = ((self: TresInstance) => void) | boolean | 'default';
7
8
  export type ConstructorRepresentation = new (...args: any[]) => any;
8
9
  export type NonFunctionKeys<P> = {
9
10
  [K in keyof P]-?: P[K] extends Function ? never : K;
@@ -25,11 +26,9 @@ export interface InstanceProps<T = any, P = any> {
25
26
  object?: T;
26
27
  visible?: boolean;
27
28
  dispose?: null;
28
- attach?: AttachType<T>;
29
29
  [prop: string]: any;
30
30
  }
31
31
  interface TresBaseObject {
32
- attach?: string;
33
32
  removeFromParent?: () => void;
34
33
  dispose?: () => void;
35
34
  [prop: string]: any;
@@ -45,7 +44,9 @@ export interface LocalState {
45
44
  objects: TresObject[];
46
45
  parent: TresObject | null;
47
46
  primitive?: boolean;
48
- disposable?: boolean;
47
+ dispose?: DisposeType;
48
+ attach?: AttachType;
49
+ previousAttach: any;
49
50
  }
50
51
  export interface TresObject3D extends THREE.Object3D<THREE.Object3DEventMap> {
51
52
  geometry?: THREE.BufferGeometry & TresBaseObject;
@@ -57,6 +58,10 @@ export type TresObject = TresBaseObject & (TresObject3D | THREE.BufferGeometry |
57
58
  export type TresInstance = TresObject & {
58
59
  __tres: LocalState;
59
60
  };
61
+ export type TresPrimitive = TresInstance & {
62
+ object: TresInstance;
63
+ isPrimitive: true;
64
+ };
60
65
  export interface TresScene extends THREE.Scene {
61
66
  __tres: {
62
67
  root: TresContext;
@@ -1,5 +1,7 @@
1
1
  import { Material, Mesh, MeshBasicMaterial, Scene, Vector3 } from 'three';
2
- import { TresObject } from 'src/types';
2
+ import { AttachType, LocalState, TresInstance, TresObject, TresPrimitive } from 'src/types';
3
+ import { nodeOps } from 'src/core/nodeOps';
4
+ import { TresContext } from '../composables/useTresContextProvider';
3
5
 
4
6
  export declare function toSetMethodName(key: string): string;
5
7
  export declare const merge: (target: any, source: any) => any;
@@ -31,3 +33,20 @@ export declare function disposeObject3D(object: TresObject): void;
31
33
  * @param callbackFn - A function called for each element of the array. It should return a truthy value to keep the element in the array.
32
34
  */
33
35
  export declare function filterInPlace<T>(array: T[], callbackFn: (element: T, index: number) => unknown): T[];
36
+ export declare function resolve(obj: Record<string, any>, key: string): {
37
+ target: Record<string, any>;
38
+ key: string;
39
+ };
40
+ export declare function attach(parent: TresInstance, child: TresInstance, type: AttachType): void;
41
+ export declare function detach(parent: any, child: TresInstance, type: AttachType): void;
42
+ export declare function prepareTresInstance<T extends TresObject>(obj: T, state: Partial<LocalState>, context: TresContext): TresInstance;
43
+ export declare function invalidateInstance(instance: TresObject): void;
44
+ export declare function noop(fn: string): any;
45
+ export declare function setPixelRatio(renderer: {
46
+ setPixelRatio?: (dpr: number) => void;
47
+ getPixelRatio?: () => number;
48
+ }, systemDpr: number, userDpr?: number | [number, number]): void;
49
+ export declare function setPrimitiveObject(newObject: TresObject, primitive: TresPrimitive, setTarget: (object: TresObject) => void, nodeOpsFns: Pick<ReturnType<typeof nodeOps>, 'patchProp' | 'insert' | 'remove'>, context: TresContext): boolean;
50
+ export declare function unboxTresPrimitive<T>(maybePrimitive: T): T | TresInstance;
51
+ export declare function doRemoveDetach(node: TresObject, context: TresContext): void;
52
+ export declare function doRemoveDeregister(node: TresObject, context: TresContext): void;
@@ -1,7 +1,11 @@
1
- import { TresObject } from 'src/types';
2
- import { BufferGeometry, Camera, Fog, Material, Object3D } from 'three';
1
+ import { TresObject, TresPrimitive } from 'src/types';
2
+ import { BufferGeometry, Camera, Fog, Material, Object3D, Scene } from 'three';
3
3
 
4
- export declare function arr(u: unknown): boolean;
4
+ export declare function und(u: unknown): u is undefined;
5
+ export declare function arr(u: unknown): u is any[];
6
+ export declare function num(u: unknown): u is number;
7
+ export declare function str(u: unknown): u is string;
8
+ export declare function bool(u: unknown): u is boolean;
5
9
  export declare function fun(u: unknown): u is Function;
6
10
  export declare function obj(u: unknown): u is Record<string | number | symbol, unknown>;
7
11
  export declare function object3D(u: unknown): u is Object3D;
@@ -9,4 +13,6 @@ export declare function camera(u: unknown): u is Camera;
9
13
  export declare function bufferGeometry(u: unknown): u is BufferGeometry;
10
14
  export declare function material(u: unknown): u is Material;
11
15
  export declare function fog(u: unknown): u is Fog;
16
+ export declare function scene(u: unknown): u is Scene;
12
17
  export declare function tresObject(u: unknown): u is TresObject;
18
+ export declare function tresPrimitive(u: unknown): u is TresPrimitive;
@@ -0,0 +1 @@
1
+ export declare function createRetargetingProxy<T extends Record<string | number | symbol, any>, K extends keyof T & string & symbol>(target: T, getters?: Record<string | number | symbol, (t: T) => unknown>, setters?: Partial<Record<K, (val: T[K], t: T, proxy: T, setTarget: (newTarget: T) => void) => boolean>>): T;