angular-three-soba 2.0.0-beta.9 → 2.1.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 +20 -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/mask.mjs +78 -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 +2421 -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 +90 -50
- 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 +19 -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/mask.d.ts +30 -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,268 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, Directive, ElementRef, inject, input, model, untracked, } from '@angular/core';
|
|
3
|
+
import { injectBeforeRender, injectStore, NgtHTML, pick, provideHTMLDomElement } from 'angular-three';
|
|
4
|
+
import { easing } from 'maath';
|
|
5
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const defaultOptions = {
|
|
9
|
+
eps: 0.00001,
|
|
10
|
+
horizontal: false,
|
|
11
|
+
infinite: false,
|
|
12
|
+
pages: 1,
|
|
13
|
+
distance: 1,
|
|
14
|
+
damping: 0.25,
|
|
15
|
+
maxSpeed: Infinity,
|
|
16
|
+
prepend: false,
|
|
17
|
+
enabled: true,
|
|
18
|
+
style: {},
|
|
19
|
+
};
|
|
20
|
+
export class NgtsScrollControls {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.progress = model(0);
|
|
23
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
24
|
+
this.document = inject(DOCUMENT);
|
|
25
|
+
this.store = injectStore();
|
|
26
|
+
this.gl = this.store.select('gl');
|
|
27
|
+
this.events = this.store.select('events');
|
|
28
|
+
this.invalidate = this.store.select('invalidate');
|
|
29
|
+
this.size = this.store.select('size');
|
|
30
|
+
this.domElement = pick(this.gl, 'domElement');
|
|
31
|
+
this.target = pick(this.domElement, 'parentNode');
|
|
32
|
+
this._el = this.document.createElement('div');
|
|
33
|
+
this._fill = this.document.createElement('div');
|
|
34
|
+
this._fixed = this.document.createElement('div');
|
|
35
|
+
this.style = pick(this.options, 'style');
|
|
36
|
+
this.prepend = pick(this.options, 'prepend');
|
|
37
|
+
this.enabled = pick(this.options, 'enabled');
|
|
38
|
+
this.infinite = pick(this.options, 'infinite');
|
|
39
|
+
this.maxSpeed = pick(this.options, 'maxSpeed');
|
|
40
|
+
this.eps = pick(this.options, 'eps');
|
|
41
|
+
this.horizontal = pick(this.options, 'horizontal');
|
|
42
|
+
this.pages = pick(this.options, 'pages');
|
|
43
|
+
this.distance = pick(this.options, 'distance');
|
|
44
|
+
this.damping = pick(this.options, 'damping');
|
|
45
|
+
this.scroll = 0;
|
|
46
|
+
this.offset = 0;
|
|
47
|
+
this.delta = 0;
|
|
48
|
+
const autoEffect = injectAutoEffect();
|
|
49
|
+
afterNextRender(() => {
|
|
50
|
+
autoEffect(() => {
|
|
51
|
+
const target = this.target();
|
|
52
|
+
if (!target)
|
|
53
|
+
return;
|
|
54
|
+
const parent = target;
|
|
55
|
+
const [pages, distance, horizontal, el, fill, fixed, style, prepend, domElement, events] = [
|
|
56
|
+
this.pages(),
|
|
57
|
+
this.distance(),
|
|
58
|
+
this.horizontal(),
|
|
59
|
+
this.el,
|
|
60
|
+
this.fill,
|
|
61
|
+
this.fixed,
|
|
62
|
+
untracked(this.style),
|
|
63
|
+
untracked(this.prepend),
|
|
64
|
+
untracked(this.domElement),
|
|
65
|
+
untracked(this.events),
|
|
66
|
+
];
|
|
67
|
+
el.style.position = 'absolute';
|
|
68
|
+
el.style.width = '100%';
|
|
69
|
+
el.style.height = '100%';
|
|
70
|
+
el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';
|
|
71
|
+
el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';
|
|
72
|
+
el.style.top = '0px';
|
|
73
|
+
el.style.left = '0px';
|
|
74
|
+
for (const key in style) {
|
|
75
|
+
el.style[key] = style[key];
|
|
76
|
+
}
|
|
77
|
+
fixed.style.position = 'sticky';
|
|
78
|
+
fixed.style.top = '0px';
|
|
79
|
+
fixed.style.left = '0px';
|
|
80
|
+
fixed.style.width = '100%';
|
|
81
|
+
fixed.style.height = '100%';
|
|
82
|
+
fixed.style.overflow = 'hidden';
|
|
83
|
+
el.appendChild(fixed);
|
|
84
|
+
fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;
|
|
85
|
+
fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';
|
|
86
|
+
fill.style.pointerEvents = 'none';
|
|
87
|
+
el.appendChild(fill);
|
|
88
|
+
if (prepend)
|
|
89
|
+
parent.prepend(el);
|
|
90
|
+
else
|
|
91
|
+
parent.appendChild(el);
|
|
92
|
+
// Init scroll one pixel in to allow upward/leftward scroll
|
|
93
|
+
el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
|
|
94
|
+
const oldTarget = (events.connected || domElement);
|
|
95
|
+
requestAnimationFrame(() => events.connect?.(el));
|
|
96
|
+
const oldCompute = events.compute?.bind(events);
|
|
97
|
+
this.store.snapshot.setEvents({
|
|
98
|
+
compute(event, store) {
|
|
99
|
+
const state = store.snapshot;
|
|
100
|
+
// we are using boundingClientRect because we could not rely on target.offsetTop as canvas could be positioned anywhere in dom
|
|
101
|
+
const { left, top } = parent.getBoundingClientRect();
|
|
102
|
+
const offsetX = event.clientX - left;
|
|
103
|
+
const offsetY = event.clientY - top;
|
|
104
|
+
state.pointer.set((offsetX / state.size.width) * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
|
|
105
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
return () => {
|
|
109
|
+
parent.removeChild(el);
|
|
110
|
+
this.store.snapshot.setEvents({ compute: oldCompute });
|
|
111
|
+
events.connect?.(oldTarget);
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
autoEffect(() => {
|
|
115
|
+
const [el, events, size, infinite, invalidate, horizontal, enabled] = [
|
|
116
|
+
this.el,
|
|
117
|
+
this.events(),
|
|
118
|
+
this.size(),
|
|
119
|
+
this.infinite(),
|
|
120
|
+
this.invalidate(),
|
|
121
|
+
this.horizontal(),
|
|
122
|
+
this.enabled(),
|
|
123
|
+
];
|
|
124
|
+
if (events.connected !== el)
|
|
125
|
+
return;
|
|
126
|
+
const containerLength = size[horizontal ? 'width' : 'height'];
|
|
127
|
+
const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
|
|
128
|
+
const scrollThreshold = scrollLength - containerLength;
|
|
129
|
+
let current = 0;
|
|
130
|
+
let disableScroll = true;
|
|
131
|
+
let firstRun = true;
|
|
132
|
+
const onScroll = () => {
|
|
133
|
+
// Prevent first scroll because it is indirectly caused by the one pixel offset
|
|
134
|
+
if (!enabled || firstRun)
|
|
135
|
+
return;
|
|
136
|
+
invalidate();
|
|
137
|
+
current = el[horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
138
|
+
this.scroll = current / scrollThreshold;
|
|
139
|
+
if (infinite) {
|
|
140
|
+
if (!disableScroll) {
|
|
141
|
+
if (current >= scrollThreshold) {
|
|
142
|
+
const damp = 1 - this.offset;
|
|
143
|
+
el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
|
|
144
|
+
this.scroll = this.offset = -damp;
|
|
145
|
+
disableScroll = true;
|
|
146
|
+
}
|
|
147
|
+
else if (current <= 0) {
|
|
148
|
+
const damp = 1 + this.offset;
|
|
149
|
+
el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;
|
|
150
|
+
this.scroll = this.offset = damp;
|
|
151
|
+
disableScroll = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (disableScroll)
|
|
155
|
+
setTimeout(() => (disableScroll = false), 40);
|
|
156
|
+
}
|
|
157
|
+
untracked(() => {
|
|
158
|
+
this.progress.set(this.scroll);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
el.addEventListener('scroll', onScroll, { passive: true });
|
|
162
|
+
requestAnimationFrame(() => (firstRun = false));
|
|
163
|
+
const onWheel = (e) => (el[horizontal ? 'scrollLeft' : 'scrollTop'] += e.deltaY / 2);
|
|
164
|
+
if (horizontal)
|
|
165
|
+
el.addEventListener('wheel', onWheel, { passive: true });
|
|
166
|
+
return () => {
|
|
167
|
+
el.removeEventListener('scroll', onScroll);
|
|
168
|
+
if (horizontal)
|
|
169
|
+
el.removeEventListener('wheel', onWheel);
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
let last = 0;
|
|
174
|
+
injectBeforeRender(({ delta }) => {
|
|
175
|
+
last = this.offset;
|
|
176
|
+
easing.damp(this, 'offset', this.scroll, this.damping(), delta, this.maxSpeed(), undefined, this.eps());
|
|
177
|
+
easing.damp(this, 'delta', Math.abs(last - this.offset), this.damping(), delta, this.maxSpeed(), undefined, this.eps());
|
|
178
|
+
if (this.delta > this.eps())
|
|
179
|
+
this.invalidate()();
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
get el() {
|
|
183
|
+
return this._el;
|
|
184
|
+
}
|
|
185
|
+
get fill() {
|
|
186
|
+
return this._fill;
|
|
187
|
+
}
|
|
188
|
+
get fixed() {
|
|
189
|
+
return this._fixed;
|
|
190
|
+
}
|
|
191
|
+
range(from, distance, margin = 0) {
|
|
192
|
+
const start = from - margin;
|
|
193
|
+
const end = start + distance + margin * 2;
|
|
194
|
+
return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);
|
|
195
|
+
}
|
|
196
|
+
curve(from, distance, margin = 0) {
|
|
197
|
+
return Math.sin(this.range(from, distance, margin) * Math.PI);
|
|
198
|
+
}
|
|
199
|
+
visible(from, distance, margin = 0) {
|
|
200
|
+
const start = from - margin;
|
|
201
|
+
const end = start + distance + margin * 2;
|
|
202
|
+
return this.offset >= start && this.offset <= end;
|
|
203
|
+
}
|
|
204
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtsScrollControls, isStandalone: true, selector: "ngts-scroll-controls", inputs: { progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { progress: "progressChange" }, ngImport: i0, template: `
|
|
206
|
+
<ng-content />
|
|
207
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
208
|
+
}
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollControls, decorators: [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{
|
|
212
|
+
selector: 'ngts-scroll-controls',
|
|
213
|
+
standalone: true,
|
|
214
|
+
template: `
|
|
215
|
+
<ng-content />
|
|
216
|
+
`,
|
|
217
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
218
|
+
}]
|
|
219
|
+
}], ctorParameters: () => [] });
|
|
220
|
+
export class NgtsScrollCanvas {
|
|
221
|
+
constructor() {
|
|
222
|
+
this.host = inject(ElementRef);
|
|
223
|
+
this.scrollControls = inject(NgtsScrollControls);
|
|
224
|
+
this.store = injectStore();
|
|
225
|
+
this.viewport = this.store.select('viewport');
|
|
226
|
+
injectBeforeRender(() => {
|
|
227
|
+
const group = this.host.nativeElement;
|
|
228
|
+
group.position.x = this.scrollControls.horizontal()
|
|
229
|
+
? -this.viewport().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
|
|
230
|
+
: 0;
|
|
231
|
+
group.position.y = this.scrollControls.horizontal()
|
|
232
|
+
? 0
|
|
233
|
+
: this.viewport().height * (this.scrollControls.pages() - 1) * this.scrollControls.offset;
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollCanvas, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
237
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: NgtsScrollCanvas, isStandalone: true, selector: "ngt-group[ngtsScrollCanvas]", ngImport: i0 }); }
|
|
238
|
+
}
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollCanvas, decorators: [{
|
|
240
|
+
type: Directive,
|
|
241
|
+
args: [{ selector: 'ngt-group[ngtsScrollCanvas]', standalone: true }]
|
|
242
|
+
}], ctorParameters: () => [] });
|
|
243
|
+
export class NgtsScrollHtml extends NgtHTML {
|
|
244
|
+
constructor() {
|
|
245
|
+
super();
|
|
246
|
+
this.scrollControls = inject(NgtsScrollControls);
|
|
247
|
+
this.size = this.store.select('size');
|
|
248
|
+
injectBeforeRender(() => {
|
|
249
|
+
if (this.scrollControls.delta > this.scrollControls.eps()) {
|
|
250
|
+
this.host.nativeElement.style.transform = `translate3d(${this.scrollControls.horizontal()
|
|
251
|
+
? -this.size().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
|
|
252
|
+
: 0}px,${this.scrollControls.horizontal() ? 0 : this.size().height * (this.scrollControls.pages() - 1) * -this.scrollControls.offset}px,0)`;
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollHtml, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
257
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: NgtsScrollHtml, isStandalone: true, selector: "div[ngtsScrollHTML]", host: { styleAttribute: "position: absolute; top: 0; left: 0; will-change: transform;" }, providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)], usesInheritance: true, ngImport: i0 }); }
|
|
258
|
+
}
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollHtml, decorators: [{
|
|
260
|
+
type: Directive,
|
|
261
|
+
args: [{
|
|
262
|
+
selector: 'div[ngtsScrollHTML]',
|
|
263
|
+
standalone: true,
|
|
264
|
+
host: { style: 'position: absolute; top: 0; left: 0; will-change: transform;' },
|
|
265
|
+
providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)],
|
|
266
|
+
}]
|
|
267
|
+
}], ctorParameters: () => [] });
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWNvbnRyb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2NvbnRyb2xzL3NyYy9saWIvc2Nyb2xsLWNvbnRyb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQTJCdkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELEdBQUcsRUFBRSxPQUFPO0lBQ1osVUFBVSxFQUFFLEtBQUs7SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsQ0FBQztJQUNSLFFBQVEsRUFBRSxDQUFDO0lBQ1gsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsUUFBUTtJQUNsQixPQUFPLEVBQUUsS0FBSztJQUNkLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLEVBQUU7Q0FDVCxDQUFDO0FBVUYsTUFBTSxPQUFPLGtCQUFrQjtJQWdDOUI7UUEvQkEsYUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFX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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sT0FBTyxDQUFDO1lBQzFJLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBZlcsY0FBYztrR0FBZCxjQUFjLDRKQUZmLENBQUMscUJBQXFCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7OzJGQUV0RixjQUFjO2tCQU4xQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsOERBQThELEVBQUU7b0JBQy9FLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRtb2RlbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIE5ndEhUTUwsIHBpY2ssIHByb3ZpZGVIVE1MRG9tRWxlbWVudCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgZWFzaW5nIH0gZnJvbSAnbWFhdGgnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1Njcm9sbENvbnRyb2xzT3B0aW9ucyB7XG5cdC8qKiBQcmVjaXNpb24sIGRlZmF1bHQgMC4wMDAwMSAqL1xuXHRlcHM6IG51bWJlcjtcblx0LyoqIEhvcml6b250YWwgc2Nyb2xsLCBkZWZhdWx0IGZhbHNlICh2ZXJ0aWNhbCkgKi9cblx0aG9yaXpvbnRhbDogYm9vbGVhbjtcblx0LyoqIEluZmluaXRlIHNjcm9sbCwgZGVmYXVsdCBmYWxzZSAoZXhwZXJpbWVudGFsISkgKi9cblx0aW5maW5pdGU6IGJvb2xlYW47XG5cdC8qKiBEZWZpbmVzIHRoZSBsZW5naHQgb2YgdGhlIHNjcm9sbCBhcmVhLCBlYWNoIHBhZ2UgaXMgaGVpZ2h0OjEwMCUsIGRlZmF1bHQgMSAqL1xuXHRwYWdlczogbnVtYmVyO1xuXHQvKiogQSBmYWN0b3IgdGhhdCBpbmNyZWFzZXMgc2Nyb2xsIGJhciB0cmF2ZWwsZGVmYXVsdDogMSAqL1xuXHRkaXN0YW5jZTogbnVtYmVyO1xuXHQvKiogRnJpY3Rpb24gaW4gc2Vjb25kcywgZGVmYXVsdDogMC4yNSAoMS80IHNlY29uZCkgKi9cblx0ZGFtcGluZzogbnVtYmVyO1xuXHQvKiogbWF4U3BlZWQgb3B0aW9uYWxseSBhbGxvd3MgeW91IHRvIGNsYW1wIHRoZSBtYXhpbXVtIHNwZWVkLiBJZiBkYW1waW5nIGlzIDAuMnMgYW5kIGxvb2tzIE9LXG5cdCAqICBnb2luZyBiZXR3ZWVuLCBzYXksIHBhZ2UgMSBhbmQgMiwgYnV0IG5vdCBmb3IgcGFnZXMgZmFyIGFwYXJ0IGFzIGl0J2xsIG1vdmUgdmVyeSByYXBpZCxcblx0ICogIHRoZW4gYSBtYXhTcGVlZCBvZiBlLmcuIDMgd2hpY2ggd2lsbCBjbGFtcCB0aGUgc3BlZWQgdG8gMyB1bml0cyBwZXIgc2Vjb25kLCBpdCBtYXkgbm93XG5cdCAqICB0YWtlIG11Y2ggbG9uZ2VyIHRoYW4gZGFtcGluZyB0byByZWFjaCB0aGUgdGFyZ2V0IGlmIGl0IGlzIGZhciBhd2F5LiBEZWZhdWx0OiBJbmZpbml0eSAqL1xuXHRtYXhTcGVlZDogbnVtYmVyO1xuXHQvKiogSWYgdHJ1ZSBhdHRhY2hlcyB0aGUgc2Nyb2xsIGNvbnRhaW5lciBiZWZvcmUgdGhlIGNhbnZhcyAqL1xuXHRwcmVwZW5kOiBib29sZWFuO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRzdHlsZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNTY3JvbGxDb250cm9sc09wdGlvbnMgPSB7XG5cdGVwczogMC4wMDAwMSxcblx0aG9yaXpvbnRhbDogZmFsc2UsXG5cdGluZmluaXRlOiBmYWxzZSxcblx0cGFnZXM6IDEsXG5cdGRpc3RhbmNlOiAxLFxuXHRkYW1waW5nOiAwLjI1LFxuXHRtYXhTcGVlZDogSW5maW5pdHksXG5cdHByZXBlbmQ6IGZhbHNlLFxuXHRlbmFibGVkOiB0cnVlLFxuXHRzdHlsZToge30sXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNjcm9sbC1jb250cm9scycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTY3JvbGxDb250cm9scyB7XG5cdHByb2dyZXNzID0gbW9kZWwoMCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblx0cHJpdmF0ZSBldmVudHMgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZXZlbnRzJyk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSBkb21FbGVtZW50ID0gcGljayh0aGlzLmdsLCAnZG9tRWxlbWVudCcpO1xuXHRwcml2YXRlIHRhcmdldCA9IHBpY2sodGhpcy5kb21FbGVtZW50LCAncGFyZW50Tm9kZScpO1xuXG5cdHByaXZhdGUgX2VsID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0cHJpdmF0ZSBfZmlsbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdHByaXZhdGUgX2ZpeGVkID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHRwcml2YXRlIHN0eWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzdHlsZScpO1xuXHRwcml2YXRlIHByZXBlbmQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZXBlbmQnKTtcblx0cHJpdmF0ZSBlbmFibGVkID0gcGljayh0aGlzLm9wdGlvbnMsICdlbmFibGVkJyk7XG5cdHByaXZhdGUgaW5maW5pdGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2luZmluaXRlJyk7XG5cdHByaXZhdGUgbWF4U3BlZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21heFNwZWVkJyk7XG5cdGVwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXBzJyk7XG5cdGhvcml6b250YWwgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2hvcml6b250YWwnKTtcblx0cGFnZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3BhZ2VzJyk7XG5cdGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXHRkYW1waW5nID0gcGljayh0aGlzLm9wdGlvbnMsICdkYW1waW5nJyk7XG5cdHNjcm9sbCA9IDA7XG5cdG9mZnNldCA9IDA7XG5cdGRlbHRhID0gMDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdFx0XHRpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdFx0Y29uc3QgW3BhZ2VzLCBkaXN0YW5jZSwgaG9yaXpvbnRhbCwgZWwsIGZpbGwsIGZpeGVkLCBzdHlsZSwgcHJlcGVuZCwgZG9tRWxlbWVudCwgZXZlbnRzXSA9IFtcblx0XHRcdFx0XHR0aGlzLnBhZ2VzKCksXG5cdFx0XHRcdFx0dGhpcy5kaXN0YW5jZSgpLFxuXHRcdFx0XHRcdHRoaXMuaG9yaXpvbnRhbCgpLFxuXHRcdFx0XHRcdHRoaXMuZWwsXG5cdFx0XHRcdFx0dGhpcy5maWxsLFxuXHRcdFx0XHRcdHRoaXMuZml4ZWQsXG5cdFx0XHRcdFx0dW50cmFja2VkKHRoaXMuc3R5bGUpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnByZXBlbmQpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmRvbUVsZW1lbnQpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmV2ZW50cyksXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0ZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHRcdFx0XHRlbC5zdHlsZS53aWR0aCA9ICcxMDAlJztcblx0XHRcdFx0ZWwuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuXHRcdFx0XHRlbC5zdHlsZVtob3Jpem9udGFsID8gJ292ZXJmbG93WCcgOiAnb3ZlcmZsb3dZJ10gPSAnYXV0byc7XG5cdFx0XHRcdGVsLnN0eWxlW2hvcml6b250YWwgPyAnb3ZlcmZsb3dZJyA6ICdvdmVyZmxvd1gnXSA9ICdoaWRkZW4nO1xuXHRcdFx0XHRlbC5zdHlsZS50b3AgPSAnMHB4Jztcblx0XHRcdFx0ZWwuc3R5bGUubGVmdCA9ICcwcHgnO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIHN0eWxlKSB7XG5cdFx0XHRcdFx0ZWwuc3R5bGVba2V5XSA9IChzdHlsZSBhcyBDU1NTdHlsZURlY2xhcmF0aW9uKVtrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zml4ZWQuc3R5bGUucG9zaXRpb24gPSAnc3RpY2t5Jztcblx0XHRcdFx0Zml4ZWQuc3R5bGUudG9wID0gJzBweCc7XG5cdFx0XHRcdGZpeGVkLnN0eWxlLmxlZnQgPSAnMHB4Jztcblx0XHRcdFx0Zml4ZWQuc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cdFx0XHRcdGZpeGVkLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblx0XHRcdFx0Zml4ZWQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblx0XHRcdFx0ZWwuYXBwZW5kQ2hpbGQoZml4ZWQpO1xuXG5cdFx0XHRcdGZpbGwuc3R5bGUuaGVpZ2h0ID0gaG9yaXpvbnRhbCA/ICcxMDAlJyA6IGAke3BhZ2VzICogZGlzdGFuY2UgKiAxMDB9JWA7XG5cdFx0XHRcdGZpbGwuc3R5bGUud2lkdGggPSBob3Jpem9udGFsID8gYCR7cGFnZXMgKiBkaXN0YW5jZSAqIDEwMH0lYCA6ICcxMDAlJztcblx0XHRcdFx0ZmlsbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXHRcdFx0XHRlbC5hcHBlbmRDaGlsZChmaWxsKTtcblxuXHRcdFx0XHRpZiAocHJlcGVuZCkgcGFyZW50LnByZXBlbmQoZWwpO1xuXHRcdFx0XHRlbHNlIHBhcmVudC5hcHBlbmRDaGlsZChlbCk7XG5cblx0XHRcdFx0Ly8gSW5pdCBzY3JvbGwgb25lIHBpeGVsIGluIHRvIGFsbG93IHVwd2FyZC9sZWZ0d2FyZCBzY3JvbGxcblx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IDE7XG5cblx0XHRcdFx0Y29uc3Qgb2xkVGFyZ2V0ID0gKGV2ZW50cy5jb25uZWN0ZWQgfHwgZG9tRWxlbWVudCkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBldmVudHMuY29ubmVjdD8uKGVsKSk7XG5cdFx0XHRcdGNvbnN0IG9sZENvbXB1dGUgPSBldmVudHMuY29tcHV0ZT8uYmluZChldmVudHMpO1xuXG5cdFx0XHRcdHRoaXMuc3RvcmUuc25hcHNob3Quc2V0RXZlbnRzKHtcblx0XHRcdFx0XHRjb21wdXRlKGV2ZW50LCBzdG9yZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0XHRcdFx0XHRcdC8vIHdlIGFyZSB1c2luZyBib3VuZGluZ0NsaWVudFJlY3QgYmVjYXVzZSB3ZSBjb3VsZCBub3QgcmVseSBvbiB0YXJnZXQub2Zmc2V0VG9wIGFzIGNhbnZhcyBjb3VsZCBiZSBwb3NpdGlvbmVkIGFueXdoZXJlIGluIGRvbVxuXHRcdFx0XHRcdFx0Y29uc3QgeyBsZWZ0LCB0b3AgfSA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gbGVmdDtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gdG9wO1xuXHRcdFx0XHRcdFx0c3RhdGUucG9pbnRlci5zZXQoKG9mZnNldFggLyBzdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLCAtKG9mZnNldFkgLyBzdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG5cdFx0XHRcdFx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLCBzdGF0ZS5jYW1lcmEpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0cGFyZW50LnJlbW92ZUNoaWxkKGVsKTtcblx0XHRcdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LnNldEV2ZW50cyh7IGNvbXB1dGU6IG9sZENvbXB1dGUgfSk7XG5cdFx0XHRcdFx0ZXZlbnRzLmNvbm5lY3Q/LihvbGRUYXJnZXQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBbZWwsIGV2ZW50cywgc2l6ZSwgaW5maW5pdGUsIGludmFsaWRhdGUsIGhvcml6b250YWwsIGVuYWJsZWRdID0gW1xuXHRcdFx0XHRcdHRoaXMuZWwsXG5cdFx0XHRcdFx0dGhpcy5ldmVudHMoKSxcblx0XHRcdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdFx0XHR0aGlzLmluZmluaXRlKCksXG5cdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdFx0dGhpcy5ob3Jpem9udGFsKCksXG5cdFx0XHRcdFx0dGhpcy5lbmFibGVkKCksXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0aWYgKGV2ZW50cy5jb25uZWN0ZWQgIT09IGVsKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgY29udGFpbmVyTGVuZ3RoID0gc2l6ZVtob3Jpem9udGFsID8gJ3dpZHRoJyA6ICdoZWlnaHQnXTtcblx0XHRcdFx0Y29uc3Qgc2Nyb2xsTGVuZ3RoID0gZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxXaWR0aCcgOiAnc2Nyb2xsSGVpZ2h0J107XG5cdFx0XHRcdGNvbnN0IHNjcm9sbFRocmVzaG9sZCA9IHNjcm9sbExlbmd0aCAtIGNvbnRhaW5lckxlbmd0aDtcblxuXHRcdFx0XHRsZXQgY3VycmVudCA9IDA7XG5cdFx0XHRcdGxldCBkaXNhYmxlU2Nyb2xsID0gdHJ1ZTtcblx0XHRcdFx0bGV0IGZpcnN0UnVuID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcblx0XHRcdFx0XHQvLyBQcmV2ZW50IGZpcnN0IHNjcm9sbCBiZWNhdXNlIGl0IGlzIGluZGlyZWN0bHkgY2F1c2VkIGJ5IHRoZSBvbmUgcGl4ZWwgb2Zmc2V0XG5cdFx0XHRcdFx0aWYgKCFlbmFibGVkIHx8IGZpcnN0UnVuKSByZXR1cm47XG5cdFx0XHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRcdGN1cnJlbnQgPSBlbFtob3Jpem9udGFsID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddO1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsID0gY3VycmVudCAvIHNjcm9sbFRocmVzaG9sZDtcblxuXHRcdFx0XHRcdGlmIChpbmZpbml0ZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFkaXNhYmxlU2Nyb2xsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50ID49IHNjcm9sbFRocmVzaG9sZCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhbXAgPSAxIC0gdGhpcy5vZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zY3JvbGwgPSB0aGlzLm9mZnNldCA9IC1kYW1wO1xuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVTY3JvbGwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnQgPD0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhbXAgPSAxICsgdGhpcy5vZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHNjcm9sbExlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNjcm9sbCA9IHRoaXMub2Zmc2V0ID0gZGFtcDtcblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlU2Nyb2xsID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGRpc2FibGVTY3JvbGwpIHNldFRpbWVvdXQoKCkgPT4gKGRpc2FibGVTY3JvbGwgPSBmYWxzZSksIDQwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9ncmVzcy5zZXQodGhpcy5zY3JvbGwpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiAoZmlyc3RSdW4gPSBmYWxzZSkpO1xuXG5cdFx0XHRcdGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCkgPT4gKGVsW2hvcml6b250YWwgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gKz0gZS5kZWx0YVkgLyAyKTtcblx0XHRcdFx0aWYgKGhvcml6b250YWwpIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0ZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpO1xuXHRcdFx0XHRcdGlmIChob3Jpem9udGFsKSBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRsZXQgbGFzdCA9IDA7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdGxhc3QgPSB0aGlzLm9mZnNldDtcblx0XHRcdGVhc2luZy5kYW1wKHRoaXMsICdvZmZzZXQnLCB0aGlzLnNjcm9sbCwgdGhpcy5kYW1waW5nKCksIGRlbHRhLCB0aGlzLm1heFNwZWVkKCksIHVuZGVmaW5lZCwgdGhpcy5lcHMoKSk7XG5cdFx0XHRlYXNpbmcuZGFtcChcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0J2RlbHRhJyxcblx0XHRcdFx0TWF0aC5hYnMobGFzdCAtIHRoaXMub2Zmc2V0KSxcblx0XHRcdFx0dGhpcy5kYW1waW5nKCksXG5cdFx0XHRcdGRlbHRhLFxuXHRcdFx0XHR0aGlzLm1heFNwZWVkKCksXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0dGhpcy5lcHMoKSxcblx0XHRcdCk7XG5cdFx0XHRpZiAodGhpcy5kZWx0YSA+IHRoaXMuZXBzKCkpIHRoaXMuaW52YWxpZGF0ZSgpKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXQgZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VsO1xuXHR9XG5cblx0Z2V0IGZpbGwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ZpbGw7XG5cdH1cblxuXHRnZXQgZml4ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ZpeGVkO1xuXHR9XG5cblx0cmFuZ2UoZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBtYXJnaW4gPSAwKTogbnVtYmVyIHtcblx0XHRjb25zdCBzdGFydCA9IGZyb20gLSBtYXJnaW47XG5cdFx0Y29uc3QgZW5kID0gc3RhcnQgKyBkaXN0YW5jZSArIG1hcmdpbiAqIDI7XG5cdFx0cmV0dXJuIHRoaXMub2Zmc2V0IDwgc3RhcnQgPyAwIDogdGhpcy5vZmZzZXQgPiBlbmQgPyAxIDogKHRoaXMub2Zmc2V0IC0gc3RhcnQpIC8gKGVuZCAtIHN0YXJ0KTtcblx0fVxuXG5cdGN1cnZlKGZyb206IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgbWFyZ2luID0gMCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc2luKHRoaXMucmFuZ2UoZnJvbSwgZGlzdGFuY2UsIG1hcmdpbikgKiBNYXRoLlBJKTtcblx0fVxuXG5cdHZpc2libGUoZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBtYXJnaW4gPSAwKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc3RhcnQgPSBmcm9tIC0gbWFyZ2luO1xuXHRcdGNvbnN0IGVuZCA9IHN0YXJ0ICsgZGlzdGFuY2UgKyBtYXJnaW4gKiAyO1xuXHRcdHJldHVybiB0aGlzLm9mZnNldCA+PSBzdGFydCAmJiB0aGlzLm9mZnNldCA8PSBlbmQ7XG5cdH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmd0LWdyb3VwW25ndHNTY3JvbGxDYW52YXNdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNTY3JvbGxDYW52YXMge1xuXHRwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxHcm91cD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHNjcm9sbENvbnRyb2xzID0gaW5qZWN0KE5ndHNTY3JvbGxDb250cm9scyk7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IGdyb3VwID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGdyb3VwLnBvc2l0aW9uLnggPSB0aGlzLnNjcm9sbENvbnRyb2xzLmhvcml6b250YWwoKVxuXHRcdFx0XHQ/IC10aGlzLnZpZXdwb3J0KCkud2lkdGggKiAodGhpcy5zY3JvbGxDb250cm9scy5wYWdlcygpIC0gMSkgKiB0aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldFxuXHRcdFx0XHQ6IDA7XG5cdFx0XHRncm91cC5wb3NpdGlvbi55ID0gdGhpcy5zY3JvbGxDb250cm9scy5ob3Jpem9udGFsKClcblx0XHRcdFx0PyAwXG5cdFx0XHRcdDogdGhpcy52aWV3cG9ydCgpLmhlaWdodCAqICh0aGlzLnNjcm9sbENvbnRyb2xzLnBhZ2VzKCkgLSAxKSAqIHRoaXMuc2Nyb2xsQ29udHJvbHMub2Zmc2V0O1xuXHRcdH0pO1xuXHR9XG59XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ2RpdltuZ3RzU2Nyb2xsSFRNTF0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRob3N0OiB7IHN0eWxlOiAncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07JyB9LFxuXHRwcm92aWRlcnM6IFtwcm92aWRlSFRNTERvbUVsZW1lbnQoW05ndHNTY3JvbGxDb250cm9sc10sIChzY3JvbGxDb250cm9scykgPT4gc2Nyb2xsQ29udHJvbHMuZml4ZWQpXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Njcm9sbEh0bWwgZXh0ZW5kcyBOZ3RIVE1MIHtcblx0cHJpdmF0ZSBzY3JvbGxDb250cm9scyA9IGluamVjdChOZ3RzU2Nyb2xsQ29udHJvbHMpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNjcm9sbENvbnRyb2xzLmRlbHRhID4gdGhpcy5zY3JvbGxDb250cm9scy5lcHMoKSkge1xuXHRcdFx0XHR0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbENvbnRyb2xzLmhvcml6b250YWwoKVxuXHRcdFx0XHRcdFx0PyAtdGhpcy5zaXplKCkud2lkdGggKiAodGhpcy5zY3JvbGxDb250cm9scy5wYWdlcygpIC0gMSkgKiB0aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldFxuXHRcdFx0XHRcdFx0OiAwXG5cdFx0XHRcdH1weCwke3RoaXMuc2Nyb2xsQ29udHJvbHMuaG9yaXpvbnRhbCgpID8gMCA6IHRoaXMuc2l6ZSgpLmhlaWdodCAqICh0aGlzLnNjcm9sbENvbnRyb2xzLnBhZ2VzKCkgLSAxKSAqIC10aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldH1weCwwKWA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
|
|
1
|
+
export * from './lib/font-loader';
|
|
2
|
+
export * from './lib/gltf-loader';
|
|
3
|
+
export * from './lib/loader';
|
|
4
|
+
export * from './lib/progress';
|
|
5
|
+
export * from './lib/texture-loader';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2ZvbnQtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdGYtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9ncmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0dXJlLWxvYWRlcic7XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { effect, signal, untracked } from '@angular/core';
|
|
2
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
3
|
+
import { FontLoader } from 'three-stdlib';
|
|
4
|
+
let fontLoader = null;
|
|
5
|
+
async function loadFontData(font) {
|
|
6
|
+
return typeof font === 'string' ? await (await fetch(font)).json() : font;
|
|
7
|
+
}
|
|
8
|
+
function parseFontData(fontData) {
|
|
9
|
+
if (!fontLoader) {
|
|
10
|
+
fontLoader = new FontLoader();
|
|
11
|
+
}
|
|
12
|
+
return fontLoader.parse(fontData);
|
|
13
|
+
}
|
|
14
|
+
const cache = new Map();
|
|
15
|
+
export function injectFont(input, { injector } = {}) {
|
|
16
|
+
return assertInjector(injectFont, injector, () => {
|
|
17
|
+
const font = signal(null);
|
|
18
|
+
effect(() => {
|
|
19
|
+
const fontInput = input();
|
|
20
|
+
if (cache.has(fontInput)) {
|
|
21
|
+
untracked(() => {
|
|
22
|
+
font.set(cache.get(fontInput));
|
|
23
|
+
});
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
loadFontData(input()).then((data) => {
|
|
27
|
+
const parsed = parseFontData(data);
|
|
28
|
+
cache.set(fontInput, parsed);
|
|
29
|
+
font.set(parsed);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return font.asReadonly();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
injectFont.preload = (input) => {
|
|
36
|
+
loadFontData(input()).then((data) => {
|
|
37
|
+
const parsed = parseFontData(data);
|
|
38
|
+
cache.set(input(), parsed);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
injectFont.clear = (input) => {
|
|
42
|
+
if (input) {
|
|
43
|
+
cache.delete(input());
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
cache.clear();
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL2ZvbnQtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFRLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXVCaEQsSUFBSSxVQUFVLEdBQXNCLElBQUksQ0FBQztBQUV6QyxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQW1CO0lBQzlDLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFrQjtJQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakIsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7QUFFN0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUEwQixFQUFFLEVBQUUsUUFBUSxLQUE4QixFQUFFO0lBQ2hHLE9BQU8sY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUV2QyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFFMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDUixDQUFDO1lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEVBQUU7SUFDbkQsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBMkIsRUFBRSxFQUFFO0lBQ2xELElBQUksS0FBSyxFQUFFLENBQUM7UUFDWCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDUCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0FBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBJbmplY3Rvciwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgRm9udCwgRm9udExvYWRlciB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4cG9ydCB0eXBlIEdseXBoID0ge1xuXHRfY2FjaGVkT3V0bGluZTogc3RyaW5nW107XG5cdGhhOiBudW1iZXI7XG5cdG86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZvbnREYXRhID0ge1xuXHRib3VuZGluZ0JveDoge1xuXHRcdHlNYXg6IG51bWJlcjtcblx0XHR5TWluOiBudW1iZXI7XG5cdH07XG5cdGZhbWlseU5hbWU6IHN0cmluZztcblx0Z2x5cGhzOiB7XG5cdFx0W2s6IHN0cmluZ106IEdseXBoO1xuXHR9O1xuXHRyZXNvbHV0aW9uOiBudW1iZXI7XG5cdHVuZGVybGluZVRoaWNrbmVzczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c0ZvbnRJbnB1dCA9IHN0cmluZyB8IEZvbnREYXRhO1xuXG5sZXQgZm9udExvYWRlcjogRm9udExvYWRlciB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkRm9udERhdGEoZm9udDogTmd0c0ZvbnRJbnB1dCk6IFByb21pc2U8Rm9udERhdGE+IHtcblx0cmV0dXJuIHR5cGVvZiBmb250ID09PSAnc3RyaW5nJyA/IGF3YWl0IChhd2FpdCBmZXRjaChmb250KSkuanNvbigpIDogZm9udDtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb250RGF0YShmb250RGF0YTogRm9udERhdGEpIHtcblx0aWYgKCFmb250TG9hZGVyKSB7XG5cdFx0Zm9udExvYWRlciA9IG5ldyBGb250TG9hZGVyKCk7XG5cdH1cblx0cmV0dXJuIGZvbnRMb2FkZXIucGFyc2UoZm9udERhdGEpO1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8Tmd0c0ZvbnRJbnB1dCwgRm9udD4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZvbnQoaW5wdXQ6ICgpID0+IE5ndHNGb250SW5wdXQsIHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSkge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Rm9udCwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBmb250ID0gc2lnbmFsPEZvbnQgfCBudWxsPihudWxsKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBmb250SW5wdXQgPSBpbnB1dCgpO1xuXG5cdFx0XHRpZiAoY2FjaGUuaGFzKGZvbnRJbnB1dCkpIHtcblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRmb250LnNldChjYWNoZS5nZXQoZm9udElucHV0KSBhcyBGb250KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bG9hZEZvbnREYXRhKGlucHV0KCkpLnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VGb250RGF0YShkYXRhKTtcblx0XHRcdFx0Y2FjaGUuc2V0KGZvbnRJbnB1dCwgcGFyc2VkKTtcblx0XHRcdFx0Zm9udC5zZXQocGFyc2VkKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvbnQuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuaW5qZWN0Rm9udC5wcmVsb2FkID0gKGlucHV0OiAoKSA9PiBOZ3RzRm9udElucHV0KSA9PiB7XG5cdGxvYWRGb250RGF0YShpbnB1dCgpKS50aGVuKChkYXRhKSA9PiB7XG5cdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VGb250RGF0YShkYXRhKTtcblx0XHRjYWNoZS5zZXQoaW5wdXQoKSwgcGFyc2VkKTtcblx0fSk7XG59O1xuaW5qZWN0Rm9udC5jbGVhciA9IChpbnB1dD86ICgpID0+IE5ndHNGb250SW5wdXQpID0+IHtcblx0aWYgKGlucHV0KSB7XG5cdFx0Y2FjaGUuZGVsZXRlKGlucHV0KCkpO1xuXHR9IGVsc2Uge1xuXHRcdGNhY2hlLmNsZWFyKCk7XG5cdH1cbn07XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { computed } from '@angular/core';
|
|
2
|
+
import { injectLoader } from 'angular-three';
|
|
3
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
4
|
+
import { DRACOLoader, GLTFLoader, MeshoptDecoder } from 'three-stdlib';
|
|
5
|
+
let dracoLoader = null;
|
|
6
|
+
let decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';
|
|
7
|
+
function _extensions(useDraco, useMeshOpt, extensions) {
|
|
8
|
+
return (loader) => {
|
|
9
|
+
if (extensions) {
|
|
10
|
+
extensions(loader);
|
|
11
|
+
}
|
|
12
|
+
if (useDraco) {
|
|
13
|
+
if (!dracoLoader) {
|
|
14
|
+
dracoLoader = new DRACOLoader();
|
|
15
|
+
}
|
|
16
|
+
dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);
|
|
17
|
+
loader.setDRACOLoader(dracoLoader);
|
|
18
|
+
}
|
|
19
|
+
if (useMeshOpt) {
|
|
20
|
+
loader.setMeshoptDecoder(typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function _injectGLTF(path, { useDraco = true, useMeshOpt = true, injector, extensions, onLoad, } = {}) {
|
|
25
|
+
return assertInjector(_injectGLTF, injector, () => {
|
|
26
|
+
const result = injectLoader(() => GLTFLoader, path, {
|
|
27
|
+
extensions: _extensions(useDraco, useMeshOpt, extensions),
|
|
28
|
+
// @ts-expect-error - we know the type of the data
|
|
29
|
+
onLoad,
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(result, 'scene', {
|
|
32
|
+
value: computed(() => {
|
|
33
|
+
const gltf = result();
|
|
34
|
+
if (!gltf)
|
|
35
|
+
return null;
|
|
36
|
+
return gltf.scene;
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
_injectGLTF.preload = (path, { useDraco = true, useMeshOpt = true, extensions, onLoad, } = {}) => {
|
|
43
|
+
injectLoader.preload(() => GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions),
|
|
44
|
+
// @ts-expect-error - we know the type of the data
|
|
45
|
+
onLoad);
|
|
46
|
+
};
|
|
47
|
+
_injectGLTF.setDecoderPath = (path) => {
|
|
48
|
+
decoderPath = path;
|
|
49
|
+
};
|
|
50
|
+
export const injectGLTF = _injectGLTF;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL2dsdGYtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0UsSUFBSSxXQUFXLEdBQXVCLElBQUksQ0FBQztBQUMzQyxJQUFJLFdBQVcsR0FBRyx5REFBeUQsQ0FBQztBQUU1RSxTQUFTLFdBQVcsQ0FBQyxRQUEwQixFQUFFLFVBQW1CLEVBQUUsVUFBeUM7SUFDOUcsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ3pCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEIsVUFBVSxDQUFDLE1BQW9CLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUVELFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pGLE1BQXFCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBcUIsQ0FBQyxpQkFBaUIsQ0FDdkMsT0FBTyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUN4RSxDQUFDO1FBQ0gsQ0FBQztJQUNGLENBQUMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbkIsSUFBZ0IsRUFDaEIsRUFDQyxRQUFRLEdBQUcsSUFBSSxFQUNmLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxNQU9ILEVBQUU7SUFFTixPQUFPLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtZQUNuRCxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1lBQ3pELGtEQUFrRDtZQUNsRCxNQUFNO1NBQ04sQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLEVBQXFCLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDLENBQXlHLENBQUM7QUFDNUcsQ0FBQztBQUVELFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FDckIsSUFBZ0IsRUFDaEIsRUFDQyxRQUFRLEdBQUcsSUFBSSxFQUNmLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFVBQVUsRUFDVixNQUFNLE1BTUgsRUFBRSxFQUNMLEVBQUU7SUFDSCxZQUFZLENBQUMsT0FBTyxDQUNuQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQ2hCLElBQUksRUFDSixXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQVE7SUFDcEQsa0RBQWtEO0lBQ2xELE1BQU0sQ0FDTixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQzdDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFtQixXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0b3IsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0TG9hZGVyLCBOZ3RMb2FkZXJSZXN1bHRzLCBOZ3RPYmplY3RNYXAgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgRFJBQ09Mb2FkZXIsIEdMVEYsIEdMVEZMb2FkZXIsIE1lc2hvcHREZWNvZGVyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxubGV0IGRyYWNvTG9hZGVyOiBEUkFDT0xvYWRlciB8IG51bGwgPSBudWxsO1xubGV0IGRlY29kZXJQYXRoID0gJ2h0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2RyYWNvL3ZlcnNpb25lZC9kZWNvZGVycy8xLjUuNS8nO1xuXG5mdW5jdGlvbiBfZXh0ZW5zaW9ucyh1c2VEcmFjbzogYm9vbGVhbiB8IHN0cmluZywgdXNlTWVzaE9wdDogYm9vbGVhbiwgZXh0ZW5zaW9ucz86IChsb2FkZXI6IEdMVEZMb2FkZXIpID0+IHZvaWQpIHtcblx0cmV0dXJuIChsb2FkZXI6IExvYWRlcikgPT4ge1xuXHRcdGlmIChleHRlbnNpb25zKSB7XG5cdFx0XHRleHRlbnNpb25zKGxvYWRlciBhcyBHTFRGTG9hZGVyKTtcblx0XHR9XG5cblx0XHRpZiAodXNlRHJhY28pIHtcblx0XHRcdGlmICghZHJhY29Mb2FkZXIpIHtcblx0XHRcdFx0ZHJhY29Mb2FkZXIgPSBuZXcgRFJBQ09Mb2FkZXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZHJhY29Mb2FkZXIuc2V0RGVjb2RlclBhdGgodHlwZW9mIHVzZURyYWNvID09PSAnc3RyaW5nJyA/IHVzZURyYWNvIDogZGVjb2RlclBhdGgpO1xuXHRcdFx0KGxvYWRlciBhcyBHTFRGTG9hZGVyKS5zZXREUkFDT0xvYWRlcihkcmFjb0xvYWRlcik7XG5cdFx0fVxuXHRcdGlmICh1c2VNZXNoT3B0KSB7XG5cdFx0XHQobG9hZGVyIGFzIEdMVEZMb2FkZXIpLnNldE1lc2hvcHREZWNvZGVyKFxuXHRcdFx0XHR0eXBlb2YgTWVzaG9wdERlY29kZXIgPT09ICdmdW5jdGlvbicgPyBNZXNob3B0RGVjb2RlcigpIDogTWVzaG9wdERlY29kZXIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2luamVjdEdMVEY8VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG5cdHBhdGg6ICgpID0+IFRVcmwsXG5cdHtcblx0XHR1c2VEcmFjbyA9IHRydWUsXG5cdFx0dXNlTWVzaE9wdCA9IHRydWUsXG5cdFx0aW5qZWN0b3IsXG5cdFx0ZXh0ZW5zaW9ucyxcblx0XHRvbkxvYWQsXG5cdH06IHtcblx0XHR1c2VEcmFjbz86IGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0dXNlTWVzaE9wdD86IGJvb2xlYW47XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0XHRleHRlbnNpb25zPzogKGxvYWRlcjogR0xURkxvYWRlcikgPT4gdm9pZDtcblx0XHRvbkxvYWQ/OiAoZGF0YTogTmd0TG9hZGVyUmVzdWx0czxUVXJsLCBHTFRGICYgTmd0T2JqZWN0TWFwPikgPT4gdm9pZDtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgR0xURiAmIE5ndE9iamVjdE1hcD4gfCBudWxsPiAmIHsgc2NlbmU6IFNpZ25hbDxHTFRGWydzY2VuZSddIHwgbnVsbD4gfSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0R0xURiwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCByZXN1bHQgPSBpbmplY3RMb2FkZXIoKCkgPT4gR0xURkxvYWRlciwgcGF0aCwge1xuXHRcdFx0ZXh0ZW5zaW9uczogX2V4dGVuc2lvbnModXNlRHJhY28sIHVzZU1lc2hPcHQsIGV4dGVuc2lvbnMpLFxuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGRhdGFcblx0XHRcdG9uTG9hZCxcblx0XHR9KTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICdzY2VuZScsIHtcblx0XHRcdHZhbHVlOiBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGdsdGYgPSByZXN1bHQoKSBhcyB1bmtub3duIGFzIEdMVEY7XG5cdFx0XHRcdGlmICghZ2x0ZikgcmV0dXJuIG51bGw7XG5cdFx0XHRcdHJldHVybiBnbHRmLnNjZW5lO1xuXHRcdFx0fSksXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KSBhcyBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBHTFRGICYgTmd0T2JqZWN0TWFwPiB8IG51bGw+ICYgeyBzY2VuZTogU2lnbmFsPEdMVEZbJ3NjZW5lJ10gfCBudWxsPiB9O1xufVxuXG5faW5qZWN0R0xURi5wcmVsb2FkID0gPFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRwYXRoOiAoKSA9PiBUVXJsLFxuXHR7XG5cdFx0dXNlRHJhY28gPSB0cnVlLFxuXHRcdHVzZU1lc2hPcHQgPSB0cnVlLFxuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Mb2FkLFxuXHR9OiB7XG5cdFx0dXNlRHJhY28/OiBib29sZWFuIHwgc3RyaW5nO1xuXHRcdHVzZU1lc2hPcHQ/OiBib29sZWFuO1xuXHRcdGV4dGVuc2lvbnM/OiAobG9hZGVyOiBHTFRGTG9hZGVyKSA9PiB2b2lkO1xuXHRcdG9uTG9hZD86IChkYXRhOiBOZ3RMb2FkZXJSZXN1bHRzPFRVcmwsIEdMVEYgJiBOZ3RPYmplY3RNYXA+KSA9PiB2b2lkO1xuXHR9ID0ge30sXG4pID0+IHtcblx0aW5qZWN0TG9hZGVyLnByZWxvYWQoXG5cdFx0KCkgPT4gR0xURkxvYWRlcixcblx0XHRwYXRoLFxuXHRcdF9leHRlbnNpb25zKHVzZURyYWNvLCB1c2VNZXNoT3B0LCBleHRlbnNpb25zKSBhcyBhbnksXG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGRhdGFcblx0XHRvbkxvYWQsXG5cdCk7XG59O1xuXG5faW5qZWN0R0xURi5zZXREZWNvZGVyUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcblx0ZGVjb2RlclBhdGggPSBwYXRoO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c0dMVEZMb2FkZXIgPSB0eXBlb2YgX2luamVjdEdMVEY7XG5leHBvcnQgY29uc3QgaW5qZWN0R0xURjogTmd0c0dMVEZMb2FkZXIgPSBfaW5qZWN0R0xURjtcbiJdfQ==
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, signal, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { pick } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { injectProgress } from './progress';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const defaultDataInterpolation = (p) => `Loading ${p.toFixed(2)}%`;
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
containerClass: '',
|
|
9
|
+
innerClass: '',
|
|
10
|
+
barClass: '',
|
|
11
|
+
dataClass: '',
|
|
12
|
+
dataInterpolation: defaultDataInterpolation,
|
|
13
|
+
initialState: (value) => value,
|
|
14
|
+
};
|
|
15
|
+
export class NgtsLoader {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.progressState = injectProgress();
|
|
18
|
+
this.active = computed(() => this.progressState().active);
|
|
19
|
+
this.progress = computed(() => this.progressState().progress);
|
|
20
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
21
|
+
this.containerClass = pick(this.options, 'containerClass');
|
|
22
|
+
this.innerClass = pick(this.options, 'innerClass');
|
|
23
|
+
this.barClass = pick(this.options, 'barClass');
|
|
24
|
+
this.dataClass = pick(this.options, 'dataClass');
|
|
25
|
+
this.initialState = pick(this.options, 'initialState');
|
|
26
|
+
this.dataInterpolation = pick(this.options, 'dataInterpolation');
|
|
27
|
+
this.progressSpanRef = viewChild('progressSpanRef');
|
|
28
|
+
this.shown = signal(this.initialState()(this.active()));
|
|
29
|
+
this.setShown();
|
|
30
|
+
this.updateProgress();
|
|
31
|
+
}
|
|
32
|
+
setShown() {
|
|
33
|
+
effect((onCleanup) => {
|
|
34
|
+
const [active, lastShown] = [this.active(), untracked(this.shown)];
|
|
35
|
+
if (lastShown !== active) {
|
|
36
|
+
const timeoutId = setTimeout(() => {
|
|
37
|
+
this.shown.set(active);
|
|
38
|
+
}, 300);
|
|
39
|
+
onCleanup(() => clearTimeout(timeoutId));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
updateProgress() {
|
|
44
|
+
let progressRef = 0;
|
|
45
|
+
let rafId;
|
|
46
|
+
effect((onCleanup) => {
|
|
47
|
+
const [dataInterpolation, progress] = [this.dataInterpolation(), this.progress()];
|
|
48
|
+
const updateProgress = () => {
|
|
49
|
+
const progressSpan = this.progressSpanRef()?.nativeElement;
|
|
50
|
+
if (!progressSpan)
|
|
51
|
+
return;
|
|
52
|
+
progressRef += (progress - progressRef) / 2;
|
|
53
|
+
if (progressRef > 0.95 * progress || progress === 100)
|
|
54
|
+
progressRef = progress;
|
|
55
|
+
progressSpan.innerText = dataInterpolation(progressRef);
|
|
56
|
+
if (progressRef < progress) {
|
|
57
|
+
rafId = requestAnimationFrame(updateProgress);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
updateProgress();
|
|
61
|
+
onCleanup(() => cancelAnimationFrame(rafId));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLoader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsLoader, isStandalone: true, selector: "ngts-loader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "progressSpanRef", first: true, predicate: ["progressSpanRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
66
|
+
@if (shown()) {
|
|
67
|
+
<div
|
|
68
|
+
class="ngts-loader-container"
|
|
69
|
+
[class]="containerClass() || ''"
|
|
70
|
+
[style.--ngts-loader-container-opacity]="active() ? 1 : 0"
|
|
71
|
+
>
|
|
72
|
+
<div>
|
|
73
|
+
<div class="ngts-loader-inner" [class]="innerClass() || ''">
|
|
74
|
+
<div
|
|
75
|
+
class="ngts-loader-bar"
|
|
76
|
+
[class]="barClass() || ''"
|
|
77
|
+
[style.--ngts-loader-bar-scale]="progress() / 100"
|
|
78
|
+
></div>
|
|
79
|
+
<span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
}
|
|
84
|
+
`, isInline: true, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLoader, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'ngts-loader', standalone: true, template: `
|
|
89
|
+
@if (shown()) {
|
|
90
|
+
<div
|
|
91
|
+
class="ngts-loader-container"
|
|
92
|
+
[class]="containerClass() || ''"
|
|
93
|
+
[style.--ngts-loader-container-opacity]="active() ? 1 : 0"
|
|
94
|
+
>
|
|
95
|
+
<div>
|
|
96
|
+
<div class="ngts-loader-inner" [class]="innerClass() || ''">
|
|
97
|
+
<div
|
|
98
|
+
class="ngts-loader-bar"
|
|
99
|
+
[class]="barClass() || ''"
|
|
100
|
+
[style.--ngts-loader-bar-scale]="progress() / 100"
|
|
101
|
+
></div>
|
|
102
|
+
<span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
}
|
|
107
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"] }]
|
|
108
|
+
}], ctorParameters: () => [] });
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2xvYWRlcnMvc3JjL2xpYi9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFNUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFXM0UsTUFBTSxjQUFjLEdBQXNCO0lBQ3pDLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLEVBQUU7SUFDWixTQUFTLEVBQUUsRUFBRTtJQUNiLGlCQUFpQixFQUFFLHdCQUF3QjtJQUMzQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Q0FDOUIsQ0FBQztBQTRCRixNQUFNLE9BQU8sVUFBVTtJQW1CdEI7UUFsQlEsa0JBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUV6QyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6RCxZQUFPLEdBQUcsS0FBSyxD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QUM7OEdBdkRXLFVBQVU7a0dBQVYsVUFBVSxxVkF2Qlo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQlQ7OzJGQUlXLFVBQVU7a0JBMUJ0QixTQUFTOytCQUNDLGFBQWEsY0FDWCxJQUFJLFlBQ047Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQlQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBpbmplY3RQcm9ncmVzcyB9IGZyb20gJy4vcHJvZ3Jlc3MnO1xuXG5jb25zdCBkZWZhdWx0RGF0YUludGVycG9sYXRpb24gPSAocDogbnVtYmVyKSA9PiBgTG9hZGluZyAke3AudG9GaXhlZCgyKX0lYDtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTG9hZGVyT3B0aW9ucyB7XG5cdGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuXHRpbm5lckNsYXNzPzogc3RyaW5nO1xuXHRiYXJDbGFzcz86IHN0cmluZztcblx0ZGF0YUNsYXNzPzogc3RyaW5nO1xuXHRkYXRhSW50ZXJwb2xhdGlvbjogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcblx0aW5pdGlhbFN0YXRlOiAodmFsdWU6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTG9hZGVyT3B0aW9ucyA9IHtcblx0Y29udGFpbmVyQ2xhc3M6ICcnLFxuXHRpbm5lckNsYXNzOiAnJyxcblx0YmFyQ2xhc3M6ICcnLFxuXHRkYXRhQ2xhc3M6ICcnLFxuXHRkYXRhSW50ZXJwb2xhdGlvbjogZGVmYXVsdERhdGFJbnRlcnBvbGF0aW9uLFxuXHRpbml0aWFsU3RhdGU6ICh2YWx1ZSkgPT4gdmFsdWUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWxvYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmIChzaG93bigpKSB7XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwibmd0cy1sb2FkZXItY29udGFpbmVyXCJcblx0XHRcdFx0W2NsYXNzXT1cImNvbnRhaW5lckNsYXNzKCkgfHwgJydcIlxuXHRcdFx0XHRbc3R5bGUuLS1uZ3RzLWxvYWRlci1jb250YWluZXItb3BhY2l0eV09XCJhY3RpdmUoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmd0cy1sb2FkZXItaW5uZXJcIiBbY2xhc3NdPVwiaW5uZXJDbGFzcygpIHx8ICcnXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwibmd0cy1sb2FkZXItYmFyXCJcblx0XHRcdFx0XHRcdFx0W2NsYXNzXT1cImJhckNsYXNzKCkgfHwgJydcIlxuXHRcdFx0XHRcdFx0XHRbc3R5bGUuLS1uZ3RzLWxvYWRlci1iYXItc2NhbGVdPVwicHJvZ3Jlc3MoKSAvIDEwMFwiXG5cdFx0XHRcdFx0XHQ+PC9kaXY+XG5cdFx0XHRcdFx0XHQ8c3BhbiAjcHJvZ3Jlc3NTcGFuUmVmIGNsYXNzPVwibmd0cy1sb2FkZXItZGF0YVwiIFtjbGFzc109XCJkYXRhQ2xhc3MoKSB8fCAnJ1wiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHR9XG5cdGAsXG5cdHN0eWxlVXJsczogWycuL2xvYWRlci5jc3MnXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNMb2FkZXIge1xuXHRwcml2YXRlIHByb2dyZXNzU3RhdGUgPSBpbmplY3RQcm9ncmVzcygpO1xuXG5cdGFjdGl2ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvZ3Jlc3NTdGF0ZSgpLmFjdGl2ZSk7XG5cdHByb2dyZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9ncmVzc1N0YXRlKCkucHJvZ3Jlc3MpO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRjb250YWluZXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29udGFpbmVyQ2xhc3MnKTtcblx0aW5uZXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnaW5uZXJDbGFzcycpO1xuXHRiYXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnYmFyQ2xhc3MnKTtcblx0ZGF0YUNsYXNzID0gcGljayh0aGlzLm9wdGlvbnMsICdkYXRhQ2xhc3MnKTtcblx0aW5pdGlhbFN0YXRlID0gcGljayh0aGlzLm9wdGlvbnMsICdpbml0aWFsU3RhdGUnKTtcblx0ZGF0YUludGVycG9sYXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RhdGFJbnRlcnBvbGF0aW9uJyk7XG5cblx0cHJvZ3Jlc3NTcGFuUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50Pj4oJ3Byb2dyZXNzU3BhblJlZicpO1xuXG5cdHNob3duID0gc2lnbmFsKHRoaXMuaW5pdGlhbFN0YXRlKCkodGhpcy5hY3RpdmUoKSkpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0U2hvd24oKTtcblx0XHR0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFNob3duKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbYWN0aXZlLCBsYXN0U2hvd25dID0gW3RoaXMuYWN0aXZlKCksIHVudHJhY2tlZCh0aGlzLnNob3duKV07XG5cdFx0XHRpZiAobGFzdFNob3duICE9PSBhY3RpdmUpIHtcblx0XHRcdFx0Y29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zaG93bi5zZXQoYWN0aXZlKTtcblx0XHRcdFx0fSwgMzAwKTtcblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlUHJvZ3Jlc3MoKSB7XG5cdFx0bGV0IHByb2dyZXNzUmVmID0gMDtcblx0XHRsZXQgcmFmSWQ6IFJldHVyblR5cGU8dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT47XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW2RhdGFJbnRlcnBvbGF0aW9uLCBwcm9ncmVzc10gPSBbdGhpcy5kYXRhSW50ZXJwb2xhdGlvbigpLCB0aGlzLnByb2dyZXNzKCldO1xuXHRcdFx0Y29uc3QgdXBkYXRlUHJvZ3Jlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb2dyZXNzU3BhbiA9IHRoaXMucHJvZ3Jlc3NTcGFuUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghcHJvZ3Jlc3NTcGFuKSByZXR1cm47XG5cdFx0XHRcdHByb2dyZXNzUmVmICs9IChwcm9ncmVzcyAtIHByb2dyZXNzUmVmKSAvIDI7XG5cdFx0XHRcdGlmIChwcm9ncmVzc1JlZiA+IDAuOTUgKiBwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PT0gMTAwKSBwcm9ncmVzc1JlZiA9IHByb2dyZXNzO1xuXHRcdFx0XHRwcm9ncmVzc1NwYW4uaW5uZXJUZXh0ID0gZGF0YUludGVycG9sYXRpb24ocHJvZ3Jlc3NSZWYpO1xuXHRcdFx0XHRpZiAocHJvZ3Jlc3NSZWYgPCBwcm9ncmVzcykge1xuXHRcdFx0XHRcdHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVByb2dyZXNzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHVwZGF0ZVByb2dyZXNzKCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|