angular-three-soba 2.0.0-beta.26 → 2.0.0-beta.261
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 +278 -2
- package/abstractions/index.d.ts +11 -6
- package/abstractions/lib/catmull-rom-line.d.ts +648 -0
- package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
- package/abstractions/lib/edges.d.ts +850 -0
- package/abstractions/lib/gradient-texture.d.ts +24 -0
- package/abstractions/lib/grid.d.ts +339 -0
- package/abstractions/lib/helper.d.ts +25 -0
- package/abstractions/lib/line.d.ts +41 -0
- package/abstractions/lib/prism-geometry.d.ts +30 -0
- package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
- package/abstractions/lib/text-3d.d.ts +338 -0
- package/abstractions/lib/text.d.ts +55 -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 +95 -2
- package/controls/index.d.ts +2 -1
- package/controls/lib/camera-controls.d.ts +31 -0
- package/controls/lib/orbit-controls.d.ts +38 -0
- package/esm2022/abstractions/index.mjs +12 -7
- 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 +80 -0
- package/esm2022/abstractions/lib/line.mjs +123 -0
- package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
- package/esm2022/abstractions/lib/text-3d.mjs +98 -0
- package/esm2022/abstractions/lib/text.mjs +92 -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 +3 -2
- package/esm2022/controls/lib/camera-controls.mjs +127 -0
- package/esm2022/controls/lib/orbit-controls.mjs +126 -0
- package/esm2022/loaders/index.mjs +6 -5
- package/esm2022/loaders/lib/font-loader.mjs +49 -0
- package/esm2022/loaders/lib/gltf-loader.mjs +33 -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 +7 -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/misc/index.mjs +10 -14
- package/esm2022/misc/lib/animations.mjs +74 -0
- package/esm2022/misc/lib/bake-shadows.mjs +26 -0
- package/esm2022/misc/lib/computed-attribute.mjs +56 -0
- package/esm2022/misc/lib/constants.mjs +5 -0
- package/esm2022/misc/lib/decal.mjs +135 -0
- package/esm2022/misc/lib/deprecated.mjs +15 -0
- package/esm2022/misc/lib/depth-buffer.mjs +39 -0
- package/esm2022/misc/lib/fbo.mjs +89 -0
- package/esm2022/misc/lib/sampler.mjs +121 -0
- package/esm2022/shaders/index.mjs +3 -18
- package/esm2022/shaders/lib/grid-material.mjs +81 -0
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -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 +113 -0
- package/esm2022/staging/lib/contact-shadows.mjs +201 -0
- package/esm2022/staging/lib/environment.mjs +465 -0
- package/esm2022/staging/lib/float.mjs +60 -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 +85 -0
- package/esm2022/staging/lib/randomized-lights.mjs +104 -0
- package/esm2022/staging/lib/render-texture.mjs +213 -0
- package/esm2022/staging/lib/sky.mjs +86 -0
- package/esm2022/staging/lib/spot-light.mjs +450 -0
- package/esm2022/staging/lib/stage.mjs +236 -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 +739 -718
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +260 -307
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +174 -110
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +151 -129
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +511 -764
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +405 -2149
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- 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 +21 -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 +6 -6
- package/materials/lib/custom-shader-material.d.ts +19 -0
- package/materials/lib/mesh-distort-material.d.ts +18 -0
- package/materials/lib/mesh-reflector-material.d.ts +50 -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/metadata.json +1 -1
- package/misc/README.md +217 -2
- package/misc/index.d.ts +9 -13
- package/misc/lib/animations.d.ts +14 -0
- package/misc/lib/computed-attribute.d.ts +69 -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 +47 -0
- package/misc/lib/sampler.d.ts +73 -0
- package/package.json +60 -38
- package/shaders/index.d.ts +2 -17
- package/shaders/lib/grid-material.d.ts +69 -0
- package/shaders/lib/mesh-refraction-material.d.ts +11 -0
- package/staging/README.md +472 -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 +422 -0
- package/staging/lib/contact-shadows.d.ts +45 -0
- package/staging/lib/environment.d.ts +159 -0
- package/staging/lib/float.d.ts +19 -0
- package/staging/lib/lightformer.d.ts +334 -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 +120 -0
- package/staging/lib/stage.d.ts +376 -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 -84
- 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 -172
- package/esm2022/cameras/camera/camera-content.mjs +0 -21
- 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 -185
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
- package/esm2022/gizmos/index.mjs +0 -4
- 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 -52
- 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 -50
- 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/angular-three-soba-performances.mjs +0 -5
- package/esm2022/performances/index.mjs +0 -8
- package/esm2022/performances/instances/instances.mjs +0 -220
- package/esm2022/performances/instances/position-mesh.mjs +0 -52
- package/esm2022/performances/points/points-input.mjs +0 -64
- package/esm2022/performances/points/points.mjs +0 -326
- 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 -69
- 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 -165
- 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 -106
- 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 -389
- package/esm2022/staging/stars/stars.mjs +0 -147
- package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
- package/esm2022/staging/wireframe/wireframe.mjs +0 -228
- package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
- package/esm2022/utils/content/content.mjs +0 -15
- package/esm2022/utils/index.mjs +0 -2
- package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
- package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
- package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
- package/fesm2022/angular-three-soba-performances.mjs +0 -956
- package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
- package/fesm2022/angular-three-soba-utils.mjs +0 -22
- package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
- package/gizmos/README.md +0 -3
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
- package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
- package/gizmos/index.d.ts +0 -3
- 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/README.md +0 -3
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
- package/performances/adaptive-events/adaptive-events.d.ts +0 -9
- package/performances/index.d.ts +0 -7
- package/performances/instances/instances.d.ts +0 -79
- package/performances/instances/position-mesh.d.ts +0 -10
- 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,36 @@
|
|
|
1
|
+
import { ElementRef, TemplateRef } from '@angular/core';
|
|
2
|
+
import { NgtPerspectiveCamera } from 'angular-three';
|
|
3
|
+
import { Group, PerspectiveCamera, Texture } from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface NgtsPerspectiveCameraOptions extends Partial<NgtPerspectiveCamera> {
|
|
6
|
+
/** Registers the camera as the system default, fiber will start rendering with it */
|
|
7
|
+
makeDefault?: boolean;
|
|
8
|
+
/** Making it manual will stop responsiveness and you have to calculate aspect ratio yourself. */
|
|
9
|
+
manual?: boolean;
|
|
10
|
+
/** Number of frames to render, Infinity */
|
|
11
|
+
frames: number;
|
|
12
|
+
/** Resolution of the FBO, 256 */
|
|
13
|
+
resolution: number;
|
|
14
|
+
/** Optional environment map for functional use */
|
|
15
|
+
envMap?: Texture;
|
|
16
|
+
}
|
|
17
|
+
export declare class NgtsPerspectiveCamera {
|
|
18
|
+
options: import("@angular/core").InputSignalWithTransform<NgtsPerspectiveCameraOptions, "" | Partial<NgtsPerspectiveCameraOptions>>;
|
|
19
|
+
parameters: import("@angular/core").Signal<Omit<NgtsPerspectiveCameraOptions, "resolution" | "envMap" | "frames" | "makeDefault" | "manual">>;
|
|
20
|
+
content: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
21
|
+
cameraContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
22
|
+
cameraRef: import("@angular/core").Signal<ElementRef<PerspectiveCamera>>;
|
|
23
|
+
groupRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
|
|
24
|
+
private autoEffect;
|
|
25
|
+
private store;
|
|
26
|
+
private camera;
|
|
27
|
+
private size;
|
|
28
|
+
private manual;
|
|
29
|
+
private makeDefault;
|
|
30
|
+
private resolution;
|
|
31
|
+
private fbo;
|
|
32
|
+
texture: import("@angular/core").Signal<Texture>;
|
|
33
|
+
constructor();
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsPerspectiveCamera, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsPerspectiveCamera, "ngts-perspective-camera", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, ["content", "cameraContent"], never, true, never>;
|
|
36
|
+
}
|
package/controls/README.md
CHANGED
|
@@ -1,3 +1,96 @@
|
|
|
1
|
-
# angular-three-soba/controls
|
|
1
|
+
# `angular-three-soba/controls`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This secondary entry point includes controls for manipulating the camera in your scene. It requires `camera-controls` as an additional dependency.
|
|
4
|
+
|
|
5
|
+
| Package | Description |
|
|
6
|
+
| ----------------- | -------------------------------- |
|
|
7
|
+
| `camera-controls` | required by `NgtsCameraControls` |
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install camera-controls
|
|
11
|
+
# yarn add camera-controls
|
|
12
|
+
# pnpm add camera-controls
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## TOC
|
|
16
|
+
|
|
17
|
+
- [NgtsCameraControls](#ngtscameracontrols)
|
|
18
|
+
- [NgtsOrbitControls](#ngtsorbitcontrols)
|
|
19
|
+
|
|
20
|
+
## NgtsCameraControls
|
|
21
|
+
|
|
22
|
+
A component that provides advanced camera controls based on the `camera-controls` library. It allows you to manipulate the camera's position, rotation, and other properties through various interactions.
|
|
23
|
+
|
|
24
|
+
### Object Input (`NgtsCameraControlsOptions`)
|
|
25
|
+
|
|
26
|
+
| Property | Description | Default Value |
|
|
27
|
+
| ----------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
28
|
+
| camera | An instance of `NgtCamera` that the controls will manipulate. | `NgtStore.camera` |
|
|
29
|
+
| domElement | The HTML element that the controls will listen for events on. | `NgtStore.gl.domElement` |
|
|
30
|
+
| makeDefault | A boolean flag indicating whether these controls should be set as the default controls in the store. | `false` |
|
|
31
|
+
| events | A boolean flag indicating whether to enable or disable event listeners for the controls. | `false` |
|
|
32
|
+
| regress | A boolean flag indicating whether to enable or disable performance regression for the controls. | `false` |
|
|
33
|
+
|
|
34
|
+
Other options are available in the `camera-controls` library. For more information, see the [official documentation](https://github.com/yomotsu/camera-controls?tab=readme-ov-file)
|
|
35
|
+
|
|
36
|
+
### Usage
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
@Component({
|
|
40
|
+
standalone: true,
|
|
41
|
+
template: `
|
|
42
|
+
<ngt-mesh>
|
|
43
|
+
<ngt-box-geometry />
|
|
44
|
+
<ngt-mesh-basic-material color="red" [wireframe]="true" />
|
|
45
|
+
</ngt-mesh>
|
|
46
|
+
|
|
47
|
+
<ngt-grid-helper *args="[50, 50]" [position]="[0, -1, 0]" />
|
|
48
|
+
|
|
49
|
+
<ngts-camera-controls />
|
|
50
|
+
`,
|
|
51
|
+
imports: [NgtsCameraControls, NgtArgs],
|
|
52
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
53
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
54
|
+
})
|
|
55
|
+
class DefaultCameraControlsStory {
|
|
56
|
+
rotate = input<keyof typeof rotations | 'none'>('none');
|
|
57
|
+
|
|
58
|
+
cameraControlsRef = viewChild.required(NgtsCameraControls);
|
|
59
|
+
|
|
60
|
+
constructor() {
|
|
61
|
+
effect(() => {
|
|
62
|
+
const [rotate, controls] = [this.rotate(), this.cameraControlsRef().controls()];
|
|
63
|
+
if (rotate !== 'none') {
|
|
64
|
+
const [theta, phi, animate] = rotations[rotate];
|
|
65
|
+
void controls.rotate(theta, phi, animate);
|
|
66
|
+
} else {
|
|
67
|
+
void controls.reset(true);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## NgtsOrbitControls
|
|
75
|
+
|
|
76
|
+
A component that provides orbit controls for rotating the camera around a target point. It is based on the OrbitControls class from the `three-stdlib` library.
|
|
77
|
+
|
|
78
|
+
### Object Input (`NgtsOrbitControlsOptions`)
|
|
79
|
+
|
|
80
|
+
| Property | Description | Default Value |
|
|
81
|
+
| ------------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
82
|
+
| camera | An instance of `NgtCamera` that the controls will manipulate. | `NgtStore.camera` |
|
|
83
|
+
| domElement | The HTML element that the controls will listen for events on. | `NgtStore.gl.domElement` |
|
|
84
|
+
| target | The coordinates that the camera will orbit around. | `[0, 0, 0]` |
|
|
85
|
+
| makeDefault | A boolean flag indicating whether these controls should be set as the default controls in the store. | `false` |
|
|
86
|
+
| regress | A boolean flag indicating whether to enable or disable performance regression for the controls. | `false` |
|
|
87
|
+
| enableDamping | A boolean flag indicating whether to enable or disable damping (smoothness) of the camera movement. | `true` |
|
|
88
|
+
| keyEvents | A boolean flag or an HTML element indicating whether to enable keyboard events for the controls. | `false` |
|
|
89
|
+
|
|
90
|
+
Other options can pass through to `OrbitControls`.
|
|
91
|
+
|
|
92
|
+
### Usage
|
|
93
|
+
|
|
94
|
+
```html
|
|
95
|
+
<ngts-orbit-controls [options]="{ autoRotate: true }" />
|
|
96
|
+
```
|
package/controls/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './lib/camera-controls';
|
|
2
|
+
export * from './lib/orbit-controls';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { NgtCamera } from 'angular-three';
|
|
2
|
+
import CameraControls from 'camera-controls';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface NgtsCameraControlsOptions {
|
|
5
|
+
camera?: NgtCamera;
|
|
6
|
+
domElement?: HTMLElement;
|
|
7
|
+
makeDefault: boolean;
|
|
8
|
+
events: boolean;
|
|
9
|
+
regress: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class NgtsCameraControls {
|
|
12
|
+
options: import("@angular/core").InputSignalWithTransform<Partial<CameraControls> & NgtsCameraControlsOptions, "" | Partial<Partial<CameraControls> & NgtsCameraControlsOptions>>;
|
|
13
|
+
parameters: import("@angular/core").Signal<Omit<Partial<CameraControls> & NgtsCameraControlsOptions, "camera" | "makeDefault" | "regress" | "domElement">>;
|
|
14
|
+
changed: import("@angular/core").OutputEmitterRef<any>;
|
|
15
|
+
started: import("@angular/core").OutputEmitterRef<any>;
|
|
16
|
+
ended: import("@angular/core").OutputEmitterRef<any>;
|
|
17
|
+
private store;
|
|
18
|
+
private invalidate;
|
|
19
|
+
private performanceRegress;
|
|
20
|
+
private defaultCamera;
|
|
21
|
+
private glDomElement;
|
|
22
|
+
private eventsElement;
|
|
23
|
+
private camera;
|
|
24
|
+
private regress;
|
|
25
|
+
private domElement;
|
|
26
|
+
private makeDefault;
|
|
27
|
+
controls: import("@angular/core").Signal<CameraControls>;
|
|
28
|
+
constructor();
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCameraControls, never>;
|
|
30
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCameraControls, "ngts-camera-controls", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "started": "started"; "ended": "ended"; }, never, ["*"], true, never>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NgtVector3 } from 'angular-three';
|
|
2
|
+
import { Camera, Event } from 'three';
|
|
3
|
+
import { OrbitControls } from 'three-stdlib';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface NgtsOrbitControlsOptions {
|
|
6
|
+
camera?: Camera;
|
|
7
|
+
domElement?: HTMLElement;
|
|
8
|
+
target?: NgtVector3;
|
|
9
|
+
makeDefault: boolean;
|
|
10
|
+
regress: boolean;
|
|
11
|
+
enableDamping: boolean;
|
|
12
|
+
keyEvents: boolean | HTMLElement;
|
|
13
|
+
}
|
|
14
|
+
export declare class NgtsOrbitControls {
|
|
15
|
+
options: import("@angular/core").InputSignalWithTransform<Partial<OrbitControls> & NgtsOrbitControlsOptions, "" | Partial<Partial<OrbitControls> & NgtsOrbitControlsOptions>>;
|
|
16
|
+
parameters: import("@angular/core").Signal<Omit<Partial<OrbitControls> & NgtsOrbitControlsOptions, "camera" | "makeDefault" | "regress" | "domElement" | "enableDamping" | "keyEvents">>;
|
|
17
|
+
changed: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
|
|
18
|
+
started: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
|
|
19
|
+
ended: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
|
|
20
|
+
private store;
|
|
21
|
+
private invalidate;
|
|
22
|
+
private performanceRegress;
|
|
23
|
+
private defaultCamera;
|
|
24
|
+
private glDomElement;
|
|
25
|
+
private camera;
|
|
26
|
+
private regress;
|
|
27
|
+
private keyEvents;
|
|
28
|
+
private domElement;
|
|
29
|
+
private makeDefault;
|
|
30
|
+
controls: import("@angular/core").Signal<OrbitControls>;
|
|
31
|
+
protected enableDamping: import("@angular/core").Signal<boolean>;
|
|
32
|
+
constructor();
|
|
33
|
+
private connectElement;
|
|
34
|
+
private makeControlsDefault;
|
|
35
|
+
private setEvents;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsOrbitControls, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsOrbitControls, "ngts-orbit-controls", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "started": "started"; "ended": "ended"; }, never, ["*"], true, never>;
|
|
38
|
+
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
|
|
1
|
+
export * from './lib/catmull-rom-line';
|
|
2
|
+
export * from './lib/cubic-bezier-line';
|
|
3
|
+
export * from './lib/edges';
|
|
4
|
+
export * from './lib/gradient-texture';
|
|
5
|
+
export * from './lib/grid';
|
|
6
|
+
export * from './lib/helper';
|
|
7
|
+
export * from './lib/line';
|
|
8
|
+
export * from './lib/prism-geometry';
|
|
9
|
+
export * from './lib/quadratic-bezier-line';
|
|
10
|
+
export * from './lib/text';
|
|
11
|
+
export * from './lib/text-3d';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYXRtdWxsLXJvbS1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmljLWJlemllci1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dyYWRpZW50LXRleHR1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcmlzbS1nZW9tZXRyeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LTNkJztcbiJdfQ==
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input, untracked, viewChild } from '@angular/core';
|
|
2
|
+
import { omit, pick } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { CatmullRomCurve3, Color, Vector3 } from 'three';
|
|
5
|
+
import { NgtsLine } from './line';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
curveType: 'centripetal',
|
|
9
|
+
tension: 0.5,
|
|
10
|
+
segments: 20,
|
|
11
|
+
closed: false,
|
|
12
|
+
lineWidth: 1,
|
|
13
|
+
};
|
|
14
|
+
export class NgtsCatmullRomLine {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.points = input.required();
|
|
17
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
+
this.parameters = omit(this.options, ['curveType', 'tension', 'segments', 'closed', 'vertexColors']);
|
|
19
|
+
this.line = viewChild.required(NgtsLine);
|
|
20
|
+
this.closed = pick(this.options, 'closed');
|
|
21
|
+
this.curveType = pick(this.options, 'curveType');
|
|
22
|
+
this.tension = pick(this.options, 'tension');
|
|
23
|
+
this.segments = pick(this.options, 'segments');
|
|
24
|
+
this.vertexColors = pick(this.options, 'vertexColors');
|
|
25
|
+
this.curve = computed(() => {
|
|
26
|
+
const [points, closed, curveType, tension] = [this.points(), this.closed(), this.curveType(), this.tension()];
|
|
27
|
+
const mappedPoints = points.map((pt) => pt instanceof Vector3 ? pt : new Vector3(...pt));
|
|
28
|
+
return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);
|
|
29
|
+
});
|
|
30
|
+
this.segmentedPoints = computed(() => {
|
|
31
|
+
const [curve, segments] = [this.curve(), this.segments()];
|
|
32
|
+
return curve.getPoints(segments);
|
|
33
|
+
});
|
|
34
|
+
this.interpolatedVertexColors = computed(() => {
|
|
35
|
+
const [vertexColors, segments] = [this.vertexColors(), this.segments()];
|
|
36
|
+
if (!vertexColors || vertexColors.length < 2)
|
|
37
|
+
return undefined;
|
|
38
|
+
if (vertexColors.length === segments + 1)
|
|
39
|
+
return vertexColors;
|
|
40
|
+
const mappedColors = vertexColors.map((color) => color instanceof Color ? color : new Color(...color));
|
|
41
|
+
if (untracked(this.closed))
|
|
42
|
+
mappedColors.push(mappedColors[0].clone());
|
|
43
|
+
const iColors = [mappedColors[0]];
|
|
44
|
+
const divisions = segments / (mappedColors.length - 1);
|
|
45
|
+
for (let i = 1; i < segments; i++) {
|
|
46
|
+
const alpha = (i % divisions) / divisions;
|
|
47
|
+
const colorIndex = Math.floor(i / divisions);
|
|
48
|
+
iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));
|
|
49
|
+
}
|
|
50
|
+
iColors.push(mappedColors[mappedColors.length - 1]);
|
|
51
|
+
return iColors;
|
|
52
|
+
});
|
|
53
|
+
this.lineOptions = computed(() => ({ ...this.parameters(), vertexColors: this.interpolatedVertexColors() }));
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCatmullRomLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsCatmullRomLine, isStandalone: true, selector: "ngts-catmull-rom-line", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
57
|
+
<ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
|
|
58
|
+
<ng-content />
|
|
59
|
+
</ngts-line>
|
|
60
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCatmullRomLine, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{
|
|
65
|
+
selector: 'ngts-catmull-rom-line',
|
|
66
|
+
standalone: true,
|
|
67
|
+
template: `
|
|
68
|
+
<ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
|
|
69
|
+
<ng-content />
|
|
70
|
+
</ngts-line>
|
|
71
|
+
`,
|
|
72
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
73
|
+
imports: [NgtsLine],
|
|
74
|
+
}]
|
|
75
|
+
}] });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jYXRtdWxsLXJvbS1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFTbkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELFNBQVMsRUFBRSxhQUFhO0lBQ3hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osUUFBUSxFQUFFLEVBQUU7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFYL0I7UUFZQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkMsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWhHLFNBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLFdBQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUMsWUFBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWxELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRTlHLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUN0QyxFQUFFLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUksRUFBK0IsQ0FBQyxDQUM3RSxDQUFDO1lBRUYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUssNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBRS9ELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQztnQkFBRSxPQUFPLFlBQVksQ0FBQztZQUU5RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDL0MsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFJLEtBQWtDLENBQUMsQ0FDbEYsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV2RSxNQUFNLE9BQU8sR0FBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTyxPQUFPLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hHOzhHQXBEWSxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyWEFLSixRQUFRLGdFQWJ4Qjs7OztFQUlULDREQUVTLFFBQVE7OzJGQUVOLGtCQUFrQjtrQkFYOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYXRtdWxsUm9tQ3VydmUzLCBDb2xvciwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDYXRtdWxsUm9tTGluZU9wdGlvbnMgZXh0ZW5kcyBPbWl0PE5ndHNMaW5lT3B0aW9ucywgJ3NlZ21lbnRzJz4ge1xuXHRjdXJ2ZVR5cGU6ICdjZW50cmlwZXRhbCcgfCAnY2hvcmRhbCcgfCAnY2F0bXVsbHJvbSc7XG5cdHRlbnNpb246IG51bWJlcjtcblx0c2VnbWVudHM6IG51bWJlcjtcblx0Y2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0NhdG11bGxSb21MaW5lT3B0aW9ucyA9IHtcblx0Y3VydmVUeXBlOiAnY2VudHJpcGV0YWwnLFxuXHR0ZW5zaW9uOiAwLjUsXG5cdHNlZ21lbnRzOiAyMCxcblx0Y2xvc2VkOiBmYWxzZSxcblx0bGluZVdpZHRoOiAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1jYXRtdWxsLXJvbS1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwic2VnbWVudGVkUG9pbnRzKClcIiBbb3B0aW9uc109XCJsaW5lT3B0aW9ucygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0cy1saW5lPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNMaW5lXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIHtcblx0cG9pbnRzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2N1cnZlVHlwZScsICd0ZW5zaW9uJywgJ3NlZ21lbnRzJywgJ2Nsb3NlZCcsICd2ZXJ0ZXhDb2xvcnMnXSk7XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBjbG9zZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nsb3NlZCcpO1xuXHRwcml2YXRlIGN1cnZlVHlwZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnY3VydmVUeXBlJyk7XG5cdHByaXZhdGUgdGVuc2lvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAndGVuc2lvbicpO1xuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0cHJpdmF0ZSBjdXJ2ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbcG9pbnRzLCBjbG9zZWQsIGN1cnZlVHlwZSwgdGVuc2lvbl0gPSBbdGhpcy5wb2ludHMoKSwgdGhpcy5jbG9zZWQoKSwgdGhpcy5jdXJ2ZVR5cGUoKSwgdGhpcy50ZW5zaW9uKCldO1xuXG5cdFx0Y29uc3QgbWFwcGVkUG9pbnRzID0gcG9pbnRzLm1hcCgocHQpID0+XG5cdFx0XHRwdCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwdCA6IG5ldyBWZWN0b3IzKC4uLihwdCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBDYXRtdWxsUm9tQ3VydmUzKG1hcHBlZFBvaW50cywgY2xvc2VkLCBjdXJ2ZVR5cGUsIHRlbnNpb24pO1xuXHR9KTtcblxuXHRzZWdtZW50ZWRQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2N1cnZlLCBzZWdtZW50c10gPSBbdGhpcy5jdXJ2ZSgpLCB0aGlzLnNlZ21lbnRzKCldO1xuXHRcdHJldHVybiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcblxuXHRwcml2YXRlIGludGVycG9sYXRlZFZlcnRleENvbG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbdmVydGV4Q29sb3JzLCBzZWdtZW50c10gPSBbdGhpcy52ZXJ0ZXhDb2xvcnMoKSwgdGhpcy5zZWdtZW50cygpXTtcblx0XHRpZiAoIXZlcnRleENvbG9ycyB8fCB2ZXJ0ZXhDb2xvcnMubGVuZ3RoIDwgMikgcmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cblx0XHRjb25zdCBtYXBwZWRDb2xvcnMgPSB2ZXJ0ZXhDb2xvcnMubWFwKChjb2xvcikgPT5cblx0XHRcdGNvbG9yIGluc3RhbmNlb2YgQ29sb3IgPyBjb2xvciA6IG5ldyBDb2xvciguLi4oY29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSksXG5cdFx0KTtcblx0XHRpZiAodW50cmFja2VkKHRoaXMuY2xvc2VkKSkgbWFwcGVkQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzWzBdLmNsb25lKCkpO1xuXG5cdFx0Y29uc3QgaUNvbG9yczogQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuXHRcdGNvbnN0IGRpdmlzaW9ucyA9IHNlZ21lbnRzIC8gKG1hcHBlZENvbG9ycy5sZW5ndGggLSAxKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IGFscGhhID0gKGkgJSBkaXZpc2lvbnMpIC8gZGl2aXNpb25zO1xuXHRcdFx0Y29uc3QgY29sb3JJbmRleCA9IE1hdGguZmxvb3IoaSAvIGRpdmlzaW9ucyk7XG5cdFx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW2NvbG9ySW5kZXhdLmNsb25lKCkubGVycChtYXBwZWRDb2xvcnNbY29sb3JJbmRleCArIDFdLCBhbHBoYSkpO1xuXHRcdH1cblx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW21hcHBlZENvbG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRyZXR1cm4gaUNvbG9ycztcblx0fSk7XG5cblx0bGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgdmVydGV4Q29sb3JzOiB0aGlzLmludGVycG9sYXRlZFZlcnRleENvbG9ycygpIH0pKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input, viewChild } from '@angular/core';
|
|
2
|
+
import { omit, pick } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { CubicBezierCurve3, Vector3 } from 'three';
|
|
5
|
+
import { NgtsLine } from './line';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
lineWidth: 1,
|
|
9
|
+
segments: 20,
|
|
10
|
+
};
|
|
11
|
+
export class NgtsCubicBezierLine {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.start = input.required();
|
|
14
|
+
this.end = input.required();
|
|
15
|
+
this.midA = input.required();
|
|
16
|
+
this.midB = input.required();
|
|
17
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
+
this.parameters = omit(this.options, ['segments']);
|
|
19
|
+
this.line = viewChild.required(NgtsLine);
|
|
20
|
+
this.segments = pick(this.options, 'segments');
|
|
21
|
+
this.points = computed(() => {
|
|
22
|
+
const [start, end, midA, midB, segments] = [this.start(), this.end(), this.midA(), this.midB(), this.segments()];
|
|
23
|
+
const startV = start instanceof Vector3 ? start : new Vector3(...start);
|
|
24
|
+
const endV = end instanceof Vector3 ? end : new Vector3(...end);
|
|
25
|
+
const midAV = midA instanceof Vector3 ? midA : new Vector3(...midA);
|
|
26
|
+
const midBV = midB instanceof Vector3 ? midB : new Vector3(...midB);
|
|
27
|
+
return new CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCubicBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsCubicBezierLine, isStandalone: true, selector: "ngts-cubic-bezier-line", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: true, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: true, transformFunction: null }, midA: { classPropertyName: "midA", publicName: "midA", isSignal: true, isRequired: true, transformFunction: null }, midB: { classPropertyName: "midB", publicName: "midB", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
32
|
+
<ngts-line [points]="points()" [options]="parameters()">
|
|
33
|
+
<ng-content />
|
|
34
|
+
</ngts-line>
|
|
35
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCubicBezierLine, decorators: [{
|
|
38
|
+
type: Component,
|
|
39
|
+
args: [{
|
|
40
|
+
selector: 'ngts-cubic-bezier-line',
|
|
41
|
+
standalone: true,
|
|
42
|
+
template: `
|
|
43
|
+
<ngts-line [points]="points()" [options]="parameters()">
|
|
44
|
+
<ng-content />
|
|
45
|
+
</ngts-line>
|
|
46
|
+
`,
|
|
47
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
48
|
+
imports: [NgtsLine],
|
|
49
|
+
}]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvY3ViaWMtYmV6aWVyLWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFNbkQsTUFBTSxjQUFjLEdBQStCO0lBQ2xELFNBQVMsRUFBRSxDQUFDO0lBQ1osUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBYUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVlDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzdELFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzNELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztLQUNIOzhHQXBCWSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrdEJBUUwsUUFBUSxnRUFoQnhCOzs7O0VBSVQsNERBRVMsUUFBUTs7MkZBRU4sbUJBQW1CO2tCQVgvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDdWJpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDdWJpY0JlemllckxpbmVPcHRpb25zIGV4dGVuZHMgT21pdDxOZ3RzTGluZU9wdGlvbnMsICdzZWdtZW50cyc+IHtcblx0c2VnbWVudHM/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ3ViaWNCZXppZXJMaW5lT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHRzZWdtZW50czogMjAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWN1YmljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViaWNCZXppZXJMaW5lIHtcblx0c3RhcnQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRlbmQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRtaWRBID0gaW5wdXQucmVxdWlyZWQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0bWlkQiA9IGlucHV0LnJlcXVpcmVkPFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3NlZ21lbnRzJ10pO1xuXG5cdGxpbmUgPSB2aWV3Q2hpbGQucmVxdWlyZWQoTmd0c0xpbmUpO1xuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlZ21lbnRzJyk7XG5cblx0cG9pbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50c10gPSBbdGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpLCB0aGlzLm1pZEEoKSwgdGhpcy5taWRCKCksIHRoaXMuc2VnbWVudHMoKV07XG5cdFx0Y29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBWZWN0b3IzID8gc3RhcnQgOiBuZXcgVmVjdG9yMyguLi5zdGFydCk7XG5cdFx0Y29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBlbmQgOiBuZXcgVmVjdG9yMyguLi5lbmQpO1xuXHRcdGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFZlY3RvcjMgPyBtaWRBIDogbmV3IFZlY3RvcjMoLi4ubWlkQSk7XG5cdFx0Y29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVmVjdG9yMyA/IG1pZEIgOiBuZXcgVmVjdG9yMyguLi5taWRCKTtcblx0XHRyZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, input, viewChild } from '@angular/core';
|
|
2
|
+
import { checkNeedsUpdate, getLocalState, omit } from 'angular-three';
|
|
3
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
+
import { EdgesGeometry } from 'three';
|
|
6
|
+
import { NgtsLine } from './line';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const defaultOptions = {
|
|
9
|
+
lineWidth: 1,
|
|
10
|
+
threshold: 15,
|
|
11
|
+
};
|
|
12
|
+
export class NgtsEdges {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
15
|
+
this.parameters = omit(this.options, ['threshold', 'geometry']);
|
|
16
|
+
this.lineOptions = computed(() => ({ ...this.parameters(), raycast: () => null }));
|
|
17
|
+
this.tmpPoints = [0, 0, 0, 1, 0, 0];
|
|
18
|
+
this.line = viewChild.required(NgtsLine);
|
|
19
|
+
const autoEffect = injectAutoEffect();
|
|
20
|
+
afterNextRender(() => {
|
|
21
|
+
autoEffect(() => {
|
|
22
|
+
const line = this.line().line()?.nativeElement;
|
|
23
|
+
if (!line)
|
|
24
|
+
return;
|
|
25
|
+
const lS = getLocalState(line);
|
|
26
|
+
if (!lS)
|
|
27
|
+
return;
|
|
28
|
+
const parent = lS.parent();
|
|
29
|
+
if (!parent)
|
|
30
|
+
return;
|
|
31
|
+
const { geometry: explicitGeometry, threshold } = this.options();
|
|
32
|
+
const geometry = explicitGeometry ?? parent.geometry;
|
|
33
|
+
if (!geometry)
|
|
34
|
+
return;
|
|
35
|
+
const cached = this.memoizedGeometry === geometry && this.memoizedThreshold === threshold;
|
|
36
|
+
if (cached)
|
|
37
|
+
return;
|
|
38
|
+
this.memoizedGeometry = geometry;
|
|
39
|
+
this.memoizedThreshold = threshold;
|
|
40
|
+
const points = new EdgesGeometry(geometry, threshold).attributes['position']
|
|
41
|
+
.array;
|
|
42
|
+
line.geometry.setPositions(points);
|
|
43
|
+
checkNeedsUpdate(line.geometry.attributes['instanceStart']);
|
|
44
|
+
checkNeedsUpdate(line.geometry.attributes['instanceEnd']);
|
|
45
|
+
line.computeLineDistances();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsEdges, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsEdges, isStandalone: true, selector: "ngts-edges", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
51
|
+
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
52
|
+
<ng-content />
|
|
53
|
+
</ngts-line>
|
|
54
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsEdges, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{
|
|
59
|
+
selector: 'ngts-edges',
|
|
60
|
+
standalone: true,
|
|
61
|
+
template: `
|
|
62
|
+
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
63
|
+
<ng-content />
|
|
64
|
+
</ngts-line>
|
|
65
|
+
`,
|
|
66
|
+
imports: [NgtsLine],
|
|
67
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: () => [] });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZWRnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBd0QsYUFBYSxFQUFRLE1BQU0sT0FBTyxDQUFDO0FBRWxHLE9BQU8sRUFBNkIsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQVk3RCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFhRixNQUFNLE9BQU8sU0FBUztJQVlyQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU1uQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxFQUFFO29CQUFFLE9BQU87Z0JBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQVUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRXRCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQztnQkFDMUYsSUFBSSxNQUFNO29CQUFFLE9BQU87Z0JBRW5CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7Z0JBRW5DLE1BQU0sTUFBTSxHQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFxQjtxQkFDL0YsS0FBcUIsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQTNDVyxTQUFTO2tHQUFULFNBQVMsc1BBT0ssUUFBUSxnRUFmeEI7Ozs7RUFJVCw0REFDUyxRQUFROzsyRkFHTixTQUFTO2tCQVhyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBnZXRMb2NhbFN0YXRlLCBOZ3RNZXNoLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvclJlcHJlc2VudGF0aW9uLCBFZGdlc0dlb21ldHJ5LCBNZXNoIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZU1hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RMaW5lMiwgTmd0TGluZU1hdGVyaWFsLCBOZ3RzTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCB0eXBlIE5ndHNFZGdlc09wdGlvbnMgPSBQYXJ0aWFsPE5ndE1lc2g+ICYge1xuXHR0aHJlc2hvbGQ/OiBudW1iZXI7XG5cdGxpbmVXaWR0aD86IG51bWJlcjtcbn0gJiBPbWl0PExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsICd2ZXJ0ZXhDb2xvcnMnIHwgJ2NvbG9yJz4gJlxuXHRPbWl0PFBhcnRpYWw8Tmd0TGluZTI+LCAnZ2VvbWV0cnknPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycyc+ICYge1xuXHRcdGdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdFx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR9O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0VkZ2VzT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHR0aHJlc2hvbGQ6IDE1LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtbGluZSBbcG9pbnRzXT1cInRtcFBvaW50c1wiIFtvcHRpb25zXT1cImxpbmVPcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzTGluZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3RocmVzaG9sZCcsICdnZW9tZXRyeSddKTtcblxuXHRwcm90ZWN0ZWQgbGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgcmF5Y2FzdDogKCkgPT4gbnVsbCB9KSk7XG5cdHByb3RlY3RlZCB0bXBQb2ludHMgPSBbMCwgMCwgMCwgMSwgMCwgMF07XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBtZW1vaXplZEdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdHByaXZhdGUgbWVtb2l6ZWRUaHJlc2hvbGQ/OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpbmUgPSB0aGlzLmxpbmUoKS5saW5lKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbGluZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShsaW5lKTtcblx0XHRcdFx0aWYgKCFsUykgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGxTLnBhcmVudCgpIGFzIE1lc2g7XG5cdFx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgeyBnZW9tZXRyeTogZXhwbGljaXRHZW9tZXRyeSwgdGhyZXNob2xkIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBleHBsaWNpdEdlb21ldHJ5ID8/IHBhcmVudC5nZW9tZXRyeTtcblx0XHRcdFx0aWYgKCFnZW9tZXRyeSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtb2l6ZWRHZW9tZXRyeSA9PT0gZ2VvbWV0cnkgJiYgdGhpcy5tZW1vaXplZFRocmVzaG9sZCA9PT0gdGhyZXNob2xkO1xuXHRcdFx0XHRpZiAoY2FjaGVkKSByZXR1cm47XG5cblx0XHRcdFx0dGhpcy5tZW1vaXplZEdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0XHRcdHRoaXMubWVtb2l6ZWRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG5cblx0XHRcdFx0Y29uc3QgcG9pbnRzID0gKG5ldyBFZGdlc0dlb21ldHJ5KGdlb21ldHJ5LCB0aHJlc2hvbGQpLmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10gYXMgQnVmZmVyQXR0cmlidXRlKVxuXHRcdFx0XHRcdC5hcnJheSBhcyBGbG9hdDMyQXJyYXk7XG5cdFx0XHRcdGxpbmUuZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvaW50cyk7XG5cdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10pO1xuXHRcdFx0XHRjaGVja05lZWRzVXBkYXRlKGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VFbmQnXSk7XG5cdFx0XHRcdGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, untracked, } from '@angular/core';
|
|
3
|
+
import { extend, injectStore, NgtArgs, omit } from 'angular-three';
|
|
4
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
+
import { CanvasTexture, Color } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
size: 1024,
|
|
9
|
+
width: 16,
|
|
10
|
+
type: 'linear',
|
|
11
|
+
innerCircleRadius: 0,
|
|
12
|
+
outerCircleRadius: 'auto',
|
|
13
|
+
};
|
|
14
|
+
export class NgtsGradientTexture {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.attach = input('map');
|
|
17
|
+
this.stops = input.required();
|
|
18
|
+
this.colors = input.required();
|
|
19
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
20
|
+
this.parameters = omit(this.options, ['size', 'width', 'type', 'innerCircleRadius', 'outerCircleRadius']);
|
|
21
|
+
this.store = injectStore();
|
|
22
|
+
this.gl = this.store.select('gl');
|
|
23
|
+
this.document = inject(DOCUMENT);
|
|
24
|
+
this.canvas = computed(() => {
|
|
25
|
+
const canvas = this.document.createElement('canvas');
|
|
26
|
+
const context = canvas.getContext('2d');
|
|
27
|
+
const [{ width, size, type, outerCircleRadius, innerCircleRadius }, stops, colors] = [
|
|
28
|
+
untracked(this.options),
|
|
29
|
+
this.stops(),
|
|
30
|
+
this.colors(),
|
|
31
|
+
];
|
|
32
|
+
canvas.width = width;
|
|
33
|
+
canvas.height = size;
|
|
34
|
+
let gradient;
|
|
35
|
+
if (type === 'linear') {
|
|
36
|
+
gradient = context.createLinearGradient(0, 0, 0, size);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const canvasCenterX = canvas.width / 2;
|
|
40
|
+
const canvasCenterY = canvas.height / 2;
|
|
41
|
+
const radius = outerCircleRadius !== 'auto'
|
|
42
|
+
? Math.abs(Number(outerCircleRadius))
|
|
43
|
+
: Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);
|
|
44
|
+
gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);
|
|
45
|
+
}
|
|
46
|
+
const tempColor = new Color(); // reuse instance for performance
|
|
47
|
+
let i = stops.length;
|
|
48
|
+
while (i--) {
|
|
49
|
+
gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());
|
|
50
|
+
}
|
|
51
|
+
context.save();
|
|
52
|
+
context.fillStyle = gradient;
|
|
53
|
+
context.fillRect(0, 0, width, size);
|
|
54
|
+
context.restore();
|
|
55
|
+
return canvas;
|
|
56
|
+
});
|
|
57
|
+
extend({ CanvasTexture });
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGradientTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsGradientTexture, isStandalone: true, selector: "ngts-gradient-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, stops: { classPropertyName: "stops", publicName: "stops", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
61
|
+
<ngt-canvas-texture
|
|
62
|
+
*args="[canvas()]"
|
|
63
|
+
[attach]="attach()"
|
|
64
|
+
[colorSpace]="gl().outputColorSpace"
|
|
65
|
+
[parameters]="parameters()"
|
|
66
|
+
>
|
|
67
|
+
<ng-content />
|
|
68
|
+
</ngt-canvas-texture>
|
|
69
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGradientTexture, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{
|
|
74
|
+
selector: 'ngts-gradient-texture',
|
|
75
|
+
standalone: true,
|
|
76
|
+
template: `
|
|
77
|
+
<ngt-canvas-texture
|
|
78
|
+
*args="[canvas()]"
|
|
79
|
+
[attach]="attach()"
|
|
80
|
+
[colorSpace]="gl().outputColorSpace"
|
|
81
|
+
[parameters]="parameters()"
|
|
82
|
+
>
|
|
83
|
+
<ng-content />
|
|
84
|
+
</ngt-canvas-texture>
|
|
85
|
+
`,
|
|
86
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
87
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
88
|
+
imports: [NgtArgs],
|
|
89
|
+
}]
|
|
90
|
+
}], ctorParameters: () => [] });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmFkaWVudC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUF1QixNQUFNLE9BQU8sQ0FBQzs7QUFVbEUsTUFBTSxjQUFjLEdBQStCO0lBQ2xELElBQUksRUFBRSxJQUFJO0lBQ1YsS0FBSyxFQUFFLEVBQUU7SUFDVCxJQUFJLEVBQUUsUUFBUTtJQUNkLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEVBQUUsTUFBTTtDQUN6QixDQUFDO0FBbUJGLE1BQU0sT0FBTyxtQkFBbUI7SUEwRC9CO1FBekRBLFdBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7UUFDeEMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQThCLENBQUM7UUFDdEQsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFP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LDREQUdTLE9BQU87OzJGQUVMLG1CQUFtQjtrQkFqQi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7O0VBU1Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdFN0b3JlLCBOZ3RBcmdzLCBOZ3RUZXh0dXJlLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYW52YXNUZXh0dXJlLCBDb2xvciwgQ29sb3JSZXByZXNlbnRhdGlvbiB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzR3JhZGllbnRUZXh0dXJlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8T21pdDxOZ3RUZXh0dXJlLCAndHlwZSc+PiB7XG5cdHNpemU6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0dHlwZTogJ2xpbmVhcicgfCAncmFkaWFsJztcblx0aW5uZXJDaXJjbGVSYWRpdXM6IG51bWJlcjtcblx0b3V0ZXJDaXJjbGVSYWRpdXM6IHN0cmluZyB8IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNHcmFkaWVudFRleHR1cmVPcHRpb25zID0ge1xuXHRzaXplOiAxMDI0LFxuXHR3aWR0aDogMTYsXG5cdHR5cGU6ICdsaW5lYXInLFxuXHRpbm5lckNpcmNsZVJhZGl1czogMCxcblx0b3V0ZXJDaXJjbGVSYWRpdXM6ICdhdXRvJyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZ3JhZGllbnQtdGV4dHVyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1jYW52YXMtdGV4dHVyZVxuXHRcdFx0KmFyZ3M9XCJbY2FudmFzKCldXCJcblx0XHRcdFthdHRhY2hdPVwiYXR0YWNoKClcIlxuXHRcdFx0W2NvbG9yU3BhY2VdPVwiZ2woKS5vdXRwdXRDb2xvclNwYWNlXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1jYW52YXMtdGV4dHVyZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR3JhZGllbnRUZXh0dXJlIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hcCcpO1xuXHRzdG9wcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PG51bWJlcj4+KCk7XG5cdGNvbG9ycyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PENvbG9yUmVwcmVzZW50YXRpb24+PigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydzaXplJywgJ3dpZHRoJywgJ3R5cGUnLCAnaW5uZXJDaXJjbGVSYWRpdXMnLCAnb3V0ZXJDaXJjbGVSYWRpdXMnXSk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG5cdGNhbnZhcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cdFx0Y29uc3QgW3sgd2lkdGgsIHNpemUsIHR5cGUsIG91dGVyQ2lyY2xlUmFkaXVzLCBpbm5lckNpcmNsZVJhZGl1cyB9LCBzdG9wcywgY29sb3JzXSA9IFtcblx0XHRcdHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpLFxuXHRcdFx0dGhpcy5zdG9wcygpLFxuXHRcdFx0dGhpcy5jb2xvcnMoKSxcblx0XHRdO1xuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXHRcdGNhbnZhcy5oZWlnaHQgPSBzaXplO1xuXG5cdFx0bGV0IGdyYWRpZW50OiBDYW52YXNHcmFkaWVudDtcblxuXHRcdGlmICh0eXBlID09PSAnbGluZWFyJykge1xuXHRcdFx0Z3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIDAsIHNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjYW52YXNDZW50ZXJYID0gY2FudmFzLndpZHRoIC8gMjtcblx0XHRcdGNvbnN0IGNhbnZhc0NlbnRlclkgPSBjYW52YXMuaGVpZ2h0IC8gMjtcblx0XHRcdGNvbnN0IHJhZGl1cyA9XG5cdFx0XHRcdG91dGVyQ2lyY2xlUmFkaXVzICE9PSAnYXV0bydcblx0XHRcdFx0XHQ/IE1hdGguYWJzKE51bWJlcihvdXRlckNpcmNsZVJhZGl1cykpXG5cdFx0XHRcdFx0OiBNYXRoLnNxcnQoY2FudmFzQ2VudGVyWCAqKiAyICsgY2FudmFzQ2VudGVyWSAqKiAyKTtcblx0XHRcdGdyYWRpZW50ID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChcblx0XHRcdFx0Y2FudmFzQ2VudGVyWCxcblx0XHRcdFx0Y2FudmFzQ2VudGVyWSxcblx0XHRcdFx0TWF0aC5hYnMoaW5uZXJDaXJjbGVSYWRpdXMpLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJYLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJZLFxuXHRcdFx0XHRyYWRpdXMsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRlbXBDb2xvciA9IG5ldyBDb2xvcigpOyAvLyByZXVzZSBpbnN0YW5jZSBmb3IgcGVyZm9ybWFuY2VcblxuXHRcdGxldCBpID0gc3RvcHMubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChzdG9wc1tpXSwgdGVtcENvbG9yLnNldChjb2xvcnNbaV0pLmdldFN0eWxlKCkpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuc2F2ZSgpO1xuXHRcdGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG5cdFx0Y29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgc2l6ZSk7XG5cdFx0Y29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHRyZXR1cm4gY2FudmFzO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBDYW52YXNUZXh0dXJlIH0pO1xuXHR9XG59XG4iXX0=
|