angular-three-soba 2.14.0 → 3.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.
Files changed (179) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +117 -117
  2. package/abstractions/lib/edges.d.ts +126 -126
  3. package/abstractions/lib/grid.d.ts +15 -15
  4. package/abstractions/lib/line.d.ts +1 -1
  5. package/abstractions/lib/prism-geometry.d.ts +4 -4
  6. package/abstractions/lib/rounded-box.d.ts +1 -1
  7. package/abstractions/lib/text-3d.d.ts +22 -22
  8. package/abstractions/lib/text.d.ts +1 -1
  9. package/cameras/lib/cube-camera.d.ts +1 -1
  10. package/cameras/lib/orthographic-camera.d.ts +1 -1
  11. package/cameras/lib/perspective-camera.d.ts +1 -1
  12. package/controls/index.d.ts +0 -9
  13. package/controls/lib/camera-controls.d.ts +1 -1
  14. package/controls/lib/orbit-controls.d.ts +1 -1
  15. package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  16. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  18. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-controls.mjs +16 -24
  20. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  22. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  24. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  26. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  28. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  30. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  31. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  33. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  34. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  35. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  36. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  37. package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
  38. package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
  39. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  40. package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
  41. package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
  42. package/gizmos/lib/transform-controls.d.ts +2 -2
  43. package/materials/lib/custom-shader-material.d.ts +2 -2
  44. package/materials/lib/mesh-portal-material.d.ts +9 -9
  45. package/materials/lib/mesh-refraction-material.d.ts +2 -2
  46. package/materials/lib/mesh-transmission-material.d.ts +1 -1
  47. package/misc/lib/computed-attribute.d.ts +6 -6
  48. package/misc/lib/decal.d.ts +1 -1
  49. package/misc/lib/html/html.d.ts +2 -2
  50. package/misc/lib/sampler.d.ts +1 -1
  51. package/package.json +11 -37
  52. package/performances/lib/instances/instances.d.ts +5 -5
  53. package/performances/lib/points/points.d.ts +10 -10
  54. package/performances/lib/segments/segments.d.ts +4 -4
  55. package/shaders/lib/mesh-refraction-material.d.ts +2 -2
  56. package/staging/lib/caustics.d.ts +1 -1
  57. package/staging/lib/center.d.ts +2 -2
  58. package/staging/lib/contact-shadows.d.ts +1 -1
  59. package/staging/lib/lightformer.d.ts +1 -1
  60. package/staging/lib/mask.d.ts +1 -1
  61. package/staging/lib/render-texture.d.ts +1 -1
  62. package/staging/lib/spot-light.d.ts +2 -2
  63. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  64. package/esm2022/abstractions/index.mjs +0 -14
  65. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  66. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  67. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  68. package/esm2022/abstractions/lib/edges.mjs +0 -66
  69. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  70. package/esm2022/abstractions/lib/grid.mjs +0 -103
  71. package/esm2022/abstractions/lib/helper.mjs +0 -74
  72. package/esm2022/abstractions/lib/line.mjs +0 -123
  73. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  74. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  75. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  76. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  77. package/esm2022/abstractions/lib/text.mjs +0 -86
  78. package/esm2022/angular-three-soba.mjs +0 -5
  79. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  80. package/esm2022/cameras/index.mjs +0 -5
  81. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  82. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  83. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  84. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  85. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  86. package/esm2022/controls/index.mjs +0 -9
  87. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  88. package/esm2022/controls/lib/orbit-controls.mjs +0 -114
  89. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  90. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  91. package/esm2022/gizmos/index.mjs +0 -6
  92. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  93. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  94. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  95. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  96. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  97. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  98. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  99. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  100. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  101. package/esm2022/index.mjs +0 -2
  102. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  103. package/esm2022/loaders/index.mjs +0 -7
  104. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  105. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  106. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  107. package/esm2022/loaders/lib/loader.mjs +0 -103
  108. package/esm2022/loaders/lib/progress.mjs +0 -51
  109. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  110. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  111. package/esm2022/materials/index.mjs +0 -9
  112. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  113. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  114. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  115. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  116. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  117. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  118. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  119. package/esm2022/materials/lib/point-material.mjs +0 -34
  120. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  121. package/esm2022/misc/index.mjs +0 -15
  122. package/esm2022/misc/lib/animations.mjs +0 -71
  123. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  124. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  125. package/esm2022/misc/lib/constants.mjs +0 -5
  126. package/esm2022/misc/lib/decal.mjs +0 -142
  127. package/esm2022/misc/lib/deprecated.mjs +0 -15
  128. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  129. package/esm2022/misc/lib/fbo.mjs +0 -86
  130. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  131. package/esm2022/misc/lib/html/html.mjs +0 -129
  132. package/esm2022/misc/lib/html/utils.mjs +0 -74
  133. package/esm2022/misc/lib/intersect.mjs +0 -49
  134. package/esm2022/misc/lib/preload.mjs +0 -58
  135. package/esm2022/misc/lib/sampler.mjs +0 -122
  136. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  137. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  138. package/esm2022/performances/index.mjs +0 -7
  139. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  140. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  141. package/esm2022/performances/lib/detailed.mjs +0 -53
  142. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  143. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  144. package/esm2022/performances/lib/points/points.mjs +0 -272
  145. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  146. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  147. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  148. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  149. package/esm2022/shaders/index.mjs +0 -4
  150. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  151. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  152. package/esm2022/shaders/lib/point-material.mjs +0 -24
  153. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  154. package/esm2022/staging/index.mjs +0 -21
  155. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  156. package/esm2022/staging/lib/backdrop.mjs +0 -69
  157. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  158. package/esm2022/staging/lib/bounds.mjs +0 -282
  159. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  160. package/esm2022/staging/lib/caustics.mjs +0 -184
  161. package/esm2022/staging/lib/center.mjs +0 -114
  162. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  163. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  164. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  165. package/esm2022/staging/lib/float.mjs +0 -70
  166. package/esm2022/staging/lib/lightformer.mjs +0 -103
  167. package/esm2022/staging/lib/mask.mjs +0 -74
  168. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  169. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  170. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  171. package/esm2022/staging/lib/render-texture.mjs +0 -202
  172. package/esm2022/staging/lib/sky.mjs +0 -86
  173. package/esm2022/staging/lib/spot-light.mjs +0 -445
  174. package/esm2022/staging/lib/stage.mjs +0 -232
  175. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  176. package/esm2022/stats/index.mjs +0 -2
  177. package/esm2022/stats/lib/stats.mjs +0 -57
  178. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  179. package/esm2022/vanilla-exports/index.mjs +0 -3
@@ -32,7 +32,7 @@ export declare class NgtsCaustics {
32
32
  protected readonly OneFactor: 201;
33
33
  protected readonly SrcAlphaFactor: 204;
34
34
  options: import("@angular/core").InputSignalWithTransform<NgtsCausticsOptions, "" | Partial<NgtsCausticsOptions>>;
35
- parameters: import("@angular/core").Signal<Omit<NgtsCausticsOptions, "intensity" | "frames" | "color" | "resolution" | "debug" | "causticsOnly" | "backside" | "ior" | "backsideIOR" | "worldRadius" | "lightSource">>;
35
+ parameters: import("@angular/core").Signal<Omit<NgtsCausticsOptions, "frames" | "color" | "resolution" | "debug" | "causticsOnly" | "backside" | "ior" | "backsideIOR" | "worldRadius" | "intensity" | "lightSource">>;
36
36
  debug: import("@angular/core").Signal<boolean>;
37
37
  color: import("@angular/core").Signal<ColorRepresentation>;
38
38
  private resolution;
@@ -293,7 +293,7 @@ export declare class NgtsCenter {
293
293
  layers: import("angular-three").NgtLayers;
294
294
  dispose: (() => void) | null;
295
295
  raycast: Object3D["raycast"] | null;
296
- }> & NgtsCenterOptions, "top" | "right" | "bottom" | "left" | "front" | "back" | "disable" | "disableX" | "disableY" | "disableZ" | "precise" | "cacheKey">>;
296
+ }> & NgtsCenterOptions, "disable" | "precise" | "cacheKey" | "top" | "right" | "bottom" | "left" | "front" | "back" | "disableX" | "disableY" | "disableZ">>;
297
297
  centered: import("@angular/core").OutputEmitterRef<NgtsCenterState>;
298
298
  groupRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
299
299
  private outerRef;
@@ -383,7 +383,7 @@ export declare class NgtsCenter {
383
383
  layers: import("angular-three").NgtLayers;
384
384
  dispose: (() => void) | null;
385
385
  raycast: Object3D["raycast"] | null;
386
- }> & NgtsCenterOptions, "top" | "right" | "bottom" | "left" | "front" | "back" | "disable" | "disableX" | "disableY" | "disableZ" | "precise" | "cacheKey">>;
386
+ }> & NgtsCenterOptions, "disable" | "precise" | "cacheKey" | "top" | "right" | "bottom" | "left" | "front" | "back" | "disableX" | "disableY" | "disableZ">>;
387
387
  constructor();
388
388
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCenter, never>;
389
389
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCenter, "ngts-center", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "centered": "centered"; }, never, ["*"], true, never>;
@@ -19,7 +19,7 @@ export interface NgtsContactShadowsOptions extends Partial<Omit<NgtGroup, 'scale
19
19
  export declare class NgtsContactShadows {
20
20
  Math: Math;
21
21
  options: import("@angular/core").InputSignalWithTransform<NgtsContactShadowsOptions, "" | Partial<NgtsContactShadowsOptions>>;
22
- parameters: import("@angular/core").Signal<Omit<NgtsContactShadowsOptions, "scale" | "renderOrder" | "width" | "height" | "frames" | "opacity" | "color" | "resolution" | "near" | "far" | "blur" | "smooth" | "depthWrite">>;
22
+ parameters: import("@angular/core").Signal<Omit<NgtsContactShadowsOptions, "scale" | "renderOrder" | "frames" | "opacity" | "color" | "resolution" | "depthWrite" | "near" | "far" | "width" | "height" | "blur" | "smooth">>;
23
23
  contactShadowsRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
24
24
  shadowsCameraRef: import("@angular/core").Signal<ElementRef<OrthographicCamera> | undefined>;
25
25
  private store;
@@ -293,7 +293,7 @@ export declare class NgtsLightformer {
293
293
  layers: import("angular-three").NgtLayers;
294
294
  dispose: (() => void) | null;
295
295
  raycast: import("three").Object3D["raycast"] | null;
296
- }, "scale">> & NgtsLightformerOptions, "scale" | "intensity" | "color" | "toneMapped" | "map" | "target" | "form">>;
296
+ }, "scale">> & NgtsLightformerOptions, "scale" | "color" | "toneMapped" | "map" | "target" | "intensity" | "form">>;
297
297
  private intensity;
298
298
  private color;
299
299
  private target;
@@ -9,7 +9,7 @@ export interface NgtsMaskOptions extends Partial<NgtMesh> {
9
9
  export declare class NgtsMask {
10
10
  id: import("@angular/core").InputSignalWithTransform<number, unknown>;
11
11
  options: import("@angular/core").InputSignalWithTransform<NgtsMaskOptions, "" | Partial<NgtsMaskOptions>>;
12
- parameters: import("@angular/core").Signal<Omit<NgtsMaskOptions, "depthWrite" | "colorWrite">>;
12
+ parameters: import("@angular/core").Signal<Omit<NgtsMaskOptions, "colorWrite" | "depthWrite">>;
13
13
  meshRef: import("@angular/core").Signal<ElementRef<Mesh<BufferGeometry<import("three").NormalBufferAttributes>, Material, import("three").Object3DEventMap>>>;
14
14
  private colorWrite;
15
15
  private depthWrite;
@@ -45,7 +45,7 @@ export declare class NgtsRenderTextureContent {
45
45
  export declare class NgtsRenderTexture {
46
46
  attach: import("@angular/core").InputSignal<NgtAttachable>;
47
47
  options: import("@angular/core").InputSignalWithTransform<NgtsRenderTextureOptions, "" | Partial<NgtsRenderTextureOptions>>;
48
- parameters: import("@angular/core").Signal<Omit<NgtsRenderTextureOptions, "width" | "height" | "frames" | "depthBuffer" | "stencilBuffer" | "generateMipmaps" | "samples" | "renderPriority" | "eventPriority" | "compute">>;
48
+ parameters: import("@angular/core").Signal<Omit<NgtsRenderTextureOptions, "frames" | "width" | "height" | "depthBuffer" | "stencilBuffer" | "samples" | "generateMipmaps" | "renderPriority" | "eventPriority" | "compute">>;
49
49
  content: import("@angular/core").Signal<TemplateRef<any>>;
50
50
  private store;
51
51
  private size;
@@ -104,8 +104,8 @@ export declare class NgtsSpotLightShadow {
104
104
  export declare class NgtsSpotLight {
105
105
  protected readonly SpotLightHelper: typeof SpotLightHelper;
106
106
  options: import("@angular/core").InputSignalWithTransform<NgtsSpotLightOptions, "" | Partial<NgtsSpotLightOptions>>;
107
- parameters: import("@angular/core").Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "volumetric" | "distance" | "angle" | "depthBuffer" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom" | "debug">>;
108
- volumetricOptions: import("@angular/core").Signal<Pick<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "angle" | "depthBuffer" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom" | "debug">>;
107
+ parameters: import("@angular/core").Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "debug" | "depthBuffer" | "volumetric" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
108
+ volumetricOptions: import("@angular/core").Signal<Pick<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "debug" | "depthBuffer" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
109
109
  spotLight: import("@angular/core").Signal<ElementRef<SpotLight>>;
110
110
  debug: import("@angular/core").Signal<boolean | undefined>;
111
111
  angle: import("@angular/core").Signal<number | undefined>;
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLWFic3RyYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2FuZ3VsYXItdGhyZWUtc29iYS1hYnN0cmFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -1,14 +0,0 @@
1
- export * from './lib/billboard';
2
- export * from './lib/catmull-rom-line';
3
- export * from './lib/cubic-bezier-line';
4
- export * from './lib/edges';
5
- export * from './lib/gradient-texture';
6
- export * from './lib/grid';
7
- export * from './lib/helper';
8
- export * from './lib/line';
9
- export * from './lib/prism-geometry';
10
- export * from './lib/quadratic-bezier-line';
11
- export * from './lib/rounded-box';
12
- export * from './lib/text';
13
- export * from './lib/text-3d';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmlsbGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdG11bGwtcm9tLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3ViaWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JhZGllbnQtdGV4dHVyZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncmlkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXNtLWdlb21ldHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWRyYXRpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3VuZGVkLWJveCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQtM2QnO1xuIl19
@@ -1,69 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
- import { extend, injectBeforeRender, omit } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { Group, Quaternion } from 'three';
5
- import * as i0 from "@angular/core";
6
- const defaultOptions = {
7
- follow: true,
8
- lockX: false,
9
- lockY: false,
10
- lockZ: false,
11
- };
12
- export class NgtsBillboard {
13
- constructor() {
14
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
15
- this.parameters = omit(this.options, ['follow', 'lockX', 'lockY', 'lockZ']);
16
- this.groupRef = viewChild.required('group');
17
- this.innerRef = viewChild.required('inner');
18
- extend({ Group });
19
- const q = new Quaternion();
20
- injectBeforeRender(({ camera }) => {
21
- const [{ follow, lockX, lockY, lockZ }, group, inner] = [
22
- this.options(),
23
- this.groupRef().nativeElement,
24
- this.innerRef().nativeElement,
25
- ];
26
- if (!follow || !group)
27
- return;
28
- // save previous rotation in case we're locking an axis
29
- const prevRotation = group.rotation.clone();
30
- // always face the camera
31
- group.updateMatrix();
32
- group.updateWorldMatrix(false, false);
33
- group.getWorldQuaternion(q);
34
- camera.getWorldQuaternion(inner.quaternion).premultiply(q.invert());
35
- // readjust any axis that is locked
36
- if (lockX)
37
- group.rotation.x = prevRotation.x;
38
- if (lockY)
39
- group.rotation.y = prevRotation.y;
40
- if (lockZ)
41
- group.rotation.z = prevRotation.z;
42
- });
43
- }
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBillboard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsBillboard, isStandalone: true, selector: "ngts-billboard", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "innerRef", first: true, predicate: ["inner"], descendants: true, isSignal: true }], ngImport: i0, template: `
46
- <ngt-group #group [parameters]="parameters()">
47
- <ngt-group #inner>
48
- <ng-content />
49
- </ngt-group>
50
- </ngt-group>
51
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBillboard, decorators: [{
54
- type: Component,
55
- args: [{
56
- selector: 'ngts-billboard',
57
- standalone: true,
58
- template: `
59
- <ngt-group #group [parameters]="parameters()">
60
- <ngt-group #inner>
61
- <ng-content />
62
- </ngt-group>
63
- </ngt-group>
64
- `,
65
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
66
- changeDetection: ChangeDetectionStrategy.OnPush,
67
- }]
68
- }], ctorParameters: () => [] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2JpbGxib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFZLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBUzFDLE1BQU0sY0FBYyxHQUF5QjtJQUM1QyxNQUFNLEVBQUUsSUFBSTtJQUNaLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixLQUFLLEVBQUUsS0FBSztDQUNaLENBQUM7QUFlRixNQUFNLE9BQU8sYUFBYTtJQU96QjtRQU5BLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV2RSxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFDMUQsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBR3pELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMzQixrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUNqQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWE7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhO2FBQzdCLENBQUM7WUFFRixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRTlCLHVEQUF1RDtZQUN2RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTVDLHlCQUF5QjtZQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFcEUsbUNBQW1DO1lBQ25DLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0FsQ1csYUFBYTttR0FBYixhQUFhLDJhQVZmOzs7Ozs7RUFNVDs7NEZBSVcsYUFBYTtrQkFiekIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7RUFNVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgTmd0R3JvdXAsIG9taXQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEdyb3VwLCBRdWF0ZXJuaW9uIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNCaWxsYm9hcmRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRmb2xsb3c/OiBib29sZWFuO1xuXHRsb2NrWD86IGJvb2xlYW47XG5cdGxvY2tZPzogYm9vbGVhbjtcblx0bG9ja1o/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0JpbGxib2FyZE9wdGlvbnMgPSB7XG5cdGZvbGxvdzogdHJ1ZSxcblx0bG9ja1g6IGZhbHNlLFxuXHRsb2NrWTogZmFsc2UsXG5cdGxvY2taOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYmlsbGJvYXJkJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNncm91cCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtZ3JvdXAgI2lubmVyPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCaWxsYm9hcmQge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydmb2xsb3cnLCAnbG9ja1gnLCAnbG9ja1knLCAnbG9ja1onXSk7XG5cblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRpbm5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2lubmVyJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBxID0gbmV3IFF1YXRlcm5pb24oKTtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IGZvbGxvdywgbG9ja1gsIGxvY2tZLCBsb2NrWiB9LCBncm91cCwgaW5uZXJdID0gW1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0dGhpcy5ncm91cFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuaW5uZXJSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XTtcblxuXHRcdFx0aWYgKCFmb2xsb3cgfHwgIWdyb3VwKSByZXR1cm47XG5cblx0XHRcdC8vIHNhdmUgcHJldmlvdXMgcm90YXRpb24gaW4gY2FzZSB3ZSdyZSBsb2NraW5nIGFuIGF4aXNcblx0XHRcdGNvbnN0IHByZXZSb3RhdGlvbiA9IGdyb3VwLnJvdGF0aW9uLmNsb25lKCk7XG5cblx0XHRcdC8vIGFsd2F5cyBmYWNlIHRoZSBjYW1lcmFcblx0XHRcdGdyb3VwLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0Z3JvdXAudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIGZhbHNlKTtcblx0XHRcdGdyb3VwLmdldFdvcmxkUXVhdGVybmlvbihxKTtcblx0XHRcdGNhbWVyYS5nZXRXb3JsZFF1YXRlcm5pb24oaW5uZXIucXVhdGVybmlvbikucHJlbXVsdGlwbHkocS5pbnZlcnQoKSk7XG5cblx0XHRcdC8vIHJlYWRqdXN0IGFueSBheGlzIHRoYXQgaXMgbG9ja2VkXG5cdFx0XHRpZiAobG9ja1gpIGdyb3VwLnJvdGF0aW9uLnggPSBwcmV2Um90YXRpb24ueDtcblx0XHRcdGlmIChsb2NrWSkgZ3JvdXAucm90YXRpb24ueSA9IHByZXZSb3RhdGlvbi55O1xuXHRcdFx0aWYgKGxvY2taKSBncm91cC5yb3RhdGlvbi56ID0gcHJldlJvdGF0aW9uLno7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,76 +0,0 @@
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.2.11", ngImport: i0, type: NgtsCatmullRomLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", 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.2.11", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jYXRtdWxsLXJvbS1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFTbkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELFNBQVMsRUFBRSxhQUFhO0lBQ3hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osUUFBUSxFQUFFLEVBQUU7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFYL0I7UUFZQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkMsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWhHLFNBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FB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VUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTyxPQUFPLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hHOytHQXBEWSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwyWEFLSixRQUFRLGdFQWJ4Qjs7OztFQUlULDREQUVTLFFBQVE7OzRGQUVOLGtCQUFrQjtrQkFYOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYXRtdWxsUm9tQ3VydmUzLCBDb2xvciwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDYXRtdWxsUm9tTGluZU9wdGlvbnMgZXh0ZW5kcyBPbWl0PE5ndHNMaW5lT3B0aW9ucywgJ3NlZ21lbnRzJz4ge1xuXHRjdXJ2ZVR5cGU6ICdjZW50cmlwZXRhbCcgfCAnY2hvcmRhbCcgfCAnY2F0bXVsbHJvbSc7XG5cdHRlbnNpb246IG51bWJlcjtcblx0c2VnbWVudHM6IG51bWJlcjtcblx0Y2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0NhdG11bGxSb21MaW5lT3B0aW9ucyA9IHtcblx0Y3VydmVUeXBlOiAnY2VudHJpcGV0YWwnLFxuXHR0ZW5zaW9uOiAwLjUsXG5cdHNlZ21lbnRzOiAyMCxcblx0Y2xvc2VkOiBmYWxzZSxcblx0bGluZVdpZHRoOiAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1jYXRtdWxsLXJvbS1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwic2VnbWVudGVkUG9pbnRzKClcIiBbb3B0aW9uc109XCJsaW5lT3B0aW9ucygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0cy1saW5lPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNMaW5lXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIHtcblx0cG9pbnRzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2N1cnZlVHlwZScsICd0ZW5zaW9uJywgJ3NlZ21lbnRzJywgJ2Nsb3NlZCcsICd2ZXJ0ZXhDb2xvcnMnXSk7XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBjbG9zZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nsb3NlZCcpO1xuXHRwcml2YXRlIGN1cnZlVHlwZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnY3VydmVUeXBlJyk7XG5cdHByaXZhdGUgdGVuc2lvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAndGVuc2lvbicpO1xuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0cHJpdmF0ZSBjdXJ2ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbcG9pbnRzLCBjbG9zZWQsIGN1cnZlVHlwZSwgdGVuc2lvbl0gPSBbdGhpcy5wb2ludHMoKSwgdGhpcy5jbG9zZWQoKSwgdGhpcy5jdXJ2ZVR5cGUoKSwgdGhpcy50ZW5zaW9uKCldO1xuXG5cdFx0Y29uc3QgbWFwcGVkUG9pbnRzID0gcG9pbnRzLm1hcCgocHQpID0+XG5cdFx0XHRwdCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwdCA6IG5ldyBWZWN0b3IzKC4uLihwdCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBDYXRtdWxsUm9tQ3VydmUzKG1hcHBlZFBvaW50cywgY2xvc2VkLCBjdXJ2ZVR5cGUsIHRlbnNpb24pO1xuXHR9KTtcblxuXHRzZWdtZW50ZWRQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2N1cnZlLCBzZWdtZW50c10gPSBbdGhpcy5jdXJ2ZSgpLCB0aGlzLnNlZ21lbnRzKCldO1xuXHRcdHJldHVybiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcblxuXHRwcml2YXRlIGludGVycG9sYXRlZFZlcnRleENvbG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbdmVydGV4Q29sb3JzLCBzZWdtZW50c10gPSBbdGhpcy52ZXJ0ZXhDb2xvcnMoKSwgdGhpcy5zZWdtZW50cygpXTtcblx0XHRpZiAoIXZlcnRleENvbG9ycyB8fCB2ZXJ0ZXhDb2xvcnMubGVuZ3RoIDwgMikgcmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cblx0XHRjb25zdCBtYXBwZWRDb2xvcnMgPSB2ZXJ0ZXhDb2xvcnMubWFwKChjb2xvcikgPT5cblx0XHRcdGNvbG9yIGluc3RhbmNlb2YgQ29sb3IgPyBjb2xvciA6IG5ldyBDb2xvciguLi4oY29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSksXG5cdFx0KTtcblx0XHRpZiAodW50cmFja2VkKHRoaXMuY2xvc2VkKSkgbWFwcGVkQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzWzBdLmNsb25lKCkpO1xuXG5cdFx0Y29uc3QgaUNvbG9yczogQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuXHRcdGNvbnN0IGRpdmlzaW9ucyA9IHNlZ21lbnRzIC8gKG1hcHBlZENvbG9ycy5sZW5ndGggLSAxKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IGFscGhhID0gKGkgJSBkaXZpc2lvbnMpIC8gZGl2aXNpb25zO1xuXHRcdFx0Y29uc3QgY29sb3JJbmRleCA9IE1hdGguZmxvb3IoaSAvIGRpdmlzaW9ucyk7XG5cdFx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW2NvbG9ySW5kZXhdLmNsb25lKCkubGVycChtYXBwZWRDb2xvcnNbY29sb3JJbmRleCArIDFdLCBhbHBoYSkpO1xuXHRcdH1cblx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW21hcHBlZENvbG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRyZXR1cm4gaUNvbG9ycztcblx0fSk7XG5cblx0bGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgdmVydGV4Q29sb3JzOiB0aGlzLmludGVycG9sYXRlZFZlcnRleENvbG9ycygpIH0pKTtcbn1cbiJdfQ==
@@ -1,51 +0,0 @@
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.2.11", ngImport: i0, type: NgtsCubicBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", 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.2.11", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvY3ViaWMtYmV6aWVyLWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFNbkQsTUFBTSxjQUFjLEdBQStCO0lBQ2xELFNBQVMsRUFBRSxDQUFDO0lBQ1osUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBYUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVlDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzdELFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzNELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztLQUNIOytHQXBCWSxtQkFBbUI7bUdBQW5CLG1CQUFtQixrdEJBUUwsUUFBUSxnRUFoQnhCOzs7O0VBSVQsNERBRVMsUUFBUTs7NEZBRU4sbUJBQW1CO2tCQVgvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDdWJpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDdWJpY0JlemllckxpbmVPcHRpb25zIGV4dGVuZHMgT21pdDxOZ3RzTGluZU9wdGlvbnMsICdzZWdtZW50cyc+IHtcblx0c2VnbWVudHM/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ3ViaWNCZXppZXJMaW5lT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHRzZWdtZW50czogMjAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWN1YmljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViaWNCZXppZXJMaW5lIHtcblx0c3RhcnQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRlbmQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRtaWRBID0gaW5wdXQucmVxdWlyZWQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0bWlkQiA9IGlucHV0LnJlcXVpcmVkPFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3NlZ21lbnRzJ10pO1xuXG5cdGxpbmUgPSB2aWV3Q2hpbGQucmVxdWlyZWQoTmd0c0xpbmUpO1xuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlZ21lbnRzJyk7XG5cblx0cG9pbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50c10gPSBbdGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpLCB0aGlzLm1pZEEoKSwgdGhpcy5taWRCKCksIHRoaXMuc2VnbWVudHMoKV07XG5cdFx0Y29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBWZWN0b3IzID8gc3RhcnQgOiBuZXcgVmVjdG9yMyguLi5zdGFydCk7XG5cdFx0Y29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBlbmQgOiBuZXcgVmVjdG9yMyguLi5lbmQpO1xuXHRcdGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFZlY3RvcjMgPyBtaWRBIDogbmV3IFZlY3RvcjMoLi4ubWlkQSk7XG5cdFx0Y29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVmVjdG9yMyA/IG1pZEIgOiBuZXcgVmVjdG9yMyguLi5taWRCKTtcblx0XHRyZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcbn1cbiJdfQ==
@@ -1,66 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, effect, input, viewChild } from '@angular/core';
2
- import { checkNeedsUpdate, getLocalState, omit } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { EdgesGeometry } from 'three';
5
- import { NgtsLine } from './line';
6
- import * as i0 from "@angular/core";
7
- const defaultOptions = {
8
- lineWidth: 1,
9
- threshold: 15,
10
- };
11
- export class NgtsEdges {
12
- constructor() {
13
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
14
- this.parameters = omit(this.options, ['threshold', 'geometry']);
15
- this.lineOptions = computed(() => ({ ...this.parameters(), raycast: () => null }));
16
- this.tmpPoints = [0, 0, 0, 1, 0, 0];
17
- this.line = viewChild.required(NgtsLine);
18
- effect(() => {
19
- const line = this.line().lineRef()?.nativeElement;
20
- if (!line)
21
- return;
22
- const lS = getLocalState(line);
23
- if (!lS)
24
- return;
25
- const parent = lS.parent();
26
- if (!parent)
27
- return;
28
- const { geometry: explicitGeometry, threshold } = this.options();
29
- const geometry = explicitGeometry ?? parent.geometry;
30
- if (!geometry)
31
- return;
32
- const cached = this.memoizedGeometry === geometry && this.memoizedThreshold === threshold;
33
- if (cached)
34
- return;
35
- this.memoizedGeometry = geometry;
36
- this.memoizedThreshold = threshold;
37
- const points = new EdgesGeometry(geometry, threshold).attributes['position']
38
- .array;
39
- line.geometry.setPositions(points);
40
- checkNeedsUpdate(line.geometry.attributes['instanceStart']);
41
- checkNeedsUpdate(line.geometry.attributes['instanceEnd']);
42
- line.computeLineDistances();
43
- });
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsEdges, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", 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: `
47
- <ngts-line [points]="tmpPoints" [options]="lineOptions()">
48
- <ng-content />
49
- </ngts-line>
50
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
- }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsEdges, decorators: [{
53
- type: Component,
54
- args: [{
55
- selector: 'ngts-edges',
56
- standalone: true,
57
- template: `
58
- <ngts-line [points]="tmpPoints" [options]="lineOptions()">
59
- <ng-content />
60
- </ngts-line>
61
- `,
62
- imports: [NgtsLine],
63
- changeDetection: ChangeDetectionStrategy.OnPush,
64
- }]
65
- }], ctorParameters: () => [] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZWRnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBd0QsYUFBYSxFQUFRLE1BQU0sT0FBTyxDQUFDO0FBRWxHLE9BQU8sRUFBNkIsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQVk3RCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFhRixNQUFNLE9BQU8sU0FBUztJQVlyQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU1uQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPO1lBRWxCLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLE1BQU0sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLENBQUM7WUFDMUYsSUFBSSxNQUFNO2dCQUFFLE9BQU87WUFFbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1lBRW5DLE1BQU0sTUFBTSxHQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFxQjtpQkFDL0YsS0FBcUIsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzVELGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQXhDVyxTQUFTO21HQUFULFNBQVMsc1BBT0ssUUFBUSxnRUFmeEI7Ozs7RUFJVCw0REFDUyxRQUFROzs0RkFHTixTQUFTO2tCQVhyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBnZXRMb2NhbFN0YXRlLCBOZ3RNZXNoLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvclJlcHJlc2VudGF0aW9uLCBFZGdlc0dlb21ldHJ5LCBNZXNoIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZU1hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RMaW5lMiwgTmd0TGluZU1hdGVyaWFsLCBOZ3RzTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCB0eXBlIE5ndHNFZGdlc09wdGlvbnMgPSBQYXJ0aWFsPE5ndE1lc2g+ICYge1xuXHR0aHJlc2hvbGQ/OiBudW1iZXI7XG5cdGxpbmVXaWR0aD86IG51bWJlcjtcbn0gJiBPbWl0PExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsICd2ZXJ0ZXhDb2xvcnMnIHwgJ2NvbG9yJz4gJlxuXHRPbWl0PFBhcnRpYWw8Tmd0TGluZTI+LCAnZ2VvbWV0cnknPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycyc+ICYge1xuXHRcdGdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdFx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR9O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0VkZ2VzT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHR0aHJlc2hvbGQ6IDE1LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtbGluZSBbcG9pbnRzXT1cInRtcFBvaW50c1wiIFtvcHRpb25zXT1cImxpbmVPcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzTGluZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3RocmVzaG9sZCcsICdnZW9tZXRyeSddKTtcblxuXHRwcm90ZWN0ZWQgbGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgcmF5Y2FzdDogKCkgPT4gbnVsbCB9KSk7XG5cdHByb3RlY3RlZCB0bXBQb2ludHMgPSBbMCwgMCwgMCwgMSwgMCwgMF07XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBtZW1vaXplZEdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdHByaXZhdGUgbWVtb2l6ZWRUaHJlc2hvbGQ/OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGxpbmUgPSB0aGlzLmxpbmUoKS5saW5lUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIWxpbmUpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbFMgPSBnZXRMb2NhbFN0YXRlKGxpbmUpO1xuXHRcdFx0aWYgKCFsUykgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBsUy5wYXJlbnQoKSBhcyBNZXNoO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgeyBnZW9tZXRyeTogZXhwbGljaXRHZW9tZXRyeSwgdGhyZXNob2xkIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gZXhwbGljaXRHZW9tZXRyeSA/PyBwYXJlbnQuZ2VvbWV0cnk7XG5cdFx0XHRpZiAoIWdlb21ldHJ5KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtb2l6ZWRHZW9tZXRyeSA9PT0gZ2VvbWV0cnkgJiYgdGhpcy5tZW1vaXplZFRocmVzaG9sZCA9PT0gdGhyZXNob2xkO1xuXHRcdFx0aWYgKGNhY2hlZCkgcmV0dXJuO1xuXG5cdFx0XHR0aGlzLm1lbW9pemVkR2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHRcdHRoaXMubWVtb2l6ZWRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG5cblx0XHRcdGNvbnN0IHBvaW50cyA9IChuZXcgRWRnZXNHZW9tZXRyeShnZW9tZXRyeSwgdGhyZXNob2xkKS5hdHRyaWJ1dGVzWydwb3NpdGlvbiddIGFzIEJ1ZmZlckF0dHJpYnV0ZSlcblx0XHRcdFx0LmFycmF5IGFzIEZsb2F0MzJBcnJheTtcblx0XHRcdGxpbmUuZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvaW50cyk7XG5cdFx0XHRjaGVja05lZWRzVXBkYXRlKGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddKTtcblx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUVuZCddKTtcblx0XHRcdGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,91 +0,0 @@
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.outputColorSpace = this.store.select('gl', 'outputColorSpace');
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.2.11", ngImport: i0, type: NgtsGradientTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.11", 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]="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.2.11", 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]="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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmFkaWVudC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBNkIsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBdUIsTUFBTSxPQUFPLENBQUM7O0FBVWxFLE1BQU0sY0FBYyxHQUErQjtJQUNsRCxJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxFQUFFO0lBQ1QsSUFBSSxFQUFFLFFBQVE7SUFDZCxpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGlCQUFpQixFQUFFLE1BQU07Q0FDekIsQ0FBQztBQW1CRixNQUFNLE9BQU8sbUJBQW1CO0lBMEQvQjtRQXpEQSxXQUFNLEdBQUcsS0FBSyxDQUFnQixLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUN4QyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBOEIsQ0FBQztRQUN0RCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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ZHJCOzs7Ozs7Ozs7RUFTVCw0REFHUyxPQUFPOzs0RkFFTCxtQkFBbUI7a0JBakIvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7OztFQVNUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RTdG9yZSwgTmd0QXJncywgTmd0QXR0YWNoYWJsZSwgTmd0VGV4dHVyZSwgb21pdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ2FudmFzVGV4dHVyZSwgQ29sb3IsIENvbG9yUmVwcmVzZW50YXRpb24gfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0dyYWRpZW50VGV4dHVyZU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE9taXQ8Tmd0VGV4dHVyZSwgJ3R5cGUnPj4ge1xuXHRzaXplOiBudW1iZXI7XG5cdHdpZHRoOiBudW1iZXI7XG5cdHR5cGU6ICdsaW5lYXInIHwgJ3JhZGlhbCc7XG5cdGlubmVyQ2lyY2xlUmFkaXVzOiBudW1iZXI7XG5cdG91dGVyQ2lyY2xlUmFkaXVzOiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzR3JhZGllbnRUZXh0dXJlT3B0aW9ucyA9IHtcblx0c2l6ZTogMTAyNCxcblx0d2lkdGg6IDE2LFxuXHR0eXBlOiAnbGluZWFyJyxcblx0aW5uZXJDaXJjbGVSYWRpdXM6IDAsXG5cdG91dGVyQ2lyY2xlUmFkaXVzOiAnYXV0bycsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWdyYWRpZW50LXRleHR1cmUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtY2FudmFzLXRleHR1cmVcblx0XHRcdCphcmdzPVwiW2NhbnZhcygpXVwiXG5cdFx0XHRbYXR0YWNoXT1cImF0dGFjaCgpXCJcblx0XHRcdFtjb2xvclNwYWNlXT1cIm91dHB1dENvbG9yU3BhY2UoKVwiXG5cdFx0XHRbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtY2FudmFzLXRleHR1cmU+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dyYWRpZW50VGV4dHVyZSB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdtYXAnKTtcblx0c3RvcHMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxudW1iZXI+PigpO1xuXHRjb2xvcnMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxDb2xvclJlcHJlc2VudGF0aW9uPj4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnc2l6ZScsICd3aWR0aCcsICd0eXBlJywgJ2lubmVyQ2lyY2xlUmFkaXVzJywgJ291dGVyQ2lyY2xlUmFkaXVzJ10pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRvdXRwdXRDb2xvclNwYWNlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJywgJ291dHB1dENvbG9yU3BhY2UnKTtcblx0cHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cblx0Y2FudmFzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGNhbnZhcyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcblx0XHRjb25zdCBbeyB3aWR0aCwgc2l6ZSwgdHlwZSwgb3V0ZXJDaXJjbGVSYWRpdXMsIGlubmVyQ2lyY2xlUmFkaXVzIH0sIHN0b3BzLCBjb2xvcnNdID0gW1xuXHRcdFx0dW50cmFja2VkKHRoaXMub3B0aW9ucyksXG5cdFx0XHR0aGlzLnN0b3BzKCksXG5cdFx0XHR0aGlzLmNvbG9ycygpLFxuXHRcdF07XG5cdFx0Y2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHNpemU7XG5cblx0XHRsZXQgZ3JhZGllbnQ6IENhbnZhc0dyYWRpZW50O1xuXG5cdFx0aWYgKHR5cGUgPT09ICdsaW5lYXInKSB7XG5cdFx0XHRncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgc2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNhbnZhc0NlbnRlclggPSBjYW52YXMud2lkdGggLyAyO1xuXHRcdFx0Y29uc3QgY2FudmFzQ2VudGVyWSA9IGNhbnZhcy5oZWlnaHQgLyAyO1xuXHRcdFx0Y29uc3QgcmFkaXVzID1cblx0XHRcdFx0b3V0ZXJDaXJjbGVSYWRpdXMgIT09ICdhdXRvJ1xuXHRcdFx0XHRcdD8gTWF0aC5hYnMoTnVtYmVyKG91dGVyQ2lyY2xlUmFkaXVzKSlcblx0XHRcdFx0XHQ6IE1hdGguc3FydChjYW52YXNDZW50ZXJYICoqIDIgKyBjYW52YXNDZW50ZXJZICoqIDIpO1xuXHRcdFx0Z3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFxuXHRcdFx0XHRjYW52YXNDZW50ZXJYLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJZLFxuXHRcdFx0XHRNYXRoLmFicyhpbm5lckNpcmNsZVJhZGl1cyksXG5cdFx0XHRcdGNhbnZhc0NlbnRlclgsXG5cdFx0XHRcdGNhbnZhc0NlbnRlclksXG5cdFx0XHRcdHJhZGl1cyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGVtcENvbG9yID0gbmV3IENvbG9yKCk7IC8vIHJldXNlIGluc3RhbmNlIGZvciBwZXJmb3JtYW5jZVxuXG5cdFx0bGV0IGkgPSBzdG9wcy5sZW5ndGg7XG5cdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0Z3JhZGllbnQuYWRkQ29sb3JTdG9wKHN0b3BzW2ldLCB0ZW1wQ29sb3Iuc2V0KGNvbG9yc1tpXSkuZ2V0U3R5bGUoKSk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0Y29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudDtcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBzaXplKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdHJldHVybiBjYW52YXM7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IENhbnZhc1RleHR1cmUgfSk7XG5cdH1cbn1cbiJdfQ==