angular-three 0.0.0-replace
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 +7 -0
- package/esm2022/angular-three.mjs +5 -0
- package/esm2022/index.mjs +20 -0
- package/esm2022/lib/canvas.mjs +187 -0
- package/esm2022/lib/directives/args.mjs +35 -0
- package/esm2022/lib/directives/common.mjs +42 -0
- package/esm2022/lib/directives/parent.mjs +35 -0
- package/esm2022/lib/dom/events.mjs +73 -0
- package/esm2022/lib/events.mjs +362 -0
- package/esm2022/lib/instance.mjs +70 -0
- package/esm2022/lib/loader.mjs +64 -0
- package/esm2022/lib/loop.mjs +153 -0
- package/esm2022/lib/portal.mjs +208 -0
- package/esm2022/lib/ref.mjs +46 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +432 -0
- package/esm2022/lib/renderer/store.mjs +423 -0
- package/esm2022/lib/renderer/utils.mjs +201 -0
- package/esm2022/lib/roots.mjs +261 -0
- package/esm2022/lib/routed-scene.mjs +33 -0
- package/esm2022/lib/store.mjs +181 -0
- package/esm2022/lib/three-types.mjs +2 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils/apply-props.mjs +123 -0
- package/esm2022/lib/utils/attach.mjs +32 -0
- package/esm2022/lib/utils/before-render.mjs +12 -0
- package/esm2022/lib/utils/create-api-token.mjs +13 -0
- package/esm2022/lib/utils/inputs.mjs +18 -0
- package/esm2022/lib/utils/is.mjs +52 -0
- package/esm2022/lib/utils/make.mjs +53 -0
- package/esm2022/lib/utils/signal-store.mjs +101 -0
- package/esm2022/lib/utils/update.mjs +34 -0
- package/fesm2022/angular-three.mjs +3167 -0
- package/fesm2022/angular-three.mjs.map +1 -0
- package/index.d.ts +22 -0
- package/lib/canvas.d.ts +1170 -0
- package/lib/directives/args.d.ts +11 -0
- package/lib/directives/common.d.ts +26 -0
- package/lib/directives/parent.d.ts +13 -0
- package/lib/dom/events.d.ts +5 -0
- package/lib/events.d.ts +83 -0
- package/lib/instance.d.ts +46 -0
- package/lib/loader.d.ts +32 -0
- package/lib/loop.d.ts +68 -0
- package/lib/portal.d.ts +58 -0
- package/lib/ref.d.ts +7 -0
- package/lib/renderer/catalogue.d.ts +13 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +56 -0
- package/lib/renderer/store.d.ts +64 -0
- package/lib/renderer/utils.d.ts +31 -0
- package/lib/roots.d.ts +12 -0
- package/lib/routed-scene.d.ts +10 -0
- package/lib/store.d.ts +141 -0
- package/lib/three-types.d.ts +302 -0
- package/lib/types.d.ts +12 -0
- package/lib/utils/apply-props.d.ts +3 -0
- package/lib/utils/attach.d.ts +11 -0
- package/lib/utils/before-render.d.ts +6 -0
- package/lib/utils/create-api-token.d.ts +23 -0
- package/lib/utils/inputs.d.ts +5 -0
- package/lib/utils/is.d.ts +23 -0
- package/lib/utils/make.d.ts +19 -0
- package/lib/utils/signal-store.d.ts +30 -0
- package/lib/utils/update.d.ts +4 -0
- package/metadata.json +1 -0
- package/package.json +73 -0
- package/plugin/README.md +11 -0
- package/plugin/generators.json +17 -0
- package/plugin/src/generators/init/compat.d.ts +2 -0
- package/plugin/src/generators/init/compat.js +6 -0
- package/plugin/src/generators/init/compat.js.map +1 -0
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +4 -0
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -0
- package/plugin/src/generators/init/generator.d.ts +3 -0
- package/plugin/src/generators/init/generator.js +143 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/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/version.d.ts +14 -0
- package/plugin/src/generators/version.js +18 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -0
- package/plugin/src/index.js +1 -0
- package/plugin/src/index.js.map +1 -0
- package/web-types.json +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NgtCommonDirective } from './common';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class NgtArgs<TArgs extends any[] = any[]> extends NgtCommonDirective {
|
|
4
|
+
args: import("@angular/core").InputSignal<TArgs | null>;
|
|
5
|
+
private injectedArgs;
|
|
6
|
+
constructor();
|
|
7
|
+
get value(): TArgs | null;
|
|
8
|
+
validate(): boolean;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtArgs<any>, never>;
|
|
10
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtArgs<any>, "ng-template[args]", never, { "args": { "alias": "args"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare const injectNodeType: {
|
|
3
|
+
(): "" | "parent" | "args";
|
|
4
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
5
|
+
optional?: false | undefined;
|
|
6
|
+
} & {
|
|
7
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
8
|
+
}): "" | "parent" | "args";
|
|
9
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
10
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
11
|
+
}): "" | "parent" | "args" | null;
|
|
12
|
+
}, provideNodeType: (() => import("@angular/core").Provider) & (((value: "" | (() => "")) => import("@angular/core").Provider) | ((value: "parent" | (() => "parent")) => import("@angular/core").Provider) | ((value: "args" | (() => "args")) => import("@angular/core").Provider));
|
|
13
|
+
export declare abstract class NgtCommonDirective {
|
|
14
|
+
private vcr;
|
|
15
|
+
private zone;
|
|
16
|
+
private template;
|
|
17
|
+
private nodeType;
|
|
18
|
+
protected injected: boolean;
|
|
19
|
+
protected shouldCreateView: boolean;
|
|
20
|
+
private view?;
|
|
21
|
+
constructor();
|
|
22
|
+
abstract validate(): boolean;
|
|
23
|
+
protected createView(): void;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtCommonDirective, never>;
|
|
25
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtCommonDirective, never, never, {}, {}, never, never, false, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as THREE from 'three';
|
|
2
|
+
import type { NgtRef } from '../ref';
|
|
3
|
+
import { NgtCommonDirective } from './common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtParent extends NgtCommonDirective {
|
|
6
|
+
parent: import("@angular/core").InputSignal<string | NgtRef<THREE.Object3D<THREE.Object3DEventMap>>>;
|
|
7
|
+
private injectedParent;
|
|
8
|
+
constructor();
|
|
9
|
+
get value(): string | NgtRef<THREE.Object3D<THREE.Object3DEventMap>> | null;
|
|
10
|
+
validate(): boolean;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtParent, never>;
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtParent, "ng-template[parent]", never, { "parent": { "alias": "parent"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type NgtEventManager } from '../events';
|
|
2
|
+
import type { NgtState } from '../store';
|
|
3
|
+
import type { NgtSignalStore } from '../utils/signal-store';
|
|
4
|
+
export declare const supportedEvents: readonly ["click", "contextmenu", "dblclick", "pointerup", "pointerdown", "pointerover", "pointerout", "pointerenter", "pointerleave", "pointermove", "pointermissed", "pointercancel", "wheel"];
|
|
5
|
+
export declare function createPointerEvents(store: NgtSignalStore<NgtState>): NgtEventManager<HTMLElement>;
|
package/lib/events.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import type { NgtState } from './store';
|
|
3
|
+
import type { NgtProperties } from './types';
|
|
4
|
+
import type { NgtSignalStore } from './utils/signal-store';
|
|
5
|
+
export interface NgtIntersection extends THREE.Intersection {
|
|
6
|
+
/** The event source (the object which registered the handler) */
|
|
7
|
+
eventObject: THREE.Object3D;
|
|
8
|
+
}
|
|
9
|
+
export interface NgtIntersectionEvent<TSourceEvent> extends NgtIntersection {
|
|
10
|
+
/** The event source (the object which registered the handler) */
|
|
11
|
+
eventObject: THREE.Object3D;
|
|
12
|
+
/** An array of intersections */
|
|
13
|
+
intersections: NgtIntersection[];
|
|
14
|
+
/** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
|
|
15
|
+
unprojectedPoint: THREE.Vector3;
|
|
16
|
+
/** Normalized event coordinates */
|
|
17
|
+
pointer: THREE.Vector2;
|
|
18
|
+
/** Delta between first click and this event */
|
|
19
|
+
delta: number;
|
|
20
|
+
/** The ray that pierced it */
|
|
21
|
+
ray: THREE.Ray;
|
|
22
|
+
/** The camera that was used by the raycaster */
|
|
23
|
+
camera: NgtCamera;
|
|
24
|
+
/** stopPropagation will stop underlying handlers from firing */
|
|
25
|
+
stopPropagation: () => void;
|
|
26
|
+
/** The original host event */
|
|
27
|
+
nativeEvent: TSourceEvent;
|
|
28
|
+
/** If the event was stopped by calling stopPropagation */
|
|
29
|
+
stopped: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type NgtCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
|
|
32
|
+
export type NgtThreeEvent<TEvent> = NgtIntersectionEvent<TEvent> & NgtProperties<TEvent>;
|
|
33
|
+
export type NgtDomEvent = PointerEvent | MouseEvent | WheelEvent;
|
|
34
|
+
export type NgtEventHandlers = {
|
|
35
|
+
click?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
36
|
+
contextmenu?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
37
|
+
dblclick?: (event: NgtThreeEvent<MouseEvent>) => void;
|
|
38
|
+
pointerup?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
39
|
+
pointerdown?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
40
|
+
pointerover?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
41
|
+
pointerout?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
42
|
+
pointerenter?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
43
|
+
pointerleave?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
44
|
+
pointermove?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
45
|
+
pointermissed?: (event: MouseEvent) => void;
|
|
46
|
+
pointercancel?: (event: NgtThreeEvent<PointerEvent>) => void;
|
|
47
|
+
wheel?: (event: NgtThreeEvent<WheelEvent>) => void;
|
|
48
|
+
};
|
|
49
|
+
export type NgtEvents = {
|
|
50
|
+
[TEvent in keyof NgtEventHandlers]-?: EventListener;
|
|
51
|
+
};
|
|
52
|
+
export type NgtFilterFunction = (items: THREE.Intersection[], store: NgtSignalStore<NgtState>) => THREE.Intersection[];
|
|
53
|
+
export type NgtComputeFunction = (event: NgtDomEvent, root: NgtSignalStore<NgtState>, previous: NgtSignalStore<NgtState> | null) => void;
|
|
54
|
+
export type NgtEventManager<TTarget> = {
|
|
55
|
+
/** Determines if the event layer is active */
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
/** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
|
|
58
|
+
priority: number;
|
|
59
|
+
/** The compute function needs to set up the raycaster and an xy- pointer */
|
|
60
|
+
compute?: NgtComputeFunction;
|
|
61
|
+
/** The filter can re-order or re-structure the intersections */
|
|
62
|
+
filter?: NgtFilterFunction;
|
|
63
|
+
/** The target node the event layer is tied to */
|
|
64
|
+
connected?: TTarget;
|
|
65
|
+
/** All the pointer event handlers through which the host forwards native events */
|
|
66
|
+
handlers?: NgtEvents;
|
|
67
|
+
/** Allows re-connecting to another target */
|
|
68
|
+
connect?: (target: TTarget) => void;
|
|
69
|
+
/** Removes all existing events handlers from the target */
|
|
70
|
+
disconnect?: () => void;
|
|
71
|
+
/** Triggers a onPointerMove with the last known event. This can be useful to enable raycasting without
|
|
72
|
+
* explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
|
|
73
|
+
*/
|
|
74
|
+
update?: () => void;
|
|
75
|
+
};
|
|
76
|
+
export interface NgtPointerCaptureTarget {
|
|
77
|
+
intersection: NgtIntersection;
|
|
78
|
+
target: Element;
|
|
79
|
+
}
|
|
80
|
+
export declare function removeInteractivity(store: NgtSignalStore<NgtState>, object: THREE.Object3D): void;
|
|
81
|
+
export declare function createEvents(store: NgtSignalStore<NgtState>): {
|
|
82
|
+
handlePointer: (name: string) => (event: NgtDomEvent) => void;
|
|
83
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Signal } from '@angular/core';
|
|
2
|
+
import type { ReplaySubject } from 'rxjs';
|
|
3
|
+
import type { NgtEventHandlers } from './events';
|
|
4
|
+
import type { NgtState } from './store';
|
|
5
|
+
import type { NgtAnyRecord } from './types';
|
|
6
|
+
import { type NgtSignalStore } from './utils/signal-store';
|
|
7
|
+
export type NgtAttachFunction<TChild = any, TParent = any> = (parent: TParent, child: TChild, store: NgtSignalStore<NgtState>) => void | (() => void);
|
|
8
|
+
export type NgtAfterAttach<TChild extends NgtInstanceNode = NgtInstanceNode, TParent extends NgtInstanceNode = NgtInstanceNode> = {
|
|
9
|
+
parent: TParent;
|
|
10
|
+
node: TChild;
|
|
11
|
+
};
|
|
12
|
+
export type NgtLocalInstanceState = {
|
|
13
|
+
objects: NgtInstanceNode[];
|
|
14
|
+
nonObjects: NgtInstanceNode[];
|
|
15
|
+
parent: NgtInstanceNode | null;
|
|
16
|
+
nativeProps: NgtAnyRecord;
|
|
17
|
+
};
|
|
18
|
+
export type NgtLocalState = {
|
|
19
|
+
/** the store of the canvas that the instance is being rendered to */
|
|
20
|
+
store: NgtSignalStore<NgtState>;
|
|
21
|
+
instanceStore: NgtSignalStore<NgtLocalInstanceState>;
|
|
22
|
+
parent: Signal<NgtLocalInstanceState['parent']>;
|
|
23
|
+
objects: Signal<NgtLocalInstanceState['objects']>;
|
|
24
|
+
nonObjects: Signal<NgtLocalInstanceState['nonObjects']>;
|
|
25
|
+
nativeProps: Signal<NgtLocalInstanceState['nativeProps']>;
|
|
26
|
+
add: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
|
|
27
|
+
remove: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
|
|
28
|
+
setNativeProps: (key: string, value: any) => void;
|
|
29
|
+
setParent: (parent: NgtInstanceNode | null) => void;
|
|
30
|
+
primitive?: boolean;
|
|
31
|
+
eventCount: number;
|
|
32
|
+
handlers: Partial<NgtEventHandlers>;
|
|
33
|
+
args?: unknown[];
|
|
34
|
+
attach?: string[] | NgtAttachFunction;
|
|
35
|
+
previousAttach?: unknown | (() => void);
|
|
36
|
+
isRaw?: boolean;
|
|
37
|
+
priority?: number;
|
|
38
|
+
afterUpdate?: ReplaySubject<NgtInstanceNode>;
|
|
39
|
+
afterAttach?: ReplaySubject<NgtAfterAttach>;
|
|
40
|
+
};
|
|
41
|
+
export type NgtInstanceNode<TNode = any> = {
|
|
42
|
+
__ngt__: NgtLocalState;
|
|
43
|
+
} & NgtAnyRecord & TNode;
|
|
44
|
+
export declare function getLocalState<TInstance extends object>(obj: TInstance | undefined): NgtLocalState | undefined;
|
|
45
|
+
export declare function invalidateInstance<TInstance extends object>(instance: TInstance): void;
|
|
46
|
+
export declare function prepare<TInstance extends object = NgtAnyRecord>(object: TInstance, localState?: Partial<NgtLocalState>): NgtInstanceNode<TInstance>;
|
package/lib/loader.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injector, type Signal } from '@angular/core';
|
|
2
|
+
import type * as THREE from 'three';
|
|
3
|
+
import { type NgtObjectMap } from './utils/make';
|
|
4
|
+
export type NgtGLTFLike = {
|
|
5
|
+
scene: THREE.Object3D;
|
|
6
|
+
};
|
|
7
|
+
export interface NgtLoader<T> extends THREE.Loader {
|
|
8
|
+
load(url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: unknown) => void): unknown;
|
|
9
|
+
loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;
|
|
10
|
+
}
|
|
11
|
+
export type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;
|
|
12
|
+
export type NgtLoaderReturnType<T, L extends NgtLoaderProto<T>> = T extends unknown ? Awaited<ReturnType<InstanceType<L>['loadAsync']>> : T;
|
|
13
|
+
export type NgtLoaderExtensions<T extends {
|
|
14
|
+
prototype: NgtLoaderProto<any>;
|
|
15
|
+
}> = (loader: T['prototype']) => void;
|
|
16
|
+
export type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;
|
|
17
|
+
export type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Parent, Coerced, T>;
|
|
18
|
+
export type NgtLoaderResults<TInput extends string | string[] | Record<string, string>, TReturn> = TInput extends string[] ? TReturn[] : TInput extends object ? {
|
|
19
|
+
[key in keyof TInput]: TReturn;
|
|
20
|
+
} : TReturn;
|
|
21
|
+
declare function _injectNgtLoader<TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>, TReturn = NgtLoaderReturnType<TData, TLoaderConstructor>>(loaderConstructorFactory: (inputs: string[]) => TLoaderConstructor, inputs: () => TUrl, { extensions, onProgress, injector, }?: {
|
|
22
|
+
extensions?: NgtLoaderExtensions<TLoaderConstructor>;
|
|
23
|
+
onProgress?: (event: ProgressEvent) => void;
|
|
24
|
+
injector?: Injector;
|
|
25
|
+
}): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>> | null>;
|
|
26
|
+
declare namespace _injectNgtLoader {
|
|
27
|
+
var preload: <TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>>(loaderConstructorFactory: (inputs: string[]) => TLoaderConstructor, inputs: () => TUrl, extensions?: NgtLoaderExtensions<TLoaderConstructor> | undefined) => void;
|
|
28
|
+
var destroy: () => void;
|
|
29
|
+
}
|
|
30
|
+
export type NgtInjectedLoader = typeof _injectNgtLoader;
|
|
31
|
+
export declare const injectNgtLoader: NgtInjectedLoader;
|
|
32
|
+
export {};
|
package/lib/loop.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/// <reference types="webxr" />
|
|
2
|
+
import type { NgtState } from './store';
|
|
3
|
+
import type { NgtSignalStore } from './utils/signal-store';
|
|
4
|
+
export type NgtGlobalRenderCallback = (timeStamp: number) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Adds a global render callback which is called each frame.
|
|
7
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect
|
|
8
|
+
*/
|
|
9
|
+
export declare const addEffect: (callback: NgtGlobalRenderCallback) => () => void;
|
|
10
|
+
/**
|
|
11
|
+
* Adds a global after-render callback which is called each frame.
|
|
12
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect
|
|
13
|
+
*/
|
|
14
|
+
export declare const addAfterEffect: (callback: NgtGlobalRenderCallback) => () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Adds a global callback which is called when rendering stops.
|
|
17
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail
|
|
18
|
+
*/
|
|
19
|
+
export declare const addTail: (callback: NgtGlobalRenderCallback) => () => void;
|
|
20
|
+
export type NgtGlobalEffectType = 'before' | 'after' | 'tail';
|
|
21
|
+
export declare function flushGlobalEffects(type: NgtGlobalEffectType, timestamp: number): void;
|
|
22
|
+
export declare const injectNgtLoop: {
|
|
23
|
+
(): {
|
|
24
|
+
loop: (timestamp: number) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
|
|
27
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
|
|
28
|
+
*/
|
|
29
|
+
invalidate: (store?: NgtSignalStore<NgtState>, frames?: number) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
|
|
32
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
|
|
33
|
+
*/
|
|
34
|
+
advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
|
|
35
|
+
};
|
|
36
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
37
|
+
optional?: false | undefined;
|
|
38
|
+
} & {
|
|
39
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
40
|
+
}): {
|
|
41
|
+
loop: (timestamp: number) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
|
|
44
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
|
|
45
|
+
*/
|
|
46
|
+
invalidate: (store?: NgtSignalStore<NgtState>, frames?: number) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
|
|
49
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
|
|
50
|
+
*/
|
|
51
|
+
advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
|
|
52
|
+
};
|
|
53
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
54
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
55
|
+
}): {
|
|
56
|
+
loop: (timestamp: number) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
|
|
59
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
|
|
60
|
+
*/
|
|
61
|
+
invalidate: (store?: NgtSignalStore<NgtState>, frames?: number) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
|
|
64
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
|
|
65
|
+
*/
|
|
66
|
+
advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
|
|
67
|
+
} | null;
|
|
68
|
+
};
|
package/lib/portal.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import type { NgtEventManager } from './events';
|
|
4
|
+
import { type NgtSize, type NgtState } from './store';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
declare const privateKeys: readonly ["get", "set", "select", "setSize", "setDpr", "setFrameloop", "events", "invalidate", "advance", "size", "viewport"];
|
|
7
|
+
type PrivateKeys = (typeof privateKeys)[number];
|
|
8
|
+
export interface NgtPortalInputs {
|
|
9
|
+
container: ElementRef<THREE.Object3D> | THREE.Object3D;
|
|
10
|
+
camera: ElementRef<THREE.Camera> | THREE.Camera;
|
|
11
|
+
state: Partial<Omit<NgtState, PrivateKeys> & {
|
|
12
|
+
events: Partial<Pick<NgtEventManager<any>, 'enabled' | 'priority' | 'compute' | 'connected'>>;
|
|
13
|
+
size: NgtSize;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export declare class NgtPortalBeforeRender {
|
|
17
|
+
private portalStore;
|
|
18
|
+
private injector;
|
|
19
|
+
renderPriority: import("@angular/core").InputSignal<number>;
|
|
20
|
+
parentScene: import("@angular/core").InputSignal<THREE.Scene>;
|
|
21
|
+
parentCamera: import("@angular/core").InputSignal<THREE.Camera>;
|
|
22
|
+
constructor();
|
|
23
|
+
onPointerOver(): void;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortalBeforeRender, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortalBeforeRender, "ngt-portal-before-render", never, { "renderPriority": { "alias": "renderPriority"; "required": false; "isSignal": true; }; "parentScene": { "alias": "parentScene"; "required": true; "isSignal": true; }; "parentCamera": { "alias": "parentCamera"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
27
|
+
export declare class NgtPortalContent {
|
|
28
|
+
constructor(vcr: ViewContainerRef, parentVcr: ViewContainerRef);
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortalContent, [null, { skipSelf: true; }]>;
|
|
30
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtPortalContent, "ng-template[ngtPortalContent]", never, {}, {}, never, never, true, never>;
|
|
31
|
+
}
|
|
32
|
+
export declare class NgtPortal {
|
|
33
|
+
options: import("@angular/core").InputSignalWithTransform<{
|
|
34
|
+
container: THREE.Object3D<THREE.Object3DEventMap> | ElementRef<THREE.Object3D<THREE.Object3DEventMap>>;
|
|
35
|
+
camera?: THREE.Camera | ElementRef<THREE.Camera> | undefined;
|
|
36
|
+
state?: Partial<Omit<NgtState, "setSize" | "set" | "viewport" | "events" | "size" | "invalidate" | "advance" | "setDpr" | "setFrameloop" | "get" | "select"> & {
|
|
37
|
+
events: Partial<Pick<NgtEventManager<any>, "enabled" | "priority" | "compute" | "connected">>;
|
|
38
|
+
size: NgtSize;
|
|
39
|
+
}> | undefined;
|
|
40
|
+
}, Partial<NgtPortalInputs>>;
|
|
41
|
+
autoRender: import("@angular/core").InputSignal<boolean>;
|
|
42
|
+
autoRenderPriority: import("@angular/core").InputSignal<number>;
|
|
43
|
+
portalContentTemplate: import("@angular/core").Signal<TemplateRef<any>>;
|
|
44
|
+
portalContentAnchor: import("@angular/core").Signal<ViewContainerRef>;
|
|
45
|
+
private destroyRef;
|
|
46
|
+
private autoEffect;
|
|
47
|
+
private parentStore;
|
|
48
|
+
private portalStore;
|
|
49
|
+
private portalRendered;
|
|
50
|
+
protected renderAutoBeforeRender: import("@angular/core").Signal<boolean>;
|
|
51
|
+
protected parentScene: THREE.Scene;
|
|
52
|
+
protected parentCamera: import("./store").NgtCameraManual;
|
|
53
|
+
constructor();
|
|
54
|
+
private inject;
|
|
55
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortal, never>;
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortal, "ngt-portal", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "autoRender": { "alias": "autoRender"; "required": false; "isSignal": true; }; "autoRenderPriority": { "alias": "autoRenderPriority"; "required": false; "isSignal": true; }; }, {}, ["portalContentTemplate"], never, true, never>;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
package/lib/ref.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ElementRef, type Injector, type Signal } from '@angular/core';
|
|
2
|
+
import { type NgtInstanceNode } from './instance';
|
|
3
|
+
export type NgtInjectedRef<TElement> = ElementRef<TElement> & {
|
|
4
|
+
children: (type?: 'objects' | 'nonObjects' | 'both') => Signal<NgtInstanceNode[]>;
|
|
5
|
+
};
|
|
6
|
+
export type NgtRef<TElement> = TElement | NgtInjectedRef<TElement>;
|
|
7
|
+
export declare function injectNgtRef<TElement>(initial?: ElementRef<TElement> | TElement, injector?: Injector): NgtInjectedRef<TElement>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type NgtAnyConstructor = new (...args: any[]) => any;
|
|
2
|
+
export declare function extend(objects: object): void;
|
|
3
|
+
export declare const injectNgtCatalogue: {
|
|
4
|
+
(): Record<string, NgtAnyConstructor>;
|
|
5
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
6
|
+
optional?: false | undefined;
|
|
7
|
+
} & {
|
|
8
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
9
|
+
}): Record<string, NgtAnyConstructor>;
|
|
10
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
11
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
12
|
+
}): Record<string, NgtAnyConstructor> | null;
|
|
13
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const ROUTED_SCENE = "__ngt_renderer_is_routed_scene__";
|
|
2
|
+
export declare const HTML = "__ngt_renderer_is_html";
|
|
3
|
+
export declare const SPECIAL_INTERNAL_ADD_COMMENT = "__ngt_renderer_add_comment__";
|
|
4
|
+
export declare const SPECIAL_DOM_TAG: {
|
|
5
|
+
readonly NGT_PORTAL: "ngt-portal";
|
|
6
|
+
readonly NGT_PRIMITIVE: "ngt-primitive";
|
|
7
|
+
readonly NGT_VALUE: "ngt-value";
|
|
8
|
+
};
|
|
9
|
+
export declare const SPECIAL_PROPERTIES: {
|
|
10
|
+
readonly COMPOUND: "ngtCompound";
|
|
11
|
+
readonly RENDER_PRIORITY: "priority";
|
|
12
|
+
readonly ATTACH: "attach";
|
|
13
|
+
readonly RAW_VALUE: "rawValue";
|
|
14
|
+
readonly REF: "ref";
|
|
15
|
+
};
|
|
16
|
+
export declare const SPECIAL_EVENTS: {
|
|
17
|
+
readonly BEFORE_RENDER: "beforeRender";
|
|
18
|
+
readonly AFTER_UPDATE: "afterUpdate";
|
|
19
|
+
readonly AFTER_ATTACH: "afterAttach";
|
|
20
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RendererFactory2, type Renderer2, type RendererType2 } from '@angular/core';
|
|
2
|
+
import { type NgtState } from '../store';
|
|
3
|
+
import type { NgtAnyRecord } from '../types';
|
|
4
|
+
import { type NgtSignalStore } from '../utils/signal-store';
|
|
5
|
+
import { type NgtAnyConstructor } from './catalogue';
|
|
6
|
+
import { NgtRendererStore, type NgtRendererNode, type NgtRendererState } from './store';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class NgtRendererFactory implements RendererFactory2 {
|
|
9
|
+
private delegateRendererFactory;
|
|
10
|
+
private catalogue;
|
|
11
|
+
private rendererMap;
|
|
12
|
+
private routedSet;
|
|
13
|
+
private rendererStore;
|
|
14
|
+
createRenderer(hostElement: any, type: RendererType2 | null): Renderer2;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtRendererFactory, never>;
|
|
16
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NgtRendererFactory>;
|
|
17
|
+
}
|
|
18
|
+
export declare class NgtRenderer implements Renderer2 {
|
|
19
|
+
private delegate;
|
|
20
|
+
private store;
|
|
21
|
+
private catalogue;
|
|
22
|
+
private isRoot;
|
|
23
|
+
constructor(delegate: Renderer2, store: NgtRendererStore, catalogue: Record<string, NgtAnyConstructor>, isRoot?: boolean);
|
|
24
|
+
createElement(name: string, namespace?: string | null | undefined): NgtAnyRecord & {
|
|
25
|
+
__ngt_renderer__: NgtRendererState;
|
|
26
|
+
};
|
|
27
|
+
createComment(value: string): NgtAnyRecord & {
|
|
28
|
+
__ngt_renderer__: NgtRendererState;
|
|
29
|
+
};
|
|
30
|
+
appendChild(parent: NgtRendererNode, newChild: NgtRendererNode): void;
|
|
31
|
+
insertBefore(parent: NgtRendererNode, newChild: NgtRendererNode): void;
|
|
32
|
+
removeChild(parent: NgtRendererNode, oldChild: NgtRendererNode, isHostElement?: boolean | undefined): void;
|
|
33
|
+
parentNode(node: NgtRendererNode): any;
|
|
34
|
+
private setAttributeInternal;
|
|
35
|
+
setAttribute(el: NgtRendererNode, name: string, value: string, namespace?: string | null | undefined): void;
|
|
36
|
+
removeAttribute(el: NgtRendererNode, name: string, namespace?: string | null | undefined): void;
|
|
37
|
+
setProperty(el: NgtRendererNode, name: string, value: any): void;
|
|
38
|
+
listen(target: NgtRendererNode, eventName: string, callback: (event: any) => boolean | void): () => void;
|
|
39
|
+
private shouldFindGrandparentInstance;
|
|
40
|
+
createText: (value: string) => any;
|
|
41
|
+
destroy: () => void;
|
|
42
|
+
destroyNode: ((node: any) => void) | null;
|
|
43
|
+
selectRootElement: (selectorOrNode: any, preserveContent?: boolean | undefined) => any;
|
|
44
|
+
nextSibling: (node: any) => any;
|
|
45
|
+
addClass: (el: any, name: string) => void;
|
|
46
|
+
removeClass: (el: any, name: string) => void;
|
|
47
|
+
setStyle: (el: any, style: string, value: any, flags?: import("@angular/core").RendererStyleFlags2 | undefined) => void;
|
|
48
|
+
removeStyle: (el: any, style: string, flags?: import("@angular/core").RendererStyleFlags2 | undefined) => void;
|
|
49
|
+
setValue: (node: any, value: string) => void;
|
|
50
|
+
get data(): {
|
|
51
|
+
[key: string]: any;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export declare function provideNgtRenderer(store: NgtSignalStore<NgtState>, compoundPrefixes: string[]): import("@angular/core").EnvironmentProviders;
|
|
55
|
+
export { extend } from './catalogue';
|
|
56
|
+
export { HTML, ROUTED_SCENE } from './constants';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { InjectionToken, Injector } from '@angular/core';
|
|
2
|
+
import type { NgtRef } from '../ref';
|
|
3
|
+
import { type NgtState } from '../store';
|
|
4
|
+
import type { NgtAnyRecord } from '../types';
|
|
5
|
+
import type { NgtSignalStore } from '../utils/signal-store';
|
|
6
|
+
import { NgtRendererClassId } from './utils';
|
|
7
|
+
export declare const NGT_COMPOUND_PREFIXES: InjectionToken<string[]>;
|
|
8
|
+
type NgtQueueOp = [type: 'op' | 'cleanUp', op: () => void, done?: true];
|
|
9
|
+
export type NgtRendererState = [
|
|
10
|
+
type: 'three' | 'compound' | 'portal' | 'comment' | 'dom',
|
|
11
|
+
parent: NgtRendererNode | null,
|
|
12
|
+
injectedParent: NgtRef<NgtRendererNode> | null,
|
|
13
|
+
children: NgtRendererNode[],
|
|
14
|
+
destroyed: boolean,
|
|
15
|
+
compound: [applyFirst: boolean, props: NgtAnyRecord],
|
|
16
|
+
compoundParent: NgtRendererNode,
|
|
17
|
+
compounded: NgtRendererNode,
|
|
18
|
+
queueOps: Set<NgtQueueOp>,
|
|
19
|
+
attributes: NgtAnyRecord,
|
|
20
|
+
properties: NgtAnyRecord,
|
|
21
|
+
rawValue: any,
|
|
22
|
+
ref: any,
|
|
23
|
+
portalContainer: NgtRendererNode,
|
|
24
|
+
injectorFactory: () => Injector | undefined
|
|
25
|
+
];
|
|
26
|
+
export type NgtRendererNode = {
|
|
27
|
+
__ngt_renderer__: NgtRendererState;
|
|
28
|
+
};
|
|
29
|
+
type NgtRendererRootState = {
|
|
30
|
+
store: NgtSignalStore<NgtState>;
|
|
31
|
+
compoundPrefixes: string[];
|
|
32
|
+
document: Document;
|
|
33
|
+
};
|
|
34
|
+
export declare class NgtRendererStore {
|
|
35
|
+
private rootState;
|
|
36
|
+
private argsCommentNodes;
|
|
37
|
+
private parentCommentNodes;
|
|
38
|
+
private portalCommentsNodes;
|
|
39
|
+
constructor(rootState: NgtRendererRootState);
|
|
40
|
+
createNode(type: NgtRendererState[NgtRendererClassId.type], node: NgtAnyRecord): NgtAnyRecord & {
|
|
41
|
+
__ngt_renderer__: NgtRendererState;
|
|
42
|
+
};
|
|
43
|
+
isCompound(name: string): boolean;
|
|
44
|
+
isDOM(node: NgtAnyRecord): boolean;
|
|
45
|
+
getClosestParentWithInstance(node: NgtRendererNode): NgtRendererNode | null;
|
|
46
|
+
getClosestParentWithCompound(node: NgtRendererNode): NgtRendererNode | null;
|
|
47
|
+
processPortalContainer(portal: NgtRendererNode): void;
|
|
48
|
+
getCreationState(): readonly [any[], string | NgtRef<import("three").Object3D<import("three").Object3DEventMap>> | null, NgtSignalStore<NgtState>];
|
|
49
|
+
setParent(node: NgtRendererNode, parent: NgtRendererNode): void;
|
|
50
|
+
addChild(node: NgtRendererNode, child: NgtRendererNode): void;
|
|
51
|
+
removeChild(node: NgtRendererNode, child: NgtRendererNode): void;
|
|
52
|
+
setCompound(compound: NgtRendererNode, instance: NgtRendererNode): void;
|
|
53
|
+
queueOperation(node: NgtRendererNode, op: NgtQueueOp): void;
|
|
54
|
+
private executeOperation;
|
|
55
|
+
applyAttribute(node: NgtRendererNode, name: string, value: string): void;
|
|
56
|
+
applyProperty(node: NgtRendererNode, name: string, value: any): void;
|
|
57
|
+
get rootScene(): import("three").Scene;
|
|
58
|
+
destroy(node: NgtRendererNode, parent?: NgtRendererNode): void;
|
|
59
|
+
private removeCommentNode;
|
|
60
|
+
private updateNativeProps;
|
|
61
|
+
private firstNonInjectedDirective;
|
|
62
|
+
private tryGetPortalStore;
|
|
63
|
+
}
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type NgtInstanceNode } from '../instance';
|
|
2
|
+
export declare const enum NgtRendererClassId {
|
|
3
|
+
type = 0,
|
|
4
|
+
parent = 1,
|
|
5
|
+
injectedParent = 2,
|
|
6
|
+
children = 3,
|
|
7
|
+
destroyed = 4,
|
|
8
|
+
compound = 5,
|
|
9
|
+
compoundParent = 6,
|
|
10
|
+
compounded = 7,
|
|
11
|
+
queueOps = 8,
|
|
12
|
+
attributes = 9,
|
|
13
|
+
properties = 10,
|
|
14
|
+
rawValue = 11,
|
|
15
|
+
ref = 12,
|
|
16
|
+
portalContainer = 13,
|
|
17
|
+
injectorFactory = 14
|
|
18
|
+
}
|
|
19
|
+
export declare const enum NgtCompoundClassId {
|
|
20
|
+
applyFirst = 0,
|
|
21
|
+
props = 1
|
|
22
|
+
}
|
|
23
|
+
export declare const enum NgtQueueOpClassId {
|
|
24
|
+
type = 0,
|
|
25
|
+
op = 1,
|
|
26
|
+
done = 2
|
|
27
|
+
}
|
|
28
|
+
export declare function kebabToPascal(str: string): string;
|
|
29
|
+
export declare function attachThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode): void;
|
|
30
|
+
export declare function removeThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode, dispose?: boolean): void;
|
|
31
|
+
export declare function processThreeEvent(instance: NgtInstanceNode, priority: number, eventName: string, callback: (event: any) => void): () => void;
|
package/lib/roots.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { 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 type NgtCanvasElement = HTMLCanvasElement | OffscreenCanvas;
|
|
6
|
+
export declare const roots: Map<NgtCanvasElement, NgtSignalStore<NgtState>>;
|
|
7
|
+
export declare function injectCanvasRootInitializer(injector?: Injector): (canvas: NgtCanvasElement) => {
|
|
8
|
+
isConfigured: boolean;
|
|
9
|
+
destroy: (timeout?: number) => void;
|
|
10
|
+
configure: (inputs: NgtCanvasInputs) => void;
|
|
11
|
+
};
|
|
12
|
+
export type NgtCanvasConfigurator = ReturnType<ReturnType<typeof injectCanvasRootInitializer>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { ROUTED_SCENE } from './renderer/constants';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtRoutedScene {
|
|
6
|
+
static [ROUTED_SCENE]: boolean;
|
|
7
|
+
constructor(router: Router, cdr: ChangeDetectorRef);
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtRoutedScene, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtRoutedScene, "ngt-routed-scene", never, {}, {}, never, never, true, never>;
|
|
10
|
+
}
|