angular-three 2.0.0-beta.2 → 2.0.0-beta.21
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/README.md +4 -147
- package/esm2022/angular-three.mjs +1 -1
- package/esm2022/index.mjs +11 -10
- package/esm2022/lib/before-render.mjs +13 -0
- package/esm2022/lib/canvas.mjs +130 -161
- package/esm2022/lib/directives/args.mjs +13 -11
- package/esm2022/lib/directives/common.mjs +29 -27
- package/esm2022/lib/directives/key.mjs +29 -0
- package/esm2022/lib/directives/parent.mjs +13 -11
- package/esm2022/lib/directives/repeat.mjs +5 -6
- package/esm2022/lib/dom/events.mjs +6 -1
- package/esm2022/lib/events.mjs +75 -58
- package/esm2022/lib/instance.mjs +65 -0
- package/esm2022/lib/loader.mjs +30 -37
- package/esm2022/lib/loop.mjs +6 -3
- package/esm2022/lib/portal.mjs +91 -102
- package/esm2022/lib/ref.mjs +48 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +419 -0
- package/esm2022/lib/renderer/store.mjs +144 -108
- package/esm2022/lib/renderer/utils.mjs +63 -48
- package/esm2022/lib/roots.mjs +249 -0
- package/esm2022/lib/routed-scene.mjs +11 -8
- package/esm2022/lib/store.mjs +207 -0
- package/esm2022/lib/three-types.mjs +2 -2
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +23 -11
- package/esm2022/lib/utils/assert-injection-context.mjs +14 -0
- package/esm2022/lib/utils/attach.mjs +2 -2
- package/esm2022/lib/utils/create-injection-token.mjs +47 -0
- package/esm2022/lib/utils/is.mjs +1 -1
- package/esm2022/lib/utils/make.mjs +1 -1
- package/esm2022/lib/utils/safe-detect-changes.mjs +15 -13
- package/esm2022/lib/utils/signal-store.mjs +91 -0
- package/esm2022/lib/utils/update.mjs +1 -1
- package/fesm2022/angular-three.mjs +1770 -1589
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +10 -9
- package/lib/{di/before-render.d.ts → before-render.d.ts} +1 -1
- package/lib/canvas.d.ts +81 -11
- package/lib/directives/args.d.ts +2 -2
- package/lib/directives/common.d.ts +5 -1
- package/lib/directives/key.d.ts +10 -0
- package/lib/directives/parent.d.ts +5 -5
- package/lib/dom/events.d.ts +3 -2
- package/lib/events.d.ts +78 -2
- package/lib/instance.d.ts +36 -0
- package/lib/loader.d.ts +13 -2
- package/lib/loop.d.ts +64 -6
- package/lib/portal.d.ts +20 -12
- package/lib/{di/ref.d.ts → ref.d.ts} +3 -2
- package/lib/renderer/catalogue.d.ts +9 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +5 -0
- package/lib/renderer/store.d.ts +19 -15
- package/lib/renderer/utils.d.ts +28 -18
- package/lib/roots.d.ts +11 -0
- package/lib/routed-scene.d.ts +1 -1
- package/lib/store.d.ts +143 -0
- package/lib/three-types.d.ts +6 -6
- package/lib/types.d.ts +1 -309
- package/lib/utils/apply-props.d.ts +4 -2
- package/lib/utils/attach.d.ts +5 -3
- package/lib/utils/create-injection-token.d.ts +27 -0
- package/lib/utils/is.d.ts +4 -3
- package/lib/utils/make.d.ts +12 -1
- package/lib/utils/safe-detect-changes.d.ts +2 -2
- package/lib/utils/signal-store.d.ts +17 -0
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +5 -4
- package/plugin/generators.json +47 -17
- package/plugin/package.json +2 -5
- package/plugin/src/generators/init/compat.d.ts +3 -1
- package/plugin/src/generators/init/compat.js +2 -2
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/files/experience/experience.component.html.__tmpl__ +4 -0
- package/plugin/src/generators/init/files/experience/experience.component.ts.__tmpl__ +17 -0
- package/plugin/src/generators/init/generator.d.ts +6 -0
- package/plugin/src/generators/init/generator.js +144 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +15 -4
- package/plugin/src/generators/init-cannon/compat.d.ts +2 -0
- package/plugin/src/generators/init-cannon/compat.js +6 -0
- package/plugin/src/generators/init-cannon/compat.js.map +1 -0
- package/plugin/src/generators/init-cannon/generator.d.ts +2 -0
- package/plugin/src/generators/init-cannon/generator.js +22 -0
- package/plugin/src/generators/init-cannon/generator.js.map +1 -0
- package/plugin/src/generators/init-cannon/schema.json +6 -0
- package/plugin/src/generators/init-postprocessing/compat.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/compat.js +6 -0
- package/plugin/src/generators/init-postprocessing/compat.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/generator.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/generator.js +20 -0
- package/plugin/src/generators/init-postprocessing/generator.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/schema.json +6 -0
- package/plugin/src/generators/init-soba/compat.d.ts +2 -0
- package/plugin/src/generators/init-soba/compat.js +6 -0
- package/plugin/src/generators/init-soba/compat.js.map +1 -0
- package/plugin/src/generators/init-soba/generator.d.ts +2 -0
- package/plugin/src/generators/init-soba/generator.js +26 -0
- package/plugin/src/generators/init-soba/generator.js.map +1 -0
- package/plugin/src/generators/init-soba/schema.json +6 -0
- package/plugin/src/generators/utils.d.ts +2 -0
- package/plugin/src/generators/utils.js +34 -0
- package/plugin/src/generators/utils.js.map +1 -0
- package/plugin/src/generators/versions.d.ts +12 -0
- package/plugin/src/generators/versions.js +16 -0
- package/plugin/src/generators/versions.js.map +1 -0
- package/plugin/src/index.d.ts +3 -1
- package/plugin/src/index.js +7 -3
- package/plugin/src/index.js.map +1 -1
- package/web-types.json +1 -1
- package/esm2022/lib/di/before-render.mjs +0 -13
- package/esm2022/lib/di/catalogue.mjs +0 -7
- package/esm2022/lib/di/ref.mjs +0 -49
- package/esm2022/lib/renderer/di.mjs +0 -3
- package/esm2022/lib/renderer/enums.mjs +0 -2
- package/esm2022/lib/renderer/provider.mjs +0 -18
- package/esm2022/lib/renderer/renderer.mjs +0 -365
- package/esm2022/lib/stores/signal.store.mjs +0 -81
- package/esm2022/lib/stores/store.mjs +0 -423
- package/esm2022/lib/utils/assert-in-injection-context.mjs +0 -14
- package/esm2022/lib/utils/instance.mjs +0 -63
- package/esm2022/lib/utils/signal.mjs +0 -24
- package/esm2022/lib/utils/timing.mjs +0 -21
- package/lib/di/catalogue.d.ts +0 -3
- package/lib/renderer/di.d.ts +0 -2
- package/lib/renderer/enums.d.ts +0 -26
- package/lib/renderer/provider.d.ts +0 -8
- package/lib/renderer/renderer.d.ts +0 -49
- package/lib/stores/signal.store.d.ts +0 -20
- package/lib/stores/store.d.ts +0 -13
- package/lib/utils/instance.d.ts +0 -4
- package/lib/utils/signal.d.ts +0 -2
- package/lib/utils/timing.d.ts +0 -4
- package/plugin/src/generators/init/init.d.ts +0 -5
- package/plugin/src/generators/init/init.js +0 -56
- package/plugin/src/generators/init/init.js.map +0 -1
- /package/lib/utils/{assert-in-injection-context.d.ts → assert-injection-context.d.ts} +0 -0
package/lib/renderer/store.d.ts
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
1
|
+
import { InjectionToken, Injector } from '@angular/core';
|
|
2
|
+
import type { NgtRef } from '../ref';
|
|
3
|
+
import { type NgtState } from '../store';
|
|
4
4
|
import type { NgtAnyRecord } from '../types';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import type { NgtSignalStore } from '../utils/signal-store';
|
|
6
|
+
import { NgtRendererClassId } from './utils';
|
|
7
|
+
export declare const NGT_COMPOUND_PREFIXES: InjectionToken<string[]>;
|
|
8
|
+
type NgtRendererRootState = {
|
|
9
|
+
store: NgtSignalStore<NgtState>;
|
|
8
10
|
compoundPrefixes: string[];
|
|
9
11
|
document: Document;
|
|
10
12
|
portals: Array<NgtRendererNode>;
|
|
11
13
|
};
|
|
12
|
-
|
|
14
|
+
type NgtQueueOp = [type: 'op' | 'cleanUp', op: () => void, done?: true];
|
|
13
15
|
export type NgtRendererState = [
|
|
14
16
|
type: 'three' | 'compound' | 'portal' | 'comment' | 'dom',
|
|
15
17
|
parent: NgtRendererNode | null,
|
|
16
|
-
injectedParent:
|
|
18
|
+
injectedParent: NgtRef<NgtRendererNode> | null,
|
|
17
19
|
children: NgtRendererNode[],
|
|
18
20
|
destroyed: boolean,
|
|
19
|
-
compound: [applyFirst: boolean, props:
|
|
21
|
+
compound: [applyFirst: boolean, props: NgtAnyRecord],
|
|
20
22
|
compoundParent: NgtRendererNode,
|
|
21
23
|
compounded: NgtRendererNode,
|
|
22
24
|
queueOps: Set<NgtQueueOp>,
|
|
23
|
-
attributes:
|
|
24
|
-
properties:
|
|
25
|
+
attributes: NgtAnyRecord,
|
|
26
|
+
properties: NgtAnyRecord,
|
|
25
27
|
rawValue: any,
|
|
26
28
|
ref: any,
|
|
27
29
|
portalContainer: NgtRendererNode,
|
|
@@ -31,8 +33,8 @@ export type NgtRendererNode = {
|
|
|
31
33
|
__ngt_renderer__: NgtRendererState;
|
|
32
34
|
};
|
|
33
35
|
export declare class NgtRendererStore {
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
+
private root;
|
|
37
|
+
private comments;
|
|
36
38
|
constructor(root: NgtRendererRootState);
|
|
37
39
|
createNode(type: NgtRendererState[NgtRendererClassId.type], node: NgtAnyRecord): NgtAnyRecord & {
|
|
38
40
|
__ngt_renderer__: NgtRendererState;
|
|
@@ -54,10 +56,12 @@ export declare class NgtRendererStore {
|
|
|
54
56
|
getClosestParentWithCompound(node: NgtRendererNode): NgtRendererNode | null | undefined;
|
|
55
57
|
getCreationState(): {
|
|
56
58
|
injectedArgs: any[];
|
|
57
|
-
injectedParent: string |
|
|
58
|
-
store:
|
|
59
|
+
injectedParent: string | NgtRef<import("three").Object3D<import("three").Event>> | null;
|
|
60
|
+
store: NgtSignalStore<NgtState>;
|
|
59
61
|
};
|
|
60
62
|
destroy(node: NgtRendererNode, parent?: NgtRendererNode): void;
|
|
63
|
+
private updateNativeProps;
|
|
61
64
|
private firstNonInjectedDirective;
|
|
62
65
|
private tryGetPortalStore;
|
|
63
66
|
}
|
|
67
|
+
export {};
|
package/lib/renderer/utils.d.ts
CHANGED
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
import { ChangeDetectorRef, NgZone } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
import { type NgtInstanceNode } from '../instance';
|
|
3
|
+
export declare const enum NgtRendererClassId {
|
|
4
|
+
type = 0,
|
|
5
|
+
parent = 1,
|
|
6
|
+
injectedParent = 2,
|
|
7
|
+
children = 3,
|
|
8
|
+
destroyed = 4,
|
|
9
|
+
compound = 5,
|
|
10
|
+
compoundParent = 6,
|
|
11
|
+
compounded = 7,
|
|
12
|
+
queueOps = 8,
|
|
13
|
+
attributes = 9,
|
|
14
|
+
properties = 10,
|
|
15
|
+
rawValue = 11,
|
|
16
|
+
ref = 12,
|
|
17
|
+
portalContainer = 13,
|
|
18
|
+
injectorFactory = 14
|
|
19
|
+
}
|
|
20
|
+
export declare const enum NgtCompoundClassId {
|
|
21
|
+
applyFirst = 0,
|
|
22
|
+
props = 1
|
|
23
|
+
}
|
|
24
|
+
export declare const enum NgtQueueOpClassId {
|
|
25
|
+
type = 0,
|
|
26
|
+
op = 1,
|
|
27
|
+
done = 2
|
|
28
|
+
}
|
|
18
29
|
export declare function attachThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode): void;
|
|
19
30
|
export declare function removeThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode, dispose?: boolean): void;
|
|
20
|
-
export declare function processThreeEvent(instance: NgtInstanceNode, priority: number, eventName: string, callback: (event: any) => void, zone: NgZone, cdr: ChangeDetectorRef, targetCdr?: ChangeDetectorRef | null): () => void;
|
|
21
|
-
export declare function eventToHandler(callback: (event: any) => void): (event: Parameters<Exclude<NgtEventHandlers[(typeof supportedEvents)[number]], undefined>>[0]) => void;
|
|
22
31
|
export declare function kebabToPascal(str: string): string;
|
|
32
|
+
export declare function processThreeEvent(instance: NgtInstanceNode, priority: number, eventName: string, callback: (event: any) => void, zone: NgZone, rootCdr: ChangeDetectorRef, targetCdr?: ChangeDetectorRef | null): () => void;
|
package/lib/roots.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Injector } from '@angular/core';
|
|
2
|
+
import type { NgtCanvasInputs } from './canvas';
|
|
3
|
+
import { type NgtState } from './store';
|
|
4
|
+
import type { NgtSignalStore } from './utils/signal-store';
|
|
5
|
+
export declare const roots: Map<HTMLCanvasElement, NgtSignalStore<NgtState>>;
|
|
6
|
+
export declare function injectCanvasRootInitializer(injector?: Injector): (canvas: HTMLCanvasElement) => {
|
|
7
|
+
isConfigured: boolean;
|
|
8
|
+
destroy: (timeout?: number) => void;
|
|
9
|
+
configure: (inputs: NgtCanvasInputs) => void;
|
|
10
|
+
};
|
|
11
|
+
export type NgtCanvasConfigurator = ReturnType<ReturnType<typeof injectCanvasRootInitializer>>;
|
package/lib/routed-scene.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { Router } from '@angular/router';
|
|
3
|
-
import { ROUTED_SCENE } from './renderer/
|
|
3
|
+
import { ROUTED_SCENE } from './renderer/constants';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class NgtRoutedScene {
|
|
6
6
|
static [ROUTED_SCENE]: boolean;
|
package/lib/store.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/// <reference types="webxr" />
|
|
2
|
+
import { ElementRef, InjectionToken, Injector } from '@angular/core';
|
|
3
|
+
import { type Observable } from 'rxjs';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import type { NgtCamera, NgtDomEvent, NgtEventManager, NgtPointerCaptureTarget, NgtThreeEvent } from './events';
|
|
6
|
+
import type { NgtInstanceNode } from './instance';
|
|
7
|
+
import { type NgtLoop } from './loop';
|
|
8
|
+
import { type NgtSignalStore } from './utils/signal-store';
|
|
9
|
+
export type NgtRenderer = {
|
|
10
|
+
render: (scene: THREE.Scene, camera: THREE.Camera) => any;
|
|
11
|
+
};
|
|
12
|
+
export type NgtCameraManual = NgtCamera & {
|
|
13
|
+
manual?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type NgtDpr = number | [min: number, max: number];
|
|
16
|
+
export type NgtSize = {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
top: number;
|
|
20
|
+
left: number;
|
|
21
|
+
};
|
|
22
|
+
export type NgtViewport = NgtSize & {
|
|
23
|
+
/** The initial pixel ratio */
|
|
24
|
+
initialDpr: number;
|
|
25
|
+
/** Current pixel ratio */
|
|
26
|
+
dpr: number;
|
|
27
|
+
/** size.width / viewport.width */
|
|
28
|
+
factor: number;
|
|
29
|
+
/** Camera distance */
|
|
30
|
+
distance: number;
|
|
31
|
+
/** Camera aspect ratio: width / height */
|
|
32
|
+
aspect: number;
|
|
33
|
+
};
|
|
34
|
+
export type NgtPerformance = {
|
|
35
|
+
/** Current performance normal, between min and max */
|
|
36
|
+
current: number;
|
|
37
|
+
/** How low the performance can go, between 0 and max */
|
|
38
|
+
min: number;
|
|
39
|
+
/** How high the performance can go, between min and max */
|
|
40
|
+
max: number;
|
|
41
|
+
/** Time until current returns to max in ms */
|
|
42
|
+
debounce: number;
|
|
43
|
+
/** Sets current to min, puts the system in regression */
|
|
44
|
+
regress: () => void;
|
|
45
|
+
};
|
|
46
|
+
export type NgtRenderState = NgtState & {
|
|
47
|
+
delta: number;
|
|
48
|
+
frame?: XRFrame;
|
|
49
|
+
};
|
|
50
|
+
export type NgtBeforeRenderEvent<TObject extends NgtInstanceNode = NgtInstanceNode> = {
|
|
51
|
+
state: NgtRenderState;
|
|
52
|
+
object: TObject;
|
|
53
|
+
};
|
|
54
|
+
export type NgtBeforeRenderRecord = {
|
|
55
|
+
callback: (state: NgtRenderState) => void;
|
|
56
|
+
store: NgtSignalStore<NgtState>;
|
|
57
|
+
priority?: number;
|
|
58
|
+
};
|
|
59
|
+
export type NgtInternalState = {
|
|
60
|
+
active: boolean;
|
|
61
|
+
priority: number;
|
|
62
|
+
frames: number;
|
|
63
|
+
lastEvent: ElementRef<NgtDomEvent | null>;
|
|
64
|
+
interaction: THREE.Object3D[];
|
|
65
|
+
hovered: Map<string, NgtThreeEvent<NgtDomEvent>>;
|
|
66
|
+
capturedMap: Map<number, Map<THREE.Object3D, NgtPointerCaptureTarget>>;
|
|
67
|
+
initialClick: [x: number, y: number];
|
|
68
|
+
initialHits: THREE.Object3D[];
|
|
69
|
+
subscribers: NgtBeforeRenderRecord[];
|
|
70
|
+
subscribe: (callback: NgtBeforeRenderRecord['callback'], priority?: number, store?: NgtSignalStore<NgtState>) => () => void;
|
|
71
|
+
};
|
|
72
|
+
export type NgtState = {
|
|
73
|
+
/** when all building blocks are initialized */
|
|
74
|
+
ready: boolean;
|
|
75
|
+
/** The instance of the renderer */
|
|
76
|
+
gl: THREE.WebGLRenderer;
|
|
77
|
+
/** Default camera */
|
|
78
|
+
camera: NgtCameraManual;
|
|
79
|
+
/** Default scene */
|
|
80
|
+
scene: THREE.Scene;
|
|
81
|
+
/** Default raycaster */
|
|
82
|
+
raycaster: THREE.Raycaster;
|
|
83
|
+
/** Default clock */
|
|
84
|
+
clock: THREE.Clock;
|
|
85
|
+
/** Event layer interface, contains the event handler and the node they're connected to */
|
|
86
|
+
events: NgtEventManager<any>;
|
|
87
|
+
/** XR interface */
|
|
88
|
+
xr: {
|
|
89
|
+
connect: () => void;
|
|
90
|
+
disconnect: () => void;
|
|
91
|
+
};
|
|
92
|
+
/** Currently used controls */
|
|
93
|
+
controls: THREE.EventDispatcher | null;
|
|
94
|
+
/** Normalized event coordinates */
|
|
95
|
+
pointer: THREE.Vector2;
|
|
96
|
+
legacy: boolean;
|
|
97
|
+
/** Shortcut to gl.outputColorSpace = THREE.LinearSRGBColorSpace */
|
|
98
|
+
linear: boolean;
|
|
99
|
+
/** Shortcut to gl.toneMapping = NoTonemapping */
|
|
100
|
+
flat: boolean;
|
|
101
|
+
/** Render loop flags */
|
|
102
|
+
frameloop: 'always' | 'demand' | 'never';
|
|
103
|
+
/** Adaptive performance interface */
|
|
104
|
+
performance: NgtPerformance;
|
|
105
|
+
/** Reactive pixel-size of the canvas */
|
|
106
|
+
size: NgtSize;
|
|
107
|
+
/** Reactive size of the viewport in threejs units */
|
|
108
|
+
viewport: NgtViewport & {
|
|
109
|
+
getCurrentViewport: (camera?: NgtCamera, target?: THREE.Vector3 | Parameters<THREE.Vector3['set']>, size?: NgtSize) => Omit<NgtViewport, 'dpr' | 'initialDpr'>;
|
|
110
|
+
};
|
|
111
|
+
/** Flags the canvas for render, but doesn't render in itself */
|
|
112
|
+
invalidate: (frames?: number) => void;
|
|
113
|
+
/** Advance (render) one step */
|
|
114
|
+
advance: (timestamp: number, runGlobalEffects?: boolean) => void;
|
|
115
|
+
/** Shortcut to setting the event layer */
|
|
116
|
+
setEvents: (events: Partial<NgtEventManager<any>>) => void;
|
|
117
|
+
/**
|
|
118
|
+
* Shortcut to manual sizing
|
|
119
|
+
*/
|
|
120
|
+
setSize: (width: number, height: number, top?: number, left?: number) => void;
|
|
121
|
+
/** Shortcut to manual setting the pixel ratio */
|
|
122
|
+
setDpr: (dpr: NgtDpr) => void;
|
|
123
|
+
/** Shortcut to frameloop flags */
|
|
124
|
+
setFrameloop: (frameloop?: 'always' | 'demand' | 'never') => void;
|
|
125
|
+
/** When the canvas was clicked but nothing was hit */
|
|
126
|
+
/** PointerMissed Observable */
|
|
127
|
+
pointerMissed$: Observable<MouseEvent>;
|
|
128
|
+
/** If this state model is layerd (via createPortal) then this contains the previous layer */
|
|
129
|
+
previousRoot: NgtSignalStore<NgtState> | null;
|
|
130
|
+
/** Internals */
|
|
131
|
+
internal: NgtInternalState;
|
|
132
|
+
};
|
|
133
|
+
declare function storeFactory(loop: NgtLoop, document: Document, injector: Injector, parent: NgtSignalStore<NgtState> | null): NgtSignalStore<NgtState>;
|
|
134
|
+
export type NgtStore = ReturnType<typeof storeFactory>;
|
|
135
|
+
export declare const NGT_STORE: InjectionToken<NgtSignalStore<NgtState>>;
|
|
136
|
+
export declare const injectNgtStore: {
|
|
137
|
+
(): NgtSignalStore<NgtState>;
|
|
138
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
139
|
+
optional?: false | undefined;
|
|
140
|
+
}): NgtSignalStore<NgtState>;
|
|
141
|
+
(injectOptions: import("@angular/core").InjectOptions): NgtSignalStore<NgtState> | null;
|
|
142
|
+
}, provideNgtStore: (value?: NgtSignalStore<NgtState> | undefined) => import("@angular/core").Provider;
|
|
143
|
+
export {};
|
package/lib/three-types.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
-
import type {
|
|
3
|
-
import type { NgtAfterAttach,
|
|
2
|
+
import type { NgtEventHandlers } from './events';
|
|
3
|
+
import type { NgtAfterAttach, NgtAttachFunction, NgtInstanceNode } from './instance';
|
|
4
|
+
import type { NgtBeforeRenderEvent } from './store';
|
|
5
|
+
type NoEvent<T> = Omit<T, 'addEventListener' | 'removeEventListener'>;
|
|
4
6
|
export type NgtNonFunctionKeys<T> = {
|
|
5
7
|
[K in keyof T]-?: T[K] extends Function ? never : K;
|
|
6
8
|
}[keyof T];
|
|
@@ -24,13 +26,12 @@ export type NgtVector4 = NgtVectorLike<THREE.Vector4>;
|
|
|
24
26
|
export type NgtLayers = THREE.Layers | Parameters<THREE.Layers['set']>[0];
|
|
25
27
|
export type NgtQuaternion = THREE.Quaternion | Parameters<THREE.Quaternion['set']>;
|
|
26
28
|
export interface NgtNodeEventMap<TOriginal> {
|
|
27
|
-
afterAttach: NgtAfterAttach<
|
|
29
|
+
afterAttach: NgtAfterAttach<TOriginal, NgtInstanceNode>;
|
|
28
30
|
afterUpdate: TOriginal;
|
|
29
31
|
beforeRender: NgtBeforeRenderEvent<TOriginal>;
|
|
30
32
|
}
|
|
31
33
|
export type NgtNodeElement<TOriginal, TConstructor> = {
|
|
32
34
|
attach: string | string[] | NgtAttachFunction;
|
|
33
|
-
ref: NgtInjectedRef<TOriginal>;
|
|
34
35
|
addEventListener<TEventKey extends keyof NgtNodeEventMap<TOriginal>>(type: TEventKey, listener: (this: NgtNodeElement<TOriginal, TConstructor>, ev: NgtNodeEventMap<TOriginal>[TEventKey]) => any): void;
|
|
35
36
|
removeEventListener<TEventKey extends keyof NgtNodeEventMap<TOriginal>>(type: TEventKey, listener: (this: NgtNodeElement<TOriginal, TConstructor>, ev: NgtNodeEventMap<TOriginal>[TEventKey]) => any): void;
|
|
36
37
|
__ngt_args__: NgtArgs<TConstructor>;
|
|
@@ -51,7 +52,6 @@ export type NgtObject3DNode<TOriginal, TConstructor, TNoEvent = NoEvent<TOrigina
|
|
|
51
52
|
addEventListener<TEventKey extends keyof NgtObject3DEventsMap>(type: TEventKey, listener: (this: NgtObject3DNode<TOriginal, TConstructor>, ev: NgtObject3DEventsMap[TEventKey]) => any): void;
|
|
52
53
|
removeEventListener<TEventKey extends keyof NgtObject3DEventsMap>(type: TEventKey, listener: (this: NgtObject3DNode<TOriginal, TConstructor>, ev: NgtObject3DEventsMap[TEventKey]) => any): void;
|
|
53
54
|
}>;
|
|
54
|
-
type NoEvent<T> = Omit<T, 'addEventListener' | 'removeEventListener'>;
|
|
55
55
|
export type NgtGeometry<TGeometry extends THREE.BufferGeometry, TConstructor> = NgtNode<TGeometry, TConstructor>;
|
|
56
56
|
export type NgtMaterial<TMaterial extends THREE.Material, TConstructor> = NgtNode<TMaterial, TConstructor>;
|
|
57
57
|
export type NgtLight<T extends THREE.Light, P> = NgtObject3DNode<T, P>;
|
|
@@ -117,7 +117,7 @@ export type NgtMeshBasicMaterial = NgtMaterial<THREE.MeshBasicMaterial, [THREE.M
|
|
|
117
117
|
export type NgtMeshMatcapMaterial = NgtMaterial<THREE.MeshMatcapMaterial, [THREE.MeshMatcapMaterialParameters]>;
|
|
118
118
|
export type NgtLineDashedMaterial = NgtMaterial<THREE.LineDashedMaterial, [THREE.LineDashedMaterialParameters]>;
|
|
119
119
|
export type NgtLineBasicMaterial = NgtMaterial<THREE.LineBasicMaterial, [THREE.LineBasicMaterialParameters]>;
|
|
120
|
-
export type NgtPrimitive = NgtNodeElement<
|
|
120
|
+
export type NgtPrimitive = NgtNodeElement<any, any>;
|
|
121
121
|
export type NgtValue = NgtNode<{
|
|
122
122
|
rawValue: any;
|
|
123
123
|
}, {}>;
|
package/lib/types.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
/// <reference types="webxr" />
|
|
2
|
-
import type { ElementRef, EventEmitter, WritableSignal } from '@angular/core';
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
import type { NgtSignalStore } from './stores/signal.store';
|
|
5
|
-
import { NgtObject3DNode } from './three-types';
|
|
6
|
-
export type NgtAnyRecord = Record<string, any>;
|
|
7
1
|
export type NgtProperties<T> = Pick<T, {
|
|
8
2
|
[K in keyof T]: T[K] extends (_: any) => any ? never : K;
|
|
9
3
|
}[keyof T]>;
|
|
4
|
+
export type NgtAnyRecord = Record<string, any>;
|
|
10
5
|
export type NgtEquConfig = {
|
|
11
6
|
/** Compare arrays by reference equality a === b (default), or by shallow equality */
|
|
12
7
|
arrays?: 'reference' | 'shallow';
|
|
@@ -15,306 +10,3 @@ export type NgtEquConfig = {
|
|
|
15
10
|
/** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */
|
|
16
11
|
strict?: boolean;
|
|
17
12
|
};
|
|
18
|
-
export type NgtDpr = number | [min: number, max: number];
|
|
19
|
-
export type NgtSize = {
|
|
20
|
-
width: number;
|
|
21
|
-
height: number;
|
|
22
|
-
top: number;
|
|
23
|
-
left: number;
|
|
24
|
-
};
|
|
25
|
-
export type NgtViewport = NgtSize & {
|
|
26
|
-
/** The initial pixel ratio */
|
|
27
|
-
initialDpr: number;
|
|
28
|
-
/** Current pixel ratio */
|
|
29
|
-
dpr: number;
|
|
30
|
-
/** size.width / viewport.width */
|
|
31
|
-
factor: number;
|
|
32
|
-
/** Camera distance */
|
|
33
|
-
distance: number;
|
|
34
|
-
/** Camera aspect ratio: width / height */
|
|
35
|
-
aspect: number;
|
|
36
|
-
};
|
|
37
|
-
export type NgtPerformance = {
|
|
38
|
-
/** Current performance normal, between min and max */
|
|
39
|
-
current: number;
|
|
40
|
-
/** How low the performance can go, between 0 and max */
|
|
41
|
-
min: number;
|
|
42
|
-
/** How high the performance can go, between min and max */
|
|
43
|
-
max: number;
|
|
44
|
-
/** Time until current returns to max in ms */
|
|
45
|
-
debounce: number;
|
|
46
|
-
/** Sets current to min, puts the system in regression */
|
|
47
|
-
regress: () => void;
|
|
48
|
-
};
|
|
49
|
-
export type NgtRenderer = {
|
|
50
|
-
render: (scene: THREE.Scene, camera: THREE.Camera) => any;
|
|
51
|
-
};
|
|
52
|
-
export type NgtCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
|
|
53
|
-
export type NgtCameraManual = NgtCamera & {
|
|
54
|
-
manual?: boolean;
|
|
55
|
-
};
|
|
56
|
-
export type NgtIntersection = THREE.Intersection & {
|
|
57
|
-
/** The event source (the object which registered the handler) */
|
|
58
|
-
eventObject: THREE.Object3D;
|
|
59
|
-
};
|
|
60
|
-
export type NgtIntersectionEvent<TSourceEvent> = NgtIntersection & {
|
|
61
|
-
/** The event source (the object which registered the handler) */
|
|
62
|
-
eventObject: THREE.Object3D;
|
|
63
|
-
/** An array of intersections */
|
|
64
|
-
intersections: NgtIntersection[];
|
|
65
|
-
/** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
|
|
66
|
-
unprojectedPoint: THREE.Vector3;
|
|
67
|
-
/** Normalized event coordinates */
|
|
68
|
-
pointer: THREE.Vector2;
|
|
69
|
-
/** Delta between first click and this event */
|
|
70
|
-
delta: number;
|
|
71
|
-
/** The ray that pierced it */
|
|
72
|
-
ray: THREE.Ray;
|
|
73
|
-
/** The camera that was used by the raycaster */
|
|
74
|
-
camera: NgtCameraManual;
|
|
75
|
-
/** stopPropagation will stop underlying handlers from firing */
|
|
76
|
-
stopPropagation: () => void;
|
|
77
|
-
/** The original host event */
|
|
78
|
-
nativeEvent: TSourceEvent;
|
|
79
|
-
/** If the event was stopped by calling stopPropagation */
|
|
80
|
-
stopped: boolean;
|
|
81
|
-
};
|
|
82
|
-
export type NgtThreeEvent<TEvent> = NgtIntersectionEvent<TEvent> & NgtProperties<TEvent>;
|
|
83
|
-
export type NgtDomEvent = PointerEvent | MouseEvent | WheelEvent;
|
|
84
|
-
export type NgtEventHandlers = {
|
|
85
|
-
click?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
86
|
-
contextmenu?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
87
|
-
dblclick?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
88
|
-
pointerup?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
89
|
-
pointerdown?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
90
|
-
pointerover?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
91
|
-
pointerout?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
92
|
-
pointerenter?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
93
|
-
pointerleave?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
94
|
-
pointermove?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
95
|
-
pointermissed?: (event: MouseEvent) => void;
|
|
96
|
-
pointercancel?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
97
|
-
wheel?: (event: NgtThreeEvent<WheelEvent>) => void;
|
|
98
|
-
};
|
|
99
|
-
export type NgtEvents = {
|
|
100
|
-
[TEvent in keyof NgtEventHandlers]-?: EventListener;
|
|
101
|
-
};
|
|
102
|
-
export type NgtFilterFunction = (items: THREE.Intersection[], store: NgtSignalStore<NgtState>) => THREE.Intersection[];
|
|
103
|
-
export type NgtComputeFunction = (event: NgtDomEvent, root: NgtSignalStore<NgtState>, previous?: NgtSignalStore<NgtState>) => void;
|
|
104
|
-
export type NgtEventManager<TTarget> = {
|
|
105
|
-
/** Determines if the event layer is active */
|
|
106
|
-
enabled: boolean;
|
|
107
|
-
/** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
|
|
108
|
-
priority: number;
|
|
109
|
-
/** The compute function needs to set up the raycaster and an xy- pointer */
|
|
110
|
-
compute?: NgtComputeFunction;
|
|
111
|
-
/** The filter can re-order or re-structure the intersections */
|
|
112
|
-
filter?: NgtFilterFunction;
|
|
113
|
-
/** The target node the event layer is tied to */
|
|
114
|
-
connected?: TTarget;
|
|
115
|
-
/** All the pointer event handlers through which the host forwards native events */
|
|
116
|
-
handlers?: NgtEvents;
|
|
117
|
-
/** Allows re-connecting to another target */
|
|
118
|
-
connect?: (target: TTarget) => void;
|
|
119
|
-
/** Removes all existing events handlers from the target */
|
|
120
|
-
disconnect?: () => void;
|
|
121
|
-
/** Triggers a onPointerMove with the last known event. This can be useful to enable raycasting without
|
|
122
|
-
* explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
|
|
123
|
-
*/
|
|
124
|
-
update?: () => void;
|
|
125
|
-
};
|
|
126
|
-
export type NgtPointerCaptureTarget = {
|
|
127
|
-
intersection: NgtIntersection;
|
|
128
|
-
target: Element;
|
|
129
|
-
};
|
|
130
|
-
export type NgtRenderState = NgtState & {
|
|
131
|
-
delta: number;
|
|
132
|
-
frame?: XRFrame;
|
|
133
|
-
};
|
|
134
|
-
export type NgtBeforeRenderEvent<TObject extends NgtInstanceNode = NgtInstanceNode> = {
|
|
135
|
-
state: NgtRenderState;
|
|
136
|
-
object: TObject;
|
|
137
|
-
};
|
|
138
|
-
export type NgtBeforeRenderRecord = {
|
|
139
|
-
callback: (state: NgtRenderState) => void;
|
|
140
|
-
store: NgtSignalStore<NgtState>;
|
|
141
|
-
priority?: number;
|
|
142
|
-
};
|
|
143
|
-
export type NgtInternalState = {
|
|
144
|
-
active: boolean;
|
|
145
|
-
priority: number;
|
|
146
|
-
frames: number;
|
|
147
|
-
lastEvent: ElementRef<NgtDomEvent | null>;
|
|
148
|
-
interaction: THREE.Object3D[];
|
|
149
|
-
hovered: Map<string, NgtThreeEvent<NgtDomEvent>>;
|
|
150
|
-
subscribers: NgtBeforeRenderRecord[];
|
|
151
|
-
capturedMap: Map<number, Map<THREE.Object3D, NgtPointerCaptureTarget>>;
|
|
152
|
-
initialClick: [x: number, y: number];
|
|
153
|
-
initialHits: THREE.Object3D[];
|
|
154
|
-
subscribe: (callback: NgtBeforeRenderRecord['callback'], priority?: number, store?: NgtSignalStore<NgtState>) => () => void;
|
|
155
|
-
};
|
|
156
|
-
export type NgtState = {
|
|
157
|
-
get: NgtSignalStore<NgtState>['get'];
|
|
158
|
-
set: NgtSignalStore<NgtState>['set'];
|
|
159
|
-
/** when all building blocks are initialized */
|
|
160
|
-
ready: boolean;
|
|
161
|
-
/** The instance of the renderer */
|
|
162
|
-
gl: THREE.WebGLRenderer;
|
|
163
|
-
/** Default camera */
|
|
164
|
-
camera: NgtCameraManual;
|
|
165
|
-
/** Default scene */
|
|
166
|
-
scene: THREE.Scene;
|
|
167
|
-
/** Default raycaster */
|
|
168
|
-
raycaster: THREE.Raycaster;
|
|
169
|
-
/** Default clock */
|
|
170
|
-
clock: THREE.Clock;
|
|
171
|
-
/** Event layer interface, contains the event handler and the node they're connected to */
|
|
172
|
-
events: NgtEventManager<any>;
|
|
173
|
-
/** XR interface */
|
|
174
|
-
xr: {
|
|
175
|
-
connect: () => void;
|
|
176
|
-
disconnect: () => void;
|
|
177
|
-
};
|
|
178
|
-
/** Currently used controls */
|
|
179
|
-
controls: THREE.EventDispatcher | null;
|
|
180
|
-
/** Normalized event coordinates */
|
|
181
|
-
pointer: THREE.Vector2;
|
|
182
|
-
legacy: boolean;
|
|
183
|
-
/** Shortcut to gl.outputEncoding = LinearEncoding */
|
|
184
|
-
linear: boolean;
|
|
185
|
-
/** Shortcut to gl.toneMapping = NoTonemapping */
|
|
186
|
-
flat: boolean;
|
|
187
|
-
/** Render loop flags */
|
|
188
|
-
frameloop: 'always' | 'demand' | 'never';
|
|
189
|
-
/** Adaptive performance interface */
|
|
190
|
-
performance: NgtPerformance;
|
|
191
|
-
/** Reactive pixel-size of the canvas */
|
|
192
|
-
size: NgtSize;
|
|
193
|
-
/** Reactive size of the viewport in threejs units */
|
|
194
|
-
viewport: NgtViewport & {
|
|
195
|
-
getCurrentViewport: (camera?: NgtCameraManual, target?: THREE.Vector3 | Parameters<THREE.Vector3['set']>, size?: NgtSize) => Omit<NgtViewport, 'dpr' | 'initialDpr'>;
|
|
196
|
-
};
|
|
197
|
-
/** Flags the canvas for render, but doesn't render in itself */
|
|
198
|
-
invalidate: (frames?: number) => void;
|
|
199
|
-
/** Advance (render) one step */
|
|
200
|
-
advance: (timestamp: number, runGlobalEffects?: boolean) => void;
|
|
201
|
-
/** Shortcut to setting the event layer */
|
|
202
|
-
setEvents: (events: Partial<NgtEventManager<any>>) => void;
|
|
203
|
-
/**
|
|
204
|
-
* Shortcut to manual sizing
|
|
205
|
-
*/
|
|
206
|
-
setSize: (width: number, height: number, top?: number, left?: number) => void;
|
|
207
|
-
/** Shortcut to manual setting the pixel ratio */
|
|
208
|
-
setDpr: (dpr: NgtDpr) => void;
|
|
209
|
-
/** Shortcut to frameloop flags */
|
|
210
|
-
setFrameloop: (frameloop?: 'always' | 'demand' | 'never') => void;
|
|
211
|
-
/** When the canvas was clicked but nothing was hit */
|
|
212
|
-
onPointerMissed?: (event: MouseEvent) => void;
|
|
213
|
-
/** If this state model is layerd (via createPortal) then this contains the previous layer */
|
|
214
|
-
previousStore?: NgtSignalStore<NgtState>;
|
|
215
|
-
/** Internals */
|
|
216
|
-
internal: NgtInternalState;
|
|
217
|
-
};
|
|
218
|
-
export type NgtAttachFunction<TChild = any, TParent = any> = (parent: TParent, child: TChild, store: NgtSignalStore<NgtState>) => void | (() => void);
|
|
219
|
-
export type NgtAfterAttach<TParent extends NgtInstanceNode = NgtInstanceNode, TChild extends NgtInstanceNode = NgtInstanceNode> = {
|
|
220
|
-
parent: TParent;
|
|
221
|
-
node: TChild;
|
|
222
|
-
};
|
|
223
|
-
export type NgtInstanceLocalState = {
|
|
224
|
-
/** the state getter of the canvas that the instance is being rendered to */
|
|
225
|
-
store: NgtSignalStore<NgtState>;
|
|
226
|
-
nonObjects: WritableSignal<NgtInstanceNode[]>;
|
|
227
|
-
objects: WritableSignal<NgtInstanceNode[]>;
|
|
228
|
-
add: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
|
|
229
|
-
remove: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
|
|
230
|
-
nativeProps: NgtSignalStore<NgtAnyRecord>;
|
|
231
|
-
parent: WritableSignal<NgtInstanceNode | null>;
|
|
232
|
-
primitive?: boolean;
|
|
233
|
-
eventCount: number;
|
|
234
|
-
handlers: Partial<NgtEventHandlers>;
|
|
235
|
-
args?: unknown[];
|
|
236
|
-
attach?: string[] | NgtAttachFunction;
|
|
237
|
-
previousAttach?: unknown | (() => void);
|
|
238
|
-
isRaw?: boolean;
|
|
239
|
-
priority?: number;
|
|
240
|
-
afterUpdate?: EventEmitter<NgtInstanceNode>;
|
|
241
|
-
afterAttach?: EventEmitter<NgtAfterAttach>;
|
|
242
|
-
};
|
|
243
|
-
export type NgtInstanceNode<TNode = any> = {
|
|
244
|
-
__ngt__: NgtInstanceLocalState;
|
|
245
|
-
} & NgtAnyRecord & TNode;
|
|
246
|
-
export type NgtGLRenderer = {
|
|
247
|
-
render: (scene: THREE.Scene, camera: THREE.Camera) => void;
|
|
248
|
-
};
|
|
249
|
-
export type NgtGLOptions = NgtGLRenderer | ((canvas: HTMLCanvasElement) => NgtGLRenderer) | Partial<NgtProperties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters> | undefined;
|
|
250
|
-
export type NgtObjectMap = {
|
|
251
|
-
nodes: {
|
|
252
|
-
[name: string]: THREE.Object3D;
|
|
253
|
-
};
|
|
254
|
-
materials: {
|
|
255
|
-
[name: string]: THREE.Material;
|
|
256
|
-
};
|
|
257
|
-
[key: string]: any;
|
|
258
|
-
};
|
|
259
|
-
export type NgtCanvasInputs = {
|
|
260
|
-
/** A threejs renderer instance or props that go into the default renderer */
|
|
261
|
-
gl?: NgtGLOptions;
|
|
262
|
-
size?: NgtSize;
|
|
263
|
-
/**
|
|
264
|
-
* Enables shadows (by default PCFsoft). Can accept `gl.shadowMap` options for fine-tuning,
|
|
265
|
-
* but also strings: 'basic' | 'percentage' | 'soft' | 'variance'.
|
|
266
|
-
* @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
|
|
267
|
-
*/
|
|
268
|
-
shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE.WebGLShadowMap>;
|
|
269
|
-
/**
|
|
270
|
-
* Disables three r139 color management.
|
|
271
|
-
* @see https://threejs.org/docs/#manual/en/introduction/Color-management
|
|
272
|
-
*/
|
|
273
|
-
legacy?: boolean;
|
|
274
|
-
/** Switch off automatic sRGB encoding and gamma correction */
|
|
275
|
-
linear?: boolean;
|
|
276
|
-
/** Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` */
|
|
277
|
-
flat?: boolean;
|
|
278
|
-
/** Creates an orthographic camera */
|
|
279
|
-
orthographic?: boolean;
|
|
280
|
-
/**
|
|
281
|
-
* R3F's render mode. Set to `demand` to only render on state change or `never` to take control.
|
|
282
|
-
* @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#on-demand-rendering
|
|
283
|
-
*/
|
|
284
|
-
frameloop?: 'always' | 'demand' | 'never';
|
|
285
|
-
/**
|
|
286
|
-
* R3F performance options for adaptive performance.
|
|
287
|
-
* @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#movement-regression
|
|
288
|
-
*/
|
|
289
|
-
performance?: Partial<Omit<NgtPerformance, 'regress'>>;
|
|
290
|
-
/** Target pixel ratio. Can clamp between a range: `[min, max]` */
|
|
291
|
-
dpr?: NgtDpr;
|
|
292
|
-
/** Props that go into the default raycaster */
|
|
293
|
-
raycaster?: Partial<THREE.Raycaster>;
|
|
294
|
-
/** A `THREE.Scene` instance or props that go into the default scene */
|
|
295
|
-
scene?: THREE.Scene | Partial<THREE.Scene>;
|
|
296
|
-
/** A `Camera` instance or props that go into the default camera */
|
|
297
|
-
camera?: (NgtCamera | Partial<NgtObject3DNode<THREE.Camera, typeof THREE.Camera> & NgtObject3DNode<THREE.PerspectiveCamera, typeof THREE.PerspectiveCamera> & NgtObject3DNode<THREE.OrthographicCamera, typeof THREE.OrthographicCamera>>) & {
|
|
298
|
-
/** Flags the camera as manual, putting projection into your own hands */
|
|
299
|
-
manual?: boolean;
|
|
300
|
-
};
|
|
301
|
-
/** An R3F event manager to manage elements' pointer events */
|
|
302
|
-
events?: (store: NgtSignalStore<NgtState>) => NgtEventManager<HTMLElement>;
|
|
303
|
-
/** The target where events are being subscribed to, default: the div that wraps canvas */
|
|
304
|
-
eventSource?: HTMLElement | ElementRef<HTMLElement>;
|
|
305
|
-
/** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
|
|
306
|
-
eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen';
|
|
307
|
-
/** Default coordinate for the camera to look at */
|
|
308
|
-
lookAt?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
|
|
309
|
-
};
|
|
310
|
-
export interface NgtLoader<T> extends THREE.Loader {
|
|
311
|
-
load(url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): unknown;
|
|
312
|
-
loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;
|
|
313
|
-
}
|
|
314
|
-
export type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;
|
|
315
|
-
export type NgtLoaderReturnType<T, L extends NgtLoaderProto<T>> = T extends unknown ? Awaited<ReturnType<InstanceType<L>['loadAsync']>> : T;
|
|
316
|
-
export type NgtLoaderExtensions<T extends {
|
|
317
|
-
prototype: NgtLoaderProto<any>;
|
|
318
|
-
}> = (loader: T['prototype']) => void;
|
|
319
|
-
export type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;
|
|
320
|
-
export type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Parent, Coerced, T>;
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { type NgtInstanceNode } from '../instance';
|
|
2
|
+
import type { NgtAnyRecord } from '../types';
|
|
3
|
+
export declare function diffProps(instance: NgtAnyRecord, props: NgtAnyRecord): [key: string, value: unknown][];
|
|
4
|
+
export declare function applyProps(instance: NgtInstanceNode, props: NgtAnyRecord): any;
|