@tresjs/core 5.0.0-next.1 → 5.0.0-next.3

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,85 +1,87 @@
1
- import { Camera, ColorSpace, ShadowMapType, ToneMapping, WebGLRenderer, WebGLRendererParameters } from 'three';
2
- import { RendererPresetsType } from '../composables/useRenderer/const';
3
- import { TresPointerEvent } from '../types/';
4
- import { TresContext } from '../composables';
5
- export interface TresCanvasProps extends Omit<WebGLRendererParameters, 'canvas'> {
6
- shadows?: boolean;
7
- clearColor?: string;
8
- toneMapping?: ToneMapping;
9
- shadowMapType?: ShadowMapType;
10
- useLegacyLights?: boolean;
11
- outputColorSpace?: ColorSpace;
12
- toneMappingExposure?: number;
13
- renderMode?: 'always' | 'on-demand' | 'manual';
14
- dpr?: number | [number, number];
15
- camera?: Camera;
16
- preset?: RendererPresetsType;
1
+ import { TresCamera } from '../types/';
2
+ import { PointerEvent } from '@pmndrs/pointer-events';
3
+ import { RendererOptions, TresContext, TresRenderer } from '../composables';
4
+ import * as THREE from 'three';
5
+ export interface TresCanvasProps extends RendererOptions {
6
+ /**
7
+ * Custom camera instance to use as main camera
8
+ * If not provided, a default PerspectiveCamera will be created
9
+ */
10
+ camera?: TresCamera;
11
+ /**
12
+ * Whether the canvas should be sized to the window
13
+ * When true, canvas will be fixed positioned and full viewport size
14
+ * @default false
15
+ */
17
16
  windowSize?: boolean;
17
+ /**
18
+ * Whether to enable the provide/inject bridge between Vue and TresJS
19
+ * When true, Vue's provide/inject will work across the TresJS boundary
20
+ * @default true
21
+ */
18
22
  enableProvideBridge?: boolean;
19
23
  }
20
- declare function __VLS_template(): {
21
- attrs: Partial<{}>;
22
- slots: Readonly<{
23
- default: () => any;
24
- }> & {
25
- default: () => any;
26
- };
27
- refs: {
28
- canvas: HTMLCanvasElement;
29
- };
30
- rootEl: HTMLCanvasElement;
31
- };
32
- type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
33
- declare const __VLS_component: import('vue').DefineComponent<TresCanvasProps, {
24
+ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<TresCanvasProps, {
34
25
  context: import('vue').ShallowRef<TresContext | null, TresContext | null>;
35
26
  dispose: () => void;
36
27
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
37
- render: (renderer: WebGLRenderer) => any;
38
- click: (event: TresPointerEvent) => any;
39
- wheel: (event: TresPointerEvent) => any;
28
+ render: (renderer: TresRenderer) => any;
29
+ click: (event: PointerEvent<MouseEvent>) => any;
30
+ contextmenu: (event: PointerEvent<MouseEvent>) => any;
31
+ pointermove: (event: PointerEvent<MouseEvent>) => any;
32
+ pointerenter: (event: PointerEvent<MouseEvent>) => any;
33
+ pointerleave: (event: PointerEvent<MouseEvent>) => any;
34
+ pointerover: (event: PointerEvent<MouseEvent>) => any;
35
+ pointerout: (event: PointerEvent<MouseEvent>) => any;
36
+ dblclick: (event: PointerEvent<MouseEvent>) => any;
37
+ pointerdown: (event: PointerEvent<MouseEvent>) => any;
38
+ pointerup: (event: PointerEvent<MouseEvent>) => any;
39
+ pointercancel: (event: PointerEvent<MouseEvent>) => any;
40
+ lostpointercapture: (event: PointerEvent<MouseEvent>) => any;
41
+ wheel: (event: PointerEvent<MouseEvent>) => any;
40
42
  ready: (context: TresContext) => any;
41
- doubleClick: (event: TresPointerEvent) => any;
42
- contextMenu: (event: TresPointerEvent) => any;
43
- pointerMove: (event: TresPointerEvent) => any;
44
- pointerUp: (event: TresPointerEvent) => any;
45
- pointerDown: (event: TresPointerEvent) => any;
46
- pointerEnter: (event: TresPointerEvent) => any;
47
- pointerLeave: (event: TresPointerEvent) => any;
48
- pointerOver: (event: TresPointerEvent) => any;
49
- pointerOut: (event: TresPointerEvent) => any;
50
- pointerMissed: (event: TresPointerEvent) => any;
43
+ pointermissed: (event: PointerEvent<MouseEvent>) => any;
51
44
  }, string, import('vue').PublicProps, Readonly<TresCanvasProps> & Readonly<{
52
- onRender?: ((renderer: WebGLRenderer) => any) | undefined;
53
- onClick?: ((event: TresPointerEvent) => any) | undefined;
54
- onWheel?: ((event: TresPointerEvent) => any) | undefined;
45
+ onRender?: ((renderer: TresRenderer) => any) | undefined;
46
+ onClick?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
47
+ onContextmenu?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
48
+ onPointermove?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
49
+ onPointerenter?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
50
+ onPointerleave?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
51
+ onPointerover?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
52
+ onPointerout?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
53
+ onDblclick?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
54
+ onPointerdown?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
55
+ onPointerup?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
56
+ onPointercancel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
57
+ onLostpointercapture?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
58
+ onWheel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
55
59
  onReady?: ((context: TresContext) => any) | undefined;
56
- onDoubleClick?: ((event: TresPointerEvent) => any) | undefined;
57
- onContextMenu?: ((event: TresPointerEvent) => any) | undefined;
58
- onPointerMove?: ((event: TresPointerEvent) => any) | undefined;
59
- onPointerUp?: ((event: TresPointerEvent) => any) | undefined;
60
- onPointerDown?: ((event: TresPointerEvent) => any) | undefined;
61
- onPointerEnter?: ((event: TresPointerEvent) => any) | undefined;
62
- onPointerLeave?: ((event: TresPointerEvent) => any) | undefined;
63
- onPointerOver?: ((event: TresPointerEvent) => any) | undefined;
64
- onPointerOut?: ((event: TresPointerEvent) => any) | undefined;
65
- onPointerMissed?: ((event: TresPointerEvent) => any) | undefined;
60
+ onPointermissed?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
66
61
  }>, {
62
+ toneMapping: THREE.ToneMapping;
67
63
  alpha: boolean;
68
- antialias: boolean;
64
+ logarithmicDepthBuffer: boolean;
65
+ depth: boolean;
69
66
  stencil: boolean;
67
+ windowSize: boolean;
68
+ clearColor: THREE.ColorRepresentation;
69
+ shadowMapType: THREE.ShadowMapType;
70
+ enableProvideBridge: boolean;
71
+ antialias: boolean;
70
72
  preserveDrawingBuffer: boolean;
71
- depth: boolean;
72
73
  failIfMajorPerformanceCaveat: boolean;
73
- logarithmicDepthBuffer: boolean;
74
+ clearAlpha: number;
74
75
  shadows: boolean;
75
76
  useLegacyLights: boolean;
76
- windowSize: boolean;
77
77
  renderMode: "always" | "on-demand" | "manual";
78
- enableProvideBridge: boolean;
79
78
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
80
- canvas: HTMLCanvasElement;
81
- }, HTMLCanvasElement>;
82
- declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
79
+ canvasRef: HTMLCanvasElement;
80
+ }, HTMLCanvasElement>, Readonly<{
81
+ default: () => any;
82
+ }> & {
83
+ default: () => any;
84
+ }>;
83
85
  export default _default;
84
86
  type __VLS_WithTemplateSlots<T, S> = T & {
85
87
  new (): {
@@ -3,10 +3,8 @@ export * from './useCamera';
3
3
  export * from './useGraph';
4
4
  export * from './useLoader';
5
5
  export * from './useLoop';
6
- export * from './useRaycaster';
7
6
  export * from './useRenderer/useRendererManager';
8
7
  export * from './useRenderLoop';
9
8
  export * from './useTres';
10
9
  export * from './useTresContextProvider';
11
- export * from './useTresEventManager';
12
10
  export { UseLoader };
@@ -1,31 +1,31 @@
1
1
  import { TresContext } from '../useTresContextProvider';
2
2
  import { ComputedRef, Ref } from 'vue';
3
- import { Camera } from 'three';
3
+ import { TresCamera } from '../../types';
4
4
  /**
5
5
  * Interface for the return value of the useCamera composable
6
6
  */
7
7
  export interface UseCameraReturn {
8
- activeCamera: ComputedRef<Camera | undefined>;
8
+ activeCamera: ComputedRef<TresCamera>;
9
9
  /**
10
10
  * The list of cameras
11
11
  */
12
- cameras: Ref<Camera[]>;
12
+ cameras: Ref<TresCamera[]>;
13
13
  /**
14
14
  * Register a camera
15
15
  * @param camera - The camera to register
16
16
  * @param active - Whether to set the camera as active
17
17
  */
18
- registerCamera: (camera: Camera, active?: boolean) => void;
18
+ registerCamera: (camera: TresCamera, active?: boolean) => void;
19
19
  /**
20
20
  * Deregister a camera
21
21
  * @param camera - The camera to deregister
22
22
  */
23
- deregisterCamera: (camera: Camera) => void;
23
+ deregisterCamera: (camera: TresCamera) => void;
24
24
  /**
25
25
  * Set the active camera
26
26
  * @param cameraOrUuid - The camera or its UUID to set as active
27
27
  */
28
- setActiveCamera: (cameraOrUuid: string | Camera) => void;
28
+ setActiveCamera: (cameraOrUuid: string | TresCamera) => void;
29
29
  }
30
30
  /**
31
31
  * Interface for the parameters of the useCamera composable
@@ -0,0 +1,10 @@
1
+ import { PointerEvent, PointerEventsMap } from '@pmndrs/pointer-events';
2
+ import { Event, Object3D, Object3DEventMap } from 'three';
3
+ import { MaybeRef } from 'vue';
4
+ import { TresContext } from '../useTresContextProvider';
5
+ export declare function useEventManager({ canvas, contextParts: { scene, camera, loop }, }: {
6
+ canvas: MaybeRef<HTMLCanvasElement>;
7
+ contextParts: Pick<TresContext, 'scene' | 'camera' | 'loop'>;
8
+ }): {
9
+ onPointerMissed: import('@vueuse/core').EventHookOn<PointerEvent<MouseEvent> & Event<"click", Object3D<Object3DEventMap & PointerEventsMap>>>;
10
+ };
@@ -1,99 +1,188 @@
1
- import { ColorSpace, Scene, ShadowMapType, ToneMapping, WebGLRendererParameters, WebGLRenderer } from 'three';
2
- import { TresColor } from '../../types';
1
+ import { RendererLoop } from './../../core/loop';
2
+ import { ColorRepresentation, ColorSpace, ShadowMapType, ToneMapping, WebGLRenderer } from 'three';
3
3
  import { TresContext } from '../useTresContextProvider';
4
- import { RendererPresetsType } from './const';
5
- import { MaybeRefOrGetter } from '@vueuse/core';
6
- import { MaybeRef } from 'vue';
7
- type TransformToMaybeRefOrGetter<T> = {
8
- [K in keyof T]: MaybeRefOrGetter<T[K]> | MaybeRefOrGetter<T[K]>;
9
- };
4
+ import { MaybeRef, ShallowRef } from 'vue';
5
+ import { Renderer } from 'three/webgpu';
6
+ import { SizesType } from '../useSizes';
7
+ import { UseCameraReturn } from '../useCamera';
8
+ import { TresScene } from '../../types';
10
9
  /**
11
10
  * If set to 'on-demand', the scene will only be rendered when the current frame is invalidated
12
11
  * If set to 'manual', the scene will only be rendered when advance() is called
13
12
  * If set to 'always', the scene will be rendered every frame
14
13
  */
15
14
  export type RenderMode = 'always' | 'on-demand' | 'manual';
16
- export interface UseRendererOptions extends TransformToMaybeRefOrGetter<WebGLRendererParameters> {
15
+ export type TresRenderer = WebGLRenderer | Renderer;
16
+ export interface RendererOptions {
17
+ /**
18
+ * WebGL Context options (Readonly because they are passed to the renderer constructor)
19
+ * They can't be changed after the renderer is created because they are passed to the canvas context
20
+ */
21
+ antialias?: boolean;
22
+ /**
23
+ * Enables stencil buffer with 8 bits.
24
+ * Required for stencil-based operations like shadow volumes or post-processing effects.
25
+ * @readonly
26
+ * @default true
27
+ */
28
+ stencil?: boolean;
29
+ /**
30
+ * Enables depth buffer with at least 16 bits.
31
+ * Required for proper 3D rendering and depth testing.
32
+ * @readonly
33
+ * @default true
34
+ */
35
+ depth?: boolean;
36
+ /**
37
+ * Sets the shader precision of the renderer.
38
+ * @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
39
+ * @default 'highp'
40
+ */
41
+ precision?: 'highp' | 'mediump' | 'lowp';
42
+ /**
43
+ * Enables logarithmic depth buffer. Useful for scenes with large differences in scale.
44
+ * Helps prevent z-fighting in scenes with objects very close and very far from the camera.
45
+ * @readonly
46
+ * @default false
47
+ */
48
+ logarithmicDepthBuffer?: boolean;
49
+ /**
50
+ * Preserves the buffers until manually cleared or overwritten.
51
+ * Needed for screenshots or when reading pixels from the canvas.
52
+ * Warning: This may impact performance.
53
+ * @readonly
54
+ * @default false
55
+ */
56
+ preserveDrawingBuffer?: boolean;
57
+ /**
58
+ * Power preference for the renderer.
59
+ * Power preference for the renderer.
60
+ * - `default`: Automatically chooses the most suitable power setting.
61
+ * - `high-performance`: Prioritizes rendering performance.
62
+ * - `low-power`: Tries to reduce power usage.
63
+ * @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
64
+ * @default 'default'
65
+ * @readonly
66
+ */
67
+ powerPreference?: WebGLPowerPreference;
68
+ /**
69
+ * Whether to create the WebGL context with an alpha buffer.
70
+ * This is a WebGL context option that must be set during context creation and cannot be changed later.
71
+ * When true, the canvas can be transparent, showing content behind it.
72
+ * @readonly
73
+ * @default false
74
+ */
75
+ alpha?: boolean;
76
+ /**
77
+ * Whether to premultiply the alpha of the canvas.
78
+ * @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
79
+ * @default true
80
+ */
81
+ premultipliedAlpha?: boolean;
17
82
  /**
18
- * Enable shadows in the Renderer
19
- *
83
+ * Whether to fail if the major performance caveat is detected.
84
+ * @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
20
85
  * @default false
21
86
  */
22
- shadows?: MaybeRefOrGetter<boolean>;
87
+ failIfMajorPerformanceCaveat?: boolean;
88
+ /**
89
+ * WebGL options with set methods
90
+ * @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
91
+ */
92
+ /**
93
+ * Clear color for the canvas
94
+ * Can include alpha value (e.g. '#00808000' for fully transparent teal)
95
+ */
96
+ clearColor?: ColorRepresentation;
23
97
  /**
24
- * Set the shadow map type
25
- * Can be PCFShadowMap, PCFSoftShadowMap, BasicShadowMap, VSMShadowMap
26
- * [see](https://threejs.org/docs/?q=we#api/en/constants/Renderer)
27
- *
28
- * @default PCFSoftShadowMap
98
+ * The opacity of the clear color (0-1)
99
+ * Controls the transparency of the clear color
100
+ * @default 1
29
101
  */
30
- shadowMapType?: MaybeRefOrGetter<ShadowMapType>;
102
+ clearAlpha?: number;
31
103
  /**
32
- * Whether to use physically correct lighting mode.
33
- * See the [lights / physical example](https://threejs.org/examples/#webgl_lights_physical).
34
- *
104
+ * Enable shadow rendering in the scene
35
105
  * @default false
36
- * @deprecated Use {@link WebGLRenderer.useLegacyLights useLegacyLights} instead.
37
106
  */
38
- physicallyCorrectLights?: MaybeRefOrGetter<boolean>;
107
+ shadows?: boolean;
108
+ /**
109
+ * Tone mapping technique to use for the scene
110
+ * - `NoToneMapping`: No tone mapping is applied.
111
+ * - `LinearToneMapping`: Linear tone mapping.
112
+ * - `ReinhardToneMapping`: Reinhard tone mapping.
113
+ * - `CineonToneMapping`: Cineon tone mapping.
114
+ * - `ACESFilmicToneMapping`: ACES Filmic tone mapping.
115
+ * - `AgXToneMapping`: AgX tone mapping.
116
+ * - `NeutralToneMapping`: Neutral tone mapping.
117
+ * @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
118
+ * @default ACESFilmicToneMapping (Opinionated default by TresJS)
119
+ */
120
+ toneMapping?: ToneMapping;
39
121
  /**
40
- * Whether to use legacy lighting mode.
41
- *
42
- * @type {MaybeRefOrGetter<boolean>}
43
- * @memberof UseRendererOptions
122
+ * Type of shadow map to use for shadow calculations
123
+ * - `BasicShadowMap`: Basic shadow map.
124
+ * - `PCFShadowMap`: Percentage-Closer Filtering shadow map.
125
+ * - `PCFSoftShadowMap`: Percentage-Closer Filtering soft shadow map.
126
+ * - `VSMShadowMap`: Variance shadow map.
127
+ * @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
128
+ * @default PCFSoftShadowMap (Opinionated default by TresJS)
44
129
  */
45
- useLegacyLights?: MaybeRefOrGetter<boolean>;
130
+ shadowMapType?: ShadowMapType;
46
131
  /**
47
- * Defines the output encoding of the renderer.
48
- * Can be LinearSRGBColorSpace, SRGBColorSpace
49
- *
50
- * @default LinearSRGBColorSpace
132
+ * Whether to use legacy lights system instead of the new one
133
+ * @deprecated Use `useLegacyLights: false` for the new lighting system
51
134
  */
52
- outputColorSpace?: MaybeRefOrGetter<ColorSpace>;
135
+ useLegacyLights?: boolean;
53
136
  /**
54
- * Defines the tone mapping used by the renderer.
55
- * Can be NoToneMapping, LinearToneMapping,
56
- * ReinhardToneMapping, Uncharted2ToneMapping,
57
- * CineonToneMapping, ACESFilmicToneMapping,
58
- * CustomToneMapping
59
- *
60
- * @default ACESFilmicToneMapping
137
+ * Color space for the output render
138
+ * @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
61
139
  */
62
- toneMapping?: MaybeRefOrGetter<ToneMapping>;
140
+ outputColorSpace?: ColorSpace;
63
141
  /**
64
- * Defines the tone mapping exposure used by the renderer.
65
- *
142
+ * Exposure level of tone mapping
66
143
  * @default 1
67
144
  */
68
- toneMappingExposure?: MaybeRefOrGetter<number>;
145
+ toneMappingExposure?: number;
146
+ /**
147
+ * Rendering mode for the canvas
148
+ * - 'always': Renders every frame
149
+ * - 'on-demand': Renders only when changes are detected
150
+ * - 'manual': Renders only when explicitly called
151
+ * @default 'always'
152
+ */
153
+ renderMode?: 'always' | 'on-demand' | 'manual';
69
154
  /**
70
- * The color value to use when clearing the canvas.
71
- *
72
- * @default 0x000000
155
+ * Device Pixel Ratio for the renderer
156
+ * Can be a single number or a tuple defining a range [min, max]
73
157
  */
74
- clearColor?: MaybeRefOrGetter<TresColor>;
75
- windowSize?: MaybeRefOrGetter<boolean | string>;
76
- preset?: MaybeRefOrGetter<RendererPresetsType>;
77
- renderMode?: MaybeRef<RenderMode>;
158
+ dpr?: number | [number, number];
78
159
  /**
79
- * A `number` sets the renderer's device pixel ratio.
80
- * `[number, number]` clamp's the renderer's device pixel ratio.
160
+ * Custom WebGL renderer instance
161
+ * Allows using a pre-configured renderer instead of creating a new one
81
162
  */
82
- dpr?: MaybeRefOrGetter<number | [number, number]>;
163
+ renderer?: (ctx: TresRendererSetupContext) => TresRenderer;
164
+ }
165
+ export interface TresRendererSetupContext {
166
+ sizes: SizesType;
167
+ scene: ShallowRef<TresScene>;
168
+ camera: UseCameraReturn;
169
+ loop: RendererLoop;
170
+ canvas: MaybeRef<HTMLCanvasElement>;
83
171
  }
84
- export declare function useRendererManager({ scene, canvas, options, contextParts: { sizes, loop, camera }, }: {
85
- scene: Scene;
172
+ export interface UseRendererOptions {
173
+ scene: ShallowRef<TresScene>;
86
174
  canvas: MaybeRef<HTMLCanvasElement>;
87
- options: UseRendererOptions;
175
+ options: RendererOptions;
88
176
  contextParts: Pick<TresContext, 'sizes' | 'camera' | 'loop'>;
89
- }): {
90
- instance: import('vue').ShallowRef<WebGLRenderer, WebGLRenderer>;
91
- isReady: Readonly<import('vue').Ref<boolean, boolean>>;
177
+ }
178
+ export declare function useRendererManager({ scene, canvas, options, contextParts: { sizes, loop, camera }, }: UseRendererOptions): {
179
+ instance: TresRenderer;
92
180
  advance: () => void;
93
- onRender: import('@vueuse/core').EventHook<WebGLRenderer>;
181
+ onRender: import('@vueuse/core').EventHookOn<TresRenderer>;
182
+ onReady: import('@vueuse/core').EventHookOn<TresRenderer>;
94
183
  invalidate: (amountOfFramesToInvalidate?: number) => void;
95
184
  canBeInvalidated: import('vue').ComputedRef<boolean>;
96
- amountOfFramesToRender: import('vue').Ref<number, number>;
185
+ frames: import('vue').Ref<number, number>;
186
+ mode: "always" | "on-demand" | "manual" | undefined;
97
187
  };
98
188
  export type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
99
- export {};
@@ -1,14 +1,15 @@
1
1
  import { ComputedRef } from 'vue';
2
2
  import { TresContext } from '../useTresContextProvider';
3
- import { Camera, WebGLRenderer } from 'three';
3
+ import { Camera } from 'three';
4
+ import { TresRenderer } from '..';
4
5
  export interface TresPartialContext extends Omit<TresContext, 'renderer' | 'camera'> {
5
6
  /**
6
7
  * The renderer instance
7
8
  *
8
- * @type {WebGLRenderer}
9
+ * @type {TresRenderer}
9
10
  * @memberof TresPartialContext
10
11
  */
11
- renderer: WebGLRenderer;
12
+ renderer: TresRenderer;
12
13
  /**
13
14
  * The current active camera
14
15
  *
@@ -1,11 +1,10 @@
1
- import { Raycaster } from 'three';
2
1
  import { MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
3
2
  import { RendererLoop } from '../../core/loop';
4
- import { TresControl, TresObject, TresScene } from '../../types';
5
- import { UseRendererManagerReturn, UseRendererOptions } from '../useRenderer/useRendererManager';
3
+ import { TresControl, TresScene } from '../../types';
4
+ import { RendererOptions, UseRendererManagerReturn } from '../useRenderer/useRendererManager';
6
5
  import { UseCameraReturn } from '../useCamera/';
7
6
  import { SizesType } from '../useSizes';
8
- import { TresEventManager } from '../useTresEventManager';
7
+ import { useEventManager } from '../useEventManager';
9
8
  export interface TresContext {
10
9
  scene: ShallowRef<TresScene>;
11
10
  sizes: SizesType;
@@ -13,18 +12,13 @@ export interface TresContext {
13
12
  camera: UseCameraReturn;
14
13
  controls: Ref<TresControl | null>;
15
14
  renderer: UseRendererManagerReturn;
16
- raycaster: ShallowRef<Raycaster>;
17
15
  loop: RendererLoop;
18
- eventManager?: TresEventManager;
19
- registerObjectAtPointerEventHandler?: (object: TresObject) => void;
20
- deregisterObjectAtPointerEventHandler?: (object: TresObject) => void;
21
- registerBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
22
- deregisterBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
16
+ events: ReturnType<typeof useEventManager>;
23
17
  }
24
18
  export declare function useTresContextProvider({ scene, canvas, windowSize, rendererOptions, }: {
25
19
  scene: TresScene;
26
20
  canvas: MaybeRef<HTMLCanvasElement>;
27
21
  windowSize: MaybeRefOrGetter<boolean>;
28
- rendererOptions: UseRendererOptions;
22
+ rendererOptions: RendererOptions;
29
23
  }): TresContext;
30
24
  export declare function useTresContext(): TresContext;
@@ -1,5 +1,6 @@
1
1
  import { DefineComponent, VNode, VNodeRef } from 'vue';
2
2
  import { TresContext } from '../composables/useTresContextProvider';
3
+ import { PointerEventHandlers } from '../utils/pointerEvents';
3
4
  import type * as THREE from 'three';
4
5
  export type AttachFnType = (parent: any, self: TresInstance) => () => void;
5
6
  export type AttachType = string | AttachFnType;
@@ -17,13 +18,6 @@ export type Args<T> = T extends ConstructorRepresentation ? ConstructorParameter
17
18
  export interface TresCatalogue {
18
19
  [name: string]: ConstructorRepresentation;
19
20
  }
20
- export declare const pointerEventTypes: readonly ["click", "double-click", "context-menu", "pointer-move", "pointer-up", "pointer-down", "pointer-enter", "pointer-leave", "pointer-over", "pointer-out", "pointer-missed", "wheel"];
21
- export type PointerEventType = typeof pointerEventTypes[number];
22
- export interface TresPointerEvent {
23
- type: PointerEventType;
24
- event: TresEvent;
25
- intersection?: Intersection;
26
- }
27
21
  export type TresCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
28
22
  /**
29
23
  * Represents the properties of an instance.
@@ -45,9 +39,7 @@ interface TresBaseObject {
45
39
  }
46
40
  export interface LocalState {
47
41
  type: string;
48
- eventCount: number;
49
42
  root: TresContext;
50
- handlers: Partial<EventHandlers>;
51
43
  memoizedProps: {
52
44
  [key: string]: any;
53
45
  };
@@ -77,69 +69,6 @@ export interface TresScene extends THREE.Scene {
77
69
  root: TresContext;
78
70
  };
79
71
  }
80
- export interface Intersection extends THREE.Intersection {
81
- /** The event source (the object which registered the handler) */
82
- eventObject: TresObject;
83
- }
84
- export interface IntersectionEvent<TSourceEvent> extends Intersection {
85
- /** The event source (the object which registered the handler) */
86
- eventObject: TresObject;
87
- /** An array of intersections */
88
- intersections: Intersection[];
89
- /** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
90
- unprojectedPoint: THREE.Vector3;
91
- /** Normalized event coordinates */
92
- pointer: THREE.Vector2;
93
- /** Delta between first click and this event */
94
- delta: number;
95
- /** The ray that pierced it */
96
- ray: THREE.Ray;
97
- /** The camera that was used by the raycaster */
98
- camera: THREE.Camera;
99
- /** stopPropagation will stop underlying handlers from firing */
100
- stopPropagation: () => void;
101
- /** The original host event */
102
- nativeEvent: TSourceEvent;
103
- /** If the event was stopped by calling stopPropagation */
104
- stopped: boolean;
105
- }
106
- export type ThreeEvent<TEvent> = IntersectionEvent<TEvent> & Properties<TEvent>;
107
- export type DomEvent = PointerEvent | MouseEvent | WheelEvent;
108
- export interface TresEvent {
109
- eventObject: TresObject;
110
- event: DomEvent;
111
- stopPropagation: () => void;
112
- stopPropagating: boolean;
113
- intersections: Intersection[];
114
- intersects: Intersection[];
115
- }
116
- export interface Events {
117
- onClick: EventListener;
118
- onContextMenu: EventListener;
119
- onDoubleClick: EventListener;
120
- onWheel: EventListener;
121
- onPointerDown: EventListener;
122
- onPointerUp: EventListener;
123
- onPointerLeave: EventListener;
124
- onPointerMove: EventListener;
125
- onPointerCancel: EventListener;
126
- onLostPointerCapture: EventListener;
127
- }
128
- export interface EventHandlers {
129
- onClick?: (event: ThreeEvent<MouseEvent>) => void;
130
- onContextMenu?: (event: ThreeEvent<MouseEvent>) => void;
131
- onDoubleClick?: (event: ThreeEvent<MouseEvent>) => void;
132
- onPointerUp?: (event: ThreeEvent<PointerEvent>) => void;
133
- onPointerDown?: (event: ThreeEvent<PointerEvent>) => void;
134
- onPointerOver?: (event: ThreeEvent<PointerEvent>) => void;
135
- onPointerOut?: (event: ThreeEvent<PointerEvent>) => void;
136
- onPointerEnter?: (event: ThreeEvent<PointerEvent>) => void;
137
- onPointerLeave?: (event: ThreeEvent<PointerEvent>) => void;
138
- onPointerMove?: (event: ThreeEvent<PointerEvent>) => void;
139
- onPointerMissed?: (event: MouseEvent) => void;
140
- onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void;
141
- onWheel?: (event: ThreeEvent<WheelEvent>) => void;
142
- }
143
72
  interface MathRepresentation {
144
73
  set(...args: number[] | [THREE.ColorRepresentation]): any;
145
74
  }
@@ -170,7 +99,8 @@ export type WithMathProps<P> = {
170
99
  interface RaycastableRepresentation {
171
100
  raycast: (raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) => void;
172
101
  }
173
- type EventProps<P> = P extends RaycastableRepresentation ? Partial<EventHandlers> : unknown;
102
+ type EventProps<P> = P extends RaycastableRepresentation ? Partial<PointerEventHandlers> : unknown;
103
+ export type { TresPointerEvent } from '../utils/pointerEvents';
174
104
  export interface VueProps {
175
105
  children?: VNode[];
176
106
  ref?: VNodeRef;
@@ -195,4 +125,3 @@ declare module 'vue' {
195
125
  primitive: DefineComponent<TresPrimitive>;
196
126
  }
197
127
  }
198
- export {};
@@ -0,0 +1,10 @@
1
+ import { PointerEvent } from '@pmndrs/pointer-events';
2
+ export declare const supportedPointerEvents: readonly ["onClick", "onContextmenu", "onPointermove", "onPointerenter", "onPointerleave", "onPointerover", "onPointerout", "onDblclick", "onPointerdown", "onPointerup", "onPointercancel", "onLostpointercapture", "onWheel"];
3
+ export type SupportedVuePointerEvent = typeof supportedPointerEvents[number];
4
+ export type TresPointerEventName = 'click' | 'contextmenu' | 'pointermove' | 'pointerenter' | 'pointerleave' | 'pointerover' | 'pointerout' | 'dblclick' | 'pointerdown' | 'pointerup' | 'pointercancel' | 'lostpointercapture' | 'wheel';
5
+ export declare const pointerEventsMapVueToThree: Record<SupportedVuePointerEvent, TresPointerEventName>;
6
+ export declare const isSupportedPointerEvent: (event: string) => event is SupportedVuePointerEvent;
7
+ export type TresPointerEvent = PointerEvent<MouseEvent>;
8
+ export type PointerEventHandlers = {
9
+ [key in SupportedVuePointerEvent]: (event: TresPointerEvent) => void;
10
+ };