angular-three-soba 2.0.0-beta.3 → 2.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/abstractions/edges/edges.d.ts +1 -1
  2. package/abstractions/grid/grid.d.ts +59 -0
  3. package/abstractions/index.d.ts +1 -0
  4. package/abstractions/text/text.d.ts +0 -1
  5. package/abstractions/text-3d/text-3d.d.ts +1 -1
  6. package/esm2022/abstractions/billboard/billboard.mjs +3 -3
  7. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +3 -3
  8. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +3 -3
  9. package/esm2022/abstractions/edges/edges.mjs +3 -3
  10. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +8 -8
  11. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +3 -3
  12. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +6 -6
  13. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +3 -3
  14. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +3 -3
  15. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +6 -6
  16. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +3 -3
  17. package/esm2022/abstractions/grid/grid.mjs +150 -0
  18. package/esm2022/abstractions/index.mjs +2 -1
  19. package/esm2022/abstractions/line/line-input.mjs +3 -3
  20. package/esm2022/abstractions/line/line.mjs +3 -3
  21. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +3 -3
  22. package/esm2022/abstractions/text/text.mjs +5 -7
  23. package/esm2022/abstractions/text-3d/text-3d.mjs +3 -3
  24. package/esm2022/cameras/camera/camera-content.mjs +3 -3
  25. package/esm2022/cameras/camera/camera.mjs +3 -3
  26. package/esm2022/cameras/cube-camera/cube-camera.mjs +3 -3
  27. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +3 -3
  28. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +3 -3
  29. package/esm2022/controls/orbit-controls/orbit-controls.mjs +3 -3
  30. package/esm2022/loaders/loader/loader.mjs +3 -3
  31. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +3 -3
  32. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +3 -3
  33. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +7 -6
  34. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +3 -3
  35. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +3 -3
  36. package/esm2022/misc/animations/animations.mjs +20 -20
  37. package/esm2022/misc/bake-shadows/bake-shadows.mjs +3 -3
  38. package/esm2022/performance/adaptive/adaptive-dpr.mjs +3 -3
  39. package/esm2022/performance/adaptive/adaptive-events.mjs +3 -3
  40. package/esm2022/performance/detailed/detailed.mjs +3 -3
  41. package/esm2022/performance/instances/instance.mjs +3 -3
  42. package/esm2022/performance/instances/instances.mjs +3 -3
  43. package/esm2022/performance/stats/stats.mjs +3 -3
  44. package/esm2022/shaders/grid-material/grid-material.mjs +62 -0
  45. package/esm2022/shaders/index.mjs +2 -1
  46. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +5 -5
  47. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +3 -3
  48. package/esm2022/staging/bounds/bounds.mjs +3 -3
  49. package/esm2022/staging/camera-shake/camera-shake.mjs +3 -3
  50. package/esm2022/staging/caustics/caustisc.mjs +5 -5
  51. package/esm2022/staging/center/center.mjs +3 -3
  52. package/esm2022/staging/cloud/cloud.mjs +3 -3
  53. package/esm2022/staging/contact-shadows/contact-shadows.mjs +3 -3
  54. package/esm2022/staging/environment/environment-cube.mjs +3 -3
  55. package/esm2022/staging/environment/environment-ground.mjs +3 -3
  56. package/esm2022/staging/environment/environment-input.mjs +3 -3
  57. package/esm2022/staging/environment/environment-map.mjs +3 -3
  58. package/esm2022/staging/environment/environment-portal.mjs +5 -5
  59. package/esm2022/staging/environment/environment.mjs +6 -6
  60. package/esm2022/staging/float/float.mjs +3 -3
  61. package/esm2022/staging/sky/sky.mjs +3 -3
  62. package/esm2022/staging/sparkles/sparkles.mjs +3 -3
  63. package/esm2022/staging/spot-light/spot-light-input.mjs +3 -3
  64. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +3 -3
  65. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +13 -11
  66. package/esm2022/staging/spot-light/spot-light.mjs +3 -3
  67. package/esm2022/staging/spot-light/volumetric-mesh.mjs +3 -3
  68. package/esm2022/staging/stage/stage.mjs +6 -6
  69. package/esm2022/staging/stars/stars.mjs +3 -3
  70. package/fesm2022/angular-three-soba-abstractions.mjs +205 -63
  71. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  72. package/fesm2022/angular-three-soba-cameras.mjs +15 -15
  73. package/fesm2022/angular-three-soba-controls.mjs +3 -3
  74. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  75. package/fesm2022/angular-three-soba-materials.mjs +18 -17
  76. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  77. package/fesm2022/angular-three-soba-misc.mjs +22 -22
  78. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  79. package/fesm2022/angular-three-soba-performance.mjs +18 -18
  80. package/fesm2022/angular-three-soba-shaders.mjs +61 -1
  81. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  82. package/fesm2022/angular-three-soba-staging.mjs +90 -88
  83. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  84. package/misc/animations/animations.d.ts +1 -1
  85. package/package.json +16 -16
  86. package/performance/instances/instances.d.ts +2 -2
  87. package/performance/instances/position-mesh.d.ts +1 -1
  88. package/plugin/package.json +2 -2
  89. package/plugin/src/generators/init/init.d.ts +3 -0
  90. package/plugin/src/generators/init/init.js +7 -1
  91. package/plugin/src/generators/init/init.js.map +1 -1
  92. package/shaders/grid-material/grid-material.d.ts +4 -0
  93. package/shaders/index.d.ts +1 -0
  94. package/staging/caustics/caustisc.d.ts +1 -1
  95. package/staging/sparkles/sparkles.d.ts +1 -1
  96. package/staging/spot-light/spot-light-shadow-mesh.d.ts +2 -2
  97. package/staging/spot-light/volumetric-mesh.d.ts +1 -1
  98. package/staging/stars/stars.d.ts +1 -1
@@ -2,7 +2,7 @@ import { NgIf } from '@angular/common';
2
2
  import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, Input } from '@angular/core';
3
3
  import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtSignalStore, NgtStore } from 'angular-three';
4
4
  import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
5
- import { MeshBVH, SAH } from 'three-mesh-bvh';
5
+ import { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';
6
6
  import * as i0 from "@angular/core";
7
7
  extend({ MeshRefractionMaterial });
8
8
  const isCubeTexture = (def) => def && def.isCubeTexture;
@@ -94,12 +94,13 @@ class NgtsMeshRefractionMaterial extends NgtSignalStore {
94
94
  return;
95
95
  const geometry = getLocalState(material).parent()?.geometry;
96
96
  if (geometry) {
97
- material.bvh.updateFrom(new MeshBVH(geometry.toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
97
+ material.bvh = new MeshBVHUniformStruct();
98
+ material.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
98
99
  }
99
100
  });
100
101
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
103
104
  <ngt-mesh-refraction-material
104
105
  *ngIf="defines() as defines"
105
106
  [ref]="materialRef"
@@ -120,7 +121,7 @@ class NgtsMeshRefractionMaterial extends NgtSignalStore {
120
121
  `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
121
122
  }
122
123
  export { NgtsMeshRefractionMaterial };
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
124
125
  type: Component,
125
126
  args: [{
126
127
  selector: 'ngts-mesh-refraction-material',
@@ -165,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
165
166
  }], fastChroma: [{
166
167
  type: Input
167
168
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFOUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0QkFBNEI7SUFDNUIs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SU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgZWZmZWN0LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0UmVmLCBOZ3RTaWduYWxTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBNZXNoQlZILCBTQUggfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZSB7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgYm91bmNlczogbnVtYmVyO1xuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBpb3I6IG51bWJlcjtcbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgZnJlc25lbDogbnVtYmVyO1xuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgZmFzdENocm9tYTogYm9vbGVhbjtcbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuICAgICAgICAgICAgW2FiZXJyYXRpb25TdHJlbmd0aF09XCJyZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJyZWZyYWN0aW9uRW52TWFwKClcIlxuICAgICAgICAgICAgW2JvdW5jZXNdPVwicmVmcmFjdGlvbkJvdW5jZXMoKVwiXG4gICAgICAgICAgICBbaW9yXT1cInJlZnJhY3Rpb25Jb3IoKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJyZWZyYWN0aW9uRnJlc25lbCgpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJyZWZyYWN0aW9uQ29sb3IoKVwiXG4gICAgICAgICAgICBbZmFzdENocm9tYV09XCJyZWZyYWN0aW9uRmFzdENocm9tYSgpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBlbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgQElucHV0KCkgc2V0IGJvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYm91bmNlcyB9KTtcbiAgICB9XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIEBJbnB1dCgpIHNldCBpb3IoaW9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpb3IgfSk7XG4gICAgfVxuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJlc25lbChmcmVzbmVsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmVzbmVsIH0pO1xuICAgIH1cbiAgICAvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBhYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG4gICAgfVxuICAgIC8qKiBDb2xvciwgd2hpdGUgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFzdENocm9tYShmYXN0Q2hyb21hOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFzdENocm9tYSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZyYWN0aW9uRW52TWFwID0gdGhpcy5zZWxlY3QoJ2Vudk1hcCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Cb3VuY2VzID0gdGhpcy5zZWxlY3QoJ2JvdW5jZXMnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uSW9yID0gdGhpcy5zZWxlY3QoJ2lvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GcmVzbmVsID0gdGhpcy5zZWxlY3QoJ2ZyZXNuZWwnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Db2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GYXN0Q2hyb21hID0gdGhpcy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNlbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG5cbiAgICByZWFkb25seSBkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZNYXAgPSB0aGlzLiNlbnZNYXAoKTtcbiAgICAgICAgaWYgKCFlbnZNYXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMucmVmcmFjdGlvbkFiZXJyYXRpb25TdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBmYXN0Q2hyb21hID0gdGhpcy5yZWZyYWN0aW9uRmFzdENocm9tYSgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLiNzaXplKCkud2lkdGgsIHRoaXMuI3NpemUoKS5oZWlnaHRdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpIS52aWV3TWF0cml4SW52ZXJzZSA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgICNzZXR1cEdlb21ldHJ5KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudCgpPy5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVzaEJWSChnZW9tZXRyeS50b05vbkluZGV4ZWQoKSwgeyBsYXp5R2VuZXJhdGlvbjogZmFsc2UsIHN0cmF0ZWd5OiBTQUggfSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFcEUsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0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LEVBQUU7Z0JBSVosT0FBTztzQkFBbkIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndFNpZ25hbFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IE1lc2hCVkgsIE1lc2hCVkhVbmlmb3JtU3RydWN0LCBTQUggfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XG5cbmV4dGVuZCh7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZSB7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgYm91bmNlczogbnVtYmVyO1xuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBpb3I6IG51bWJlcjtcbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgZnJlc25lbDogbnVtYmVyO1xuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXI7XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgZmFzdENocm9tYTogYm9vbGVhbjtcbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuICAgICAgICAgICAgW2FiZXJyYXRpb25TdHJlbmd0aF09XCJyZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJyZWZyYWN0aW9uRW52TWFwKClcIlxuICAgICAgICAgICAgW2JvdW5jZXNdPVwicmVmcmFjdGlvbkJvdW5jZXMoKVwiXG4gICAgICAgICAgICBbaW9yXT1cInJlZnJhY3Rpb25Jb3IoKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJyZWZyYWN0aW9uRnJlc25lbCgpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJyZWZyYWN0aW9uQ29sb3IoKVwiXG4gICAgICAgICAgICBbZmFzdENocm9tYV09XCJyZWZyYWN0aW9uRmFzdENocm9tYSgpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbD4+KCk7XG4gICAgLyoqIEVudmlyb25tZW50IG1hcCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBlbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBOdW1iZXIgb2YgcmF5LWNhc3QgYm91bmNlcywgaXQgY2FuIGJlIGV4cGVuc2l2ZSB0byBoYXZlIHRvbyBtYW55LCAyICovXG4gICAgQElucHV0KCkgc2V0IGJvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYm91bmNlcyB9KTtcbiAgICB9XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIEBJbnB1dCgpIHNldCBpb3IoaW9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpb3IgfSk7XG4gICAgfVxuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJlc25lbChmcmVzbmVsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmVzbmVsIH0pO1xuICAgIH1cbiAgICAvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBhYmVycmF0aW9uU3RyZW5ndGgoYWJlcnJhdGlvblN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhYmVycmF0aW9uU3RyZW5ndGggfSk7XG4gICAgfVxuICAgIC8qKiBDb2xvciwgd2hpdGUgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFzdENocm9tYShmYXN0Q2hyb21hOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFzdENocm9tYSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZyYWN0aW9uRW52TWFwID0gdGhpcy5zZWxlY3QoJ2Vudk1hcCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Cb3VuY2VzID0gdGhpcy5zZWxlY3QoJ2JvdW5jZXMnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uSW9yID0gdGhpcy5zZWxlY3QoJ2lvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GcmVzbmVsID0gdGhpcy5zZWxlY3QoJ2ZyZXNuZWwnKTtcbiAgICByZWFkb25seSByZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ2FiZXJyYXRpb25TdHJlbmd0aCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Db2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25GYXN0Q2hyb21hID0gdGhpcy5zZWxlY3QoJ2Zhc3RDaHJvbWEnKTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuICAgIHJlYWRvbmx5ICNlbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG5cbiAgICByZWFkb25seSBkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZNYXAgPSB0aGlzLiNlbnZNYXAoKTtcbiAgICAgICAgaWYgKCFlbnZNYXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMucmVmcmFjdGlvbkFiZXJyYXRpb25TdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBmYXN0Q2hyb21hID0gdGhpcy5yZWZyYWN0aW9uRmFzdENocm9tYSgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLiNzaXplKCkud2lkdGgsIHRoaXMuI3NpemUoKS5oZWlnaHRdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpIS52aWV3TWF0cml4SW52ZXJzZSA9IGNhbWVyYS5tYXRyaXhXb3JsZDtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgICNzZXR1cEdlb21ldHJ5KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudCgpPy5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aCA9IG5ldyBNZXNoQlZIVW5pZm9ybVN0cnVjdCgpO1xuICAgICAgICAgICAgICAgIChtYXRlcmlhbCBhcyBhbnkpLmJ2aC51cGRhdGVGcm9tKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVzaEJWSChnZW9tZXRyeS5jbG9uZSgpLnRvTm9uSW5kZXhlZCgpLCB7IGxhenlHZW5lcmF0aW9uOiBmYWxzZSwgc3RyYXRlZ3k6IFNBSCB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -168,8 +168,8 @@ class NgtsMeshTranmissionMaterial extends NgtSignalStore {
168
168
  }
169
169
  });
170
170
  }
171
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshTranmissionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsMeshTranmissionMaterial, isStandalone: true, selector: "ngts-mesh-transmission-material", inputs: { materialRef: "materialRef", transmissionSampler: "transmissionSampler", backside: "backside", backsideThickness: "backsideThickness", resolution: "resolution", backsideResolution: "backsideResolution", samples: "samples", background: "background", transmission: "transmission", thickness: "thickness", roughness: "roughness", chromaticAberration: "chromaticAberration", anisotropy: "anisotropy", distortion: "distortion", distortionScale: "distortionScale", temporalDistortion: "temporalDistortion", buffer: "buffer", time: "time" }, usesInheritance: true, ngImport: i0, template: `
171
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshTranmissionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
172
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsMeshTranmissionMaterial, isStandalone: true, selector: "ngts-mesh-transmission-material", inputs: { materialRef: "materialRef", transmissionSampler: "transmissionSampler", backside: "backside", backsideThickness: "backsideThickness", resolution: "resolution", backsideResolution: "backsideResolution", samples: "samples", background: "background", transmission: "transmission", thickness: "thickness", roughness: "roughness", chromaticAberration: "chromaticAberration", anisotropy: "anisotropy", distortion: "distortion", distortionScale: "distortionScale", temporalDistortion: "temporalDistortion", buffer: "buffer", time: "time" }, usesInheritance: true, ngImport: i0, template: `
173
173
  <ngt-mesh-transmission-material
174
174
  ngtCompound
175
175
  *args="[transmissionSamples(), transmissionTransmissionSampler()]"
@@ -190,7 +190,7 @@ class NgtsMeshTranmissionMaterial extends NgtSignalStore {
190
190
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
191
191
  }
192
192
  export { NgtsMeshTranmissionMaterial };
193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshTranmissionMaterial, decorators: [{
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshTranmissionMaterial, decorators: [{
194
194
  type: Component,
195
195
  args: [{
196
196
  selector: 'ngts-mesh-transmission-material',
@@ -23,8 +23,8 @@ class NgtsMeshWobbleMaterial extends NgtSignalStore {
23
23
  this.material.time = clock.getElapsedTime() * this.get('speed');
24
24
  });
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshWobbleMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsMeshWobbleMaterial, isStandalone: true, selector: "ngts-mesh-wobble-material", inputs: { materialRef: "materialRef", time: "time", factor: "factor", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshWobbleMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsMeshWobbleMaterial, isStandalone: true, selector: "ngts-mesh-wobble-material", inputs: { materialRef: "materialRef", time: "time", factor: "factor", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
28
28
  <ngt-primitive
29
29
  *args="[material]"
30
30
  [ref]="materialRef"
@@ -36,7 +36,7 @@ class NgtsMeshWobbleMaterial extends NgtSignalStore {
36
36
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
37
37
  }
38
38
  export { NgtsMeshWobbleMaterial };
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshWobbleMaterial, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsMeshWobbleMaterial, decorators: [{
40
40
  type: Component,
41
41
  args: [{
42
42
  selector: 'ngts-mesh-wobble-material',
@@ -1,7 +1,7 @@
1
1
  import { DestroyRef, effect, inject, runInInjectionContext } from '@angular/core';
2
2
  import { assertInjectionContext, injectBeforeRender, injectNgtRef } from 'angular-three';
3
3
  import * as THREE from 'three';
4
- export function injectNgtsAnimations(animationsFactory, { ref, injector }) {
4
+ export function injectNgtsAnimations(animationsFactory, { ref, injector } = {}) {
5
5
  injector = assertInjectionContext(injectNgtsAnimations, injector);
6
6
  return runInInjectionContext(injector, () => {
7
7
  let actualRef = injectNgtRef();
@@ -29,27 +29,27 @@ export function injectNgtsAnimations(animationsFactory, { ref, injector }) {
29
29
  mixer.stopAllAction();
30
30
  });
31
31
  injectBeforeRender(({ delta }) => mixer.update(delta));
32
- requestAnimationFrame(() => {
33
- effect(() => {
34
- const actual = actualRef.nativeElement;
35
- const animations = animationsFactory();
36
- for (let i = 0; i < animations.length; i++) {
37
- const clip = animations[i];
38
- names.push(clip.name);
39
- clips.push(clip);
40
- Object.defineProperty(actions, clip.name, {
41
- enumerable: true,
42
- get: () => {
43
- return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));
44
- },
45
- });
46
- if (i === 0) {
47
- actions[clip.name].play();
48
- }
32
+ effect(() => {
33
+ const actual = actualRef.nativeElement;
34
+ if (!actual)
35
+ return;
36
+ const animations = animationsFactory();
37
+ for (let i = 0; i < animations.length; i++) {
38
+ const clip = animations[i];
39
+ names.push(clip.name);
40
+ clips.push(clip);
41
+ Object.defineProperty(actions, clip.name, {
42
+ enumerable: true,
43
+ get: () => {
44
+ return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));
45
+ },
46
+ });
47
+ if (i === 0) {
48
+ actions[clip.name].play();
49
49
  }
50
- }, { injector });
50
+ }
51
51
  });
52
52
  return { ref: actualRef, actions, mixer, names, clips };
53
53
  });
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsaUJBQThDLEVBQzlDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBa0Y7SUFFakcsUUFBUSxHQUFHLHNCQUFzQixDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN4QyxJQUFJLFNBQVMsR0FBRyxZQUFZLEVBQWtCLENBQUM7UUFFL0MsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJLEdBQUcsWUFBWSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUMvQixTQUFTLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxTQUFTLEdBQUcsR0FBRyxDQUFDO2FBQ25CO1NBQ0o7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsRUFBMkMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sR0FBRyxFQUEyQyxDQUFDO1FBRXpELE1BQU0sS0FBSyxHQUFHLEVBQTJCLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsRUFBYyxDQUFDO1FBRTdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzlCLGVBQWU7WUFDZixNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ1osa0JBQWtCO1lBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3RDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBd0MsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7WUFDSCxtQkFBbUI7WUFDbkIsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdkQscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sQ0FDRixHQUFHLEVBQUU7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDdkMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztnQkFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRWpCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ3RDLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixHQUFHLEVBQUUsR0FBRyxFQUFFOzRCQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDckYsQ0FBQztxQkFDSixDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQzdCO2lCQUNKO1lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLENBQ2YsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0b3IsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdGlvbkNvbnRleHQsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0UmVmLCB0eXBlIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzQW5pbWF0aW9ucyhcbiAgICBhbmltYXRpb25zRmFjdG9yeTogKCkgPT4gVEhSRUUuQW5pbWF0aW9uQ2xpcFtdLFxuICAgIHsgcmVmLCBpbmplY3RvciB9OiB7IHJlZj86IE5ndEluamVjdGVkUmVmPFRIUkVFLk9iamVjdDNEPiB8IFRIUkVFLk9iamVjdDNEOyBpbmplY3Rvcj86IEluamVjdG9yIH1cbikge1xuICAgIGluamVjdG9yID0gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChpbmplY3ROZ3RzQW5pbWF0aW9ucywgaW5qZWN0b3IpO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgbGV0IGFjdHVhbFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5PYmplY3QzRD4oKTtcblxuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICBpZiAocmVmIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0QpIHtcbiAgICAgICAgICAgICAgICBhY3R1YWxSZWYubmF0aXZlRWxlbWVudCA9IHJlZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsUmVmID0gcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWl4ZXIgPSBuZXcgVEhSRUUuQW5pbWF0aW9uTWl4ZXIobnVsbCEpO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0ge30gYXMgUmVjb3JkPHN0cmluZywgVEhSRUUuQW5pbWF0aW9uQWN0aW9uPjtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFRIUkVFLkFuaW1hdGlvbkFjdGlvbj47XG5cbiAgICAgICAgY29uc3QgY2xpcHMgPSBbXSBhcyBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgICAgIGNvbnN0IG5hbWVzID0gW10gYXMgc3RyaW5nW107XG5cbiAgICAgICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBjbGVhciBjYWNoZWRcbiAgICAgICAgICAgIGNhY2hlZCA9IHt9O1xuICAgICAgICAgICAgLy8gdW5jYWNoZSBhY3Rpb25zXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIG1peGVyLnVuY2FjaGVBY3Rpb24oYWN0aW9uIGFzIHVua25vd24gYXMgVEhSRUUuQW5pbWF0aW9uQ2xpcCwgYWN0dWFsUmVmLnVudHJhY2tlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHN0b3AgYWxsIGFjdGlvbnNcbiAgICAgICAgICAgIG1peGVyLnN0b3BBbGxBY3Rpb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IG1peGVyLnVwZGF0ZShkZWx0YSkpO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBhY3R1YWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbnNGYWN0b3J5KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlwID0gYW5pbWF0aW9uc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaChjbGlwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHMucHVzaChjbGlwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdGlvbnMsIGNsaXAubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRbY2xpcC5uYW1lXSB8fCAoY2FjaGVkW2NsaXAubmFtZV0gPSBtaXhlci5jbGlwQWN0aW9uKGNsaXAsIGFjdHVhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zW2NsaXAubmFtZV0ucGxheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IGluamVjdG9yIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlZjogYWN0dWFsUmVmLCBhY3Rpb25zLCBtaXhlciwgbmFtZXMsIGNsaXBzIH07XG4gICAgfSk7XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsaUJBQThDLEVBQzlDLEVBQUUsR0FBRyxFQUFFLFFBQVEsS0FBcUYsRUFBRTtJQUV0RyxRQUFRLEdBQUcsc0JBQXNCLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLElBQUksU0FBUyxHQUFHLFlBQVksRUFBa0IsQ0FBQztRQUUvQyxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQy9CLFNBQVMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNILFNBQVMsR0FBRyxHQUFHLENBQUM7YUFDbkI7U0FDSjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxFQUEyQyxDQUFDO1FBQzVELElBQUksTUFBTSxHQUFHLEVBQTJDLENBQUM7UUFFekQsTUFBTSxLQUFLLEdBQUcsRUFBMkIsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxFQUFjLENBQUM7UUFFN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsZUFBZTtZQUNmLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDWixrQkFBa0I7WUFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUF3QyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUNILG1CQUFtQjtZQUNuQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV2RCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWpCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3RDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixHQUFHLEVBQUUsR0FBRyxFQUFFO3dCQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDckYsQ0FBQztpQkFDSixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzdCO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdG9yLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3Rpb25Db250ZXh0LCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgdHlwZSBOZ3RJbmplY3RlZFJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0c0FuaW1hdGlvbnMoXG4gICAgYW5pbWF0aW9uc0ZhY3Rvcnk6ICgpID0+IFRIUkVFLkFuaW1hdGlvbkNsaXBbXSxcbiAgICB7IHJlZiwgaW5qZWN0b3IgfTogeyByZWY/OiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD4gfCBUSFJFRS5PYmplY3QzRDsgaW5qZWN0b3I/OiBJbmplY3RvciB9ID0ge31cbikge1xuICAgIGluamVjdG9yID0gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChpbmplY3ROZ3RzQW5pbWF0aW9ucywgaW5qZWN0b3IpO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgbGV0IGFjdHVhbFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5PYmplY3QzRD4oKTtcblxuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICBpZiAocmVmIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0QpIHtcbiAgICAgICAgICAgICAgICBhY3R1YWxSZWYubmF0aXZlRWxlbWVudCA9IHJlZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsUmVmID0gcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWl4ZXIgPSBuZXcgVEhSRUUuQW5pbWF0aW9uTWl4ZXIobnVsbCEpO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0ge30gYXMgUmVjb3JkPHN0cmluZywgVEhSRUUuQW5pbWF0aW9uQWN0aW9uPjtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFRIUkVFLkFuaW1hdGlvbkFjdGlvbj47XG5cbiAgICAgICAgY29uc3QgY2xpcHMgPSBbXSBhcyBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgICAgIGNvbnN0IG5hbWVzID0gW10gYXMgc3RyaW5nW107XG5cbiAgICAgICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBjbGVhciBjYWNoZWRcbiAgICAgICAgICAgIGNhY2hlZCA9IHt9O1xuICAgICAgICAgICAgLy8gdW5jYWNoZSBhY3Rpb25zXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIG1peGVyLnVuY2FjaGVBY3Rpb24oYWN0aW9uIGFzIHVua25vd24gYXMgVEhSRUUuQW5pbWF0aW9uQ2xpcCwgYWN0dWFsUmVmLnVudHJhY2tlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHN0b3AgYWxsIGFjdGlvbnNcbiAgICAgICAgICAgIG1peGVyLnN0b3BBbGxBY3Rpb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IG1peGVyLnVwZGF0ZShkZWx0YSkpO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBhY3R1YWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghYWN0dWFsKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhbmltYXRpb25zID0gYW5pbWF0aW9uc0ZhY3RvcnkoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcCA9IGFuaW1hdGlvbnNbaV07XG5cbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKGNsaXAubmFtZSk7XG4gICAgICAgICAgICAgICAgY2xpcHMucHVzaChjbGlwKTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhY3Rpb25zLCBjbGlwLm5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkW2NsaXAubmFtZV0gfHwgKGNhY2hlZFtjbGlwLm5hbWVdID0gbWl4ZXIuY2xpcEFjdGlvbihjbGlwLCBhY3R1YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnNbY2xpcC5uYW1lXS5wbGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyByZWY6IGFjdHVhbFJlZiwgYWN0aW9ucywgbWl4ZXIsIG5hbWVzLCBjbGlwcyB9O1xuICAgIH0pO1xufVxuIl19
@@ -13,11 +13,11 @@ class NgtsBakeShadows {
13
13
  });
14
14
  });
15
15
  }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBakeShadows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", ngImport: i0 }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsBakeShadows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", ngImport: i0 }); }
18
18
  }
19
19
  export { NgtsBakeShadows };
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBakeShadows, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsBakeShadows, decorators: [{
21
21
  type: Directive,
22
22
  args: [{ selector: 'ngts-bake-shadows', standalone: true }]
23
23
  }], ctorParameters: function () { return []; } });
@@ -30,11 +30,11 @@ class NgtsAdaptiveDpr {
30
30
  gl.domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';
31
31
  }, { allowSignalWrites: true });
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
34
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, ngImport: i0 }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
34
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, ngImport: i0 }); }
35
35
  }
36
36
  export { NgtsAdaptiveDpr };
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
38
38
  type: Directive,
39
39
  args: [{
40
40
  selector: 'ngts-adaptive-dpr',
@@ -17,11 +17,11 @@ class NgtsAdaptiveEvents {
17
17
  setEvents({ enabled: performanceCurrent() === 1 });
18
18
  }, { allowSignalWrites: true });
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
22
22
  }
23
23
  export { NgtsAdaptiveEvents };
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
25
25
  type: Directive,
26
26
  args: [{
27
27
  selector: 'ngts-adaptive-events',
@@ -32,15 +32,15 @@ class NgtsDetailed extends NgtSignalStore {
32
32
  }
33
33
  });
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
37
37
  <ngt-lOD ngtCompound [ref]="lodRef" (beforeRender)="onLODBeforeRender($event)">
38
38
  <ng-content />
39
39
  </ngt-lOD>
40
40
  `, isInline: true }); }
41
41
  }
42
42
  export { NgtsDetailed };
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsDetailed, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsDetailed, decorators: [{
44
44
  type: Component,
45
45
  args: [{
46
46
  selector: 'ngts-detailed',
@@ -14,8 +14,8 @@ class NgtsInstance {
14
14
  });
15
15
  });
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", ngImport: i0, template: `
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", ngImport: i0, template: `
19
19
  <ngt-position-mesh
20
20
  ngtCompound
21
21
  [ref]="positionMeshRef"
@@ -27,7 +27,7 @@ class NgtsInstance {
27
27
  `, isInline: true }); }
28
28
  }
29
29
  export { NgtsInstance };
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstance, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstance, decorators: [{
31
31
  type: Component,
32
32
  args: [{
33
33
  selector: 'ngts-instance',
@@ -106,8 +106,8 @@ class NgtsInstances extends NgtSignalStore {
106
106
  }
107
107
  });
108
108
  }
109
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
110
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { instancesRef: "instancesRef", range: "range", limit: "limit", frames: "frames" }, providers: [
109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { instancesRef: "instancesRef", range: "range", limit: "limit", frames: "frames" }, providers: [
111
111
  { provide: NGTS_INSTANCES_API, useFactory: (instances) => instances.api, deps: [NgtsInstances] },
112
112
  ], usesInheritance: true, ngImport: i0, template: `
113
113
  <ngt-instanced-mesh
@@ -138,7 +138,7 @@ class NgtsInstances extends NgtSignalStore {
138
138
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
139
139
  }
140
140
  export { NgtsInstances };
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstances, decorators: [{
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstances, decorators: [{
142
142
  type: Component,
143
143
  args: [{
144
144
  selector: 'ngts-instances',
@@ -57,11 +57,11 @@ class NgtsStats extends NgtSignalStore {
57
57
  });
58
58
  });
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStats, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
61
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes", right: "right" }, usesInheritance: true, ngImport: i0 }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsStats, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
61
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes", right: "right" }, usesInheritance: true, ngImport: i0 }); }
62
62
  }
63
63
  export { NgtsStats };
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStats, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsStats, decorators: [{
65
65
  type: Directive,
66
66
  args: [{
67
67
  selector: 'ngts-stats',
@@ -0,0 +1,62 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const GridMaterial = shaderMaterial({
4
+ cellSize: 0.5,
5
+ sectionSize: 1,
6
+ fadeDistance: 100,
7
+ fadeStrength: 1,
8
+ cellThickness: 0.5,
9
+ sectionThickness: 1,
10
+ cellColor: new THREE.Color(),
11
+ sectionColor: new THREE.Color(),
12
+ infiniteGrid: false,
13
+ followCamera: false,
14
+ },
15
+ /* glsl */ `
16
+ varying vec3 worldPosition;
17
+ uniform float fadeDistance;
18
+ uniform bool infiniteGrid;
19
+ uniform bool followCamera;
20
+
21
+ void main() {
22
+ worldPosition = position.xzy;
23
+ if (infiniteGrid) worldPosition *= 1.0 + fadeDistance;
24
+ if (followCamera) worldPosition.xz +=cameraPosition.xz;
25
+
26
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);
27
+ }
28
+ `,
29
+ /* glsl */ `
30
+ varying vec3 worldPosition;
31
+ uniform float cellSize;
32
+ uniform float sectionSize;
33
+ uniform vec3 cellColor;
34
+ uniform vec3 sectionColor;
35
+ uniform float fadeDistance;
36
+ uniform float fadeStrength;
37
+ uniform float cellThickness;
38
+ uniform float sectionThickness;
39
+
40
+ float getGrid(float size, float thickness) {
41
+ vec2 r = worldPosition.xz / size;
42
+ vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
43
+ float line = min(grid.x, grid.y) + 1. - thickness;
44
+ return 1.0 - min(line, 1.);
45
+ }
46
+
47
+ void main() {
48
+ float g1 = getGrid(cellSize, cellThickness);
49
+ float g2 = getGrid(sectionSize, sectionThickness);
50
+
51
+ float d = 1.0 - min(distance(cameraPosition.xz, worldPosition.xz) / fadeDistance, 1.);
52
+ vec3 color = mix(cellColor, sectionColor, min(1.,sectionThickness * g2));
53
+
54
+ gl_FragColor = vec4(color, (g1 + g2) * pow(d,fadeStrength));
55
+ gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
56
+ if (gl_FragColor.a <= 0.0) discard;
57
+
58
+ #include <tonemapping_fragment>
59
+ #include <encodings_fragment>
60
+ }
61
+ `);
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9ncmlkLW1hdGVyaWFsL2dyaWQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQ3RDO0lBQ0ksUUFBUSxFQUFFLEdBQUc7SUFDYixXQUFXLEVBQUUsQ0FBQztJQUNkLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFlBQVksRUFBRSxDQUFDO0lBQ2YsYUFBYSxFQUFFLEdBQUc7SUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQixTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFlBQVksRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDL0IsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7Q0FDdEI7QUFDRCxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7R0FhWjtBQUNDLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ1osQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IEdyaWRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHtcbiAgICAgICAgY2VsbFNpemU6IDAuNSxcbiAgICAgICAgc2VjdGlvblNpemU6IDEsXG4gICAgICAgIGZhZGVEaXN0YW5jZTogMTAwLFxuICAgICAgICBmYWRlU3RyZW5ndGg6IDEsXG4gICAgICAgIGNlbGxUaGlja25lc3M6IDAuNSxcbiAgICAgICAgc2VjdGlvblRoaWNrbmVzczogMSxcbiAgICAgICAgY2VsbENvbG9yOiBuZXcgVEhSRUUuQ29sb3IoKSxcbiAgICAgICAgc2VjdGlvbkNvbG9yOiBuZXcgVEhSRUUuQ29sb3IoKSxcbiAgICAgICAgaW5maW5pdGVHcmlkOiBmYWxzZSxcbiAgICAgICAgZm9sbG93Q2FtZXJhOiBmYWxzZSxcbiAgICB9LFxuICAgIC8qIGdsc2wgKi8gYFxuICAgIHZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xuICAgIHVuaWZvcm0gZmxvYXQgZmFkZURpc3RhbmNlO1xuICAgIHVuaWZvcm0gYm9vbCBpbmZpbml0ZUdyaWQ7XG4gICAgdW5pZm9ybSBib29sIGZvbGxvd0NhbWVyYTtcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHdvcmxkUG9zaXRpb24gPSBwb3NpdGlvbi54enk7XG4gICAgICBpZiAoaW5maW5pdGVHcmlkKSB3b3JsZFBvc2l0aW9uICo9IDEuMCArIGZhZGVEaXN0YW5jZTtcbiAgICAgIGlmIChmb2xsb3dDYW1lcmEpIHdvcmxkUG9zaXRpb24ueHogKz1jYW1lcmFQb3NpdGlvbi54ejtcblxuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCh3b3JsZFBvc2l0aW9uLCAxLjApO1xuICAgIH1cbiAgYCxcbiAgICAvKiBnbHNsICovIGBcbiAgICB2YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbiAgICB1bmlmb3JtIGZsb2F0IGNlbGxTaXplO1xuICAgIHVuaWZvcm0gZmxvYXQgc2VjdGlvblNpemU7XG4gICAgdW5pZm9ybSB2ZWMzIGNlbGxDb2xvcjtcbiAgICB1bmlmb3JtIHZlYzMgc2VjdGlvbkNvbG9yO1xuICAgIHVuaWZvcm0gZmxvYXQgZmFkZURpc3RhbmNlO1xuICAgIHVuaWZvcm0gZmxvYXQgZmFkZVN0cmVuZ3RoO1xuICAgIHVuaWZvcm0gZmxvYXQgY2VsbFRoaWNrbmVzcztcbiAgICB1bmlmb3JtIGZsb2F0IHNlY3Rpb25UaGlja25lc3M7XG5cbiAgICBmbG9hdCBnZXRHcmlkKGZsb2F0IHNpemUsIGZsb2F0IHRoaWNrbmVzcykge1xuICAgICAgdmVjMiByID0gd29ybGRQb3NpdGlvbi54eiAvIHNpemU7XG4gICAgICB2ZWMyIGdyaWQgPSBhYnMoZnJhY3QociAtIDAuNSkgLSAwLjUpIC8gZndpZHRoKHIpO1xuICAgICAgZmxvYXQgbGluZSA9IG1pbihncmlkLngsIGdyaWQueSkgKyAxLiAtIHRoaWNrbmVzcztcbiAgICAgIHJldHVybiAxLjAgLSBtaW4obGluZSwgMS4pO1xuICAgIH1cblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIGZsb2F0IGcxID0gZ2V0R3JpZChjZWxsU2l6ZSwgY2VsbFRoaWNrbmVzcyk7XG4gICAgICBmbG9hdCBnMiA9IGdldEdyaWQoc2VjdGlvblNpemUsIHNlY3Rpb25UaGlja25lc3MpO1xuXG4gICAgICBmbG9hdCBkID0gMS4wIC0gbWluKGRpc3RhbmNlKGNhbWVyYVBvc2l0aW9uLnh6LCB3b3JsZFBvc2l0aW9uLnh6KSAvIGZhZGVEaXN0YW5jZSwgMS4pO1xuICAgICAgdmVjMyBjb2xvciA9IG1peChjZWxsQ29sb3IsIHNlY3Rpb25Db2xvciwgbWluKDEuLHNlY3Rpb25UaGlja25lc3MgKiBnMikpO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCAoZzEgKyBnMikgKiBwb3coZCxmYWRlU3RyZW5ndGgpKTtcbiAgICAgIGdsX0ZyYWdDb2xvci5hID0gbWl4KDAuNzUgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLmEsIGcyKTtcbiAgICAgIGlmIChnbF9GcmFnQ29sb3IuYSA8PSAwLjApIGRpc2NhcmQ7XG5cbiAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgICAgICNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG4gICAgfVxuICBgXG4pO1xuIl19
@@ -3,6 +3,7 @@ export * from './caustics-material/caustics-material';
3
3
  export * from './caustics-material/caustics-projection-material';
4
4
  export * from './convolution-material/convolution-material';
5
5
  export * from './discard-material/discard-material';
6
+ export * from './grid-material/grid-material';
6
7
  export * from './mesh-distort-material/mesh-distort-material';
7
8
  export * from './mesh-reflector-material/mesh-reflector-material';
8
9
  export * from './mesh-refraction-material/mesh-refraction-material';
@@ -12,4 +13,4 @@ export * from './soft-shadow-material/soft-shadow-material';
12
13
  export * from './sparkles-material/sparkles-material';
13
14
  export * from './spot-light-material/spot-light-material';
14
15
  export * from './star-field-material/star-field-material';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ibHVyLXBhc3MvYmx1ci1wYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vY2F1c3RpY3MtbWF0ZXJpYWwvY2F1c3RpY3MtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXVzdGljcy1tYXRlcmlhbC9jYXVzdGljcy1wcm9qZWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXNjYXJkLW1hdGVyaWFsL2Rpc2NhcmQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwvbWVzaC1kaXN0b3J0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NvZnQtc2hhZG93LW1hdGVyaWFsL3NvZnQtc2hhZG93LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwnO1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JsdXItcGFzcy9ibHVyLXBhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXVzdGljcy1tYXRlcmlhbC9jYXVzdGljcy1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2NhdXN0aWNzLW1hdGVyaWFsL2NhdXN0aWNzLXByb2plY3Rpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jb252b2x1dGlvbi1tYXRlcmlhbC9jb252b2x1dGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2Rpc2NhcmQtbWF0ZXJpYWwvZGlzY2FyZC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2dyaWQtbWF0ZXJpYWwvZ3JpZC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbC9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc2gtd29iYmxlLW1hdGVyaWFsL21lc2gtd29iYmxlLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vc29mdC1zaGFkb3ctbWF0ZXJpYWwvc29mdC1zaGFkb3ctbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGFya2xlcy1tYXRlcmlhbC9zcGFya2xlcy1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL3Nwb3QtbGlnaHQtbWF0ZXJpYWwvc3BvdC1saWdodC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXItZmllbGQtbWF0ZXJpYWwvc3Rhci1maWVsZC1tYXRlcmlhbCc7XG4iXX0=