angular-three-soba 2.0.0-beta.9 → 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 -49
- 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
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, DestroyRef, afterNextRender, computed, inject, input, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { extend, getLocalState, injectBeforeRender, injectStore, omit, pick } from 'angular-three';
|
|
3
|
+
import { ProgressiveLightMap, SoftShadowMaterial } from 'angular-three-soba/vanilla-exports';
|
|
4
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
5
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
6
|
+
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const defaultOptions = {
|
|
9
|
+
temporal: false,
|
|
10
|
+
frames: 40,
|
|
11
|
+
limit: Infinity,
|
|
12
|
+
blend: 20,
|
|
13
|
+
scale: 10,
|
|
14
|
+
opacity: 1,
|
|
15
|
+
alphaTest: 0.75,
|
|
16
|
+
color: 'black',
|
|
17
|
+
colorBlend: 2,
|
|
18
|
+
resolution: 1024,
|
|
19
|
+
toneMapped: true,
|
|
20
|
+
};
|
|
21
|
+
export class NgtsAccumulativeShadows {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.nullTraversal = () => null;
|
|
24
|
+
this.Math = Math;
|
|
25
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
26
|
+
this.parameters = omit(this.options, [
|
|
27
|
+
'temporal',
|
|
28
|
+
'frames',
|
|
29
|
+
'limit',
|
|
30
|
+
'blend',
|
|
31
|
+
'scale',
|
|
32
|
+
'opacity',
|
|
33
|
+
'alphaTest',
|
|
34
|
+
'color',
|
|
35
|
+
'colorBlend',
|
|
36
|
+
'resolution',
|
|
37
|
+
'toneMapped',
|
|
38
|
+
]);
|
|
39
|
+
this.lightsRef = viewChild.required('lights');
|
|
40
|
+
this.planeRef = viewChild.required('plane');
|
|
41
|
+
this.store = injectStore();
|
|
42
|
+
this.gl = this.store.select('gl');
|
|
43
|
+
this.camera = this.store.select('camera');
|
|
44
|
+
this.scene = this.store.select('scene');
|
|
45
|
+
this.invalidate = this.store.select('invalidate');
|
|
46
|
+
this.opacity = pick(this.options, 'opacity');
|
|
47
|
+
this.alphaTest = pick(this.options, 'alphaTest');
|
|
48
|
+
this.limit = pick(this.options, 'limit');
|
|
49
|
+
this.resolution = pick(this.options, 'resolution');
|
|
50
|
+
this.pLM = computed(() => {
|
|
51
|
+
if (this.previousPLM) {
|
|
52
|
+
this.previousPLM.clear();
|
|
53
|
+
}
|
|
54
|
+
return (this.previousPLM = new ProgressiveLightMap(this.gl(), this.scene(), this.resolution()));
|
|
55
|
+
});
|
|
56
|
+
this.scale = pick(this.options, 'scale');
|
|
57
|
+
this.toneMapped = pick(this.options, 'toneMapped');
|
|
58
|
+
this.color = pick(this.options, 'color');
|
|
59
|
+
this.colorBlend = pick(this.options, 'colorBlend');
|
|
60
|
+
this.map = computed(() => this.pLM().progressiveLightMap2.texture);
|
|
61
|
+
this.lightsMap = new Map();
|
|
62
|
+
this.temporal = computed(() => !!this.options().temporal);
|
|
63
|
+
this.frames = computed(() => Math.max(2, this.options().frames));
|
|
64
|
+
this.blend = computed(() => Math.max(2, this.options().frames === Infinity ? this.options().blend : this.options().frames));
|
|
65
|
+
this.count = 0;
|
|
66
|
+
extend({ Group, SoftShadowMaterial, Mesh, PlaneGeometry });
|
|
67
|
+
const autoEffect = injectAutoEffect();
|
|
68
|
+
afterNextRender(() => {
|
|
69
|
+
this.pLM().configure(this.planeRef().nativeElement);
|
|
70
|
+
autoEffect(() => {
|
|
71
|
+
const sceneLS = getLocalState(this.scene());
|
|
72
|
+
if (!sceneLS)
|
|
73
|
+
return;
|
|
74
|
+
// track deps
|
|
75
|
+
this.planeRef();
|
|
76
|
+
this.options();
|
|
77
|
+
sceneLS.objects();
|
|
78
|
+
// Reset internals, buffers, ...
|
|
79
|
+
this.reset();
|
|
80
|
+
// Update lightmap
|
|
81
|
+
if (!this.temporal() && this.frames() !== Infinity)
|
|
82
|
+
this.update(this.blend());
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
injectBeforeRender(() => {
|
|
86
|
+
const [frames, temporal, invalidate, limit] = [this.frames(), !!this.temporal(), this.invalidate(), this.limit()];
|
|
87
|
+
if ((temporal || frames === Infinity) && this.count < frames && this.count < limit) {
|
|
88
|
+
invalidate();
|
|
89
|
+
this.update();
|
|
90
|
+
this.count++;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
inject(DestroyRef).onDestroy(() => {
|
|
94
|
+
this.previousPLM?.clear();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
getMesh() {
|
|
98
|
+
return this.planeRef().nativeElement;
|
|
99
|
+
}
|
|
100
|
+
reset() {
|
|
101
|
+
// Clear buffers, reset opacities, set frame count to 0
|
|
102
|
+
untracked(this.pLM).clear();
|
|
103
|
+
const material = untracked(this.planeRef).nativeElement.material;
|
|
104
|
+
material.opacity = 0;
|
|
105
|
+
material.alphaTest = 0;
|
|
106
|
+
this.count = 0;
|
|
107
|
+
}
|
|
108
|
+
update(frames = 1) {
|
|
109
|
+
// Adapt the opacity-blend ratio to the number of frames
|
|
110
|
+
const material = this.planeRef().nativeElement.material;
|
|
111
|
+
if (!this.temporal()) {
|
|
112
|
+
material.opacity = this.opacity();
|
|
113
|
+
material.alphaTest = this.alphaTest();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
material.opacity = Math.min(this.opacity(), material.opacity + this.opacity() / this.blend());
|
|
117
|
+
material.alphaTest = Math.min(this.alphaTest(), material.alphaTest + this.alphaTest() / this.blend());
|
|
118
|
+
}
|
|
119
|
+
// Switch accumulative lights on
|
|
120
|
+
this.lightsRef().nativeElement.visible = true;
|
|
121
|
+
// Collect scene lights and meshes
|
|
122
|
+
this.pLM().prepare();
|
|
123
|
+
// Update the lightmap and the accumulative lights
|
|
124
|
+
for (let i = 0; i < frames; i++) {
|
|
125
|
+
this.lightsMap.forEach((lightUpdate) => lightUpdate());
|
|
126
|
+
this.pLM().update(this.camera(), this.blend());
|
|
127
|
+
}
|
|
128
|
+
// Switch lights off
|
|
129
|
+
this.lightsRef().nativeElement.visible = false;
|
|
130
|
+
// Restore lights and meshes
|
|
131
|
+
this.pLM().finish();
|
|
132
|
+
}
|
|
133
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lightsRef", first: true, predicate: ["lights"], descendants: true, isSignal: true }, { propertyName: "planeRef", first: true, predicate: ["plane"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
135
|
+
<ngt-group [parameters]="parameters()">
|
|
136
|
+
<ngt-group #lights [traverse]="nullTraversal">
|
|
137
|
+
<ng-content />
|
|
138
|
+
</ngt-group>
|
|
139
|
+
|
|
140
|
+
<ngt-mesh #plane [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]" [receiveShadow]="true">
|
|
141
|
+
<ngt-plane-geometry />
|
|
142
|
+
<ngt-soft-shadow-material
|
|
143
|
+
[depthWrite]="false"
|
|
144
|
+
[toneMapped]="toneMapped()"
|
|
145
|
+
[color]="color()"
|
|
146
|
+
[blend]="colorBlend()"
|
|
147
|
+
[map]="map()"
|
|
148
|
+
[transparent]="true"
|
|
149
|
+
/>
|
|
150
|
+
</ngt-mesh>
|
|
151
|
+
</ngt-group>
|
|
152
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
153
|
+
}
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
|
|
155
|
+
type: Component,
|
|
156
|
+
args: [{
|
|
157
|
+
selector: 'ngts-accumulative-shadows',
|
|
158
|
+
standalone: true,
|
|
159
|
+
template: `
|
|
160
|
+
<ngt-group [parameters]="parameters()">
|
|
161
|
+
<ngt-group #lights [traverse]="nullTraversal">
|
|
162
|
+
<ng-content />
|
|
163
|
+
</ngt-group>
|
|
164
|
+
|
|
165
|
+
<ngt-mesh #plane [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]" [receiveShadow]="true">
|
|
166
|
+
<ngt-plane-geometry />
|
|
167
|
+
<ngt-soft-shadow-material
|
|
168
|
+
[depthWrite]="false"
|
|
169
|
+
[toneMapped]="toneMapped()"
|
|
170
|
+
[color]="color()"
|
|
171
|
+
[blend]="colorBlend()"
|
|
172
|
+
[map]="map()"
|
|
173
|
+
[transparent]="true"
|
|
174
|
+
/>
|
|
175
|
+
</ngt-mesh>
|
|
176
|
+
</ngt-group>
|
|
177
|
+
`,
|
|
178
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
179
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
180
|
+
}]
|
|
181
|
+
}], ctorParameters: () => [] });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2FjY3VtdWxhdGl2ZS1zaGFkb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBRVYsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFZLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUEyQm5ELE1BQU0sY0FBYyxHQUFtQztJQUN0RCxRQUFRLEVBQUUsS0FBSztJQUNmLE1BQU0sRUFBRSxFQUFFO0lBQ1YsS0FBSyxFQUFFLFFBQVE7SUFDZixLQUFLLEVBQUUsRUFBRTtJQUNULEtBQUssRUFBRSxFQUFFO0lBQ1QsT0FBTyxFQUFFLENBQUM7SUFDVixTQUFTLEVBQUUsSUFBSTtJQUNmLEtBQUssRUFBRSxPQUFPO0lBQ2QsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsSUFBSTtJQUNoQixVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDO0FBMkJGLE1BQU0sT0FBTyx1QkFBdUI7SUF1RG5DO1FBdERBLGtCQUFh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SUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDL0MsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyQixDQUFDOzhHQWxJVyx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3YkF0QnpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrQlQ7OzJGQUlXLHVCQUF1QjtrQkF6Qm5DLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0JUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREZXN0cm95UmVmLFxuXHRFbGVtZW50UmVmLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RHcm91cCwgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlLCBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBQcm9ncmVzc2l2ZUxpZ2h0TWFwLCBTb2Z0U2hhZG93TWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdmFuaWxsYS1leHBvcnRzJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0R3JvdXA+IHtcblx0LyoqIEhvdyBtYW55IGZyYW1lcyBpdCBjYW4gcmVuZGVyLCBtb3JlIHlpZWxkcyBjbGVhbmVyIHJlc3VsdHMgYnV0IHRha2VzIG1vcmUgdGltZSwgNDAgKi9cblx0ZnJhbWVzOiBudW1iZXI7XG5cdC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cblx0YmxlbmQ6IG51bWJlcjtcblx0LyoqIENhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGZyYW1lcyByZW5kZXJlZCBpZiBmcmFtZXMgPT09IEluZmluaXR5LCB1c3VhbGx5IHRvIGdldCBzb21lIHBlcmZvcm1hbmNlIGJhY2sgb25jZSBhIG1vdmFibGUgc2NlbmUgaGFzIHNldHRsZWQsIEluZmluaXR5ICovXG5cdGxpbWl0OiBudW1iZXI7XG5cdC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuXHRzY2FsZTogbnVtYmVyO1xuXHQvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG5cdHRlbXBvcmFsPzogYm9vbGVhbjtcblx0LyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG5cdG9wYWNpdHk6IG51bWJlcjtcblx0LyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuXHRhbHBoYVRlc3Q6IG51bWJlcjtcblx0LyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cblx0Y29sb3I6IHN0cmluZztcblx0LyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG5cdGNvbG9yQmxlbmQ6IG51bWJlcjtcblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0LyoqIFRleHR1cmUgdG9uZW1hcHBpbmcgKi9cblx0dG9uZU1hcHBlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzT3B0aW9ucyA9IHtcblx0dGVtcG9yYWw6IGZhbHNlLFxuXHRmcmFtZXM6IDQwLFxuXHRsaW1pdDogSW5maW5pdHksXG5cdGJsZW5kOiAyMCxcblx0c2NhbGU6IDEwLFxuXHRvcGFjaXR5OiAxLFxuXHRhbHBoYVRlc3Q6IDAuNzUsXG5cdGNvbG9yOiAnYmxhY2snLFxuXHRjb2xvckJsZW5kOiAyLFxuXHRyZXNvbHV0aW9uOiAxMDI0LFxuXHR0b25lTWFwcGVkOiB0cnVlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtZ3JvdXAgI2xpZ2h0cyBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNhbFwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cblx0XHRcdDxuZ3QtbWVzaCAjcGxhbmUgW3NjYWxlXT1cInNjYWxlKClcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIiBbcmVjZWl2ZVNoYWRvd109XCJ0cnVlXCI+XG5cdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdFx0PG5ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbFxuXHRcdFx0XHRcdFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcblx0XHRcdFx0XHRbdG9uZU1hcHBlZF09XCJ0b25lTWFwcGVkKClcIlxuXHRcdFx0XHRcdFtjb2xvcl09XCJjb2xvcigpXCJcblx0XHRcdFx0XHRbYmxlbmRdPVwiY29sb3JCbGVuZCgpXCJcblx0XHRcdFx0XHRbbWFwXT1cIm1hcCgpXCJcblx0XHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25ndC1tZXNoPlxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyB7XG5cdG51bGxUcmF2ZXJzYWwgPSAoKSA9PiBudWxsO1xuXHRNYXRoID0gTWF0aDtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCd0ZW1wb3JhbCcsXG5cdFx0J2ZyYW1lcycsXG5cdFx0J2xpbWl0Jyxcblx0XHQnYmxlbmQnLFxuXHRcdCdzY2FsZScsXG5cdFx0J29wYWNpdHknLFxuXHRcdCdhbHBoYVRlc3QnLFxuXHRcdCdjb2xvcicsXG5cdFx0J2NvbG9yQmxlbmQnLFxuXHRcdCdyZXNvbHV0aW9uJyxcblx0XHQndG9uZU1hcHBlZCcsXG5cdF0pO1xuXG5cdGxpZ2h0c1JlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2xpZ2h0cycpO1xuXHRwbGFuZVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g8UGxhbmVHZW9tZXRyeSwgSW5zdGFuY2VUeXBlPHR5cGVvZiBTb2Z0U2hhZG93TWF0ZXJpYWw+Pj4+KCdwbGFuZScpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgY2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIHNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cblx0cHJpdmF0ZSBvcGFjaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdvcGFjaXR5Jyk7XG5cdHByaXZhdGUgYWxwaGFUZXN0ID0gcGljayh0aGlzLm9wdGlvbnMsICdhbHBoYVRlc3QnKTtcblx0cHJpdmF0ZSBsaW1pdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGltaXQnKTtcblx0cHJpdmF0ZSByZXNvbHV0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdyZXNvbHV0aW9uJyk7XG5cblx0cHJpdmF0ZSBwcmV2aW91c1BMTTogUHJvZ3Jlc3NpdmVMaWdodE1hcCB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBwTE0gPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0aWYgKHRoaXMucHJldmlvdXNQTE0pIHtcblx0XHRcdHRoaXMucHJldmlvdXNQTE0uY2xlYXIoKTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLnByZXZpb3VzUExNID0gbmV3IFByb2dyZXNzaXZlTGlnaHRNYXAodGhpcy5nbCgpLCB0aGlzLnNjZW5lKCksIHRoaXMucmVzb2x1dGlvbigpKSk7XG5cdH0pO1xuXG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXHR0b25lTWFwcGVkID0gcGljayh0aGlzLm9wdGlvbnMsICd0b25lTWFwcGVkJyk7XG5cdGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRjb2xvckJsZW5kID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvckJsZW5kJyk7XG5cdG1hcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucExNKCkucHJvZ3Jlc3NpdmVMaWdodE1hcDIudGV4dHVyZSk7XG5cblx0bGlnaHRzTWFwID0gbmV3IE1hcDxzdHJpbmcsICgpID0+IHZvaWQ+KCk7XG5cdHRlbXBvcmFsID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLm9wdGlvbnMoKS50ZW1wb3JhbCk7XG5cdGZyYW1lcyA9IGNvbXB1dGVkKCgpID0+IE1hdGgubWF4KDIsIHRoaXMub3B0aW9ucygpLmZyYW1lcykpO1xuXHRibGVuZCA9IGNvbXB1dGVkKCgpID0+XG5cdFx0TWF0aC5tYXgoMiwgdGhpcy5vcHRpb25zKCkuZnJhbWVzID09PSBJbmZpbml0eSA/IHRoaXMub3B0aW9ucygpLmJsZW5kIDogdGhpcy5vcHRpb25zKCkuZnJhbWVzKSxcblx0KTtcblx0Y291bnQgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwLCBTb2Z0U2hhZG93TWF0ZXJpYWwsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMucExNKCkuY29uZmlndXJlKHRoaXMucGxhbmVSZWYoKS5uYXRpdmVFbGVtZW50KTtcblxuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNjZW5lTFMgPSBnZXRMb2NhbFN0YXRlKHRoaXMuc2NlbmUoKSk7XG5cdFx0XHRcdGlmICghc2NlbmVMUykgcmV0dXJuO1xuXHRcdFx0XHQvLyB0cmFjayBkZXBzXG5cdFx0XHRcdHRoaXMucGxhbmVSZWYoKTtcblx0XHRcdFx0dGhpcy5vcHRpb25zKCk7XG5cdFx0XHRcdHNjZW5lTFMub2JqZWN0cygpO1xuXG5cdFx0XHRcdC8vIFJlc2V0IGludGVybmFscywgYnVmZmVycywgLi4uXG5cdFx0XHRcdHRoaXMucmVzZXQoKTtcblx0XHRcdFx0Ly8gVXBkYXRlIGxpZ2h0bWFwXG5cdFx0XHRcdGlmICghdGhpcy50ZW1wb3JhbCgpICYmIHRoaXMuZnJhbWVzKCkgIT09IEluZmluaXR5KSB0aGlzLnVwZGF0ZSh0aGlzLmJsZW5kKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW2ZyYW1lcywgdGVtcG9yYWwsIGludmFsaWRhdGUsIGxpbWl0XSA9IFt0aGlzLmZyYW1lcygpLCAhIXRoaXMudGVtcG9yYWwoKSwgdGhpcy5pbnZhbGlkYXRlKCksIHRoaXMubGltaXQoKV07XG5cdFx0XHRpZiAoKHRlbXBvcmFsIHx8IGZyYW1lcyA9PT0gSW5maW5pdHkpICYmIHRoaXMuY291bnQgPCBmcmFtZXMgJiYgdGhpcy5jb3VudCA8IGxpbWl0KSB7XG5cdFx0XHRcdGludmFsaWRhdGUoKTtcblx0XHRcdFx0dGhpcy51cGRhdGUoKTtcblx0XHRcdFx0dGhpcy5jb3VudCsrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnByZXZpb3VzUExNPy5jbGVhcigpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0TWVzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy5wbGFuZVJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cdH1cblxuXHRyZXNldCgpIHtcblx0XHQvLyBDbGVhciBidWZmZXJzLCByZXNldCBvcGFjaXRpZXMsIHNldCBmcmFtZSBjb3VudCB0byAwXG5cdFx0dW50cmFja2VkKHRoaXMucExNKS5jbGVhcigpO1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gdW50cmFja2VkKHRoaXMucGxhbmVSZWYpLm5hdGl2ZUVsZW1lbnQubWF0ZXJpYWw7XG5cdFx0bWF0ZXJpYWwub3BhY2l0eSA9IDA7XG5cdFx0bWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcblx0XHR0aGlzLmNvdW50ID0gMDtcblx0fVxuXG5cdHVwZGF0ZShmcmFtZXMgPSAxKSB7XG5cdFx0Ly8gQWRhcHQgdGhlIG9wYWNpdHktYmxlbmQgcmF0aW8gdG8gdGhlIG51bWJlciBvZiBmcmFtZXNcblx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMucGxhbmVSZWYoKS5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuXHRcdGlmICghdGhpcy50ZW1wb3JhbCgpKSB7XG5cdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gdGhpcy5vcGFjaXR5KCk7XG5cdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSB0aGlzLmFscGhhVGVzdCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gTWF0aC5taW4odGhpcy5vcGFjaXR5KCksIG1hdGVyaWFsLm9wYWNpdHkgKyB0aGlzLm9wYWNpdHkoKSAvIHRoaXMuYmxlbmQoKSk7XG5cdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSBNYXRoLm1pbih0aGlzLmFscGhhVGVzdCgpLCBtYXRlcmlhbC5hbHBoYVRlc3QgKyB0aGlzLmFscGhhVGVzdCgpIC8gdGhpcy5ibGVuZCgpKTtcblx0XHR9XG5cblx0XHQvLyBTd2l0Y2ggYWNjdW11bGF0aXZlIGxpZ2h0cyBvblxuXHRcdHRoaXMubGlnaHRzUmVmKCkubmF0aXZlRWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcblx0XHQvLyBDb2xsZWN0IHNjZW5lIGxpZ2h0cyBhbmQgbWVzaGVzXG5cdFx0dGhpcy5wTE0oKS5wcmVwYXJlKCk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIGxpZ2h0bWFwIGFuZCB0aGUgYWNjdW11bGF0aXZlIGxpZ2h0c1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHtcblx0XHRcdHRoaXMubGlnaHRzTWFwLmZvckVhY2goKGxpZ2h0VXBkYXRlKSA9PiBsaWdodFVwZGF0ZSgpKTtcblx0XHRcdHRoaXMucExNKCkudXBkYXRlKHRoaXMuY2FtZXJhKCksIHRoaXMuYmxlbmQoKSk7XG5cdFx0fVxuXHRcdC8vIFN3aXRjaCBsaWdodHMgb2ZmXG5cdFx0dGhpcy5saWdodHNSZWYoKS5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcblx0XHQvLyBSZXN0b3JlIGxpZ2h0cyBhbmQgbWVzaGVzXG5cdFx0dGhpcy5wTE0oKS5maW5pc2goKTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
|
|
2
|
+
import { checkUpdate, extend, NgtArgs, omit, pick } from 'angular-three';
|
|
3
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
+
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
function easeInExpo(x) {
|
|
8
|
+
return x === 0 ? 0 : Math.pow(2, 10 * x - 10);
|
|
9
|
+
}
|
|
10
|
+
const defaultOptions = {
|
|
11
|
+
floor: 0.25,
|
|
12
|
+
segments: 20,
|
|
13
|
+
};
|
|
14
|
+
export class NgtsBackdrop {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.Math = Math;
|
|
17
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
+
this.parameters = omit(this.options, ['floor', 'segments', 'receiveShadow']);
|
|
19
|
+
this.groupRef = viewChild.required('group');
|
|
20
|
+
this.planeRef = viewChild('plane');
|
|
21
|
+
this.receiveShadow = pick(this.options, 'receiveShadow');
|
|
22
|
+
this.segments = pick(this.options, 'segments');
|
|
23
|
+
this.floor = pick(this.options, 'floor');
|
|
24
|
+
extend({ Group, Mesh, PlaneGeometry });
|
|
25
|
+
const autoEffect = injectAutoEffect();
|
|
26
|
+
afterNextRender(() => {
|
|
27
|
+
autoEffect(() => {
|
|
28
|
+
const plane = this.planeRef()?.nativeElement;
|
|
29
|
+
if (!plane)
|
|
30
|
+
return;
|
|
31
|
+
const [segments, floor] = [this.segments(), this.floor()];
|
|
32
|
+
let i = 0;
|
|
33
|
+
const offset = segments / segments / 2;
|
|
34
|
+
const position = plane.attributes['position'];
|
|
35
|
+
for (let x = 0; x < segments + 1; x++) {
|
|
36
|
+
for (let y = 0; y < segments + 1; y++) {
|
|
37
|
+
position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
checkUpdate(position);
|
|
41
|
+
plane.computeVertexNormals();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsBackdrop, isStandalone: true, selector: "ngts-backdrop", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "planeRef", first: true, predicate: ["plane"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
47
|
+
<ngt-group #group [parameters]="parameters()">
|
|
48
|
+
<ngt-mesh [receiveShadow]="receiveShadow()" [rotation]="[-Math.PI / 2, 0, Math.PI / 2]">
|
|
49
|
+
<ngt-plane-geometry #plane *args="[1, 1, segments(), segments()]" />
|
|
50
|
+
<ng-content />
|
|
51
|
+
</ngt-mesh>
|
|
52
|
+
</ngt-group>
|
|
53
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBackdrop, decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{
|
|
58
|
+
selector: 'ngts-backdrop',
|
|
59
|
+
standalone: true,
|
|
60
|
+
template: `
|
|
61
|
+
<ngt-group #group [parameters]="parameters()">
|
|
62
|
+
<ngt-mesh [receiveShadow]="receiveShadow()" [rotation]="[-Math.PI / 2, 0, Math.PI / 2]">
|
|
63
|
+
<ngt-plane-geometry #plane *args="[1, 1, segments(), segments()]" />
|
|
64
|
+
<ng-content />
|
|
65
|
+
</ngt-mesh>
|
|
66
|
+
</ngt-group>
|
|
67
|
+
`,
|
|
68
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
69
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
70
|
+
imports: [NgtArgs],
|
|
71
|
+
}]
|
|
72
|
+
}], ctorParameters: () => [] });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2JhY2tkcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQVksSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFtQixLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFcEUsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBUUQsTUFBTSxjQUFjLEdBQXdCO0lBQzNDLEtBQUssRUFBRSxJQUFJO0lBQ1gsUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBaUJGLE1BQU0sT0FBTyxZQUFZO0lBYXhCO1FBWm1CLFNBQUksR0FBRyxJQUFJLENBQUM7UUFFL0IsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFeEUsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBQzFELGFBQVEsR0FBRyxTQUFTLENBQTRCLE9BQU8sQ0FBQyxDQUFDO1FBRXpELGtCQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEQsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUczQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFdkMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTztnQkFFbkIsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBb0IsQ0FBQztnQkFDakUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDdkMsUUFBUSxDQUFDLE1BQU0sQ0FDZCxDQUFDLEVBQUUsRUFDSCxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDOUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQ3JCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQ3hCLENBQUM7b0JBQ0gsQ0FBQztnQkFDRixDQUFDO2dCQUVELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBMUNXLFlBQVk7a0dBQVosWUFBWSwwYUFaZDs7Ozs7OztFQU9ULDREQUdTLE9BQU87OzJGQUVMLFlBQVk7a0JBZnhCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7RUFPVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUsIGV4dGVuZCwgTmd0QXJncywgTmd0R3JvdXAsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEJ1ZmZlckF0dHJpYnV0ZSwgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XG5cbmZ1bmN0aW9uIGVhc2VJbkV4cG8oeDogbnVtYmVyKSB7XG5cdHJldHVybiB4ID09PSAwID8gMCA6IE1hdGgucG93KDIsIDEwICogeCAtIDEwKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQmFja2Ryb3BPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRmbG9vcjogbnVtYmVyO1xuXHRzZWdtZW50czogbnVtYmVyO1xuXHRyZWNlaXZlU2hhZG93PzogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNCYWNrZHJvcE9wdGlvbnMgPSB7XG5cdGZsb29yOiAwLjI1LFxuXHRzZWdtZW50czogMjAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWJhY2tkcm9wJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNncm91cCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtbWVzaCBbcmVjZWl2ZVNoYWRvd109XCJyZWNlaXZlU2hhZG93KClcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgTWF0aC5QSSAvIDJdXCI+XG5cdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgI3BsYW5lICphcmdzPVwiWzEsIDEsIHNlZ21lbnRzKCksIHNlZ21lbnRzKCldXCIgLz5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2g+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0JhY2tkcm9wIHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IE1hdGggPSBNYXRoO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2Zsb29yJywgJ3NlZ21lbnRzJywgJ3JlY2VpdmVTaGFkb3cnXSk7XG5cblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRwbGFuZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPFBsYW5lR2VvbWV0cnk+PigncGxhbmUnKTtcblxuXHRyZWNlaXZlU2hhZG93ID0gcGljayh0aGlzLm9wdGlvbnMsICdyZWNlaXZlU2hhZG93Jyk7XG5cdHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIGZsb29yID0gcGljayh0aGlzLm9wdGlvbnMsICdmbG9vcicpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0pO1xuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBsYW5lID0gdGhpcy5wbGFuZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHRpZiAoIXBsYW5lKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgW3NlZ21lbnRzLCBmbG9vcl0gPSBbdGhpcy5zZWdtZW50cygpLCB0aGlzLmZsb29yKCldO1xuXG5cdFx0XHRcdGxldCBpID0gMDtcblx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gc2VnbWVudHMgLyBzZWdtZW50cyAvIDI7XG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uID0gcGxhbmUuYXR0cmlidXRlc1sncG9zaXRpb24nXSBhcyBCdWZmZXJBdHRyaWJ1dGU7XG5cdFx0XHRcdGZvciAobGV0IHggPSAwOyB4IDwgc2VnbWVudHMgKyAxOyB4KyspIHtcblx0XHRcdFx0XHRmb3IgKGxldCB5ID0gMDsgeSA8IHNlZ21lbnRzICsgMTsgeSsrKSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbi5zZXRYWVooXG5cdFx0XHRcdFx0XHRcdGkrKyxcblx0XHRcdFx0XHRcdFx0eCAvIHNlZ21lbnRzIC0gb2Zmc2V0ICsgKHggPT09IDAgPyAtZmxvb3IgOiAwKSxcblx0XHRcdFx0XHRcdFx0eSAvIHNlZ21lbnRzIC0gb2Zmc2V0LFxuXHRcdFx0XHRcdFx0XHRlYXNlSW5FeHBvKHggLyBzZWdtZW50cyksXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNoZWNrVXBkYXRlKHBvc2l0aW9uKTtcblx0XHRcdFx0cGxhbmUuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, input, signal, viewChild, } from '@angular/core';
|
|
2
|
+
import { extend, getLocalState, injectBeforeRender, omit, vector3 } from 'angular-three';
|
|
3
|
+
import { Box3, Group, Vector3 } from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const boundingBox = new Box3();
|
|
6
|
+
const boundingBoxSize = new Vector3();
|
|
7
|
+
export class NgtsBBAnchor {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.options = input.required();
|
|
10
|
+
this.parameters = omit(this.options, ['anchor']);
|
|
11
|
+
this.bbAnchorRef = viewChild.required('bbAnchor');
|
|
12
|
+
this.parent = signal(null);
|
|
13
|
+
this.anchor = vector3(this.options, 'anchor');
|
|
14
|
+
extend({ Group });
|
|
15
|
+
// Reattach group created by this component to the parent's parent,
|
|
16
|
+
// so it becomes a sibling of its initial parent.
|
|
17
|
+
// We do that so the children have no impact on a bounding box of a parent.
|
|
18
|
+
afterNextRender(() => {
|
|
19
|
+
const bbAnchorLS = getLocalState(this.bbAnchorRef().nativeElement);
|
|
20
|
+
const bbAnchorParent = bbAnchorLS?.parent();
|
|
21
|
+
if (bbAnchorParent?.parent) {
|
|
22
|
+
this.parent.set(bbAnchorParent);
|
|
23
|
+
bbAnchorParent.parent.add(this.bbAnchorRef().nativeElement);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
injectBeforeRender(() => {
|
|
27
|
+
const parent = this.parent();
|
|
28
|
+
if (parent) {
|
|
29
|
+
boundingBox.setFromObject(parent);
|
|
30
|
+
boundingBox.getSize(boundingBoxSize);
|
|
31
|
+
const anchor = this.anchor();
|
|
32
|
+
const bbAnchor = this.bbAnchorRef().nativeElement;
|
|
33
|
+
bbAnchor.position.set(parent.position.x + (boundingBoxSize.x * anchor.x) / 2, parent.position.y + (boundingBoxSize.y * anchor.y) / 2, parent.position.z + (boundingBoxSize.z * anchor.z) / 2);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBBAnchor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsBBAnchor, isStandalone: true, selector: "ngts-bb-anchor", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "bbAnchorRef", first: true, predicate: ["bbAnchor"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
39
|
+
<ngt-group #bbAnchor [parameters]="parameters()">
|
|
40
|
+
<ng-content />
|
|
41
|
+
</ngt-group>
|
|
42
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBBAnchor, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
args: [{
|
|
47
|
+
selector: 'ngts-bb-anchor',
|
|
48
|
+
standalone: true,
|
|
49
|
+
template: `
|
|
50
|
+
<ngt-group #bbAnchor [parameters]="parameters()">
|
|
51
|
+
<ng-content />
|
|
52
|
+
</ngt-group>
|
|
53
|
+
`,
|
|
54
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
55
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
|
+
}]
|
|
57
|
+
}], ctorParameters: () => [] });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmItYW5jaG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9iYi1hbmNob3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULGVBQWUsRUFDZixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBWSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXZELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQWlCdEMsTUFBTSxPQUFPLFlBQVk7SUFTeEI7UUFSQSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBdUIsQ0FBQztRQUNoRCxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTVDLGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsVUFBVSxDQUFDLENBQUM7UUFFaEUsV0FBTSxHQUFHLE1BQU0sQ0FBa0IsSUFBSSxDQUFDLENBQUM7UUFDL0IsV0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBR2hELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEIsbUVBQW1FO1FBQ25FLGlEQUFpRDtRQUNqRCwyRUFBMkU7UUFDM0UsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sY0FBYyxHQUFHLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM1QyxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2hDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1osV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUVsRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3RELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUN0RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdEQsQ0FBQztZQUNILENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBeENXLFlBQVk7a0dBQVosWUFBWSw0VUFSZDs7OztFQUlUOzsyRkFJVyxZQUFZO2tCQVh4QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0R3JvdXAsIE5ndFZlY3RvcjMsIGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0QmVmb3JlUmVuZGVyLCBvbWl0LCB2ZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBCb3gzLCBHcm91cCwgT2JqZWN0M0QsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJveDMoKTtcbmNvbnN0IGJvdW5kaW5nQm94U2l6ZSA9IG5ldyBWZWN0b3IzKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0JCQW5jaG9yT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0R3JvdXA+IHtcblx0YW5jaG9yOiBOZ3RWZWN0b3IzO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWJiLWFuY2hvcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCAjYmJBbmNob3IgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQkJBbmNob3Ige1xuXHRvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8Tmd0c0JCQW5jaG9yT3B0aW9ucz4oKTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2FuY2hvciddKTtcblxuXHRiYkFuY2hvclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2JiQW5jaG9yJyk7XG5cblx0cGFyZW50ID0gc2lnbmFsPE9iamVjdDNEIHwgbnVsbD4obnVsbCk7XG5cdHByaXZhdGUgYW5jaG9yID0gdmVjdG9yMyh0aGlzLm9wdGlvbnMsICdhbmNob3InKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91cCB9KTtcblxuXHRcdC8vIFJlYXR0YWNoIGdyb3VwIGNyZWF0ZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gdGhlIHBhcmVudCdzIHBhcmVudCxcblx0XHQvLyBzbyBpdCBiZWNvbWVzIGEgc2libGluZyBvZiBpdHMgaW5pdGlhbCBwYXJlbnQuXG5cdFx0Ly8gV2UgZG8gdGhhdCBzbyB0aGUgY2hpbGRyZW4gaGF2ZSBubyBpbXBhY3Qgb24gYSBib3VuZGluZyBib3ggb2YgYSBwYXJlbnQuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IGJiQW5jaG9yTFMgPSBnZXRMb2NhbFN0YXRlKHRoaXMuYmJBbmNob3JSZWYoKS5uYXRpdmVFbGVtZW50KTtcblx0XHRcdGNvbnN0IGJiQW5jaG9yUGFyZW50ID0gYmJBbmNob3JMUz8ucGFyZW50KCk7XG5cdFx0XHRpZiAoYmJBbmNob3JQYXJlbnQ/LnBhcmVudCkge1xuXHRcdFx0XHR0aGlzLnBhcmVudC5zZXQoYmJBbmNob3JQYXJlbnQpO1xuXHRcdFx0XHRiYkFuY2hvclBhcmVudC5wYXJlbnQuYWRkKHRoaXMuYmJBbmNob3JSZWYoKS5uYXRpdmVFbGVtZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xuXHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRib3VuZGluZ0JveC5zZXRGcm9tT2JqZWN0KHBhcmVudCk7XG5cdFx0XHRcdGJvdW5kaW5nQm94LmdldFNpemUoYm91bmRpbmdCb3hTaXplKTtcblxuXHRcdFx0XHRjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcigpO1xuXHRcdFx0XHRjb25zdCBiYkFuY2hvciA9IHRoaXMuYmJBbmNob3JSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHRcdGJiQW5jaG9yLnBvc2l0aW9uLnNldChcblx0XHRcdFx0XHRwYXJlbnQucG9zaXRpb24ueCArIChib3VuZGluZ0JveFNpemUueCAqIGFuY2hvci54KSAvIDIsXG5cdFx0XHRcdFx0cGFyZW50LnBvc2l0aW9uLnkgKyAoYm91bmRpbmdCb3hTaXplLnkgKiBhbmNob3IueSkgLyAyLFxuXHRcdFx0XHRcdHBhcmVudC5wb3NpdGlvbi56ICsgKGJvdW5kaW5nQm94U2l6ZS56ICogYW5jaG9yLnopIC8gMixcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19
|