angular-three-cannon 4.0.0-next.11 → 4.0.0-next.111

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/body/index.d.ts CHANGED
@@ -1,2 +1,114 @@
1
- export * from './lib/body';
2
- export type * from './lib/types';
1
+ import * as _pmndrs_cannon_worker_api from '@pmndrs/cannon-worker-api';
2
+ import { BodyProps, PlaneProps, BoxProps, ParticleProps, CylinderProps, SphereProps, TrimeshProps, HeightfieldProps, ConvexPolyhedronProps, CompoundBodyProps, AtomicName, AtomicProps, VectorName, Triplet, Quad, BodyShapeType } from '@pmndrs/cannon-worker-api';
3
+ import { Injector, ElementRef, Signal } from '@angular/core';
4
+ import * as THREE from 'three';
5
+
6
+ interface NgtcAtomicApi<K extends AtomicName> {
7
+ set: (value: AtomicProps[K]) => void;
8
+ subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
9
+ }
10
+ interface NgtcQuaternionApi {
11
+ copy: ({ w, x, y, z }: THREE.Quaternion) => void;
12
+ set: (x: number, y: number, z: number, w: number) => void;
13
+ subscribe: (callback: (value: Quad) => void) => () => void;
14
+ }
15
+ interface NgtcVectorApi {
16
+ copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;
17
+ set: (x: number, y: number, z: number) => void;
18
+ subscribe: (callback: (value: Triplet) => void) => () => void;
19
+ }
20
+ type NgtcWorkerApi = {
21
+ [K in AtomicName]: NgtcAtomicApi<K>;
22
+ } & {
23
+ [K in VectorName]: NgtcVectorApi;
24
+ } & {
25
+ applyForce: (force: Triplet, worldPoint: Triplet) => void;
26
+ applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;
27
+ applyLocalForce: (force: Triplet, localPoint: Triplet) => void;
28
+ applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;
29
+ applyTorque: (torque: Triplet) => void;
30
+ quaternion: NgtcQuaternionApi;
31
+ rotation: NgtcVectorApi;
32
+ scaleOverride: (scale: Triplet) => void;
33
+ sleep: () => void;
34
+ wakeUp: () => void;
35
+ remove: () => void;
36
+ };
37
+ interface NgtcBodyPublicApi extends NgtcWorkerApi {
38
+ at: (index: number) => NgtcWorkerApi;
39
+ }
40
+ interface NgtcBodyPropsMap {
41
+ Plane: PlaneProps;
42
+ Box: BoxProps;
43
+ Particle: ParticleProps;
44
+ Cylinder: CylinderProps;
45
+ Sphere: SphereProps;
46
+ Trimesh: TrimeshProps;
47
+ Heightfield: HeightfieldProps;
48
+ ConvexPolyhedron: ConvexPolyhedronProps;
49
+ Compound: CompoundBodyProps;
50
+ }
51
+ type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
52
+ type NgtcArgFn<T extends BodyProps> = (args: NonNullable<T['args']>) => typeof args;
53
+
54
+ interface NgtcBodyOptions<TShape extends BodyShapeType> {
55
+ transformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;
56
+ injector?: Injector;
57
+ }
58
+ declare const box: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
59
+ declare const convexPolyhedron: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
60
+ declare const cylinder: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
61
+ declare const heightfield: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
62
+ declare const particle: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
63
+ declare const plane: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
64
+ declare const sphere: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
65
+ declare const trimesh: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
66
+ declare const compound: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
67
+ /**
68
+ * @deprecated Use `box` instead. Will be removed in v5.0.0
69
+ * @since v4.0.0
70
+ */
71
+ declare const injectBox: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
72
+ /**
73
+ * @deprecated Use `convexPolyhedron` instead. Will be removed in v5.0.0
74
+ * @since v4.0.0
75
+ */
76
+ declare const injectConvexPolyhedron: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
77
+ /**
78
+ * @deprecated Use `cylinder` instead. Will be removed in v5.0.0
79
+ * @since v4.0.0
80
+ */
81
+ declare const injectCylinder: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
82
+ /**
83
+ * @deprecated Use `heightfield` instead. Will be removed in v5.0.0
84
+ * @since v4.0.0
85
+ */
86
+ declare const injectHeightfield: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
87
+ /**
88
+ * @deprecated Use `particle` instead. Will be removed in v5.0.0
89
+ * @since v4.0.0
90
+ */
91
+ declare const injectParticle: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
92
+ /**
93
+ * @deprecated Use `plane` instead. Will be removed in v5.0.0
94
+ * @since v4.0.0
95
+ */
96
+ declare const injectPlane: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
97
+ /**
98
+ * @deprecated Use `sphere` instead. Will be removed in v5.0.0
99
+ * @since v4.0.0
100
+ */
101
+ declare const injectSphere: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
102
+ /**
103
+ * @deprecated Use `trimesh` instead. Will be removed in v5.0.0
104
+ * @since v4.0.0
105
+ */
106
+ declare const injectTrimesh: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
107
+ /**
108
+ * @deprecated Use `compound` instead. Will be removed in v5.0.0
109
+ * @since v4.0.0
110
+ */
111
+ declare const injectCompound: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<_pmndrs_cannon_worker_api.CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
112
+
113
+ export { box, compound, convexPolyhedron, cylinder, heightfield, injectBox, injectCompound, injectConvexPolyhedron, injectCylinder, injectHeightfield, injectParticle, injectPlane, injectSphere, injectTrimesh, particle, plane, sphere, trimesh };
114
+ export type { NgtcArgFn, NgtcAtomicApi, NgtcBodyOptions, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex, NgtcQuaternionApi, NgtcVectorApi, NgtcWorkerApi };
@@ -2,23 +2,23 @@
2
2
 
3
3
  This module provides functions to create physics constraints that link physics bodies in the Cannon.js physics world. These functions simplify the process of adding constraints between your 3D objects.
4
4
 
5
- ### Available `inject*` Functions
5
+ ### Available constraint functions
6
6
 
7
- | Function | Description | Arguments |
8
- | :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- |
9
- | `injectPointToPoint` | Creates a point-to-point constraint between two bodies. The constraint tries to keep the distance between the anchor points constant. | `objectA`, `objectB`, `getProps` |
10
- | `injectConeTwist` | Creates a cone-twist constraint between two bodies. The constraint attempts to keep the bodies aligned along a common axis, allowing swing and twist motion. | `objectA`, `objectB`, `getProps` |
11
- | `injectDistance` | Creates a distance constraint between two bodies. The constraint tries to keep the distance between the bodies' center of masses constant. | `objectA`, `objectB`, `getProps` |
12
- | `injectLock` | Creates a lock constraint between two bodies. The constraint completely locks the motion of one body relative to another. | `objectA`, `objectB`, `getProps` |
13
- | `injectHinge` | Creates a hinge constraint between two bodies. The constraint allows for rotation around a shared axis, like a door hinge. | `objectA`, `objectB`, `getProps` |
7
+ | Function | Description | Arguments |
8
+ | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- |
9
+ | `pointToPoint` | Creates a point-to-point constraint between two bodies. The constraint tries to keep the distance between the anchor points constant. | `objectA`, `objectB`, `getProps` |
10
+ | `coneTwist` | Creates a cone-twist constraint between two bodies. The constraint attempts to keep the bodies aligned along a common axis, allowing swing and twist motion. | `objectA`, `objectB`, `getProps` |
11
+ | `distance` | Creates a distance constraint between two bodies. The constraint tries to keep the distance between the bodies' center of masses constant. | `objectA`, `objectB`, `getProps` |
12
+ | `lock` | Creates a lock constraint between two bodies. The constraint completely locks the motion of one body relative to another. | `objectA`, `objectB`, `getProps` |
13
+ | `hinge` | Creates a hinge constraint between two bodies. The constraint allows for rotation around a shared axis, like a door hinge. | `objectA`, `objectB`, `getProps` |
14
14
 
15
15
  **All functions' `getProps` argument is a function that returns the properties of the constraint.**
16
16
 
17
- ### Simple Usage of `injectHinge()`
17
+ ### Simple Usage of `hinge()`
18
18
 
19
19
  ```typescript
20
20
  import { Component, viewChild, ElementRef } from '@angular/core';
21
- import { injectHinge } from 'angular-three-cannon/constraint';
21
+ import { hinge } from 'angular-three-cannon/constraint';
22
22
 
23
23
  @Component({
24
24
  template: `
@@ -36,7 +36,7 @@ export class HingedBoxes {
36
36
 
37
37
  constructor() {
38
38
  // Create a hinge constraint between mesh1 and mesh2. Only works within <ngtc-physics>
39
- injectHinge(this.mesh1, this.mesh2, () => ({
39
+ hinge(this.mesh1, this.mesh2, () => ({
40
40
  pivotA: [0, 0.5, 0], // hinge location on the first body
41
41
  pivotB: [0, -0.5, 0], // hinge location on the second body
42
42
  axisA: [0, 1, 0], // axis of rotation on the first body
@@ -1 +1,61 @@
1
- export * from './lib/constraint';
1
+ import { Injector, ElementRef, Signal } from '@angular/core';
2
+ import { ConstraintTypes, ConeTwistConstraintOpts, PointToPointConstraintOpts, DistanceConstraintOpts, LockConstraintOpts, HingeConstraintOpts } from '@pmndrs/cannon-worker-api';
3
+ import * as THREE from 'three';
4
+
5
+ interface NgtcConstraintApi {
6
+ disable: () => void;
7
+ enable: () => void;
8
+ remove: () => void;
9
+ }
10
+ interface NgtcHingeConstraintApi extends NgtcConstraintApi {
11
+ disableMotor: () => void;
12
+ enableMotor: () => void;
13
+ setMotorMaxForce: (value: number) => void;
14
+ setMotorSpeed: (value: number) => void;
15
+ }
16
+ type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes ? NgtcConstraintApi : NgtcHingeConstraintApi;
17
+ type NgtcConstraintOptionsMap = {
18
+ ConeTwist: ConeTwistConstraintOpts;
19
+ PointToPoint: PointToPointConstraintOpts;
20
+ Distance: DistanceConstraintOpts;
21
+ Lock: LockConstraintOpts;
22
+ Hinge: HingeConstraintOpts;
23
+ };
24
+ type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes> = {
25
+ injector?: Injector;
26
+ disableOnStart?: boolean;
27
+ options?: NgtcConstraintOptionsMap[TConstraintType];
28
+ };
29
+ declare const pointToPoint: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
30
+ declare const coneTwist: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
31
+ declare const distance: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
32
+ declare const lock: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
33
+ declare const hinge: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
34
+ /**
35
+ * @deprecated Use `pointToPoint` instead. Will be removed in v5.0.0
36
+ * @since v4.0.0
37
+ */
38
+ declare const injectPointToPoint: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
39
+ /**
40
+ * @deprecated Use `coneTwist` instead. Will be removed in v5.0.0
41
+ * @since v4.0.0
42
+ */
43
+ declare const injectConeTwist: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
44
+ /**
45
+ * @deprecated Use `distance` instead. Will be removed in v5.0.0
46
+ * @since v4.0.0
47
+ */
48
+ declare const injectDistance: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
49
+ /**
50
+ * @deprecated Use `lock` instead. Will be removed in v5.0.0
51
+ * @since v4.0.0
52
+ */
53
+ declare const injectLock: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
54
+ /**
55
+ * @deprecated Use `hinge` instead. Will be removed in v5.0.0
56
+ * @since v4.0.0
57
+ */
58
+ declare const injectHinge: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
59
+
60
+ export { coneTwist, distance, hinge, injectConeTwist, injectDistance, injectHinge, injectLock, injectPointToPoint, lock, pointToPoint };
61
+ export type { NgtcConstraintApi, NgtcConstraintORHingeApi, NgtcConstraintOptions, NgtcConstraintOptionsMap, NgtcHingeConstraintApi };
package/debug/README.md CHANGED
@@ -30,11 +30,10 @@ The `injectNgtcDebugApi` function is used to inject the `NgtcDebugApi` into your
30
30
  The `NgtcDebug` directive is applied to the `ngtc-physics` component to enable physics debugging. It has the following inputs:
31
31
 
32
32
  - `debug`: An object containing the following properties:
33
-
34
- - `enabled`: (boolean) Whether the debug visualization is enabled (default: true).
35
- - `color`: (string) The color of the debug visualization (default: 'black').
36
- - `impl`: (typeof CannonDebugger) The implementation of the CannonDebugger to use (default: CannonDebugger).
37
- - `scale`: (number) The scale of the debug visualization (default: 1).
33
+ - `enabled`: (boolean) Whether the debug visualization is enabled (default: true).
34
+ - `color`: (string) The color of the debug visualization (default: 'black').
35
+ - `impl`: (typeof CannonDebugger) The implementation of the CannonDebugger to use (default: CannonDebugger).
36
+ - `scale`: (number) The scale of the debug visualization (default: 1).
38
37
 
39
38
  ## Usage
40
39
 
package/debug/index.d.ts CHANGED
@@ -1 +1,28 @@
1
- export * from './lib/debug';
1
+ import * as i0 from '@angular/core';
2
+ import { BodyProps, BodyShapeType } from '@pmndrs/cannon-worker-api';
3
+ import CannonDebugger from 'cannon-es-debugger';
4
+
5
+ interface NgtcDebugInputs {
6
+ enabled: boolean;
7
+ color: string;
8
+ impl: typeof CannonDebugger;
9
+ scale: number;
10
+ }
11
+ declare class NgtcDebug {
12
+ debug: i0.InputSignalWithTransform<NgtcDebugInputs, "" | Partial<NgtcDebugInputs>>;
13
+ private physics;
14
+ private store;
15
+ private defaultScene;
16
+ private debuggerScene;
17
+ private bodies;
18
+ private bodyMap;
19
+ private cannonDebugger;
20
+ constructor();
21
+ add(uuid: string, props: BodyProps, type: BodyShapeType): void;
22
+ remove(uuid: string): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgtcDebug, "ngtc-physics[debug]", never, { "debug": { "alias": "debug"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
25
+ }
26
+
27
+ export { NgtcDebug };
28
+ export type { NgtcDebugInputs };
@@ -197,11 +197,11 @@ const defaultTransformArgs = {
197
197
  Compound: (args) => args,
198
198
  };
199
199
 
200
- function createInjectBody(type) {
201
- return (getPropFn, ref, options) => injectBody(type, getPropFn, ref, options);
200
+ function createBody(type) {
201
+ return (getPropFn, ref, options) => body(type, getPropFn, ref, options);
202
202
  }
203
- function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
204
- return assertInjector(injectBody, injector, () => {
203
+ function body(type, getPropFn, ref, { transformArgs, injector } = {}) {
204
+ return assertInjector(body, injector, () => {
205
205
  const physics = inject(NgtcPhysics, { optional: true });
206
206
  if (!physics) {
207
207
  throw new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);
@@ -210,7 +210,7 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
210
210
  const transform = transformArgs ?? defaultTransformArgs[type];
211
211
  const isRefSignal = isSignal(ref);
212
212
  const bodyRef = (isRefSignal ? ref : signal(ref));
213
- const body = computed(() => resolveRef(bodyRef()));
213
+ const body = computed(() => resolveRef(bodyRef()), ...(ngDevMode ? [{ debugName: "body" }] : []));
214
214
  const api = computed(() => {
215
215
  const _body = body();
216
216
  if (!_body)
@@ -220,7 +220,7 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
220
220
  if (!_worker)
221
221
  return null;
222
222
  return makeBodyApi(_body, _worker, rest);
223
- });
223
+ }, ...(ngDevMode ? [{ debugName: "api" }] : []));
224
224
  effect((onCleanup) => {
225
225
  const currentWorker = physics.worker();
226
226
  if (!currentWorker)
@@ -288,19 +288,64 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
288
288
  return api;
289
289
  });
290
290
  }
291
- const injectBox = createInjectBody('Box');
292
- const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');
293
- const injectCylinder = createInjectBody('Cylinder');
294
- const injectHeightfield = createInjectBody('Heightfield');
295
- const injectParticle = createInjectBody('Particle');
296
- const injectPlane = createInjectBody('Plane');
297
- const injectSphere = createInjectBody('Sphere');
298
- const injectTrimesh = createInjectBody('Trimesh');
299
- const injectCompound = createInjectBody('Compound');
291
+ const box = createBody('Box');
292
+ const convexPolyhedron = createBody('ConvexPolyhedron');
293
+ const cylinder = createBody('Cylinder');
294
+ const heightfield = createBody('Heightfield');
295
+ const particle = createBody('Particle');
296
+ const plane = createBody('Plane');
297
+ const sphere = createBody('Sphere');
298
+ const trimesh = createBody('Trimesh');
299
+ const compound = createBody('Compound');
300
+ /**
301
+ * @deprecated Use `box` instead. Will be removed in v5.0.0
302
+ * @since v4.0.0
303
+ */
304
+ const injectBox = box;
305
+ /**
306
+ * @deprecated Use `convexPolyhedron` instead. Will be removed in v5.0.0
307
+ * @since v4.0.0
308
+ */
309
+ const injectConvexPolyhedron = convexPolyhedron;
310
+ /**
311
+ * @deprecated Use `cylinder` instead. Will be removed in v5.0.0
312
+ * @since v4.0.0
313
+ */
314
+ const injectCylinder = cylinder;
315
+ /**
316
+ * @deprecated Use `heightfield` instead. Will be removed in v5.0.0
317
+ * @since v4.0.0
318
+ */
319
+ const injectHeightfield = heightfield;
320
+ /**
321
+ * @deprecated Use `particle` instead. Will be removed in v5.0.0
322
+ * @since v4.0.0
323
+ */
324
+ const injectParticle = particle;
325
+ /**
326
+ * @deprecated Use `plane` instead. Will be removed in v5.0.0
327
+ * @since v4.0.0
328
+ */
329
+ const injectPlane = plane;
330
+ /**
331
+ * @deprecated Use `sphere` instead. Will be removed in v5.0.0
332
+ * @since v4.0.0
333
+ */
334
+ const injectSphere = sphere;
335
+ /**
336
+ * @deprecated Use `trimesh` instead. Will be removed in v5.0.0
337
+ * @since v4.0.0
338
+ */
339
+ const injectTrimesh = trimesh;
340
+ /**
341
+ * @deprecated Use `compound` instead. Will be removed in v5.0.0
342
+ * @since v4.0.0
343
+ */
344
+ const injectCompound = compound;
300
345
 
301
346
  /**
302
347
  * Generated bundle index. Do not edit.
303
348
  */
304
349
 
305
- export { injectBox, injectCompound, injectConvexPolyhedron, injectCylinder, injectHeightfield, injectParticle, injectPlane, injectSphere, injectTrimesh };
350
+ export { box, compound, convexPolyhedron, cylinder, heightfield, injectBox, injectCompound, injectConvexPolyhedron, injectCylinder, injectHeightfield, injectParticle, injectPlane, injectSphere, injectTrimesh, particle, plane, sphere, trimesh };
306
351
  //# sourceMappingURL=angular-three-cannon-body.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-body.mjs","sources":["../../../../libs/cannon/body/src/lib/utils.ts","../../../../libs/cannon/body/src/lib/body.ts","../../../../libs/cannon/body/src/angular-three-cannon-body.ts"],"sourcesContent":["import {\n\tAtomicName,\n\tBodyProps,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tCylinderArgs,\n\tHeightfieldArgs,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshArgs,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { is } from 'angular-three';\nimport { NgtcCannonEvents, NgtcPhysics } from 'angular-three-cannon';\nimport * as THREE from 'three';\nimport { NgtcWorkerApi } from './types';\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nfunction getUUID(body: THREE.Object3D, index?: number) {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof body === 'function') return null;\n\treturn body && body && `${body.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nfunction quaternionToRotation(callback: (v: Triplet) => void) {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n}\n\nlet incrementingId = 0;\nexport function createSubscribe<T extends SubscriptionName>(\n\tbody: THREE.Object3D,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(body, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n\treturn is.three<THREE.Vector3>(v, 'isVector3') ? [v.x, v.y, v.z] : v;\n}\n\nexport function prepare(\n\tobject: THREE.Object3D,\n\t{ position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps,\n) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nexport function setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\n\nexport function makeBodyApi(\n\tbody: THREE.Object3D,\n\tworker: CannonWorkerAPI,\n\t{ subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>,\n) {\n\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\treturn {\n\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: value, uuid } as never);\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeQuaternion = (index?: number) => {\n\t\tconst type = 'quaternion';\n\t\treturn {\n\t\t\tcopy: ({ w, x, y, z }: THREE.Quaternion) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRotation = (index?: number) => {\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\tconst id = incrementingId++;\n\t\t\t\tconst target = 'bodies';\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\t\t\treturn () => {\n\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\tworker.unsubscribe({ props: id });\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst makeVec = (type: VectorName, index?: number) => {\n\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRemove = (index?: number) => {\n\t\tconst uuid = getUUID(body, index);\n\t\treturn () => {\n\t\t\tif (uuid) worker.removeBodies({ uuid: [uuid] });\n\t\t};\n\t};\n\n\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\treturn {\n\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyForce({ props: [force, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyTorque({ props: [torque], uuid });\n\t\t\t},\n\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\tmass: makeAtomic('mass', index),\n\t\t\tmaterial: makeAtomic('material', index),\n\t\t\tposition: makeVec('position', index),\n\t\t\tquaternion: makeQuaternion(index),\n\t\t\trotation: makeRotation(index),\n\t\t\tscaleOverride(scale) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tif (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n\t\t\t},\n\t\t\tsleep() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.sleep({ uuid });\n\t\t\t},\n\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\tuserData: makeAtomic('userData', index),\n\t\t\tvelocity: makeVec('velocity', index),\n\t\t\tremove: makeRemove(index),\n\t\t\twakeUp() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.wakeUp({ uuid });\n\t\t\t},\n\t\t};\n\t}\n\tconst cache: Record<number, NgtcWorkerApi> = {};\n\treturn { ...makeApi(), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n}\n\nexport const defaultTransformArgs = {\n\tPlane: (_: PlaneProps['args']) => [],\n\tBox: (args: BoxProps['args'] = [1, 1, 1]) => args,\n\tTrimesh: (args: TrimeshArgs) => args,\n\tCylinder: (_: CylinderArgs = []) => [],\n\tHeightfield: (args: HeightfieldArgs) => args,\n\tConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]: ConvexPolyhedronArgs = []) => [\n\t\tvertices && vertices.map(makeTriplet),\n\t\tfaces,\n\t\tnormals && normals.map(makeTriplet),\n\t\taxes && axes.map(makeTriplet),\n\t\tboundingSphereRadius,\n\t],\n\tParticle: (_: ParticleProps['args']) => [],\n\tSphere: (args: SphereArgs = [1]) => {\n\t\tif (!Array.isArray(args)) throw new Error('Sphere body args must be an array');\n\t\treturn [args[0]];\n\t},\n\tCompound: (args: CompoundBodyProps['args']) => args,\n};\n","import {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tWritableSignal,\n\tcomputed,\n\teffect,\n\tinject,\n\tisSignal,\n\tsignal,\n} from '@angular/core';\nimport { BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { is, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { NgtcDebug } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\n\nexport interface NgtcBodyOptions<TShape extends BodyShapeType> {\n\ttransformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;\n\tinjector?: Injector;\n}\n\nfunction createInjectBody<TShape extends BodyShapeType>(type: TShape) {\n\treturn <TObject extends THREE.Object3D>(\n\t\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\t\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t\toptions?: NgtcBodyOptions<TShape>,\n\t) => injectBody<TShape, TObject>(type, getPropFn, ref, options);\n}\n\nfunction injectBody<TShape extends BodyShapeType, TObject extends THREE.Object3D>(\n\ttype: TShape,\n\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t{ transformArgs, injector }: NgtcBodyOptions<TShape> = {},\n): Signal<NgtcBodyPublicApi | null> {\n\treturn assertInjector(injectBody, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst debug = inject(NgtcDebug, { optional: true });\n\n\t\tconst transform = transformArgs ?? defaultTransformArgs[type];\n\t\tconst isRefSignal = isSignal(ref);\n\t\tconst bodyRef = (isRefSignal ? ref : signal(ref)) as WritableSignal<TObject | undefined>;\n\t\tconst body = computed(() => resolveRef(bodyRef()));\n\n\t\tconst api = computed(() => {\n\t\t\tconst _body = body();\n\t\t\tif (!_body) return null;\n\n\t\t\tconst { worker, ...rest } = physics;\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\treturn makeBodyApi(_body, _worker, rest);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = physics.worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst object = body();\n\n\t\t\tif (!isRefSignal && !object) {\n\t\t\t\tbodyRef.set(resolveRef(ref));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!object) return;\n\n\t\t\tconst [uuid, props] = (() => {\n\t\t\t\tlet uuids: string[] = [];\n\t\t\t\tlet temp: THREE.Object3D;\n\t\t\t\tif (is.three<THREE.InstancedMesh>(object, 'isInstancedMesh')) {\n\t\t\t\t\tobject.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t\t\t\tuuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n\t\t\t\t\ttemp = new THREE.Object3D();\n\t\t\t\t} else {\n\t\t\t\t\tuuids = [object.uuid];\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tuuids,\n\t\t\t\t\tuuids.map((id, index) => {\n\t\t\t\t\t\tconst props = getPropFn(index);\n\t\t\t\t\t\tif (temp) {\n\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\t(object as unknown as THREE.InstancedMesh).setMatrixAt(index, temp.matrix);\n\t\t\t\t\t\t\t(object as unknown as THREE.InstancedMesh).instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tphysics.refs[id] = object;\n\t\t\t\t\t\tdebug?.add(id, props, type);\n\t\t\t\t\t\tsetupCollision(physics.events, props, id);\n\t\t\t\t\t\t// @ts-expect-error - if args is undefined, there's default\n\t\t\t\t\t\treturn { ...props, args: transform(props.args) };\n\t\t\t\t\t}),\n\t\t\t\t];\n\t\t\t})();\n\n\t\t\t// Register on mount, unregister on unmount\n\t\t\tcurrentWorker.addBodies({\n\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tonCollide: Boolean(onCollide),\n\t\t\t\t\t\tonCollideBegin: Boolean(onCollideBegin),\n\t\t\t\t\t\tonCollideEnd: Boolean(onCollideEnd),\n\t\t\t\t\t\t...serializableProps,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\tdelete physics.refs[id];\n\t\t\t\t\tdebug?.remove(id);\n\t\t\t\t\tdelete physics.events[id];\n\t\t\t\t});\n\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t});\n\t\t});\n\n\t\treturn api;\n\t});\n}\n\nexport const injectBox = createInjectBody('Box');\nexport const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');\nexport const injectCylinder = createInjectBody('Cylinder');\nexport const injectHeightfield = createInjectBody('Heightfield');\nexport const injectParticle = createInjectBody('Particle');\nexport const injectPlane = createInjectBody('Plane');\nexport const injectSphere = createInjectBody('Sphere');\nexport const injectTrimesh = createInjectBody('Trimesh');\nexport const injectCompound = createInjectBody('Compound');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-body.mjs","sources":["../tmp-esm2022/body/lib/utils.js","../tmp-esm2022/body/lib/body.js","../tmp-esm2022/body/angular-three-cannon-body.js"],"sourcesContent":["import { is } from 'angular-three';\nimport * as THREE from 'three';\nfunction capitalize(str) {\n return (str.charAt(0).toUpperCase() + str.slice(1));\n}\nfunction getUUID(body, index) {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof body === 'function')\n return null;\n return body && body && `${body.uuid}${suffix}`;\n}\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\nfunction quaternionToRotation(callback) {\n return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());\n}\nlet incrementingId = 0;\nexport function createSubscribe(body, worker, subscriptions, type, index, target = 'bodies') {\n return (callback) => {\n const id = incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = getUUID(body, index);\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n };\n}\nfunction makeTriplet(v) {\n return is.three(v, 'isVector3') ? [v.x, v.y, v.z] : v;\n}\nexport function prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n}\nexport function setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {\n events[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\nexport function makeBodyApi(body, worker, { subscriptions, scaleOverrides }) {\n const makeAtomic = (type, index) => {\n const op = `set${capitalize(type)}`;\n return {\n set: (value) => {\n const uuid = getUUID(body, index);\n uuid && worker[op]({ props: value, uuid });\n },\n subscribe: createSubscribe(body, worker, subscriptions, type, index),\n };\n };\n const makeQuaternion = (index) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }) => {\n const uuid = getUUID(body, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x, y, z, w) => {\n const uuid = getUUID(body, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n subscribe: createSubscribe(body, worker, subscriptions, type, index),\n };\n };\n const makeRotation = (index) => {\n return {\n copy: ({ x, y, z }) => {\n const uuid = getUUID(body, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n set: (x, y, z) => {\n const uuid = getUUID(body, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback) => {\n const id = incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = getUUID(body, index);\n subscriptions[id] = { [type]: quaternionToRotation(callback) };\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n },\n };\n };\n const makeVec = (type, index) => {\n const op = `set${capitalize(type)}`;\n return {\n copy: ({ x, y, z }) => {\n const uuid = getUUID(body, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n set: (x, y, z) => {\n const uuid = getUUID(body, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n subscribe: createSubscribe(body, worker, subscriptions, type, index),\n };\n };\n const makeRemove = (index) => {\n const uuid = getUUID(body, index);\n return () => {\n if (uuid)\n worker.removeBodies({ uuid: [uuid] });\n };\n };\n function makeApi(index) {\n return {\n allowSleep: makeAtomic('allowSleep', index),\n angularDamping: makeAtomic('angularDamping', index),\n angularFactor: makeVec('angularFactor', index),\n angularVelocity: makeVec('angularVelocity', index),\n applyForce(force, worldPoint) {\n const uuid = getUUID(body, index);\n uuid && worker.applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse, worldPoint) {\n const uuid = getUUID(body, index);\n uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force, localPoint) {\n const uuid = getUUID(body, index);\n uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse, localPoint) {\n const uuid = getUUID(body, index);\n uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque) {\n const uuid = getUUID(body, index);\n uuid && worker.applyTorque({ props: [torque], uuid });\n },\n collisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n collisionFilterMask: makeAtomic('collisionFilterMask', index),\n collisionResponse: makeAtomic('collisionResponse', index),\n fixedRotation: makeAtomic('fixedRotation', index),\n isTrigger: makeAtomic('isTrigger', index),\n linearDamping: makeAtomic('linearDamping', index),\n linearFactor: makeVec('linearFactor', index),\n mass: makeAtomic('mass', index),\n material: makeAtomic('material', index),\n position: makeVec('position', index),\n quaternion: makeQuaternion(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const uuid = getUUID(body, index);\n if (uuid)\n scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const uuid = getUUID(body, index);\n uuid && worker.sleep({ uuid });\n },\n sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n sleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n userData: makeAtomic('userData', index),\n velocity: makeVec('velocity', index),\n remove: makeRemove(index),\n wakeUp() {\n const uuid = getUUID(body, index);\n uuid && worker.wakeUp({ uuid });\n },\n };\n }\n const cache = {};\n return { ...makeApi(), at: (index) => cache[index] || (cache[index] = makeApi(index)) };\n}\nexport const defaultTransformArgs = {\n Plane: (_) => [],\n Box: (args = [1, 1, 1]) => args,\n Trimesh: (args) => args,\n Cylinder: (_ = []) => [],\n Heightfield: (args) => args,\n ConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius] = []) => [\n vertices && vertices.map(makeTriplet),\n faces,\n normals && normals.map(makeTriplet),\n axes && axes.map(makeTriplet),\n boundingSphereRadius,\n ],\n Particle: (_) => [],\n Sphere: (args = [1]) => {\n if (!Array.isArray(args))\n throw new Error('Sphere body args must be an array');\n return [args[0]];\n },\n Compound: (args) => args,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHL0IsU0FBUyxVQUFVLENBQW1CLEdBQU07SUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBa0IsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBb0IsRUFBRSxLQUFjO0lBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN0RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUVqQyxTQUFTLG9CQUFvQixDQUFDLFFBQThCO0lBQzNELE9BQU8sQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBYSxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELElBQUksY0FB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ZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEF0b21pY05hbWUsXG5cdEJvZHlQcm9wcyxcblx0Qm94UHJvcHMsXG5cdENhbm5vbldvcmtlckFQSSxcblx0Q29tcG91bmRCb2R5UHJvcHMsXG5cdENvbnZleFBvbHloZWRyb25BcmdzLFxuXHRDeWxpbmRlckFyZ3MsXG5cdEhlaWdodGZpZWxkQXJncyxcblx0UGFydGljbGVQcm9wcyxcblx0UGxhbmVQcm9wcyxcblx0UHJvcFZhbHVlLFxuXHRRdWFkLFxuXHRTZXRPcE5hbWUsXG5cdFNwaGVyZUFyZ3MsXG5cdFN1YnNjcmlwdGlvbk5hbWUsXG5cdFN1YnNjcmlwdGlvblRhcmdldCxcblx0U3Vic2NyaXB0aW9ucyxcblx0VHJpbWVzaEFyZ3MsXG5cdFRyaXBsZXQsXG5cdFZlY3Rvck5hbWUsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgaXMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndGNDYW5ub25FdmVudHMsIE5ndGNQaHlzaWNzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y1dvcmtlckFwaSB9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuXHRyZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbn1cblxuZnVuY3Rpb24gZ2V0VVVJRChib2R5OiBUSFJFRS5PYmplY3QzRCwgaW5kZXg/OiBudW1iZXIpIHtcblx0Y29uc3Qgc3VmZml4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/ICcnIDogYC8ke2luZGV4fWA7XG5cdGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG51bGw7XG5cdHJldHVybiBib2R5ICYmIGJvZHkgJiYgYCR7Ym9keS51dWlkfSR7c3VmZml4fWA7XG59XG5cbmNvbnN0IGUgPSBuZXcgVEhSRUUuRXVsZXIoKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuXG5mdW5jdGlvbiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpIHtcblx0cmV0dXJuICh2OiBRdWFkKSA9PiBjYWxsYmFjayhlLnNldEZyb21RdWF0ZXJuaW9uKHEuZnJvbUFycmF5KHYpKS50b0FycmF5KCkgYXMgVHJpcGxldCk7XG59XG5cbmxldCBpbmNyZW1lbnRpbmdJZCA9IDA7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlPFQgZXh0ZW5kcyBTdWJzY3JpcHRpb25OYW1lPihcblx0Ym9keTogVEhSRUUuT2JqZWN0M0QsXG5cdHdvcmtlcjogQ2Fubm9uV29ya2VyQVBJLFxuXHRzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zLFxuXHR0eXBlOiBULFxuXHRpbmRleD86IG51bWJlcixcblx0dGFyZ2V0OiBTdWJzY3JpcHRpb25UYXJnZXQgPSAnYm9kaWVzJyxcbikge1xuXHRyZXR1cm4gKGNhbGxiYWNrOiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4gdm9pZCkgPT4ge1xuXHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBjYWxsYmFjayB9O1xuXHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHR1dWlkICYmIHdvcmtlci5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcblx0XHRcdHdvcmtlci51bnN1YnNjcmliZSh7IHByb3BzOiBpZCB9KTtcblx0XHR9O1xuXHR9O1xufVxuXG5mdW5jdGlvbiBtYWtlVHJpcGxldCh2OiBUSFJFRS5WZWN0b3IzIHwgVHJpcGxldCk6IFRyaXBsZXQge1xuXHRyZXR1cm4gaXMudGhyZWU8VEhSRUUuVmVjdG9yMz4odiwgJ2lzVmVjdG9yMycpID8gW3YueCwgdi55LCB2LnpdIDogdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmUoXG5cdG9iamVjdDogVEhSRUUuT2JqZWN0M0QsXG5cdHsgcG9zaXRpb24gPSBbMCwgMCwgMF0sIHJvdGF0aW9uID0gWzAsIDAsIDBdLCB1c2VyRGF0YSA9IHt9IH06IEJvZHlQcm9wcyxcbikge1xuXHRvYmplY3QudXNlckRhdGEgPSB1c2VyRGF0YTtcblx0b2JqZWN0LnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG5cdG9iamVjdC5yb3RhdGlvbi5zZXQoLi4ucm90YXRpb24pO1xuXHRvYmplY3QudXBkYXRlTWF0cml4KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENvbGxpc2lvbihcblx0ZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzLFxuXHR7IG9uQ29sbGlkZSwgb25Db2xsaWRlQmVnaW4sIG9uQ29sbGlkZUVuZCB9OiBQYXJ0aWFsPEJvZHlQcm9wcz4sXG5cdHV1aWQ6IHN0cmluZyxcbikge1xuXHRldmVudHNbdXVpZF0gPSB7IGNvbGxpZGU6IG9uQ29sbGlkZSwgY29sbGlkZUJlZ2luOiBvbkNvbGxpZGVCZWdpbiwgY29sbGlkZUVuZDogb25Db2xsaWRlRW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQm9keUFwaShcblx0Ym9keTogVEhSRUUuT2JqZWN0M0QsXG5cdHdvcmtlcjogQ2Fubm9uV29ya2VyQVBJLFxuXHR7IHN1YnNjcmlwdGlvbnMsIHNjYWxlT3ZlcnJpZGVzIH06IFBpY2s8Tmd0Y1BoeXNpY3MsICdzdWJzY3JpcHRpb25zJyB8ICdzY2FsZU92ZXJyaWRlcyc+LFxuKSB7XG5cdGNvbnN0IG1ha2VBdG9taWMgPSA8VCBleHRlbmRzIEF0b21pY05hbWU+KHR5cGU6IFQsIGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3Qgb3A6IFNldE9wTmFtZTxUPiA9IGBzZXQke2NhcGl0YWxpemUodHlwZSl9YDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRzZXQ6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXJbb3BdKHsgcHJvcHM6IHZhbHVlLCB1dWlkIH0gYXMgbmV2ZXIpO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogY3JlYXRlU3Vic2NyaWJlKGJvZHksIHdvcmtlciwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgbWFrZVF1YXRlcm5pb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRjb25zdCB0eXBlID0gJ3F1YXRlcm5pb24nO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB3LCB4LCB5LCB6IH06IFRIUkVFLlF1YXRlcm5pb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5LCB3b3JrZXIsIHN1YnNjcmlwdGlvbnMsIHR5cGUsIGluZGV4KSxcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IG1ha2VSb3RhdGlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLnNldFJvdGF0aW9uKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuc2V0Um90YXRpb24oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaWQgPSBpbmNyZW1lbnRpbmdJZCsrO1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSAnYm9kaWVzJztcblx0XHRcdFx0Y29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjaykgfTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuc3Vic2NyaWJlKHsgcHJvcHM6IHsgaWQsIHRhcmdldCwgdHlwZSB9LCB1dWlkIH0pO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcblx0XHRcdFx0XHR3b3JrZXIudW5zdWJzY3JpYmUoeyBwcm9wczogaWQgfSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IG1ha2VWZWMgPSAodHlwZTogVmVjdG9yTmFtZSwgaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBvcDogU2V0T3BOYW1lPFZlY3Rvck5hbWU+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c3Vic2NyaWJlOiBjcmVhdGVTdWJzY3JpYmUoYm9keSwgd29ya2VyLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0fTtcblx0fTtcblxuXHRjb25zdCBtYWtlUmVtb3ZlID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRpZiAodXVpZCkgd29ya2VyLnJlbW92ZUJvZGllcyh7IHV1aWQ6IFt1dWlkXSB9KTtcblx0XHR9O1xuXHR9O1xuXG5cdGZ1bmN0aW9uIG1ha2VBcGkoaW5kZXg/OiBudW1iZXIpOiBOZ3RjV29ya2VyQXBpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxsb3dTbGVlcDogbWFrZUF0b21pYygnYWxsb3dTbGVlcCcsIGluZGV4KSxcblx0XHRcdGFuZ3VsYXJEYW1waW5nOiBtYWtlQXRvbWljKCdhbmd1bGFyRGFtcGluZycsIGluZGV4KSxcblx0XHRcdGFuZ3VsYXJGYWN0b3I6IG1ha2VWZWMoJ2FuZ3VsYXJGYWN0b3InLCBpbmRleCksXG5cdFx0XHRhbmd1bGFyVmVsb2NpdHk6IG1ha2VWZWMoJ2FuZ3VsYXJWZWxvY2l0eScsIGluZGV4KSxcblx0XHRcdGFwcGx5Rm9yY2UoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5hcHBseUZvcmNlKHsgcHJvcHM6IFtmb3JjZSwgd29ybGRQb2ludF0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0YXBwbHlJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5hcHBseUltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5TG9jYWxGb3JjZShmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5LCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgd29ya2VyLmFwcGx5TG9jYWxGb3JjZSh7IHByb3BzOiBbZm9yY2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5TG9jYWxJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci5hcHBseUxvY2FsSW1wdWxzZSh7IHByb3BzOiBbaW1wdWxzZSwgbG9jYWxQb2ludF0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0YXBwbHlUb3JxdWUodG9ycXVlOiBUcmlwbGV0KSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuYXBwbHlUb3JxdWUoeyBwcm9wczogW3RvcnF1ZV0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29sbGlzaW9uRmlsdGVyR3JvdXA6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlckdyb3VwJywgaW5kZXgpLFxuXHRcdFx0Y29sbGlzaW9uRmlsdGVyTWFzazogbWFrZUF0b21pYygnY29sbGlzaW9uRmlsdGVyTWFzaycsIGluZGV4KSxcblx0XHRcdGNvbGxpc2lvblJlc3BvbnNlOiBtYWtlQXRvbWljKCdjb2xsaXNpb25SZXNwb25zZScsIGluZGV4KSxcblx0XHRcdGZpeGVkUm90YXRpb246IG1ha2VBdG9taWMoJ2ZpeGVkUm90YXRpb24nLCBpbmRleCksXG5cdFx0XHRpc1RyaWdnZXI6IG1ha2VBdG9taWMoJ2lzVHJpZ2dlcicsIGluZGV4KSxcblx0XHRcdGxpbmVhckRhbXBpbmc6IG1ha2VBdG9taWMoJ2xpbmVhckRhbXBpbmcnLCBpbmRleCksXG5cdFx0XHRsaW5lYXJGYWN0b3I6IG1ha2VWZWMoJ2xpbmVhckZhY3RvcicsIGluZGV4KSxcblx0XHRcdG1hc3M6IG1ha2VBdG9taWMoJ21hc3MnLCBpbmRleCksXG5cdFx0XHRtYXRlcmlhbDogbWFrZUF0b21pYygnbWF0ZXJpYWwnLCBpbmRleCksXG5cdFx0XHRwb3NpdGlvbjogbWFrZVZlYygncG9zaXRpb24nLCBpbmRleCksXG5cdFx0XHRxdWF0ZXJuaW9uOiBtYWtlUXVhdGVybmlvbihpbmRleCksXG5cdFx0XHRyb3RhdGlvbjogbWFrZVJvdGF0aW9uKGluZGV4KSxcblx0XHRcdHNjYWxlT3ZlcnJpZGUoc2NhbGUpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHRpZiAodXVpZCkgc2NhbGVPdmVycmlkZXNbdXVpZF0gPSBuZXcgVEhSRUUuVmVjdG9yMyguLi5zY2FsZSk7XG5cdFx0XHR9LFxuXHRcdFx0c2xlZXAoKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHksIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiB3b3JrZXIuc2xlZXAoeyB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHNsZWVwU3BlZWRMaW1pdDogbWFrZUF0b21pYygnc2xlZXBTcGVlZExpbWl0JywgaW5kZXgpLFxuXHRcdFx0c2xlZXBUaW1lTGltaXQ6IG1ha2VBdG9taWMoJ3NsZWVwVGltZUxpbWl0JywgaW5kZXgpLFxuXHRcdFx0dXNlckRhdGE6IG1ha2VBdG9taWMoJ3VzZXJEYXRhJywgaW5kZXgpLFxuXHRcdFx0dmVsb2NpdHk6IG1ha2VWZWMoJ3ZlbG9jaXR5JywgaW5kZXgpLFxuXHRcdFx0cmVtb3ZlOiBtYWtlUmVtb3ZlKGluZGV4KSxcblx0XHRcdHdha2VVcCgpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keSwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlci53YWtlVXAoeyB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGNhY2hlOiBSZWNvcmQ8bnVtYmVyLCBOZ3RjV29ya2VyQXBpPiA9IHt9O1xuXHRyZXR1cm4geyAuLi5tYWtlQXBpKCksIGF0OiAoaW5kZXg6IG51bWJlcikgPT4gY2FjaGVbaW5kZXhdIHx8IChjYWNoZVtpbmRleF0gPSBtYWtlQXBpKGluZGV4KSkgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2Zvcm1BcmdzID0ge1xuXHRQbGFuZTogKF86IFBsYW5lUHJvcHNbJ2FyZ3MnXSkgPT4gW10sXG5cdEJveDogKGFyZ3M6IEJveFByb3BzWydhcmdzJ10gPSBbMSwgMSwgMV0pID0+IGFyZ3MsXG5cdFRyaW1lc2g6IChhcmdzOiBUcmltZXNoQXJncykgPT4gYXJncyxcblx0Q3lsaW5kZXI6IChfOiBDeWxpbmRlckFyZ3MgPSBbXSkgPT4gW10sXG5cdEhlaWdodGZpZWxkOiAoYXJnczogSGVpZ2h0ZmllbGRBcmdzKSA9PiBhcmdzLFxuXHRDb252ZXhQb2x5aGVkcm9uOiAoW3ZlcnRpY2VzLCBmYWNlcywgbm9ybWFscywgYXhlcywgYm91bmRpbmdTcGhlcmVSYWRpdXNdOiBDb252ZXhQb2x5aGVkcm9uQXJncyA9IFtdKSA9PiBbXG5cdFx0dmVydGljZXMgJiYgdmVydGljZXMubWFwKG1ha2VUcmlwbGV0KSxcblx0XHRmYWNlcyxcblx0XHRub3JtYWxzICYmIG5vcm1hbHMubWFwKG1ha2VUcmlwbGV0KSxcblx0XHRheGVzICYmIGF4ZXMubWFwKG1ha2VUcmlwbGV0KSxcblx0XHRib3VuZGluZ1NwaGVyZVJhZGl1cyxcblx0XSxcblx0UGFydGljbGU6IChfOiBQYXJ0aWNsZVByb3BzWydhcmdzJ10pID0+IFtdLFxuXHRTcGhlcmU6IChhcmdzOiBTcGhlcmVBcmdzID0gWzFdKSA9PiB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSB0aHJvdyBuZXcgRXJyb3IoJ1NwaGVyZSBib2R5IGFyZ3MgbXVzdCBiZSBhbiBhcnJheScpO1xuXHRcdHJldHVybiBbYXJnc1swXV07XG5cdH0sXG5cdENvbXBvdW5kOiAoYXJnczogQ29tcG91bmRCb2R5UHJvcHNbJ2FyZ3MnXSkgPT4gYXJncyxcbn07XG4iXX0=","import { computed, effect, inject, isSignal, signal, } from '@angular/core';\nimport { is, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { NgtcDebug } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\nfunction createBody(type) {\n return (getPropFn, ref, options) => body(type, getPropFn, ref, options);\n}\nfunction body(type, getPropFn, ref, { transformArgs, injector } = {}) {\n return assertInjector(body, injector, () => {\n const physics = inject(NgtcPhysics, { optional: true });\n if (!physics) {\n throw new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n }\n const debug = inject(NgtcDebug, { optional: true });\n const transform = transformArgs ?? defaultTransformArgs[type];\n const isRefSignal = isSignal(ref);\n const bodyRef = (isRefSignal ? ref : signal(ref));\n const body = computed(() => resolveRef(bodyRef()), ...(ngDevMode ? [{ debugName: \"body\" }] : []));\n const api = computed(() => {\n const _body = body();\n if (!_body)\n return null;\n const { worker, ...rest } = physics;\n const _worker = worker();\n if (!_worker)\n return null;\n return makeBodyApi(_body, _worker, rest);\n }, ...(ngDevMode ? [{ debugName: \"api\" }] : []));\n effect((onCleanup) => {\n const currentWorker = physics.worker();\n if (!currentWorker)\n return;\n const object = body();\n if (!isRefSignal && !object) {\n bodyRef.set(resolveRef(ref));\n return;\n }\n if (!object)\n return;\n const [uuid, props] = (() => {\n let uuids = [];\n let temp;\n if (is.three(object, 'isInstancedMesh')) {\n object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n uuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n temp = new THREE.Object3D();\n }\n else {\n uuids = [object.uuid];\n }\n return [\n uuids,\n uuids.map((id, index) => {\n const props = getPropFn(index);\n if (temp) {\n prepare(temp, props);\n object.setMatrixAt(index, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n }\n else {\n prepare(object, props);\n }\n physics.refs[id] = object;\n debug?.add(id, props, type);\n setupCollision(physics.events, props, id);\n // @ts-expect-error - if args is undefined, there's default\n return { ...props, args: transform(props.args) };\n }),\n ];\n })();\n // Register on mount, unregister on unmount\n currentWorker.addBodies({\n props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n return {\n onCollide: Boolean(onCollide),\n onCollideBegin: Boolean(onCollideBegin),\n onCollideEnd: Boolean(onCollideEnd),\n ...serializableProps,\n };\n }),\n type,\n uuid,\n });\n onCleanup(() => {\n uuid.forEach((id) => {\n delete physics.refs[id];\n debug?.remove(id);\n delete physics.events[id];\n });\n currentWorker.removeBodies({ uuid });\n });\n });\n return api;\n });\n}\nexport const box = createBody('Box');\nexport const convexPolyhedron = createBody('ConvexPolyhedron');\nexport const cylinder = createBody('Cylinder');\nexport const heightfield = createBody('Heightfield');\nexport const particle = createBody('Particle');\nexport const plane = createBody('Plane');\nexport const sphere = createBody('Sphere');\nexport const trimesh = createBody('Trimesh');\nexport const compound = createBody('Compound');\n/**\n * @deprecated Use `box` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectBox = box;\n/**\n * @deprecated Use `convexPolyhedron` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectConvexPolyhedron = convexPolyhedron;\n/**\n * @deprecated Use `cylinder` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectCylinder = cylinder;\n/**\n * @deprecated Use `heightfield` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectHeightfield = heightfield;\n/**\n * @deprecated Use `particle` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectParticle = particle;\n/**\n * @deprecated Use `plane` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectPlane = plane;\n/**\n * @deprecated Use `sphere` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSphere = sphere;\n/**\n * @deprecated Use `trimesh` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectTrimesh = trimesh;\n/**\n * @deprecated Use `compound` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectCompound = compound;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9yRixTQUFTLFVBQVUsQ0FBK0IsSUFBWTtJQUM3RCxPQUFPLENBQ04sU0FBbUQsRUFDbkQsR0FBc0YsRUFDdEYsT0FBaUMsRUFDaEMsRUFBRSxDQUFDLElBQUksQ0FBa0IsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUNaLElBQVksRUFDWixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFekQsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FB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TUFBTSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUV2RDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBRXZDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUU3Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBRXZDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBRXJDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRXcml0YWJsZVNpZ25hbCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpc1NpZ25hbCxcblx0c2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlTaGFwZVR5cGUgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGlzLCByZXNvbHZlUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RjUGh5c2ljcyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IE5ndGNEZWJ1ZyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y0FyZ0ZuLCBOZ3RjQm9keVByb3BzTWFwLCBOZ3RjQm9keVB1YmxpY0FwaSwgTmd0Y0dldEJ5SW5kZXggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2Zvcm1BcmdzLCBtYWtlQm9keUFwaSwgcHJlcGFyZSwgc2V0dXBDb2xsaXNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4ge1xuXHR0cmFuc2Zvcm1BcmdzPzogTmd0Y0FyZ0ZuPE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT47XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4odHlwZTogVFNoYXBlKSB7XG5cdHJldHVybiA8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0XHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdFx0cmVmOiBFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IFNpZ25hbDxFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IHVuZGVmaW5lZD4sXG5cdFx0b3B0aW9ucz86IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+LFxuXHQpID0+IGJvZHk8VFNoYXBlLCBUT2JqZWN0Pih0eXBlLCBnZXRQcm9wRm4sIHJlZiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZSwgVE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0dHlwZTogVFNoYXBlLFxuXHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdHJlZjogRWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCBTaWduYWw8RWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCB1bmRlZmluZWQ+LFxuXHR7IHRyYW5zZm9ybUFyZ3MsIGluamVjdG9yIH06IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+ID0ge30sXG4pOiBTaWduYWw8Tmd0Y0JvZHlQdWJsaWNBcGkgfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3Rvcihib2R5LCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBoeXNpY3MgPSBpbmplY3QoTmd0Y1BoeXNpY3MsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0XHRpZiAoIXBoeXNpY3MpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgW05HVCBDYW5ub25dIGluamVjdEJvZHkgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIDxuZ3RjLXBoeXNpY3M+YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVidWcgPSBpbmplY3QoTmd0Y0RlYnVnLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgdHJhbnNmb3JtID0gdHJhbnNmb3JtQXJncyA/PyBkZWZhdWx0VHJhbnNmb3JtQXJnc1t0eXBlXTtcblx0XHRjb25zdCBpc1JlZlNpZ25hbCA9IGlzU2lnbmFsKHJlZik7XG5cdFx0Y29uc3QgYm9keVJlZiA9IChpc1JlZlNpZ25hbCA/IHJlZiA6IHNpZ25hbChyZWYpKSBhcyBXcml0YWJsZVNpZ25hbDxUT2JqZWN0IHwgdW5kZWZpbmVkPjtcblx0XHRjb25zdCBib2R5ID0gY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZVJlZihib2R5UmVmKCkpKTtcblxuXHRcdGNvbnN0IGFwaSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IF9ib2R5ID0gYm9keSgpO1xuXHRcdFx0aWYgKCFfYm9keSkgcmV0dXJuIG51bGw7XG5cblx0XHRcdGNvbnN0IHsgd29ya2VyLCAuLi5yZXN0IH0gPSBwaHlzaWNzO1xuXHRcdFx0Y29uc3QgX3dvcmtlciA9IHdvcmtlcigpO1xuXHRcdFx0aWYgKCFfd29ya2VyKSByZXR1cm4gbnVsbDtcblxuXHRcdFx0cmV0dXJuIG1ha2VCb2R5QXBpKF9ib2R5LCBfd29ya2VyLCByZXN0KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gcGh5c2ljcy53b3JrZXIoKTtcblx0XHRcdGlmICghY3VycmVudFdvcmtlcikgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBvYmplY3QgPSBib2R5KCk7XG5cblx0XHRcdGlmICghaXNSZWZTaWduYWwgJiYgIW9iamVjdCkge1xuXHRcdFx0XHRib2R5UmVmLnNldChyZXNvbHZlUmVmKHJlZikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICghb2JqZWN0KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRsZXQgdXVpZHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdGxldCB0ZW1wOiBUSFJFRS5PYmplY3QzRDtcblx0XHRcdFx0aWYgKGlzLnRocmVlPFRIUkVFLkluc3RhbmNlZE1lc2g+KG9iamVjdCwgJ2lzSW5zdGFuY2VkTWVzaCcpKSB7XG5cdFx0XHRcdFx0b2JqZWN0Lmluc3RhbmNlTWF0cml4LnNldFVzYWdlKFRIUkVFLkR5bmFtaWNEcmF3VXNhZ2UpO1xuXHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0dGVtcCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHV1aWRzLFxuXHRcdFx0XHRcdHV1aWRzLm1hcCgoaWQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBwcm9wcyA9IGdldFByb3BGbihpbmRleCk7XG5cdFx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0XHRwcmVwYXJlKHRlbXAsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0KG9iamVjdCBhcyB1bmtub3duIGFzIFRIUkVFLkluc3RhbmNlZE1lc2gpLnNldE1hdHJpeEF0KGluZGV4LCB0ZW1wLm1hdHJpeCk7XG5cdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBUSFJFRS5JbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cGh5c2ljcy5yZWZzW2lkXSA9IG9iamVjdDtcblx0XHRcdFx0XHRcdGRlYnVnPy5hZGQoaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdHNldHVwQ29sbGlzaW9uKHBoeXNpY3MuZXZlbnRzLCBwcm9wcywgaWQpO1xuXHRcdFx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIGlmIGFyZ3MgaXMgdW5kZWZpbmVkLCB0aGVyZSdzIGRlZmF1bHRcblx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiB0cmFuc2Zvcm0ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XTtcblx0XHRcdH0pKCk7XG5cblx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdGN1cnJlbnRXb3JrZXIuYWRkQm9kaWVzKHtcblx0XHRcdFx0cHJvcHM6IHByb3BzLm1hcCgoeyBvbkNvbGxpZGUsIG9uQ29sbGlkZUJlZ2luLCBvbkNvbGxpZGVFbmQsIC4uLnNlcmlhbGl6YWJsZVByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0b25Db2xsaWRlOiBCb29sZWFuKG9uQ29sbGlkZSksXG5cdFx0XHRcdFx0XHRvbkNvbGxpZGVCZWdpbjogQm9vbGVhbihvbkNvbGxpZGVCZWdpbiksXG5cdFx0XHRcdFx0XHRvbkNvbGxpZGVFbmQ6IEJvb2xlYW4ob25Db2xsaWRlRW5kKSxcblx0XHRcdFx0XHRcdC4uLnNlcmlhbGl6YWJsZVByb3BzLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHR1dWlkLFxuXHRcdFx0fSk7XG5cblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdHV1aWQuZm9yRWFjaCgoaWQpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5yZWZzW2lkXTtcblx0XHRcdFx0XHRkZWJ1Zz8ucmVtb3ZlKGlkKTtcblx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5ldmVudHNbaWRdO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y3VycmVudFdvcmtlci5yZW1vdmVCb2RpZXMoeyB1dWlkIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGJveCA9IGNyZWF0ZUJvZHkoJ0JveCcpO1xuZXhwb3J0IGNvbnN0IGNvbnZleFBvbHloZWRyb24gPSBjcmVhdGVCb2R5KCdDb252ZXhQb2x5aGVkcm9uJyk7XG5leHBvcnQgY29uc3QgY3lsaW5kZXIgPSBjcmVhdGVCb2R5KCdDeWxpbmRlcicpO1xuZXhwb3J0IGNvbnN0IGhlaWdodGZpZWxkID0gY3JlYXRlQm9keSgnSGVpZ2h0ZmllbGQnKTtcbmV4cG9ydCBjb25zdCBwYXJ0aWNsZSA9IGNyZWF0ZUJvZHkoJ1BhcnRpY2xlJyk7XG5leHBvcnQgY29uc3QgcGxhbmUgPSBjcmVhdGVCb2R5KCdQbGFuZScpO1xuZXhwb3J0IGNvbnN0IHNwaGVyZSA9IGNyZWF0ZUJvZHkoJ1NwaGVyZScpO1xuZXhwb3J0IGNvbnN0IHRyaW1lc2ggPSBjcmVhdGVCb2R5KCdUcmltZXNoJyk7XG5leHBvcnQgY29uc3QgY29tcG91bmQgPSBjcmVhdGVCb2R5KCdDb21wb3VuZCcpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgYm94YCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RCb3ggPSBib3g7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb252ZXhQb2x5aGVkcm9uYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RDb252ZXhQb2x5aGVkcm9uID0gY29udmV4UG9seWhlZHJvbjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGN5bGluZGVyYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RDeWxpbmRlciA9IGN5bGluZGVyO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgaGVpZ2h0ZmllbGRgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2NS4wLjBcbiAqIEBzaW5jZSB2NC4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEhlaWdodGZpZWxkID0gaGVpZ2h0ZmllbGQ7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBwYXJ0aWNsZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY1LjAuMFxuICogQHNpbmNlIHY0LjAuMFxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0UGFydGljbGUgPSBwYXJ0aWNsZTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHBsYW5lYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RQbGFuZSA9IHBsYW5lO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgc3BoZXJlYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RTcGhlcmUgPSBzcGhlcmU7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGB0cmltZXNoYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RUcmltZXNoID0gdHJpbWVzaDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGNvbXBvdW5kYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RDb21wb3VuZCA9IGNvbXBvdW5kO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2FuZ3VsYXItdGhyZWUtY2Fubm9uLWJvZHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}