angular-three 1.9.16 → 1.10.1
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/esm2022/lib/canvas.mjs +243 -0
- package/esm2022/lib/directives/args.mjs +36 -0
- package/esm2022/lib/directives/common.mjs +32 -0
- package/esm2022/lib/directives/parent.mjs +36 -0
- package/esm2022/lib/directives/repeat.mjs +18 -0
- package/esm2022/lib/loader.mjs +55 -0
- package/esm2022/lib/pipes/push.mjs +50 -0
- package/esm2022/lib/portal.mjs +240 -0
- package/esm2022/lib/renderer/renderer.mjs +361 -0
- package/esm2022/lib/routed-scene.mjs +29 -0
- package/esm2022/lib/stores/rx-store.mjs +108 -0
- package/esm2022/lib/stores/store.mjs +404 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils/apply-props.mjs +107 -0
- package/esm2022/lib/utils/is.mjs +51 -0
- package/{fesm2020 → fesm2022}/angular-three.mjs +78 -61
- package/fesm2022/angular-three.mjs.map +1 -0
- package/lib/canvas.d.ts +1 -1
- package/lib/directives/args.d.ts +1 -1
- package/lib/directives/parent.d.ts +1 -1
- package/lib/directives/repeat.d.ts +1 -1
- package/lib/loader.d.ts +3 -11
- package/lib/portal.d.ts +2 -2
- package/lib/types.d.ts +91 -120
- package/lib/utils/is.d.ts +6 -1
- package/metadata.json +1 -0
- package/package.json +13 -17
- package/plugin/package.json +1 -4
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +3 -3
- package/plugin/src/generators/init/init.js +23 -3
- package/plugin/src/generators/init/init.js.map +1 -1
- package/web-types.json +1 -0
- package/esm2020/lib/canvas.mjs +0 -242
- package/esm2020/lib/directives/args.mjs +0 -35
- package/esm2020/lib/directives/common.mjs +0 -31
- package/esm2020/lib/directives/parent.mjs +0 -35
- package/esm2020/lib/directives/repeat.mjs +0 -17
- package/esm2020/lib/loader.mjs +0 -56
- package/esm2020/lib/pipes/push.mjs +0 -49
- package/esm2020/lib/portal.mjs +0 -237
- package/esm2020/lib/renderer/renderer.mjs +0 -360
- package/esm2020/lib/routed-scene.mjs +0 -28
- package/esm2020/lib/stores/rx-store.mjs +0 -107
- package/esm2020/lib/stores/store.mjs +0 -402
- package/esm2020/lib/types.mjs +0 -2
- package/esm2020/lib/utils/apply-props.mjs +0 -91
- package/esm2020/lib/utils/is.mjs +0 -50
- package/fesm2015/angular-three.mjs +0 -3051
- package/fesm2015/angular-three.mjs.map +0 -1
- package/fesm2020/angular-three.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-three.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/before-render.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/catalogue.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/destroy.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/ref.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/run-in-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/loop.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/di.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/enums.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/store.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/attach.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/instance.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/make.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/safe-detect-changes.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/update.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/web/events.mjs +0 -0
package/lib/canvas.d.ts
CHANGED
|
@@ -42,5 +42,5 @@ export declare class NgtCanvas extends NgtRxStore<NgtCanvasInputs> implements On
|
|
|
42
42
|
private overrideDetectChanges;
|
|
43
43
|
private setSceneGraphInputs;
|
|
44
44
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtCanvas, never>;
|
|
45
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtCanvas, "ngt-canvas", never, { "sceneGraph": "sceneGraph"; "sceneGraphInputs": "sceneGraphInputs"; "compoundPrefixes": "compoundPrefixes"; "linear": "linear"; "legacy": "legacy"; "flat": "flat"; "orthographic": "orthographic"; "frameloop": "frameloop"; "dpr": "dpr"; "raycaster": "raycaster"; "shadows": "shadows"; "camera": "camera"; "gl": "gl"; "eventSource": "eventSource"; "eventPrefix": "eventPrefix"; "lookAt": "lookAt"; "performance": "performance"; }, { "created": "created"; "pointerMissed": "pointerMissed"; }, never, never, true, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtCanvas, "ngt-canvas", never, { "sceneGraph": { "alias": "sceneGraph"; "required": false; }; "sceneGraphInputs": { "alias": "sceneGraphInputs"; "required": false; }; "compoundPrefixes": { "alias": "compoundPrefixes"; "required": false; }; "linear": { "alias": "linear"; "required": false; }; "legacy": { "alias": "legacy"; "required": false; }; "flat": { "alias": "flat"; "required": false; }; "orthographic": { "alias": "orthographic"; "required": false; }; "frameloop": { "alias": "frameloop"; "required": false; }; "dpr": { "alias": "dpr"; "required": false; }; "raycaster": { "alias": "raycaster"; "required": false; }; "shadows": { "alias": "shadows"; "required": false; }; "camera": { "alias": "camera"; "required": false; }; "gl": { "alias": "gl"; "required": false; }; "eventSource": { "alias": "eventSource"; "required": false; }; "eventPrefix": { "alias": "eventPrefix"; "required": false; }; "lookAt": { "alias": "lookAt"; "required": false; }; "performance": { "alias": "performance"; "required": false; }; }, { "created": "created"; "pointerMissed": "pointerMissed"; }, never, never, true, never>;
|
|
46
46
|
}
|
package/lib/directives/args.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export declare class NgtArgs extends NgtCommonDirective {
|
|
|
6
6
|
get args(): any[] | null;
|
|
7
7
|
validate(): boolean;
|
|
8
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtArgs, never>;
|
|
9
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtArgs, "[args]", never, { "args": "args"; }, {}, never, never, true, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtArgs, "[args]", never, { "args": { "alias": "args"; "required": false; }; }, {}, never, never, true, never>;
|
|
10
10
|
}
|
|
@@ -7,5 +7,5 @@ export declare class NgtParent extends NgtCommonDirective {
|
|
|
7
7
|
get parent(): string | THREE.Object3D | NgtInjectedRef<THREE.Object3D>;
|
|
8
8
|
validate(): boolean;
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtParent, never>;
|
|
10
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtParent, "[parent]", never, { "parent": "parent"; }, {}, never, never, true, never>;
|
|
10
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtParent, "[parent]", never, { "parent": { "alias": "parent"; "required": false; }; }, {}, never, never, true, never>;
|
|
11
11
|
}
|
|
@@ -3,5 +3,5 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export declare class NgtRepeat extends NgForOf<number> {
|
|
4
4
|
set ngForRepeat(count: number);
|
|
5
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtRepeat, never>;
|
|
6
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtRepeat, "[ngFor][ngForRepeat]", never, { "ngForRepeat": "ngForRepeat"; }, {}, never, never, true, never>;
|
|
6
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtRepeat, "[ngFor][ngForRepeat]", never, { "ngForRepeat": { "alias": "ngForRepeat"; "required": false; }; }, {}, never, never, true, never>;
|
|
7
7
|
}
|
package/lib/loader.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
1
|
+
import { type Observable } from 'rxjs';
|
|
2
2
|
import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
|
|
3
|
-
import type { NgtBranchingReturn, NgtLoaderExtensions,
|
|
4
|
-
interface NgtLoader {
|
|
5
|
-
<TReturnType, TUrl extends string | string[] | Record<string, string>>(loaderConstructorFactory: (inputs: TUrl) => new (...args: any[]) => NgtLoaderResult<TReturnType>, input: TUrl | Observable<TUrl>, extensions?: NgtLoaderExtensions<NgtLoaderResult<TReturnType>>, onProgress?: (event: ProgressEvent) => void): Observable<TUrl extends string[] ? Array<NgtBranchingReturn<TReturnType, GLTF, GLTF & NgtObjectMap>> : TUrl extends object ? {
|
|
6
|
-
[key in keyof TUrl]: NgtBranchingReturn<TReturnType, GLTF, GLTF & NgtObjectMap>;
|
|
7
|
-
} : NgtBranchingReturn<TReturnType, GLTF, GLTF & NgtObjectMap>>;
|
|
8
|
-
destroy: () => void;
|
|
9
|
-
preLoad: <TReturnType, TUrl extends string | string[] | Record<string, string>>(loaderConstructorFactory: (inputs: TUrl) => new (...args: any[]) => NgtLoaderResult<TReturnType>, inputs: TUrl | Observable<TUrl>, extensions?: NgtLoaderExtensions) => void;
|
|
10
|
-
}
|
|
3
|
+
import type { NgtBranchingReturn, NgtLoaderExtensions, NgtLoaderProto, NgtLoaderReturnType, NgtObjectMap } from './types';
|
|
11
4
|
export type NgtLoaderResults<TInput extends string | string[] | Record<string, string>, TReturn> = TInput extends string[] ? TReturn[] : TInput extends object ? {
|
|
12
5
|
[key in keyof TInput]: TReturn;
|
|
13
6
|
} : TReturn;
|
|
14
|
-
export declare
|
|
15
|
-
export {};
|
|
7
|
+
export declare function injectNgtLoader<TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>, TReturn = NgtLoaderReturnType<TData, TLoaderConstructor>>(loaderConstructorFactory: (inputs: TUrl) => TLoaderConstructor, input: TUrl | Observable<TUrl>, extensions?: NgtLoaderExtensions<TLoaderConstructor>, onProgress?: (event: ProgressEvent) => void): Observable<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, GLTF, GLTF & NgtObjectMap>>>;
|
package/lib/portal.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare class NgtPortalBeforeRender implements OnInit, OnDestroy {
|
|
|
23
23
|
ngOnInit(): void;
|
|
24
24
|
ngOnDestroy(): void;
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortalBeforeRender, never>;
|
|
26
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtPortalBeforeRender, "[ngtPortalBeforeRender]", never, { "renderPriority": "renderPriority"; "parentScene": "parentScene"; "parentCamera": "parentCamera"; }, { "beforeRender": "beforeRender"; }, never, never, true, never>;
|
|
26
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtPortalBeforeRender, "[ngtPortalBeforeRender]", never, { "renderPriority": { "alias": "renderPriority"; "required": false; }; "parentScene": { "alias": "parentScene"; "required": false; }; "parentCamera": { "alias": "parentCamera"; "required": false; }; }, { "beforeRender": "beforeRender"; }, never, never, true, never>;
|
|
27
27
|
}
|
|
28
28
|
export declare class NgtPortalContent {
|
|
29
29
|
constructor(vcr: ViewContainerRef, parentVcr: ViewContainerRef);
|
|
@@ -55,6 +55,6 @@ export declare class NgtPortal extends NgtRxStore<NgtPortalInputs> implements On
|
|
|
55
55
|
ngOnDestroy(): void;
|
|
56
56
|
private inject;
|
|
57
57
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortal, never>;
|
|
58
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortal, "ngt-portal", never, { "container": "container"; "state": "state"; "autoRender": "autoRender"; "autoRenderPriority": "autoRenderPriority"; }, { "beforeRender": "beforeRender"; }, ["portalContentTemplate"], never, true, never>;
|
|
58
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortal, "ngt-portal", never, { "container": { "alias": "container"; "required": false; }; "state": { "alias": "state"; "required": false; }; "autoRender": { "alias": "autoRender"; "required": false; }; "autoRenderPriority": { "alias": "autoRenderPriority"; "required": false; }; }, { "beforeRender": "beforeRender"; }, ["portalContentTemplate"], never, true, never>;
|
|
59
59
|
}
|
|
60
60
|
export {};
|
package/lib/types.d.ts
CHANGED
|
@@ -4,13 +4,9 @@ import type { BehaviorSubject } from 'rxjs';
|
|
|
4
4
|
import * as THREE from 'three';
|
|
5
5
|
import type { NgtRxStore } from './stores/rx-store';
|
|
6
6
|
export type NgtAnyRecord = Record<string, any>;
|
|
7
|
-
export type NgtNonFunctionKeys<T> = {
|
|
8
|
-
[K in keyof T]-?: T[K] extends Function ? never : K;
|
|
9
|
-
}[keyof T];
|
|
10
7
|
export type NgtProperties<T> = Pick<T, {
|
|
11
8
|
[K in keyof T]: T[K] extends (_: any) => any ? never : K;
|
|
12
9
|
}[keyof T]>;
|
|
13
|
-
export type NgtOverwrite<T, O> = Omit<T, NgtNonFunctionKeys<O>> & O;
|
|
14
10
|
export type NgtEquConfig = {
|
|
15
11
|
/** Compare arrays by reference equality a === b (default), or by shallow equality */
|
|
16
12
|
arrays?: 'reference' | 'shallow';
|
|
@@ -19,18 +15,48 @@ export type NgtEquConfig = {
|
|
|
19
15
|
/** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */
|
|
20
16
|
strict?: boolean;
|
|
21
17
|
};
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
+
};
|
|
30
52
|
export type NgtCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
|
|
31
53
|
export type NgtCameraManual = NgtCamera & {
|
|
32
54
|
manual?: boolean;
|
|
33
55
|
};
|
|
56
|
+
export interface NgtIntersection extends THREE.Intersection {
|
|
57
|
+
/** The event source (the object which registered the handler) */
|
|
58
|
+
eventObject: THREE.Object3D;
|
|
59
|
+
}
|
|
34
60
|
export interface NgtIntersectionEvent<TSourceEvent> extends NgtIntersection {
|
|
35
61
|
/** The event source (the object which registered the handler) */
|
|
36
62
|
eventObject: THREE.Object3D;
|
|
@@ -45,7 +71,7 @@ export interface NgtIntersectionEvent<TSourceEvent> extends NgtIntersection {
|
|
|
45
71
|
/** The ray that pierced it */
|
|
46
72
|
ray: THREE.Ray;
|
|
47
73
|
/** The camera that was used by the raycaster */
|
|
48
|
-
camera:
|
|
74
|
+
camera: NgtCameraManual;
|
|
49
75
|
/** stopPropagation will stop underlying handlers from firing */
|
|
50
76
|
stopPropagation: () => void;
|
|
51
77
|
/** The original host event */
|
|
@@ -55,19 +81,7 @@ export interface NgtIntersectionEvent<TSourceEvent> extends NgtIntersection {
|
|
|
55
81
|
}
|
|
56
82
|
export type NgtThreeEvent<TEvent> = NgtIntersectionEvent<TEvent> & NgtProperties<TEvent>;
|
|
57
83
|
export type NgtDomEvent = PointerEvent | MouseEvent | WheelEvent;
|
|
58
|
-
export
|
|
59
|
-
click: EventListener;
|
|
60
|
-
contextmenu: EventListener;
|
|
61
|
-
dblclick: EventListener;
|
|
62
|
-
wheel: EventListener;
|
|
63
|
-
pointerdown: EventListener;
|
|
64
|
-
pointerup: EventListener;
|
|
65
|
-
pointerleave: EventListener;
|
|
66
|
-
pointermove: EventListener;
|
|
67
|
-
pointercancel: EventListener;
|
|
68
|
-
lostpointercapture: EventListener;
|
|
69
|
-
}
|
|
70
|
-
export interface NgtEventHandlers {
|
|
84
|
+
export type NgtEventHandlers = {
|
|
71
85
|
click?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
72
86
|
contextmenu?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
73
87
|
dblclick?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
@@ -81,10 +95,13 @@ export interface NgtEventHandlers {
|
|
|
81
95
|
pointermissed?: (event: MouseEvent) => void;
|
|
82
96
|
pointercancel?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
83
97
|
wheel?: (event: NgtThreeEvent<WheelEvent>) => void;
|
|
84
|
-
}
|
|
98
|
+
};
|
|
99
|
+
export type NgtEvents = {
|
|
100
|
+
[TEvent in keyof NgtEventHandlers]-?: EventListener;
|
|
101
|
+
};
|
|
85
102
|
export type NgtFilterFunction = (items: THREE.Intersection[], store: NgtRxStore<NgtState>) => THREE.Intersection[];
|
|
86
103
|
export type NgtComputeFunction = (event: NgtDomEvent, root: NgtRxStore<NgtState>, previous?: NgtRxStore<NgtState>) => void;
|
|
87
|
-
export
|
|
104
|
+
export type NgtEventManager<TTarget> = {
|
|
88
105
|
/** Determines if the event layer is active */
|
|
89
106
|
enabled: boolean;
|
|
90
107
|
/** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
|
|
@@ -101,56 +118,33 @@ export interface NgtEventManager<TTarget = any> {
|
|
|
101
118
|
connect?: (target: TTarget) => void;
|
|
102
119
|
/** Removes all existing events handlers from the target */
|
|
103
120
|
disconnect?: () => void;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
/** How low the performance can go, between 0 and max */
|
|
109
|
-
min: number;
|
|
110
|
-
/** How high the performance can go, between min and max */
|
|
111
|
-
max: number;
|
|
112
|
-
/** Time until current returns to max in ms */
|
|
113
|
-
debounce: number;
|
|
114
|
-
/** Sets current to min, puts the system in regression */
|
|
115
|
-
regress: () => void;
|
|
116
|
-
}
|
|
117
|
-
export type NgtDpr = number | [min: number, max: number];
|
|
118
|
-
export type NgtSize = {
|
|
119
|
-
width: number;
|
|
120
|
-
height: number;
|
|
121
|
-
top: number;
|
|
122
|
-
left: number;
|
|
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;
|
|
123
125
|
};
|
|
124
|
-
export type
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
/** Current pixel ratio */
|
|
128
|
-
dpr: number;
|
|
129
|
-
/** size.width / viewport.width */
|
|
130
|
-
factor: number;
|
|
131
|
-
/** Camera distance */
|
|
132
|
-
distance: number;
|
|
133
|
-
/** Camera aspect ratio: width / height */
|
|
134
|
-
aspect: number;
|
|
126
|
+
export type NgtPointerCaptureTarget = {
|
|
127
|
+
intersection: NgtIntersection;
|
|
128
|
+
target: Element;
|
|
135
129
|
};
|
|
136
|
-
export
|
|
130
|
+
export type NgtRenderState = NgtState & {
|
|
137
131
|
delta: number;
|
|
138
132
|
frame?: XRFrame;
|
|
139
|
-
}
|
|
140
|
-
export
|
|
133
|
+
};
|
|
134
|
+
export type NgtBeforeRenderEvent<TObject extends NgtInstanceNode = NgtInstanceNode> = {
|
|
141
135
|
state: NgtRenderState;
|
|
142
136
|
object: TObject;
|
|
143
|
-
}
|
|
144
|
-
export
|
|
137
|
+
};
|
|
138
|
+
export type NgtBeforeRenderRecord = {
|
|
145
139
|
callback: (state: NgtRenderState) => void;
|
|
146
140
|
store: NgtRxStore<NgtState>;
|
|
147
141
|
priority?: number;
|
|
148
|
-
}
|
|
149
|
-
export
|
|
142
|
+
};
|
|
143
|
+
export type NgtInternalState = {
|
|
150
144
|
active: boolean;
|
|
151
145
|
priority: number;
|
|
152
146
|
frames: number;
|
|
153
|
-
lastEvent: NgtDomEvent;
|
|
147
|
+
lastEvent: NgtDomEvent | null;
|
|
154
148
|
interaction: THREE.Object3D[];
|
|
155
149
|
hovered: Map<string, NgtThreeEvent<NgtDomEvent>>;
|
|
156
150
|
subscribers: NgtBeforeRenderRecord[];
|
|
@@ -158,14 +152,11 @@ export interface NgtInternalState {
|
|
|
158
152
|
initialClick: [x: number, y: number];
|
|
159
153
|
initialHits: THREE.Object3D[];
|
|
160
154
|
subscribe: (callback: NgtBeforeRenderRecord['callback'], priority?: number, store?: NgtRxStore<NgtState>) => () => void;
|
|
161
|
-
}
|
|
162
|
-
export
|
|
163
|
-
/** Set current state */
|
|
164
|
-
set: NgtRxStore<NgtState>['set'];
|
|
165
|
-
/** Get current state */
|
|
155
|
+
};
|
|
156
|
+
export type NgtState = {
|
|
166
157
|
get: NgtRxStore<NgtState>['get'];
|
|
167
|
-
|
|
168
|
-
/**
|
|
158
|
+
set: NgtRxStore<NgtState>['set'];
|
|
159
|
+
/** when all building blocks are initialized */
|
|
169
160
|
ready: boolean;
|
|
170
161
|
/** The instance of the renderer */
|
|
171
162
|
gl: THREE.WebGLRenderer;
|
|
@@ -178,7 +169,7 @@ export interface NgtState {
|
|
|
178
169
|
/** Default clock */
|
|
179
170
|
clock: THREE.Clock;
|
|
180
171
|
/** Event layer interface, contains the event handler and the node they're connected to */
|
|
181
|
-
events: NgtEventManager
|
|
172
|
+
events: NgtEventManager<any>;
|
|
182
173
|
/** XR interface */
|
|
183
174
|
xr: {
|
|
184
175
|
connect: () => void;
|
|
@@ -212,7 +203,7 @@ export interface NgtState {
|
|
|
212
203
|
/**
|
|
213
204
|
* Shortcut to manual sizing
|
|
214
205
|
*/
|
|
215
|
-
setSize: (width: number, height: number, top?: number, left?: number
|
|
206
|
+
setSize: (width: number, height: number, top?: number, left?: number) => void;
|
|
216
207
|
/** Shortcut to manual setting the pixel ratio */
|
|
217
208
|
setDpr: (dpr: NgtDpr) => void;
|
|
218
209
|
/** Shortcut to frameloop flags */
|
|
@@ -223,16 +214,15 @@ export interface NgtState {
|
|
|
223
214
|
previousStore?: NgtRxStore<NgtState>;
|
|
224
215
|
/** Internals */
|
|
225
216
|
internal: NgtInternalState;
|
|
226
|
-
|
|
227
|
-
addInteraction: (interaction: THREE.Object3D) => void;
|
|
217
|
+
addInteraction: (instance: THREE.Object3D) => void;
|
|
228
218
|
removeInteraction: (uuid: string) => void;
|
|
229
|
-
}
|
|
219
|
+
};
|
|
230
220
|
export type NgtAttachFunction<TChild = any, TParent = any> = (parent: TParent, child: TChild, store: NgtRxStore<NgtState>) => void | (() => void);
|
|
231
221
|
export type NgtAfterAttach<TParent extends NgtInstanceNode = NgtInstanceNode, TChild extends NgtInstanceNode = NgtInstanceNode> = {
|
|
232
222
|
parent: TParent;
|
|
233
223
|
node: TChild;
|
|
234
224
|
};
|
|
235
|
-
export
|
|
225
|
+
export type NgtInstanceLocalState = {
|
|
236
226
|
/** the state getter of the canvas that the instance is being rendered to */
|
|
237
227
|
store: NgtRxStore<NgtState>;
|
|
238
228
|
nonObjects: BehaviorSubject<NgtInstanceNode[]>;
|
|
@@ -250,46 +240,14 @@ export interface NgtInstanceLocalState {
|
|
|
250
240
|
priority?: number;
|
|
251
241
|
afterUpdate?: EventEmitter<NgtInstanceNode>;
|
|
252
242
|
afterAttach?: EventEmitter<NgtAfterAttach>;
|
|
253
|
-
}
|
|
254
|
-
export type NgtInstanceNode<TNode = any> =
|
|
243
|
+
};
|
|
244
|
+
export type NgtInstanceNode<TNode = any> = {
|
|
255
245
|
__ngt__: NgtInstanceLocalState;
|
|
256
|
-
} & NgtAnyRecord;
|
|
246
|
+
} & NgtAnyRecord & TNode;
|
|
257
247
|
export type NgtGLRenderer = {
|
|
258
248
|
render: (scene: THREE.Scene, camera: THREE.Camera) => void;
|
|
259
249
|
};
|
|
260
250
|
export type NgtGLOptions = NgtGLRenderer | ((canvas: HTMLCanvasElement) => NgtGLRenderer) | Partial<NgtProperties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters> | undefined;
|
|
261
|
-
export type NgtExtendedColors<T> = {
|
|
262
|
-
[K in keyof T]: T[K] extends THREE.Color | undefined ? THREE.ColorRepresentation : T[K];
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* If **T** contains a constructor, @see ConstructorParameters must be used, otherwise **T**.
|
|
266
|
-
*/
|
|
267
|
-
export type NgtNodeArgs<T> = T extends new (...args: any) => any ? ConstructorParameters<T> : T;
|
|
268
|
-
export interface NgtNodeProps<P> {
|
|
269
|
-
attach?: string[];
|
|
270
|
-
/** Constructor arguments */
|
|
271
|
-
args?: NgtNodeArgs<P>;
|
|
272
|
-
}
|
|
273
|
-
export type NgtNode<T, P> = NgtExtendedColors<NgtOverwrite<Partial<T>, NgtNodeProps<P>>>;
|
|
274
|
-
export type NgtObject3DNode<T, P> = NgtOverwrite<NgtNode<T, P>, {
|
|
275
|
-
position?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
|
|
276
|
-
up?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
|
|
277
|
-
scale?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
|
|
278
|
-
rotation?: THREE.Euler | Parameters<THREE.Euler['set']>;
|
|
279
|
-
matrix?: THREE.Matrix4 | Parameters<THREE.Matrix4['set']>;
|
|
280
|
-
quaternion?: THREE.Quaternion | Parameters<THREE.Quaternion['set']>;
|
|
281
|
-
layers?: THREE.Layers | Parameters<THREE.Layers['set']>;
|
|
282
|
-
}> & NgtEventHandlers;
|
|
283
|
-
export type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;
|
|
284
|
-
export interface NgtLoaderProto<T> extends THREE.Loader {
|
|
285
|
-
load(url: string | string[], onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): unknown;
|
|
286
|
-
loadAsync(url: string | string[], onProgress?: (event: ProgressEvent) => void): Promise<any>;
|
|
287
|
-
}
|
|
288
|
-
export interface NgtLoaderExtensions<TLoader extends THREE.Loader = THREE.Loader> {
|
|
289
|
-
(loader: TLoader): void;
|
|
290
|
-
}
|
|
291
|
-
export type NgtLoaderResult<T> = T extends any[] ? NgtLoaderProto<T[number]> : NgtLoaderProto<T>;
|
|
292
|
-
export type NgtBranchingReturn<T = any, Parent = any, Coerced = any> = NgtConditionalType<T, Parent, Coerced, T>;
|
|
293
251
|
export interface NgtObjectMap {
|
|
294
252
|
nodes: {
|
|
295
253
|
[name: string]: THREE.Object3D;
|
|
@@ -299,16 +257,16 @@ export interface NgtObjectMap {
|
|
|
299
257
|
};
|
|
300
258
|
[key: string]: any;
|
|
301
259
|
}
|
|
302
|
-
export
|
|
260
|
+
export type NgtCanvasInputs = {
|
|
303
261
|
/** A threejs renderer instance or props that go into the default renderer */
|
|
304
262
|
gl?: NgtGLOptions;
|
|
305
|
-
/** Dimensions to fit the renderer to. Will measure canvas dimensions if omitted */
|
|
306
263
|
size?: NgtSize;
|
|
307
264
|
/**
|
|
308
|
-
* Enables PCFsoft
|
|
265
|
+
* Enables shadows (by default PCFsoft). Can accept `gl.shadowMap` options for fine-tuning,
|
|
266
|
+
* but also strings: 'basic' | 'percentage' | 'soft' | 'variance'.
|
|
309
267
|
* @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
|
|
310
268
|
*/
|
|
311
|
-
shadows?: boolean | Partial<THREE.WebGLShadowMap>;
|
|
269
|
+
shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE.WebGLShadowMap>;
|
|
312
270
|
/**
|
|
313
271
|
* Disables three r139 color management.
|
|
314
272
|
* @see https://threejs.org/docs/#manual/en/introduction/Color-management
|
|
@@ -316,7 +274,7 @@ export interface NgtCanvasInputs {
|
|
|
316
274
|
legacy?: boolean;
|
|
317
275
|
/** Switch off automatic sRGB encoding and gamma correction */
|
|
318
276
|
linear?: boolean;
|
|
319
|
-
/** Use `NoToneMapping` instead of `ACESFilmicToneMapping` */
|
|
277
|
+
/** Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` */
|
|
320
278
|
flat?: boolean;
|
|
321
279
|
/** Creates an orthographic camera */
|
|
322
280
|
orthographic?: boolean;
|
|
@@ -334,8 +292,10 @@ export interface NgtCanvasInputs {
|
|
|
334
292
|
dpr?: NgtDpr;
|
|
335
293
|
/** Props that go into the default raycaster */
|
|
336
294
|
raycaster?: Partial<THREE.Raycaster>;
|
|
295
|
+
/** A `THREE.Scene` instance or props that go into the default scene */
|
|
296
|
+
scene?: THREE.Scene | Partial<THREE.Scene>;
|
|
337
297
|
/** A `Camera` instance or props that go into the default camera */
|
|
338
|
-
camera?: (NgtCamera | Partial<
|
|
298
|
+
camera?: (NgtCamera | Partial<THREE.Camera>) & {
|
|
339
299
|
/** Flags the camera as manual, putting projection into your own hands */
|
|
340
300
|
manual?: boolean;
|
|
341
301
|
};
|
|
@@ -347,4 +307,15 @@ export interface NgtCanvasInputs {
|
|
|
347
307
|
eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen';
|
|
348
308
|
/** Default coordinate for the camera to look at */
|
|
349
309
|
lookAt?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
|
|
310
|
+
};
|
|
311
|
+
export interface NgtLoader<T> extends THREE.Loader {
|
|
312
|
+
load(url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): unknown;
|
|
313
|
+
loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;
|
|
350
314
|
}
|
|
315
|
+
export type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;
|
|
316
|
+
export type NgtLoaderReturnType<T, L extends NgtLoaderProto<T>> = T extends unknown ? Awaited<ReturnType<InstanceType<L>['loadAsync']>> : T;
|
|
317
|
+
export type NgtLoaderExtensions<T extends {
|
|
318
|
+
prototype: NgtLoaderProto<any>;
|
|
319
|
+
}> = (loader: T['prototype']) => void;
|
|
320
|
+
export type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;
|
|
321
|
+
export type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Parent, Coerced, T>;
|
package/lib/utils/is.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ElementRef } from '@angular/core';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
|
-
import type { NgtEquConfig } from '../types';
|
|
3
|
+
import type { NgtEquConfig, NgtGLRenderer } from '../types';
|
|
4
4
|
export declare const is: {
|
|
5
5
|
obj: (a: unknown) => a is object;
|
|
6
6
|
material: (a: unknown) => a is THREE.Material;
|
|
@@ -13,5 +13,10 @@ export declare const is: {
|
|
|
13
13
|
object3D: (a: unknown) => a is THREE.Object3D<THREE.Event>;
|
|
14
14
|
instance: (a: unknown) => a is any;
|
|
15
15
|
ref: (a: unknown) => a is ElementRef<any>;
|
|
16
|
+
colorSpaceExist: <T extends object | NgtGLRenderer | THREE.Texture, P = T extends NgtGLRenderer ? {
|
|
17
|
+
outputColorSpace: string;
|
|
18
|
+
} : {
|
|
19
|
+
colorSpace: string;
|
|
20
|
+
}>(object: T) => object is T & P;
|
|
16
21
|
equ(a: any, b: any, { arrays, objects, strict }?: NgtEquConfig): boolean;
|
|
17
22
|
};
|