angular-three 2.0.0-beta.21 → 2.0.0-beta.223

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.
Files changed (109) hide show
  1. package/esm2022/index.mjs +4 -11
  2. package/esm2022/lib/canvas.mjs +81 -156
  3. package/esm2022/lib/directives/args.mjs +6 -6
  4. package/esm2022/lib/directives/common.mjs +15 -14
  5. package/esm2022/lib/directives/parent.mjs +6 -6
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +28 -25
  8. package/esm2022/lib/instance.mjs +39 -34
  9. package/esm2022/lib/loader.mjs +12 -14
  10. package/esm2022/lib/loop.mjs +9 -10
  11. package/esm2022/lib/portal.mjs +122 -135
  12. package/esm2022/lib/ref.mjs +18 -20
  13. package/esm2022/lib/renderer/catalogue.mjs +2 -2
  14. package/esm2022/lib/renderer/constants.mjs +2 -2
  15. package/esm2022/lib/renderer/index.mjs +58 -62
  16. package/esm2022/lib/renderer/store.mjs +129 -120
  17. package/esm2022/lib/renderer/utils.mjs +35 -42
  18. package/esm2022/lib/roots.mjs +41 -38
  19. package/esm2022/lib/routed-scene.mjs +6 -7
  20. package/esm2022/lib/store.mjs +163 -189
  21. package/esm2022/lib/utils/apply-props.mjs +12 -17
  22. package/esm2022/lib/utils/attach.mjs +6 -6
  23. package/esm2022/lib/utils/before-render.mjs +12 -0
  24. package/esm2022/lib/utils/cd-aware-signal.mjs +24 -0
  25. package/esm2022/lib/utils/create-api-token.mjs +13 -0
  26. package/esm2022/lib/utils/is.mjs +6 -5
  27. package/esm2022/lib/utils/make.mjs +15 -12
  28. package/esm2022/lib/utils/signal-store.mjs +67 -57
  29. package/esm2022/lib/utils/update.mjs +3 -2
  30. package/fesm2022/angular-three.mjs +1621 -1795
  31. package/fesm2022/angular-three.mjs.map +1 -1
  32. package/index.d.ts +6 -10
  33. package/lib/canvas.d.ts +24 -37
  34. package/lib/directives/common.d.ts +12 -1
  35. package/lib/events.d.ts +2 -2
  36. package/lib/instance.d.ts +19 -10
  37. package/lib/loader.d.ts +13 -4
  38. package/lib/loop.d.ts +6 -29
  39. package/lib/portal.d.ts +18 -26
  40. package/lib/ref.d.ts +0 -1
  41. package/lib/renderer/catalogue.d.ts +5 -1
  42. package/lib/renderer/constants.d.ts +1 -1
  43. package/lib/renderer/index.d.ts +55 -4
  44. package/lib/renderer/store.d.ts +18 -21
  45. package/lib/renderer/utils.d.ts +2 -3
  46. package/lib/roots.d.ts +4 -3
  47. package/lib/store.d.ts +9 -11
  48. package/lib/utils/apply-props.d.ts +0 -1
  49. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  50. package/lib/utils/cd-aware-signal.d.ts +4 -0
  51. package/lib/utils/create-api-token.d.ts +23 -0
  52. package/lib/utils/is.d.ts +11 -12
  53. package/lib/utils/make.d.ts +3 -2
  54. package/lib/utils/signal-store.d.ts +16 -3
  55. package/metadata.json +1 -1
  56. package/package.json +30 -11
  57. package/plugin/generators.json +0 -32
  58. package/plugin/src/generators/init/compat.d.ts +1 -3
  59. package/plugin/src/generators/init/files/experience/{experience.component.ts.__tmpl__ → experience.component.ts__tmpl__} +1 -0
  60. package/plugin/src/generators/init/generator.d.ts +2 -5
  61. package/plugin/src/generators/init/generator.js +94 -95
  62. package/plugin/src/generators/init/generator.js.map +1 -1
  63. package/plugin/src/generators/init/schema.json +1 -12
  64. package/plugin/src/generators/utils.js.map +1 -1
  65. package/plugin/src/generators/{versions.d.ts → version.d.ts} +5 -3
  66. package/plugin/src/generators/version.js +18 -0
  67. package/plugin/src/generators/version.js.map +1 -0
  68. package/plugin/src/index.d.ts +0 -3
  69. package/plugin/src/index.js +0 -9
  70. package/plugin/src/index.js.map +1 -1
  71. package/web-types.json +1 -1
  72. package/esm2022/lib/before-render.mjs +0 -13
  73. package/esm2022/lib/directives/key.mjs +0 -29
  74. package/esm2022/lib/directives/repeat.mjs +0 -17
  75. package/esm2022/lib/three-types.mjs +0 -2
  76. package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
  77. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  78. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  79. package/lib/directives/key.d.ts +0 -10
  80. package/lib/directives/repeat.d.ts +0 -7
  81. package/lib/three-types.d.ts +0 -306
  82. package/lib/utils/assert-injection-context.d.ts +0 -2
  83. package/lib/utils/create-injection-token.d.ts +0 -27
  84. package/lib/utils/safe-detect-changes.d.ts +0 -2
  85. package/plugin/package.json +0 -6
  86. package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
  87. package/plugin/src/generators/init-cannon/compat.js +0 -6
  88. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  89. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  90. package/plugin/src/generators/init-cannon/generator.js +0 -22
  91. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  92. package/plugin/src/generators/init-cannon/schema.json +0 -6
  93. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  94. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  95. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  96. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  97. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  98. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  99. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  100. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  101. package/plugin/src/generators/init-soba/compat.js +0 -6
  102. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  103. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  104. package/plugin/src/generators/init-soba/generator.js +0 -26
  105. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  106. package/plugin/src/generators/init-soba/schema.json +0 -6
  107. package/plugin/src/generators/versions.js +0 -16
  108. package/plugin/src/generators/versions.js.map +0 -1
  109. /package/plugin/src/generators/init/files/experience/{experience.component.html.__tmpl__ → experience.component.html__tmpl__} +0 -0
package/index.d.ts CHANGED
@@ -1,10 +1,5 @@
1
- export * from './lib/before-render';
2
1
  export * from './lib/canvas';
3
2
  export * from './lib/directives/args';
4
- export * from './lib/directives/key';
5
- export * from './lib/directives/parent';
6
- export * from './lib/directives/repeat';
7
- export { type NgtCamera, type NgtThreeEvent } from './lib/events';
8
3
  export * from './lib/instance';
9
4
  export * from './lib/loader';
10
5
  export { addAfterEffect, addEffect, addTail } from './lib/loop';
@@ -13,14 +8,15 @@ export * from './lib/ref';
13
8
  export * from './lib/renderer';
14
9
  export * from './lib/routed-scene';
15
10
  export * from './lib/store';
16
- export * from './lib/three-types';
17
- export * from './lib/types';
18
11
  export * from './lib/utils/apply-props';
19
- export * from './lib/utils/assert-injection-context';
20
12
  export { createAttachFunction } from './lib/utils/attach';
21
- export * from './lib/utils/create-injection-token';
13
+ export * from './lib/utils/before-render';
14
+ export * from './lib/utils/cd-aware-signal';
15
+ export * from './lib/utils/create-api-token';
22
16
  export * from './lib/utils/is';
23
17
  export * from './lib/utils/make';
24
- export * from './lib/utils/safe-detect-changes';
25
18
  export * from './lib/utils/signal-store';
26
19
  export * from './lib/utils/update';
20
+ export type { NgtCamera, NgtThreeEvent } from './lib/events';
21
+ export type * from './lib/three-types';
22
+ export type * from './lib/types';
package/lib/canvas.d.ts CHANGED
@@ -1,16 +1,18 @@
1
- import { ElementRef, EventEmitter, type OnChanges, type OnInit, type SimpleChanges, type Type } from '@angular/core';
2
- import { type NgxResizeResult } from 'ngx-resize';
1
+ import { ElementRef, EventEmitter, type Type } from '@angular/core';
2
+ import { type ResizeResult } from 'ngxtension/resize';
3
3
  import * as THREE from 'three';
4
4
  import type { NgtCamera, NgtEventManager } from './events';
5
- import { type NgtDpr, type NgtPerformance, type NgtRenderer, type NgtSize, type NgtState } from './store';
5
+ import { type NgtCanvasElement } from './roots';
6
+ import { type NgtDpr, type NgtPerformance, type NgtRendererLike, type NgtSize, type NgtState } from './store';
6
7
  import type { NgtObject3DNode } from './three-types';
7
8
  import type { NgtAnyRecord, NgtProperties } from './types';
8
9
  import { type NgtSignalStore } from './utils/signal-store';
9
10
  import * as i0 from "@angular/core";
10
- export type NgtGLOptions = NgtRenderer | ((canvas: HTMLCanvasElement) => NgtRenderer) | Partial<NgtProperties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters> | undefined;
11
+ export type NgtGLOptions = NgtRendererLike | ((canvas: NgtCanvasElement) => NgtRendererLike) | Partial<NgtProperties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters> | undefined;
11
12
  export type NgtCanvasInputs = {
12
13
  /** A threejs renderer instance or props that go into the default renderer */
13
14
  gl?: NgtGLOptions;
15
+ /** Dimensions to fit the renderer to. Will measure canvas dimensions if omitted */
14
16
  size?: NgtSize;
15
17
  /**
16
18
  * Enables shadows (by default PCFsoft). Can accept `gl.shadowMap` options for fine-tuning,
@@ -23,7 +25,7 @@ export type NgtCanvasInputs = {
23
25
  * @see https://threejs.org/docs/#manual/en/introduction/Color-management
24
26
  */
25
27
  legacy?: boolean;
26
- /** Switch off automatic sRGB encoding and gamma correction */
28
+ /** Switch off automatic sRGB color space and gamma correction */
27
29
  linear?: boolean;
28
30
  /** Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` */
29
31
  flat?: boolean;
@@ -59,49 +61,34 @@ export type NgtCanvasInputs = {
59
61
  /** Default coordinate for the camera to look at */
60
62
  lookAt?: THREE.Vector3 | Parameters<THREE.Vector3['set']>;
61
63
  };
62
- export declare class NgtCanvas implements OnInit, OnChanges {
64
+ export declare class NgtCanvas {
63
65
  private store;
64
66
  private initRoot;
67
+ private autoEffect;
65
68
  private host;
66
69
  private viewContainerRef;
67
- private injector;
68
- private environmentInjector;
69
70
  private zone;
70
- private destroyRef;
71
- private cdr;
72
- private inputs;
73
- sceneGraph: Type<unknown>;
74
- sceneGraphInputs: NgtAnyRecord;
71
+ private environmentInjector;
72
+ private injector;
73
+ sceneGraph: Type<any>;
75
74
  compoundPrefixes: string[];
76
- set linear(linear: boolean);
77
- set legacy(legacy: boolean);
78
- set flat(flat: boolean);
79
- set orthographic(orthographic: boolean);
80
- set frameloop(frameloop: NgtCanvasInputs['frameloop']);
81
- set dpr(dpr: NgtDpr);
82
- set raycaster(raycaster: Partial<THREE.Raycaster>);
83
- set shadows(shadows: boolean | Partial<THREE.WebGLShadowMap>);
84
- set camera(camera: NgtCanvasInputs['camera']);
85
- set scene(scene: NgtCanvasInputs['scene']);
86
- set gl(gl: NgtCanvasInputs['gl']);
87
- set eventSource(eventSource: NgtCanvasInputs['eventSource']);
88
- set eventPrefix(eventPrefix: NgtCanvasInputs['eventPrefix']);
89
- set lookAt(lookAt: NgtCanvasInputs['lookAt']);
90
- set performance(performance: NgtCanvasInputs['performance']);
75
+ private sceneGraphInputs;
76
+ set _sceneGraphInputs(value: NgtAnyRecord);
77
+ private canvasInputs;
78
+ set _canvasInputs(value: Partial<NgtCanvasInputs>);
91
79
  created: EventEmitter<NgtState>;
92
- private inputsEventSource;
93
- protected hbPointerEvents: import("@angular/core").Signal<"none" | "auto">;
94
80
  glCanvas: ElementRef<HTMLCanvasElement>;
95
- private resizeEffectRef?;
81
+ protected resizeResult: import("@angular/core").WritableSignal<ResizeResult>;
82
+ private eventSource;
83
+ protected hbPointerEvents: import("@angular/core").Signal<"none" | "auto">;
96
84
  private configurator?;
97
85
  private glEnvironmentInjector?;
98
86
  private glRef?;
99
- ngOnChanges(changes: SimpleChanges): void;
100
- ngOnInit(): void;
101
- onResize(result: NgxResizeResult): void;
102
- private render;
103
- private overrideChangeDetectorRef;
87
+ constructor();
88
+ private noZoneResizeEffect;
89
+ private noZoneRender;
90
+ private noZoneSceneGraphInputsEffect;
104
91
  private setSceneGraphInputs;
105
92
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtCanvas, never>;
106
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtCanvas, "ngt-canvas", never, { "sceneGraph": { "alias": "sceneGraph"; "required": true; }; "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; }; "scene": { "alias": "scene"; "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"; }, never, never, true, never>;
93
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtCanvas, "ngt-canvas", never, { "sceneGraph": { "alias": "sceneGraph"; "required": true; }; "compoundPrefixes": { "alias": "compoundPrefixes"; "required": false; }; "_sceneGraphInputs": { "alias": "sceneGraphInputs"; "required": false; }; "_canvasInputs": { "alias": "options"; "required": false; }; }, { "created": "created"; }, never, never, true, never>;
107
94
  }
@@ -1,9 +1,20 @@
1
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));
2
13
  export declare abstract class NgtCommonDirective {
3
- protected static processComment: boolean;
4
14
  private vcr;
5
15
  private zone;
6
16
  private template;
17
+ private nodeType;
7
18
  protected injected: boolean;
8
19
  protected shouldCreateView: boolean;
9
20
  private view?;
package/lib/events.d.ts CHANGED
@@ -51,7 +51,7 @@ export type NgtEvents = {
51
51
  };
52
52
  export type NgtFilterFunction = (items: THREE.Intersection[], store: NgtSignalStore<NgtState>) => THREE.Intersection[];
53
53
  export type NgtComputeFunction = (event: NgtDomEvent, root: NgtSignalStore<NgtState>, previous: NgtSignalStore<NgtState> | null) => void;
54
- export interface NgtEventManager<TTarget> {
54
+ export type NgtEventManager<TTarget> = {
55
55
  /** Determines if the event layer is active */
56
56
  enabled: boolean;
57
57
  /** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
@@ -72,7 +72,7 @@ export interface NgtEventManager<TTarget> {
72
72
  * explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
73
73
  */
74
74
  update?: () => void;
75
- }
75
+ };
76
76
  export interface NgtPointerCaptureTarget {
77
77
  intersection: NgtIntersection;
78
78
  target: Element;
package/lib/instance.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { EventEmitter, type WritableSignal } from '@angular/core';
1
+ import type { EventEmitter, Signal } from '@angular/core';
2
2
  import type { NgtEventHandlers } from './events';
3
3
  import type { NgtState } from './store';
4
4
  import type { NgtAnyRecord } from './types';
@@ -8,15 +8,24 @@ export type NgtAfterAttach<TChild extends NgtInstanceNode = NgtInstanceNode, TPa
8
8
  parent: TParent;
9
9
  node: TChild;
10
10
  };
11
- export type NgtInstanceLocalState = {
12
- /** the state getter of the canvas that the instance is being rendered to */
11
+ export type NgtLocalInstanceState = {
12
+ objects: NgtInstanceNode[];
13
+ nonObjects: NgtInstanceNode[];
14
+ parent: NgtInstanceNode | null;
15
+ nativeProps: NgtAnyRecord;
16
+ };
17
+ export type NgtLocalState = {
18
+ /** the store of the canvas that the instance is being rendered to */
13
19
  store: NgtSignalStore<NgtState>;
14
- nonObjects: WritableSignal<NgtInstanceNode[]>;
15
- objects: WritableSignal<NgtInstanceNode[]>;
20
+ instanceStore: NgtSignalStore<NgtLocalInstanceState>;
21
+ parent: Signal<NgtLocalInstanceState['parent']>;
22
+ objects: Signal<NgtLocalInstanceState['objects']>;
23
+ nonObjects: Signal<NgtLocalInstanceState['nonObjects']>;
24
+ nativeProps: Signal<NgtLocalInstanceState['nativeProps']>;
16
25
  add: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
17
26
  remove: (instance: NgtInstanceNode, type: 'objects' | 'nonObjects') => void;
18
- nativeProps: NgtSignalStore<NgtAnyRecord>;
19
- parent: WritableSignal<NgtInstanceNode | null>;
27
+ setNativeProps: (key: string, value: any) => void;
28
+ setParent: (parent: NgtInstanceNode | null) => void;
20
29
  primitive?: boolean;
21
30
  eventCount: number;
22
31
  handlers: Partial<NgtEventHandlers>;
@@ -29,8 +38,8 @@ export type NgtInstanceLocalState = {
29
38
  afterAttach?: EventEmitter<NgtAfterAttach>;
30
39
  };
31
40
  export type NgtInstanceNode<TNode = any> = {
32
- __ngt__: NgtInstanceLocalState;
41
+ __ngt__: NgtLocalState;
33
42
  } & NgtAnyRecord & TNode;
34
- export declare function getLocalState<TInstance extends object = NgtAnyRecord>(obj: TInstance | undefined): NgtInstanceLocalState;
43
+ export declare function getLocalState<TInstance extends object>(obj: TInstance | undefined): NgtLocalState | undefined;
35
44
  export declare function invalidateInstance<TInstance extends object>(instance: TInstance): void;
36
- export declare function prepare<TInstance extends object = NgtAnyRecord>(object: TInstance, localState?: Partial<NgtInstanceLocalState>): NgtInstanceNode<TInstance>;
45
+ export declare function prepare<TInstance extends object = NgtAnyRecord>(object: TInstance, localState?: Partial<NgtLocalState>): NgtInstanceNode<TInstance>;
package/lib/loader.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import { Injector, type Signal } from '@angular/core';
2
- import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
3
2
  import { type NgtObjectMap } from './utils/make';
3
+ export type NgtGLTFLike = {
4
+ scene: THREE.Object3D;
5
+ };
4
6
  export interface NgtLoader<T> extends THREE.Loader {
5
- load(url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): unknown;
7
+ load(url: string, onLoad?: (result: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: unknown) => void): unknown;
6
8
  loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;
7
9
  }
8
10
  export type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;
@@ -15,8 +17,15 @@ export type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Paren
15
17
  export type NgtLoaderResults<TInput extends string | string[] | Record<string, string>, TReturn> = TInput extends string[] ? TReturn[] : TInput extends object ? {
16
18
  [key in keyof TInput]: TReturn;
17
19
  } : TReturn;
18
- export 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, }?: {
20
+ 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, }?: {
19
21
  extensions?: NgtLoaderExtensions<TLoaderConstructor>;
20
22
  onProgress?: (event: ProgressEvent) => void;
21
23
  injector?: Injector;
22
- }): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, GLTF, GLTF & NgtObjectMap>> | null>;
24
+ }): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>> | null>;
25
+ declare namespace _injectNgtLoader {
26
+ 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;
27
+ var destroy: () => void;
28
+ }
29
+ export type NgtInjectedLoader = typeof _injectNgtLoader;
30
+ export declare const injectNgtLoader: NgtInjectedLoader;
31
+ export {};
package/lib/loop.d.ts CHANGED
@@ -19,19 +19,6 @@ export declare const addAfterEffect: (callback: NgtGlobalRenderCallback) => () =
19
19
  export declare const addTail: (callback: NgtGlobalRenderCallback) => () => void;
20
20
  export type NgtGlobalEffectType = 'before' | 'after' | 'tail';
21
21
  export declare function flushGlobalEffects(type: NgtGlobalEffectType, timestamp: number): void;
22
- declare function createLoop<TCanvas>(roots: Map<TCanvas, NgtSignalStore<NgtState>>): {
23
- loop: (timestamp: number) => void;
24
- /**
25
- * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
26
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
27
- */
28
- invalidate: (store?: NgtSignalStore<NgtState>, frames?: number) => void;
29
- /**
30
- * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
31
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
32
- */
33
- advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
34
- };
35
22
  export declare const injectNgtLoop: {
36
23
  (): {
37
24
  loop: (timestamp: number) => void;
@@ -48,6 +35,8 @@ export declare const injectNgtLoop: {
48
35
  };
49
36
  (injectOptions: import("@angular/core").InjectOptions & {
50
37
  optional?: false | undefined;
38
+ } & {
39
+ injector?: import("@angular/core").Injector | undefined;
51
40
  }): {
52
41
  loop: (timestamp: number) => void;
53
42
  /**
@@ -61,7 +50,9 @@ export declare const injectNgtLoop: {
61
50
  */
62
51
  advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
63
52
  };
64
- (injectOptions: import("@angular/core").InjectOptions): {
53
+ (injectOptions: import("@angular/core").InjectOptions & {
54
+ injector?: import("@angular/core").Injector | undefined;
55
+ }): {
65
56
  loop: (timestamp: number) => void;
66
57
  /**
67
58
  * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
@@ -74,18 +65,4 @@ export declare const injectNgtLoop: {
74
65
  */
75
66
  advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
76
67
  } | null;
77
- }, NGT_LOOP: import("@angular/core").InjectionToken<{
78
- loop: (timestamp: number) => void;
79
- /**
80
- * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
81
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
82
- */
83
- invalidate: (store?: NgtSignalStore<NgtState>, frames?: number) => void;
84
- /**
85
- * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
86
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
87
- */
88
- advance: (timestamp: number, runGlobalEffects?: boolean, store?: NgtSignalStore<NgtState>, frame?: XRFrame) => void;
89
- }>;
90
- export type NgtLoop = ReturnType<typeof createLoop>;
91
- export {};
68
+ };
package/lib/portal.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { EventEmitter, TemplateRef, ViewContainerRef, type ElementRef, type OnInit } from '@angular/core';
1
+ import { ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
2
2
  import * as THREE from 'three';
3
3
  import type { NgtEventManager } from './events';
4
- import { type NgtRenderState, type NgtSize, type NgtState } from './store';
4
+ import { type NgtSize, type NgtState } from './store';
5
5
  import * as i0 from "@angular/core";
6
6
  declare const privateKeys: readonly ["get", "set", "select", "setSize", "setDpr", "setFrameloop", "events", "invalidate", "advance", "size", "viewport"];
7
7
  type PrivateKeys = (typeof privateKeys)[number];
@@ -13,49 +13,41 @@ export interface NgtPortalInputs {
13
13
  size: NgtSize;
14
14
  }>;
15
15
  }
16
- export declare class NgtPortalBeforeRender implements OnInit {
16
+ export declare class NgtPortalBeforeRender {
17
17
  private portalStore;
18
18
  private injector;
19
19
  renderPriority: number;
20
20
  parentScene: THREE.Scene;
21
21
  parentCamera: THREE.Camera;
22
- beforeRender: EventEmitter<NgtRenderState>;
23
- ngOnInit(): void;
22
+ constructor();
23
+ onPointerOver(): void;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortalBeforeRender, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgtPortalBeforeRender, "[ngtPortalBeforeRender]", never, { "renderPriority": { "alias": "renderPriority"; "required": false; }; "parentScene": { "alias": "parentScene"; "required": true; }; "parentCamera": { "alias": "parentCamera"; "required": true; }; }, { "beforeRender": "beforeRender"; }, never, never, true, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortalBeforeRender, "ngt-portal-before-render", never, { "renderPriority": { "alias": "renderPriority"; "required": false; }; "parentScene": { "alias": "parentScene"; "required": true; }; "parentCamera": { "alias": "parentCamera"; "required": true; }; }, {}, never, never, true, never>;
26
26
  }
27
27
  export declare class NgtPortalContent {
28
28
  constructor(vcr: ViewContainerRef, parentVcr: ViewContainerRef);
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortalContent, [null, { skipSelf: true; }]>;
30
30
  static ɵdir: i0.ɵɵDirectiveDeclaration<NgtPortalContent, "ng-template[ngtPortalContent]", never, {}, {}, never, never, true, never>;
31
31
  }
32
- export declare class NgtPortal implements OnInit {
33
- private inputs;
34
- set container(container: NgtPortalInputs['container']);
35
- set portalState(state: NgtPortalInputs['state']);
36
- autoRender: boolean;
32
+ export declare class NgtPortal {
33
+ private portalInputs;
34
+ set _portalInputs(value: Partial<NgtPortalInputs>);
35
+ private autoRender;
36
+ set _autoRender(value: boolean);
37
37
  autoRenderPriority: number;
38
- beforeRender: EventEmitter<{
39
- root: NgtRenderState;
40
- portal: NgtRenderState;
41
- }>;
42
38
  portalContentTemplate: TemplateRef<unknown>;
43
39
  portalContentAnchor: ViewContainerRef;
40
+ private destroyRef;
41
+ private autoEffect;
44
42
  private parentStore;
45
- parentScene: THREE.Scene;
46
- parentCamera: import("./store").NgtCameraManual;
47
43
  private portalStore;
48
- private injector;
49
- private zone;
50
- private raycaster;
51
- private pointer;
52
- portalContentRendered: boolean;
53
- private portalContentView?;
44
+ private portalRendered;
45
+ protected renderAutoBeforeRender: import("@angular/core").Signal<boolean>;
46
+ protected parentScene: THREE.Scene;
47
+ protected parentCamera: import("./store").NgtCameraManual;
54
48
  constructor();
55
- ngOnInit(): void;
56
- onBeforeRender(portal: NgtRenderState): void;
57
49
  private inject;
58
50
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtPortal, never>;
59
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortal, "ngt-portal", never, { "container": { "alias": "container"; "required": false; }; "portalState": { "alias": "state"; "required": false; }; "autoRender": { "alias": "autoRender"; "required": false; }; "autoRenderPriority": { "alias": "autoRenderPriority"; "required": false; }; }, { "beforeRender": "beforeRender"; }, ["portalContentTemplate"], never, true, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtPortal, "ngt-portal", never, { "_portalInputs": { "alias": "options"; "required": false; }; "_autoRender": { "alias": "autoRender"; "required": false; }; "autoRenderPriority": { "alias": "autoRenderPriority"; "required": false; }; }, {}, ["portalContentTemplate"], never, true, never>;
60
52
  }
61
53
  export {};
package/lib/ref.d.ts CHANGED
@@ -2,7 +2,6 @@ import { ElementRef, type Injector, type Signal } from '@angular/core';
2
2
  import { type NgtInstanceNode } from './instance';
3
3
  export type NgtInjectedRef<TElement> = ElementRef<TElement> & {
4
4
  children: (type?: 'objects' | 'nonObjects' | 'both') => Signal<NgtInstanceNode[]>;
5
- untracked: TElement;
6
5
  };
7
6
  export type NgtRef<TElement> = TElement | NgtInjectedRef<TElement>;
8
7
  export declare function injectNgtRef<TElement>(initial?: ElementRef<TElement> | TElement, injector?: Injector): NgtInjectedRef<TElement>;
@@ -4,6 +4,10 @@ export declare const injectNgtCatalogue: {
4
4
  (): Record<string, NgtAnyConstructor>;
5
5
  (injectOptions: import("@angular/core").InjectOptions & {
6
6
  optional?: false | undefined;
7
+ } & {
8
+ injector?: import("@angular/core").Injector | undefined;
7
9
  }): Record<string, NgtAnyConstructor>;
8
- (injectOptions: import("@angular/core").InjectOptions): Record<string, NgtAnyConstructor> | null;
10
+ (injectOptions: import("@angular/core").InjectOptions & {
11
+ injector?: import("@angular/core").Injector | undefined;
12
+ }): Record<string, NgtAnyConstructor> | null;
9
13
  };
@@ -10,7 +10,7 @@ export declare const SPECIAL_PROPERTIES: {
10
10
  readonly COMPOUND: "ngtCompound";
11
11
  readonly RENDER_PRIORITY: "priority";
12
12
  readonly ATTACH: "attach";
13
- readonly VALUE: "rawValue";
13
+ readonly RAW_VALUE: "rawValue";
14
14
  readonly REF: "ref";
15
15
  };
16
16
  export declare const SPECIAL_EVENTS: {
@@ -1,5 +1,56 @@
1
- import { ChangeDetectorRef } from '@angular/core';
2
- import { type NgtStore } from '../store';
3
- export declare function provideNgtRenderer(store: NgtStore, compoundPrefixes: string[], cdr: ChangeDetectorRef): import("@angular/core").EnvironmentProviders;
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;
4
55
  export { extend } from './catalogue';
5
- export { HTML } from './constants';
56
+ export { HTML, ROUTED_SCENE } from './constants';
@@ -5,12 +5,6 @@ import type { NgtAnyRecord } from '../types';
5
5
  import type { NgtSignalStore } from '../utils/signal-store';
6
6
  import { NgtRendererClassId } from './utils';
7
7
  export declare const NGT_COMPOUND_PREFIXES: InjectionToken<string[]>;
8
- type NgtRendererRootState = {
9
- store: NgtSignalStore<NgtState>;
10
- compoundPrefixes: string[];
11
- document: Document;
12
- portals: Array<NgtRendererNode>;
13
- };
14
8
  type NgtQueueOp = [type: 'op' | 'cleanUp', op: () => void, done?: true];
15
9
  export type NgtRendererState = [
16
10
  type: 'three' | 'compound' | 'portal' | 'comment' | 'dom',
@@ -27,39 +21,42 @@ export type NgtRendererState = [
27
21
  rawValue: any,
28
22
  ref: any,
29
23
  portalContainer: NgtRendererNode,
30
- injectorFactory: () => Injector
24
+ injectorFactory: () => Injector | undefined
31
25
  ];
32
26
  export type NgtRendererNode = {
33
27
  __ngt_renderer__: NgtRendererState;
34
28
  };
29
+ type NgtRendererRootState = {
30
+ store: NgtSignalStore<NgtState>;
31
+ compoundPrefixes: string[];
32
+ document: Document;
33
+ };
35
34
  export declare class NgtRendererStore {
36
- private root;
37
- private comments;
38
- constructor(root: NgtRendererRootState);
35
+ private rootState;
36
+ private argsCommentNodes;
37
+ private parentCommentNodes;
38
+ private portalCommentsNodes;
39
+ constructor(rootState: NgtRendererRootState);
39
40
  createNode(type: NgtRendererState[NgtRendererClassId.type], node: NgtAnyRecord): NgtAnyRecord & {
40
41
  __ngt_renderer__: NgtRendererState;
41
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>];
42
49
  setParent(node: NgtRendererNode, parent: NgtRendererNode): void;
43
50
  addChild(node: NgtRendererNode, child: NgtRendererNode): void;
44
51
  removeChild(node: NgtRendererNode, child: NgtRendererNode): void;
45
52
  setCompound(compound: NgtRendererNode, instance: NgtRendererNode): void;
46
53
  queueOperation(node: NgtRendererNode, op: NgtQueueOp): void;
47
54
  private executeOperation;
48
- processPortalContainer(portal: NgtRendererNode): void;
49
55
  applyAttribute(node: NgtRendererNode, name: string, value: string): void;
50
56
  applyProperty(node: NgtRendererNode, name: string, value: any): void;
51
- isCompound(name: string): boolean;
52
- isDOM(node: NgtAnyRecord): boolean;
53
57
  get rootScene(): import("three").Scene;
54
- get portals(): NgtRendererNode[];
55
- getClosestParentWithInstance(node: NgtRendererNode): NgtRendererNode | null;
56
- getClosestParentWithCompound(node: NgtRendererNode): NgtRendererNode | null | undefined;
57
- getCreationState(): {
58
- injectedArgs: any[];
59
- injectedParent: string | NgtRef<import("three").Object3D<import("three").Event>> | null;
60
- store: NgtSignalStore<NgtState>;
61
- };
62
58
  destroy(node: NgtRendererNode, parent?: NgtRendererNode): void;
59
+ private removeCommentNode;
63
60
  private updateNativeProps;
64
61
  private firstNonInjectedDirective;
65
62
  private tryGetPortalStore;
@@ -1,4 +1,3 @@
1
- import { ChangeDetectorRef, NgZone } from '@angular/core';
2
1
  import { type NgtInstanceNode } from '../instance';
3
2
  export declare const enum NgtRendererClassId {
4
3
  type = 0,
@@ -26,7 +25,7 @@ export declare const enum NgtQueueOpClassId {
26
25
  op = 1,
27
26
  done = 2
28
27
  }
28
+ export declare function kebabToPascal(str: string): string;
29
29
  export declare function attachThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode): void;
30
30
  export declare function removeThreeChild(parent: NgtInstanceNode, child: NgtInstanceNode, dispose?: boolean): void;
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;
31
+ export declare function processThreeEvent(instance: NgtInstanceNode, priority: number, eventName: string, callback: (event: any) => void): () => void;
package/lib/roots.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { type Injector } from '@angular/core';
1
+ import { Injector } from '@angular/core';
2
2
  import type { NgtCanvasInputs } from './canvas';
3
3
  import { type NgtState } from './store';
4
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) => {
5
+ export type NgtCanvasElement = HTMLCanvasElement | OffscreenCanvas;
6
+ export declare const roots: Map<NgtCanvasElement, NgtSignalStore<NgtState>>;
7
+ export declare function injectCanvasRootInitializer(injector?: Injector): (canvas: NgtCanvasElement) => {
7
8
  isConfigured: boolean;
8
9
  destroy: (timeout?: number) => void;
9
10
  configure: (inputs: NgtCanvasInputs) => void;