angular-three-soba 2.0.0-beta.255 → 2.0.0-beta.257
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/abstractions/README.md +46 -0
- package/abstractions/index.d.ts +2 -0
- package/abstractions/lib/edges.d.ts +1 -1
- package/abstractions/lib/gradient-texture.d.ts +24 -0
- package/abstractions/lib/helper.d.ts +25 -0
- package/abstractions/lib/text.d.ts +1 -1
- package/esm2022/abstractions/index.mjs +3 -1
- package/esm2022/abstractions/lib/edges.mjs +7 -3
- package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
- package/esm2022/abstractions/lib/helper.mjs +80 -0
- package/esm2022/materials/lib/mesh-refraction-material.mjs +34 -4
- package/esm2022/materials/lib/mesh-transmission-material.mjs +3 -3
- package/esm2022/shaders/index.mjs +2 -1
- package/esm2022/shaders/lib/caustics.mjs +174 -0
- package/esm2022/staging/index.mjs +2 -1
- package/esm2022/staging/lib/accumulative-shadows.mjs +75 -195
- package/esm2022/staging/lib/caustics.mjs +320 -0
- package/esm2022/staging/lib/randomized-lights.mjs +17 -22
- package/fesm2022/angular-three-soba-abstractions.mjs +179 -15
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +32 -3
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +173 -2
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +409 -222
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/package.json +23 -20
- package/shaders/index.d.ts +1 -0
- package/shaders/lib/caustics.d.ts +96 -0
- package/shaders/lib/mesh-refraction-material.d.ts +2 -2
- package/staging/README.md +49 -0
- package/staging/index.d.ts +1 -0
- package/staging/lib/accumulative-shadows.d.ts +24 -55
- package/staging/lib/caustics.d.ts +49 -0
- package/staging/lib/center.d.ts +2 -2
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/lightformer.d.ts +1 -1
- package/staging/lib/randomized-lights.d.ts +3 -4
- package/staging/lib/stage.d.ts +1 -1
package/abstractions/README.md
CHANGED
|
@@ -25,6 +25,9 @@ npm install troika-three-text
|
|
|
25
25
|
- [NgtsCatmullRomLine](#ngtscatmullromline)
|
|
26
26
|
- [NgtsEdges](#ngtsedges)
|
|
27
27
|
- [NgtsPrismGeometry](#ngtsprismgeometry)
|
|
28
|
+
- [NgtsGradientTexture](#ngtsgradienttexture)
|
|
29
|
+
- [injectHelper](#injecthelper)
|
|
30
|
+
- [NgtsHelper](#ngtshelper)
|
|
28
31
|
|
|
29
32
|
## NgtsGrid
|
|
30
33
|
|
|
@@ -231,3 +234,46 @@ Abstracts [THREE.ExtrudeGeometry](https://threejs.org/docs/#api/en/geometries/Ex
|
|
|
231
234
|
<ngt-mesh-basic-material />
|
|
232
235
|
</ngt-mesh>
|
|
233
236
|
```
|
|
237
|
+
|
|
238
|
+
## NgtsGradientTexture
|
|
239
|
+
|
|
240
|
+
A declarative `THREE.Texture` which attaches to "map" by default. You can use this to create gradient backgrounds.
|
|
241
|
+
|
|
242
|
+
### Object Inputs (NgtsGradientTextureOptions)
|
|
243
|
+
|
|
244
|
+
| Property | Description | Default Value |
|
|
245
|
+
| ------------------- | ------------------------------------------------------- | ------------- |
|
|
246
|
+
| `stops` | Gradient stops array. | required |
|
|
247
|
+
| `colors` | Gradient colors array. Must be the same size as `stops` | required |
|
|
248
|
+
| `type` | Gradient type. Can be `'linear'` or `'radial'`. | `'linear'` |
|
|
249
|
+
| `size` | Texture size. | `1024` |
|
|
250
|
+
| `width` | Texture width. | `16` |
|
|
251
|
+
| `innerCircleRadius` | Inner circle radius for radial gradients. | `0` |
|
|
252
|
+
| `outerCircleRadius` | Outer circle radius for radial gradients. | `auto` |
|
|
253
|
+
|
|
254
|
+
```html
|
|
255
|
+
<ngt-mesh-basic-material>
|
|
256
|
+
<ngts-gradient-texture [stops]="[0, 0.5, 1]" [colors]="['red', 'green', 'blue']" />
|
|
257
|
+
</ngt-mesh-basic-material>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## `injectHelper`
|
|
261
|
+
|
|
262
|
+
A custom inject function to add helpers to existing nodes in the scene. It handles removal of the helper on destroy and auto-updates it by default.
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
class MyCmp {
|
|
266
|
+
mesh = viewChild.required<ElementRef<Mesh>>('mesh');
|
|
267
|
+
helper = injectHelper(this.mesh, () => BoxHelper, { args: ['cyan'] });
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### `NgtsHelper`
|
|
272
|
+
|
|
273
|
+
A declarative way to add helpers to existing nodes in the scene. It handles removal of the helper on destroy and auto-updates it by default.
|
|
274
|
+
|
|
275
|
+
```html
|
|
276
|
+
<ngt-mesh>
|
|
277
|
+
<ngts-helper [type]="BoxHelper" [options]="['cyan']" />
|
|
278
|
+
</ngt-mesh>
|
|
279
|
+
```
|
package/abstractions/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './lib/catmull-rom-line';
|
|
2
2
|
export * from './lib/cubic-bezier-line';
|
|
3
3
|
export * from './lib/edges';
|
|
4
|
+
export * from './lib/gradient-texture';
|
|
4
5
|
export * from './lib/grid';
|
|
6
|
+
export * from './lib/helper';
|
|
5
7
|
export * from './lib/line';
|
|
6
8
|
export * from './lib/prism-geometry';
|
|
7
9
|
export * from './lib/quadratic-bezier-line';
|
|
@@ -846,5 +846,5 @@ export declare class NgtsEdges {
|
|
|
846
846
|
private memoizedThreshold?;
|
|
847
847
|
constructor();
|
|
848
848
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsEdges, never>;
|
|
849
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsEdges, "ngts-edges", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never,
|
|
849
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsEdges, "ngts-edges", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
850
850
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NgtTexture } from 'angular-three';
|
|
2
|
+
import { ColorRepresentation } from 'three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface NgtsGradientTextureOptions extends Partial<Omit<NgtTexture, 'type'>> {
|
|
5
|
+
size: number;
|
|
6
|
+
width: number;
|
|
7
|
+
type: 'linear' | 'radial';
|
|
8
|
+
innerCircleRadius: number;
|
|
9
|
+
outerCircleRadius: string | number;
|
|
10
|
+
}
|
|
11
|
+
export declare class NgtsGradientTexture {
|
|
12
|
+
attach: import("@angular/core").InputSignal<string>;
|
|
13
|
+
stops: import("@angular/core").InputSignal<number[]>;
|
|
14
|
+
colors: import("@angular/core").InputSignal<ColorRepresentation[]>;
|
|
15
|
+
options: import("@angular/core").InputSignalWithTransform<NgtsGradientTextureOptions, "" | Partial<NgtsGradientTextureOptions>>;
|
|
16
|
+
parameters: import("@angular/core").Signal<Omit<NgtsGradientTextureOptions, "type" | "size" | "width" | "innerCircleRadius" | "outerCircleRadius">>;
|
|
17
|
+
private store;
|
|
18
|
+
gl: import("@angular/core").Signal<import("three").WebGLRenderer>;
|
|
19
|
+
private document;
|
|
20
|
+
canvas: import("@angular/core").Signal<HTMLCanvasElement>;
|
|
21
|
+
constructor();
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGradientTexture, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGradientTexture, "ngts-gradient-texture", never, { "attach": { "alias": "attach"; "required": false; "isSignal": true; }; "stops": { "alias": "stops"; "required": true; "isSignal": true; }; "colors": { "alias": "colors"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ElementRef, Injector } from '@angular/core';
|
|
2
|
+
import { Object3D } from 'three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
type HelperArgs<T> = T extends [infer _, ...infer R] ? R : never;
|
|
5
|
+
export declare function injectHelper<TConstructor extends new (...args: any[]) => Object3D, THelperInstance extends InstanceType<TConstructor> & {
|
|
6
|
+
update: () => void;
|
|
7
|
+
dispose: () => void;
|
|
8
|
+
}>(object: () => ElementRef<Object3D> | Object3D | undefined | null, helperConstructor: () => TConstructor, { injector, args, }?: {
|
|
9
|
+
injector?: Injector;
|
|
10
|
+
args?: () => HelperArgs<TConstructor>;
|
|
11
|
+
}): import("@angular/core").Signal<THelperInstance | null>;
|
|
12
|
+
export declare class NgtsHelper<TConstructor extends new (...args: any[]) => Object3D> {
|
|
13
|
+
type: import("@angular/core").InputSignal<TConstructor>;
|
|
14
|
+
options: import("@angular/core").InputSignal<HelperArgs<TConstructor>>;
|
|
15
|
+
helperRef: import("@angular/core").Signal<ElementRef<Object3D<import("three").Object3DEventMap>>>;
|
|
16
|
+
private parent;
|
|
17
|
+
helper: import("@angular/core").Signal<(InstanceType<TConstructor> & {
|
|
18
|
+
update: () => void;
|
|
19
|
+
dispose: () => void;
|
|
20
|
+
}) | null>;
|
|
21
|
+
constructor();
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsHelper<any>, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsHelper<any>, "ngts-helper", never, { "type": { "alias": "type"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -43,7 +43,7 @@ export declare class NgtsText {
|
|
|
43
43
|
private invalidate;
|
|
44
44
|
private characters;
|
|
45
45
|
font: import("@angular/core").Signal<string | undefined>;
|
|
46
|
-
anchorX: import("@angular/core").Signal<number | "
|
|
46
|
+
anchorX: import("@angular/core").Signal<number | "center" | "left" | "right">;
|
|
47
47
|
anchorY: import("@angular/core").Signal<number | "top" | "top-baseline" | "middle" | "bottom-baseline" | "bottom">;
|
|
48
48
|
sdfGlyphSize: import("@angular/core").Signal<number>;
|
|
49
49
|
fontSize: import("@angular/core").Signal<number>;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export * from './lib/catmull-rom-line';
|
|
2
2
|
export * from './lib/cubic-bezier-line';
|
|
3
3
|
export * from './lib/edges';
|
|
4
|
+
export * from './lib/gradient-texture';
|
|
4
5
|
export * from './lib/grid';
|
|
6
|
+
export * from './lib/helper';
|
|
5
7
|
export * from './lib/line';
|
|
6
8
|
export * from './lib/prism-geometry';
|
|
7
9
|
export * from './lib/quadratic-bezier-line';
|
|
8
10
|
export * from './lib/text';
|
|
9
11
|
export * from './lib/text-3d';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYXRtdWxsLXJvbS1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmljLWJlemllci1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dyYWRpZW50LXRleHR1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcmlzbS1nZW9tZXRyeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LTNkJztcbiJdfQ==
|
|
@@ -48,7 +48,9 @@ export class NgtsEdges {
|
|
|
48
48
|
}
|
|
49
49
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsEdges, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
50
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.6", type: NgtsEdges, isStandalone: true, selector: "ngts-edges", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
51
|
-
<ngts-line [points]="tmpPoints" [options]="lineOptions()"
|
|
51
|
+
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
52
|
+
<ng-content />
|
|
53
|
+
</ngts-line>
|
|
52
54
|
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
53
55
|
}
|
|
54
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsEdges, decorators: [{
|
|
@@ -57,10 +59,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
57
59
|
selector: 'ngts-edges',
|
|
58
60
|
standalone: true,
|
|
59
61
|
template: `
|
|
60
|
-
<ngts-line [points]="tmpPoints" [options]="lineOptions()"
|
|
62
|
+
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
63
|
+
<ng-content />
|
|
64
|
+
</ngts-line>
|
|
61
65
|
`,
|
|
62
66
|
imports: [NgtsLine],
|
|
63
67
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
64
68
|
}]
|
|
65
69
|
}], ctorParameters: () => [] });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZWRnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBd0QsYUFBYSxFQUFRLE1BQU0sT0FBTyxDQUFDO0FBRWxHLE9BQU8sRUFBNkIsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQVk3RCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFhRixNQUFNLE9BQU8sU0FBUztJQVlyQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU1uQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxFQUFFO29CQUFFLE9BQU87Z0JBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQVUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRXRCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQztnQkFDMUYsSUFBSSxNQUFNO29CQUFFLE9BQU87Z0JBRW5CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7Z0JBRW5DLE1BQU0sTUFBTSxHQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFxQjtxQkFDL0YsS0FBcUIsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQTNDVyxTQUFTO2tHQUFULFNBQVMsc1BBT0ssUUFBUSxnRUFmeEI7Ozs7RUFJVCw0REFDUyxRQUFROzsyRkFHTixTQUFTO2tCQVhyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBnZXRMb2NhbFN0YXRlLCBOZ3RNZXNoLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvclJlcHJlc2VudGF0aW9uLCBFZGdlc0dlb21ldHJ5LCBNZXNoIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZU1hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RMaW5lMiwgTmd0TGluZU1hdGVyaWFsLCBOZ3RzTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCB0eXBlIE5ndHNFZGdlc09wdGlvbnMgPSBQYXJ0aWFsPE5ndE1lc2g+ICYge1xuXHR0aHJlc2hvbGQ/OiBudW1iZXI7XG5cdGxpbmVXaWR0aD86IG51bWJlcjtcbn0gJiBPbWl0PExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsICd2ZXJ0ZXhDb2xvcnMnIHwgJ2NvbG9yJz4gJlxuXHRPbWl0PFBhcnRpYWw8Tmd0TGluZTI+LCAnZ2VvbWV0cnknPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycyc+ICYge1xuXHRcdGdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdFx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR9O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0VkZ2VzT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHR0aHJlc2hvbGQ6IDE1LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtbGluZSBbcG9pbnRzXT1cInRtcFBvaW50c1wiIFtvcHRpb25zXT1cImxpbmVPcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzTGluZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3RocmVzaG9sZCcsICdnZW9tZXRyeSddKTtcblxuXHRwcm90ZWN0ZWQgbGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgcmF5Y2FzdDogKCkgPT4gbnVsbCB9KSk7XG5cdHByb3RlY3RlZCB0bXBQb2ludHMgPSBbMCwgMCwgMCwgMSwgMCwgMF07XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBtZW1vaXplZEdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdHByaXZhdGUgbWVtb2l6ZWRUaHJlc2hvbGQ/OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpbmUgPSB0aGlzLmxpbmUoKS5saW5lKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbGluZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShsaW5lKTtcblx0XHRcdFx0aWYgKCFsUykgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGxTLnBhcmVudCgpIGFzIE1lc2g7XG5cdFx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgeyBnZW9tZXRyeTogZXhwbGljaXRHZW9tZXRyeSwgdGhyZXNob2xkIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBleHBsaWNpdEdlb21ldHJ5ID8/IHBhcmVudC5nZW9tZXRyeTtcblx0XHRcdFx0aWYgKCFnZW9tZXRyeSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtb2l6ZWRHZW9tZXRyeSA9PT0gZ2VvbWV0cnkgJiYgdGhpcy5tZW1vaXplZFRocmVzaG9sZCA9PT0gdGhyZXNob2xkO1xuXHRcdFx0XHRpZiAoY2FjaGVkKSByZXR1cm47XG5cblx0XHRcdFx0dGhpcy5tZW1vaXplZEdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0XHRcdHRoaXMubWVtb2l6ZWRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG5cblx0XHRcdFx0Y29uc3QgcG9pbnRzID0gKG5ldyBFZGdlc0dlb21ldHJ5KGdlb21ldHJ5LCB0aHJlc2hvbGQpLmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10gYXMgQnVmZmVyQXR0cmlidXRlKVxuXHRcdFx0XHRcdC5hcnJheSBhcyBGbG9hdDMyQXJyYXk7XG5cdFx0XHRcdGxpbmUuZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvaW50cyk7XG5cdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10pO1xuXHRcdFx0XHRjaGVja05lZWRzVXBkYXRlKGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VFbmQnXSk7XG5cdFx0XHRcdGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, untracked, } from '@angular/core';
|
|
3
|
+
import { extend, injectStore, NgtArgs, omit } from 'angular-three';
|
|
4
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
+
import { CanvasTexture, Color } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
size: 1024,
|
|
9
|
+
width: 16,
|
|
10
|
+
type: 'linear',
|
|
11
|
+
innerCircleRadius: 0,
|
|
12
|
+
outerCircleRadius: 'auto',
|
|
13
|
+
};
|
|
14
|
+
export class NgtsGradientTexture {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.attach = input('map');
|
|
17
|
+
this.stops = input.required();
|
|
18
|
+
this.colors = input.required();
|
|
19
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
20
|
+
this.parameters = omit(this.options, ['size', 'width', 'type', 'innerCircleRadius', 'outerCircleRadius']);
|
|
21
|
+
this.store = injectStore();
|
|
22
|
+
this.gl = this.store.select('gl');
|
|
23
|
+
this.document = inject(DOCUMENT);
|
|
24
|
+
this.canvas = computed(() => {
|
|
25
|
+
const canvas = this.document.createElement('canvas');
|
|
26
|
+
const context = canvas.getContext('2d');
|
|
27
|
+
const [{ width, size, type, outerCircleRadius, innerCircleRadius }, stops, colors] = [
|
|
28
|
+
untracked(this.options),
|
|
29
|
+
this.stops(),
|
|
30
|
+
this.colors(),
|
|
31
|
+
];
|
|
32
|
+
canvas.width = width;
|
|
33
|
+
canvas.height = size;
|
|
34
|
+
let gradient;
|
|
35
|
+
if (type === 'linear') {
|
|
36
|
+
gradient = context.createLinearGradient(0, 0, 0, size);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const canvasCenterX = canvas.width / 2;
|
|
40
|
+
const canvasCenterY = canvas.height / 2;
|
|
41
|
+
const radius = outerCircleRadius !== 'auto'
|
|
42
|
+
? Math.abs(Number(outerCircleRadius))
|
|
43
|
+
: Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);
|
|
44
|
+
gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);
|
|
45
|
+
}
|
|
46
|
+
const tempColor = new Color(); // reuse instance for performance
|
|
47
|
+
let i = stops.length;
|
|
48
|
+
while (i--) {
|
|
49
|
+
gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());
|
|
50
|
+
}
|
|
51
|
+
context.save();
|
|
52
|
+
context.fillStyle = gradient;
|
|
53
|
+
context.fillRect(0, 0, width, size);
|
|
54
|
+
context.restore();
|
|
55
|
+
return canvas;
|
|
56
|
+
});
|
|
57
|
+
extend({ CanvasTexture });
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsGradientTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtsGradientTexture, isStandalone: true, selector: "ngts-gradient-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, stops: { classPropertyName: "stops", publicName: "stops", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
61
|
+
<ngt-canvas-texture
|
|
62
|
+
*args="[canvas()]"
|
|
63
|
+
[attach]="attach()"
|
|
64
|
+
[colorSpace]="gl().outputColorSpace"
|
|
65
|
+
[parameters]="parameters()"
|
|
66
|
+
>
|
|
67
|
+
<ng-content />
|
|
68
|
+
</ngt-canvas-texture>
|
|
69
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsGradientTexture, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{
|
|
74
|
+
selector: 'ngts-gradient-texture',
|
|
75
|
+
standalone: true,
|
|
76
|
+
template: `
|
|
77
|
+
<ngt-canvas-texture
|
|
78
|
+
*args="[canvas()]"
|
|
79
|
+
[attach]="attach()"
|
|
80
|
+
[colorSpace]="gl().outputColorSpace"
|
|
81
|
+
[parameters]="parameters()"
|
|
82
|
+
>
|
|
83
|
+
<ng-content />
|
|
84
|
+
</ngt-canvas-texture>
|
|
85
|
+
`,
|
|
86
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
87
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
88
|
+
imports: [NgtArgs],
|
|
89
|
+
}]
|
|
90
|
+
}], ctorParameters: () => [] });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmFkaWVudC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUF1QixNQUFNLE9BQU8sQ0FBQzs7QUFVbEUsTUFBTSxjQUFjLEdBQStCO0lBQ2xELElBQUksRUFBRSxJQUFJO0lBQ1YsS0FBSyxFQUFFLEVBQUU7SUFDVCxJQUFJLEVBQUUsUUFBUTtJQUNkLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEVBQUUsTUFBTTtDQUN6QixDQUFDO0FBbUJGLE1BQU0sT0FBTyxtQkFBbUI7SUEwRC9CO1FBekRBLFdBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7UUFDeEMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQThCLENBQUM7UUFDdEQsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFFN0YsVUFBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ3BGLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxNQUFNLEVBQUU7YUFDYixDQUFDO1lBQ0YsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFckIsSUFBSSxRQUF3QixDQUFDO1lBRTdCLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN2QixRQUFRLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDUCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sTUFBTSxHQUNYLGlCQUFpQixLQUFLLE1BQU07b0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxHQUFHLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkQsUUFBUSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FDdEMsYUFBYSxFQUNiLGFBQWEsRUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQzNCLGFBQWEsRUFDYixhQUFhLEVBQ2IsTUFBTSxDQUNOLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztZQUVoRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWxCLE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OEdBNURXLG1CQUFtQjtrR0FBbkIsbUJBQW1CLHVrQkFkckI7Ozs7Ozs7OztFQVNULDREQUdTLE9BQU87OzJGQUVMLG1CQUFtQjtrQkFqQi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7O0VBU1Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdFN0b3JlLCBOZ3RBcmdzLCBOZ3RUZXh0dXJlLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYW52YXNUZXh0dXJlLCBDb2xvciwgQ29sb3JSZXByZXNlbnRhdGlvbiB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzR3JhZGllbnRUZXh0dXJlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8T21pdDxOZ3RUZXh0dXJlLCAndHlwZSc+PiB7XG5cdHNpemU6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0dHlwZTogJ2xpbmVhcicgfCAncmFkaWFsJztcblx0aW5uZXJDaXJjbGVSYWRpdXM6IG51bWJlcjtcblx0b3V0ZXJDaXJjbGVSYWRpdXM6IHN0cmluZyB8IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNHcmFkaWVudFRleHR1cmVPcHRpb25zID0ge1xuXHRzaXplOiAxMDI0LFxuXHR3aWR0aDogMTYsXG5cdHR5cGU6ICdsaW5lYXInLFxuXHRpbm5lckNpcmNsZVJhZGl1czogMCxcblx0b3V0ZXJDaXJjbGVSYWRpdXM6ICdhdXRvJyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZ3JhZGllbnQtdGV4dHVyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1jYW52YXMtdGV4dHVyZVxuXHRcdFx0KmFyZ3M9XCJbY2FudmFzKCldXCJcblx0XHRcdFthdHRhY2hdPVwiYXR0YWNoKClcIlxuXHRcdFx0W2NvbG9yU3BhY2VdPVwiZ2woKS5vdXRwdXRDb2xvclNwYWNlXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1jYW52YXMtdGV4dHVyZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR3JhZGllbnRUZXh0dXJlIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hcCcpO1xuXHRzdG9wcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PG51bWJlcj4+KCk7XG5cdGNvbG9ycyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PENvbG9yUmVwcmVzZW50YXRpb24+PigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydzaXplJywgJ3dpZHRoJywgJ3R5cGUnLCAnaW5uZXJDaXJjbGVSYWRpdXMnLCAnb3V0ZXJDaXJjbGVSYWRpdXMnXSk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG5cdGNhbnZhcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cdFx0Y29uc3QgW3sgd2lkdGgsIHNpemUsIHR5cGUsIG91dGVyQ2lyY2xlUmFkaXVzLCBpbm5lckNpcmNsZVJhZGl1cyB9LCBzdG9wcywgY29sb3JzXSA9IFtcblx0XHRcdHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpLFxuXHRcdFx0dGhpcy5zdG9wcygpLFxuXHRcdFx0dGhpcy5jb2xvcnMoKSxcblx0XHRdO1xuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXHRcdGNhbnZhcy5oZWlnaHQgPSBzaXplO1xuXG5cdFx0bGV0IGdyYWRpZW50OiBDYW52YXNHcmFkaWVudDtcblxuXHRcdGlmICh0eXBlID09PSAnbGluZWFyJykge1xuXHRcdFx0Z3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIDAsIHNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjYW52YXNDZW50ZXJYID0gY2FudmFzLndpZHRoIC8gMjtcblx0XHRcdGNvbnN0IGNhbnZhc0NlbnRlclkgPSBjYW52YXMuaGVpZ2h0IC8gMjtcblx0XHRcdGNvbnN0IHJhZGl1cyA9XG5cdFx0XHRcdG91dGVyQ2lyY2xlUmFkaXVzICE9PSAnYXV0bydcblx0XHRcdFx0XHQ/IE1hdGguYWJzKE51bWJlcihvdXRlckNpcmNsZVJhZGl1cykpXG5cdFx0XHRcdFx0OiBNYXRoLnNxcnQoY2FudmFzQ2VudGVyWCAqKiAyICsgY2FudmFzQ2VudGVyWSAqKiAyKTtcblx0XHRcdGdyYWRpZW50ID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChcblx0XHRcdFx0Y2FudmFzQ2VudGVyWCxcblx0XHRcdFx0Y2FudmFzQ2VudGVyWSxcblx0XHRcdFx0TWF0aC5hYnMoaW5uZXJDaXJjbGVSYWRpdXMpLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJYLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJZLFxuXHRcdFx0XHRyYWRpdXMsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRlbXBDb2xvciA9IG5ldyBDb2xvcigpOyAvLyByZXVzZSBpbnN0YW5jZSBmb3IgcGVyZm9ybWFuY2VcblxuXHRcdGxldCBpID0gc3RvcHMubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChzdG9wc1tpXSwgdGVtcENvbG9yLnNldChjb2xvcnNbaV0pLmdldFN0eWxlKCkpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuc2F2ZSgpO1xuXHRcdGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG5cdFx0Y29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgc2l6ZSk7XG5cdFx0Y29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHRyZXR1cm4gY2FudmFzO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBDYW52YXNUZXh0dXJlIH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, signal, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { extend, getLocalState, injectBeforeRender, injectStore, resolveRef } from 'angular-three';
|
|
3
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
4
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
5
|
+
import { Object3D } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export function injectHelper(object, helperConstructor, { injector, args = () => [], } = {}) {
|
|
8
|
+
return assertInjector(injectHelper, injector, () => {
|
|
9
|
+
const autoEffect = injectAutoEffect();
|
|
10
|
+
const store = injectStore();
|
|
11
|
+
const scene = store.select('scene');
|
|
12
|
+
const helper = signal(null);
|
|
13
|
+
afterNextRender(() => {
|
|
14
|
+
autoEffect(() => {
|
|
15
|
+
let currentHelper = undefined;
|
|
16
|
+
const maybeObject3D = object();
|
|
17
|
+
if (!maybeObject3D)
|
|
18
|
+
return;
|
|
19
|
+
const object3D = resolveRef(maybeObject3D);
|
|
20
|
+
if (!object3D)
|
|
21
|
+
return;
|
|
22
|
+
currentHelper = new (helperConstructor())(object3D, ...args());
|
|
23
|
+
if (!currentHelper)
|
|
24
|
+
return;
|
|
25
|
+
untracked(() => {
|
|
26
|
+
helper.set(currentHelper);
|
|
27
|
+
});
|
|
28
|
+
// Prevent the helpers from blocking rays
|
|
29
|
+
currentHelper.traverse((child) => (child.raycast = () => null));
|
|
30
|
+
scene().add(currentHelper);
|
|
31
|
+
return () => {
|
|
32
|
+
helper.set(null);
|
|
33
|
+
scene().remove(currentHelper);
|
|
34
|
+
currentHelper.dispose?.();
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
injectBeforeRender(() => {
|
|
39
|
+
const currentHelper = helper();
|
|
40
|
+
if (currentHelper)
|
|
41
|
+
currentHelper.update();
|
|
42
|
+
});
|
|
43
|
+
return helper.asReadonly();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export class NgtsHelper {
|
|
47
|
+
constructor() {
|
|
48
|
+
this.type = input.required();
|
|
49
|
+
this.options = input([]);
|
|
50
|
+
this.helperRef = viewChild.required('helper');
|
|
51
|
+
this.parent = computed(() => {
|
|
52
|
+
const helper = this.helperRef().nativeElement;
|
|
53
|
+
if (!helper)
|
|
54
|
+
return;
|
|
55
|
+
const localState = getLocalState(helper);
|
|
56
|
+
if (!localState)
|
|
57
|
+
return;
|
|
58
|
+
return localState.parent();
|
|
59
|
+
});
|
|
60
|
+
this.helper = injectHelper(this.parent, this.type, { args: this.options });
|
|
61
|
+
extend({ Object3D });
|
|
62
|
+
}
|
|
63
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsHelper, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
64
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.6", type: NgtsHelper, isStandalone: true, selector: "ngts-helper", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "helperRef", first: true, predicate: ["helper"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
65
|
+
<ngt-object-3D #helper />
|
|
66
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsHelper, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{
|
|
71
|
+
standalone: true,
|
|
72
|
+
selector: 'ngts-helper',
|
|
73
|
+
template: `
|
|
74
|
+
<ngt-object-3D #helper />
|
|
75
|
+
`,
|
|
76
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
77
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
78
|
+
}]
|
|
79
|
+
}], ctorParameters: () => [] });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUd0QixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFJakMsTUFBTSxVQUFVLFlBQVksQ0FJM0IsTUFBZ0UsRUFDaEUsaUJBQXFDLEVBQ3JDLEVBQ0MsUUFBUSxFQUNSLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUF5QyxNQUNhLEVBQUU7SUFFdEUsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDbEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFFcEQsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksYUFBYSxHQUFnQyxTQUFTLENBQUM7Z0JBQzNELE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUUzQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRXRCLGFBQWEsR0FBRyxLQUFLLGlCQUFpQixFQUFVLEVBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLGFBQWE7b0JBQUUsT0FBTztnQkFFM0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztnQkFFSCx5Q0FBeUM7Z0JBQ3pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTNCLE9BQU8sR0FBRyxFQUFFO29CQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUIsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxhQUFhO2dCQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVdELE1BQU0sT0FBTyxVQUFVO0lBZ0J0QjtRQWZBLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFnQixDQUFDO1FBQ3RDLFlBQU8sR0FBRyxLQUFLLENBQTJCLEVBQXlDLENBQUMsQ0FBQztRQUVyRixjQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBdUIsUUFBUSxDQUFDLENBQUM7UUFFdkQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBQ3hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHckUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDOzhHQWxCVyxVQUFVO2tHQUFWLFVBQVUsMGJBTlo7O0VBRVQ7OzJGQUlXLFVBQVU7a0JBVHRCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7O0VBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5cbnR5cGUgSGVscGVyQXJnczxUPiA9IFQgZXh0ZW5kcyBbaW5mZXIgXywgLi4uaW5mZXIgUl0gPyBSIDogbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RIZWxwZXI8XG5cdFRDb25zdHJ1Y3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IE9iamVjdDNELFxuXHRUSGVscGVySW5zdGFuY2UgZXh0ZW5kcyBJbnN0YW5jZVR5cGU8VENvbnN0cnVjdG9yPiAmIHsgdXBkYXRlOiAoKSA9PiB2b2lkOyBkaXNwb3NlOiAoKSA9PiB2b2lkIH0sXG4+KFxuXHRvYmplY3Q6ICgpID0+IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0QgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRoZWxwZXJDb25zdHJ1Y3RvcjogKCkgPT4gVENvbnN0cnVjdG9yLFxuXHR7XG5cdFx0aW5qZWN0b3IsXG5cdFx0YXJncyA9ICgpID0+IFtdIGFzIHVua25vd24gYXMgSGVscGVyQXJnczxUQ29uc3RydWN0b3I+LFxuXHR9OiB7IGluamVjdG9yPzogSW5qZWN0b3I7IGFyZ3M/OiAoKSA9PiBIZWxwZXJBcmdzPFRDb25zdHJ1Y3Rvcj4gfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RIZWxwZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3Qgc2NlbmUgPSBzdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cblx0XHRjb25zdCBoZWxwZXIgPSBzaWduYWw8VEhlbHBlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGxldCBjdXJyZW50SGVscGVyOiBUSGVscGVySW5zdGFuY2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1heWJlT2JqZWN0M0QgPSBvYmplY3QoKTtcblx0XHRcdFx0aWYgKCFtYXliZU9iamVjdDNEKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0M0QgPSByZXNvbHZlUmVmKG1heWJlT2JqZWN0M0QpO1xuXHRcdFx0XHRpZiAoIW9iamVjdDNEKSByZXR1cm47XG5cblx0XHRcdFx0Y3VycmVudEhlbHBlciA9IG5ldyAoaGVscGVyQ29uc3RydWN0b3IoKSBhcyBhbnkpKG9iamVjdDNELCAuLi5hcmdzKCkpO1xuXHRcdFx0XHRpZiAoIWN1cnJlbnRIZWxwZXIpIHJldHVybjtcblxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGhlbHBlci5zZXQoY3VycmVudEhlbHBlcik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgdGhlIGhlbHBlcnMgZnJvbSBibG9ja2luZyByYXlzXG5cdFx0XHRcdGN1cnJlbnRIZWxwZXIudHJhdmVyc2UoKGNoaWxkKSA9PiAoY2hpbGQucmF5Y2FzdCA9ICgpID0+IG51bGwpKTtcblx0XHRcdFx0c2NlbmUoKS5hZGQoY3VycmVudEhlbHBlcik7XG5cblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRoZWxwZXIuc2V0KG51bGwpO1xuXHRcdFx0XHRcdHNjZW5lKCkucmVtb3ZlKGN1cnJlbnRIZWxwZXIpO1xuXHRcdFx0XHRcdGN1cnJlbnRIZWxwZXIuZGlzcG9zZT8uKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50SGVscGVyID0gaGVscGVyKCk7XG5cdFx0XHRpZiAoY3VycmVudEhlbHBlcikgY3VycmVudEhlbHBlci51cGRhdGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBoZWxwZXIuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNlbGVjdG9yOiAnbmd0cy1oZWxwZXInLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3Qtb2JqZWN0LTNEICNoZWxwZXIgLz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0hlbHBlcjxUQ29uc3RydWN0b3IgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBPYmplY3QzRD4ge1xuXHR0eXBlID0gaW5wdXQucmVxdWlyZWQ8VENvbnN0cnVjdG9yPigpO1xuXHRvcHRpb25zID0gaW5wdXQ8SGVscGVyQXJnczxUQ29uc3RydWN0b3I+PihbXSBhcyB1bmtub3duIGFzIEhlbHBlckFyZ3M8VENvbnN0cnVjdG9yPik7XG5cblx0aGVscGVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8T2JqZWN0M0Q+PignaGVscGVyJyk7XG5cblx0cHJpdmF0ZSBwYXJlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgaGVscGVyID0gdGhpcy5oZWxwZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghaGVscGVyKSByZXR1cm47XG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaGVscGVyKTtcblx0XHRpZiAoIWxvY2FsU3RhdGUpIHJldHVybjtcblx0XHRyZXR1cm4gbG9jYWxTdGF0ZS5wYXJlbnQoKTtcblx0fSk7XG5cblx0aGVscGVyID0gaW5qZWN0SGVscGVyKHRoaXMucGFyZW50LCB0aGlzLnR5cGUsIHsgYXJnczogdGhpcy5vcHRpb25zIH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE9iamVjdDNEIH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input, untracked, viewChild, } from '@angular/core';
|
|
2
|
-
import { injectStore, NgtArgs, omit, pick } from 'angular-three';
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { getLocalState, injectBeforeRender, injectStore, NgtArgs, omit, pick, } from 'angular-three';
|
|
3
3
|
import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
|
|
4
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
5
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
6
|
+
import { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
const defaultOptions = {
|
|
7
9
|
bounces: 2,
|
|
@@ -28,7 +30,11 @@ export class NgtsMeshRefractionMaterial {
|
|
|
28
30
|
this.resolution = computed(() => [this.size().width, this.size().height]);
|
|
29
31
|
this.defines = computed(() => {
|
|
30
32
|
const temp = {};
|
|
31
|
-
const [envMap, aberrationStrength, fastChroma] = [
|
|
33
|
+
const [envMap, aberrationStrength, fastChroma] = [
|
|
34
|
+
untracked(this.envMap),
|
|
35
|
+
this.aberrationStrength(),
|
|
36
|
+
this.fastChroma(),
|
|
37
|
+
];
|
|
32
38
|
const isCubeMap = isCubeTexture(envMap);
|
|
33
39
|
const w = (isCubeMap ? envMap.image[0]?.width : envMap.image.width) ?? 1024;
|
|
34
40
|
const cubeSize = w / 4;
|
|
@@ -62,6 +68,30 @@ export class NgtsMeshRefractionMaterial {
|
|
|
62
68
|
this.defineKeys();
|
|
63
69
|
return new MeshRefractionMaterial();
|
|
64
70
|
});
|
|
71
|
+
const autoEffect = injectAutoEffect();
|
|
72
|
+
afterNextRender(() => {
|
|
73
|
+
autoEffect(() => {
|
|
74
|
+
const material = this.materialRef()?.nativeElement;
|
|
75
|
+
if (!material)
|
|
76
|
+
return;
|
|
77
|
+
const localState = getLocalState(material);
|
|
78
|
+
if (!localState)
|
|
79
|
+
return;
|
|
80
|
+
const parent = untracked(localState.parent);
|
|
81
|
+
const geometry = parent.geometry;
|
|
82
|
+
if (geometry) {
|
|
83
|
+
material.bvh = new MeshBVHUniformStruct();
|
|
84
|
+
material.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { strategy: SAH }));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
injectBeforeRender(({ camera }) => {
|
|
89
|
+
const material = this.materialRef()?.nativeElement;
|
|
90
|
+
if (material) {
|
|
91
|
+
material.viewMatrixInverse = camera.matrixWorld;
|
|
92
|
+
material.projectionMatrixInverse = camera.projectionMatrixInverse;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
65
95
|
inject(DestroyRef).onDestroy(() => {
|
|
66
96
|
const material = this.materialRef()?.nativeElement;
|
|
67
97
|
if (material) {
|
|
@@ -111,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
111
141
|
imports: [NgtArgs],
|
|
112
142
|
}]
|
|
113
143
|
}], ctorParameters: () => [] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbGliL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFVBQVUsRUFFVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsT0FBTyxFQUFxQixJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFrQnZELE1BQU0sY0FBYyxHQUFzQztJQUN6RCxPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsT0FBTyxFQUFFLENBQUM7SUFDVixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLEtBQUssRUFBRSxPQUFPO0lBQ2QsVUFBVSxFQUFFLElBQUk7Q0FDaEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLEdBQTBCO0lBQ2hELE9BQU8sR0FBRyxJQUFLLEdBQW1CLENBQUMsYUFBYSxDQUFDO0FBQ2xELENBQUM7QUF1QkQsTUFBTSxPQUFPLDBCQUEwQjtJQXlEdEM7UUF4REEsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXlCLENBQUM7UUFDakQsV0FBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFD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Y3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUsIE5ndEFueVJlY29yZCwgTmd0QXJncywgTmd0U2hhZGVyTWF0ZXJpYWwsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDb2xvclJlcHJlc2VudGF0aW9uLCBDdWJlVGV4dHVyZSwgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndFNoYWRlck1hdGVyaWFsPiB7XG5cdC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG5cdGJvdW5jZXM6IG51bWJlcjtcblx0LyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuXHRpb3I6IG51bWJlcjtcblx0LyoqIEZyZXNuZWwgKHN0cmlwIGxpZ2h0KSwgMCAqL1xuXHRmcmVzbmVsOiBudW1iZXI7XG5cdC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG5cdGFiZXJyYXRpb25TdHJlbmd0aDogbnVtYmVyO1xuXHQvKiogQ29sb3IsIHdoaXRlICovXG5cdGNvbG9yOiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHQvKiogSWYgdGhpcyBpcyBvbiBpdCB1c2VzIGZld2VyIHJheSBjYXN0cyBmb3IgdGhlIFJHQiBzaGlmdCBzYWNyaWZpY2luZyBwaHlzaWNhbCBhY2N1cmFjeSwgdHJ1ZSAqL1xuXHRmYXN0Q2hyb21hOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxPcHRpb25zID0ge1xuXHRib3VuY2VzOiAyLFxuXHRpb3I6IDIuNCxcblx0ZnJlc25lbDogMCxcblx0YWJlcnJhdGlvblN0cmVuZ3RoOiAwLFxuXHRjb2xvcjogJ3doaXRlJyxcblx0ZmFzdENocm9tYTogdHJ1ZSxcbn07XG5cbmZ1bmN0aW9uIGlzQ3ViZVRleHR1cmUoZGVmOiBDdWJlVGV4dHVyZSB8IFRleHR1cmUpOiBkZWYgaXMgQ3ViZVRleHR1cmUge1xuXHRyZXR1cm4gZGVmICYmIChkZWYgYXMgQ3ViZVRleHR1cmUpLmlzQ3ViZVRleHR1cmU7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZVxuXHRcdFx0KmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIlxuXHRcdFx0I21hdGVyaWFsXG5cdFx0XHRbYXR0YWNoXT1cImF0dGFjaCgpXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0XHRbZW52TWFwXT1cImVudk1hcCgpXCJcblx0XHRcdFthYmVycmF0aW9uU3RyZW5ndGhdPVwiYWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuXHRcdFx0W3Jlc29sdXRpb25dPVwicmVzb2x1dGlvbigpXCJcblx0XHRcdFtkZWZpbmVzXT1cImRlZmluZXMoKVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWwge1xuXHRlbnZNYXAgPSBpbnB1dC5yZXF1aXJlZDxDdWJlVGV4dHVyZSB8IFRleHR1cmU+KCk7XG5cdGF0dGFjaCA9IGlucHV0KCdtYXRlcmlhbCcpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydmYXN0Q2hyb21hJywgJ2FiZXJyYXRpb25TdHJlbmd0aCddKTtcblxuXHRwcml2YXRlIGZhc3RDaHJvbWEgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Zhc3RDaHJvbWEnKTtcblx0YWJlcnJhdGlvblN0cmVuZ3RoID0gcGljayh0aGlzLm9wdGlvbnMsICdhYmVycmF0aW9uU3RyZW5ndGgnKTtcblxuXHRtYXRlcmlhbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+PignbWF0ZXJpYWwnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRyZXNvbHV0aW9uID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMuc2l6ZSgpLndpZHRoLCB0aGlzLnNpemUoKS5oZWlnaHRdKTtcblx0ZGVmaW5lcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0ZW1wID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblx0XHRjb25zdCBbZW52TWFwLCBhYmVycmF0aW9uU3RyZW5ndGgsIGZhc3RDaHJvbWFdID0gW3RoaXMuZW52TWFwKCksIHRoaXMuYWJlcnJhdGlvblN0cmVuZ3RoKCksIHRoaXMuZmFzdENocm9tYSgpXTtcblx0XHRjb25zdCBpc0N1YmVNYXAgPSBpc0N1YmVUZXh0dXJlKGVudk1hcCk7XG5cblx0XHRjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG5cdFx0Y29uc3QgY3ViZVNpemUgPSB3IC8gNDtcblx0XHRjb25zdCBfbG9kTWF4ID0gTWF0aC5mbG9vcihNYXRoLmxvZzIoY3ViZVNpemUpKTtcblx0XHRjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcblx0XHRjb25zdCB3aWR0aCA9IDMgKiBNYXRoLm1heChfY3ViZVNpemUsIDE2ICogNyk7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gNCAqIF9jdWJlU2l6ZTtcblxuXHRcdGlmIChpc0N1YmVNYXApIHRlbXBbJ0VOVk1BUF9UWVBFX0NVQkVNJ10gPSAnJztcblx0XHR0ZW1wWydDVUJFVVZfVEVYRUxfV0lEVEgnXSA9IGAkezEuMCAvIHdpZHRofWA7XG5cdFx0dGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG5cdFx0dGVtcFsnQ1VCRVVWX01BWF9NSVAnXSA9IGAke19sb2RNYXh9LjBgO1xuXG5cdFx0Ly8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuXHRcdGlmIChhYmVycmF0aW9uU3RyZW5ndGggPiAwKSB0ZW1wWydDSFJPTUFUSUNfQUJFUlJBVElPTlMnXSA9ICcnO1xuXHRcdGlmIChmYXN0Q2hyb21hKSB0ZW1wWydGQVNUX0NIUk9NQSddID0gJyc7XG5cblx0XHRyZXR1cm4gdGVtcDtcblx0fSk7XG5cblx0cHJpdmF0ZSBkZWZpbmVLZXlzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRlZmluZXMoKSkuam9pbignICcpO1xuXHR9KTtcblxuXHRtYXRlcmlhbCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBwcmV2TWF0ZXJpYWwgPSB1bnRyYWNrZWQodGhpcy5tYXRlcmlhbFJlZik/Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRpZiAocHJldk1hdGVyaWFsKSB7XG5cdFx0XHRwcmV2TWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0ZGVsZXRlIChwcmV2TWF0ZXJpYWwgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddO1xuXHRcdFx0ZGVsZXRlIChwcmV2TWF0ZXJpYWwgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdH1cblxuXHRcdC8vIHRyYWNrIGJ5IHRoaXMuZGVmaW5lS2V5c1xuXHRcdHRoaXMuZGVmaW5lS2V5cygpO1xuXHRcdHJldHVybiBuZXcgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCgpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKG1hdGVyaWFsKSB7XG5cdFx0XHRcdG1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRcdFx0ZGVsZXRlIChtYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRcdGRlbGV0ZSAobWF0ZXJpYWwgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbGliL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixVQUFVLEVBRVYsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFdBQVcsRUFFWCxPQUFPLEVBRVAsSUFBSSxFQUNKLElBQUksR0FDSixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFpQnBFLE1BQU0sY0FBYyxHQUFzQztJQUN6RCxPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsT0FBTyxFQUFFLENBQUM7SUFDVixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLEtBQUssRUFBRSxPQUFPO0lBQ2QsVUFBVSxFQUFFLElBQUk7Q0FDaEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLEdBQTBCO0lBQ2hELE9BQU8sR0FBRyxJQUFLLEdBQW1CLENBQUMsYUFBYSxDQUFDO0FBQ2xELENBQUM7QUF1QkQsTUFBTSxPQUFPLDBCQUEwQjtJQTZEdEM7UUE1REEsV0FBTSxHQUFHLEtBQUssQ0FBQyxR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QUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0Tmd0QW55UmVjb3JkLFxuXHROZ3RBcmdzLFxuXHROZ3RTaGFkZXJNYXRlcmlhbCxcblx0b21pdCxcblx0cGljayxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ29sb3JSZXByZXNlbnRhdGlvbiwgQ3ViZVRleHR1cmUsIE1lc2gsIFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBNZXNoQlZILCBNZXNoQlZIVW5pZm9ybVN0cnVjdCwgU0FIIH0gZnJvbSAndGhyZWUtbWVzaC1idmgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0U2hhZGVyTWF0ZXJpYWw+IHtcblx0LyoqIE51bWJlciBvZiByYXktY2FzdCBib3VuY2VzLCBpdCBjYW4gYmUgZXhwZW5zaXZlIHRvIGhhdmUgdG9vIG1hbnksIDIgKi9cblx0Ym91bmNlczogbnVtYmVyO1xuXHQvKiogUmVmcmFjdGlvbiBpbmRleCwgMi40ICovXG5cdGlvcjogbnVtYmVyO1xuXHQvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG5cdGZyZXNuZWw6IG51bWJlcjtcblx0LyoqIFJHQiBzaGlmdCBpbnRlbnNpdHksIGNhbiBiZSBleHBlbnNpdmUsIDAgKi9cblx0YWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG5cdC8qKiBDb2xvciwgd2hpdGUgKi9cblx0Y29sb3I6IENvbG9yUmVwcmVzZW50YXRpb247XG5cdC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG5cdGZhc3RDaHJvbWE6IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbE9wdGlvbnMgPSB7XG5cdGJvdW5jZXM6IDIsXG5cdGlvcjogMi40LFxuXHRmcmVzbmVsOiAwLFxuXHRhYmVycmF0aW9uU3RyZW5ndGg6IDAsXG5cdGNvbG9yOiAnd2hpdGUnLFxuXHRmYXN0Q2hyb21hOiB0cnVlLFxufTtcblxuZnVuY3Rpb24gaXNDdWJlVGV4dHVyZShkZWY6IEN1YmVUZXh0dXJlIHwgVGV4dHVyZSk6IGRlZiBpcyBDdWJlVGV4dHVyZSB7XG5cdHJldHVybiBkZWYgJiYgKGRlZiBhcyBDdWJlVGV4dHVyZSkuaXNDdWJlVGV4dHVyZTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlXG5cdFx0XHQqYXJncz1cIlttYXRlcmlhbCgpXVwiXG5cdFx0XHQjbWF0ZXJpYWxcblx0XHRcdFthdHRhY2hdPVwiYXR0YWNoKClcIlxuXHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHRcdFtlbnZNYXBdPVwiZW52TWFwKClcIlxuXHRcdFx0W2FiZXJyYXRpb25TdHJlbmd0aF09XCJhYmVycmF0aW9uU3RyZW5ndGgoKVwiXG5cdFx0XHRbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuXHRcdFx0W2RlZmluZXNdPVwiZGVmaW5lcygpXCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB7XG5cdGVudk1hcCA9IGlucHV0LnJlcXVpcmVkPEN1YmVUZXh0dXJlIHwgVGV4dHVyZT4oKTtcblx0YXR0YWNoID0gaW5wdXQoJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2Zhc3RDaHJvbWEnLCAnYWJlcnJhdGlvblN0cmVuZ3RoJ10pO1xuXG5cdHByaXZhdGUgZmFzdENocm9tYSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZmFzdENocm9tYScpO1xuXHRhYmVycmF0aW9uU3RyZW5ndGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuXG5cdG1hdGVyaWFsUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SW5zdGFuY2VUeXBlPHR5cGVvZiBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsPj4+KCdtYXRlcmlhbCcpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXG5cdHJlc29sdXRpb24gPSBjb21wdXRlZCgoKSA9PiBbdGhpcy5zaXplKCkud2lkdGgsIHRoaXMuc2l6ZSgpLmhlaWdodF0pO1xuXHRkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXHRcdGNvbnN0IFtlbnZNYXAsIGFiZXJyYXRpb25TdHJlbmd0aCwgZmFzdENocm9tYV0gPSBbXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5lbnZNYXApLFxuXHRcdFx0dGhpcy5hYmVycmF0aW9uU3RyZW5ndGgoKSxcblx0XHRcdHRoaXMuZmFzdENocm9tYSgpLFxuXHRcdF07XG5cdFx0Y29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuXG5cdFx0Y29uc3QgdyA9IChpc0N1YmVNYXAgPyBlbnZNYXAuaW1hZ2VbMF0/LndpZHRoIDogZW52TWFwLmltYWdlLndpZHRoKSA/PyAxMDI0O1xuXHRcdGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG5cdFx0Y29uc3QgX2xvZE1heCA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGN1YmVTaXplKSk7XG5cdFx0Y29uc3QgX2N1YmVTaXplID0gTWF0aC5wb3coMiwgX2xvZE1heCk7XG5cdFx0Y29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuXHRcdGNvbnN0IGhlaWdodCA9IDQgKiBfY3ViZVNpemU7XG5cblx0XHRpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG5cdFx0dGVtcFsnQ1VCRVVWX1RFWEVMX1dJRFRIJ10gPSBgJHsxLjAgLyB3aWR0aH1gO1xuXHRcdHRlbXBbJ0NVQkVVVl9URVhFTF9IRUlHSFQnXSA9IGAkezEuMCAvIGhlaWdodH1gO1xuXHRcdHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcblxuXHRcdC8vIEFkZCBkZWZpbmVzIGZyb20gY2hyb21hdGljIGFiZXJyYXRpb25cblx0XHRpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcblx0XHRpZiAoZmFzdENocm9tYSkgdGVtcFsnRkFTVF9DSFJPTUEnXSA9ICcnO1xuXG5cdFx0cmV0dXJuIHRlbXA7XG5cdH0pO1xuXG5cdHByaXZhdGUgZGVmaW5lS2V5cyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZWZpbmVzKCkpLmpvaW4oJyAnKTtcblx0fSk7XG5cblx0bWF0ZXJpYWwgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcHJldk1hdGVyaWFsID0gdW50cmFja2VkKHRoaXMubWF0ZXJpYWxSZWYpPy5uYXRpdmVFbGVtZW50O1xuXG5cdFx0aWYgKHByZXZNYXRlcmlhbCkge1xuXHRcdFx0cHJldk1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRcdGRlbGV0ZSAocHJldk1hdGVyaWFsIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdGRlbGV0ZSAocHJldk1hdGVyaWFsIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X3JlbmRlcmVyX18nXTtcblx0XHR9XG5cblx0XHQvLyB0cmFjayBieSB0aGlzLmRlZmluZUtleXNcblx0XHR0aGlzLmRlZmluZUtleXMoKTtcblx0XHRyZXR1cm4gbmV3IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwoKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCk7XG5cdFx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCk7XG5cdFx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gKHBhcmVudCBhcyBNZXNoKS5nZW9tZXRyeTtcblx0XHRcdFx0aWYgKGdlb21ldHJ5KSB7XG5cdFx0XHRcdFx0KG1hdGVyaWFsIGFzIGFueSkuYnZoID0gbmV3IE1lc2hCVkhVbmlmb3JtU3RydWN0KCk7XG5cdFx0XHRcdFx0KG1hdGVyaWFsIGFzIGFueSkuYnZoLnVwZGF0ZUZyb20obmV3IE1lc2hCVkgoZ2VvbWV0cnkuY2xvbmUoKS50b05vbkluZGV4ZWQoKSwgeyBzdHJhdGVneTogU0FIIH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKG1hdGVyaWFsKSB7XG5cdFx0XHRcdChtYXRlcmlhbCBhcyBhbnkpLnZpZXdNYXRyaXhJbnZlcnNlID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuXHRcdFx0XHQobWF0ZXJpYWwgYXMgYW55KS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSA9IGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAobWF0ZXJpYWwpIHtcblx0XHRcdFx0bWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0XHRkZWxldGUgKG1hdGVyaWFsIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdFx0ZGVsZXRlIChtYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|