angular-three-soba 2.0.0-beta.4 → 2.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/billboard/billboard.d.ts +12 -8
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +24 -12
- package/abstractions/grid/grid.d.ts +42 -51
- package/abstractions/index.d.ts +1 -7
- package/abstractions/text/text.d.ts +10 -4
- package/abstractions/text-3d/text-3d.d.ts +51 -41
- package/cameras/camera/camera-content.d.ts +1 -1
- package/cameras/camera/camera.d.ts +16 -13
- package/cameras/cube-camera/cube-camera.d.ts +49 -23
- package/cameras/index.d.ts +0 -1
- package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
- package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
- package/controls/orbit-controls/orbit-controls.d.ts +34 -15
- package/esm2022/abstractions/billboard/billboard.mjs +36 -33
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +58 -63
- package/esm2022/abstractions/grid/grid.mjs +140 -110
- package/esm2022/abstractions/index.mjs +2 -8
- package/esm2022/abstractions/text/text.mjs +123 -122
- package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
- package/esm2022/cameras/camera/camera-content.mjs +6 -6
- package/esm2022/cameras/camera/camera.mjs +48 -42
- package/esm2022/cameras/cube-camera/cube-camera.mjs +120 -100
- package/esm2022/cameras/index.mjs +1 -2
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +109 -85
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +198 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +151 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
- package/esm2022/gizmos/index.mjs +4 -0
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +14 -9
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +31 -30
- package/esm2022/loaders/texture-loader/texture-loader.mjs +20 -15
- package/esm2022/materials/index.mjs +2 -1
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +164 -144
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
- package/esm2022/materials/point-material/point-material.mjs +50 -0
- package/esm2022/misc/animations/animations.mjs +28 -23
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +41 -37
- package/esm2022/misc/example/example.mjs +161 -0
- package/esm2022/misc/fbo/fbo.mjs +42 -36
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +305 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +132 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +204 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +8 -0
- package/esm2022/performances/instances/instances.mjs +221 -0
- package/esm2022/performances/instances/position-mesh.mjs +52 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +327 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +183 -0
- package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +32 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +3 -2
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +30 -14
- package/esm2022/shaders/index.mjs +5 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +3 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +7 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +3 -5
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +18 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +8 -7
- package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +161 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +8 -8
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +129 -129
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
- package/esm2022/staging/bounds/bounds.mjs +145 -143
- package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
- package/esm2022/staging/center/center.mjs +129 -112
- package/esm2022/staging/cloud/cloud.mjs +118 -124
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -136
- package/esm2022/staging/environment/assets.mjs +12 -12
- package/esm2022/staging/environment/environment-cube.mjs +28 -30
- package/esm2022/staging/environment/environment-ground.mjs +17 -19
- package/esm2022/staging/environment/environment-input.mjs +98 -85
- package/esm2022/staging/environment/environment-map.mjs +33 -33
- package/esm2022/staging/environment/environment-portal.mjs +75 -97
- package/esm2022/staging/environment/environment.mjs +34 -51
- package/esm2022/staging/environment/utils.mjs +40 -17
- package/esm2022/staging/float/float.mjs +70 -58
- package/esm2022/staging/index.mjs +7 -3
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +85 -80
- package/esm2022/staging/sparkles/sparkles.mjs +108 -105
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +267 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -63
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
- package/esm2022/staging/stage/stage.mjs +305 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +228 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/constants.mjs +3 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +504 -2079
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +293 -260
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +108 -83
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1045 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +148 -132
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +656 -588
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2202 -99
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +957 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +508 -269
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2910 -2573
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +25 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/gizmos/README.md +3 -0
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +73 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
- package/gizmos/index.d.ts +3 -0
- package/loaders/gltf-loader/gltf-loader.d.ts +15 -4
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +8 -3
- package/materials/index.d.ts +1 -0
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +6 -4
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +2 -2
- package/misc/example/example.d.ts +85 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +218 -0
- package/misc/index.d.ts +9 -0
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +42 -24
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
- package/performances/index.d.ts +7 -0
- package/performances/instances/instances.d.ts +83 -0
- package/{performance → performances}/instances/position-mesh.d.ts +1 -1
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +96 -0
- package/performances/points/position-point.d.ts +11 -0
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +128 -0
- package/shaders/grid-material/grid-material.d.ts +33 -0
- package/shaders/index.d.ts +4 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +173 -6
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/shaders/shader-material/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
- package/shaders/sparkles-material/sparkles-material.d.ts +13 -0
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +9 -0
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +93 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +41 -28
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +105 -25
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +27 -24
- package/staging/contact-shadows/contact-shadows.d.ts +43 -30
- package/staging/environment/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +9 -5
- package/staging/environment/environment-ground.d.ts +7 -7
- package/staging/environment/environment-input.d.ts +38 -38
- package/staging/environment/environment-map.d.ts +10 -5
- package/staging/environment/environment-portal.d.ts +10 -5
- package/staging/environment/environment.d.ts +0 -4
- package/staging/environment/utils.d.ts +2 -2
- package/staging/float/float.d.ts +15 -11
- package/staging/index.d.ts +6 -2
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +28 -21
- package/staging/sparkles/sparkles.d.ts +36 -22
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +25 -25
- package/staging/spot-light/spot-light.d.ts +35 -15
- package/staging/spot-light/volumetric-mesh.d.ts +15 -9
- package/staging/stage/stage.d.ts +89 -65
- package/staging/stars/stars.d.ts +28 -17
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/constants.d.ts +1 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +2 -0
- package/web-types.json +1 -0
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
- package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
- package/abstractions/line/line-input.d.ts +0 -42
- package/abstractions/line/line.d.ts +0 -35
- package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
- package/esm2022/abstractions/line/line-input.mjs +0 -113
- package/esm2022/abstractions/line/line.mjs +0 -165
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/detailed/detailed.mjs +0 -61
- package/esm2022/performance/index.mjs +0 -7
- package/esm2022/performance/instances/instance.mjs +0 -48
- package/esm2022/performance/instances/instances.mjs +0 -189
- package/esm2022/performance/instances/position-mesh.mjs +0 -52
- package/esm2022/performance/stats/stats.mjs +0 -79
- package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
- package/esm2022/staging/caustics/caustisc.mjs +0 -384
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
- package/fesm2022/angular-three-soba-performance.mjs +0 -487
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/performance/README.md +0 -3
- package/performance/adaptive/adaptive-dpr.d.ts +0 -8
- package/performance/detailed/detailed.d.ts +0 -20
- package/performance/index.d.ts +0 -6
- package/performance/instances/instance.d.ts +0 -9
- package/performance/instances/instances.d.ts +0 -35
- package/performance/stats/stats.d.ts +0 -18
- package/plugin/generators.json +0 -19
- package/plugin/libs/plugin/README.md +0 -11
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -7
- package/plugin/src/generators/init/init.js +0 -28
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/staging/caustics/caustisc.d.ts +0 -70
- package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
- /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
|
@@ -1,256 +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, requestAnimationInInjectionContext, } from 'angular-three';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
|
|
6
|
-
import { FullScreenQuad } from 'three-stdlib';
|
|
7
|
-
import { NGTS_SPOT_LIGHT_API } from './spot-light';
|
|
8
|
-
import { NgtsSpotLightShadowMeshInput } from './spot-light-shadow-mesh-input';
|
|
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
|
-
requestAnimationInInjectionContext(() => {
|
|
19
|
-
effect(() => {
|
|
20
|
-
const spotLight = spotLightRef.nativeElement;
|
|
21
|
-
if (!spotLight)
|
|
22
|
-
return;
|
|
23
|
-
if (isSpotLight(spotLight)) {
|
|
24
|
-
spotLight.shadow.mapSize.set(width(), height());
|
|
25
|
-
spotLight.shadow.map.setSize(width(), height());
|
|
26
|
-
spotLight.shadow.needsUpdate = true;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
throw new Error('<ngts-spot-light-shadow> must be a child of a <ngts-spot-light>');
|
|
30
|
-
}
|
|
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
|
-
class NgtsSpotLightShadowMeshNoShader {
|
|
53
|
-
#spotLightApi;
|
|
54
|
-
constructor() {
|
|
55
|
-
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
56
|
-
this.#spotLightApi = inject(NGTS_SPOT_LIGHT_API);
|
|
57
|
-
this.meshRef = injectNgtRef();
|
|
58
|
-
this.DoubleSide = THREE.DoubleSide;
|
|
59
|
-
this.debug = this.#spotLightApi.debug;
|
|
60
|
-
this.shadowMeshInput.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 1 });
|
|
61
|
-
requestAnimationInInjectionContext(() => {
|
|
62
|
-
effect(() => {
|
|
63
|
-
const map = this.shadowMeshInput.shadowMeshMap();
|
|
64
|
-
if (map) {
|
|
65
|
-
map.wrapS = map.wrapT = THREE.RepeatWrapping;
|
|
66
|
-
checkUpdate(map);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
injectShadowMeshCommon(this.#spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.shadowMeshWidth, this.shadowMeshInput.shadowMeshHeight, this.shadowMeshInput.shadowMeshDistance);
|
|
71
|
-
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
73
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsSpotLightShadowMeshNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-no-shader", ngImport: i0, template: `
|
|
74
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
|
|
75
|
-
<ngt-plane-geometry />
|
|
76
|
-
<ngt-mesh-basic-material
|
|
77
|
-
[transparent]="true"
|
|
78
|
-
[side]="DoubleSide"
|
|
79
|
-
[alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
|
|
80
|
-
[alphaMap]="shadowMeshInput.shadowMeshMap()"
|
|
81
|
-
[opacity]="debug() ? 1 : 0"
|
|
82
|
-
>
|
|
83
|
-
<ng-content />
|
|
84
|
-
</ngt-mesh-basic-material>
|
|
85
|
-
</ngt-mesh>
|
|
86
|
-
`, isInline: true }); }
|
|
87
|
-
}
|
|
88
|
-
export { NgtsSpotLightShadowMeshNoShader };
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, decorators: [{
|
|
90
|
-
type: Component,
|
|
91
|
-
args: [{
|
|
92
|
-
selector: 'ngts-spot-light-shadow-mesh-no-shader',
|
|
93
|
-
standalone: true,
|
|
94
|
-
template: `
|
|
95
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
|
|
96
|
-
<ngt-plane-geometry />
|
|
97
|
-
<ngt-mesh-basic-material
|
|
98
|
-
[transparent]="true"
|
|
99
|
-
[side]="DoubleSide"
|
|
100
|
-
[alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
|
|
101
|
-
[alphaMap]="shadowMeshInput.shadowMeshMap()"
|
|
102
|
-
[opacity]="debug() ? 1 : 0"
|
|
103
|
-
>
|
|
104
|
-
<ng-content />
|
|
105
|
-
</ngt-mesh-basic-material>
|
|
106
|
-
</ngt-mesh>
|
|
107
|
-
`,
|
|
108
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
109
|
-
}]
|
|
110
|
-
}], ctorParameters: function () { return []; } });
|
|
111
|
-
class NgtsSpotLightShadowMeshShader {
|
|
112
|
-
#spotLightApi;
|
|
113
|
-
#fsQuad;
|
|
114
|
-
constructor() {
|
|
115
|
-
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
116
|
-
this.meshRef = injectNgtRef();
|
|
117
|
-
this.#spotLightApi = inject(NGTS_SPOT_LIGHT_API);
|
|
118
|
-
this.DoubleSide = THREE.DoubleSide;
|
|
119
|
-
this.RepeatWrapping = THREE.RepeatWrapping;
|
|
120
|
-
this.debug = this.#spotLightApi.debug;
|
|
121
|
-
this.renderTarget = computed(() => {
|
|
122
|
-
const width = this.shadowMeshInput.shadowMeshWidth();
|
|
123
|
-
const height = this.shadowMeshInput.shadowMeshHeight();
|
|
124
|
-
return new THREE.WebGLRenderTarget(width, height, {
|
|
125
|
-
format: THREE.RGBAFormat,
|
|
126
|
-
encoding: THREE.LinearEncoding,
|
|
127
|
-
stencilBuffer: false,
|
|
128
|
-
// depthTexture: null!
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
this.uniforms = {
|
|
132
|
-
uShadowMap: { value: this.shadowMeshInput.shadowMeshMap() },
|
|
133
|
-
uTime: { value: 0 },
|
|
134
|
-
};
|
|
135
|
-
this.#fsQuad = computed(() => {
|
|
136
|
-
const shader = this.shadowMeshInput.shadowMeshShader();
|
|
137
|
-
if (!shader)
|
|
138
|
-
return null;
|
|
139
|
-
return new FullScreenQuad(new THREE.ShaderMaterial({
|
|
140
|
-
uniforms: this.uniforms,
|
|
141
|
-
vertexShader: /* glsl */ `
|
|
142
|
-
varying vec2 vUv;
|
|
143
|
-
|
|
144
|
-
void main() {
|
|
145
|
-
vUv = uv;
|
|
146
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
147
|
-
}
|
|
148
|
-
`,
|
|
149
|
-
fragmentShader: shader,
|
|
150
|
-
}));
|
|
151
|
-
});
|
|
152
|
-
this.shadowMeshInput.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 4 });
|
|
153
|
-
injectShadowMeshCommon(this.#spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.shadowMeshWidth, this.shadowMeshInput.shadowMeshHeight, this.shadowMeshInput.shadowMeshDistance);
|
|
154
|
-
injectBeforeRender(({ delta, gl }) => {
|
|
155
|
-
this.uniforms.uTime.value += delta;
|
|
156
|
-
const fsQuad = this.#fsQuad();
|
|
157
|
-
const renderTarget = this.renderTarget();
|
|
158
|
-
if (fsQuad && renderTarget) {
|
|
159
|
-
gl.setRenderTarget(renderTarget);
|
|
160
|
-
fsQuad.render(gl);
|
|
161
|
-
gl.setRenderTarget(null);
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
requestAnimationInInjectionContext(() => {
|
|
165
|
-
effect(() => {
|
|
166
|
-
const map = this.shadowMeshInput.shadowMeshMap();
|
|
167
|
-
if (map) {
|
|
168
|
-
this.uniforms.uShadowMap.value = map;
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
effect((onCleanup) => {
|
|
172
|
-
const fsQuad = this.#fsQuad();
|
|
173
|
-
onCleanup(() => {
|
|
174
|
-
if (fsQuad) {
|
|
175
|
-
fsQuad.dispose();
|
|
176
|
-
fsQuad.material.dispose();
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
effect((onCleanup) => {
|
|
181
|
-
const renderTarget = this.renderTarget();
|
|
182
|
-
onCleanup(() => {
|
|
183
|
-
renderTarget.dispose();
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadowMeshShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
189
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsSpotLightShadowMeshShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-shader", ngImport: i0, template: `
|
|
190
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
|
|
191
|
-
<ngt-plane-geometry />
|
|
192
|
-
<ngt-mesh-basic-material
|
|
193
|
-
[transparent]="true"
|
|
194
|
-
[side]="DoubleSide"
|
|
195
|
-
[alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
|
|
196
|
-
[alphaMap]="renderTarget().texture"
|
|
197
|
-
[opacity]="debug() ? 1 : 0"
|
|
198
|
-
>
|
|
199
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
200
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
201
|
-
<ng-content />
|
|
202
|
-
</ngt-mesh-basic-material>
|
|
203
|
-
</ngt-mesh>
|
|
204
|
-
`, isInline: true }); }
|
|
205
|
-
}
|
|
206
|
-
export { NgtsSpotLightShadowMeshShader };
|
|
207
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadowMeshShader, decorators: [{
|
|
208
|
-
type: Component,
|
|
209
|
-
args: [{
|
|
210
|
-
selector: 'ngts-spot-light-shadow-mesh-shader',
|
|
211
|
-
standalone: true,
|
|
212
|
-
template: `
|
|
213
|
-
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
|
|
214
|
-
<ngt-plane-geometry />
|
|
215
|
-
<ngt-mesh-basic-material
|
|
216
|
-
[transparent]="true"
|
|
217
|
-
[side]="DoubleSide"
|
|
218
|
-
[alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
|
|
219
|
-
[alphaMap]="renderTarget().texture"
|
|
220
|
-
[opacity]="debug() ? 1 : 0"
|
|
221
|
-
>
|
|
222
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
223
|
-
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
224
|
-
<ng-content />
|
|
225
|
-
</ngt-mesh-basic-material>
|
|
226
|
-
</ngt-mesh>
|
|
227
|
-
`,
|
|
228
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
229
|
-
}]
|
|
230
|
-
}], ctorParameters: function () { return []; } });
|
|
231
|
-
class NgtsSpotLightShadow extends NgtsSpotLightShadowMeshInput {
|
|
232
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
233
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }], usesInheritance: true, ngImport: i0, template: `
|
|
234
|
-
<ngts-spot-light-shadow-mesh-shader *ngIf="shadowMeshShader(); else noShader" />
|
|
235
|
-
<ng-template #noShader>
|
|
236
|
-
<ngts-spot-light-shadow-mesh-no-shader />
|
|
237
|
-
</ng-template>
|
|
238
|
-
`, 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"] }] }); }
|
|
239
|
-
}
|
|
240
|
-
export { NgtsSpotLightShadow };
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
|
|
242
|
-
type: Component,
|
|
243
|
-
args: [{
|
|
244
|
-
selector: 'ngts-spot-light-shadow',
|
|
245
|
-
standalone: true,
|
|
246
|
-
template: `
|
|
247
|
-
<ngts-spot-light-shadow-mesh-shader *ngIf="shadowMeshShader(); else noShader" />
|
|
248
|
-
<ng-template #noShader>
|
|
249
|
-
<ngts-spot-light-shadow-mesh-no-shader />
|
|
250
|
-
</ng-template>
|
|
251
|
-
`,
|
|
252
|
-
imports: [NgtsSpotLightShadowMeshShader, NgtsSpotLightShadowMeshNoShader, NgIf],
|
|
253
|
-
providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }],
|
|
254
|
-
}]
|
|
255
|
-
}] });
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1zaGFkb3ctbWVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9zcG90LWxpZ2h0L3Nwb3QtbGlnaHQtc2hhZG93LW1lc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHFCQUFxQixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixrQ0FBa0MsR0FDckMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBRTlFLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBNEIsRUFBNEIsRUFBRTtJQUMzRSxPQUFRLEtBQXlCLEVBQUUsV0FBVyxDQUFDO0FBQ25ELENBQUMsQ0FBQztBQUVGLFNBQVMsc0JBQXNCLENBQzNCLFlBQTZDLEVBQzdDLE9BQW1DLEVBQ25DLEtBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFFBQXNCLEVBQ3RCLFFBQW1CO0lBRW5CLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRSxxQkFBcUIsQ0FBQyxR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RTs7Ozs7S0FLVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUM7b0JBQy9FLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVcscUJBQXFCLEVBQUUsQ0FBQztpQkFDM0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBOZ3RJbmplY3RlZFJlZixcbiAgICBhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuICAgIGNoZWNrVXBkYXRlLFxuICAgIGV4dGVuZCxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIHJlcXVlc3RBbmltYXRpb25JbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIFBsYW5lR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOR1RTX1NQT1RfTElHSFRfQVBJIH0gZnJvbSAnLi9zcG90LWxpZ2h0JztcbmltcG9ydCB7IE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXQgfSBmcm9tICcuL3Nwb3QtbGlnaHQtc2hhZG93LW1lc2gtaW5wdXQnO1xuXG5jb25zdCBpc1Nwb3RMaWdodCA9IChjaGlsZDogVEhSRUUuT2JqZWN0M0QgfCBudWxsKTogY2hpbGQgaXMgVEhSRUUuU3BvdExpZ2h0ID0+IHtcbiAgICByZXR1cm4gKGNoaWxkIGFzIFRIUkVFLlNwb3RMaWdodCk/LmlzU3BvdExpZ2h0O1xufTtcblxuZnVuY3Rpb24gaW5qZWN0U2hhZG93TWVzaENvbW1vbihcbiAgICBzcG90TGlnaHRSZWY6IE5ndEluamVjdGVkUmVmPFRIUkVFLlNwb3RMaWdodD4sXG4gICAgbWVzaFJlZjogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuTWVzaD4sXG4gICAgd2lkdGg6ICgpID0+IG51bWJlcixcbiAgICBoZWlnaHQ6ICgpID0+IG51bWJlcixcbiAgICBkaXN0YW5jZTogKCkgPT4gbnVtYmVyLFxuICAgIGluamVjdG9yPzogSW5qZWN0b3Jcbikge1xuICAgIGluamVjdG9yID0gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChpbmplY3RTaGFkb3dNZXNoQ29tbW9uLCBpbmplY3Rvcik7XG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgICAgIGNvbnN0IGRpciA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwb3RMaWdodCA9IHNwb3RMaWdodFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghc3BvdExpZ2h0KSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGlzU3BvdExpZ2h0KHNwb3RMaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0LnNoYWRvdy5tYXBTaXplLnNldCh3aWR0aCgpLCBoZWlnaHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5zaGFkb3cubWFwLnNldFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpO1xuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHQuc2hhZG93Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93PiBtdXN0IGJlIGEgY2hpbGQgb2YgYSA8bmd0cy1zcG90LWxpZ2h0PicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BvdExpZ2h0ID0gc3BvdExpZ2h0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtZXNoID0gbWVzaFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoIXNwb3RMaWdodCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBBID0gc3BvdExpZ2h0LnBvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3QgQiA9IHNwb3RMaWdodC50YXJnZXQucG9zaXRpb247XG5cbiAgICAgICAgICAgIGRpci5jb3B5KEIpLnN1YihBKTtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGRpci5sZW5ndGgoKTtcbiAgICAgICAgICAgIGRpci5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihsZW4gKiBkaXN0YW5jZSgpKTtcbiAgICAgICAgICAgIHBvcy5jb3B5KEEpLmFkZChkaXIpO1xuXG4gICAgICAgICAgICBpZiAobWVzaCkge1xuICAgICAgICAgICAgICAgIG1lc2gucG9zaXRpb24uY29weShwb3MpO1xuICAgICAgICAgICAgICAgIG1lc2gubG9va0F0KHNwb3RMaWdodC50YXJnZXQucG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLW5vLXNoYWRlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LW1lc2ggW3JlZl09XCJtZXNoUmVmXCIgW3NjYWxlXT1cInNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoU2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cbiAgICAgICAgICAgIDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgIFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2lkZV09XCJEb3VibGVTaWRlXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cInNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoQWxwaGFUZXN0KClcIlxuICAgICAgICAgICAgICAgIFthbHBoYU1hcF09XCJzaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaE1hcCgpXCJcbiAgICAgICAgICAgICAgICBbb3BhY2l0eV09XCJkZWJ1ZygpID8gMSA6IDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgICAgICA8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuICAgICAgICA8L25ndC1tZXNoPlxuICAgIGAsXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaE5vU2hhZGVyIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hhZG93TWVzaElucHV0ID0gaW5qZWN0KE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXQpO1xuICAgIHJlYWRvbmx5ICNzcG90TGlnaHRBcGkgPSBpbmplY3QoTkdUU19TUE9UX0xJR0hUX0FQSSk7XG5cbiAgICByZWFkb25seSBtZXNoUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk1lc2g+KCk7XG4gICAgcmVhZG9ubHkgRG91YmxlU2lkZSA9IFRIUkVFLkRvdWJsZVNpZGU7XG5cbiAgICByZWFkb25seSBkZWJ1ZyA9IHRoaXMuI3Nwb3RMaWdodEFwaS5kZWJ1ZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5wYXRjaCh7IGRpc3RhbmNlOiAwLjQsIGFscGhhVGVzdDogMC41LCB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiwgc2NhbGU6IDEgfSk7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hNYXAoKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcC53cmFwUyA9IG1hcC53cmFwVCA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuICAgICAgICAgICAgICAgICAgICBjaGVja1VwZGF0ZShtYXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuICAgICAgICAgICAgdGhpcy4jc3BvdExpZ2h0QXBpLnNwb3RMaWdodCxcbiAgICAgICAgICAgIHRoaXMubWVzaFJlZixcbiAgICAgICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hXaWR0aCxcbiAgICAgICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hIZWlnaHQsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoRGlzdGFuY2VcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLXNoYWRlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LW1lc2ggW3JlZl09XCJtZXNoUmVmXCIgW3NjYWxlXT1cInNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoU2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cbiAgICAgICAgICAgIDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgIFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2lkZV09XCJEb3VibGVTaWRlXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cInNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoQWxwaGFUZXN0KClcIlxuICAgICAgICAgICAgICAgIFthbHBoYU1hcF09XCJyZW5kZXJUYXJnZXQoKS50ZXh0dXJlXCJcbiAgICAgICAgICAgICAgICBbb3BhY2l0eV09XCJkZWJ1ZygpID8gMSA6IDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cIlJlcGVhdFdyYXBwaW5nXCIgYXR0YWNoPVwiYWxwaGFNYXAud3JhcFNcIiAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cIlJlcGVhdFdyYXBwaW5nXCIgYXR0YWNoPVwiYWxwaGFNYXAud3JhcFRcIiAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgICAgICA8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuICAgICAgICA8L25ndC1tZXNoPlxuICAgIGAsXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaFNoYWRlciB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNoYWRvd01lc2hJbnB1dCA9IGluamVjdChOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0KTtcbiAgICByZWFkb25seSBtZXNoUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk1lc2g+KCk7XG4gICAgcmVhZG9ubHkgI3Nwb3RMaWdodEFwaSA9IGluamVjdChOR1RTX1NQT1RfTElHSFRfQVBJKTtcblxuICAgIHJlYWRvbmx5IERvdWJsZVNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlO1xuICAgIHJlYWRvbmx5IFJlcGVhdFdyYXBwaW5nID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XG5cbiAgICByZWFkb25seSBkZWJ1ZyA9IHRoaXMuI3Nwb3RMaWdodEFwaS5kZWJ1ZztcbiAgICByZWFkb25seSByZW5kZXJUYXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5zaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hIZWlnaHQoKTtcblxuICAgICAgICByZXR1cm4gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHtcbiAgICAgICAgICAgIGZvcm1hdDogVEhSRUUuUkdCQUZvcm1hdCxcbiAgICAgICAgICAgIGVuY29kaW5nOiBUSFJFRS5MaW5lYXJFbmNvZGluZyxcbiAgICAgICAgICAgIHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuICAgICAgICAgICAgLy8gZGVwdGhUZXh0dXJlOiBudWxsIVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZWFkb25seSB1bmlmb3JtcyA9IHtcbiAgICAgICAgdVNoYWRvd01hcDogeyB2YWx1ZTogdGhpcy5zaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaE1hcCgpIH0sXG4gICAgICAgIHVUaW1lOiB7IHZhbHVlOiAwIH0sXG4gICAgfTtcblxuICAgIHJlYWRvbmx5ICNmc1F1YWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYWRlciA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hTaGFkZXIoKTtcbiAgICAgICAgaWYgKCFzaGFkZXIpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IEZ1bGxTY3JlZW5RdWFkKFxuICAgICAgICAgICAgbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtczogdGhpcy51bmlmb3JtcyxcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IC8qIGdsc2wgKi8gYFxuICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICAgICAgICAgICAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICAgICAgICAgICB2VXYgPSB1djtcbiAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBzaGFkZXIsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnBhdGNoKHsgZGlzdGFuY2U6IDAuNCwgYWxwaGFUZXN0OiAwLjUsIHdpZHRoOiA1MTIsIGhlaWdodDogNTEyLCBzY2FsZTogNCB9KTtcblxuICAgICAgICBpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuICAgICAgICAgICAgdGhpcy4jc3BvdExpZ2h0QXBpLnNwb3RMaWdodCxcbiAgICAgICAgICAgIHRoaXMubWVzaFJlZixcbiAgICAgICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hXaWR0aCxcbiAgICAgICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hIZWlnaHQsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoRGlzdGFuY2VcbiAgICAgICAgKTtcblxuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEsIGdsIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7XG4gICAgICAgICAgICBjb25zdCBmc1F1YWQgPSB0aGlzLiNmc1F1YWQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZnNRdWFkICYmIHJlbmRlclRhcmdldCkge1xuICAgICAgICAgICAgICAgIGdsLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgICAgICAgICAgICAgIGZzUXVhZC5yZW5kZXIoZ2wpO1xuICAgICAgICAgICAgICAgIGdsLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hNYXAoKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudVNoYWRvd01hcC52YWx1ZSA9IG1hcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1F1YWQgPSB0aGlzLiNmc1F1YWQoKTtcbiAgICAgICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnNRdWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmc1F1YWQuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnNRdWFkLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW1lc2gtc2hhZGVyICpuZ0lmPVwic2hhZG93TWVzaFNoYWRlcigpOyBlbHNlIG5vU2hhZGVyXCIgLz5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1NoYWRlcj5cbiAgICAgICAgICAgIDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW1lc2gtbm8tc2hhZGVyIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIsIE5nSWZdLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCwgdXNlRXhpc3Rpbmc6IE5ndHNTcG90TGlnaHRTaGFkb3cgfV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3cgZXh0ZW5kcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0IHt9XG4iXX0=
|