angular-three-soba 2.0.0-beta.8 → 2.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 +62 -4
- package/abstractions/README.md +279 -2
- package/abstractions/index.d.ts +13 -6
- package/abstractions/lib/billboard.d.ts +19 -0
- package/abstractions/lib/catmull-rom-line.d.ts +617 -0
- package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
- package/abstractions/lib/edges.d.ts +800 -0
- package/abstractions/lib/gradient-texture.d.ts +24 -0
- package/abstractions/lib/grid.d.ts +315 -0
- package/abstractions/lib/helper.d.ts +25 -0
- package/abstractions/lib/line.d.ts +41 -0
- package/abstractions/lib/prism-geometry.d.ts +32 -0
- package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
- package/abstractions/lib/rounded-box.d.ts +41 -0
- package/abstractions/lib/text-3d.d.ts +314 -0
- package/abstractions/lib/text.d.ts +54 -0
- package/cameras/README.md +91 -2
- package/cameras/index.d.ts +4 -4
- package/cameras/lib/camera-content.d.ts +10 -0
- package/cameras/lib/cube-camera.d.ts +38 -0
- package/cameras/lib/orthographic-camera.d.ts +40 -0
- package/cameras/lib/perspective-camera.d.ts +36 -0
- package/controls/README.md +96 -2
- package/controls/index.d.ts +4 -1
- package/controls/lib/camera-controls.d.ts +31 -0
- package/controls/lib/orbit-controls.d.ts +38 -0
- package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
- package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
- package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
- package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
- package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
- package/controls/lib/scroll-controls.d.ts +78 -0
- package/esm2022/abstractions/index.mjs +14 -7
- package/esm2022/abstractions/lib/billboard.mjs +69 -0
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
- package/esm2022/abstractions/lib/edges.mjs +70 -0
- package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
- package/esm2022/abstractions/lib/grid.mjs +103 -0
- package/esm2022/abstractions/lib/helper.mjs +76 -0
- package/esm2022/abstractions/lib/line.mjs +126 -0
- package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
- package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
- package/esm2022/abstractions/lib/text-3d.mjs +98 -0
- package/esm2022/abstractions/lib/text.mjs +91 -0
- package/esm2022/cameras/index.mjs +5 -5
- package/esm2022/cameras/lib/camera-content.mjs +14 -0
- package/esm2022/cameras/lib/cube-camera.mjs +111 -0
- package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
- package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
- package/esm2022/controls/index.mjs +5 -2
- package/esm2022/controls/lib/camera-controls.mjs +127 -0
- package/esm2022/controls/lib/orbit-controls.mjs +132 -0
- package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
- package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
- package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
- package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
- package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
- package/esm2022/controls/lib/scroll-controls.mjs +268 -0
- package/esm2022/loaders/index.mjs +6 -5
- package/esm2022/loaders/lib/font-loader.mjs +49 -0
- package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
- package/esm2022/loaders/lib/loader.mjs +109 -0
- package/esm2022/loaders/lib/progress.mjs +51 -0
- package/esm2022/loaders/lib/texture-loader.mjs +32 -0
- package/esm2022/materials/index.mjs +8 -7
- package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
- package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
- package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
- package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
- package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
- package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
- package/esm2022/materials/lib/point-material.mjs +33 -0
- package/esm2022/misc/index.mjs +14 -14
- package/esm2022/misc/lib/animations.mjs +71 -0
- package/esm2022/misc/lib/bake-shadows.mjs +26 -0
- package/esm2022/misc/lib/computed-attribute.mjs +55 -0
- package/esm2022/misc/lib/constants.mjs +5 -0
- package/esm2022/misc/lib/decal.mjs +139 -0
- package/esm2022/misc/lib/deprecated.mjs +15 -0
- package/esm2022/misc/lib/depth-buffer.mjs +39 -0
- package/esm2022/misc/lib/fbo.mjs +86 -0
- package/esm2022/misc/lib/html/html-content.mjs +327 -0
- package/esm2022/misc/lib/html/html.mjs +129 -0
- package/esm2022/misc/lib/html/utils.mjs +74 -0
- package/esm2022/misc/lib/intersect.mjs +52 -0
- package/esm2022/misc/lib/sampler.mjs +122 -0
- package/esm2022/misc/lib/scale-factor.mjs +29 -0
- package/esm2022/performances/index.mjs +7 -6
- package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
- package/esm2022/performances/lib/adaptive-events.mjs +28 -0
- package/esm2022/performances/lib/detailed.mjs +57 -0
- package/esm2022/performances/lib/instances/instances.mjs +183 -0
- package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
- package/esm2022/performances/lib/points/points.mjs +278 -0
- package/esm2022/performances/lib/points/position-point.mjs +53 -0
- package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
- package/esm2022/performances/lib/segments/segments.mjs +129 -0
- package/esm2022/shaders/index.mjs +4 -18
- package/esm2022/shaders/lib/grid-material.mjs +81 -0
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
- package/esm2022/shaders/lib/point-material.mjs +24 -0
- package/esm2022/staging/index.mjs +19 -22
- package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
- package/esm2022/staging/lib/backdrop.mjs +73 -0
- package/esm2022/staging/lib/bb-anchor.mjs +58 -0
- package/esm2022/staging/lib/bounds.mjs +286 -0
- package/esm2022/staging/lib/camera-shake.mjs +69 -0
- package/esm2022/staging/lib/caustics.mjs +188 -0
- package/esm2022/staging/lib/center.mjs +118 -0
- package/esm2022/staging/lib/contact-shadows.mjs +214 -0
- package/esm2022/staging/lib/environment.mjs +481 -0
- package/esm2022/staging/lib/float.mjs +70 -0
- package/esm2022/staging/lib/lightformer.mjs +107 -0
- package/esm2022/staging/lib/matcap-texture.mjs +81 -0
- package/esm2022/staging/lib/normal-texture.mjs +81 -0
- package/esm2022/staging/lib/randomized-lights.mjs +104 -0
- package/esm2022/staging/lib/render-texture.mjs +203 -0
- package/esm2022/staging/lib/sky.mjs +86 -0
- package/esm2022/staging/lib/spot-light.mjs +453 -0
- package/esm2022/staging/lib/stage.mjs +236 -0
- package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
- package/esm2022/stats/index.mjs +2 -0
- package/esm2022/stats/lib/stats.mjs +63 -0
- package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
- package/esm2022/vanilla-exports/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +261 -308
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +1776 -109
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +191 -145
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +527 -748
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +783 -1935
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +591 -475
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2350 -3521
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +70 -0
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
- package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
- package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
- package/loaders/README.md +130 -2
- package/loaders/index.d.ts +5 -4
- package/loaders/lib/font-loader.d.ts +27 -0
- package/loaders/lib/gltf-loader.d.ts +24 -0
- package/loaders/lib/loader.d.ts +29 -0
- package/loaders/lib/progress.d.ts +9 -0
- package/loaders/lib/texture-loader.d.ts +13 -0
- package/materials/README.md +160 -2
- package/materials/index.d.ts +7 -6
- package/materials/lib/custom-shader-material.d.ts +20 -0
- package/materials/lib/mesh-distort-material.d.ts +17 -0
- package/materials/lib/mesh-reflector-material.d.ts +51 -0
- package/materials/lib/mesh-refraction-material.d.ts +42 -0
- package/materials/lib/mesh-transmission-material.d.ts +77 -0
- package/materials/lib/mesh-wobble-material.d.ts +15 -0
- package/materials/lib/point-material.d.ts +11 -0
- package/metadata.json +1 -1
- package/misc/README.md +217 -2
- package/misc/index.d.ts +13 -13
- package/misc/lib/animations.d.ts +17 -0
- package/misc/lib/computed-attribute.d.ts +64 -0
- package/misc/lib/constants.d.ts +1 -0
- package/misc/lib/decal.d.ts +27 -0
- package/misc/lib/deprecated.d.ts +14 -0
- package/misc/lib/depth-buffer.d.ts +8 -0
- package/misc/lib/fbo.d.ts +46 -0
- package/misc/lib/html/html-content.d.ts +47 -0
- package/misc/lib/html/html.d.ts +30 -0
- package/misc/lib/html/utils.d.ts +14 -0
- package/misc/lib/intersect.d.ts +13 -0
- package/misc/lib/sampler.d.ts +73 -0
- package/misc/lib/scale-factor.d.ts +3 -0
- package/package.json +89 -48
- package/performances/index.d.ts +6 -5
- package/performances/lib/adaptive-dpr.d.ts +7 -0
- package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
- package/performances/lib/detailed.d.ts +17 -0
- package/performances/lib/instances/instances.d.ts +122 -0
- package/performances/lib/instances/position-mesh.d.ts +20 -0
- package/performances/lib/points/points.d.ts +224 -0
- package/performances/lib/points/position-point.d.ts +21 -0
- package/performances/lib/segments/segment-object.d.ts +17 -0
- package/performances/lib/segments/segments.d.ts +97 -0
- package/shaders/index.d.ts +3 -17
- package/shaders/lib/grid-material.d.ts +69 -0
- package/shaders/lib/mesh-refraction-material.d.ts +11 -0
- package/shaders/lib/point-material.d.ts +14 -0
- package/staging/README.md +473 -2
- package/staging/index.d.ts +18 -21
- package/staging/lib/accumulative-shadows.d.ts +75 -0
- package/staging/lib/backdrop.d.ts +22 -0
- package/staging/lib/bb-anchor.d.ts +17 -0
- package/staging/lib/bounds.d.ts +47 -0
- package/staging/lib/camera-shake.d.ts +29 -0
- package/staging/lib/caustics.d.ts +53 -0
- package/staging/lib/center.d.ts +390 -0
- package/staging/lib/contact-shadows.d.ts +55 -0
- package/staging/lib/environment.d.ts +132 -0
- package/staging/lib/float.d.ts +20 -0
- package/staging/lib/lightformer.d.ts +310 -0
- package/staging/lib/matcap-texture.d.ts +32 -0
- package/staging/lib/normal-texture.d.ts +37 -0
- package/staging/lib/randomized-lights.d.ts +54 -0
- package/staging/lib/render-texture.d.ts +64 -0
- package/staging/lib/sky.d.ts +32 -0
- package/staging/lib/spot-light.d.ts +119 -0
- package/staging/lib/stage.d.ts +352 -0
- package/stats/README.md +3 -0
- package/stats/index.d.ts +1 -0
- package/stats/lib/stats.d.ts +14 -0
- package/vanilla-exports/README.md +3 -0
- package/vanilla-exports/index.d.ts +27 -0
- package/web-types.json +1 -1
- package/abstractions/billboard/billboard.d.ts +0 -28
- package/abstractions/detailed/detailed.d.ts +0 -26
- package/abstractions/edges/edges.d.ts +0 -34
- package/abstractions/grid/grid.d.ts +0 -50
- package/abstractions/text/text.d.ts +0 -82
- package/abstractions/text-3d/text-3d.d.ts +0 -81
- package/assets/distort.vert.glsl +0 -1
- package/cameras/camera/camera-content.d.ts +0 -13
- package/cameras/camera/camera.d.ts +0 -26
- package/cameras/cube-camera/cube-camera.d.ts +0 -69
- package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
- package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
- package/controls/orbit-controls/orbit-controls.d.ts +0 -54
- package/esm2022/abstractions/billboard/billboard.mjs +0 -74
- package/esm2022/abstractions/detailed/detailed.mjs +0 -64
- package/esm2022/abstractions/edges/edges.mjs +0 -88
- package/esm2022/abstractions/grid/grid.mjs +0 -180
- package/esm2022/abstractions/text/text.mjs +0 -274
- package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
- package/esm2022/cameras/camera/camera-content.mjs +0 -20
- package/esm2022/cameras/camera/camera.mjs +0 -77
- package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
- package/esm2022/loaders/loader/loader.mjs +0 -138
- package/esm2022/loaders/progress/progress.mjs +0 -45
- package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
- package/esm2022/materials/point-material/point-material.mjs +0 -46
- package/esm2022/misc/animations/animations.mjs +0 -59
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
- package/esm2022/misc/caustics/caustics.mjs +0 -387
- package/esm2022/misc/decal/decal.mjs +0 -187
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
- package/esm2022/misc/example/example.mjs +0 -160
- package/esm2022/misc/fbo/fbo.mjs +0 -47
- package/esm2022/misc/html/html-wrapper.mjs +0 -478
- package/esm2022/misc/html/html.mjs +0 -304
- package/esm2022/misc/sampler/sampler.mjs +0 -142
- package/esm2022/misc/shadow/shadow.mjs +0 -111
- package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
- package/esm2022/misc/trail/trail.mjs +0 -209
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
- package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
- package/esm2022/modifiers/index.mjs +0 -2
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
- package/esm2022/performances/points/points-input.mjs +0 -64
- package/esm2022/performances/points/points.mjs +0 -329
- package/esm2022/performances/points/position-point.mjs +0 -54
- package/esm2022/performances/segments/segment-object.mjs +0 -9
- package/esm2022/performances/segments/segments.mjs +0 -182
- package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
- package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
- package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
- package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
- package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
- package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
- package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
- package/esm2022/staging/backdrop/backdrop.mjs +0 -77
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
- package/esm2022/staging/bounds/bounds.mjs +0 -308
- package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
- package/esm2022/staging/center/center.mjs +0 -163
- package/esm2022/staging/cloud/cloud.mjs +0 -158
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
- package/esm2022/staging/environment/assets.mjs +0 -13
- package/esm2022/staging/environment/environment-cube.mjs +0 -47
- package/esm2022/staging/environment/environment-ground.mjs +0 -41
- package/esm2022/staging/environment/environment-input.mjs +0 -119
- package/esm2022/staging/environment/environment-map.mjs +0 -53
- package/esm2022/staging/environment/environment-portal.mjs +0 -113
- package/esm2022/staging/environment/environment.mjs +0 -61
- package/esm2022/staging/environment/utils.mjs +0 -105
- package/esm2022/staging/float/float.mjs +0 -94
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
- package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
- package/esm2022/staging/sky/sky.mjs +0 -119
- package/esm2022/staging/sparkles/sparkles.mjs +0 -164
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
- package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
- package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
- package/esm2022/staging/spot-light/spot-light.mjs +0 -81
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
- package/esm2022/staging/stage/stage.mjs +0 -388
- package/esm2022/staging/stars/stars.mjs +0 -147
- package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
- package/esm2022/staging/wireframe/wireframe.mjs +0 -224
- package/esm2022/utils/content/content.mjs +0 -15
- package/esm2022/utils/index.mjs +0 -2
- package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
- package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
- package/fesm2022/angular-three-soba-utils.mjs +0 -22
- package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
- package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
- package/loaders/loader/loader.d.ts +0 -33
- package/loaders/progress/progress.d.ts +0 -9
- package/loaders/texture-loader/texture-loader.d.ts +0 -7
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
- package/materials/point-material/point-material.d.ts +0 -24
- package/misc/animations/animations.d.ts +0 -15
- package/misc/caustics/caustics.d.ts +0 -87
- package/misc/decal/decal.d.ts +0 -49
- package/misc/depth-buffer/depth-buffer.d.ts +0 -9
- package/misc/example/example.d.ts +0 -81
- package/misc/fbo/fbo.d.ts +0 -17
- package/misc/html/html-wrapper.d.ts +0 -559
- package/misc/html/html.d.ts +0 -214
- package/misc/sampler/sampler.d.ts +0 -67
- package/misc/shadow/shadow.d.ts +0 -37
- package/misc/stats-gl/stats-gl.d.ts +0 -24
- package/misc/trail/trail.d.ts +0 -57
- package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
- package/misc/trail-texture/trail-texture.d.ts +0 -50
- package/modifiers/README.md +0 -3
- package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
- package/modifiers/index.d.ts +0 -1
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
- package/performances/points/points-input.d.ts +0 -32
- package/performances/points/points.d.ts +0 -92
- package/performances/points/position-point.d.ts +0 -11
- package/performances/segments/segment-object.d.ts +0 -7
- package/performances/segments/segments.d.ts +0 -124
- package/shaders/blur-pass/blur-pass.d.ts +0 -23
- package/shaders/caustics/caustics-material.d.ts +0 -4
- package/shaders/caustics/caustics-projection-material.d.ts +0 -4
- package/shaders/convolution-material/convolution-material.d.ts +0 -7
- package/shaders/discard-material/discard-material.d.ts +0 -3
- package/shaders/grid-material/grid-material.d.ts +0 -37
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
- package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
- package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
- package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
- package/shaders/shader-material/shader-material.d.ts +0 -6
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
- package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
- package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
- package/shaders/star-field-material/star-field-material.d.ts +0 -13
- package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
- package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
- package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
- package/staging/backdrop/backdrop.d.ts +0 -30
- package/staging/bb-anchor/bb-anchor.d.ts +0 -27
- package/staging/bounds/bounds.d.ts +0 -134
- package/staging/camera-shake/camera-shake.d.ts +0 -43
- package/staging/center/center.d.ts +0 -70
- package/staging/cloud/cloud.d.ts +0 -51
- package/staging/contact-shadows/contact-shadows.d.ts +0 -70
- package/staging/environment/assets.d.ts +0 -13
- package/staging/environment/environment-cube.d.ts +0 -15
- package/staging/environment/environment-ground.d.ts +0 -13
- package/staging/environment/environment-input.d.ts +0 -68
- package/staging/environment/environment-map.d.ts +0 -16
- package/staging/environment/environment-portal.d.ts +0 -18
- package/staging/environment/environment.d.ts +0 -8
- package/staging/environment/utils.d.ts +0 -7
- package/staging/float/float.d.ts +0 -31
- package/staging/matcap-texture/matcap-texture.d.ts +0 -13
- package/staging/normal-texture/normal-texture.d.ts +0 -16
- package/staging/sky/sky.d.ts +0 -48
- package/staging/sparkles/sparkles.d.ts +0 -63
- package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/shadow-mesh.d.ts +0 -37
- package/staging/spot-light/spot-light-input.d.ts +0 -38
- package/staging/spot-light/spot-light.d.ts +0 -39
- package/staging/spot-light/volumetric-mesh.d.ts +0 -24
- package/staging/stage/stage.d.ts +0 -130
- package/staging/stars/stars.d.ts +0 -45
- package/staging/wireframe/wireframe-input.d.ts +0 -65
- package/staging/wireframe/wireframe.d.ts +0 -28
- package/utils/README.md +0 -3
- package/utils/content/content.d.ts +0 -8
- package/utils/index.d.ts +0 -1
- /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, isSignal } from '@angular/core';
|
|
2
|
-
import { NgtArgs, NgtKey, extend, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
|
|
3
|
-
import { SparklesMaterial } from 'angular-three-soba/shaders';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { BufferAttribute, BufferGeometry, Points } from 'three';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
extend({ SparklesMaterial, Points, BufferGeometry, BufferAttribute });
|
|
8
|
-
const isFloat32Array = (def) => def && def.constructor === Float32Array;
|
|
9
|
-
const expandColor = (v) => [v.r, v.g, v.b];
|
|
10
|
-
const isVector = (v) => v instanceof THREE.Vector2 || v instanceof THREE.Vector3 || v instanceof THREE.Vector4;
|
|
11
|
-
const normalizeVector = (v) => {
|
|
12
|
-
if (Array.isArray(v))
|
|
13
|
-
return v;
|
|
14
|
-
else if (isVector(v))
|
|
15
|
-
return v.toArray();
|
|
16
|
-
return [v, v, v];
|
|
17
|
-
};
|
|
18
|
-
function usePropAsIsOrAsAttribute(count, prop, setDefault) {
|
|
19
|
-
if (prop !== undefined) {
|
|
20
|
-
if (isFloat32Array(prop)) {
|
|
21
|
-
return prop;
|
|
22
|
-
}
|
|
23
|
-
if (prop instanceof THREE.Color) {
|
|
24
|
-
const a = Array.from({ length: count * 3 }, () => expandColor(prop)).flat();
|
|
25
|
-
return Float32Array.from(a);
|
|
26
|
-
}
|
|
27
|
-
if (isVector(prop) || Array.isArray(prop)) {
|
|
28
|
-
const a = Array.from({ length: count * 3 }, () => normalizeVector(prop)).flat();
|
|
29
|
-
return Float32Array.from(a);
|
|
30
|
-
}
|
|
31
|
-
return Float32Array.from({ length: count }, () => prop);
|
|
32
|
-
}
|
|
33
|
-
return Float32Array.from({ length: count }, setDefault);
|
|
34
|
-
}
|
|
35
|
-
export class NgtsSparkles {
|
|
36
|
-
/** Number of particles (default: 100) */
|
|
37
|
-
set _count(count) {
|
|
38
|
-
this.inputs.set({ count });
|
|
39
|
-
}
|
|
40
|
-
/** Speed of particles (default: 1) */
|
|
41
|
-
set _speed(speed) {
|
|
42
|
-
this.inputs.set({ speed });
|
|
43
|
-
}
|
|
44
|
-
/** Opacity of particles (default: 1) */
|
|
45
|
-
set _opacity(opacity) {
|
|
46
|
-
this.inputs.set({ opacity });
|
|
47
|
-
}
|
|
48
|
-
/** Color of particles (default: 100) */
|
|
49
|
-
set _color(color) {
|
|
50
|
-
this.inputs.set({ color });
|
|
51
|
-
}
|
|
52
|
-
/** Size of particles (default: randomized between 0 and 1) */
|
|
53
|
-
set _size(size) {
|
|
54
|
-
this.inputs.set({ size });
|
|
55
|
-
}
|
|
56
|
-
/** The space the particles occupy (default: 1) */
|
|
57
|
-
set _scale(scale) {
|
|
58
|
-
this.inputs.set({ scale });
|
|
59
|
-
}
|
|
60
|
-
/** Movement factor (default: 1) */
|
|
61
|
-
set _noise(noise) {
|
|
62
|
-
this.inputs.set({ noise });
|
|
63
|
-
}
|
|
64
|
-
constructor() {
|
|
65
|
-
this.inputs = signalStore({
|
|
66
|
-
noise: 1,
|
|
67
|
-
count: 100,
|
|
68
|
-
speed: 1,
|
|
69
|
-
opacity: 1,
|
|
70
|
-
scale: 1,
|
|
71
|
-
});
|
|
72
|
-
this.sparklesRef = injectNgtRef();
|
|
73
|
-
this.store = injectNgtStore();
|
|
74
|
-
this.dpr = this.store.select('viewport', 'dpr');
|
|
75
|
-
this.scale = this.inputs.select('scale');
|
|
76
|
-
this.count = this.inputs.select('count');
|
|
77
|
-
this.color = this.inputs.select('color');
|
|
78
|
-
this.positions = computed(() => Float32Array.from(Array.from({ length: this.count() }, () => normalizeVector(this.scale()).map(THREE.MathUtils.randFloatSpread)).flat()));
|
|
79
|
-
this.sizes = this.getComputed('size', this.count, Math.random);
|
|
80
|
-
this.opacities = this.getComputed('opacity', this.count);
|
|
81
|
-
this.speeds = this.getComputed('speed', this.count);
|
|
82
|
-
this.noises = this.getComputed('noise', () => this.count() * 3);
|
|
83
|
-
this.colors = this.getComputed(computed(() => {
|
|
84
|
-
const color = this.color();
|
|
85
|
-
return !isFloat32Array(color) ? new THREE.Color(color) : color;
|
|
86
|
-
}), () => (this.color() === undefined ? this.count() * 3 : this.count()), () => 1);
|
|
87
|
-
this.key = computed(() => `particle-${this.count()}-${JSON.stringify(this.scale())}`);
|
|
88
|
-
this.beforeRender();
|
|
89
|
-
}
|
|
90
|
-
beforeRender() {
|
|
91
|
-
injectBeforeRender(({ clock }) => {
|
|
92
|
-
const sparkles = this.sparklesRef.nativeElement;
|
|
93
|
-
if (!sparkles || !sparkles.material)
|
|
94
|
-
return;
|
|
95
|
-
sparkles.material.time = clock.elapsedTime;
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
getComputed(nameOrComputed, count, setDefault) {
|
|
99
|
-
const value = typeof nameOrComputed !== 'string' && isSignal(nameOrComputed)
|
|
100
|
-
? nameOrComputed
|
|
101
|
-
: this.inputs.select(nameOrComputed);
|
|
102
|
-
return computed(() => usePropAsIsOrAsAttribute(count(), value(), setDefault));
|
|
103
|
-
}
|
|
104
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSparkles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSparkles, isStandalone: true, selector: "ngts-sparkles", inputs: { sparklesRef: "sparklesRef", _count: ["count", "_count"], _speed: ["speed", "_speed"], _opacity: ["opacity", "_opacity"], _color: ["color", "_color"], _size: ["size", "_size"], _scale: ["scale", "_scale"], _noise: ["noise", "_noise"] }, ngImport: i0, template: `
|
|
106
|
-
<ngt-points *key="key()" ngtCompound [ref]="sparklesRef">
|
|
107
|
-
<ngt-buffer-geometry>
|
|
108
|
-
<ngt-buffer-attribute attach="attributes.position" *args="[positions(), 3]" />
|
|
109
|
-
<ngt-buffer-attribute attach="attributes.size" *args="[sizes(), 1]" />
|
|
110
|
-
<ngt-buffer-attribute attach="attributes.opacity" *args="[opacities(), 1]" />
|
|
111
|
-
<ngt-buffer-attribute attach="attributes.speed" *args="[speeds(), 1]" />
|
|
112
|
-
<ngt-buffer-attribute attach="attributes.color" *args="[colors(), 3]" />
|
|
113
|
-
<ngt-buffer-attribute attach="attributes.noise" *args="[noises(), 3]" />
|
|
114
|
-
</ngt-buffer-geometry>
|
|
115
|
-
<ngt-sparkles-material [transparent]="true" [depthWrite]="false" [pixelRatio]="dpr()" />
|
|
116
|
-
</ngt-points>
|
|
117
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgtKey, selector: "ng-template[key]", inputs: ["key"] }] }); }
|
|
118
|
-
}
|
|
119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSparkles, decorators: [{
|
|
120
|
-
type: Component,
|
|
121
|
-
args: [{
|
|
122
|
-
selector: 'ngts-sparkles',
|
|
123
|
-
standalone: true,
|
|
124
|
-
template: `
|
|
125
|
-
<ngt-points *key="key()" ngtCompound [ref]="sparklesRef">
|
|
126
|
-
<ngt-buffer-geometry>
|
|
127
|
-
<ngt-buffer-attribute attach="attributes.position" *args="[positions(), 3]" />
|
|
128
|
-
<ngt-buffer-attribute attach="attributes.size" *args="[sizes(), 1]" />
|
|
129
|
-
<ngt-buffer-attribute attach="attributes.opacity" *args="[opacities(), 1]" />
|
|
130
|
-
<ngt-buffer-attribute attach="attributes.speed" *args="[speeds(), 1]" />
|
|
131
|
-
<ngt-buffer-attribute attach="attributes.color" *args="[colors(), 3]" />
|
|
132
|
-
<ngt-buffer-attribute attach="attributes.noise" *args="[noises(), 3]" />
|
|
133
|
-
</ngt-buffer-geometry>
|
|
134
|
-
<ngt-sparkles-material [transparent]="true" [depthWrite]="false" [pixelRatio]="dpr()" />
|
|
135
|
-
</ngt-points>
|
|
136
|
-
`,
|
|
137
|
-
imports: [NgtArgs, NgtKey],
|
|
138
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
139
|
-
}]
|
|
140
|
-
}], ctorParameters: function () { return []; }, propDecorators: { sparklesRef: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], _count: [{
|
|
143
|
-
type: Input,
|
|
144
|
-
args: [{ alias: 'count' }]
|
|
145
|
-
}], _speed: [{
|
|
146
|
-
type: Input,
|
|
147
|
-
args: [{ alias: 'speed' }]
|
|
148
|
-
}], _opacity: [{
|
|
149
|
-
type: Input,
|
|
150
|
-
args: [{ alias: 'opacity' }]
|
|
151
|
-
}], _color: [{
|
|
152
|
-
type: Input,
|
|
153
|
-
args: [{ alias: 'color' }]
|
|
154
|
-
}], _size: [{
|
|
155
|
-
type: Input,
|
|
156
|
-
args: [{ alias: 'size' }]
|
|
157
|
-
}], _scale: [{
|
|
158
|
-
type: Input,
|
|
159
|
-
args: [{ alias: 'scale' }]
|
|
160
|
-
}], _noise: [{
|
|
161
|
-
type: Input,
|
|
162
|
-
args: [{ alias: 'noise' }]
|
|
163
|
-
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3BhcmtsZXMvc3BhcmtsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRWhFLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQVEsRUFBdUIsRUFBRSxDQUFDLEdBQUcsSUFBSyxHQUFvQixDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUM7QUFFcEgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQU0sRUFBc0QsRUFBRSxDQUMvRSxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUV4RixN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QUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFLSyxLQUFLO3NCQUFsQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFLTyxNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFLTSxNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIENvbXBvbmVudCwgSW5wdXQsIFNpZ25hbCwgY29tcHV0ZWQsIGlzU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RLZXksXG5cdGV4dGVuZCxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RQb2ludHMsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0U3BhcmtsZXNNYXRlcmlhbFN0YXRlLCBTcGFya2xlc01hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQnVmZmVyQXR0cmlidXRlLCBCdWZmZXJHZW9tZXRyeSwgUG9pbnRzIH0gZnJvbSAndGhyZWUnO1xuXG5leHRlbmQoeyBTcGFya2xlc01hdGVyaWFsLCBQb2ludHMsIEJ1ZmZlckdlb21ldHJ5LCBCdWZmZXJBdHRyaWJ1dGUgfSk7XG5cbmNvbnN0IGlzRmxvYXQzMkFycmF5ID0gKGRlZjogYW55KTogZGVmIGlzIEZsb2F0MzJBcnJheSA9PiBkZWYgJiYgKGRlZiBhcyBGbG9hdDMyQXJyYXkpLmNvbnN0cnVjdG9yID09PSBGbG9hdDMyQXJyYXk7XG5cbmNvbnN0IGV4cGFuZENvbG9yID0gKHY6IFRIUkVFLkNvbG9yKSA9PiBbdi5yLCB2LmcsIHYuYl07XG5jb25zdCBpc1ZlY3RvciA9ICh2OiBhbnkpOiB2IGlzIFRIUkVFLlZlY3RvcjIgfCBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuVmVjdG9yNCA9PlxuXHR2IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMiB8fCB2IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMyB8fCB2IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yNDtcblxuY29uc3Qgbm9ybWFsaXplVmVjdG9yID0gKHY6IGFueSk6IG51bWJlcltdID0+IHtcblx0aWYgKEFycmF5LmlzQXJyYXkodikpIHJldHVybiB2O1xuXHRlbHNlIGlmIChpc1ZlY3Rvcih2KSkgcmV0dXJuIHYudG9BcnJheSgpO1xuXHRyZXR1cm4gW3YsIHYsIHZdIGFzIG51bWJlcltdO1xufTtcblxuZnVuY3Rpb24gdXNlUHJvcEFzSXNPckFzQXR0cmlidXRlPFQgZXh0ZW5kcyBhbnk+KFxuXHRjb3VudDogbnVtYmVyLFxuXHRwcm9wPzogVCB8IEZsb2F0MzJBcnJheSxcblx0c2V0RGVmYXVsdD86ICh2OiBUKSA9PiBudW1iZXIsXG4pIHtcblx0aWYgKHByb3AgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChpc0Zsb2F0MzJBcnJheShwcm9wKSkge1xuXHRcdFx0cmV0dXJuIHByb3AgYXMgRmxvYXQzMkFycmF5O1xuXHRcdH1cblxuXHRcdGlmIChwcm9wIGluc3RhbmNlb2YgVEhSRUUuQ29sb3IpIHtcblx0XHRcdGNvbnN0IGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCAqIDMgfSwgKCkgPT4gZXhwYW5kQ29sb3IocHJvcCkpLmZsYXQoKTtcblx0XHRcdHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbShhKTtcblx0XHR9XG5cblx0XHRpZiAoaXNWZWN0b3IocHJvcCkgfHwgQXJyYXkuaXNBcnJheShwcm9wKSkge1xuXHRcdFx0Y29uc3QgYSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50ICogMyB9LCAoKSA9PiBub3JtYWxpemVWZWN0b3IocHJvcCkpLmZsYXQoKTtcblx0XHRcdHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbShhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gRmxvYXQzMkFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sICgpID0+IHByb3AgYXMgbnVtYmVyKTtcblx0fVxuXG5cdHJldHVybiBGbG9hdDMyQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgc2V0RGVmYXVsdCEpO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzU3BhcmtsZXNTdGF0ZSA9IHtcblx0LyoqIE51bWJlciBvZiBwYXJ0aWNsZXMgKGRlZmF1bHQ6IDEwMCkgKi9cblx0Y291bnQ6IG51bWJlcjtcblx0LyoqIFNwZWVkIG9mIHBhcnRpY2xlcyAoZGVmYXVsdDogMSkgKi9cblx0c3BlZWQ6IG51bWJlciB8IEZsb2F0MzJBcnJheTtcblx0LyoqIE9wYWNpdHkgb2YgcGFydGljbGVzIChkZWZhdWx0OiAxKSAqL1xuXHRvcGFjaXR5OiBudW1iZXIgfCBGbG9hdDMyQXJyYXk7XG5cdC8qKiBDb2xvciBvZiBwYXJ0aWNsZXMgKGRlZmF1bHQ6IDEwMCkgKi9cblx0Y29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uIHwgRmxvYXQzMkFycmF5O1xuXHQvKiogU2l6ZSBvZiBwYXJ0aWNsZXMgKGRlZmF1bHQ6IHJhbmRvbWl6ZWQgYmV0d2VlbiAwIGFuZCAxKSAqL1xuXHRzaXplPzogbnVtYmVyIHwgRmxvYXQzMkFycmF5O1xuXHQvKiogVGhlIHNwYWNlIHRoZSBwYXJ0aWNsZXMgb2NjdXB5IChkZWZhdWx0OiAxKSAqL1xuXHRzY2FsZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgVEhSRUUuVmVjdG9yMztcblx0LyoqIE1vdmVtZW50IGZhY3RvciAoZGVmYXVsdDogMSkgKi9cblx0bm9pc2U6IG51bWJlciB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IFRIUkVFLlZlY3RvcjMgfCBGbG9hdDMyQXJyYXk7XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1wb2ludHNcblx0XHQgKi9cblx0XHQnbmd0cy1zcGFya2xlcyc6IE5ndHNTcGFya2xlc1N0YXRlICYgTmd0UG9pbnRzO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BhcmtsZXMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcG9pbnRzICprZXk9XCJrZXkoKVwiIG5ndENvbXBvdW5kIFtyZWZdPVwic3BhcmtsZXNSZWZcIj5cblx0XHRcdDxuZ3QtYnVmZmVyLWdlb21ldHJ5PlxuXHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5wb3NpdGlvblwiICphcmdzPVwiW3Bvc2l0aW9ucygpLCAzXVwiIC8+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZSBhdHRhY2g9XCJhdHRyaWJ1dGVzLnNpemVcIiAqYXJncz1cIltzaXplcygpLCAxXVwiIC8+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZSBhdHRhY2g9XCJhdHRyaWJ1dGVzLm9wYWNpdHlcIiAqYXJncz1cIltvcGFjaXRpZXMoKSwgMV1cIiAvPlxuXHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5zcGVlZFwiICphcmdzPVwiW3NwZWVkcygpLCAxXVwiIC8+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZSBhdHRhY2g9XCJhdHRyaWJ1dGVzLmNvbG9yXCIgKmFyZ3M9XCJbY29sb3JzKCksIDNdXCIgLz5cblx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlIGF0dGFjaD1cImF0dHJpYnV0ZXMubm9pc2VcIiAqYXJncz1cIltub2lzZXMoKSwgM11cIiAvPlxuXHRcdFx0PC9uZ3QtYnVmZmVyLWdlb21ldHJ5PlxuXHRcdFx0PG5ndC1zcGFya2xlcy1tYXRlcmlhbCBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiIFtkZXB0aFdyaXRlXT1cImZhbHNlXCIgW3BpeGVsUmF0aW9dPVwiZHByKClcIiAvPlxuXHRcdDwvbmd0LXBvaW50cz5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3MsIE5ndEtleV0sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1NwYXJrbGVzIHtcblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU3BhcmtsZXNTdGF0ZT4oe1xuXHRcdG5vaXNlOiAxLFxuXHRcdGNvdW50OiAxMDAsXG5cdFx0c3BlZWQ6IDEsXG5cdFx0b3BhY2l0eTogMSxcblx0XHRzY2FsZTogMSxcblx0fSk7XG5cblx0QElucHV0KCkgc3BhcmtsZXNSZWYgPSBpbmplY3ROZ3RSZWY8UG9pbnRzPigpO1xuXG5cdC8qKiBOdW1iZXIgb2YgcGFydGljbGVzIChkZWZhdWx0OiAxMDApICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnY291bnQnIH0pIHNldCBfY291bnQoY291bnQ6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvdW50IH0pO1xuXHR9XG5cblx0LyoqIFNwZWVkIG9mIHBhcnRpY2xlcyAoZGVmYXVsdDogMSkgKi9cblx0QElucHV0KHsgYWxpYXM6ICdzcGVlZCcgfSkgc2V0IF9zcGVlZChzcGVlZDogbnVtYmVyIHwgRmxvYXQzMkFycmF5KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3BlZWQgfSk7XG5cdH1cblxuXHQvKiogT3BhY2l0eSBvZiBwYXJ0aWNsZXMgKGRlZmF1bHQ6IDEpICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlciB8IEZsb2F0MzJBcnJheSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHQvKiogQ29sb3Igb2YgcGFydGljbGVzIChkZWZhdWx0OiAxMDApICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24gfCBGbG9hdDMyQXJyYXkpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdC8qKiBTaXplIG9mIHBhcnRpY2xlcyAoZGVmYXVsdDogcmFuZG9taXplZCBiZXR3ZWVuIDAgYW5kIDEpICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnc2l6ZScgfSkgc2V0IF9zaXplKHNpemU6IG51bWJlciB8IEZsb2F0MzJBcnJheSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNpemUgfSk7XG5cdH1cblxuXHQvKiogVGhlIHNwYWNlIHRoZSBwYXJ0aWNsZXMgb2NjdXB5IChkZWZhdWx0OiAxKSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ3NjYWxlJyB9KSBzZXQgX3NjYWxlKHNjYWxlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBUSFJFRS5WZWN0b3IzKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc2NhbGUgfSk7XG5cdH1cblxuXHQvKiogTW92ZW1lbnQgZmFjdG9yIChkZWZhdWx0OiAxKSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ25vaXNlJyB9KSBzZXQgX25vaXNlKG5vaXNlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBUSFJFRS5WZWN0b3IzIHwgRmxvYXQzMkFycmF5KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbm9pc2UgfSk7XG5cdH1cblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblxuXHRkcHIgPSB0aGlzLnN0b3JlLnNlbGVjdCgndmlld3BvcnQnLCAnZHByJyk7XG5cblx0cHJpdmF0ZSBzY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnc2NhbGUnKTtcblx0cHJpdmF0ZSBjb3VudCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY291bnQnKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblxuXHRwb3NpdGlvbnMgPSBjb21wdXRlZCgoKSA9PlxuXHRcdEZsb2F0MzJBcnJheS5mcm9tKFxuXHRcdFx0QXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5jb3VudCgpIH0sICgpID0+XG5cdFx0XHRcdG5vcm1hbGl6ZVZlY3Rvcih0aGlzLnNjYWxlKCkpLm1hcChUSFJFRS5NYXRoVXRpbHMucmFuZEZsb2F0U3ByZWFkKSxcblx0XHRcdCkuZmxhdCgpLFxuXHRcdCksXG5cdCk7XG5cdHNpemVzID0gdGhpcy5nZXRDb21wdXRlZCgnc2l6ZScsIHRoaXMuY291bnQsIE1hdGgucmFuZG9tKTtcblx0b3BhY2l0aWVzID0gdGhpcy5nZXRDb21wdXRlZCgnb3BhY2l0eScsIHRoaXMuY291bnQpO1xuXHRzcGVlZHMgPSB0aGlzLmdldENvbXB1dGVkKCdzcGVlZCcsIHRoaXMuY291bnQpO1xuXHRub2lzZXMgPSB0aGlzLmdldENvbXB1dGVkKCdub2lzZScsICgpID0+IHRoaXMuY291bnQoKSAqIDMpO1xuXHRjb2xvcnMgPSB0aGlzLmdldENvbXB1dGVkKFxuXHRcdGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcigpO1xuXHRcdFx0cmV0dXJuICFpc0Zsb2F0MzJBcnJheShjb2xvcikgPyBuZXcgVEhSRUUuQ29sb3IoY29sb3IpIDogY29sb3I7XG5cdFx0fSksXG5cdFx0KCkgPT4gKHRoaXMuY29sb3IoKSA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb3VudCgpICogMyA6IHRoaXMuY291bnQoKSksXG5cdFx0KCkgPT4gMSxcblx0KTtcblx0a2V5ID0gY29tcHV0ZWQoKCkgPT4gYHBhcnRpY2xlLSR7dGhpcy5jb3VudCgpfS0ke0pTT04uc3RyaW5naWZ5KHRoaXMuc2NhbGUoKSl9YCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBjbG9jayB9KSA9PiB7XG5cdFx0XHRjb25zdCBzcGFya2xlcyA9IHRoaXMuc3BhcmtsZXNSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghc3BhcmtsZXMgfHwgIXNwYXJrbGVzLm1hdGVyaWFsKSByZXR1cm47XG5cdFx0XHQoc3BhcmtsZXMubWF0ZXJpYWwgYXMgTmd0U3BhcmtsZXNNYXRlcmlhbFN0YXRlKS50aW1lID0gY2xvY2suZWxhcHNlZFRpbWU7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbXB1dGVkPFRLZXkgZXh0ZW5kcyBrZXlvZiBOZ3RzU3BhcmtsZXNTdGF0ZT4oXG5cdFx0bmFtZU9yQ29tcHV0ZWQ6IFRLZXkgfCBTaWduYWw8Tmd0c1NwYXJrbGVzU3RhdGVbVEtleV0+LFxuXHRcdGNvdW50OiAoKSA9PiBudW1iZXIsXG5cdFx0c2V0RGVmYXVsdD86ICh2YWx1ZTogTmd0c1NwYXJrbGVzU3RhdGVbVEtleV0pID0+IG51bWJlcixcblx0KSB7XG5cdFx0Y29uc3QgdmFsdWUgPVxuXHRcdFx0dHlwZW9mIG5hbWVPckNvbXB1dGVkICE9PSAnc3RyaW5nJyAmJiBpc1NpZ25hbChuYW1lT3JDb21wdXRlZClcblx0XHRcdFx0PyBuYW1lT3JDb21wdXRlZFxuXHRcdFx0XHQ6IHRoaXMuaW5wdXRzLnNlbGVjdChuYW1lT3JDb21wdXRlZCk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkKCgpID0+IHVzZVByb3BBc0lzT3JBc0F0dHJpYnV0ZShjb3VudCgpLCB2YWx1ZSgpLCBzZXREZWZhdWx0KSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { signalStore } from 'angular-three';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class NgtsSpotLightShadowMeshInput {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.inputs = signalStore({});
|
|
7
|
-
this.distance = this.inputs.select('distance');
|
|
8
|
-
this.alphaTest = this.inputs.select('alphaTest');
|
|
9
|
-
this.scale = this.inputs.select('scale');
|
|
10
|
-
this.map = this.inputs.select('map');
|
|
11
|
-
this.shader = this.inputs.select('shader');
|
|
12
|
-
this.width = this.inputs.select('width');
|
|
13
|
-
this.height = this.inputs.select('height');
|
|
14
|
-
}
|
|
15
|
-
set _distance(distance) {
|
|
16
|
-
this.inputs.set({ distance });
|
|
17
|
-
}
|
|
18
|
-
set _alphaTest(alphaTest) {
|
|
19
|
-
this.inputs.set({ alphaTest });
|
|
20
|
-
}
|
|
21
|
-
set _scale(scale) {
|
|
22
|
-
this.inputs.set({ scale });
|
|
23
|
-
}
|
|
24
|
-
set _map(map) {
|
|
25
|
-
this.inputs.set({ map });
|
|
26
|
-
}
|
|
27
|
-
set _shader(shader) {
|
|
28
|
-
this.inputs.set({ shader });
|
|
29
|
-
}
|
|
30
|
-
set _width(width) {
|
|
31
|
-
this.inputs.set({ width });
|
|
32
|
-
}
|
|
33
|
-
set _height(height) {
|
|
34
|
-
this.inputs.set({ height });
|
|
35
|
-
}
|
|
36
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
37
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadowMeshInput, inputs: { _distance: ["distance", "_distance"], _alphaTest: ["alphaTest", "_alphaTest"], _scale: ["scale", "_scale"], _map: ["map", "_map"], _shader: ["shader", "_shader"], _width: ["width", "_width"], _height: ["height", "_height"] }, ngImport: i0 }); }
|
|
38
|
-
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshInput, decorators: [{
|
|
40
|
-
type: Directive
|
|
41
|
-
}], propDecorators: { _distance: [{
|
|
42
|
-
type: Input,
|
|
43
|
-
args: [{ alias: 'distance' }]
|
|
44
|
-
}], _alphaTest: [{
|
|
45
|
-
type: Input,
|
|
46
|
-
args: [{ alias: 'alphaTest' }]
|
|
47
|
-
}], _scale: [{
|
|
48
|
-
type: Input,
|
|
49
|
-
args: [{ alias: 'scale' }]
|
|
50
|
-
}], _map: [{
|
|
51
|
-
type: Input,
|
|
52
|
-
args: [{ alias: 'map' }]
|
|
53
|
-
}], _shader: [{
|
|
54
|
-
type: Input,
|
|
55
|
-
args: [{ alias: 'shader' }]
|
|
56
|
-
}], _width: [{
|
|
57
|
-
type: Input,
|
|
58
|
-
args: [{ alias: 'width' }]
|
|
59
|
-
}], _height: [{
|
|
60
|
-
type: Input,
|
|
61
|
-
args: [{ alias: 'height' }]
|
|
62
|
-
}] } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LW1lc2gtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3BvdC1saWdodC9zaGFkb3ctbWVzaC1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWE1QyxNQUFNLE9BQWdCLDRCQUE0QjtJQURsRDtRQUVDLFdBQU0sR0FBRyxXQUFXLENBQW9DLEVBQUUsQ0FBQyxDQUFDO1FBOEI1RCxhQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsY0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxRQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEM7SUFuQ0EsSUFBa0MsU0FBUyxDQUFDLFFBQWdCO1FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBbUMsVUFBVSxDQUFDLFNBQWlCO1FBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBK0IsTUFBTSxDQUFDLEtBQWE7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUE2QixJQUFJLENBQUMsR0FBa0I7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFnQyxPQUFPLENBQUMsTUFBYztRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQStCLE1BQU0sQ0FBQyxLQUFhO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBZ0MsT0FBTyxDQUFDLE1BQWM7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBN0JvQiw0QkFBNEI7a0dBQTVCLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFEakQsU0FBUzs4QkFJeUIsU0FBUztzQkFBMUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBSU8sVUFBVTtzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBSUUsTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBSUksSUFBSTtzQkFBaEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBSVMsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBSUssTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBSU8sT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzaWduYWxTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0U3RhdGUgPSB7XG5cdGRpc3RhbmNlOiBudW1iZXI7XG5cdGFscGhhVGVzdDogbnVtYmVyO1xuXHRzY2FsZTogbnVtYmVyO1xuXHRtYXA6IFRIUkVFLlRleHR1cmU7XG5cdHNoYWRlcjogc3RyaW5nO1xuXHR3aWR0aDogbnVtYmVyO1xuXHRoZWlnaHQ6IG51bWJlcjtcbn07XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXQge1xuXHRpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0U3RhdGU+KHt9KTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2Rpc3RhbmNlJyB9KSBzZXQgX2Rpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0YW5jZSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYWxwaGFUZXN0JyB9KSBzZXQgX2FscGhhVGVzdChhbHBoYVRlc3Q6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFscGhhVGVzdCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnc2NhbGUnIH0pIHNldCBfc2NhbGUoc2NhbGU6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNjYWxlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtYXAnIH0pIHNldCBfbWFwKG1hcDogVEhSRUUuVGV4dHVyZSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1hcCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnc2hhZGVyJyB9KSBzZXQgX3NoYWRlcihzaGFkZXI6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNoYWRlciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnd2lkdGgnIH0pIHNldCBfd2lkdGgod2lkdGg6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHdpZHRoIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdoZWlnaHQnIH0pIHNldCBfaGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgaGVpZ2h0IH0pO1xuXHR9XG5cblx0ZGlzdGFuY2UgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2Rpc3RhbmNlJyk7XG5cdGFscGhhVGVzdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYWxwaGFUZXN0Jyk7XG5cdHNjYWxlID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdzY2FsZScpO1xuXHRtYXAgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21hcCcpO1xuXHRzaGFkZXIgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3NoYWRlcicpO1xuXHR3aWR0aCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnd2lkdGgnKTtcblx0aGVpZ2h0ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdoZWlnaHQnKTtcbn1cbiJdfQ==
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
import { NgIf } from '@angular/common';
|
|
2
|
-
import { CUSTOM_ELEMENTS_SCHEMA, Component, computed, effect, inject, runInInjectionContext, } from '@angular/core';
|
|
3
|
-
import { assertInjectionContext, checkUpdate, extend, injectBeforeRender, injectNgtRef, } from 'angular-three';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
|
|
6
|
-
import { FullScreenQuad } from 'three-stdlib';
|
|
7
|
-
import { NgtsSpotLightShadowMeshInput } from './shadow-mesh-input';
|
|
8
|
-
import { injectNgtsSpotLightApi } from './spot-light';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
const isSpotLight = (child) => {
|
|
11
|
-
return child?.isSpotLight;
|
|
12
|
-
};
|
|
13
|
-
function injectShadowMeshCommon(spotLightRef, meshRef, width, height, distance, injector) {
|
|
14
|
-
injector = assertInjectionContext(injectShadowMeshCommon, injector);
|
|
15
|
-
runInInjectionContext(injector, () => {
|
|
16
|
-
const pos = new THREE.Vector3();
|
|
17
|
-
const dir = new THREE.Vector3();
|
|
18
|
-
effect(() => {
|
|
19
|
-
const spotLight = spotLightRef.nativeElement;
|
|
20
|
-
if (!spotLight)
|
|
21
|
-
return;
|
|
22
|
-
if (isSpotLight(spotLight)) {
|
|
23
|
-
spotLight.shadow.mapSize.set(width(), height());
|
|
24
|
-
if (spotLight.shadow.map) {
|
|
25
|
-
spotLight.shadow.map.setSize(width(), height());
|
|
26
|
-
}
|
|
27
|
-
spotLight.shadow.needsUpdate = true;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
throw new Error('<ngts-spot-light-shadow> must be a child of a <ngts-spot-light>');
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
injectBeforeRender(() => {
|
|
34
|
-
const spotLight = spotLightRef.nativeElement;
|
|
35
|
-
const mesh = meshRef.nativeElement;
|
|
36
|
-
if (!spotLight)
|
|
37
|
-
return;
|
|
38
|
-
const A = spotLight.position;
|
|
39
|
-
const B = spotLight.target.position;
|
|
40
|
-
dir.copy(B).sub(A);
|
|
41
|
-
const len = dir.length();
|
|
42
|
-
dir.normalize().multiplyScalar(len * distance());
|
|
43
|
-
pos.copy(A).add(dir);
|
|
44
|
-
if (mesh) {
|
|
45
|
-
mesh.position.copy(pos);
|
|
46
|
-
mesh.lookAt(spotLight.target.position);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
|
|
52
|
-
export class NgtsSpotLightShadowMeshNoShader {
|
|
53
|
-
constructor() {
|
|
54
|
-
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
55
|
-
this.meshRef = injectNgtRef();
|
|
56
|
-
this.DoubleSide = THREE.DoubleSide;
|
|
57
|
-
this.spotLightApi = injectNgtsSpotLightApi();
|
|
58
|
-
this.debug = this.spotLightApi.debug;
|
|
59
|
-
effect(() => {
|
|
60
|
-
this.shadowMeshInput.inputs.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 1 });
|
|
61
|
-
});
|
|
62
|
-
effect(() => {
|
|
63
|
-
const map = this.shadowMeshInput.map();
|
|
64
|
-
if (map) {
|
|
65
|
-
map.wrapS = map.wrapT = THREE.RepeatWrapping;
|
|
66
|
-
checkUpdate(map);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
injectShadowMeshCommon(this.spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.width, this.shadowMeshInput.height, this.shadowMeshInput.distance);
|
|
70
|
-
}
|
|
71
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadowMeshNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-no-shader", ngImport: i0, template: `
|
|
73
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
74
|
-
<ngt-plane-geometry />
|
|
75
|
-
<ngt-mesh-basic-material
|
|
76
|
-
[transparent]="true"
|
|
77
|
-
[side]="DoubleSide"
|
|
78
|
-
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
79
|
-
[alphaMap]="shadowMeshInput.map()"
|
|
80
|
-
[opacity]="debug() ? 1 : 0"
|
|
81
|
-
>
|
|
82
|
-
<ng-content />
|
|
83
|
-
</ngt-mesh-basic-material>
|
|
84
|
-
</ngt-mesh>
|
|
85
|
-
`, isInline: true }); }
|
|
86
|
-
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, decorators: [{
|
|
88
|
-
type: Component,
|
|
89
|
-
args: [{
|
|
90
|
-
selector: 'ngts-spot-light-shadow-mesh-no-shader',
|
|
91
|
-
standalone: true,
|
|
92
|
-
template: `
|
|
93
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
94
|
-
<ngt-plane-geometry />
|
|
95
|
-
<ngt-mesh-basic-material
|
|
96
|
-
[transparent]="true"
|
|
97
|
-
[side]="DoubleSide"
|
|
98
|
-
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
99
|
-
[alphaMap]="shadowMeshInput.map()"
|
|
100
|
-
[opacity]="debug() ? 1 : 0"
|
|
101
|
-
>
|
|
102
|
-
<ng-content />
|
|
103
|
-
</ngt-mesh-basic-material>
|
|
104
|
-
</ngt-mesh>
|
|
105
|
-
`,
|
|
106
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
107
|
-
}]
|
|
108
|
-
}], ctorParameters: function () { return []; } });
|
|
109
|
-
export class NgtsSpotLightShadowMeshShader {
|
|
110
|
-
constructor() {
|
|
111
|
-
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
112
|
-
this.meshRef = injectNgtRef();
|
|
113
|
-
this.DoubleSide = THREE.DoubleSide;
|
|
114
|
-
this.RepeatWrapping = THREE.RepeatWrapping;
|
|
115
|
-
this.spotLightApi = injectNgtsSpotLightApi();
|
|
116
|
-
this.debug = this.spotLightApi.debug;
|
|
117
|
-
this.renderTarget = computed(() => {
|
|
118
|
-
const [width, height] = [this.shadowMeshInput.width(), this.shadowMeshInput.height()];
|
|
119
|
-
return new THREE.WebGLRenderTarget(width, height, {
|
|
120
|
-
format: THREE.RGBAFormat,
|
|
121
|
-
encoding: THREE.LinearEncoding,
|
|
122
|
-
stencilBuffer: false,
|
|
123
|
-
// depthTexture: null!
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
this.uniforms = {
|
|
127
|
-
uShadowMap: { value: this.shadowMeshInput.map() },
|
|
128
|
-
uTime: { value: 0 },
|
|
129
|
-
};
|
|
130
|
-
this.fsQuad = computed(() => {
|
|
131
|
-
const shader = this.shadowMeshInput.shader();
|
|
132
|
-
if (!shader)
|
|
133
|
-
return null;
|
|
134
|
-
return new FullScreenQuad(new THREE.ShaderMaterial({
|
|
135
|
-
uniforms: this.uniforms,
|
|
136
|
-
vertexShader: /* glsl */ `
|
|
137
|
-
varying vec2 vUv;
|
|
138
|
-
|
|
139
|
-
void main() {
|
|
140
|
-
vUv = uv;
|
|
141
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
142
|
-
}
|
|
143
|
-
`,
|
|
144
|
-
fragmentShader: shader,
|
|
145
|
-
}));
|
|
146
|
-
});
|
|
147
|
-
effect(() => {
|
|
148
|
-
this.shadowMeshInput.inputs.patch({
|
|
149
|
-
distance: 0.4,
|
|
150
|
-
alphaTest: 0.5,
|
|
151
|
-
width: 512,
|
|
152
|
-
height: 512,
|
|
153
|
-
scale: 4,
|
|
154
|
-
shader: /* glsl */ `
|
|
155
|
-
varying vec2 vUv;
|
|
156
|
-
|
|
157
|
-
uniform sampler2D uShadowMap;
|
|
158
|
-
uniform float uTime;
|
|
159
|
-
|
|
160
|
-
void main() {
|
|
161
|
-
vec3 color = texture2D(uShadowMap, vUv).xyz;
|
|
162
|
-
gl_FragColor = vec4(color, 1.);
|
|
163
|
-
}
|
|
164
|
-
`,
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
injectShadowMeshCommon(this.spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.width, this.shadowMeshInput.height, this.shadowMeshInput.distance);
|
|
168
|
-
injectBeforeRender(({ delta, gl }) => {
|
|
169
|
-
this.uniforms.uTime.value += delta;
|
|
170
|
-
const fsQuad = this.fsQuad();
|
|
171
|
-
const renderTarget = this.renderTarget();
|
|
172
|
-
if (fsQuad && renderTarget) {
|
|
173
|
-
gl.setRenderTarget(renderTarget);
|
|
174
|
-
fsQuad.render(gl);
|
|
175
|
-
gl.setRenderTarget(null);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
effect(() => {
|
|
179
|
-
const map = this.shadowMeshInput.map();
|
|
180
|
-
if (map) {
|
|
181
|
-
this.uniforms.uShadowMap.value = map;
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
effect((onCleanup) => {
|
|
185
|
-
const fsQuad = this.fsQuad();
|
|
186
|
-
onCleanup(() => {
|
|
187
|
-
if (fsQuad) {
|
|
188
|
-
fsQuad.dispose();
|
|
189
|
-
fsQuad.material.dispose();
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
effect((onCleanup) => {
|
|
194
|
-
const renderTarget = this.renderTarget();
|
|
195
|
-
onCleanup(() => {
|
|
196
|
-
renderTarget.dispose();
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadowMeshShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-shader", ngImport: i0, template: `
|
|
202
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
203
|
-
<ngt-plane-geometry />
|
|
204
|
-
<ngt-mesh-basic-material
|
|
205
|
-
[transparent]="true"
|
|
206
|
-
[side]="DoubleSide"
|
|
207
|
-
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
208
|
-
[alphaMap]="renderTarget().texture"
|
|
209
|
-
[opacity]="debug() ? 1 : 0"
|
|
210
|
-
>
|
|
211
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
212
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
213
|
-
<ng-content />
|
|
214
|
-
</ngt-mesh-basic-material>
|
|
215
|
-
</ngt-mesh>
|
|
216
|
-
`, isInline: true }); }
|
|
217
|
-
}
|
|
218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshShader, decorators: [{
|
|
219
|
-
type: Component,
|
|
220
|
-
args: [{
|
|
221
|
-
selector: 'ngts-spot-light-shadow-mesh-shader',
|
|
222
|
-
standalone: true,
|
|
223
|
-
template: `
|
|
224
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
225
|
-
<ngt-plane-geometry />
|
|
226
|
-
<ngt-mesh-basic-material
|
|
227
|
-
[transparent]="true"
|
|
228
|
-
[side]="DoubleSide"
|
|
229
|
-
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
230
|
-
[alphaMap]="renderTarget().texture"
|
|
231
|
-
[opacity]="debug() ? 1 : 0"
|
|
232
|
-
>
|
|
233
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
234
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
235
|
-
<ng-content />
|
|
236
|
-
</ngt-mesh-basic-material>
|
|
237
|
-
</ngt-mesh>
|
|
238
|
-
`,
|
|
239
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
240
|
-
}]
|
|
241
|
-
}], ctorParameters: function () { return []; } });
|
|
242
|
-
export class NgtsSpotLightShadow extends NgtsSpotLightShadowMeshInput {
|
|
243
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
244
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }], usesInheritance: true, ngImport: i0, template: `
|
|
245
|
-
<ngts-spot-light-shadow-mesh-shader *ngIf="shader(); else noShader" />
|
|
246
|
-
<ng-template #noShader>
|
|
247
|
-
<ngts-spot-light-shadow-mesh-no-shader />
|
|
248
|
-
</ng-template>
|
|
249
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtsSpotLightShadowMeshShader, selector: "ngts-spot-light-shadow-mesh-shader" }, { kind: "component", type: NgtsSpotLightShadowMeshNoShader, selector: "ngts-spot-light-shadow-mesh-no-shader" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
250
|
-
}
|
|
251
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
|
|
252
|
-
type: Component,
|
|
253
|
-
args: [{
|
|
254
|
-
selector: 'ngts-spot-light-shadow',
|
|
255
|
-
standalone: true,
|
|
256
|
-
template: `
|
|
257
|
-
<ngts-spot-light-shadow-mesh-shader *ngIf="shader(); else noShader" />
|
|
258
|
-
<ng-template #noShader>
|
|
259
|
-
<ngts-spot-light-shadow-mesh-no-shader />
|
|
260
|
-
</ng-template>
|
|
261
|
-
`,
|
|
262
|
-
imports: [NgtsSpotLightShadowMeshShader, NgtsSpotLightShadowMeshNoShader, NgIf],
|
|
263
|
-
providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }],
|
|
264
|
-
}]
|
|
265
|
-
}] });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LW1lc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3BvdC1saWdodC9zaGFkb3ctbWVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04scUJBQXFCLEdBRXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsWUFBWSxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLDRCQUE0QixFQUEwQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFdEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUE0QixFQUE0QixFQUFFO0lBQzlFLE9BQVEsS0FBeUIsRUFBRSxXQUFXLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsU0FBUyxzQkFBc0IsQ0FDOUIsWUFBNkMsRUFDN0MsT0FBbUMsRUFDbkMsS0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsUUFBc0IsRUFDdEIsUUFBbUI7SUFFbkIsUUFBUSxHQUFHLHNCQUFzQixDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUN2QixJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ2hELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ3pCLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtnQkFDRCxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDcEM7aUJBQU07Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2FBQ25GO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBRW5DLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFFdkIsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM3QixNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUVwQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVyQixJQUFJLElBQUksRUFBRTtnQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQXFCbkQsTUFBTSxPQUFPLCtCQUErQjtJQVMzQztRQVJBLG9CQUFlLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFdkQsWUFBTyxHQUFHLFlBQVksRUFBYyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUNoRCxVQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFHL0IsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekcsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxJQUFJLEdBQUcsRUFBRTtnQkFDUixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztnQkFDN0MsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQzNCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FDN0IsQ0FBQztJQUNILENBQUM7OEdBN0JXLCtCQUErQjtrR0FBL0IsK0JBQStCLGlHQWhCakM7Ozs7Ozs7Ozs7Ozs7RUFhVDs7MkZBR1csK0JBQStCO2tCQW5CM0MsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUNBQXVDO29CQUNqRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7O0VBYVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOztBQXNERCxNQUFNLE9BQU8sNkJBQTZCO0lBNEN6QztRQTNDQSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxZQUFZLEVBQWMsQ0FBQztRQUVyQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM5QixtQkFBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFFOUIsaUJBQVksR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXRGLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDakQsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLGNBQWM7Z0JBQzlCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixzQkFBc0I7YUFDdEIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSyxhQUFRLEdBQUc7WUFDbEIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUNuQixDQUFDO1FBRU0sV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QixPQUFPLElBQUksY0FBYyxDQUN4QixJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7OztTQU9wQjtnQkFDTCxjQUFjLEVBQUUsTUFBTTthQUN0QixDQUFDLENBQ0YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBR0YsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDakMsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7OztTQVVkO2FBQ0wsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQzNCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FDN0IsQ0FBQztRQUVGLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLElBQUksWUFBWSxFQUFFO2dCQUMzQixFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxJQUFJLEdBQUcsRUFBRTtnQkFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2FBQ3JDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLE1BQU0sRUFBRTtvQkFDWCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzFCO1lBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E1R1csNkJBQTZCO2tHQUE3Qiw2QkFBNkIsOEZBbEIvQjs7Ozs7Ozs7Ozs7Ozs7O0VBZVQ7OzJGQUdXLDZCQUE2QjtrQkFyQnpDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O0VBZVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOztBQWtJRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsNEJBQTRCOzhHQUF4RCxtQkFBbUI7a0dBQW5CLG1CQUFtQixxRUFGcEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxpREFQOUU7Ozs7O0VBS1QsNERBN0hXLDZCQUE2QiwrRUFyRDdCLCtCQUErQixrRkFtTCtCLElBQUk7OzJGQUdsRSxtQkFBbUI7a0JBWi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7RUFLVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUM7b0JBQy9FLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVcscUJBQXFCLEVBQUUsQ0FBQztpQkFDeEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRydW5JbkluamVjdGlvbkNvbnRleHQsXG5cdHR5cGUgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0YXNzZXJ0SW5qZWN0aW9uQ29udGV4dCxcblx0Y2hlY2tVcGRhdGUsXG5cdGV4dGVuZCxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdHR5cGUgTmd0SW5qZWN0ZWRSZWYsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIFBsYW5lR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0LCB0eXBlIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXRTdGF0ZSB9IGZyb20gJy4vc2hhZG93LW1lc2gtaW5wdXQnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0c1Nwb3RMaWdodEFwaSB9IGZyb20gJy4vc3BvdC1saWdodCc7XG5cbmNvbnN0IGlzU3BvdExpZ2h0ID0gKGNoaWxkOiBUSFJFRS5PYmplY3QzRCB8IG51bGwpOiBjaGlsZCBpcyBUSFJFRS5TcG90TGlnaHQgPT4ge1xuXHRyZXR1cm4gKGNoaWxkIGFzIFRIUkVFLlNwb3RMaWdodCk/LmlzU3BvdExpZ2h0O1xufTtcblxuZnVuY3Rpb24gaW5qZWN0U2hhZG93TWVzaENvbW1vbihcblx0c3BvdExpZ2h0UmVmOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5TcG90TGlnaHQ+LFxuXHRtZXNoUmVmOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5NZXNoPixcblx0d2lkdGg6ICgpID0+IG51bWJlcixcblx0aGVpZ2h0OiAoKSA9PiBudW1iZXIsXG5cdGRpc3RhbmNlOiAoKSA9PiBudW1iZXIsXG5cdGluamVjdG9yPzogSW5qZWN0b3IsXG4pIHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdFNoYWRvd01lc2hDb21tb24sIGluamVjdG9yKTtcblx0cnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcG9zID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0XHRjb25zdCBkaXIgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IHNwb3RMaWdodCA9IHNwb3RMaWdodFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFzcG90TGlnaHQpIHJldHVybjtcblx0XHRcdGlmIChpc1Nwb3RMaWdodChzcG90TGlnaHQpKSB7XG5cdFx0XHRcdHNwb3RMaWdodC5zaGFkb3cubWFwU2l6ZS5zZXQod2lkdGgoKSwgaGVpZ2h0KCkpO1xuXHRcdFx0XHRpZiAoc3BvdExpZ2h0LnNoYWRvdy5tYXApIHtcblx0XHRcdFx0XHRzcG90TGlnaHQuc2hhZG93Lm1hcC5zZXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzcG90TGlnaHQuc2hhZG93Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignPG5ndHMtc3BvdC1saWdodC1zaGFkb3c+IG11c3QgYmUgYSBjaGlsZCBvZiBhIDxuZ3RzLXNwb3QtbGlnaHQ+Jyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BvdExpZ2h0ID0gc3BvdExpZ2h0UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBtZXNoID0gbWVzaFJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHRpZiAoIXNwb3RMaWdodCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBBID0gc3BvdExpZ2h0LnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgQiA9IHNwb3RMaWdodC50YXJnZXQucG9zaXRpb247XG5cblx0XHRcdGRpci5jb3B5KEIpLnN1YihBKTtcblx0XHRcdGNvbnN0IGxlbiA9IGRpci5sZW5ndGgoKTtcblx0XHRcdGRpci5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihsZW4gKiBkaXN0YW5jZSgpKTtcblx0XHRcdHBvcy5jb3B5KEEpLmFkZChkaXIpO1xuXG5cdFx0XHRpZiAobWVzaCkge1xuXHRcdFx0XHRtZXNoLnBvc2l0aW9uLmNvcHkocG9zKTtcblx0XHRcdFx0bWVzaC5sb29rQXQoc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbCB9KTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLW5vLXNoYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoIFtyZWZdPVwibWVzaFJlZlwiIFtzY2FsZV09XCJzaGFkb3dNZXNoSW5wdXQuc2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cInNoYWRvd01lc2hJbnB1dC5hbHBoYVRlc3QoKVwiXG5cdFx0XHRcdFthbHBoYU1hcF09XCJzaGFkb3dNZXNoSW5wdXQubWFwKClcIlxuXHRcdFx0XHRbb3BhY2l0eV09XCJkZWJ1ZygpID8gMSA6IDBcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cblx0XHQ8L25ndC1tZXNoPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIge1xuXHRzaGFkb3dNZXNoSW5wdXQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCk7XG5cblx0bWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPigpO1xuXHREb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblxuXHRwcml2YXRlIHNwb3RMaWdodEFwaSA9IGluamVjdE5ndHNTcG90TGlnaHRBcGkoKTtcblx0ZGVidWcgPSB0aGlzLnNwb3RMaWdodEFwaS5kZWJ1ZztcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQuaW5wdXRzLnBhdGNoKHsgZGlzdGFuY2U6IDAuNCwgYWxwaGFUZXN0OiAwLjUsIHdpZHRoOiA1MTIsIGhlaWdodDogNTEyLCBzY2FsZTogMSB9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtYXAgPSB0aGlzLnNoYWRvd01lc2hJbnB1dC5tYXAoKTtcblx0XHRcdGlmIChtYXApIHtcblx0XHRcdFx0bWFwLndyYXBTID0gbWFwLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XG5cdFx0XHRcdGNoZWNrVXBkYXRlKG1hcCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuXHRcdFx0dGhpcy5zcG90TGlnaHRBcGkuc3BvdExpZ2h0LFxuXHRcdFx0dGhpcy5tZXNoUmVmLFxuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQud2lkdGgsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC5oZWlnaHQsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC5kaXN0YW5jZSxcblx0XHQpO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3ctbWVzaC1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCBbcmVmXT1cIm1lc2hSZWZcIiBbc2NhbGVdPVwic2hhZG93TWVzaElucHV0LnNjYWxlKClcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG5cdFx0XHQ8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG5cdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcblx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdFx0W2FscGhhVGVzdF09XCJzaGFkb3dNZXNoSW5wdXQuYWxwaGFUZXN0KClcIlxuXHRcdFx0XHRbYWxwaGFNYXBdPVwicmVuZGVyVGFyZ2V0KCkudGV4dHVyZVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cIlJlcGVhdFdyYXBwaW5nXCIgYXR0YWNoPVwiYWxwaGFNYXAud3JhcFNcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJSZXBlYXRXcmFwcGluZ1wiIGF0dGFjaD1cImFscGhhTWFwLndyYXBUXCIgLz5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaFNoYWRlciB7XG5cdHNoYWRvd01lc2hJbnB1dCA9IGluamVjdChOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0KTtcblx0bWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPigpO1xuXG5cdERvdWJsZVNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlO1xuXHRSZXBlYXRXcmFwcGluZyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0QXBpID0gaW5qZWN0Tmd0c1Nwb3RMaWdodEFwaSgpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0QXBpLmRlYnVnO1xuXHRyZW5kZXJUYXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3dpZHRoLCBoZWlnaHRdID0gW3RoaXMuc2hhZG93TWVzaElucHV0LndpZHRoKCksIHRoaXMuc2hhZG93TWVzaElucHV0LmhlaWdodCgpXTtcblxuXHRcdHJldHVybiBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwge1xuXHRcdFx0Zm9ybWF0OiBUSFJFRS5SR0JBRm9ybWF0LFxuXHRcdFx0ZW5jb2Rpbmc6IFRIUkVFLkxpbmVhckVuY29kaW5nLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcjogZmFsc2UsXG5cdFx0XHQvLyBkZXB0aFRleHR1cmU6IG51bGwhXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgdW5pZm9ybXMgPSB7XG5cdFx0dVNoYWRvd01hcDogeyB2YWx1ZTogdGhpcy5zaGFkb3dNZXNoSW5wdXQubWFwKCkgfSxcblx0XHR1VGltZTogeyB2YWx1ZTogMCB9LFxuXHR9O1xuXG5cdHByaXZhdGUgZnNRdWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHNoYWRlciA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRlcigpO1xuXHRcdGlmICghc2hhZGVyKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IEZ1bGxTY3JlZW5RdWFkKFxuXHRcdFx0bmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcblx0XHRcdFx0dW5pZm9ybXM6IHRoaXMudW5pZm9ybXMsXG5cdFx0XHRcdHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICAgIHZVdiA9IHV2O1xuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHRcdGZyYWdtZW50U2hhZGVyOiBzaGFkZXIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQuaW5wdXRzLnBhdGNoKHtcblx0XHRcdFx0ZGlzdGFuY2U6IDAuNCxcblx0XHRcdFx0YWxwaGFUZXN0OiAwLjUsXG5cdFx0XHRcdHdpZHRoOiA1MTIsXG5cdFx0XHRcdGhlaWdodDogNTEyLFxuXHRcdFx0XHRzY2FsZTogNCxcblx0XHRcdFx0c2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2O1xuXG4gICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVNoYWRvd01hcDtcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVUaW1lO1xuXG4gICAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh1U2hhZG93TWFwLCB2VXYpLnh5ejtcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIDEuKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdFNoYWRvd01lc2hDb21tb24oXG5cdFx0XHR0aGlzLnNwb3RMaWdodEFwaS5zcG90TGlnaHQsXG5cdFx0XHR0aGlzLm1lc2hSZWYsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC53aWR0aCxcblx0XHRcdHRoaXMuc2hhZG93TWVzaElucHV0LmhlaWdodCxcblx0XHRcdHRoaXMuc2hhZG93TWVzaElucHV0LmRpc3RhbmNlLFxuXHRcdCk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEsIGdsIH0pID0+IHtcblx0XHRcdHRoaXMudW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7XG5cdFx0XHRjb25zdCBmc1F1YWQgPSB0aGlzLmZzUXVhZCgpO1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcblx0XHRcdGlmIChmc1F1YWQgJiYgcmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRmc1F1YWQucmVuZGVyKGdsKTtcblx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1hcCA9IHRoaXMuc2hhZG93TWVzaElucHV0Lm1hcCgpO1xuXHRcdFx0aWYgKG1hcCkge1xuXHRcdFx0XHR0aGlzLnVuaWZvcm1zLnVTaGFkb3dNYXAudmFsdWUgPSBtYXA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgZnNRdWFkID0gdGhpcy5mc1F1YWQoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdGlmIChmc1F1YWQpIHtcblx0XHRcdFx0XHRmc1F1YWQuZGlzcG9zZSgpO1xuXHRcdFx0XHRcdGZzUXVhZC5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRyZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdyc6IE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXRTdGF0ZTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLXNoYWRlciAqbmdJZj1cInNoYWRlcigpOyBlbHNlIG5vU2hhZGVyXCIgLz5cblx0XHQ8bmctdGVtcGxhdGUgI25vU2hhZGVyPlxuXHRcdFx0PG5ndHMtc3BvdC1saWdodC1zaGFkb3ctbWVzaC1uby1zaGFkZXIgLz5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIsIE5nSWZdLFxuXHRwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXQsIHVzZUV4aXN0aW5nOiBOZ3RzU3BvdExpZ2h0U2hhZG93IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCB7fVxuIl19
|