angular-three-cannon 1.5.2 → 1.6.0
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/debug/lib/debug.d.ts +1 -1
- package/esm2022/debug/lib/debug.mjs +118 -0
- package/esm2022/lib/physics.mjs +262 -0
- package/esm2022/lib/store.mjs +22 -0
- package/esm2022/lib/utils.mjs +48 -0
- package/{fesm2020 → fesm2022}/angular-three-cannon-debug.mjs +23 -23
- package/{fesm2015 → fesm2022}/angular-three-cannon-debug.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-cannon.mjs +9 -9
- package/{fesm2020 → fesm2022}/angular-three-cannon.mjs.map +1 -1
- package/lib/physics.d.ts +1 -1
- package/package.json +18 -27
- package/plugin/package.json +2 -2
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +1 -1
- package/plugin/src/generators/init/init.js +1 -1
- package/plugin/src/generators/init/init.js.map +1 -1
- package/esm2020/debug/lib/debug.mjs +0 -117
- package/esm2020/lib/physics.mjs +0 -261
- package/esm2020/lib/store.mjs +0 -21
- package/esm2020/lib/utils.mjs +0 -47
- package/fesm2015/angular-three-cannon-debug.mjs +0 -124
- package/fesm2015/angular-three-cannon-services.mjs +0 -488
- package/fesm2015/angular-three-cannon-services.mjs.map +0 -1
- package/fesm2015/angular-three-cannon.mjs +0 -333
- package/fesm2015/angular-three-cannon.mjs.map +0 -1
- package/fesm2020/angular-three-cannon-debug.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-three-cannon.mjs +0 -0
- /package/{esm2020 → esm2022}/debug/angular-three-cannon-debug.mjs +0 -0
- /package/{esm2020 → esm2022}/debug/index.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/services/angular-three-cannon-services.mjs +0 -0
- /package/{esm2020 → esm2022}/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/body.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/constraint.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/contact-material.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/ray.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/raycast-vehicle.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/spring.mjs +0 -0
- /package/{esm2020 → esm2022}/services/lib/utils.mjs +0 -0
- /package/{fesm2020 → fesm2022}/angular-three-cannon-services.mjs +0 -0
- /package/{fesm2020 → fesm2022}/angular-three-cannon-services.mjs.map +0 -0
|
@@ -1,488 +0,0 @@
|
|
|
1
|
-
import { __rest } from 'tslib';
|
|
2
|
-
import { inject } from '@angular/core';
|
|
3
|
-
import { injectNgtDestroy, injectNgtRef, tapEffect, makeId, is } from 'angular-three';
|
|
4
|
-
import { NgtcUtils, NgtcStore } from 'angular-three-cannon';
|
|
5
|
-
import { NGTC_DEBUG_API } from 'angular-three-cannon/debug';
|
|
6
|
-
import { filter, combineLatest, takeUntil } from 'rxjs';
|
|
7
|
-
import * as THREE from 'three';
|
|
8
|
-
|
|
9
|
-
function filterEmpty() {
|
|
10
|
-
return filter((obj) => obj != null);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function injectPlane(fn, opts) {
|
|
14
|
-
return injectBody('Plane', fn, () => [], opts);
|
|
15
|
-
}
|
|
16
|
-
function injectBox(fn, opts) {
|
|
17
|
-
const defaultBoxArgs = [1, 1, 1];
|
|
18
|
-
return injectBody('Box', fn, (args = defaultBoxArgs) => args, opts);
|
|
19
|
-
}
|
|
20
|
-
function injectCylinder(fn, opts) {
|
|
21
|
-
return injectBody('Cylinder', fn, (args = []) => args, opts);
|
|
22
|
-
}
|
|
23
|
-
function injectHeightfield(fn, opts) {
|
|
24
|
-
return injectBody('Heightfield', fn, (args) => args, opts);
|
|
25
|
-
}
|
|
26
|
-
function injectParticle(fn, opts) {
|
|
27
|
-
return injectBody('Particle', fn, () => [], opts);
|
|
28
|
-
}
|
|
29
|
-
function injectSphere(fn, opts) {
|
|
30
|
-
return injectBody('Sphere', fn, (args = [1]) => {
|
|
31
|
-
if (!Array.isArray(args))
|
|
32
|
-
throw new Error('injectSphere args must be an array');
|
|
33
|
-
return [args[0]];
|
|
34
|
-
}, opts);
|
|
35
|
-
}
|
|
36
|
-
function injectTrimesh(fn, opts) {
|
|
37
|
-
return injectBody('Trimesh', fn, (args) => args, opts);
|
|
38
|
-
}
|
|
39
|
-
function injectConvexPolyhedron(fn, opts) {
|
|
40
|
-
return injectBody('ConvexPolyhedron', fn, ([vertices, faces, normals, axes, boundingSphereRadius] = []) => [
|
|
41
|
-
vertices && vertices.map(NgtcUtils.makeTriplet),
|
|
42
|
-
faces,
|
|
43
|
-
normals && normals.map(NgtcUtils.makeTriplet),
|
|
44
|
-
axes && axes.map(NgtcUtils.makeTriplet),
|
|
45
|
-
boundingSphereRadius,
|
|
46
|
-
], opts);
|
|
47
|
-
}
|
|
48
|
-
function injectCompoundBody(fn, opts) {
|
|
49
|
-
return injectBody('Compound', fn, (args) => args, opts);
|
|
50
|
-
}
|
|
51
|
-
const temp = new THREE.Object3D();
|
|
52
|
-
function injectBody(type, getPropsFn, argsFn, { ref, waitFor } = {}) {
|
|
53
|
-
let subscription = undefined;
|
|
54
|
-
const debugApi = inject(NGTC_DEBUG_API, { skipSelf: true, optional: true });
|
|
55
|
-
const physicsStore = inject(NgtcStore, { skipSelf: true });
|
|
56
|
-
// clean up our streams on destroy
|
|
57
|
-
injectNgtDestroy(() => {
|
|
58
|
-
subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
|
|
59
|
-
});
|
|
60
|
-
// give our bodyRef an NgtInjectedRef
|
|
61
|
-
let bodyRef = injectNgtRef();
|
|
62
|
-
// re-assign bodyRef if the consumers pass a ref in
|
|
63
|
-
if (ref)
|
|
64
|
-
bodyRef = ref;
|
|
65
|
-
// fire microQueue$
|
|
66
|
-
queueMicrotask(() => {
|
|
67
|
-
// waitFor assumes the consumer will be using the bodyRef on the template
|
|
68
|
-
// with the model (waitFor) as a THREE instance
|
|
69
|
-
if (!waitFor && !bodyRef.nativeElement) {
|
|
70
|
-
bodyRef.nativeElement = new THREE.Object3D();
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
// start the pipeline as soon as bodyRef has a truthy value
|
|
74
|
-
subscription = combineLatest([physicsStore.select('worker'), bodyRef.$.pipe(filterEmpty())])
|
|
75
|
-
.pipe(tapEffect(([worker, object]) => {
|
|
76
|
-
const currentWorker = worker;
|
|
77
|
-
const { events, refs } = physicsStore.get();
|
|
78
|
-
let objectCount = 1;
|
|
79
|
-
if (object instanceof THREE.InstancedMesh) {
|
|
80
|
-
object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
|
|
81
|
-
objectCount = object.count;
|
|
82
|
-
}
|
|
83
|
-
// consolidate our uuids into an Array so we can handle them in a more consistent way
|
|
84
|
-
const uuids = object instanceof THREE.InstancedMesh
|
|
85
|
-
? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)
|
|
86
|
-
: [object.uuid];
|
|
87
|
-
const propsList = uuids.map((uuid, index) => {
|
|
88
|
-
const propsResult = getPropsFn(index);
|
|
89
|
-
NgtcUtils.prepare(temp, propsResult);
|
|
90
|
-
if (object instanceof THREE.InstancedMesh) {
|
|
91
|
-
object.setMatrixAt(index, temp.matrix);
|
|
92
|
-
object.instanceMatrix.needsUpdate = true;
|
|
93
|
-
}
|
|
94
|
-
refs[uuid] = object;
|
|
95
|
-
debugApi === null || debugApi === void 0 ? void 0 : debugApi.add(uuid, propsResult, type);
|
|
96
|
-
NgtcUtils.setupCollision(events, propsResult, uuid);
|
|
97
|
-
return Object.assign(Object.assign({}, propsResult), { args: argsFn(propsResult.args) });
|
|
98
|
-
});
|
|
99
|
-
currentWorker.addBodies({
|
|
100
|
-
props: propsList.map((_a) => {
|
|
101
|
-
var { onCollide, onCollideBegin, onCollideEnd } = _a, serializableProps = __rest(_a, ["onCollide", "onCollideBegin", "onCollideEnd"]);
|
|
102
|
-
return (Object.assign({ onCollide: Boolean(onCollide), onCollideBegin: Boolean(onCollideBegin), onCollideEnd: Boolean(onCollideEnd) }, serializableProps));
|
|
103
|
-
}),
|
|
104
|
-
type,
|
|
105
|
-
uuid: uuids,
|
|
106
|
-
});
|
|
107
|
-
return () => {
|
|
108
|
-
uuids.forEach((uuid) => {
|
|
109
|
-
delete refs[uuid];
|
|
110
|
-
debugApi === null || debugApi === void 0 ? void 0 : debugApi.remove(uuid);
|
|
111
|
-
delete events[uuid];
|
|
112
|
-
});
|
|
113
|
-
currentWorker.removeBodies({ uuid: uuids });
|
|
114
|
-
};
|
|
115
|
-
}))
|
|
116
|
-
.subscribe();
|
|
117
|
-
const makeAtomic = (type, index) => {
|
|
118
|
-
const op = `set${NgtcUtils.capitalize(type)}`;
|
|
119
|
-
return {
|
|
120
|
-
set: (value) => {
|
|
121
|
-
const { worker } = physicsStore.get();
|
|
122
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
123
|
-
uuid && worker[op]({ props: value, uuid });
|
|
124
|
-
},
|
|
125
|
-
get subscribe() {
|
|
126
|
-
const { subscriptions, worker } = physicsStore.get();
|
|
127
|
-
return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
const makeQuaternion = (index) => {
|
|
132
|
-
const type = 'quaternion';
|
|
133
|
-
return {
|
|
134
|
-
copy: ({ w, x, y, z }) => {
|
|
135
|
-
const { worker } = physicsStore.get();
|
|
136
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
137
|
-
uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });
|
|
138
|
-
},
|
|
139
|
-
set: (x, y, z, w) => {
|
|
140
|
-
const { worker } = physicsStore.get();
|
|
141
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
142
|
-
uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });
|
|
143
|
-
},
|
|
144
|
-
get subscribe() {
|
|
145
|
-
const { subscriptions, worker } = physicsStore.get();
|
|
146
|
-
return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
};
|
|
150
|
-
const makeRotation = (index) => {
|
|
151
|
-
return {
|
|
152
|
-
copy: ({ x, y, z }) => {
|
|
153
|
-
const { worker } = physicsStore.get();
|
|
154
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
155
|
-
uuid && worker.setRotation({ props: [x, y, z], uuid });
|
|
156
|
-
},
|
|
157
|
-
set: (x, y, z) => {
|
|
158
|
-
const { worker } = physicsStore.get();
|
|
159
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
160
|
-
uuid && worker.setRotation({ props: [x, y, z], uuid });
|
|
161
|
-
},
|
|
162
|
-
subscribe: (callback) => {
|
|
163
|
-
const { subscriptions, worker } = physicsStore.get();
|
|
164
|
-
const id = NgtcUtils.incrementingId++;
|
|
165
|
-
const target = 'bodies';
|
|
166
|
-
const type = 'quaternion';
|
|
167
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
168
|
-
subscriptions[id] = { [type]: NgtcUtils.quaternionToRotation(callback) };
|
|
169
|
-
uuid && worker.subscribe({ props: { id, target, type }, uuid });
|
|
170
|
-
return () => {
|
|
171
|
-
delete subscriptions[id];
|
|
172
|
-
worker.unsubscribe({ props: id });
|
|
173
|
-
};
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
const makeVec = (type, index) => {
|
|
178
|
-
const op = `set${NgtcUtils.capitalize(type)}`;
|
|
179
|
-
return {
|
|
180
|
-
copy: ({ x, y, z }) => {
|
|
181
|
-
const { worker } = physicsStore.get();
|
|
182
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
183
|
-
uuid && worker[op]({ props: [x, y, z], uuid });
|
|
184
|
-
},
|
|
185
|
-
set: (x, y, z) => {
|
|
186
|
-
const { worker } = physicsStore.get();
|
|
187
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
188
|
-
uuid && worker[op]({ props: [x, y, z], uuid });
|
|
189
|
-
},
|
|
190
|
-
get subscribe() {
|
|
191
|
-
const { subscriptions, worker } = physicsStore.get();
|
|
192
|
-
return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);
|
|
193
|
-
},
|
|
194
|
-
};
|
|
195
|
-
};
|
|
196
|
-
const makeRemove = (index) => {
|
|
197
|
-
const { worker } = physicsStore.get();
|
|
198
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
199
|
-
return () => {
|
|
200
|
-
if (uuid)
|
|
201
|
-
worker.removeBodies({ uuid: [uuid] });
|
|
202
|
-
};
|
|
203
|
-
};
|
|
204
|
-
function makeApi(index) {
|
|
205
|
-
return {
|
|
206
|
-
allowSleep: makeAtomic('allowSleep', index),
|
|
207
|
-
angularDamping: makeAtomic('angularDamping', index),
|
|
208
|
-
angularFactor: makeVec('angularFactor', index),
|
|
209
|
-
angularVelocity: makeVec('angularVelocity', index),
|
|
210
|
-
applyForce(force, worldPoint) {
|
|
211
|
-
const { worker } = physicsStore.get();
|
|
212
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
213
|
-
uuid && worker.applyForce({ props: [force, worldPoint], uuid });
|
|
214
|
-
},
|
|
215
|
-
applyImpulse(impulse, worldPoint) {
|
|
216
|
-
const { worker } = physicsStore.get();
|
|
217
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
218
|
-
uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
219
|
-
},
|
|
220
|
-
applyLocalForce(force, localPoint) {
|
|
221
|
-
const { worker } = physicsStore.get();
|
|
222
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
223
|
-
uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });
|
|
224
|
-
},
|
|
225
|
-
applyLocalImpulse(impulse, localPoint) {
|
|
226
|
-
const { worker } = physicsStore.get();
|
|
227
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
228
|
-
uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });
|
|
229
|
-
},
|
|
230
|
-
applyTorque(torque) {
|
|
231
|
-
const { worker } = physicsStore.get();
|
|
232
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
233
|
-
uuid && worker.applyTorque({ props: [torque], uuid });
|
|
234
|
-
},
|
|
235
|
-
collisionFilterGroup: makeAtomic('collisionFilterGroup', index),
|
|
236
|
-
collisionFilterMask: makeAtomic('collisionFilterMask', index),
|
|
237
|
-
collisionResponse: makeAtomic('collisionResponse', index),
|
|
238
|
-
fixedRotation: makeAtomic('fixedRotation', index),
|
|
239
|
-
isTrigger: makeAtomic('isTrigger', index),
|
|
240
|
-
linearDamping: makeAtomic('linearDamping', index),
|
|
241
|
-
linearFactor: makeVec('linearFactor', index),
|
|
242
|
-
mass: makeAtomic('mass', index),
|
|
243
|
-
material: makeAtomic('material', index),
|
|
244
|
-
position: makeVec('position', index),
|
|
245
|
-
quaternion: makeQuaternion(index),
|
|
246
|
-
remove: makeRemove(index),
|
|
247
|
-
rotation: makeRotation(index),
|
|
248
|
-
scaleOverride(scale) {
|
|
249
|
-
const { scaleOverrides } = physicsStore.get();
|
|
250
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
251
|
-
if (uuid)
|
|
252
|
-
scaleOverrides[uuid] = new THREE.Vector3(...scale);
|
|
253
|
-
},
|
|
254
|
-
sleep() {
|
|
255
|
-
const { worker } = physicsStore.get();
|
|
256
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
257
|
-
uuid && worker.sleep({ uuid });
|
|
258
|
-
},
|
|
259
|
-
sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),
|
|
260
|
-
sleepTimeLimit: makeAtomic('sleepTimeLimit', index),
|
|
261
|
-
userData: makeAtomic('userData', index),
|
|
262
|
-
velocity: makeVec('velocity', index),
|
|
263
|
-
wakeUp() {
|
|
264
|
-
const { worker } = physicsStore.get();
|
|
265
|
-
const uuid = NgtcUtils.getUUID(bodyRef, index);
|
|
266
|
-
uuid && worker.wakeUp({ uuid });
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
const cache = {};
|
|
271
|
-
const api = Object.assign(Object.assign({}, makeApi(undefined)), { at: (index) => cache[index] || (cache[index] = makeApi(index)) });
|
|
272
|
-
return { ref: bodyRef, api };
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
function injectPointToPointConstraint(bodyA, bodyB, optsFn) {
|
|
276
|
-
return injectConstraint('PointToPoint', bodyA, bodyB, optsFn);
|
|
277
|
-
}
|
|
278
|
-
function injectConeTwistConstraint(bodyA, bodyB, optsFn) {
|
|
279
|
-
return injectConstraint('ConeTwist', bodyA, bodyB, optsFn);
|
|
280
|
-
}
|
|
281
|
-
function injectDistanceConstraint(bodyA, bodyB, optsFn) {
|
|
282
|
-
return injectConstraint('Distance', bodyA, bodyB, optsFn);
|
|
283
|
-
}
|
|
284
|
-
function injectHingeConstraint(bodyA, bodyB, optsFn) {
|
|
285
|
-
return injectConstraint('Hinge', bodyA, bodyB, optsFn);
|
|
286
|
-
}
|
|
287
|
-
function injectLockConstraint(bodyA, bodyB, optsFn) {
|
|
288
|
-
return injectConstraint('Lock', bodyA, bodyB, optsFn);
|
|
289
|
-
}
|
|
290
|
-
function injectConstraint(type, bodyA, bodyB, optsFn = () => ({})) {
|
|
291
|
-
const { destroy$ } = injectNgtDestroy();
|
|
292
|
-
const uuid = makeId();
|
|
293
|
-
const physicsStore = inject(NgtcStore, { skipSelf: true });
|
|
294
|
-
const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;
|
|
295
|
-
const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;
|
|
296
|
-
combineLatest([physicsStore.select('worker'), bodyARef.$.pipe(filterEmpty()), bodyBRef.$.pipe(filterEmpty())])
|
|
297
|
-
.pipe(tapEffect(([worker, bodyA, bodyB]) => {
|
|
298
|
-
const opts = optsFn();
|
|
299
|
-
worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });
|
|
300
|
-
return () => worker.removeConstraint({ uuid });
|
|
301
|
-
}), takeUntil(destroy$))
|
|
302
|
-
.subscribe();
|
|
303
|
-
const api = {
|
|
304
|
-
disable: () => {
|
|
305
|
-
const worker = physicsStore.get('worker');
|
|
306
|
-
worker.disableConstraint({ uuid });
|
|
307
|
-
},
|
|
308
|
-
enable: () => {
|
|
309
|
-
const worker = physicsStore.get('worker');
|
|
310
|
-
worker.enableConstraint({ uuid });
|
|
311
|
-
},
|
|
312
|
-
remove: () => {
|
|
313
|
-
const worker = physicsStore.get('worker');
|
|
314
|
-
worker.removeConstraint({ uuid });
|
|
315
|
-
},
|
|
316
|
-
};
|
|
317
|
-
if (type === 'Hinge') {
|
|
318
|
-
const hingeApi = api;
|
|
319
|
-
hingeApi.disableMotor = () => {
|
|
320
|
-
const worker = physicsStore.get('worker');
|
|
321
|
-
worker.disableConstraintMotor({ uuid });
|
|
322
|
-
};
|
|
323
|
-
hingeApi.enableMotor = () => {
|
|
324
|
-
const worker = physicsStore.get('worker');
|
|
325
|
-
worker.enableConstraintMotor({ uuid });
|
|
326
|
-
};
|
|
327
|
-
hingeApi.setMotorSpeed = (value) => {
|
|
328
|
-
const worker = physicsStore.get('worker');
|
|
329
|
-
worker.setConstraintMotorSpeed({ uuid, props: value });
|
|
330
|
-
};
|
|
331
|
-
hingeApi.setMotorMaxForce = (value) => {
|
|
332
|
-
const worker = physicsStore.get('worker');
|
|
333
|
-
worker.setConstraintMotorMaxForce({ uuid, props: value });
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
return { bodyA: bodyARef, bodyB: bodyBRef, api };
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
function injectContactMaterial(materialA, materialB, optionsFn) {
|
|
340
|
-
const { destroy$ } = injectNgtDestroy();
|
|
341
|
-
const physicsStore = inject(NgtcStore, { skipSelf: true });
|
|
342
|
-
const uuid = makeId();
|
|
343
|
-
physicsStore
|
|
344
|
-
.select('worker')
|
|
345
|
-
.pipe(tapEffect((worker) => {
|
|
346
|
-
const options = optionsFn();
|
|
347
|
-
worker.addContactMaterial({ props: [materialA, materialB, options], uuid });
|
|
348
|
-
return () => worker.removeContactMaterial({ uuid });
|
|
349
|
-
}), takeUntil(destroy$))
|
|
350
|
-
.subscribe();
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
function injectRaycastClosest(optionsFn, callback) {
|
|
354
|
-
injectRay('Closest', optionsFn, callback);
|
|
355
|
-
}
|
|
356
|
-
function injectRaycastAny(optionsFn, callback) {
|
|
357
|
-
injectRay('Any', optionsFn, callback);
|
|
358
|
-
}
|
|
359
|
-
function injectRaycastAll(optionsFn, callback) {
|
|
360
|
-
injectRay('All', optionsFn, callback);
|
|
361
|
-
}
|
|
362
|
-
function injectRay(mode, optionsFn, callback) {
|
|
363
|
-
const { destroy$ } = injectNgtDestroy();
|
|
364
|
-
const uuid = makeId();
|
|
365
|
-
const physicsStore = inject(NgtcStore, { skipSelf: true });
|
|
366
|
-
physicsStore
|
|
367
|
-
.select('worker')
|
|
368
|
-
.pipe(tapEffect((worker) => {
|
|
369
|
-
const opts = optionsFn();
|
|
370
|
-
const events = physicsStore.get('events');
|
|
371
|
-
events[uuid] = { rayhit: callback };
|
|
372
|
-
worker.addRay({ props: Object.assign(Object.assign({}, opts), { mode }), uuid });
|
|
373
|
-
return () => {
|
|
374
|
-
worker.removeRay({ uuid });
|
|
375
|
-
delete events[uuid];
|
|
376
|
-
};
|
|
377
|
-
}), takeUntil(destroy$))
|
|
378
|
-
.subscribe();
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
function injectRaycastVehicle(fn, instanceRef) {
|
|
382
|
-
const store = inject(NgtcStore, { skipSelf: true });
|
|
383
|
-
const { destroy$ } = injectNgtDestroy();
|
|
384
|
-
let ref = injectNgtRef();
|
|
385
|
-
if (instanceRef)
|
|
386
|
-
ref = instanceRef;
|
|
387
|
-
queueMicrotask(() => {
|
|
388
|
-
if (!ref.nativeElement)
|
|
389
|
-
ref.nativeElement = new THREE.Object3D();
|
|
390
|
-
});
|
|
391
|
-
queueMicrotask(() => {
|
|
392
|
-
const { chassisBody, indexForwardAxis = 2, indexRightAxis = 0, indexUpAxis = 1, wheelInfos, wheels } = fn();
|
|
393
|
-
combineLatest([
|
|
394
|
-
store.select('worker'),
|
|
395
|
-
ref.$.pipe(filterEmpty()),
|
|
396
|
-
chassisBody.$.pipe(filterEmpty()),
|
|
397
|
-
...wheels.map((wheel) => wheel.$.pipe(filterEmpty())),
|
|
398
|
-
])
|
|
399
|
-
.pipe(tapEffect(([worker, object]) => {
|
|
400
|
-
const uuid = object.uuid;
|
|
401
|
-
const chassisBodyUUID = NgtcUtils.getUUID(chassisBody);
|
|
402
|
-
const wheelUUIDs = wheels.map((wheel) => NgtcUtils.getUUID(wheel));
|
|
403
|
-
if (!chassisBodyUUID || !wheelUUIDs.every((v) => typeof v === 'string'))
|
|
404
|
-
return;
|
|
405
|
-
worker.addRaycastVehicle({
|
|
406
|
-
props: [
|
|
407
|
-
chassisBodyUUID,
|
|
408
|
-
wheelUUIDs,
|
|
409
|
-
wheelInfos,
|
|
410
|
-
indexForwardAxis,
|
|
411
|
-
indexRightAxis,
|
|
412
|
-
indexUpAxis,
|
|
413
|
-
],
|
|
414
|
-
uuid,
|
|
415
|
-
});
|
|
416
|
-
return () => worker.removeRaycastVehicle({ uuid });
|
|
417
|
-
}), takeUntil(destroy$))
|
|
418
|
-
.subscribe();
|
|
419
|
-
});
|
|
420
|
-
const api = {
|
|
421
|
-
applyEngineForce: (value, wheelIndex) => {
|
|
422
|
-
const worker = store.get('worker');
|
|
423
|
-
const uuid = NgtcUtils.getUUID(ref);
|
|
424
|
-
uuid && worker.applyRaycastVehicleEngineForce({ props: [value, wheelIndex], uuid });
|
|
425
|
-
},
|
|
426
|
-
setBrake: (brake, wheelIndex) => {
|
|
427
|
-
const worker = store.get('worker');
|
|
428
|
-
const uuid = NgtcUtils.getUUID(ref);
|
|
429
|
-
uuid && worker.setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });
|
|
430
|
-
},
|
|
431
|
-
setSteeringValue: (value, wheelIndex) => {
|
|
432
|
-
const worker = store.get('worker');
|
|
433
|
-
const uuid = NgtcUtils.getUUID(ref);
|
|
434
|
-
uuid && worker.setRaycastVehicleSteeringValue({ props: [value, wheelIndex], uuid });
|
|
435
|
-
},
|
|
436
|
-
sliding: {
|
|
437
|
-
get subscribe() {
|
|
438
|
-
const { worker, subscriptions } = store.get();
|
|
439
|
-
return NgtcUtils.subscribe(ref, worker, subscriptions, 'sliding', undefined, 'vehicles');
|
|
440
|
-
},
|
|
441
|
-
},
|
|
442
|
-
remove: () => {
|
|
443
|
-
const worker = store.get('worker');
|
|
444
|
-
const uuid = NgtcUtils.getUUID(ref);
|
|
445
|
-
uuid && worker.removeRaycastVehicle({ uuid });
|
|
446
|
-
},
|
|
447
|
-
};
|
|
448
|
-
return { ref, api };
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
function injectSpring(bodyA, bodyB, optsFn) {
|
|
452
|
-
const store = inject(NgtcStore, { skipSelf: true });
|
|
453
|
-
const uuid = makeId();
|
|
454
|
-
const { destroy$ } = injectNgtDestroy();
|
|
455
|
-
combineLatest([store.select('worker'), bodyA.$.pipe(filterEmpty()), bodyB.$.pipe(filterEmpty())])
|
|
456
|
-
.pipe(tapEffect(([worker, bodyA, bodyB]) => {
|
|
457
|
-
const opts = optsFn();
|
|
458
|
-
worker.addSpring({ props: [bodyA.uuid, bodyB.uuid, opts], uuid });
|
|
459
|
-
return () => worker.removeSpring({ uuid });
|
|
460
|
-
}), takeUntil(destroy$))
|
|
461
|
-
.subscribe();
|
|
462
|
-
const api = {
|
|
463
|
-
setDamping: (value) => {
|
|
464
|
-
const worker = store.get('worker');
|
|
465
|
-
worker.setSpringDamping({ uuid, props: value });
|
|
466
|
-
},
|
|
467
|
-
setRestLength: (value) => {
|
|
468
|
-
const worker = store.get('worker');
|
|
469
|
-
worker.setSpringRestLength({ uuid, props: value });
|
|
470
|
-
},
|
|
471
|
-
setStiffness: (value) => {
|
|
472
|
-
const worker = store.get('worker');
|
|
473
|
-
worker.setSpringStiffness({ uuid, props: value });
|
|
474
|
-
},
|
|
475
|
-
remove: () => {
|
|
476
|
-
const worker = store.get('worker');
|
|
477
|
-
worker.removeSpring({ uuid });
|
|
478
|
-
},
|
|
479
|
-
};
|
|
480
|
-
return { bodyA, bodyB, api };
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* Generated bundle index. Do not edit.
|
|
485
|
-
*/
|
|
486
|
-
|
|
487
|
-
export { injectBox, injectCompoundBody, injectConeTwistConstraint, injectContactMaterial, injectConvexPolyhedron, injectCylinder, injectDistanceConstraint, injectHeightfield, injectHingeConstraint, injectLockConstraint, injectParticle, injectPlane, injectPointToPointConstraint, injectRaycastAll, injectRaycastAny, injectRaycastClosest, injectRaycastVehicle, injectSphere, injectSpring, injectTrimesh };
|
|
488
|
-
//# sourceMappingURL=angular-three-cannon-services.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/angular-three-cannon/services/src/lib/utils.ts","../../../../libs/angular-three-cannon/services/src/lib/body.ts","../../../../libs/angular-three-cannon/services/src/lib/constraint.ts","../../../../libs/angular-three-cannon/services/src/lib/contact-material.ts","../../../../libs/angular-three-cannon/services/src/lib/ray.ts","../../../../libs/angular-three-cannon/services/src/lib/raycast-vehicle.ts","../../../../libs/angular-three-cannon/services/src/lib/spring.ts","../../../../libs/angular-three-cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { filter, MonoTypeOperatorFunction } from 'rxjs';\n\nexport function filterEmpty<T>(): MonoTypeOperatorFunction<T> {\n return filter<T>((obj): obj is T => obj != null);\n}\n","import { inject } from '@angular/core';\nimport {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CompoundBodyProps,\n ConvexPolyhedronArgs,\n ConvexPolyhedronProps,\n CylinderProps,\n HeightfieldProps,\n ParticleProps,\n PlaneProps,\n PropValue,\n Quad,\n SetOpName,\n SphereArgs,\n SphereProps,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport * as THREE from 'three';\nimport { filterEmpty } from './utils';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n set: (value: AtomicProps[K]) => void;\n subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n copy: ({ w, x, y, z }: THREE.Quaternion) => void;\n set: (x: number, y: number, z: number, w: number) => void;\n subscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n set: (x: number, y: number, z: number) => void;\n subscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n [K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n [K in VectorName]: NgtcVectorApi;\n} & {\n applyForce: (force: Triplet, worldPoint: Triplet) => void;\n applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n applyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n applyTorque: (torque: Triplet) => void;\n quaternion: NgtcQuaternionApi;\n rotation: NgtcVectorApi;\n scaleOverride: (scale: Triplet) => void;\n sleep: () => void;\n wakeUp: () => void;\n remove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n at: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcBodyPublicApi;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<PlaneProps, TObject>('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody<BoxProps, TObject>('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CylinderProps, TObject>('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<HeightfieldProps, TObject>('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ParticleProps, TObject>('Particle', fn, () => [], opts);\n}\n\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<SphereProps, TObject>(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('injectSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\n\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<TrimeshProps, TObject>('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ConvexPolyhedronProps, TObject>(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(NgtcUtils.makeTriplet),\n faces,\n normals && normals.map(NgtcUtils.makeTriplet),\n axes && axes.map(NgtcUtils.makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\n\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CompoundBodyProps, TObject>('Compound', fn, (args) => args as unknown[], opts);\n}\n\nconst temp = new THREE.Object3D();\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, waitFor }: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> } = {}\n): NgtcBodyReturn<TObject> {\n let subscription: Subscription | undefined = undefined;\n\n const debugApi = inject(NGTC_DEBUG_API, { skipSelf: true, optional: true });\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n // clean up our streams on destroy\n injectNgtDestroy(() => {\n subscription?.unsubscribe();\n });\n\n // give our bodyRef an NgtInjectedRef\n let bodyRef = injectNgtRef<TObject>();\n\n // re-assign bodyRef if the consumers pass a ref in\n if (ref) bodyRef = ref;\n\n // fire microQueue$\n queueMicrotask(() => {\n // waitFor assumes the consumer will be using the bodyRef on the template\n // with the model (waitFor) as a THREE instance\n if (!waitFor && !bodyRef.nativeElement) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n }\n });\n\n // start the pipeline as soon as bodyRef has a truthy value\n subscription = combineLatest([physicsStore.select('worker'), bodyRef.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, object]) => {\n const currentWorker = worker;\n\n const { events, refs } = physicsStore.get();\n let objectCount = 1;\n\n if (object instanceof THREE.InstancedMesh) {\n object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n objectCount = object.count;\n }\n\n // consolidate our uuids into an Array so we can handle them in a more consistent way\n const uuids =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const propsList = uuids.map((uuid, index) => {\n const propsResult = getPropsFn(index);\n NgtcUtils.prepare(temp, propsResult);\n if (object instanceof THREE.InstancedMesh) {\n object.setMatrixAt(index, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n }\n refs[uuid] = object;\n debugApi?.add(uuid, propsResult, type);\n NgtcUtils.setupCollision(events, propsResult, uuid);\n return { ...propsResult, args: argsFn(propsResult.args) };\n });\n\n currentWorker.addBodies({\n props: propsList.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => ({\n onCollide: Boolean(onCollide),\n onCollideBegin: Boolean(onCollideBegin),\n onCollideEnd: Boolean(onCollideEnd),\n ...serializableProps,\n })),\n type,\n uuid: uuids,\n });\n\n return () => {\n uuids.forEach((uuid) => {\n delete refs[uuid];\n debugApi?.remove(uuid);\n delete events[uuid];\n });\n currentWorker.removeBodies({ uuid: uuids });\n };\n })\n )\n .subscribe();\n\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${NgtcUtils.capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: value, uuid } as never);\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x: number, y: number, z: number, w: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const { subscriptions, worker } = physicsStore.get();\n const id = NgtcUtils.incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: NgtcUtils.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\n const makeVec = (type: VectorName, index?: number) => {\n const op: SetOpName<VectorName> = `set${NgtcUtils.capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRemove = (index?: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n return () => {\n if (uuid) worker.removeBodies({ uuid: [uuid] });\n };\n };\n\n function makeApi(index?: number): NgtcWorkerApi {\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: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, 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 remove: makeRemove(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const { scaleOverrides } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, 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 wakeUp() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n const api = { ...makeApi(undefined), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n return { ref: bodyRef, api };\n}\n","import { inject } from '@angular/core';\nimport {\n ConeTwistConstraintOpts,\n ConstraintOptns,\n ConstraintTypes,\n DistanceConstraintOpts,\n HingeConstraintOpts,\n LockConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, is, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcConstraintApi {\n disable: () => void;\n enable: () => void;\n remove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n disableMotor: () => void;\n enableMotor: () => void;\n setMotorMaxForce: (value: number) => void;\n setMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n ? NgtcConstraintApi\n : NgtcHingeConstraintApi;\n\nexport interface NgtcConstraintReturn<\n T extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcConstraintORHingeApi<T>;\n}\n\nexport type NgtcOptsFunction<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> = () => TOptions;\n\nexport function injectPointToPointConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, optsFn);\n}\n\nexport function injectConeTwistConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'ConeTwist', ConeTwistConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, optsFn);\n}\n\nexport function injectDistanceConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Distance', DistanceConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, optsFn);\n}\n\nexport function injectHingeConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Hinge', HingeConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, optsFn);\n}\n\nexport function injectLockConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Lock', LockConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, optsFn);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn: NgtcOptsFunction<TConstraintType, TOptions> = () => ({} as TOptions)\n): NgtcConstraintReturn<TConstraintType, TObjectA, TObjectB> {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;\n const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;\n\n combineLatest([physicsStore.select('worker'), bodyARef.$.pipe(filterEmpty()), bodyBRef.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });\n return () => worker.removeConstraint({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n disable: () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraint({ uuid });\n },\n enable: () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraint({ uuid });\n },\n remove: () => {\n const worker = physicsStore.get('worker');\n worker.removeConstraint({ uuid });\n },\n } as NgtcConstraintORHingeApi<TConstraintType>;\n\n if (type === 'Hinge') {\n const hingeApi = api as NgtcHingeConstraintApi;\n hingeApi.disableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraintMotor({ uuid });\n };\n\n hingeApi.enableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraintMotor({ uuid });\n };\n\n hingeApi.setMotorSpeed = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorSpeed({ uuid, props: value });\n };\n\n hingeApi.setMotorMaxForce = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorMaxForce({ uuid, props: value });\n };\n }\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n}\n","import { inject } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectContactMaterial(\n materialA: MaterialOptions,\n materialB: MaterialOptions,\n optionsFn: () => ContactMaterialOptions\n) {\n const { destroy$ } = injectNgtDestroy();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const options = optionsFn();\n worker.addContactMaterial({ props: [materialA, materialB, options], uuid });\n return () => worker.removeContactMaterial({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { RayhitEvent, RayMode, RayOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectRaycastClosest(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Closest', optionsFn, callback);\n}\n\nexport function injectRaycastAny(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Any', optionsFn, callback);\n}\n\nexport function injectRaycastAll(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('All', optionsFn, callback);\n}\n\nfunction injectRay(mode: RayMode, optionsFn: () => RayOptions, callback: (event: RayhitEvent) => void): void {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const opts = optionsFn();\n const events = physicsStore.get('events');\n events[uuid] = { rayhit: callback };\n worker.addRay({ props: { ...opts, mode }, uuid });\n return () => {\n worker.removeRay({ uuid });\n delete events[uuid];\n };\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcRaycastVehicleProps {\n chassisBody: NgtInjectedRef<THREE.Object3D>;\n wheelInfos: WheelInfoOptions[];\n wheels: Array<NgtInjectedRef<THREE.Object3D>>;\n indexForwardAxis?: number;\n indexRightAxis?: number;\n indexUpAxis?: number;\n}\n\nexport interface NgtcRaycastVehiclePublicApi {\n applyEngineForce: (value: number, wheelIndex: number) => void;\n setBrake: (brake: number, wheelIndex: number) => void;\n setSteeringValue: (value: number, wheelIndex: number) => void;\n sliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n remove: () => void;\n}\n\nexport interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcRaycastVehiclePublicApi;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n instanceRef?: NgtInjectedRef<TObject>\n): NgtcRaycastVehicleReturn<TObject> {\n const store = inject(NgtcStore, { skipSelf: true });\n const { destroy$ } = injectNgtDestroy();\n\n let ref = injectNgtRef<TObject>();\n\n if (instanceRef) ref = instanceRef;\n\n queueMicrotask(() => {\n if (!ref.nativeElement) ref.nativeElement = new THREE.Object3D() as TObject;\n });\n\n queueMicrotask(() => {\n const { chassisBody, indexForwardAxis = 2, indexRightAxis = 0, indexUpAxis = 1, wheelInfos, wheels } = fn();\n\n combineLatest([\n store.select('worker'),\n ref.$.pipe(filterEmpty()),\n chassisBody.$.pipe(filterEmpty()),\n ...wheels.map((wheel) => wheel.$.pipe(filterEmpty())),\n ])\n .pipe(\n tapEffect(([worker, object]) => {\n const uuid = object.uuid;\n const chassisBodyUUID = NgtcUtils.getUUID(chassisBody);\n const wheelUUIDs = wheels.map((wheel) => NgtcUtils.getUUID(wheel));\n\n if (!chassisBodyUUID || !wheelUUIDs.every((v) => typeof v === 'string')) return;\n\n worker.addRaycastVehicle({\n props: [\n chassisBodyUUID,\n wheelUUIDs as string[],\n wheelInfos,\n indexForwardAxis,\n indexRightAxis,\n indexUpAxis,\n ],\n uuid,\n });\n\n return () => worker.removeRaycastVehicle({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n });\n\n const api = {\n applyEngineForce: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.applyRaycastVehicleEngineForce({ props: [value, wheelIndex], uuid });\n },\n setBrake: (brake: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleSteeringValue({ props: [value, wheelIndex], uuid });\n },\n sliding: {\n get subscribe() {\n const { worker, subscriptions } = store.get();\n return NgtcUtils.subscribe(ref, worker, subscriptions, 'sliding', undefined, 'vehicles');\n },\n },\n remove: () => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.removeRaycastVehicle({ uuid });\n },\n } as NgtcRaycastVehiclePublicApi;\n\n return { ref, api };\n}\n","import { inject } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcSpringApi {\n setDamping: (value: number) => void;\n setRestLength: (value: number) => void;\n setStiffness: (value: number) => void;\n remove: () => void;\n}\n\nexport interface NgtcSpringReturn<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcSpringApi;\n}\n\nexport function injectSpring<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA>,\n bodyB: NgtInjectedRef<TObjectB>,\n optsFn: () => SpringOptns\n): NgtcSpringReturn<TObjectA, TObjectB> {\n const store = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n const { destroy$ } = injectNgtDestroy();\n\n combineLatest([store.select('worker'), bodyA.$.pipe(filterEmpty()), bodyB.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addSpring({ props: [bodyA.uuid, bodyB.uuid, opts], uuid });\n return () => worker.removeSpring({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n setDamping: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringDamping({ uuid, props: value });\n },\n setRestLength: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringRestLength({ uuid, props: value });\n },\n setStiffness: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringStiffness({ uuid, props: value });\n },\n remove: () => {\n const worker = store.get('worker');\n worker.removeSpring({ uuid });\n },\n } as NgtcSpringApi;\n\n return { bodyA, bodyB, api };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;SAEgB,WAAW,GAAA;IACvB,OAAO,MAAM,CAAI,CAAC,GAAG,KAAe,GAAG,IAAI,IAAI,CAAC,CAAC;AACrD;;ACyEgB,SAAA,WAAW,CACvB,EAA8B,EAC9B,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAAsB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAEe,SAAA,SAAS,CACrB,EAA4B,EAC5B,IAAuE,EAAA;IAEvE,MAAM,cAAc,GAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,IAAA,OAAO,UAAU,CAAoB,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,cAAc,KAAc,IAAI,EAAE,IAAI,CAAC,CAAC;AACpG,CAAC;AAEe,SAAA,cAAc,CAC1B,EAAiC,EACjC,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAAyB,UAAU,EAAE,EAAE,EAAE,CAAC,IAAA,GAAO,EAAQ,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/F,CAAC;AAEe,SAAA,iBAAiB,CAC7B,EAAoC,EACpC,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAA4B,aAAa,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1F,CAAC;AAEe,SAAA,cAAc,CAC1B,EAAiC,EACjC,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAAyB,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAEe,SAAA,YAAY,CACxB,EAA+B,EAC/B,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CACb,QAAQ,EACR,EAAE,EACF,CAAC,IAAA,GAAmB,CAAC,CAAC,CAAC,KAAgB;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAChF,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,EACD,IAAI,CACP,CAAC;AACN,CAAC;AAEe,SAAA,aAAa,CACzB,EAAgC,EAChC,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAAwB,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AAClF,CAAC;AAEe,SAAA,sBAAsB,CAClC,EAAyC,EACzC,IAAuE,EAAA;IAEvE,OAAO,UAAU,CACb,kBAAkB,EAClB,EAAE,EACF,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,GAAG,EAAE,KAAoC;QAC5F,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QAC/C,KAAK;QACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QAC7C,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QACvC,oBAAoB;KACvB,EACD,IAAI,CACP,CAAC;AACN,CAAC;AAEe,SAAA,kBAAkB,CAC9B,EAAqC,EACrC,IAAuE,EAAA;AAEvE,IAAA,OAAO,UAAU,CAA6B,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAiB,EAAE,IAAI,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAElC,SAAS,UAAU,CACf,IAAmB,EACnB,UAAsC,EACtC,MAAqC,EACrC,EAAE,GAAG,EAAE,OAAO,KAAuE,EAAE,EAAA;IAEvF,IAAI,YAAY,GAA6B,SAAS,CAAC;AAEvD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;IAG3D,gBAAgB,CAAC,MAAK;AAClB,QAAA,YAAY,aAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,WAAW,EAAE,CAAC;AAChC,KAAC,CAAC,CAAC;;AAGH,IAAA,IAAI,OAAO,GAAG,YAAY,EAAW,CAAC;;AAGtC,IAAA,IAAI,GAAG;QAAE,OAAO,GAAG,GAAG,CAAC;;IAGvB,cAAc,CAAC,MAAK;;;AAGhB,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YACpC,OAAO,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAa,CAAC;AAC3D,SAAA;AACL,KAAC,CAAC,CAAC;;IAGH,YAAY,GAAG,aAAa,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;SACvF,IAAI,CACD,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAI;QAC3B,MAAM,aAAa,GAAG,MAAM,CAAC;QAE7B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,QAAA,IAAI,MAAM,YAAY,KAAK,CAAC,aAAa,EAAE;YACvC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACvD,YAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,SAAA;;AAGD,QAAA,MAAM,KAAK,GACP,MAAM,YAAY,KAAK,CAAC,aAAa;AACjC,cAAE,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;AACrE,cAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACxC,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACrC,YAAA,IAAI,MAAM,YAAY,KAAK,CAAC,aAAa,EAAE;gBACvC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,gBAAA,MAAM,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5C,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpB,YAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACvC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACpD,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAW,CAAE,EAAA,EAAA,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAG,CAAA,CAAA;AAC9D,SAAC,CAAC,CAAC;QAEH,aAAa,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAiE,KAAI;oBAArE,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,OAAwB,EAAnB,iBAAiB,GAA/D,MAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,CAAiE,CAAF,CAAA;gBAAO,QAAA,MAAA,CAAA,MAAA,CAAA,EACxF,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAC7B,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,EACvC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,EAAA,EAChC,iBAAiB,CAAA,EACtB;aAAA,CAAC;YACH,IAAI;AACJ,YAAA,IAAI,EAAE,KAAK;AACd,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,MAAK;AACR,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnB,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,aAAC,CAAC,CAAC;YACH,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD,SAAC,CAAC;AACN,KAAC,CAAC,CACL;AACA,SAAA,SAAS,EAAE,CAAC;AAEjB,IAAA,MAAM,UAAU,GAAG,CAAuB,IAAO,EAAE,KAAc,KAAI;QACjE,MAAM,EAAE,GAAiB,CAAA,GAAA,EAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAE5D,OAAO;AACH,YAAA,GAAG,EAAE,CAAC,KAAmB,KAAI;gBACzB,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC,CAAC;aACvD;AACD,YAAA,IAAI,SAAS,GAAA;gBACT,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;AACrD,gBAAA,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aAC3E;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,MAAM,cAAc,GAAG,CAAC,KAAc,KAAI;QACtC,MAAM,IAAI,GAAG,YAAY,CAAC;QAC1B,OAAO;AACH,YAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAoB,KAAI;gBACvC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D;YACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;gBAChD,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D;AACD,YAAA,IAAI,SAAS,GAAA;gBACT,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;AACrD,gBAAA,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aAC3E;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,CAAC,KAAc,KAAI;QACpC,OAAO;YACH,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA+B,KAAI;gBAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1D;YACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;gBACrC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1D;AACD,YAAA,SAAS,EAAE,CAAC,QAAkC,KAAI;gBAC9C,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;AACrD,gBAAA,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,QAAQ,CAAC;gBACxB,MAAM,IAAI,GAAG,YAAY,CAAC;gBAC1B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAE/C,gBAAA,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,gBAAA,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,gBAAA,OAAO,MAAK;AACR,oBAAA,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;oBACzB,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACtC,iBAAC,CAAC;aACL;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,KAAc,KAAI;QACjD,MAAM,EAAE,GAA0B,CAAA,GAAA,EAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QACrE,OAAO;YACH,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA+B,KAAI;gBAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD;YACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;gBACrC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD;AACD,YAAA,IAAI,SAAS,GAAA;gBACT,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;AACrD,gBAAA,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aAC3E;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,CAAC,KAAc,KAAI;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,QAAA,OAAO,MAAK;AACR,YAAA,IAAI,IAAI;gBAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpD,SAAC,CAAC;AACN,KAAC,CAAC;IAEF,SAAS,OAAO,CAAC,KAAc,EAAA;QAC3B,OAAO;AACH,YAAA,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC;AAC3C,YAAA,cAAc,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnD,YAAA,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;AAC9C,YAAA,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;YAClD,UAAU,CAAC,KAAc,EAAE,UAAmB,EAAA;gBAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACnE;YACD,YAAY,CAAC,OAAgB,EAAE,UAAmB,EAAA;gBAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACvE;YACD,eAAe,CAAC,KAAc,EAAE,UAAmB,EAAA;gBAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACxE;YACD,iBAAiB,CAAC,OAAgB,EAAE,UAAmB,EAAA;gBACnD,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5E;AACD,YAAA,WAAW,CAAC,MAAe,EAAA;gBACvB,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACzD;AACD,YAAA,oBAAoB,EAAE,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC/D,YAAA,mBAAmB,EAAE,UAAU,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAC7D,YAAA,iBAAiB,EAAE,UAAU,CAAC,mBAAmB,EAAE,KAAK,CAAC;AACzD,YAAA,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC;AACjD,YAAA,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;AACzC,YAAA,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC;AACjD,YAAA,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC5C,YAAA,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/B,YAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;AACvC,YAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AACpC,YAAA,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC;AACjC,YAAA,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;AACzB,YAAA,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC;AAC7B,YAAA,aAAa,CAAC,KAAK,EAAA;gBACf,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,IAAI;AAAE,oBAAA,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;aAChE;YACD,KAAK,GAAA;gBACD,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAClC;AACD,YAAA,eAAe,EAAE,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC;AACrD,YAAA,cAAc,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnD,YAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;AACvC,YAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;YACpC,MAAM,GAAA;gBACF,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACnC;SACJ,CAAC;KACL;IAED,MAAM,KAAK,GAAuC,EAAE,CAAC;AACrD,IAAA,MAAM,GAAG,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,OAAO,CAAC,SAAS,CAAC,CAAE,EAAA,EAAA,EAAE,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAE,CAAC;AAC9G,IAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC;;SC1WgB,4BAA4B,CAIxC,KAA0C,EAC1C,KAA0C,EAC1C,MAAqE,EAAA;IAErE,OAAO,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;SAEe,yBAAyB,CAIrC,KAA0C,EAC1C,KAA0C,EAC1C,MAA+D,EAAA;IAE/D,OAAO,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;SAEe,wBAAwB,CAIpC,KAA0C,EAC1C,KAA0C,EAC1C,MAA6D,EAAA;IAE7D,OAAO,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;SAEe,qBAAqB,CAIjC,KAA0C,EAC1C,KAA0C,EAC1C,MAAuD,EAAA;IAEvD,OAAO,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;SAEe,oBAAoB,CAIhC,KAA0C,EAC1C,KAA0C,EAC1C,MAAqD,EAAA;IAErD,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAQrB,IAAqB,EACrB,KAA0C,EAC1C,KAA0C,EAC1C,MAAA,GAAsD,OAAO,EAAe,CAAA,EAAA;AAE5E,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AACxC,IAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AAEtB,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAE9D,IAAA,aAAa,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACzG,SAAA,IAAI,CACD,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAI;AACjC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,KAAC,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CACtB;AACA,SAAA,SAAS,EAAE,CAAC;AAEjB,IAAA,MAAM,GAAG,GAAG;QACR,OAAO,EAAE,MAAK;YACV,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACtC;QACD,MAAM,EAAE,MAAK;YACT,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACrC;QACD,MAAM,EAAE,MAAK;YACT,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACrC;KACyC,CAAC;IAE/C,IAAI,IAAI,KAAK,OAAO,EAAE;QAClB,MAAM,QAAQ,GAAG,GAA6B,CAAC;AAC/C,QAAA,QAAQ,CAAC,YAAY,GAAG,MAAK;YACzB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,WAAW,GAAG,MAAK;YACxB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,aAAa,GAAG,CAAC,KAAa,KAAI;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,gBAAgB,GAAG,CAAC,KAAa,KAAI;YAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,0BAA0B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9D,SAAC,CAAC;AACL,KAAA;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACrD;;SCzKgB,qBAAqB,CACjC,SAA0B,EAC1B,SAA0B,EAC1B,SAAuC,EAAA;AAEvC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAExC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,IAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;IAEtB,YAAY;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CACD,SAAS,CAAC,CAAC,MAAM,KAAI;AACjB,QAAA,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAC5B,QAAA,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,KAAC,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CACtB;AACA,SAAA,SAAS,EAAE,CAAC;AACrB;;ACrBgB,SAAA,oBAAoB,CAAC,SAA2B,EAAE,QAAkC,EAAA;AAChG,IAAA,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAEe,SAAA,gBAAgB,CAAC,SAA2B,EAAE,QAAkC,EAAA;AAC5F,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAEe,SAAA,gBAAgB,CAAC,SAA2B,EAAE,QAAkC,EAAA;AAC5F,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,SAA2B,EAAE,QAAsC,EAAA;AACjG,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AACxC,IAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AACtB,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,YAAY;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CACD,SAAS,CAAC,CAAC,MAAM,KAAI;AACjB,QAAA,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACpC,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAE,EAAA,EAAA,IAAI,EAAE,CAAA,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,OAAO,MAAK;AACR,YAAA,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3B,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,SAAC,CAAC;AACN,KAAC,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CACtB;AACA,SAAA,SAAS,EAAE,CAAC;AACrB;;ACTgB,SAAA,oBAAoB,CAChC,EAAiC,EACjC,WAAqC,EAAA;AAErC,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAExC,IAAA,IAAI,GAAG,GAAG,YAAY,EAAW,CAAC;AAElC,IAAA,IAAI,WAAW;QAAE,GAAG,GAAG,WAAW,CAAC;IAEnC,cAAc,CAAC,MAAK;QAChB,IAAI,CAAC,GAAG,CAAC,aAAa;YAAE,GAAG,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAa,CAAC;AAChF,KAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAK;QAChB,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;AAE5G,QAAA,aAAa,CAAC;AACV,YAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtB,YAAA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,YAAA,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACjC,YAAA,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;SACxD,CAAC;aACG,IAAI,CACD,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAI;AAC3B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACvD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnE,YAAA,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;gBAAE,OAAO;YAEhF,MAAM,CAAC,iBAAiB,CAAC;AACrB,gBAAA,KAAK,EAAE;oBACH,eAAe;oBACf,UAAsB;oBACtB,UAAU;oBACV,gBAAgB;oBAChB,cAAc;oBACd,WAAW;AACd,iBAAA;gBACD,IAAI;AACP,aAAA,CAAC,CAAC;YAEH,OAAO,MAAM,MAAM,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,SAAC,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CACtB;AACA,aAAA,SAAS,EAAE,CAAC;AACrB,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,GAAG,GAAG;AACR,QAAA,gBAAgB,EAAE,CAAC,KAAa,EAAE,UAAkB,KAAI;YACpD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,MAAM,CAAC,8BAA8B,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACvF;AACD,QAAA,QAAQ,EAAE,CAAC,KAAa,EAAE,UAAkB,KAAI;YAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,MAAM,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/E;AACD,QAAA,gBAAgB,EAAE,CAAC,KAAa,EAAE,UAAkB,KAAI;YACpD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,MAAM,CAAC,8BAA8B,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACvF;AACD,QAAA,OAAO,EAAE;AACL,YAAA,IAAI,SAAS,GAAA;gBACT,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAC9C,gBAAA,OAAO,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;aAC5F;AACJ,SAAA;QACD,MAAM,EAAE,MAAK;YACT,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,IAAI,MAAM,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACjD;KAC2B,CAAC;AAEjC,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACxB;;SCxFgB,YAAY,CAIxB,KAA+B,EAC/B,KAA+B,EAC/B,MAAyB,EAAA;AAEzB,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,IAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AACtB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAExC,IAAA,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC5F,SAAA,IAAI,CACD,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAI;AACjC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,KAAC,CAAC,EACF,SAAS,CAAC,QAAQ,CAAC,CACtB;AACA,SAAA,SAAS,EAAE,CAAC;AAEjB,IAAA,MAAM,GAAG,GAAG;AACR,QAAA,UAAU,EAAE,CAAC,KAAa,KAAI;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACnD;AACD,QAAA,aAAa,EAAE,CAAC,KAAa,KAAI;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACtD;AACD,QAAA,YAAY,EAAE,CAAC,KAAa,KAAI;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACrD;QACD,MAAM,EAAE,MAAK;YACT,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnC,YAAA,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACjC;KACa,CAAC;AAEnB,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACjC;;AClEA;;AAEG;;;;"}
|