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/lib/store.d.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  /// <reference types="webxr" />
2
- import { ElementRef, InjectionToken, Injector } from '@angular/core';
2
+ import { ElementRef, InjectionToken } from '@angular/core';
3
3
  import { type Observable } from 'rxjs';
4
4
  import * as THREE from 'three';
5
5
  import type { NgtCamera, NgtDomEvent, NgtEventManager, NgtPointerCaptureTarget, NgtThreeEvent } from './events';
6
6
  import type { NgtInstanceNode } from './instance';
7
- import { type NgtLoop } from './loop';
8
7
  import { type NgtSignalStore } from './utils/signal-store';
9
- export type NgtRenderer = {
8
+ export type NgtRendererLike = {
10
9
  render: (scene: THREE.Scene, camera: THREE.Camera) => any;
11
10
  };
12
11
  export type NgtCameraManual = NgtCamera & {
@@ -70,8 +69,6 @@ export type NgtInternalState = {
70
69
  subscribe: (callback: NgtBeforeRenderRecord['callback'], priority?: number, store?: NgtSignalStore<NgtState>) => () => void;
71
70
  };
72
71
  export type NgtState = {
73
- /** when all building blocks are initialized */
74
- ready: boolean;
75
72
  /** The instance of the renderer */
76
73
  gl: THREE.WebGLRenderer;
77
74
  /** Default camera */
@@ -125,19 +122,20 @@ export type NgtState = {
125
122
  /** When the canvas was clicked but nothing was hit */
126
123
  /** PointerMissed Observable */
127
124
  pointerMissed$: Observable<MouseEvent>;
128
- /** If this state model is layerd (via createPortal) then this contains the previous layer */
125
+ /** If this state model is layered (via createPortal) then this contains the previous layer */
129
126
  previousRoot: NgtSignalStore<NgtState> | null;
130
127
  /** Internals */
131
128
  internal: NgtInternalState;
132
129
  };
133
- declare function storeFactory(loop: NgtLoop, document: Document, injector: Injector, parent: NgtSignalStore<NgtState> | null): NgtSignalStore<NgtState>;
134
- export type NgtStore = ReturnType<typeof storeFactory>;
135
130
  export declare const NGT_STORE: InjectionToken<NgtSignalStore<NgtState>>;
136
131
  export declare const injectNgtStore: {
137
132
  (): NgtSignalStore<NgtState>;
138
133
  (injectOptions: import("@angular/core").InjectOptions & {
139
134
  optional?: false | undefined;
135
+ } & {
136
+ injector?: import("@angular/core").Injector | undefined; /** Current performance normal, between min and max */
140
137
  }): NgtSignalStore<NgtState>;
141
- (injectOptions: import("@angular/core").InjectOptions): NgtSignalStore<NgtState> | null;
142
- }, provideNgtStore: (value?: NgtSignalStore<NgtState> | undefined) => import("@angular/core").Provider;
143
- export {};
138
+ (injectOptions: import("@angular/core").InjectOptions & {
139
+ injector?: import("@angular/core").Injector | undefined;
140
+ }): NgtSignalStore<NgtState> | null;
141
+ }, provideNgtStore: (() => import("@angular/core").Provider) & ((value: NgtSignalStore<NgtState> | (() => NgtSignalStore<NgtState>)) => import("@angular/core").Provider);
@@ -1,4 +1,3 @@
1
1
  import { type NgtInstanceNode } from '../instance';
2
2
  import type { NgtAnyRecord } from '../types';
3
- export declare function diffProps(instance: NgtAnyRecord, props: NgtAnyRecord): [key: string, value: unknown][];
4
3
  export declare function applyProps(instance: NgtInstanceNode, props: NgtAnyRecord): any;
@@ -1,5 +1,5 @@
1
1
  import { Injector } from '@angular/core';
2
- import { type NgtBeforeRenderRecord } from './store';
2
+ import { type NgtBeforeRenderRecord } from '../store';
3
3
  export declare function injectBeforeRender(cb: NgtBeforeRenderRecord['callback'], { priority, injector }?: {
4
4
  priority?: number;
5
5
  injector?: Injector;
@@ -0,0 +1,4 @@
1
+ import { type CreateSignalOptions, type Injector } from '@angular/core';
2
+ export declare function cdAwareSignal<T>(initialValue: T, { injector, ...options }?: CreateSignalOptions<T> & {
3
+ injector?: Injector;
4
+ }): import("@angular/core").WritableSignal<T>;
@@ -0,0 +1,23 @@
1
+ import { type Type } from '@angular/core';
2
+ import { type CreateInjectionTokenOptions } from 'ngxtension/create-injection-token';
3
+ declare function apiFactory<TObject extends {
4
+ api: any;
5
+ }, TApi = TObject extends {
6
+ api: infer Api;
7
+ } ? Api : never>(obj: TObject): TApi;
8
+ export declare function createApiToken<TObject extends {
9
+ api: any;
10
+ }, TApi = TObject extends {
11
+ api: infer Api;
12
+ } ? Api : never>(forwardedObject: () => Type<TObject>): readonly [{
13
+ (): CreateInjectionTokenOptions<typeof apiFactory, [TObject]>["multi"] extends true ? TApi[] : TApi;
14
+ (injectOptions: import("@angular/core").InjectOptions & {
15
+ optional?: false | undefined;
16
+ } & {
17
+ injector?: import("@angular/core").Injector | undefined;
18
+ }): CreateInjectionTokenOptions<typeof apiFactory, [TObject]>["multi"] extends true ? TApi[] : TApi;
19
+ (injectOptions: import("@angular/core").InjectOptions & {
20
+ injector?: import("@angular/core").Injector | undefined;
21
+ }): (CreateInjectionTokenOptions<typeof apiFactory, [TObject]>["multi"] extends true ? TApi[] : TApi) | null;
22
+ }, () => import("@angular/core").Provider];
23
+ export {};
package/lib/utils/is.d.ts CHANGED
@@ -1,20 +1,19 @@
1
1
  import { ElementRef } from '@angular/core';
2
- import * as THREE from 'three';
3
- import type { NgtRenderer } from '../store';
2
+ import type { NgtRendererLike } from '../store';
4
3
  import type { NgtEquConfig } from '../types';
5
4
  export declare const is: {
6
5
  obj: (a: unknown) => a is object;
7
- material: (a: unknown) => a is THREE.Material;
8
- geometry: (a: unknown) => a is THREE.BufferGeometry<THREE.NormalBufferAttributes>;
9
- orthographicCamera: (a: unknown) => a is THREE.OrthographicCamera;
10
- perspectiveCamera: (a: unknown) => a is THREE.PerspectiveCamera;
11
- camera: (a: unknown) => a is THREE.Camera;
12
- renderer: (a: unknown) => a is THREE.WebGLRenderer;
13
- scene: (a: unknown) => a is THREE.Scene;
14
- object3D: (a: unknown) => a is THREE.Object3D<THREE.Event>;
15
- instance: (a: unknown) => a is any;
6
+ material: (a: unknown) => a is import("three").Material;
7
+ geometry: (a: unknown) => a is import("three").BufferGeometry<import("three").NormalBufferAttributes>;
8
+ orthographicCamera: (a: unknown) => a is import("three").OrthographicCamera;
9
+ perspectiveCamera: (a: unknown) => a is import("three").PerspectiveCamera;
10
+ camera: (a: unknown) => a is import("three").Camera;
11
+ renderer: (a: unknown) => boolean;
12
+ scene: (a: unknown) => a is import("three").Scene;
16
13
  ref: (a: unknown) => a is ElementRef<any>;
17
- colorSpaceExist: <T extends object | NgtRenderer | THREE.Texture, P = T extends NgtRenderer ? {
14
+ instance: (a: unknown) => a is any;
15
+ object3D: (a: unknown) => a is import("three").Object3D<import("three").Object3DEventMap>;
16
+ colorSpaceExist: <T extends object | NgtRendererLike | import("three").Texture, P = T extends NgtRendererLike ? {
18
17
  outputColorSpace: string;
19
18
  } : {
20
19
  colorSpace: string;
@@ -1,11 +1,12 @@
1
1
  import * as THREE from 'three';
2
2
  import type { NgtGLOptions } from '../canvas';
3
3
  import type { NgtIntersection } from '../events';
4
+ import type { NgtCanvasElement } from '../roots';
4
5
  import type { NgtDpr, NgtSize } from '../store';
5
6
  export declare function makeId(event?: NgtIntersection): string;
6
7
  export declare function makeDpr(dpr: NgtDpr, window?: Window): number;
7
- export declare function makeDefaultCamera(isOrthographic: boolean, size: NgtSize): THREE.OrthographicCamera | THREE.PerspectiveCamera;
8
- export declare function makeDefaultRenderer(glOptions: NgtGLOptions, canvasElement: HTMLCanvasElement): THREE.WebGLRenderer;
8
+ export declare function makeRendererInstance<TCanvas extends NgtCanvasElement>(glOptions: NgtGLOptions, canvas: TCanvas): THREE.WebGLRenderer;
9
+ export declare function makeCameraInstance(isOrthographic: boolean, size: NgtSize): THREE.OrthographicCamera | THREE.PerspectiveCamera;
9
10
  export type NgtObjectMap = {
10
11
  nodes: {
11
12
  [name: string]: THREE.Object3D;
@@ -10,8 +10,21 @@ export type NgtSignalStore<State extends object> = {
10
10
  get<Key1 extends keyof State, Key2 extends keyof State[Key1]>(key1: Key1, key2: Key2): State[Key1][Key2];
11
11
  get<Key extends keyof State>(key: Key): State[Key];
12
12
  get(): State;
13
- set(state: Partial<State> | ((previous: State) => Partial<State>)): void;
14
- patch(state: Partial<State>): void;
13
+ /**
14
+ * New state takes precedence
15
+ */
16
+ update(state: Partial<State> | ((previous: State) => Partial<State>)): void;
17
+ /**
18
+ * Non-undefined old state takes precedence
19
+ */
20
+ patch(state: Partial<State> | ((previous: State) => Partial<State>)): void;
21
+ /**
22
+ * Equivalence to select()
23
+ */
15
24
  state: Signal<State>;
25
+ /**
26
+ * Equivalence to get()
27
+ */
28
+ get snapshot(): State;
16
29
  };
17
- export declare function signalStore<State extends object>(initialState?: Partial<State> | ((storeApi: Pick<NgtSignalStore<State>, 'get' | 'set' | 'patch'>) => Partial<State>), options?: CreateSignalOptions<State>): NgtSignalStore<State>;
30
+ export declare function signalStore<State extends object>(initialState?: Partial<State> | ((storeApi: Pick<NgtSignalStore<State>, 'get' | 'update' | 'patch' | 'select'>) => Partial<State>), options?: CreateSignalOptions<State>): NgtSignalStore<State>;