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,70 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input, viewChild, } from '@angular/core';
|
|
2
|
+
import { extend, injectBeforeRender, omit } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { Group, MathUtils } from 'three';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
enabled: true,
|
|
8
|
+
speed: 1,
|
|
9
|
+
rotationIntensity: 1,
|
|
10
|
+
floatIntensity: 1,
|
|
11
|
+
floatingRange: [-0.1, 0.1],
|
|
12
|
+
autoInvalidate: false,
|
|
13
|
+
};
|
|
14
|
+
export class NgtsFloat {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
17
|
+
this.parameters = omit(this.options, [
|
|
18
|
+
'enabled',
|
|
19
|
+
'speed',
|
|
20
|
+
'rotationIntensity',
|
|
21
|
+
'floatIntensity',
|
|
22
|
+
'floatingRange',
|
|
23
|
+
'autoInvalidate',
|
|
24
|
+
]);
|
|
25
|
+
this.floatRef = viewChild.required('float');
|
|
26
|
+
extend({ Group });
|
|
27
|
+
const offset = Math.random() * 10000;
|
|
28
|
+
injectBeforeRender(({ clock, invalidate }) => {
|
|
29
|
+
const [{ enabled, speed, rotationIntensity, floatingRange, floatIntensity, autoInvalidate }] = [this.options()];
|
|
30
|
+
if (!enabled || speed === 0)
|
|
31
|
+
return;
|
|
32
|
+
if (autoInvalidate)
|
|
33
|
+
invalidate();
|
|
34
|
+
const container = this.floatRef().nativeElement;
|
|
35
|
+
const offsetTime = offset + clock.getElapsedTime();
|
|
36
|
+
container.rotation.x = (Math.cos((offsetTime / 4) * speed) / 8) * rotationIntensity;
|
|
37
|
+
container.rotation.y = (Math.sin((offsetTime / 4) * speed) / 8) * rotationIntensity;
|
|
38
|
+
container.rotation.z = (Math.sin((offsetTime / 4) * speed) / 20) * rotationIntensity;
|
|
39
|
+
let yPosition = Math.sin((offsetTime / 4) * speed) / 10;
|
|
40
|
+
yPosition = MathUtils.mapLinear(yPosition, -0.1, 0.1, floatingRange[0] ?? -0.1, floatingRange[1] ?? 0.1);
|
|
41
|
+
container.position.y = yPosition * floatIntensity;
|
|
42
|
+
container.updateMatrix();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsFloat, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsFloat, isStandalone: true, selector: "ngts-float", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "floatRef", first: true, predicate: ["float"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
47
|
+
<ngt-group [parameters]="parameters()">
|
|
48
|
+
<ngt-group #float [matrixAutoUpdate]="false">
|
|
49
|
+
<ng-content />
|
|
50
|
+
</ngt-group>
|
|
51
|
+
</ngt-group>
|
|
52
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsFloat, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{
|
|
57
|
+
selector: 'ngts-float',
|
|
58
|
+
standalone: true,
|
|
59
|
+
template: `
|
|
60
|
+
<ngt-group [parameters]="parameters()">
|
|
61
|
+
<ngt-group #float [matrixAutoUpdate]="false">
|
|
62
|
+
<ng-content />
|
|
63
|
+
</ngt-group>
|
|
64
|
+
</ngt-group>
|
|
65
|
+
`,
|
|
66
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
67
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: () => [] });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2Zsb2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFXekMsTUFBTSxjQUFjLEdBQXFCO0lBQ3hDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLENBQUM7SUFDUixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGNBQWMsRUFBRSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMxQixjQUFjLEVBQUUsS0FBSztDQUNyQixDQUFDO0FBZUYsTUFBTSxPQUFPLFNBQVM7SUFhckI7UUFaQSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixTQUFTO1lBQ1QsT0FBTztZQUNQLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGdCQUFnQjtTQUNoQixDQUFDLENBQUM7UUFFSCxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFHekQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2hILElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUVwQyxJQUFJLGNBQWM7Z0JBQUUsVUFBVSxFQUFFLENBQUM7WUFFakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUVoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztZQUNwRixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDcEYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBRXJGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hELFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN6RyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsY0FBYyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBbkNXLFNBQVM7a0dBQVQsU0FBUyxtVUFWWDs7Ozs7O0VBTVQ7OzJGQUlXLFNBQVM7a0JBYnJCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7OztFQU1UO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEdyb3VwLCBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgb21pdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAsIE1hdGhVdGlscyB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzRmxvYXRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRzcGVlZDogbnVtYmVyO1xuXHRyb3RhdGlvbkludGVuc2l0eTogbnVtYmVyO1xuXHRmbG9hdEludGVuc2l0eTogbnVtYmVyO1xuXHRmbG9hdGluZ1JhbmdlOiBbbnVtYmVyPywgbnVtYmVyP107XG5cdGF1dG9JbnZhbGlkYXRlOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0Zsb2F0T3B0aW9ucyA9IHtcblx0ZW5hYmxlZDogdHJ1ZSxcblx0c3BlZWQ6IDEsXG5cdHJvdGF0aW9uSW50ZW5zaXR5OiAxLFxuXHRmbG9hdEludGVuc2l0eTogMSxcblx0ZmxvYXRpbmdSYW5nZTogWy0wLjEsIDAuMV0sXG5cdGF1dG9JbnZhbGlkYXRlOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZmxvYXQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmd0LWdyb3VwICNmbG9hdCBbbWF0cml4QXV0b1VwZGF0ZV09XCJmYWxzZVwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNGbG9hdCB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J2VuYWJsZWQnLFxuXHRcdCdzcGVlZCcsXG5cdFx0J3JvdGF0aW9uSW50ZW5zaXR5Jyxcblx0XHQnZmxvYXRJbnRlbnNpdHknLFxuXHRcdCdmbG9hdGluZ1JhbmdlJyxcblx0XHQnYXV0b0ludmFsaWRhdGUnLFxuXHRdKTtcblxuXHRmbG9hdFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2Zsb2F0Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBvZmZzZXQgPSBNYXRoLnJhbmRvbSgpICogMTAwMDA7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNsb2NrLCBpbnZhbGlkYXRlIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IGVuYWJsZWQsIHNwZWVkLCByb3RhdGlvbkludGVuc2l0eSwgZmxvYXRpbmdSYW5nZSwgZmxvYXRJbnRlbnNpdHksIGF1dG9JbnZhbGlkYXRlIH1dID0gW3RoaXMub3B0aW9ucygpXTtcblx0XHRcdGlmICghZW5hYmxlZCB8fCBzcGVlZCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoYXV0b0ludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcblxuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5mbG9hdFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGNvbnN0IG9mZnNldFRpbWUgPSBvZmZzZXQgKyBjbG9jay5nZXRFbGFwc2VkVGltZSgpO1xuXHRcdFx0Y29udGFpbmVyLnJvdGF0aW9uLnggPSAoTWF0aC5jb3MoKG9mZnNldFRpbWUgLyA0KSAqIHNwZWVkKSAvIDgpICogcm90YXRpb25JbnRlbnNpdHk7XG5cdFx0XHRjb250YWluZXIucm90YXRpb24ueSA9IChNYXRoLnNpbigob2Zmc2V0VGltZSAvIDQpICogc3BlZWQpIC8gOCkgKiByb3RhdGlvbkludGVuc2l0eTtcblx0XHRcdGNvbnRhaW5lci5yb3RhdGlvbi56ID0gKE1hdGguc2luKChvZmZzZXRUaW1lIC8gNCkgKiBzcGVlZCkgLyAyMCkgKiByb3RhdGlvbkludGVuc2l0eTtcblxuXHRcdFx0bGV0IHlQb3NpdGlvbiA9IE1hdGguc2luKChvZmZzZXRUaW1lIC8gNCkgKiBzcGVlZCkgLyAxMDtcblx0XHRcdHlQb3NpdGlvbiA9IE1hdGhVdGlscy5tYXBMaW5lYXIoeVBvc2l0aW9uLCAtMC4xLCAwLjEsIGZsb2F0aW5nUmFuZ2VbMF0gPz8gLTAuMSwgZmxvYXRpbmdSYW5nZVsxXSA/PyAwLjEpO1xuXHRcdFx0Y29udGFpbmVyLnBvc2l0aW9uLnkgPSB5UG9zaXRpb24gKiBmbG9hdEludGVuc2l0eTtcblx0XHRcdGNvbnRhaW5lci51cGRhdGVNYXRyaXgoKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
|
|
2
|
+
import { applyProps, extend, NgtArgs, omit, pick, vector3 } from 'angular-three';
|
|
3
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
+
import { DoubleSide, Mesh, MeshBasicMaterial, PlaneGeometry, RingGeometry } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
toneMapped: false,
|
|
9
|
+
color: 'white',
|
|
10
|
+
form: 'rect',
|
|
11
|
+
scale: 1,
|
|
12
|
+
intensity: 1,
|
|
13
|
+
};
|
|
14
|
+
export class NgtsLightformer {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.side = DoubleSide;
|
|
17
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
+
this.parameters = omit(this.options, ['map', 'toneMapped', 'color', 'form', 'scale', 'intensity', 'target']);
|
|
19
|
+
this.intensity = pick(this.options, 'intensity');
|
|
20
|
+
this.color = pick(this.options, 'color');
|
|
21
|
+
this.target = vector3(this.options, 'target', true);
|
|
22
|
+
this.scale = pick(this.options, 'scale');
|
|
23
|
+
this.fixedScale = computed(() => {
|
|
24
|
+
const scale = this.scale();
|
|
25
|
+
return Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
|
|
26
|
+
});
|
|
27
|
+
this.form = pick(this.options, 'form');
|
|
28
|
+
this.toneMapped = pick(this.options, 'toneMapped');
|
|
29
|
+
this.map = pick(this.options, 'map');
|
|
30
|
+
this.meshRef = viewChild.required('mesh');
|
|
31
|
+
this.defaultMaterialRef = viewChild('defaultMaterial');
|
|
32
|
+
extend({ Mesh, MeshBasicMaterial, RingGeometry, PlaneGeometry });
|
|
33
|
+
const autoEffect = injectAutoEffect();
|
|
34
|
+
afterNextRender(() => {
|
|
35
|
+
autoEffect(() => {
|
|
36
|
+
const material = this.defaultMaterialRef()?.nativeElement;
|
|
37
|
+
if (material) {
|
|
38
|
+
applyProps(material, { color: this.color() });
|
|
39
|
+
material.color.multiplyScalar(this.intensity());
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
autoEffect(() => {
|
|
43
|
+
const target = this.target();
|
|
44
|
+
if (!target)
|
|
45
|
+
return;
|
|
46
|
+
const mesh = this.meshRef().nativeElement;
|
|
47
|
+
mesh.lookAt(target);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLightformer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsLightformer, isStandalone: true, selector: "ngts-lightformer", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }, { propertyName: "defaultMaterialRef", first: true, predicate: ["defaultMaterial"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
53
|
+
<ngt-mesh #mesh [scale]="fixedScale()" [parameters]="parameters()">
|
|
54
|
+
<ng-content select="[data-lightformer-geometry]">
|
|
55
|
+
@switch (form()) {
|
|
56
|
+
@case ('circle') {
|
|
57
|
+
<ngt-ring-geometry *args="[0, 1, 64]" />
|
|
58
|
+
}
|
|
59
|
+
@case ('ring') {
|
|
60
|
+
<ngt-ring-geometry *args="[0.5, 1, 64]" />
|
|
61
|
+
}
|
|
62
|
+
@case ('rect') {
|
|
63
|
+
<ngt-plane-geometry />
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</ng-content>
|
|
67
|
+
<ng-content select="[data-lightformer-material]">
|
|
68
|
+
<ngt-mesh-basic-material #defaultMaterial [toneMapped]="toneMapped()" [map]="map()" [side]="side" />
|
|
69
|
+
</ng-content>
|
|
70
|
+
|
|
71
|
+
<ng-content />
|
|
72
|
+
</ngt-mesh>
|
|
73
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
74
|
+
}
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLightformer, decorators: [{
|
|
76
|
+
type: Component,
|
|
77
|
+
args: [{
|
|
78
|
+
selector: 'ngts-lightformer',
|
|
79
|
+
standalone: true,
|
|
80
|
+
template: `
|
|
81
|
+
<ngt-mesh #mesh [scale]="fixedScale()" [parameters]="parameters()">
|
|
82
|
+
<ng-content select="[data-lightformer-geometry]">
|
|
83
|
+
@switch (form()) {
|
|
84
|
+
@case ('circle') {
|
|
85
|
+
<ngt-ring-geometry *args="[0, 1, 64]" />
|
|
86
|
+
}
|
|
87
|
+
@case ('ring') {
|
|
88
|
+
<ngt-ring-geometry *args="[0.5, 1, 64]" />
|
|
89
|
+
}
|
|
90
|
+
@case ('rect') {
|
|
91
|
+
<ngt-plane-geometry />
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
</ng-content>
|
|
95
|
+
<ng-content select="[data-lightformer-material]">
|
|
96
|
+
<ngt-mesh-basic-material #defaultMaterial [toneMapped]="toneMapped()" [map]="map()" [side]="side" />
|
|
97
|
+
</ng-content>
|
|
98
|
+
|
|
99
|
+
<ng-content />
|
|
100
|
+
</ngt-mesh>
|
|
101
|
+
`,
|
|
102
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
103
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
104
|
+
imports: [NgtArgs],
|
|
105
|
+
}]
|
|
106
|
+
}], ctorParameters: () => [] });
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2xpZ2h0Zm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUF1QixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBVyxNQUFNLE9BQU8sQ0FBQzs7QUFZbEcsTUFBTSxjQUFjLEdBQTZEO0lBQ2hGLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsQ0FBQztJQUNSLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQStCRixNQUFNLE9BQU8sZUFBZTtJQXFCM0I7UUFwQkEsU0FBSSxHQUFHLFVBQVUsQ0FBQztRQUVsQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxF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aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseVByb3BzLCBleHRlbmQsIE5ndEFyZ3MsIE5ndE1lc2gsIE5ndFZlY3RvcjMsIG9taXQsIHBpY2ssIHZlY3RvcjMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IERvdWJsZVNpZGUsIE1lc2gsIE1lc2hCYXNpY01hdGVyaWFsLCBQbGFuZUdlb21ldHJ5LCBSaW5nR2VvbWV0cnksIFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0xpZ2h0Zm9ybWVyT3B0aW9ucyB7XG5cdG1hcD86IFRleHR1cmU7XG5cdHRvbmVNYXBwZWQ6IGJvb2xlYW47XG5cdGNvbG9yOiBzdHJpbmc7XG5cdGZvcm06ICdjaXJjbGUnIHwgJ3JpbmcnIHwgJ3JlY3QnO1xuXHRzY2FsZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXTtcblx0aW50ZW5zaXR5OiBudW1iZXI7XG5cdHRhcmdldD86IE5ndFZlY3RvcjM7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBQYXJ0aWFsPE9taXQ8Tmd0TWVzaCwgJ3NjYWxlJz4+ICYgTmd0c0xpZ2h0Zm9ybWVyT3B0aW9ucyA9IHtcblx0dG9uZU1hcHBlZDogZmFsc2UsXG5cdGNvbG9yOiAnd2hpdGUnLFxuXHRmb3JtOiAncmVjdCcsXG5cdHNjYWxlOiAxLFxuXHRpbnRlbnNpdHk6IDEsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWxpZ2h0Zm9ybWVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW3NjYWxlXT1cImZpeGVkU2NhbGUoKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RhdGEtbGlnaHRmb3JtZXItZ2VvbWV0cnldXCI+XG5cdFx0XHRcdEBzd2l0Y2ggKGZvcm0oKSkge1xuXHRcdFx0XHRcdEBjYXNlICgnY2lyY2xlJykge1xuXHRcdFx0XHRcdFx0PG5ndC1yaW5nLWdlb21ldHJ5ICphcmdzPVwiWzAsIDEsIDY0XVwiIC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBjYXNlICgncmluZycpIHtcblx0XHRcdFx0XHRcdDxuZ3QtcmluZy1nZW9tZXRyeSAqYXJncz1cIlswLjUsIDEsIDY0XVwiIC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBjYXNlICgncmVjdCcpIHtcblx0XHRcdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdDwvbmctY29udGVudD5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIltkYXRhLWxpZ2h0Zm9ybWVyLW1hdGVyaWFsXVwiPlxuXHRcdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWwgI2RlZmF1bHRNYXRlcmlhbCBbdG9uZU1hcHBlZF09XCJ0b25lTWFwcGVkKClcIiBbbWFwXT1cIm1hcCgpXCIgW3NpZGVdPVwic2lkZVwiIC8+XG5cdFx0XHQ8L25nLWNvbnRlbnQ+XG5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGlnaHRmb3JtZXIge1xuXHRzaWRlID0gRG91YmxlU2lkZTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydtYXAnLCAndG9uZU1hcHBlZCcsICdjb2xvcicsICdmb3JtJywgJ3NjYWxlJywgJ2ludGVuc2l0eScsICd0YXJnZXQnXSk7XG5cblx0cHJpdmF0ZSBpbnRlbnNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ludGVuc2l0eScpO1xuXHRwcml2YXRlIGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRwcml2YXRlIHRhcmdldCA9IHZlY3RvcjModGhpcy5vcHRpb25zLCAndGFyZ2V0JywgdHJ1ZSk7XG5cdHByaXZhdGUgc2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdGZpeGVkU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlKCk7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoc2NhbGUpICYmIHNjYWxlLmxlbmd0aCA9PT0gMiA/IFtzY2FsZVswXSwgc2NhbGVbMV0sIDFdIDogc2NhbGU7XG5cdH0pO1xuXHRmb3JtID0gcGljayh0aGlzLm9wdGlvbnMsICdmb3JtJyk7XG5cdHRvbmVNYXBwZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3RvbmVNYXBwZWQnKTtcblx0bWFwID0gcGljayh0aGlzLm9wdGlvbnMsICdtYXAnKTtcblxuXHRtZXNoUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cdGRlZmF1bHRNYXRlcmlhbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPE1lc2hCYXNpY01hdGVyaWFsPj4oJ2RlZmF1bHRNYXRlcmlhbCcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2gsIE1lc2hCYXNpY01hdGVyaWFsLCBSaW5nR2VvbWV0cnksIFBsYW5lR2VvbWV0cnkgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMuZGVmYXVsdE1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmIChtYXRlcmlhbCkge1xuXHRcdFx0XHRcdGFwcGx5UHJvcHMobWF0ZXJpYWwsIHsgY29sb3I6IHRoaXMuY29sb3IoKSB9KTtcblx0XHRcdFx0XHRtYXRlcmlhbC5jb2xvci5tdWx0aXBseVNjYWxhcih0aGlzLmludGVuc2l0eSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdFx0XHRpZiAoIXRhcmdldCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBtZXNoID0gdGhpcy5tZXNoUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0bWVzaC5sb29rQXQodGFyZ2V0KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { DestroyRef, Directive, Injector, TemplateRef, ViewContainerRef, afterNextRender, computed, inject, input, output, signal, untracked, } from '@angular/core';
|
|
2
|
+
import { injectTexture } from 'angular-three-soba/loaders';
|
|
3
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
function getFormatString(format) {
|
|
6
|
+
switch (format) {
|
|
7
|
+
case 64:
|
|
8
|
+
return '-64px';
|
|
9
|
+
case 128:
|
|
10
|
+
return '-128px';
|
|
11
|
+
case 256:
|
|
12
|
+
return '-256px';
|
|
13
|
+
case 512:
|
|
14
|
+
return '-512px';
|
|
15
|
+
default:
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';
|
|
20
|
+
const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';
|
|
21
|
+
export function injectMatcapTexture(id = () => 0, { format = () => 1024, onLoad, injector, } = {}) {
|
|
22
|
+
return assertInjector(injectMatcapTexture, injector, () => {
|
|
23
|
+
const matcapList = signal({});
|
|
24
|
+
fetch(LIST_URL)
|
|
25
|
+
.then((res) => res.json())
|
|
26
|
+
.then((list) => {
|
|
27
|
+
matcapList.set(list);
|
|
28
|
+
});
|
|
29
|
+
const DEFAULT_MATCAP = computed(() => matcapList()[0]);
|
|
30
|
+
const numTot = computed(() => Object.keys(matcapList()).length);
|
|
31
|
+
const fileHash = computed(() => {
|
|
32
|
+
const idValue = id();
|
|
33
|
+
if (typeof idValue === 'string') {
|
|
34
|
+
return idValue;
|
|
35
|
+
}
|
|
36
|
+
if (typeof idValue === 'number') {
|
|
37
|
+
return matcapList()[idValue];
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
});
|
|
41
|
+
const fileName = computed(() => `${fileHash() || DEFAULT_MATCAP()}${getFormatString(format())}.png`);
|
|
42
|
+
const url = computed(() => `${MATCAP_ROOT}/${format()}/${fileName()}`);
|
|
43
|
+
const matcapTexture = injectTexture(url, { onLoad });
|
|
44
|
+
return { url, texture: matcapTexture, numTot };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export class NgtsMatcapTexture {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.matcapTexture = input();
|
|
50
|
+
this.matcapTextureLoaded = output();
|
|
51
|
+
this.injector = inject(Injector);
|
|
52
|
+
this.template = inject(TemplateRef);
|
|
53
|
+
this.vcr = inject(ViewContainerRef);
|
|
54
|
+
this.id = computed(() => this.matcapTexture()?.id ?? 0);
|
|
55
|
+
this.format = computed(() => this.matcapTexture()?.format ?? 1024);
|
|
56
|
+
afterNextRender(() => {
|
|
57
|
+
const { texture } = injectMatcapTexture(this.id, {
|
|
58
|
+
format: this.format,
|
|
59
|
+
onLoad: this.matcapTextureLoaded.emit.bind(this.matcapTextureLoaded),
|
|
60
|
+
injector: this.injector,
|
|
61
|
+
});
|
|
62
|
+
untracked(() => {
|
|
63
|
+
this.ref = this.vcr.createEmbeddedView(this.template, { $implicit: texture });
|
|
64
|
+
this.ref.detectChanges();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
inject(DestroyRef).onDestroy(() => {
|
|
68
|
+
this.ref?.destroy();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsMatcapTexture, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
75
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgtsMatcapTexture, isStandalone: true, selector: "ng-template[matcapTexture]", inputs: { matcapTexture: { classPropertyName: "matcapTexture", publicName: "matcapTexture", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { matcapTextureLoaded: "matcapTextureLoaded" }, ngImport: i0 }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsMatcapTexture, decorators: [{
|
|
78
|
+
type: Directive,
|
|
79
|
+
args: [{ selector: 'ng-template[matcapTexture]', standalone: true }]
|
|
80
|
+
}], ctorParameters: () => [] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2FwLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL21hdGNhcC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUVULFFBQVEsRUFFUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUc1RCxTQUFTLGVBQWUsQ0FBQyxNQUFjO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDaEIsS0FBSyxFQUFFO1lBQ04sT0FBTyxPQUFPLENBQUM7UUFDaEIsS0FBSyxHQUFHO1lBQ1AsT0FBTyxRQUFRLENBQUM7UUFDakIsS0FBSyxHQUFHO1lBQ1AsT0FBTyxRQUFRLENBQUM7UUFDakIsS0FBSyxHQUFHO1lBQ1AsT0FBTyxRQUFRLENBQUM7UUFDakI7WUFDQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7QUFDRixDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQUcsb0VBQW9FLENBQUM7QUFDdEYsTUFBTSxXQUFXLEdBQUcsd0ZBQXdGLENBQUM7QUFFN0csTUFBTSxVQUFVLG1CQUFtQixDQUNsQyxLQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ25DLEVBQ0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDbkIsTUFBTSxFQUNOLFFBQVEsTUFDa0YsRUFBRTtJQUU3RixPQUFPLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sVUFBVSxH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Q0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBb0IsRUFBRSxHQUFZO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQzs4R0FsQ1csaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0b3V0cHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RUZXh0dXJlIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL2xvYWRlcnMnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBUZXh0dXJlIH0gZnJvbSAndGhyZWUnO1xuXG5mdW5jdGlvbiBnZXRGb3JtYXRTdHJpbmcoZm9ybWF0OiBudW1iZXIpIHtcblx0c3dpdGNoIChmb3JtYXQpIHtcblx0XHRjYXNlIDY0OlxuXHRcdFx0cmV0dXJuICctNjRweCc7XG5cdFx0Y2FzZSAxMjg6XG5cdFx0XHRyZXR1cm4gJy0xMjhweCc7XG5cdFx0Y2FzZSAyNTY6XG5cdFx0XHRyZXR1cm4gJy0yNTZweCc7XG5cdFx0Y2FzZSA1MTI6XG5cdFx0XHRyZXR1cm4gJy01MTJweCc7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAnJztcblx0fVxufVxuXG5jb25zdCBMSVNUX1VSTCA9ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvcG1uZHJzL2RyZWktYXNzZXRzQG1hc3Rlci9tYXRjYXBzLmpzb24nO1xuY29uc3QgTUFUQ0FQX1JPT1QgPSAnaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vZW1tZWxsZXBwaS9tYXRjYXBzLzliMzZjY2FhZjBhMjQ4ODFhMzkwNjJkMDU1NjZjOWU5MmJlNGFhMGQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TWF0Y2FwVGV4dHVyZShcblx0aWQ6ICgpID0+IG51bWJlciB8IHN0cmluZyA9ICgpID0+IDAsXG5cdHtcblx0XHRmb3JtYXQgPSAoKSA9PiAxMDI0LFxuXHRcdG9uTG9hZCxcblx0XHRpbmplY3Rvcixcblx0fTogeyBmb3JtYXQ/OiAoKSA9PiBudW1iZXI7IG9uTG9hZD86ICh0ZXh0dXJlOiBUZXh0dXJlW10pID0+IHZvaWQ7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RNYXRjYXBUZXh0dXJlLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IG1hdGNhcExpc3QgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG5cdFx0ZmV0Y2goTElTVF9VUkwpXG5cdFx0XHQudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuXHRcdFx0LnRoZW4oKGxpc3QpID0+IHtcblx0XHRcdFx0bWF0Y2FwTGlzdC5zZXQobGlzdCk7XG5cdFx0XHR9KTtcblxuXHRcdGNvbnN0IERFRkFVTFRfTUFUQ0FQID0gY29tcHV0ZWQoKCkgPT4gbWF0Y2FwTGlzdCgpWzBdKTtcblx0XHRjb25zdCBudW1Ub3QgPSBjb21wdXRlZCgoKSA9PiBPYmplY3Qua2V5cyhtYXRjYXBMaXN0KCkpLmxlbmd0aCk7XG5cblx0XHRjb25zdCBmaWxlSGFzaCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlkVmFsdWUgPSBpZCgpO1xuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gaWRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRyZXR1cm4gbWF0Y2FwTGlzdCgpW2lkVmFsdWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGZpbGVOYW1lID0gY29tcHV0ZWQoKCkgPT4gYCR7ZmlsZUhhc2goKSB8fCBERUZBVUxUX01BVENBUCgpfSR7Z2V0Rm9ybWF0U3RyaW5nKGZvcm1hdCgpKX0ucG5nYCk7XG5cdFx0Y29uc3QgdXJsID0gY29tcHV0ZWQoKCkgPT4gYCR7TUFUQ0FQX1JPT1R9LyR7Zm9ybWF0KCl9LyR7ZmlsZU5hbWUoKX1gKTtcblxuXHRcdGNvbnN0IG1hdGNhcFRleHR1cmUgPSBpbmplY3RUZXh0dXJlKHVybCwgeyBvbkxvYWQgfSk7XG5cblx0XHRyZXR1cm4geyB1cmwsIHRleHR1cmU6IG1hdGNhcFRleHR1cmUsIG51bVRvdCB9O1xuXHR9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWF0Y2FwVGV4dHVyZU9wdGlvbnMge1xuXHRpZD86IG51bWJlciB8IHN0cmluZztcblx0Zm9ybWF0PzogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVttYXRjYXBUZXh0dXJlXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWF0Y2FwVGV4dHVyZSB7XG5cdG1hdGNhcFRleHR1cmUgPSBpbnB1dDxOZ3RzTWF0Y2FwVGV4dHVyZU9wdGlvbnM+KCk7XG5cdG1hdGNhcFRleHR1cmVMb2FkZWQgPSBvdXRwdXQ8VGV4dHVyZVtdPigpO1xuXG5cdHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXHRwcml2YXRlIHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcblx0cHJpdmF0ZSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cblx0cHJpdmF0ZSBpZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWF0Y2FwVGV4dHVyZSgpPy5pZCA/PyAwKTtcblx0cHJpdmF0ZSBmb3JtYXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1hdGNhcFRleHR1cmUoKT8uZm9ybWF0ID8/IDEwMjQpO1xuXG5cdHByaXZhdGUgcmVmPzogRW1iZWRkZWRWaWV3UmVmPHsgJGltcGxpY2l0OiBTaWduYWw8VGV4dHVyZSB8IG51bGw+IH0+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCB7IHRleHR1cmUgfSA9IGluamVjdE1hdGNhcFRleHR1cmUodGhpcy5pZCwge1xuXHRcdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuXHRcdFx0XHRvbkxvYWQ6IHRoaXMubWF0Y2FwVGV4dHVyZUxvYWRlZC5lbWl0LmJpbmQodGhpcy5tYXRjYXBUZXh0dXJlTG9hZGVkKSxcblx0XHRcdFx0aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG5cdFx0XHR9KTtcblxuXHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWYgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwgeyAkaW1wbGljaXQ6IHRleHR1cmUgfSk7XG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlZj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXzogTmd0c01hdGNhcFRleHR1cmUsIGN0eDogdW5rbm93bik6IGN0eCBpcyB7ICRpbXBsaWNpdDogU2lnbmFsPFRleHR1cmUgfCBudWxsPiB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { DestroyRef, Directive, Injector, TemplateRef, ViewContainerRef, afterNextRender, computed, effect, inject, input, output, signal, untracked, } from '@angular/core';
|
|
2
|
+
import { injectTexture } from 'angular-three-soba/loaders';
|
|
3
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
4
|
+
import { RepeatWrapping, Vector2 } from 'three';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';
|
|
7
|
+
const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';
|
|
8
|
+
export function injectNormalTexture(id = () => 0, { settings = () => ({}), onLoad, injector, }) {
|
|
9
|
+
return assertInjector(injectNormalTexture, injector, () => {
|
|
10
|
+
const normalList = signal({});
|
|
11
|
+
fetch(LIST_URL)
|
|
12
|
+
.then((res) => res.json())
|
|
13
|
+
.then((list) => {
|
|
14
|
+
normalList.set(list);
|
|
15
|
+
});
|
|
16
|
+
const DEFAULT_NORMAL = computed(() => normalList()[0]);
|
|
17
|
+
const numTot = computed(() => Object.keys(normalList()).length);
|
|
18
|
+
const fileHash = computed(() => {
|
|
19
|
+
const idValue = id();
|
|
20
|
+
if (typeof idValue === 'string') {
|
|
21
|
+
return idValue;
|
|
22
|
+
}
|
|
23
|
+
if (typeof idValue === 'number') {
|
|
24
|
+
return normalList()[idValue];
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
});
|
|
28
|
+
const imageName = computed(() => fileHash() || DEFAULT_NORMAL());
|
|
29
|
+
const url = computed(() => `${NORMAL_ROOT}/normals/${imageName()}`);
|
|
30
|
+
const normalTexture = injectTexture(url, { onLoad });
|
|
31
|
+
effect(() => {
|
|
32
|
+
const texture = normalTexture();
|
|
33
|
+
if (!texture)
|
|
34
|
+
return;
|
|
35
|
+
const { anisotropy = 1, repeat = [1, 1], offset = [0, 0] } = settings();
|
|
36
|
+
texture.wrapS = texture.wrapT = RepeatWrapping;
|
|
37
|
+
texture.repeat = new Vector2(repeat[0], repeat[1]);
|
|
38
|
+
texture.offset = new Vector2(offset[0], offset[1]);
|
|
39
|
+
texture.anisotropy = anisotropy;
|
|
40
|
+
});
|
|
41
|
+
return { url, texture: normalTexture, numTot };
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export class NgtsNormalTexture {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.normalTexture = input();
|
|
47
|
+
this.normalTextureLoaded = output();
|
|
48
|
+
this.injector = inject(Injector);
|
|
49
|
+
this.template = inject(TemplateRef);
|
|
50
|
+
this.vcr = inject(ViewContainerRef);
|
|
51
|
+
this.id = computed(() => this.normalTexture()?.id ?? 0);
|
|
52
|
+
this.settings = computed(() => {
|
|
53
|
+
const { id: _, ...settings } = this.normalTexture() || {};
|
|
54
|
+
return settings;
|
|
55
|
+
});
|
|
56
|
+
afterNextRender(() => {
|
|
57
|
+
const { texture } = injectNormalTexture(this.id, {
|
|
58
|
+
settings: this.settings,
|
|
59
|
+
onLoad: this.normalTextureLoaded.emit.bind(this.normalTextureLoaded),
|
|
60
|
+
injector: this.injector,
|
|
61
|
+
});
|
|
62
|
+
untracked(() => {
|
|
63
|
+
this.ref = this.vcr.createEmbeddedView(this.template, { $implicit: texture });
|
|
64
|
+
this.ref.detectChanges();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
inject(DestroyRef).onDestroy(() => {
|
|
68
|
+
this.ref?.destroy();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsNormalTexture, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
75
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgtsNormalTexture, isStandalone: true, selector: "ng-template[normalTexture]", inputs: { normalTexture: { classPropertyName: "normalTexture", publicName: "normalTexture", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { normalTextureLoaded: "normalTextureLoaded" }, ngImport: i0 }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsNormalTexture, decorators: [{
|
|
78
|
+
type: Directive,
|
|
79
|
+
args: [{ selector: 'ng-template[normalTexture]', standalone: true }]
|
|
80
|
+
}], ctorParameters: () => [] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL25vcm1hbC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUVULFFBQVEsRUFFUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFXLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFekQsTUFBTSxXQUFXLEdBQUcsd0ZBQXdGLENBQUM7QUFDN0csTUFBTSxRQUFRLEdBQUcsNEVBQTRFLENBQUM7QUFROUYsTUFBTSxVQUFVLG1CQUFtQixDQUNsQyxLQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ25DLEVBQ0MsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ3JCLE1BQU0sRUFDTixRQUFRLEdBQ29HO0lBRTdHLE9BQU8sY0FBYyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUF5QixFQUFFLENBQUMsQ0FBQztRQUV0RCxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZCxVQUFVLENBQUMsR0FB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QztZQUMxRCxPQUFPLFFBQVEsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUtGLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDcEUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3ZCLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBb0IsRUFBRSxHQUFZO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQzs4R0FyQ1csaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdFRleHR1cmUgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbG9hZGVycyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IFJlcGVhdFdyYXBwaW5nLCBUZXh0dXJlLCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xuXG5jb25zdCBOT1JNQUxfUk9PVCA9ICdodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9wbW5kcnMvZHJlaS1hc3NldHMvN2EzMTA0OTk3ZTE1NzZmODM0NzI4Mjk4MTViMDA4ODBkODhiMzJmYic7XG5jb25zdCBMSVNUX1VSTCA9ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvcG1uZHJzL2RyZWktYXNzZXRzQG1hc3Rlci9ub3JtYWxzL25vcm1hbHMuanNvbic7XG5cbmludGVyZmFjZSBOZ3RzTm9ybWFsVGV4dHVyZVNldHRpbmdzIHtcblx0cmVwZWF0PzogbnVtYmVyW107XG5cdGFuaXNvdHJvcHk/OiBudW1iZXI7XG5cdG9mZnNldD86IG51bWJlcltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tm9ybWFsVGV4dHVyZShcblx0aWQ6ICgpID0+IHN0cmluZyB8IG51bWJlciA9ICgpID0+IDAsXG5cdHtcblx0XHRzZXR0aW5ncyA9ICgpID0+ICh7fSksXG5cdFx0b25Mb2FkLFxuXHRcdGluamVjdG9yLFxuXHR9OiB7IHNldHRpbmdzPzogKCkgPT4gTmd0c05vcm1hbFRleHR1cmVTZXR0aW5nczsgb25Mb2FkPzogKHRleHR1cmU6IFRleHR1cmVbXSkgPT4gdm9pZDsgaW5qZWN0b3I/OiBJbmplY3RvciB9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3ROb3JtYWxUZXh0dXJlLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IG5vcm1hbExpc3QgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG5cdFx0ZmV0Y2goTElTVF9VUkwpXG5cdFx0XHQudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuXHRcdFx0LnRoZW4oKGxpc3QpID0+IHtcblx0XHRcdFx0bm9ybWFsTGlzdC5zZXQobGlzdCk7XG5cdFx0XHR9KTtcblxuXHRcdGNvbnN0IERFRkFVTFRfTk9STUFMID0gY29tcHV0ZWQoKCkgPT4gbm9ybWFsTGlzdCgpWzBdKTtcblx0XHRjb25zdCBudW1Ub3QgPSBjb21wdXRlZCgoKSA9PiBPYmplY3Qua2V5cyhub3JtYWxMaXN0KCkpLmxlbmd0aCk7XG5cblx0XHRjb25zdCBmaWxlSGFzaCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlkVmFsdWUgPSBpZCgpO1xuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gaWRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRyZXR1cm4gbm9ybWFsTGlzdCgpW2lkVmFsdWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGltYWdlTmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVIYXNoKCkgfHwgREVGQVVMVF9OT1JNQUwoKSk7XG5cdFx0Y29uc3QgdXJsID0gY29tcHV0ZWQoKCkgPT4gYCR7Tk9STUFMX1JPT1R9L25vcm1hbHMvJHtpbWFnZU5hbWUoKX1gKTtcblxuXHRcdGNvbnN0IG5vcm1hbFRleHR1cmUgPSBpbmplY3RUZXh0dXJlKHVybCwgeyBvbkxvYWQgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dHVyZSA9IG5vcm1hbFRleHR1cmUoKTtcblx0XHRcdGlmICghdGV4dHVyZSkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCB7IGFuaXNvdHJvcHkgPSAxLCByZXBlYXQgPSBbMSwgMV0sIG9mZnNldCA9IFswLCAwXSB9ID0gc2V0dGluZ3MoKTtcblx0XHRcdHRleHR1cmUud3JhcFMgPSB0ZXh0dXJlLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7XG5cdFx0XHR0ZXh0dXJlLnJlcGVhdCA9IG5ldyBWZWN0b3IyKHJlcGVhdFswXSwgcmVwZWF0WzFdKTtcblx0XHRcdHRleHR1cmUub2Zmc2V0ID0gbmV3IFZlY3RvcjIob2Zmc2V0WzBdLCBvZmZzZXRbMV0pO1xuXHRcdFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gYW5pc290cm9weTtcblx0XHR9KTtcblxuXHRcdHJldHVybiB7IHVybCwgdGV4dHVyZTogbm9ybWFsVGV4dHVyZSwgbnVtVG90IH07XG5cdH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNOb3JtYWxUZXh0dXJlT3B0aW9ucyBleHRlbmRzIE5ndHNOb3JtYWxUZXh0dXJlU2V0dGluZ3Mge1xuXHRpZD86IG51bWJlciB8IHN0cmluZztcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbm9ybWFsVGV4dHVyZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c05vcm1hbFRleHR1cmUge1xuXHRub3JtYWxUZXh0dXJlID0gaW5wdXQ8Tmd0c05vcm1hbFRleHR1cmVPcHRpb25zPigpO1xuXHRub3JtYWxUZXh0dXJlTG9hZGVkID0gb3V0cHV0PFRleHR1cmVbXT4oKTtcblxuXHRwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG5cdHByaXZhdGUgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG5cdHByaXZhdGUgaWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vcm1hbFRleHR1cmUoKT8uaWQgPz8gMCk7XG5cdHByaXZhdGUgc2V0dGluZ3MgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgeyBpZDogXywgLi4uc2V0dGluZ3MgfSA9IHRoaXMubm9ybWFsVGV4dHVyZSgpIHx8IHt9O1xuXHRcdHJldHVybiBzZXR0aW5ncztcblx0fSk7XG5cblx0cHJpdmF0ZSByZWY/OiBFbWJlZGRlZFZpZXdSZWY8eyAkaW1wbGljaXQ6IFNpZ25hbDxUZXh0dXJlIHwgbnVsbD4gfT47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgdGV4dHVyZSB9ID0gaW5qZWN0Tm9ybWFsVGV4dHVyZSh0aGlzLmlkLCB7XG5cdFx0XHRcdHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxuXHRcdFx0XHRvbkxvYWQ6IHRoaXMubm9ybWFsVGV4dHVyZUxvYWRlZC5lbWl0LmJpbmQodGhpcy5ub3JtYWxUZXh0dXJlTG9hZGVkKSxcblx0XHRcdFx0aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG5cdFx0XHR9KTtcblxuXHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWYgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwgeyAkaW1wbGljaXQ6IHRleHR1cmUgfSk7XG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlZj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXzogTmd0c05vcm1hbFRleHR1cmUsIGN0eDogdW5rbm93bik6IGN0eCBpcyB7ICRpbXBsaWNpdDogU2lnbmFsPFRleHR1cmUgfCBudWxsPiB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, inject, input, viewChild, } from '@angular/core';
|
|
2
|
+
import { NgtArgs, extend, omit, pick } from 'angular-three';
|
|
3
|
+
import { getVersion } from 'angular-three-soba/misc';
|
|
4
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
5
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
6
|
+
import { DirectionalLight, Group, MathUtils, OrthographicCamera, Vector2, Vector3 } from 'three';
|
|
7
|
+
import { NgtsAccumulativeShadows } from './accumulative-shadows';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
const defaultOptions = {
|
|
10
|
+
castShadow: true,
|
|
11
|
+
bias: 0.001,
|
|
12
|
+
mapSize: 512,
|
|
13
|
+
size: 5,
|
|
14
|
+
near: 0.5,
|
|
15
|
+
far: 500,
|
|
16
|
+
frames: 1,
|
|
17
|
+
position: [0, 0, 0],
|
|
18
|
+
radius: 1,
|
|
19
|
+
amount: 8,
|
|
20
|
+
intensity: getVersion() >= 155 ? Math.PI : 1,
|
|
21
|
+
ambient: 0.5,
|
|
22
|
+
};
|
|
23
|
+
export class NgtsRandomizedLights {
|
|
24
|
+
constructor() {
|
|
25
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
26
|
+
this.parameters = omit(this.options, Object.keys(defaultOptions));
|
|
27
|
+
this.lightsRef = viewChild.required('lights');
|
|
28
|
+
this.accumulativeShadows = inject(NgtsAccumulativeShadows);
|
|
29
|
+
this.castShadow = pick(this.options, 'castShadow');
|
|
30
|
+
this.bias = pick(this.options, 'bias');
|
|
31
|
+
this.intensity = pick(this.options, 'intensity');
|
|
32
|
+
this.amount = pick(this.options, 'amount');
|
|
33
|
+
this.mapSize = pick(this.options, 'mapSize');
|
|
34
|
+
this.shadowMapSize = computed(() => [this.mapSize(), this.mapSize()]);
|
|
35
|
+
this.position = pick(this.options, 'position');
|
|
36
|
+
this.length = computed(() => new Vector3(...this.position()).length());
|
|
37
|
+
this.count = computed(() => Array.from({ length: this.amount() }, (_, index) => index));
|
|
38
|
+
this.size = pick(this.options, 'size');
|
|
39
|
+
this.near = pick(this.options, 'near');
|
|
40
|
+
this.far = pick(this.options, 'far');
|
|
41
|
+
this.cameraArgs = computed(() => [-this.size(), this.size(), this.size(), -this.size(), this.near(), this.far()]);
|
|
42
|
+
extend({ Group, DirectionalLight, OrthographicCamera, Vector2 });
|
|
43
|
+
const autoEffect = injectAutoEffect();
|
|
44
|
+
afterNextRender(() => {
|
|
45
|
+
autoEffect(() => {
|
|
46
|
+
const lights = this.lightsRef().nativeElement;
|
|
47
|
+
this.accumulativeShadows.lightsMap.set(lights.uuid, this.update.bind(this));
|
|
48
|
+
return () => this.accumulativeShadows.lightsMap.delete(lights.uuid);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
update() {
|
|
53
|
+
let light;
|
|
54
|
+
const lights = this.lightsRef().nativeElement;
|
|
55
|
+
if (lights) {
|
|
56
|
+
const [{ ambient, radius, position }, length] = [this.options(), this.length()];
|
|
57
|
+
for (let i = 0; i < lights.children.length; i++) {
|
|
58
|
+
light = lights.children[i];
|
|
59
|
+
if (Math.random() > ambient) {
|
|
60
|
+
light.position.set(position[0] + MathUtils.randFloatSpread(radius), position[1] + MathUtils.randFloatSpread(radius), position[2] + MathUtils.randFloatSpread(radius));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0;
|
|
64
|
+
const phi = 2 * Math.PI * Math.random();
|
|
65
|
+
light.position.set(Math.cos(lambda) * Math.cos(phi) * length, Math.abs(Math.cos(lambda) * Math.sin(phi) * length), Math.sin(lambda) * length);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRandomizedLights, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsRandomizedLights, isStandalone: true, selector: "ngts-randomized-lights", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lightsRef", first: true, predicate: ["lights"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
72
|
+
<ngt-group #lights [parameters]="parameters()">
|
|
73
|
+
@for (i of count(); track $index) {
|
|
74
|
+
<ngt-directional-light [castShadow]="castShadow()" [intensity]="intensity() / amount()">
|
|
75
|
+
<ngt-value [rawValue]="bias()" attach="shadow.bias" />
|
|
76
|
+
<ngt-vector2 *args="shadowMapSize()" attach="shadow.mapSize" />
|
|
77
|
+
<ngt-orthographic-camera *args="cameraArgs()" attach="shadow.camera" />
|
|
78
|
+
</ngt-directional-light>
|
|
79
|
+
}
|
|
80
|
+
</ngt-group>
|
|
81
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
82
|
+
}
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRandomizedLights, decorators: [{
|
|
84
|
+
type: Component,
|
|
85
|
+
args: [{
|
|
86
|
+
selector: 'ngts-randomized-lights',
|
|
87
|
+
standalone: true,
|
|
88
|
+
template: `
|
|
89
|
+
<ngt-group #lights [parameters]="parameters()">
|
|
90
|
+
@for (i of count(); track $index) {
|
|
91
|
+
<ngt-directional-light [castShadow]="castShadow()" [intensity]="intensity() / amount()">
|
|
92
|
+
<ngt-value [rawValue]="bias()" attach="shadow.bias" />
|
|
93
|
+
<ngt-vector2 *args="shadowMapSize()" attach="shadow.mapSize" />
|
|
94
|
+
<ngt-orthographic-camera *args="cameraArgs()" attach="shadow.camera" />
|
|
95
|
+
</ngt-directional-light>
|
|
96
|
+
}
|
|
97
|
+
</ngt-group>
|
|
98
|
+
`,
|
|
99
|
+
imports: [NgtArgs],
|
|
100
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
101
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
102
|
+
}]
|
|
103
|
+
}], ctorParameters: () => [] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9taXplZC1saWdodHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JhbmRvbWl6ZWQtbGlnaHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQVksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBWSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQThCakUsTUFBTSxjQUFjLEdBQWdDO0lBQ25ELFVBQVUsRUFBRSxJQUFJO0lBQ2hCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFLEdBQUc7SUFDWixJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixNQUFNLEVBQUUsQ0FBQztJQUNULFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sRUFBRSxDQUFDO0lBQ1QsTUFBTSxFQUFFLENBQUM7SUFDVCxTQUFTLEVBQUUsVUFBVSxFQUFF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O3FCQUFNLENBQUM7b0JBQ1AsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNoRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3hDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQzs4R0FqRVcsb0JBQW9CO2tHQUFwQixvQkFBb0IsaVZBZnRCOzs7Ozs7Ozs7O0VBVVQsNERBQ1MsT0FBTzs7MkZBSUwsb0JBQW9CO2tCQWxCaEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0VBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIE5ndEdyb3VwLCBleHRlbmQsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGdldFZlcnNpb24gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0LCBHcm91cCwgTWF0aFV0aWxzLCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgfSBmcm9tICcuL2FjY3VtdWxhdGl2ZS1zaGFkb3dzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEdyb3VwPiB7XG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgd2lsbCBqaWdnbGUgdGhlIGxpZ2h0cywgMS5cblx0ICogIEZyYW1lcyBpcyBjb250ZXh0IGF3YXJlLCBpZiBhIHByb3ZpZGVyIGxpa2UgQWNjdW11bGF0aXZlU2hhZG93cyBleGlzdHMsIGZyYW1lcyB3aWxsIGJlIHRha2VuIGZyb20gdGhlcmUhICAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIExpZ2h0IHBvc2l0aW9uLCBbMCwgMCwgMF0gKi9cblx0cG9zaXRpb246IFt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyXTtcblx0LyoqIFJhZGl1cyBvZiB0aGUgamlnZ2xlLCBoaWdoZXIgdmFsdWVzIG1ha2Ugc29mdGVyIGxpZ2h0LCA1ICovXG5cdHJhZGl1czogbnVtYmVyO1xuXHQvKiogQW1vdW50IG9mIGxpZ2h0cywgOCAqL1xuXHRhbW91bnQ6IG51bWJlcjtcblx0LyoqIExpZ2h0IGludGVuc2l0eSwgMSAqL1xuXHRpbnRlbnNpdHk6IG51bWJlcjtcblx0LyoqIEFtYmllbnQgb2NjbHVzaW9uLCBsb3dlciB2YWx1ZXMgbWVhbiBsZXNzIEFPLCBoaWdodCBtb3JlLCB5b3UgY2FuIG1peCBBTyBhbmQgZGlyZWN0aW9uYWwgbGlnaHQsIDAuNSAqL1xuXHRhbWJpZW50OiBudW1iZXI7XG5cdC8qKiBJZiB0aGUgbGlnaHRzIGNhc3Qgc2hhZG93cywgdGhpcyBpcyB0cnVlIGJ5IGRlZmF1bHQgKi9cblx0Y2FzdFNoYWRvdzogYm9vbGVhbjtcblx0LyoqIERlZmF1bHQgc2hhZG93IGJpYXMsIDAgKi9cblx0YmlhczogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBtYXAgc2l6ZSwgNTEyICovXG5cdG1hcFNpemU6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgc2l6ZSBvZiB0aGUgc2hhZG93IGNhbWVyYSwgMTAgKi9cblx0c2l6ZTogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBzaGFkb3cgY2FtZXJhIG5lYXIsIDAuNSAqL1xuXHRuZWFyOiBudW1iZXI7XG5cdC8qKiBEZWZhdWx0IHNoYWRvdyBjYW1lcmEgZmFyLCA1MDAgKi9cblx0ZmFyOiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnMgPSB7XG5cdGNhc3RTaGFkb3c6IHRydWUsXG5cdGJpYXM6IDAuMDAxLFxuXHRtYXBTaXplOiA1MTIsXG5cdHNpemU6IDUsXG5cdG5lYXI6IDAuNSxcblx0ZmFyOiA1MDAsXG5cdGZyYW1lczogMSxcblx0cG9zaXRpb246IFswLCAwLCAwXSxcblx0cmFkaXVzOiAxLFxuXHRhbW91bnQ6IDgsXG5cdGludGVuc2l0eTogZ2V0VmVyc2lvbigpID49IDE1NSA/IE1hdGguUEkgOiAxLFxuXHRhbWJpZW50OiAwLjUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNsaWdodHMgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHRAZm9yIChpIG9mIGNvdW50KCk7IHRyYWNrICRpbmRleCkge1xuXHRcdFx0XHQ8bmd0LWRpcmVjdGlvbmFsLWxpZ2h0IFtjYXN0U2hhZG93XT1cImNhc3RTaGFkb3coKVwiIFtpbnRlbnNpdHldPVwiaW50ZW5zaXR5KCkgLyBhbW91bnQoKVwiPlxuXHRcdFx0XHRcdDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cImJpYXMoKVwiIGF0dGFjaD1cInNoYWRvdy5iaWFzXCIgLz5cblx0XHRcdFx0XHQ8bmd0LXZlY3RvcjIgKmFyZ3M9XCJzaGFkb3dNYXBTaXplKClcIiBhdHRhY2g9XCJzaGFkb3cubWFwU2l6ZVwiIC8+XG5cdFx0XHRcdFx0PG5ndC1vcnRob2dyYXBoaWMtY2FtZXJhICphcmdzPVwiY2FtZXJhQXJncygpXCIgYXR0YWNoPVwic2hhZG93LmNhbWVyYVwiIC8+XG5cdFx0XHRcdDwvbmd0LWRpcmVjdGlvbmFsLWxpZ2h0PlxuXHRcdFx0fVxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNSYW5kb21pemVkTGlnaHRzIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIE9iamVjdC5rZXlzKGRlZmF1bHRPcHRpb25zKSBhcyBBcnJheTxrZXlvZiBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnM+KTtcblxuXHRsaWdodHNSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdsaWdodHMnKTtcblxuXHRwcml2YXRlIGFjY3VtdWxhdGl2ZVNoYWRvd3MgPSBpbmplY3QoTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MpO1xuXG5cdGNhc3RTaGFkb3cgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nhc3RTaGFkb3cnKTtcblx0YmlhcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnYmlhcycpO1xuXHRpbnRlbnNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ludGVuc2l0eScpO1xuXHRhbW91bnQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Ftb3VudCcpO1xuXG5cdHByaXZhdGUgbWFwU2l6ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFwU2l6ZScpO1xuXHRzaGFkb3dNYXBTaXplID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMubWFwU2l6ZSgpLCB0aGlzLm1hcFNpemUoKV0pO1xuXG5cdHByaXZhdGUgcG9zaXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Bvc2l0aW9uJyk7XG5cdGxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IG5ldyBWZWN0b3IzKC4uLnRoaXMucG9zaXRpb24oKSkubGVuZ3RoKCkpO1xuXG5cdGNvdW50ID0gY29tcHV0ZWQoKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5hbW91bnQoKSB9LCAoXywgaW5kZXgpID0+IGluZGV4KSk7XG5cblx0cHJpdmF0ZSBzaXplID0gcGljayh0aGlzLm9wdGlvbnMsICdzaXplJyk7XG5cdHByaXZhdGUgbmVhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnbmVhcicpO1xuXHRwcml2YXRlIGZhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZmFyJyk7XG5cdGNhbWVyYUFyZ3MgPSBjb21wdXRlZCgoKSA9PiBbLXRoaXMuc2l6ZSgpLCB0aGlzLnNpemUoKSwgdGhpcy5zaXplKCksIC10aGlzLnNpemUoKSwgdGhpcy5uZWFyKCksIHRoaXMuZmFyKCldKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91cCwgRGlyZWN0aW9uYWxMaWdodCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyIH0pO1xuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbGlnaHRzID0gdGhpcy5saWdodHNSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHR0aGlzLmFjY3VtdWxhdGl2ZVNoYWRvd3MubGlnaHRzTWFwLnNldChsaWdodHMudXVpZCwgdGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB0aGlzLmFjY3VtdWxhdGl2ZVNoYWRvd3MubGlnaHRzTWFwLmRlbGV0ZShsaWdodHMudXVpZCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRsZXQgbGlnaHQ6IE9iamVjdDNEIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGxpZ2h0cyA9IHRoaXMubGlnaHRzUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRpZiAobGlnaHRzKSB7XG5cdFx0XHRjb25zdCBbeyBhbWJpZW50LCByYWRpdXMsIHBvc2l0aW9uIH0sIGxlbmd0aF0gPSBbdGhpcy5vcHRpb25zKCksIHRoaXMubGVuZ3RoKCldO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0cy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsaWdodCA9IGxpZ2h0cy5jaGlsZHJlbltpXTtcblx0XHRcdFx0aWYgKE1hdGgucmFuZG9tKCkgPiBhbWJpZW50KSB7XG5cdFx0XHRcdFx0bGlnaHQucG9zaXRpb24uc2V0KFxuXHRcdFx0XHRcdFx0cG9zaXRpb25bMF0gKyBNYXRoVXRpbHMucmFuZEZsb2F0U3ByZWFkKHJhZGl1cyksXG5cdFx0XHRcdFx0XHRwb3NpdGlvblsxXSArIE1hdGhVdGlscy5yYW5kRmxvYXRTcHJlYWQocmFkaXVzKSxcblx0XHRcdFx0XHRcdHBvc2l0aW9uWzJdICsgTWF0aFV0aWxzLnJhbmRGbG9hdFNwcmVhZChyYWRpdXMpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFtYmRhID0gTWF0aC5hY29zKDIgKiBNYXRoLnJhbmRvbSgpIC0gMSkgLSBNYXRoLlBJIC8gMi4wO1xuXHRcdFx0XHRcdGNvbnN0IHBoaSA9IDIgKiBNYXRoLlBJICogTWF0aC5yYW5kb20oKTtcblx0XHRcdFx0XHRsaWdodC5wb3NpdGlvbi5zZXQoXG5cdFx0XHRcdFx0XHRNYXRoLmNvcyhsYW1iZGEpICogTWF0aC5jb3MocGhpKSAqIGxlbmd0aCxcblx0XHRcdFx0XHRcdE1hdGguYWJzKE1hdGguY29zKGxhbWJkYSkgKiBNYXRoLnNpbihwaGkpICogbGVuZ3RoKSxcblx0XHRcdFx0XHRcdE1hdGguc2luKGxhbWJkYSkgKiBsZW5ndGgsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl19
|