@wolsok/thanos 3.0.0 → 16.0.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/README.md +109 -0
- package/{esm2020 → esm2022}/index.mjs +10 -10
- package/esm2022/lib/create-ws-thanos-options.mjs +9 -0
- package/{esm2020 → esm2022}/lib/simplex-noise-options.mjs +1 -1
- package/esm2022/lib/simplex-noise.mjs +194 -0
- package/{esm2020 → esm2022}/lib/ws-thanos-options.token.mjs +13 -13
- package/esm2022/lib/ws-thanos.directive.mjs +62 -0
- package/{esm2020 → esm2022}/lib/ws-thanos.options.mjs +1 -1
- package/esm2022/lib/ws-thanos.service.mjs +257 -0
- package/{esm2020 → esm2022}/wolsok-thanos.mjs +4 -4
- package/index.d.ts +6 -6
- package/lib/create-ws-thanos-options.d.ts +2 -2
- package/lib/simplex-noise-options.d.ts +9 -9
- package/lib/simplex-noise.d.ts +18 -18
- package/lib/ws-thanos-options.token.d.ts +4 -4
- package/lib/ws-thanos.directive.d.ts +18 -18
- package/lib/ws-thanos.options.d.ts +5 -5
- package/lib/ws-thanos.service.d.ts +32 -32
- package/package.json +17 -18
- package/esm2020/lib/create-ws-thanos-options.mjs +0 -9
- package/esm2020/lib/simplex-noise.mjs +0 -199
- package/esm2020/lib/ws-thanos.directive.mjs +0 -56
- package/esm2020/lib/ws-thanos.service.mjs +0 -260
package/README.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# @wolsok/thanos
|
|
2
|
+
|
|
3
|
+
An angular directive that vaporizes your DOM Elements like Thanos snaps his fingers. This library is generated with [Nx](https://nx.dev).
|
|
4
|
+
|
|
5
|
+
#### Live Demo:
|
|
6
|
+
|
|
7
|
+
Click the technology cards on https://angularexamples.wolsok.de/home?thanosDemo=true
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
#### Dependencies:
|
|
12
|
+
|
|
13
|
+
To install run
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
npm install @wolsok/thanos --save
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
#### Prepare your angular app:
|
|
20
|
+
|
|
21
|
+
Add `WsThanosDirective` to your module/standalone component.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
@NgModule_or_@Component({
|
|
25
|
+
...,
|
|
26
|
+
imports: [
|
|
27
|
+
...
|
|
28
|
+
WsThanosDirective
|
|
29
|
+
],
|
|
30
|
+
providers: [
|
|
31
|
+
// override the default options
|
|
32
|
+
provideWsThanosOptions({
|
|
33
|
+
animationLength: 2000,
|
|
34
|
+
particleAcceleration: 50,
|
|
35
|
+
maxParticleCount: 10000
|
|
36
|
+
}),
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
You can also add WsThanosDirective to your shared module exports.
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
@NgModule({
|
|
45
|
+
imports: [WsThanosDirective],
|
|
46
|
+
exports: [WsThanosDirective],
|
|
47
|
+
})
|
|
48
|
+
export class SharedModule {}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### `WsThanosOptions` to configure ws-thanos:
|
|
52
|
+
|
|
53
|
+
| field | type | default | description |
|
|
54
|
+
| -------------------- | :----: | ------: | ---------------------------------: |
|
|
55
|
+
| animationLength | number | 5000 | the animation length in ms |
|
|
56
|
+
| maxParticleCount | number | 400000 | max amount of particles |
|
|
57
|
+
| particleAcceleration | number | 30 | speed of the particle acceleration |
|
|
58
|
+
|
|
59
|
+
### `WsThanosDirective` usage
|
|
60
|
+
|
|
61
|
+
Use the directive `wsThanos` on your element and reference it using `@ViewChild(WsThanosDirective)` in your component or
|
|
62
|
+
directly in html via template ref:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
<div wsThanos
|
|
66
|
+
#thanos="thanos"
|
|
67
|
+
(wsThanosComplete)=onComplete()>
|
|
68
|
+
This div will be vaporized on click
|
|
69
|
+
</div>
|
|
70
|
+
<button (click)="thanos.vaporize(removeElement)">
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### `WsThanosService` usage
|
|
74
|
+
|
|
75
|
+
Inject the 'WsThanosService' into your class. Call 'vaporize()' and subscribe to it.
|
|
76
|
+
|
|
77
|
+
## Collaboration
|
|
78
|
+
|
|
79
|
+
Send issues or PRs to https://github.com/wolsok/wol-sok-mono
|
|
80
|
+
|
|
81
|
+
Run `nx test ws-thanos` to execute unit tests.
|
|
82
|
+
|
|
83
|
+
## Migration
|
|
84
|
+
|
|
85
|
+
From `1.0.1` to `2.0.0`
|
|
86
|
+
|
|
87
|
+
- Replace `WsThanosModule` in imports and exports with `WsThanosDirective`
|
|
88
|
+
- Replace `WsThanosModule.forRoot(options)`:
|
|
89
|
+
Before:
|
|
90
|
+
```typescript
|
|
91
|
+
@NgModule({
|
|
92
|
+
imports: [WsThanosModule.forRoot(options)]
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
After:
|
|
96
|
+
```typescript
|
|
97
|
+
@NgModule({
|
|
98
|
+
imports: [WsThanosDirective],
|
|
99
|
+
providers: [
|
|
100
|
+
provideWsThanosOptions(options)
|
|
101
|
+
]
|
|
102
|
+
})
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
From: `sc-thanos` to `@wolsok/thanos`
|
|
106
|
+
|
|
107
|
+
- Remove old version `npm uninstall sc-thanos`
|
|
108
|
+
- Install `npm install @wolsok/thanos --save`
|
|
109
|
+
- The earlier name of this component was `scThanos`. Just switch to `wsThanos`
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of ws-thanos
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/ws-thanos.service';
|
|
5
|
-
export * from './lib/ws-thanos.directive';
|
|
6
|
-
export * from './lib/ws-thanos-options.token';
|
|
7
|
-
export * from './lib/ws-thanos.options';
|
|
8
|
-
export * from './lib/create-ws-thanos-options';
|
|
9
|
-
export * from './lib/simplex-noise';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ws-thanos
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/ws-thanos.service';
|
|
5
|
+
export * from './lib/ws-thanos.directive';
|
|
6
|
+
export * from './lib/ws-thanos-options.token';
|
|
7
|
+
export * from './lib/ws-thanos.options';
|
|
8
|
+
export * from './lib/create-ws-thanos-options';
|
|
9
|
+
export * from './lib/simplex-noise';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3B1YmxpYy93cy10aGFub3Mvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHdzLXRoYW5vc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi93cy10aGFub3Muc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93cy10aGFub3MuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzLXRoYW5vcy1vcHRpb25zLnRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzLXRoYW5vcy5vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NyZWF0ZS13cy10aGFub3Mtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaW1wbGV4LW5vaXNlJztcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function createWsThanosOptions(options) {
|
|
2
|
+
return {
|
|
3
|
+
animationLength: 5000,
|
|
4
|
+
maxParticleCount: 400000,
|
|
5
|
+
particleAcceleration: 30,
|
|
6
|
+
...options,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXdzLXRoYW5vcy1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wdWJsaWMvd3MtdGhhbm9zL3NyYy9saWIvY3JlYXRlLXdzLXRoYW5vcy1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFrQztJQUN0RSxPQUFPO1FBQ0wsZUFBZSxFQUFFLElBQUk7UUFDckIsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4QixvQkFBb0IsRUFBRSxFQUFFO1FBQ3hCLEdBQUcsT0FBTztLQUNYLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3NUaGFub3NPcHRpb25zIH0gZnJvbSAnLi93cy10aGFub3Mub3B0aW9ucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXc1RoYW5vc09wdGlvbnMob3B0aW9ucz86IFBhcnRpYWw8V3NUaGFub3NPcHRpb25zPik6IFdzVGhhbm9zT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgYW5pbWF0aW9uTGVuZ3RoOiA1MDAwLFxuICAgIG1heFBhcnRpY2xlQ291bnQ6IDQwMDAwMCxcbiAgICBwYXJ0aWNsZUFjY2VsZXJhdGlvbjogMzAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxleC1ub2lzZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wdWJsaWMvd3MtdGhhbm9zL3NyYy9saWIvc2ltcGxleC1ub2lzZS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNpbXBsZXhOb2lzZU9wdGlvbnMge1xuICBhbXBsaXR1ZGU6IG51bWJlcjsgLy8gVGhlIGJhc2UgYW1wbGl0dWRlIChkZWZhdWx0OiAxLjApXG4gIGZyZXF1ZW5jeTogbnVtYmVyOyAvLyBUaGUgYmFzZSBmcmVxdWVuY3kgKGRlZmF1bHQ6IDEuMClcbiAgbWF4OiBudW1iZXI7IC8vIFRoZSBtYXhpbXVtIHNjYWxlZCB2YWx1ZSB0byByZXR1cm4gKGVmZmVjdGl2ZSBkZWZhdWx0OiAxLjApXG4gIG1pbjogbnVtYmVyOyAvLyBUaGUgbWluaW11bSBzY2FsZWQgdmFsdWUgdG8gcmV0dXJuIChlZmZlY3RpdmUgZGVmYXVsdDogLTEuMClcbiAgb2N0YXZlczogbnVtYmVyOyAvLyBJbnRlZ2VyOyB0aGUgbnVtYmVyIG9mIG9jdGF2ZXMgdG8gc3VtIGZvciBub2lzZSBnZW5lcmF0aW9uIChkZWZhdWx0OiAxKVxuICBwZXJzaXN0ZW5jZTogbnVtYmVyOyAvLyBUaGUgcGVyc2lzdGVuY2Ugb2YgYW1wbGl0dWRlIHBlciBvY3RhdmUgKGRlZmF1bHQ6IDAuNSlcbiAgcmFuZG9tOiAoKSA9PiBudW1iZXI7IC8vIEEgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmFuZG9tIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEgKGRlZmF1bHQ6IE1hdGgucmFuZG9tKVxufVxuIl19
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
class SimplexNoise {
|
|
2
|
+
constructor(options) {
|
|
3
|
+
const { min, max, random, amplitude, frequency, octaves, persistence } = createOptionsWithDefaults(options);
|
|
4
|
+
this.random = random;
|
|
5
|
+
this.amplitude = amplitude;
|
|
6
|
+
this.frequency = frequency;
|
|
7
|
+
this.octaves = octaves;
|
|
8
|
+
this.persistence = persistence;
|
|
9
|
+
this.scale = min === -1 && max === 1 ? (value) => value : (value) => min + ((value + 1) / 2) * (max - min);
|
|
10
|
+
const p = new Uint8Array(256);
|
|
11
|
+
for (let i = 0; i < 256; i++) {
|
|
12
|
+
p[i] = i;
|
|
13
|
+
}
|
|
14
|
+
let n;
|
|
15
|
+
let q;
|
|
16
|
+
for (let i = 255; i > 0; i--) {
|
|
17
|
+
n = Math.floor((i + 1) * this.random());
|
|
18
|
+
q = p[i];
|
|
19
|
+
p[i] = p[n];
|
|
20
|
+
p[n] = q;
|
|
21
|
+
}
|
|
22
|
+
this.perm = new Uint8Array(512);
|
|
23
|
+
this.permMod12 = new Uint8Array(512);
|
|
24
|
+
for (let i = 0; i < 512; i++) {
|
|
25
|
+
this.perm[i] = p[i & 255];
|
|
26
|
+
this.permMod12[i] = this.perm[i] % 12;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static G3 = 1.0 / 6.0;
|
|
30
|
+
static GRAD3D = [
|
|
31
|
+
[1, 1, 0],
|
|
32
|
+
[-1, 1, 0],
|
|
33
|
+
[1, -1, 0],
|
|
34
|
+
[-1, -1, 0],
|
|
35
|
+
[1, 0, 1],
|
|
36
|
+
[-1, 0, 1],
|
|
37
|
+
[1, 0, -1],
|
|
38
|
+
[-1, 0, -1],
|
|
39
|
+
[0, 1, 1],
|
|
40
|
+
[0, -1, -1],
|
|
41
|
+
[0, 1, -1],
|
|
42
|
+
[0, -1, -1],
|
|
43
|
+
];
|
|
44
|
+
amplitude;
|
|
45
|
+
frequency;
|
|
46
|
+
octaves;
|
|
47
|
+
perm;
|
|
48
|
+
permMod12;
|
|
49
|
+
persistence;
|
|
50
|
+
random;
|
|
51
|
+
scale;
|
|
52
|
+
memScale3D = {};
|
|
53
|
+
dot(gs, coords) {
|
|
54
|
+
return gs.slice(0, Math.min(gs.length, coords.length)).reduce((total, g, i) => total + g * coords[i], 0);
|
|
55
|
+
}
|
|
56
|
+
raw3D(x, y, z) {
|
|
57
|
+
// Skew the input space to determine which simplex cell we're in
|
|
58
|
+
const s = (x + y + z) / 3.0; // Very nice and simple skew factor for 3D
|
|
59
|
+
const i = Math.floor(x + s);
|
|
60
|
+
const j = Math.floor(y + s);
|
|
61
|
+
const k = Math.floor(z + s);
|
|
62
|
+
const t = (i + j + k) * SimplexNoise.G3;
|
|
63
|
+
const X0 = i - t; // Unskew the cell origin back to (x,y,z) space
|
|
64
|
+
const Y0 = j - t;
|
|
65
|
+
const Z0 = k - t;
|
|
66
|
+
const x0 = x - X0; // The x,y,z distances from the cell origin
|
|
67
|
+
const y0 = y - Y0;
|
|
68
|
+
const z0 = z - Z0;
|
|
69
|
+
// Determine which simplex we are in
|
|
70
|
+
let i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
|
|
71
|
+
let i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
|
|
72
|
+
if (x0 >= y0) {
|
|
73
|
+
if (y0 >= z0) {
|
|
74
|
+
i1 = i2 = j2 = 1;
|
|
75
|
+
j1 = k1 = k2 = 0;
|
|
76
|
+
}
|
|
77
|
+
else if (x0 >= z0) {
|
|
78
|
+
i1 = i2 = k2 = 1;
|
|
79
|
+
j1 = k1 = j2 = 0;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
k1 = i2 = k2 = 1;
|
|
83
|
+
i1 = j1 = j2 = 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
if (y0 < z0) {
|
|
88
|
+
k1 = j2 = k2 = 1;
|
|
89
|
+
i1 = j1 = i2 = 0;
|
|
90
|
+
}
|
|
91
|
+
else if (x0 < z0) {
|
|
92
|
+
j1 = j2 = k2 = 1;
|
|
93
|
+
i1 = k1 = i2 = 0;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
j1 = i2 = j2 = 1;
|
|
97
|
+
i1 = k1 = k2 = 0;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const x1 = x0 - i1 + SimplexNoise.G3; // Offsets for second corner in (x,y,z) coords
|
|
101
|
+
const y1 = y0 - j1 + SimplexNoise.G3;
|
|
102
|
+
const z1 = z0 - k1 + SimplexNoise.G3;
|
|
103
|
+
const x2 = x0 - i2 + 2.0 * SimplexNoise.G3; // Offsets for third corner in (x,y,z) coords
|
|
104
|
+
const y2 = y0 - j2 + 2.0 * SimplexNoise.G3;
|
|
105
|
+
const z2 = z0 - k2 + 2.0 * SimplexNoise.G3;
|
|
106
|
+
const x3 = x0 - 1.0 + 3.0 * SimplexNoise.G3; // Offsets for last corner in (x,y,z) coords
|
|
107
|
+
const y3 = y0 - 1.0 + 3.0 * SimplexNoise.G3;
|
|
108
|
+
const z3 = z0 - 1.0 + 3.0 * SimplexNoise.G3;
|
|
109
|
+
// Work out the hashed gradient indices of the four simplex corners
|
|
110
|
+
const ii = i & 255;
|
|
111
|
+
const jj = j & 255;
|
|
112
|
+
const kk = k & 255;
|
|
113
|
+
const gi0 = this.permMod12[ii + this.perm[jj + this.perm[kk]]];
|
|
114
|
+
const gi1 = this.permMod12[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]];
|
|
115
|
+
const gi2 = this.permMod12[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]];
|
|
116
|
+
const gi3 = this.permMod12[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]];
|
|
117
|
+
// Calculate the contribution from the four corners
|
|
118
|
+
const t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0;
|
|
119
|
+
const n0 = t0 < 0 ? 0.0 : Math.pow(t0, 4) * this.dot(SimplexNoise.GRAD3D[gi0], [x0, y0, z0]);
|
|
120
|
+
const t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1;
|
|
121
|
+
const n1 = t1 < 0 ? 0.0 : Math.pow(t1, 4) * this.dot(SimplexNoise.GRAD3D[gi1], [x1, y1, z1]);
|
|
122
|
+
const t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2;
|
|
123
|
+
const n2 = t2 < 0 ? 0.0 : Math.pow(t2, 4) * this.dot(SimplexNoise.GRAD3D[gi2], [x2, y2, z2]);
|
|
124
|
+
const t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3;
|
|
125
|
+
const n3 = t3 < 0 ? 0.0 : Math.pow(t3, 4) * this.dot(SimplexNoise.GRAD3D[gi3], [x3, y3, z3]);
|
|
126
|
+
// Add contributions from each corner to get the final noise value.
|
|
127
|
+
// The result is scaled to stay just inside [-1,1]
|
|
128
|
+
return 94.68493150681972 * (n0 + n1 + n2 + n3);
|
|
129
|
+
}
|
|
130
|
+
scaled3D(x, y, z, resolution) {
|
|
131
|
+
const memIndex = `${Math.round(x * resolution)}${Math.round(y * resolution)}${Math.round(z * resolution)}`;
|
|
132
|
+
const memElem = this.memScale3D[memIndex];
|
|
133
|
+
if (memElem != null) {
|
|
134
|
+
return memElem;
|
|
135
|
+
}
|
|
136
|
+
let amplitude = this.amplitude;
|
|
137
|
+
let frequency = this.frequency;
|
|
138
|
+
let maxAmplitude = 0;
|
|
139
|
+
let noise = 0;
|
|
140
|
+
for (let i = 0; i < this.octaves; i++) {
|
|
141
|
+
noise += this.raw3D(x * frequency, y * frequency, z * frequency) * amplitude;
|
|
142
|
+
maxAmplitude += amplitude;
|
|
143
|
+
amplitude *= this.persistence;
|
|
144
|
+
frequency *= 2;
|
|
145
|
+
}
|
|
146
|
+
const result = this.scale(noise / maxAmplitude);
|
|
147
|
+
this.memScale3D[memIndex] = result;
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
export { SimplexNoise };
|
|
152
|
+
function createOptionsWithDefaults(options) {
|
|
153
|
+
if (options != null) {
|
|
154
|
+
if (options['amplitude'] && typeof options.amplitude !== 'number') {
|
|
155
|
+
throw new Error('options.amplitude must be a number');
|
|
156
|
+
}
|
|
157
|
+
if (options['frequency'] && typeof options.frequency !== 'number') {
|
|
158
|
+
throw new Error('options.frequency must be a number');
|
|
159
|
+
}
|
|
160
|
+
if (options['octaves'] &&
|
|
161
|
+
(typeof options.octaves !== 'number' ||
|
|
162
|
+
!isFinite(options.octaves) ||
|
|
163
|
+
Math.floor(options.octaves) !== options.octaves)) {
|
|
164
|
+
throw new Error('options.octaves must be an integer');
|
|
165
|
+
}
|
|
166
|
+
if (options['persistence'] && typeof options.persistence !== 'number') {
|
|
167
|
+
throw new Error('options.persistence must be a number');
|
|
168
|
+
}
|
|
169
|
+
if (options['random'] && typeof options.random !== 'function') {
|
|
170
|
+
throw new Error('options.random must be a function');
|
|
171
|
+
}
|
|
172
|
+
if (options['min'] && typeof options.min !== 'number') {
|
|
173
|
+
throw new Error('options.min must be a number');
|
|
174
|
+
}
|
|
175
|
+
if (options['max'] && typeof options.max !== 'number') {
|
|
176
|
+
throw new Error('options.max must be a number');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const optionsResult = {
|
|
180
|
+
amplitude: 1.0,
|
|
181
|
+
frequency: 1.0,
|
|
182
|
+
max: 1.0,
|
|
183
|
+
min: -1.0,
|
|
184
|
+
octaves: 1,
|
|
185
|
+
persistence: 0.5,
|
|
186
|
+
random: Math.random,
|
|
187
|
+
...options,
|
|
188
|
+
};
|
|
189
|
+
if (optionsResult.min > optionsResult.max) {
|
|
190
|
+
throw new Error('min must be smaller max');
|
|
191
|
+
}
|
|
192
|
+
return optionsResult;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxleC1ub2lzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcHVibGljL3dzLXRoYW5vcy9zcmMvbGliL3NpbXBsZXgtbm9pc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBYSxZQUFZO0lBQ3ZCLFlBQVksT0FBc0M7UUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUUzRyxNQUFNLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVjtRQUVELElBQUksQ0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFTLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBRXRCLE1BQU0sQ0FBQyxNQUFNLEdBQUc7UUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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LENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsbURBQW1EO1FBQ25ELE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RixNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0YsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUs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QUc7UUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNWLFdBQVcsRUFBRSxHQUFHO1FBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixHQUFHLE9BQU87S0FDWCxDQUFDO0lBQ0YsSUFBSSxhQUFhLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUU7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzVDO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2ltcGxleE5vaXNlT3B0aW9ucyB9IGZyb20gJy4vc2ltcGxleC1ub2lzZS1vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIFNpbXBsZXhOb2lzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBQYXJ0aWFsPFNpbXBsZXhOb2lzZU9wdGlvbnM+KSB7XG4gICAgY29uc3QgeyBtaW4sIG1heCwgcmFuZG9tLCBhbXBsaXR1ZGUsIGZyZXF1ZW5jeSwgb2N0YXZlcywgcGVyc2lzdGVuY2UgfSA9IGNyZWF0ZU9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG5cbiAgICB0aGlzLnJhbmRvbSA9IHJhbmRvbTtcbiAgICB0aGlzLmFtcGxpdHVkZSA9IGFtcGxpdHVkZTtcbiAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTtcbiAgICB0aGlzLm9jdGF2ZXMgPSBvY3RhdmVzO1xuICAgIHRoaXMucGVyc2lzdGVuY2UgPSBwZXJzaXN0ZW5jZTtcblxuICAgIHRoaXMuc2NhbGUgPSBtaW4gPT09IC0xICYmIG1heCA9PT0gMSA/ICh2YWx1ZSkgPT4gdmFsdWUgOiAodmFsdWUpID0+IG1pbiArICgodmFsdWUgKyAxKSAvIDIpICogKG1heCAtIG1pbik7XG5cbiAgICBjb25zdCBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9XG5cbiAgICBsZXQgbjogbnVtYmVyO1xuICAgIGxldCBxOiBudW1iZXI7XG4gICAgZm9yIChsZXQgaSA9IDI1NTsgaSA+IDA7IGktLSkge1xuICAgICAgbiA9IE1hdGguZmxvb3IoKGkgKyAxKSAqIHRoaXMucmFuZG9tKCkpO1xuICAgICAgcSA9IHBbaV07XG4gICAgICBwW2ldID0gcFtuXTtcbiAgICAgIHBbbl0gPSBxO1xuICAgIH1cblxuICAgIHRoaXMucGVybSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgdGhpcy5wZXJtTW9kMTIgPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTEyOyBpKyspIHtcbiAgICAgIHRoaXMucGVybVtpXSA9IHBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBHMyA9IDEuMCAvIDYuMDtcblxuICBzdGF0aWMgR1JBRDNEID0gW1xuICAgIFsxLCAxLCAwXSxcbiAgICBbLTEsIDEsIDBdLFxuICAgIFsxLCAtMSwgMF0sXG4gICAgWy0xLCAtMSwgMF0sXG4gICAgWzEsIDAsIDFdLFxuICAgIFstMSwgMCwgMV0sXG4gICAgWzEsIDAsIC0xXSxcbiAgICBbLTEsIDAsIC0xXSxcbiAgICBbMCwgMSwgMV0sXG4gICAgWzAsIC0xLCAtMV0sXG4gICAgWzAsIDEsIC0xXSxcbiAgICBbMCwgLTEsIC0xXSxcbiAgXTtcblxuICByZWFkb25seSBhbXBsaXR1ZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgZnJlcXVlbmN5OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9jdGF2ZXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgcGVybTogVWludDhBcnJheTtcbiAgcmVhZG9ubHkgcGVybU1vZDEyOiBVaW50OEFycmF5O1xuICByZWFkb25seSBwZXJzaXN0ZW5jZTogbnVtYmVyO1xuICByZWFkb25seSByYW5kb206ICgpID0+IG51bWJlcjtcbiAgcmVhZG9ubHkgc2NhbGU6ICh2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXI7XG4gIHByaXZhdGUgbWVtU2NhbGUzRDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuXG4gIGRvdChnczogbnVtYmVyW10sIGNvb3JkczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiBncy5zbGljZSgwLCBNYXRoLm1pbihncy5sZW5ndGgsIGNvb3Jkcy5sZW5ndGgpKS5yZWR1Y2UoKHRvdGFsLCBnLCBpKSA9PiB0b3RhbCArIGcgKiBjb29yZHNbaV0sIDApO1xuICB9XG5cbiAgcmF3M0QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgIGNvbnN0IHMgPSAoeCArIHkgKyB6KSAvIDMuMDsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICBjb25zdCBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgY29uc3QgdCA9IChpICsgaiArIGspICogU2ltcGxleE5vaXNlLkczO1xuICAgIGNvbnN0IFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHopIHNwYWNlXG4gICAgY29uc3QgWTAgPSBqIC0gdDtcbiAgICBjb25zdCBaMCA9IGsgLSB0O1xuICAgIGNvbnN0IHgwID0geCAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgY29uc3QgeTAgPSB5IC0gWTA7XG4gICAgY29uc3QgejAgPSB6IC0gWjA7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW5cbiAgICBsZXQgaTE6IG51bWJlciwgajE6IG51bWJlciwgazE6IG51bWJlcjsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgbGV0IGkyOiBudW1iZXIsIGoyOiBudW1iZXIsIGsyOiBudW1iZXI7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgaWYgKHgwID49IHkwKSB7XG4gICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgaTEgPSBpMiA9IGoyID0gMTtcbiAgICAgICAgajEgPSBrMSA9IGsyID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoeDAgPj0gejApIHtcbiAgICAgICAgaTEgPSBpMiA9IGsyID0gMTtcbiAgICAgICAgajEgPSBrMSA9IGoyID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsxID0gaTIgPSBrMiA9IDE7XG4gICAgICAgIGkxID0gajEgPSBqMiA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh5MCA8IHowKSB7XG4gICAgICAgIGsxID0gajIgPSBrMiA9IDE7XG4gICAgICAgIGkxID0gajEgPSBpMiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgajEgPSBqMiA9IGsyID0gMTtcbiAgICAgICAgaTEgPSBrMSA9IGkyID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGoxID0gaTIgPSBqMiA9IDE7XG4gICAgICAgIGkxID0gazEgPSBrMiA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeDEgPSB4MCAtIGkxICsgU2ltcGxleE5vaXNlLkczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgY29uc3QgeTEgPSB5MCAtIGoxICsgU2ltcGxleE5vaXNlLkczO1xuICAgIGNvbnN0IHoxID0gejAgLSBrMSArIFNpbXBsZXhOb2lzZS5HMztcbiAgICBjb25zdCB4MiA9IHgwIC0gaTIgKyAyLjAgKiBTaW1wbGV4Tm9pc2UuRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgIGNvbnN0IHkyID0geTAgLSBqMiArIDIuMCAqIFNpbXBsZXhOb2lzZS5HMztcbiAgICBjb25zdCB6MiA9IHowIC0gazIgKyAyLjAgKiBTaW1wbGV4Tm9pc2UuRzM7XG4gICAgY29uc3QgeDMgPSB4MCAtIDEuMCArIDMuMCAqIFNpbXBsZXhOb2lzZS5HMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICBjb25zdCB5MyA9IHkwIC0gMS4wICsgMy4wICogU2ltcGxleE5vaXNlLkczO1xuICAgIGNvbnN0IHozID0gejAgLSAxLjAgKyAzLjAgKiBTaW1wbGV4Tm9pc2UuRzM7XG5cbiAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgY29uc3QgaWkgPSBpICYgMjU1O1xuICAgIGNvbnN0IGpqID0gaiAmIDI1NTtcbiAgICBjb25zdCBrayA9IGsgJiAyNTU7XG4gICAgY29uc3QgZ2kwID0gdGhpcy5wZXJtTW9kMTJbaWkgKyB0aGlzLnBlcm1bamogKyB0aGlzLnBlcm1ba2tdXV07XG4gICAgY29uc3QgZ2kxID0gdGhpcy5wZXJtTW9kMTJbaWkgKyBpMSArIHRoaXMucGVybVtqaiArIGoxICsgdGhpcy5wZXJtW2trICsgazFdXV07XG4gICAgY29uc3QgZ2kyID0gdGhpcy5wZXJtTW9kMTJbaWkgKyBpMiArIHRoaXMucGVybVtqaiArIGoyICsgdGhpcy5wZXJtW2trICsgazJdXV07XG4gICAgY29uc3QgZ2kzID0gdGhpcy5wZXJtTW9kMTJbaWkgKyAxICsgdGhpcy5wZXJtW2pqICsgMSArIHRoaXMucGVybVtrayArIDFdXV07XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICBjb25zdCB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICBjb25zdCBuMCA9IHQwIDwgMCA/IDAuMCA6IE1hdGgucG93KHQwLCA0KSAqIHRoaXMuZG90KFNpbXBsZXhOb2lzZS5HUkFEM0RbZ2kwXSwgW3gwLCB5MCwgejBdKTtcbiAgICBjb25zdCB0MSA9IDAuNSAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICBjb25zdCBuMSA9IHQxIDwgMCA/IDAuMCA6IE1hdGgucG93KHQxLCA0KSAqIHRoaXMuZG90KFNpbXBsZXhOb2lzZS5HUkFEM0RbZ2kxXSwgW3gxLCB5MSwgejFdKTtcbiAgICBjb25zdCB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MjtcbiAgICBjb25zdCBuMiA9IHQyIDwgMCA/IDAuMCA6IE1hdGgucG93KHQyLCA0KSAqIHRoaXMuZG90KFNpbXBsZXhOb2lzZS5HUkFEM0RbZ2kyXSwgW3gyLCB5MiwgejJdKTtcbiAgICBjb25zdCB0MyA9IDAuNSAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICBjb25zdCBuMyA9IHQzIDwgMCA/IDAuMCA6IE1hdGgucG93KHQzLCA0KSAqIHRoaXMuZG90KFNpbXBsZXhOb2lzZS5HUkFEM0RbZ2kzXSwgW3gzLCB5MywgejNdKTtcblxuICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byBzdGF5IGp1c3QgaW5zaWRlIFstMSwxXVxuICAgIHJldHVybiA5NC42ODQ5MzE1MDY4MTk3MiAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gIH1cblxuICBzY2FsZWQzRCh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCByZXNvbHV0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG1lbUluZGV4ID0gYCR7TWF0aC5yb3VuZCh4ICogcmVzb2x1dGlvbil9JHtNYXRoLnJvdW5kKHkgKiByZXNvbHV0aW9uKX0ke01hdGgucm91bmQoeiAqIHJlc29sdXRpb24pfWA7XG4gICAgY29uc3QgbWVtRWxlbSA9IHRoaXMubWVtU2NhbGUzRFttZW1JbmRleF07XG4gICAgaWYgKG1lbUVsZW0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG1lbUVsZW07XG4gICAgfVxuXG4gICAgbGV0IGFtcGxpdHVkZSA9IHRoaXMuYW1wbGl0dWRlO1xuICAgIGxldCBmcmVxdWVuY3kgPSB0aGlzLmZyZXF1ZW5jeTtcbiAgICBsZXQgbWF4QW1wbGl0dWRlID0gMDtcbiAgICBsZXQgbm9pc2UgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9jdGF2ZXM7IGkrKykge1xuICAgICAgbm9pc2UgKz0gdGhpcy5yYXczRCh4ICogZnJlcXVlbmN5LCB5ICogZnJlcXVlbmN5LCB6ICogZnJlcXVlbmN5KSAqIGFtcGxpdHVkZTtcbiAgICAgIG1heEFtcGxpdHVkZSArPSBhbXBsaXR1ZGU7XG4gICAgICBhbXBsaXR1ZGUgKj0gdGhpcy5wZXJzaXN0ZW5jZTtcbiAgICAgIGZyZXF1ZW5jeSAqPSAyO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNjYWxlKG5vaXNlIC8gbWF4QW1wbGl0dWRlKTtcbiAgICB0aGlzLm1lbVNjYWxlM0RbbWVtSW5kZXhdID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zPzogUGFydGlhbDxTaW1wbGV4Tm9pc2VPcHRpb25zPikge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnNbJ2FtcGxpdHVkZSddICYmIHR5cGVvZiBvcHRpb25zLmFtcGxpdHVkZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5hbXBsaXR1ZGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zWydmcmVxdWVuY3knXSAmJiB0eXBlb2Ygb3B0aW9ucy5mcmVxdWVuY3kgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuZnJlcXVlbmN5IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvcHRpb25zWydvY3RhdmVzJ10gJiZcbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5vY3RhdmVzICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAhaXNGaW5pdGUob3B0aW9ucy5vY3RhdmVzKSB8fFxuICAgICAgICBNYXRoLmZsb29yKG9wdGlvbnMub2N0YXZlcykgIT09IG9wdGlvbnMub2N0YXZlcylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5vY3RhdmVzIG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zWydwZXJzaXN0ZW5jZSddICYmIHR5cGVvZiBvcHRpb25zLnBlcnNpc3RlbmNlICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLnBlcnNpc3RlbmNlIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uc1sncmFuZG9tJ10gJiYgdHlwZW9mIG9wdGlvbnMucmFuZG9tICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMucmFuZG9tIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zWydtaW4nXSAmJiB0eXBlb2Ygb3B0aW9ucy5taW4gIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMubWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uc1snbWF4J10gJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLm1heCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uc1Jlc3VsdCA9IHtcbiAgICBhbXBsaXR1ZGU6IDEuMCxcbiAgICBmcmVxdWVuY3k6IDEuMCxcbiAgICBtYXg6IDEuMCxcbiAgICBtaW46IC0xLjAsXG4gICAgb2N0YXZlczogMSxcbiAgICBwZXJzaXN0ZW5jZTogMC41LFxuICAgIHJhbmRvbTogTWF0aC5yYW5kb20sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcbiAgaWYgKG9wdGlvbnNSZXN1bHQubWluID4gb3B0aW9uc1Jlc3VsdC5tYXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgbWF4Jyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import { createWsThanosOptions } from './create-ws-thanos-options';
|
|
3
|
-
export const WS_THANOS_OPTIONS_TOKEN = new InjectionToken('thanosOptions', {
|
|
4
|
-
providedIn: 'root',
|
|
5
|
-
factory: () => createWsThanosOptions(),
|
|
6
|
-
});
|
|
7
|
-
export function provideWsThanosOptions(options) {
|
|
8
|
-
return {
|
|
9
|
-
provide: WS_THANOS_OPTIONS_TOKEN,
|
|
10
|
-
useValue: createWsThanosOptions(options),
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { createWsThanosOptions } from './create-ws-thanos-options';
|
|
3
|
+
export const WS_THANOS_OPTIONS_TOKEN = new InjectionToken('thanosOptions', {
|
|
4
|
+
providedIn: 'root',
|
|
5
|
+
factory: () => createWsThanosOptions(),
|
|
6
|
+
});
|
|
7
|
+
export function provideWsThanosOptions(options) {
|
|
8
|
+
return {
|
|
9
|
+
provide: WS_THANOS_OPTIONS_TOKEN,
|
|
10
|
+
useValue: createWsThanosOptions(options),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGhhbm9zLW9wdGlvbnMudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3B1YmxpYy93cy10aGFub3Mvc3JjL2xpYi93cy10aGFub3Mtb3B0aW9ucy50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR25FLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFrQixlQUFlLEVBQUU7SUFDMUYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFO0NBQ3ZDLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFrQztJQUN2RSxPQUFPO1FBQ0wsT0FBTyxFQUFFLHVCQUF1QjtRQUNoQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVXc1RoYW5vc09wdGlvbnMgfSBmcm9tICcuL2NyZWF0ZS13cy10aGFub3Mtb3B0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IFdzVGhhbm9zT3B0aW9ucyB9IGZyb20gJy4vd3MtdGhhbm9zLm9wdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgV1NfVEhBTk9TX09QVElPTlNfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48V3NUaGFub3NPcHRpb25zPigndGhhbm9zT3B0aW9ucycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBjcmVhdGVXc1RoYW5vc09wdGlvbnMoKSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVdzVGhhbm9zT3B0aW9ucyhvcHRpb25zPzogUGFydGlhbDxXc1RoYW5vc09wdGlvbnM+KTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFdTX1RIQU5PU19PUFRJT05TX1RPS0VOLFxuICAgIHVzZVZhbHVlOiBjcmVhdGVXc1RoYW5vc09wdGlvbnMob3B0aW9ucyksXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, Inject, NgZone, Output } from '@angular/core';
|
|
2
|
+
import { WS_THANOS_OPTIONS_TOKEN } from './ws-thanos-options.token';
|
|
3
|
+
import { WsThanosService } from './ws-thanos.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./ws-thanos.service";
|
|
6
|
+
class WsThanosDirective {
|
|
7
|
+
vaporizeDomElem;
|
|
8
|
+
thanosService;
|
|
9
|
+
thanosOptions;
|
|
10
|
+
ngZone;
|
|
11
|
+
subscription;
|
|
12
|
+
wsThanosComplete = new EventEmitter();
|
|
13
|
+
constructor(vaporizeDomElem, thanosService, thanosOptions, ngZone) {
|
|
14
|
+
this.vaporizeDomElem = vaporizeDomElem;
|
|
15
|
+
this.thanosService = thanosService;
|
|
16
|
+
this.thanosOptions = thanosOptions;
|
|
17
|
+
this.ngZone = ngZone;
|
|
18
|
+
}
|
|
19
|
+
vaporize(removeElem = true) {
|
|
20
|
+
const elem = this.vaporizeDomElem.nativeElement;
|
|
21
|
+
this.subscription = this.thanosService.vaporize(elem).subscribe({
|
|
22
|
+
complete: () => {
|
|
23
|
+
this.ngZone.run(() => {
|
|
24
|
+
if (removeElem) {
|
|
25
|
+
elem.remove();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// make visible again
|
|
29
|
+
elem.style.transition = 'opacity 700ms';
|
|
30
|
+
elem.style.opacity = '1';
|
|
31
|
+
}
|
|
32
|
+
this.wsThanosComplete.emit();
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
error: (error) => {
|
|
36
|
+
console.error('error emitted by vaporize', error);
|
|
37
|
+
this.wsThanosComplete.emit();
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
return this.wsThanosComplete.asObservable();
|
|
41
|
+
}
|
|
42
|
+
ngOnDestroy() {
|
|
43
|
+
this.subscription?.unsubscribe();
|
|
44
|
+
}
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: WsThanosDirective, deps: [{ token: i0.ElementRef }, { token: i1.WsThanosService }, { token: WS_THANOS_OPTIONS_TOKEN }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
46
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: WsThanosDirective, isStandalone: true, selector: "[wsThanos], ws-thanos", outputs: { wsThanosComplete: "wsThanosComplete" }, exportAs: ["thanos"], ngImport: i0 });
|
|
47
|
+
}
|
|
48
|
+
export { WsThanosDirective };
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: WsThanosDirective, decorators: [{
|
|
50
|
+
type: Directive,
|
|
51
|
+
args: [{
|
|
52
|
+
standalone: true,
|
|
53
|
+
selector: '[wsThanos], ws-thanos',
|
|
54
|
+
exportAs: 'thanos',
|
|
55
|
+
}]
|
|
56
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.WsThanosService }, { type: undefined, decorators: [{
|
|
57
|
+
type: Inject,
|
|
58
|
+
args: [WS_THANOS_OPTIONS_TOKEN]
|
|
59
|
+
}] }, { type: i0.NgZone }]; }, propDecorators: { wsThanosComplete: [{
|
|
60
|
+
type: Output
|
|
61
|
+
}] } });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGhhbm9zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcHVibGljL3dzLXRoYW5vcy9zcmMvbGliL3dzLXRoYW5vcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBRXRELE1BS2EsaUJBQWlCO0lBT1Q7SUFDQTtJQUVBO0lBQ0E7SUFWWCxZQUFZLENBQWdCO0lBRzVCLGdCQUFnQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXhFLFlBQ21CLGVBQXdDLEVBQ3hDLGFBQThCLEVBRTlCLGFBQThCLEVBQzlCLE1BQWM7UUFKZCxvQkFBZSxHQUFmLGVBQWUsQ0FBeUI7UUFDeEMsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBRTlCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQzlCLENBQUM7SUFFRyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUk7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDOUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ25CLElBQUksVUFBVSxFQUFFO3dCQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDZjt5QkFBTTt3QkFDTCxxQkFBcUI7d0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO3FCQUMxQjtvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7dUdBeENVLGlCQUFpQiwyRUFTbEIsdUJBQXVCOzJGQVR0QixpQkFBaUI7O1NBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUw3QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUsUUFBUTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsdUJBQXVCO2lFQUx6QixnQkFBZ0I7c0JBRHZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFdTX1RIQU5PU19PUFRJT05TX1RPS0VOIH0gZnJvbSAnLi93cy10aGFub3Mtb3B0aW9ucy50b2tlbic7XG5pbXBvcnQgdHlwZSB7IFdzVGhhbm9zT3B0aW9ucyB9IGZyb20gJy4vd3MtdGhhbm9zLm9wdGlvbnMnO1xuaW1wb3J0IHsgV3NUaGFub3NTZXJ2aWNlIH0gZnJvbSAnLi93cy10aGFub3Muc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t3c1RoYW5vc10sIHdzLXRoYW5vcycsXG4gIGV4cG9ydEFzOiAndGhhbm9zJyxcbn0pXG5leHBvcnQgY2xhc3MgV3NUaGFub3NEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBAT3V0cHV0KClcbiAgcHJpdmF0ZSB3c1RoYW5vc0NvbXBsZXRlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YXBvcml6ZURvbUVsZW06IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGhhbm9zU2VydmljZTogV3NUaGFub3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoV1NfVEhBTk9TX09QVElPTlNfVE9LRU4pXG4gICAgcHJpdmF0ZSByZWFkb25seSB0aGFub3NPcHRpb25zOiBXc1RoYW5vc09wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgcHVibGljIHZhcG9yaXplKHJlbW92ZUVsZW0gPSB0cnVlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZWxlbSA9IHRoaXMudmFwb3JpemVEb21FbGVtLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRoYW5vc1NlcnZpY2UudmFwb3JpemUoZWxlbSkuc3Vic2NyaWJlKHtcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKHJlbW92ZUVsZW0pIHtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdmlzaWJsZSBhZ2FpblxuICAgICAgICAgICAgZWxlbS5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgNzAwbXMnO1xuICAgICAgICAgICAgZWxlbS5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLndzVGhhbm9zQ29tcGxldGUuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGVtaXR0ZWQgYnkgdmFwb3JpemUnLCBlcnJvcik7XG4gICAgICAgIHRoaXMud3NUaGFub3NDb21wbGV0ZS5lbWl0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMud3NUaGFub3NDb21wbGV0ZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGhhbm9zLm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3B1YmxpYy93cy10aGFub3Mvc3JjL2xpYi93cy10aGFub3Mub3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBXc1RoYW5vc09wdGlvbnMge1xuICBhbmltYXRpb25MZW5ndGg6IG51bWJlcjtcbiAgbWF4UGFydGljbGVDb3VudDogbnVtYmVyO1xuICBwYXJ0aWNsZUFjY2VsZXJhdGlvbjogbnVtYmVyO1xufVxuIl19
|