angular-three-soba 2.13.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +247 -247
  2. package/abstractions/lib/edges.d.ts +276 -276
  3. package/abstractions/lib/grid.d.ts +45 -45
  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 +51 -51
  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/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  14. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  15. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  16. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-controls.mjs +16 -30
  18. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  20. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  22. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  24. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  26. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  28. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  30. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  31. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  33. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  34. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  35. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  36. package/materials/lib/mesh-portal-material.d.ts +1 -1
  37. package/materials/lib/mesh-refraction-material.d.ts +1 -1
  38. package/misc/lib/computed-attribute.d.ts +3 -3
  39. package/misc/lib/decal.d.ts +1 -1
  40. package/misc/lib/html/html.d.ts +2 -2
  41. package/package.json +8 -34
  42. package/performances/lib/instances/instances.d.ts +7 -7
  43. package/performances/lib/points/points.d.ts +16 -16
  44. package/performances/lib/segments/segments.d.ts +1 -1
  45. package/staging/lib/accumulative-shadows.d.ts +1 -1
  46. package/staging/lib/caustics.d.ts +1 -1
  47. package/staging/lib/center.d.ts +2 -2
  48. package/staging/lib/contact-shadows.d.ts +1 -1
  49. package/staging/lib/lightformer.d.ts +1 -1
  50. package/staging/lib/mask.d.ts +1 -1
  51. package/staging/lib/sky.d.ts +1 -1
  52. package/staging/lib/spot-light.d.ts +1 -1
  53. package/staging/lib/stage.d.ts +5 -5
  54. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  55. package/esm2022/abstractions/index.mjs +0 -14
  56. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  57. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  58. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  59. package/esm2022/abstractions/lib/edges.mjs +0 -66
  60. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  61. package/esm2022/abstractions/lib/grid.mjs +0 -103
  62. package/esm2022/abstractions/lib/helper.mjs +0 -74
  63. package/esm2022/abstractions/lib/line.mjs +0 -123
  64. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  65. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  66. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  67. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  68. package/esm2022/abstractions/lib/text.mjs +0 -86
  69. package/esm2022/angular-three-soba.mjs +0 -5
  70. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  71. package/esm2022/cameras/index.mjs +0 -5
  72. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  73. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  74. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  75. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  76. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  77. package/esm2022/controls/index.mjs +0 -9
  78. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  79. package/esm2022/controls/lib/orbit-controls.mjs +0 -120
  80. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  81. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  82. package/esm2022/gizmos/index.mjs +0 -6
  83. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  84. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  85. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  86. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  87. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  88. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  89. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  90. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  91. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  92. package/esm2022/index.mjs +0 -2
  93. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  94. package/esm2022/loaders/index.mjs +0 -7
  95. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  96. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  97. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  98. package/esm2022/loaders/lib/loader.mjs +0 -103
  99. package/esm2022/loaders/lib/progress.mjs +0 -51
  100. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  101. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  102. package/esm2022/materials/index.mjs +0 -9
  103. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  104. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  105. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  106. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  107. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  108. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  109. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  110. package/esm2022/materials/lib/point-material.mjs +0 -34
  111. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  112. package/esm2022/misc/index.mjs +0 -15
  113. package/esm2022/misc/lib/animations.mjs +0 -71
  114. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  115. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  116. package/esm2022/misc/lib/constants.mjs +0 -5
  117. package/esm2022/misc/lib/decal.mjs +0 -142
  118. package/esm2022/misc/lib/deprecated.mjs +0 -15
  119. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  120. package/esm2022/misc/lib/fbo.mjs +0 -86
  121. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  122. package/esm2022/misc/lib/html/html.mjs +0 -129
  123. package/esm2022/misc/lib/html/utils.mjs +0 -74
  124. package/esm2022/misc/lib/intersect.mjs +0 -49
  125. package/esm2022/misc/lib/preload.mjs +0 -58
  126. package/esm2022/misc/lib/sampler.mjs +0 -122
  127. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  128. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  129. package/esm2022/performances/index.mjs +0 -7
  130. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  131. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  132. package/esm2022/performances/lib/detailed.mjs +0 -53
  133. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  134. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  135. package/esm2022/performances/lib/points/points.mjs +0 -272
  136. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  137. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  138. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  139. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  140. package/esm2022/shaders/index.mjs +0 -4
  141. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  142. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  143. package/esm2022/shaders/lib/point-material.mjs +0 -24
  144. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  145. package/esm2022/staging/index.mjs +0 -21
  146. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  147. package/esm2022/staging/lib/backdrop.mjs +0 -69
  148. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  149. package/esm2022/staging/lib/bounds.mjs +0 -282
  150. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  151. package/esm2022/staging/lib/caustics.mjs +0 -184
  152. package/esm2022/staging/lib/center.mjs +0 -114
  153. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  154. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  155. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  156. package/esm2022/staging/lib/float.mjs +0 -70
  157. package/esm2022/staging/lib/lightformer.mjs +0 -103
  158. package/esm2022/staging/lib/mask.mjs +0 -74
  159. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  160. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  161. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  162. package/esm2022/staging/lib/render-texture.mjs +0 -202
  163. package/esm2022/staging/lib/sky.mjs +0 -86
  164. package/esm2022/staging/lib/spot-light.mjs +0 -445
  165. package/esm2022/staging/lib/stage.mjs +0 -232
  166. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  167. package/esm2022/stats/index.mjs +0 -2
  168. package/esm2022/stats/lib/stats.mjs +0 -57
  169. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  170. package/esm2022/vanilla-exports/index.mjs +0 -3
@@ -1,70 +0,0 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input, viewChild, } from '@angular/core';
2
- import { extend, injectBeforeRender, omit } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { Group, MathUtils } from 'three';
5
- import * as i0 from "@angular/core";
6
- const defaultOptions = {
7
- enabled: true,
8
- speed: 1,
9
- rotationIntensity: 1,
10
- floatIntensity: 1,
11
- floatingRange: [-0.1, 0.1],
12
- autoInvalidate: false,
13
- };
14
- export class NgtsFloat {
15
- constructor() {
16
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
17
- this.parameters = omit(this.options, [
18
- 'enabled',
19
- 'speed',
20
- 'rotationIntensity',
21
- 'floatIntensity',
22
- 'floatingRange',
23
- 'autoInvalidate',
24
- ]);
25
- this.floatRef = viewChild.required('float');
26
- extend({ Group });
27
- const offset = Math.random() * 10000;
28
- injectBeforeRender(({ clock, invalidate }) => {
29
- const [{ enabled, speed, rotationIntensity, floatingRange, floatIntensity, autoInvalidate }] = [this.options()];
30
- if (!enabled || speed === 0)
31
- return;
32
- if (autoInvalidate)
33
- invalidate();
34
- const container = this.floatRef().nativeElement;
35
- const offsetTime = offset + clock.getElapsedTime();
36
- container.rotation.x = (Math.cos((offsetTime / 4) * speed) / 8) * rotationIntensity;
37
- container.rotation.y = (Math.sin((offsetTime / 4) * speed) / 8) * rotationIntensity;
38
- container.rotation.z = (Math.sin((offsetTime / 4) * speed) / 20) * rotationIntensity;
39
- let yPosition = Math.sin((offsetTime / 4) * speed) / 10;
40
- yPosition = MathUtils.mapLinear(yPosition, -0.1, 0.1, floatingRange[0] ?? -0.1, floatingRange[1] ?? 0.1);
41
- container.position.y = yPosition * floatIntensity;
42
- container.updateMatrix();
43
- });
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsFloat, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsFloat, isStandalone: true, selector: "ngts-float", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "floatRef", first: true, predicate: ["float"], descendants: true, isSignal: true }], ngImport: i0, template: `
47
- <ngt-group [parameters]="parameters()">
48
- <ngt-group #float [matrixAutoUpdate]="false">
49
- <ng-content />
50
- </ngt-group>
51
- </ngt-group>
52
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
- }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsFloat, decorators: [{
55
- type: Component,
56
- args: [{
57
- selector: 'ngts-float',
58
- standalone: true,
59
- template: `
60
- <ngt-group [parameters]="parameters()">
61
- <ngt-group #float [matrixAutoUpdate]="false">
62
- <ng-content />
63
- </ngt-group>
64
- </ngt-group>
65
- `,
66
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
67
- changeDetection: ChangeDetectionStrategy.OnPush,
68
- }]
69
- }], ctorParameters: () => [] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2Zsb2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFXekMsTUFBTSxjQUFjLEdBQXFCO0lBQ3hDLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLENBQUM7SUFDUixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGNBQWMsRUFBRSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMxQixjQUFjLEVBQUUsS0FBSztDQUNyQixDQUFDO0FBZUYsTUFBTSxPQUFPLFNBQVM7SUFhckI7UUFaQSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixTQUFTO1lBQ1QsT0FBTztZQUNQLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGdCQUFnQjtTQUNoQixDQUFDLENBQUM7UUFFSCxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFHekQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2hILElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUVwQyxJQUFJLGNBQWM7Z0JBQUUsVUFBVSxFQUFFLENBQUM7WUFFakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUVoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztZQUNwRixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDcEYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBRXJGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hELFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN6RyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsY0FBYyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7K0dBbkNXLFNBQVM7bUdBQVQsU0FBUyxtVUFWWDs7Ozs7O0VBTVQ7OzRGQUlXLFNBQVM7a0JBYnJCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7OztFQU1UO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEdyb3VwLCBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgb21pdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAsIE1hdGhVdGlscyB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzRmxvYXRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRzcGVlZDogbnVtYmVyO1xuXHRyb3RhdGlvbkludGVuc2l0eTogbnVtYmVyO1xuXHRmbG9hdEludGVuc2l0eTogbnVtYmVyO1xuXHRmbG9hdGluZ1JhbmdlOiBbbnVtYmVyPywgbnVtYmVyP107XG5cdGF1dG9JbnZhbGlkYXRlOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0Zsb2F0T3B0aW9ucyA9IHtcblx0ZW5hYmxlZDogdHJ1ZSxcblx0c3BlZWQ6IDEsXG5cdHJvdGF0aW9uSW50ZW5zaXR5OiAxLFxuXHRmbG9hdEludGVuc2l0eTogMSxcblx0ZmxvYXRpbmdSYW5nZTogWy0wLjEsIDAuMV0sXG5cdGF1dG9JbnZhbGlkYXRlOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZmxvYXQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmd0LWdyb3VwICNmbG9hdCBbbWF0cml4QXV0b1VwZGF0ZV09XCJmYWxzZVwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNGbG9hdCB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J2VuYWJsZWQnLFxuXHRcdCdzcGVlZCcsXG5cdFx0J3JvdGF0aW9uSW50ZW5zaXR5Jyxcblx0XHQnZmxvYXRJbnRlbnNpdHknLFxuXHRcdCdmbG9hdGluZ1JhbmdlJyxcblx0XHQnYXV0b0ludmFsaWRhdGUnLFxuXHRdKTtcblxuXHRmbG9hdFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2Zsb2F0Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBvZmZzZXQgPSBNYXRoLnJhbmRvbSgpICogMTAwMDA7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNsb2NrLCBpbnZhbGlkYXRlIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IGVuYWJsZWQsIHNwZWVkLCByb3RhdGlvbkludGVuc2l0eSwgZmxvYXRpbmdSYW5nZSwgZmxvYXRJbnRlbnNpdHksIGF1dG9JbnZhbGlkYXRlIH1dID0gW3RoaXMub3B0aW9ucygpXTtcblx0XHRcdGlmICghZW5hYmxlZCB8fCBzcGVlZCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoYXV0b0ludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcblxuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5mbG9hdFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGNvbnN0IG9mZnNldFRpbWUgPSBvZmZzZXQgKyBjbG9jay5nZXRFbGFwc2VkVGltZSgpO1xuXHRcdFx0Y29udGFpbmVyLnJvdGF0aW9uLnggPSAoTWF0aC5jb3MoKG9mZnNldFRpbWUgLyA0KSAqIHNwZWVkKSAvIDgpICogcm90YXRpb25JbnRlbnNpdHk7XG5cdFx0XHRjb250YWluZXIucm90YXRpb24ueSA9IChNYXRoLnNpbigob2Zmc2V0VGltZSAvIDQpICogc3BlZWQpIC8gOCkgKiByb3RhdGlvbkludGVuc2l0eTtcblx0XHRcdGNvbnRhaW5lci5yb3RhdGlvbi56ID0gKE1hdGguc2luKChvZmZzZXRUaW1lIC8gNCkgKiBzcGVlZCkgLyAyMCkgKiByb3RhdGlvbkludGVuc2l0eTtcblxuXHRcdFx0bGV0IHlQb3NpdGlvbiA9IE1hdGguc2luKChvZmZzZXRUaW1lIC8gNCkgKiBzcGVlZCkgLyAxMDtcblx0XHRcdHlQb3NpdGlvbiA9IE1hdGhVdGlscy5tYXBMaW5lYXIoeVBvc2l0aW9uLCAtMC4xLCAwLjEsIGZsb2F0aW5nUmFuZ2VbMF0gPz8gLTAuMSwgZmxvYXRpbmdSYW5nZVsxXSA/PyAwLjEpO1xuXHRcdFx0Y29udGFpbmVyLnBvc2l0aW9uLnkgPSB5UG9zaXRpb24gKiBmbG9hdEludGVuc2l0eTtcblx0XHRcdGNvbnRhaW5lci51cGRhdGVNYXRyaXgoKTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,103 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, viewChild, } from '@angular/core';
2
- import { applyProps, extend, NgtArgs, omit, pick, vector3 } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { DoubleSide, Mesh, MeshBasicMaterial, PlaneGeometry, RingGeometry } from 'three';
5
- import * as i0 from "@angular/core";
6
- const defaultOptions = {
7
- toneMapped: false,
8
- color: 'white',
9
- form: 'rect',
10
- scale: 1,
11
- intensity: 1,
12
- };
13
- export class NgtsLightformer {
14
- constructor() {
15
- this.side = DoubleSide;
16
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
17
- this.parameters = omit(this.options, ['map', 'toneMapped', 'color', 'form', 'scale', 'intensity', 'target']);
18
- this.intensity = pick(this.options, 'intensity');
19
- this.color = pick(this.options, 'color');
20
- this.target = vector3(this.options, 'target', true);
21
- this.scale = pick(this.options, 'scale');
22
- this.fixedScale = computed(() => {
23
- const scale = this.scale();
24
- return Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
25
- });
26
- this.form = pick(this.options, 'form');
27
- this.toneMapped = pick(this.options, 'toneMapped');
28
- this.map = pick(this.options, 'map');
29
- this.meshRef = viewChild.required('mesh');
30
- this.defaultMaterialRef = viewChild('defaultMaterial');
31
- extend({ Mesh, MeshBasicMaterial, RingGeometry, PlaneGeometry });
32
- effect(() => {
33
- const material = this.defaultMaterialRef()?.nativeElement;
34
- if (!material)
35
- return;
36
- applyProps(material, { color: this.color() });
37
- material.color.multiplyScalar(this.intensity());
38
- });
39
- effect(() => {
40
- const target = this.target();
41
- if (!target)
42
- return;
43
- const mesh = this.meshRef().nativeElement;
44
- mesh.lookAt(target);
45
- });
46
- }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsLightformer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsLightformer, isStandalone: true, selector: "ngts-lightformer", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }, { propertyName: "defaultMaterialRef", first: true, predicate: ["defaultMaterial"], descendants: true, isSignal: true }], ngImport: i0, template: `
49
- <ngt-mesh #mesh [scale]="fixedScale()" [parameters]="parameters()">
50
- <ng-content select="[data-lightformer-geometry]">
51
- @switch (form()) {
52
- @case ('circle') {
53
- <ngt-ring-geometry *args="[0, 1, 64]" />
54
- }
55
- @case ('ring') {
56
- <ngt-ring-geometry *args="[0.5, 1, 64]" />
57
- }
58
- @case ('rect') {
59
- <ngt-plane-geometry />
60
- }
61
- }
62
- </ng-content>
63
- <ng-content select="[data-lightformer-material]">
64
- <ngt-mesh-basic-material #defaultMaterial [toneMapped]="toneMapped()" [map]="map()" [side]="side" />
65
- </ng-content>
66
-
67
- <ng-content />
68
- </ngt-mesh>
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: NgtsLightformer, decorators: [{
72
- type: Component,
73
- args: [{
74
- selector: 'ngts-lightformer',
75
- standalone: true,
76
- template: `
77
- <ngt-mesh #mesh [scale]="fixedScale()" [parameters]="parameters()">
78
- <ng-content select="[data-lightformer-geometry]">
79
- @switch (form()) {
80
- @case ('circle') {
81
- <ngt-ring-geometry *args="[0, 1, 64]" />
82
- }
83
- @case ('ring') {
84
- <ngt-ring-geometry *args="[0.5, 1, 64]" />
85
- }
86
- @case ('rect') {
87
- <ngt-plane-geometry />
88
- }
89
- }
90
- </ng-content>
91
- <ng-content select="[data-lightformer-material]">
92
- <ngt-mesh-basic-material #defaultMaterial [toneMapped]="toneMapped()" [map]="map()" [side]="side" />
93
- </ng-content>
94
-
95
- <ng-content />
96
- </ngt-mesh>
97
- `,
98
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
99
- changeDetection: ChangeDetectionStrategy.OnPush,
100
- imports: [NgtArgs],
101
- }]
102
- }], ctorParameters: () => [] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2xpZ2h0Zm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsTUFBTSxFQUVOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUF1QixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBVyxNQUFNLE9BQU8sQ0FBQzs7QUFZbEcsTUFBTSxjQUFjLEdBQTZEO0lBQ2hGLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsQ0FBQztJQUNSLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQStCRixNQUFNLE9BQU8sZUFBZTtJQXFCM0I7UUFwQkEsU0FBSSxHQUFHLFVBQVUsQ0FBQztRQUVsQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFaEcsY0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9DLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQztRQUNILFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsUUFBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhDLFlBQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFtQixNQUFNLENBQUMsQ0FBQztRQUN2RCx1QkFBa0IsR0FBRyxTQUFTLENBQWdDLGlCQUFpQixDQUFDLENBQUM7UUFHaEYsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDMUQsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0F2Q1csZUFBZTttR0FBZixlQUFlLCtiQTFCakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFCVCw0REFHUyxPQUFPOzs0RkFFTCxlQUFlO2tCQTdCM0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseVByb3BzLCBleHRlbmQsIE5ndEFyZ3MsIE5ndE1lc2gsIE5ndFZlY3RvcjMsIG9taXQsIHBpY2ssIHZlY3RvcjMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IERvdWJsZVNpZGUsIE1lc2gsIE1lc2hCYXNpY01hdGVyaWFsLCBQbGFuZUdlb21ldHJ5LCBSaW5nR2VvbWV0cnksIFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0xpZ2h0Zm9ybWVyT3B0aW9ucyB7XG5cdG1hcD86IFRleHR1cmU7XG5cdHRvbmVNYXBwZWQ6IGJvb2xlYW47XG5cdGNvbG9yOiBzdHJpbmc7XG5cdGZvcm06ICdjaXJjbGUnIHwgJ3JpbmcnIHwgJ3JlY3QnO1xuXHRzY2FsZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXTtcblx0aW50ZW5zaXR5OiBudW1iZXI7XG5cdHRhcmdldD86IE5ndFZlY3RvcjM7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBQYXJ0aWFsPE9taXQ8Tmd0TWVzaCwgJ3NjYWxlJz4+ICYgTmd0c0xpZ2h0Zm9ybWVyT3B0aW9ucyA9IHtcblx0dG9uZU1hcHBlZDogZmFsc2UsXG5cdGNvbG9yOiAnd2hpdGUnLFxuXHRmb3JtOiAncmVjdCcsXG5cdHNjYWxlOiAxLFxuXHRpbnRlbnNpdHk6IDEsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWxpZ2h0Zm9ybWVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW3NjYWxlXT1cImZpeGVkU2NhbGUoKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RhdGEtbGlnaHRmb3JtZXItZ2VvbWV0cnldXCI+XG5cdFx0XHRcdEBzd2l0Y2ggKGZvcm0oKSkge1xuXHRcdFx0XHRcdEBjYXNlICgnY2lyY2xlJykge1xuXHRcdFx0XHRcdFx0PG5ndC1yaW5nLWdlb21ldHJ5ICphcmdzPVwiWzAsIDEsIDY0XVwiIC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBjYXNlICgncmluZycpIHtcblx0XHRcdFx0XHRcdDxuZ3QtcmluZy1nZW9tZXRyeSAqYXJncz1cIlswLjUsIDEsIDY0XVwiIC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBjYXNlICgncmVjdCcpIHtcblx0XHRcdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdDwvbmctY29udGVudD5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIltkYXRhLWxpZ2h0Zm9ybWVyLW1hdGVyaWFsXVwiPlxuXHRcdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWwgI2RlZmF1bHRNYXRlcmlhbCBbdG9uZU1hcHBlZF09XCJ0b25lTWFwcGVkKClcIiBbbWFwXT1cIm1hcCgpXCIgW3NpZGVdPVwic2lkZVwiIC8+XG5cdFx0XHQ8L25nLWNvbnRlbnQ+XG5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGlnaHRmb3JtZXIge1xuXHRzaWRlID0gRG91YmxlU2lkZTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydtYXAnLCAndG9uZU1hcHBlZCcsICdjb2xvcicsICdmb3JtJywgJ3NjYWxlJywgJ2ludGVuc2l0eScsICd0YXJnZXQnXSk7XG5cblx0cHJpdmF0ZSBpbnRlbnNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ludGVuc2l0eScpO1xuXHRwcml2YXRlIGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRwcml2YXRlIHRhcmdldCA9IHZlY3RvcjModGhpcy5vcHRpb25zLCAndGFyZ2V0JywgdHJ1ZSk7XG5cdHByaXZhdGUgc2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdGZpeGVkU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2NhbGUgPSB0aGlzLnNjYWxlKCk7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoc2NhbGUpICYmIHNjYWxlLmxlbmd0aCA9PT0gMiA/IFtzY2FsZVswXSwgc2NhbGVbMV0sIDFdIDogc2NhbGU7XG5cdH0pO1xuXHRmb3JtID0gcGljayh0aGlzLm9wdGlvbnMsICdmb3JtJyk7XG5cdHRvbmVNYXBwZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3RvbmVNYXBwZWQnKTtcblx0bWFwID0gcGljayh0aGlzLm9wdGlvbnMsICdtYXAnKTtcblxuXHRtZXNoUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cdGRlZmF1bHRNYXRlcmlhbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPE1lc2hCYXNpY01hdGVyaWFsPj4oJ2RlZmF1bHRNYXRlcmlhbCcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2gsIE1lc2hCYXNpY01hdGVyaWFsLCBSaW5nR2VvbWV0cnksIFBsYW5lR2VvbWV0cnkgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLmRlZmF1bHRNYXRlcmlhbFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFtYXRlcmlhbCkgcmV0dXJuO1xuXG5cdFx0XHRhcHBseVByb3BzKG1hdGVyaWFsLCB7IGNvbG9yOiB0aGlzLmNvbG9yKCkgfSk7XG5cdFx0XHRtYXRlcmlhbC5jb2xvci5tdWx0aXBseVNjYWxhcih0aGlzLmludGVuc2l0eSgpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdFx0aWYgKCF0YXJnZXQpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbWVzaCA9IHRoaXMubWVzaFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRtZXNoLmxvb2tBdCh0YXJnZXQpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -1,74 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, numberAttribute, viewChild, } from '@angular/core';
2
- import { extend, omit, pick } from 'angular-three';
3
- import { assertInjector } from 'ngxtension/assert-injector';
4
- import { mergeInputs } from 'ngxtension/inject-inputs';
5
- import { AlwaysStencilFunc, EqualStencilFunc, KeepStencilOp, Mesh, NotEqualStencilFunc, ReplaceStencilOp, } from 'three';
6
- import * as i0 from "@angular/core";
7
- const defaultOptions = {
8
- colorWrite: false,
9
- depthWrite: false,
10
- };
11
- export class NgtsMask {
12
- constructor() {
13
- this.id = input(1, { transform: numberAttribute });
14
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
15
- this.parameters = omit(this.options, ['colorWrite', 'depthWrite']);
16
- this.meshRef = viewChild.required('mesh');
17
- this.colorWrite = pick(this.options, 'colorWrite');
18
- this.depthWrite = pick(this.options, 'depthWrite');
19
- this.spread = computed(() => {
20
- const [id, colorWrite, depthWrite] = [this.id(), this.colorWrite(), this.depthWrite()];
21
- return {
22
- colorWrite,
23
- depthWrite,
24
- stencilWrite: true,
25
- stencilRef: id,
26
- stencilFunc: AlwaysStencilFunc,
27
- stencilFail: ReplaceStencilOp,
28
- stencilZFail: ReplaceStencilOp,
29
- stencilZPass: ReplaceStencilOp,
30
- };
31
- });
32
- extend({ Mesh });
33
- effect(() => {
34
- const [mesh, spread] = [this.meshRef().nativeElement, this.spread()];
35
- Object.assign(mesh.material, spread);
36
- });
37
- }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMask, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsMask, isStandalone: true, selector: "ngts-mask", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
40
- <ngt-mesh #mesh [renderOrder]="-id()" [parameters]="parameters()">
41
- <ng-content />
42
- </ngt-mesh>
43
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
- }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMask, decorators: [{
46
- type: Component,
47
- args: [{
48
- selector: 'ngts-mask',
49
- standalone: true,
50
- template: `
51
- <ngt-mesh #mesh [renderOrder]="-id()" [parameters]="parameters()">
52
- <ng-content />
53
- </ngt-mesh>
54
- `,
55
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
56
- changeDetection: ChangeDetectionStrategy.OnPush,
57
- }]
58
- }], ctorParameters: () => [] });
59
- export function injectMask(id, inverse = () => false, { injector } = {}) {
60
- return assertInjector(injectMask, injector, () => {
61
- return computed(() => {
62
- const [_id, _inverse] = [id(), inverse()];
63
- return {
64
- stencilWrite: true,
65
- stencilRef: _id,
66
- stencilFunc: _inverse ? NotEqualStencilFunc : EqualStencilFunc,
67
- stencilFail: KeepStencilOp,
68
- stencilZFail: KeepStencilOp,
69
- stencilZPass: KeepStencilOp,
70
- };
71
- });
72
- });
73
- }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9saWIvbWFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFHTixLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFXLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQ04saUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixnQkFBZ0IsR0FDaEIsTUFBTSxPQUFPLENBQUM7O0FBT2YsTUFBTSxjQUFjLEdBQW9CO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFVBQVUsRUFBRSxLQUFLO0NBQ2pCLENBQUM7QUFhRixNQUFNLE9BQU8sUUFBUTtJQXdCcEI7UUF2QkEsT0FBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5QyxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTlELFlBQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QyxNQUFNLENBQUMsQ0FBQztRQUV6RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN2RixPQUFPO2dCQUNOLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsV0FBVyxFQUFFLGlCQUFpQjtnQkFDOUIsV0FBVyxFQUFFLGdCQUFnQjtnQkFDN0IsWUFBWSxFQUFFLGdCQUFnQjtnQkFDOUIsWUFBWSxFQUFFLGdCQUFnQjthQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQS9CVyxRQUFRO21HQUFSLFFBQVEsK2FBUlY7Ozs7RUFJVDs7NEZBSVcsUUFBUTtrQkFYcEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0M7O0FBbUNELE1BQU0sVUFBVSxVQUFVLENBQ3pCLEVBQWdCLEVBQ2hCLFVBQXlCLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFDcEMsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFMUMsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE9BQU87Z0JBQ04sWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFVBQVUsRUFBRSxHQUFHO2dCQUNmLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7Z0JBQzlELFdBQVcsRUFBRSxhQUFhO2dCQUMxQixZQUFZLEVBQUUsYUFBYTtnQkFDM0IsWUFBWSxFQUFFLGFBQWE7YUFDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdGlucHV0LFxuXHRudW1iZXJBdHRyaWJ1dGUsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIE5ndE1lc2gsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHtcblx0QWx3YXlzU3RlbmNpbEZ1bmMsXG5cdEJ1ZmZlckdlb21ldHJ5LFxuXHRFcXVhbFN0ZW5jaWxGdW5jLFxuXHRLZWVwU3RlbmNpbE9wLFxuXHRNYXRlcmlhbCxcblx0TWVzaCxcblx0Tm90RXF1YWxTdGVuY2lsRnVuYyxcblx0UmVwbGFjZVN0ZW5jaWxPcCxcbn0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNNYXNrT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0TWVzaD4ge1xuXHRjb2xvcldyaXRlOiBib29sZWFuO1xuXHRkZXB0aFdyaXRlOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c01hc2tPcHRpb25zID0ge1xuXHRjb2xvcldyaXRlOiBmYWxzZSxcblx0ZGVwdGhXcml0ZTogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1hc2snLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbcmVuZGVyT3JkZXJdPVwiLWlkKClcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01hc2sge1xuXHRpZCA9IGlucHV0KDEsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnY29sb3JXcml0ZScsICdkZXB0aFdyaXRlJ10pO1xuXG5cdG1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxNZXNoPEJ1ZmZlckdlb21ldHJ5LCBNYXRlcmlhbD4+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgY29sb3JXcml0ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29sb3JXcml0ZScpO1xuXHRwcml2YXRlIGRlcHRoV3JpdGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlcHRoV3JpdGUnKTtcblx0cHJpdmF0ZSBzcHJlYWQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2lkLCBjb2xvcldyaXRlLCBkZXB0aFdyaXRlXSA9IFt0aGlzLmlkKCksIHRoaXMuY29sb3JXcml0ZSgpLCB0aGlzLmRlcHRoV3JpdGUoKV07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbG9yV3JpdGUsXG5cdFx0XHRkZXB0aFdyaXRlLFxuXHRcdFx0c3RlbmNpbFdyaXRlOiB0cnVlLFxuXHRcdFx0c3RlbmNpbFJlZjogaWQsXG5cdFx0XHRzdGVuY2lsRnVuYzogQWx3YXlzU3RlbmNpbEZ1bmMsXG5cdFx0XHRzdGVuY2lsRmFpbDogUmVwbGFjZVN0ZW5jaWxPcCxcblx0XHRcdHN0ZW5jaWxaRmFpbDogUmVwbGFjZVN0ZW5jaWxPcCxcblx0XHRcdHN0ZW5jaWxaUGFzczogUmVwbGFjZVN0ZW5jaWxPcCxcblx0XHR9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoIH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFttZXNoLCBzcHJlYWRdID0gW3RoaXMubWVzaFJlZigpLm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3ByZWFkKCldO1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNoLm1hdGVyaWFsLCBzcHJlYWQpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RNYXNrKFxuXHRpZDogKCkgPT4gbnVtYmVyLFxuXHRpbnZlcnNlOiAoKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0TWFzaywgaW5qZWN0b3IsICgpID0+IHtcblx0XHRyZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW19pZCwgX2ludmVyc2VdID0gW2lkKCksIGludmVyc2UoKV07XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGVuY2lsV3JpdGU6IHRydWUsXG5cdFx0XHRcdHN0ZW5jaWxSZWY6IF9pZCxcblx0XHRcdFx0c3RlbmNpbEZ1bmM6IF9pbnZlcnNlID8gTm90RXF1YWxTdGVuY2lsRnVuYyA6IEVxdWFsU3RlbmNpbEZ1bmMsXG5cdFx0XHRcdHN0ZW5jaWxGYWlsOiBLZWVwU3RlbmNpbE9wLFxuXHRcdFx0XHRzdGVuY2lsWkZhaWw6IEtlZXBTdGVuY2lsT3AsXG5cdFx0XHRcdHN0ZW5jaWxaUGFzczogS2VlcFN0ZW5jaWxPcCxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH0pO1xufVxuIl19
@@ -1,79 +0,0 @@
1
- import { DestroyRef, Directive, TemplateRef, ViewContainerRef, computed, effect, inject, input, output, signal, untracked, } from '@angular/core';
2
- import { injectTexture } from 'angular-three-soba/loaders';
3
- import { assertInjector } from 'ngxtension/assert-injector';
4
- import * as i0 from "@angular/core";
5
- function getFormatString(format) {
6
- switch (format) {
7
- case 64:
8
- return '-64px';
9
- case 128:
10
- return '-128px';
11
- case 256:
12
- return '-256px';
13
- case 512:
14
- return '-512px';
15
- default:
16
- return '';
17
- }
18
- }
19
- const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';
20
- const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';
21
- export function injectMatcapTexture(id = () => 0, { format = () => 1024, onLoad, injector, } = {}) {
22
- return assertInjector(injectMatcapTexture, injector, () => {
23
- const matcapList = signal({});
24
- fetch(LIST_URL)
25
- .then((res) => res.json())
26
- .then((list) => {
27
- matcapList.set(list);
28
- });
29
- const DEFAULT_MATCAP = computed(() => matcapList()[0]);
30
- const numTot = computed(() => Object.keys(matcapList()).length);
31
- const fileHash = computed(() => {
32
- const idValue = id();
33
- if (typeof idValue === 'string') {
34
- return idValue;
35
- }
36
- if (typeof idValue === 'number') {
37
- return matcapList()[idValue];
38
- }
39
- return null;
40
- });
41
- const fileName = computed(() => `${fileHash() || DEFAULT_MATCAP()}${getFormatString(format())}.png`);
42
- const url = computed(() => `${MATCAP_ROOT}/${format()}/${fileName()}`);
43
- const matcapTexture = injectTexture(url, { onLoad });
44
- return { url, texture: matcapTexture, numTot };
45
- });
46
- }
47
- export class NgtsMatcapTexture {
48
- constructor() {
49
- this.matcapTexture = input();
50
- this.matcapTextureLoaded = output();
51
- this.template = inject(TemplateRef);
52
- this.vcr = inject(ViewContainerRef);
53
- this.id = computed(() => this.matcapTexture()?.id ?? 0);
54
- this.format = computed(() => this.matcapTexture()?.format ?? 1024);
55
- const { texture } = injectMatcapTexture(this.id, {
56
- format: this.format,
57
- onLoad: this.matcapTextureLoaded.emit.bind(this.matcapTextureLoaded),
58
- });
59
- effect(() => {
60
- untracked(() => {
61
- this.ref = this.vcr.createEmbeddedView(this.template, { $implicit: texture });
62
- this.ref.detectChanges();
63
- });
64
- });
65
- inject(DestroyRef).onDestroy(() => {
66
- this.ref?.destroy();
67
- });
68
- }
69
- static ngTemplateContextGuard(_, ctx) {
70
- return true;
71
- }
72
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMatcapTexture, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
73
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtsMatcapTexture, isStandalone: true, selector: "ng-template[matcapTexture]", inputs: { matcapTexture: { classPropertyName: "matcapTexture", publicName: "matcapTexture", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { matcapTextureLoaded: "matcapTextureLoaded" }, ngImport: i0 }); }
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMatcapTexture, decorators: [{
76
- type: Directive,
77
- args: [{ selector: 'ng-template[matcapTexture]', standalone: true }]
78
- }], ctorParameters: () => [] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2FwLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL21hdGNhcC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUlULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRzVELFNBQVMsZUFBZSxDQUFDLE1BQWM7SUFDdEMsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNoQixLQUFLLEVBQUU7WUFDTixPQUFPLE9BQU8sQ0FBQztRQUNoQixLQUFLLEdBQUc7WUFDUCxPQUFPLFFBQVEsQ0FBQztRQUNqQixLQUFLLEdBQUc7WUFDUCxPQUFPLFFBQVEsQ0FBQztRQUNqQixLQUFLLEdBQUc7WUFDUCxPQUFPLFFBQVEsQ0FBQztRQUNqQjtZQUNDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxvRUFBb0UsQ0FBQztBQUN0RixNQUFNLFdBQVcsR0FBRyx3RkFBd0YsQ0FBQztBQUU3RyxNQUFNLFVBQVUsbUJBQW1CLENBQ2xDLEtBQTRCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDbkMsRUFDQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUNuQixNQUFNLEVBQ04sUUFBUSxNQUNrRixFQUFFO0lBRTdGLE9BQU8sY0FBYyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUF5QixFQUFFLENBQUMsQ0FBQztRQUV0RCxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sT0FBTyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksY0FBYyxFQUFFLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdkUsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVFELE1BQU0sT0FBTyxpQkFBaUI7SUFZN0I7UUFYQSxrQkFBYSxHQUFHLEtBQUssRUFBNEIsQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxNQUFNLEVBQWEsQ0FBQztRQUVsQyxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLFFBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvQixPQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBS3JFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2hELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ3BFLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQW9CLEVBQUUsR0FBWTtRQUMvRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7K0dBaENXLGlCQUFpQjttR0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdEVtYmVkZGVkVmlld1JlZixcblx0SW5qZWN0b3IsXG5cdFNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG91dHB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0VGV4dHVyZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9sb2FkZXJzJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxuZnVuY3Rpb24gZ2V0Rm9ybWF0U3RyaW5nKGZvcm1hdDogbnVtYmVyKSB7XG5cdHN3aXRjaCAoZm9ybWF0KSB7XG5cdFx0Y2FzZSA2NDpcblx0XHRcdHJldHVybiAnLTY0cHgnO1xuXHRcdGNhc2UgMTI4OlxuXHRcdFx0cmV0dXJuICctMTI4cHgnO1xuXHRcdGNhc2UgMjU2OlxuXHRcdFx0cmV0dXJuICctMjU2cHgnO1xuXHRcdGNhc2UgNTEyOlxuXHRcdFx0cmV0dXJuICctNTEycHgnO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gJyc7XG5cdH1cbn1cblxuY29uc3QgTElTVF9VUkwgPSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3BtbmRycy9kcmVpLWFzc2V0c0BtYXN0ZXIvbWF0Y2Fwcy5qc29uJztcbmNvbnN0IE1BVENBUF9ST09UID0gJ2h0dHBzOi8vcmF3Y2RuLmdpdGhhY2suY29tL2VtbWVsbGVwcGkvbWF0Y2Fwcy85YjM2Y2NhYWYwYTI0ODgxYTM5MDYyZDA1NTY2YzllOTJiZTRhYTBkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE1hdGNhcFRleHR1cmUoXG5cdGlkOiAoKSA9PiBudW1iZXIgfCBzdHJpbmcgPSAoKSA9PiAwLFxuXHR7XG5cdFx0Zm9ybWF0ID0gKCkgPT4gMTAyNCxcblx0XHRvbkxvYWQsXG5cdFx0aW5qZWN0b3IsXG5cdH06IHsgZm9ybWF0PzogKCkgPT4gbnVtYmVyOyBvbkxvYWQ/OiAodGV4dHVyZTogVGV4dHVyZVtdKSA9PiB2b2lkOyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0TWF0Y2FwVGV4dHVyZSwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBtYXRjYXBMaXN0ID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcblxuXHRcdGZldGNoKExJU1RfVVJMKVxuXHRcdFx0LnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcblx0XHRcdC50aGVuKChsaXN0KSA9PiB7XG5cdFx0XHRcdG1hdGNhcExpc3Quc2V0KGxpc3QpO1xuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBERUZBVUxUX01BVENBUCA9IGNvbXB1dGVkKCgpID0+IG1hdGNhcExpc3QoKVswXSk7XG5cdFx0Y29uc3QgbnVtVG90ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXMobWF0Y2FwTGlzdCgpKS5sZW5ndGgpO1xuXG5cdFx0Y29uc3QgZmlsZUhhc2ggPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBpZFZhbHVlID0gaWQoKTtcblx0XHRcdGlmICh0eXBlb2YgaWRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0cmV0dXJuIGlkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgaWRWYWx1ZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0cmV0dXJuIG1hdGNhcExpc3QoKVtpZFZhbHVlXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBmaWxlTmFtZSA9IGNvbXB1dGVkKCgpID0+IGAke2ZpbGVIYXNoKCkgfHwgREVGQVVMVF9NQVRDQVAoKX0ke2dldEZvcm1hdFN0cmluZyhmb3JtYXQoKSl9LnBuZ2ApO1xuXHRcdGNvbnN0IHVybCA9IGNvbXB1dGVkKCgpID0+IGAke01BVENBUF9ST09UfS8ke2Zvcm1hdCgpfS8ke2ZpbGVOYW1lKCl9YCk7XG5cblx0XHRjb25zdCBtYXRjYXBUZXh0dXJlID0gaW5qZWN0VGV4dHVyZSh1cmwsIHsgb25Mb2FkIH0pO1xuXG5cdFx0cmV0dXJuIHsgdXJsLCB0ZXh0dXJlOiBtYXRjYXBUZXh0dXJlLCBudW1Ub3QgfTtcblx0fSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01hdGNhcFRleHR1cmVPcHRpb25zIHtcblx0aWQ/OiBudW1iZXIgfCBzdHJpbmc7XG5cdGZvcm1hdD86IG51bWJlcjtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbWF0Y2FwVGV4dHVyZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c01hdGNhcFRleHR1cmUge1xuXHRtYXRjYXBUZXh0dXJlID0gaW5wdXQ8Tmd0c01hdGNhcFRleHR1cmVPcHRpb25zPigpO1xuXHRtYXRjYXBUZXh0dXJlTG9hZGVkID0gb3V0cHV0PFRleHR1cmVbXT4oKTtcblxuXHRwcml2YXRlIHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcblx0cHJpdmF0ZSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cblx0cHJpdmF0ZSBpZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWF0Y2FwVGV4dHVyZSgpPy5pZCA/PyAwKTtcblx0cHJpdmF0ZSBmb3JtYXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1hdGNhcFRleHR1cmUoKT8uZm9ybWF0ID8/IDEwMjQpO1xuXG5cdHByaXZhdGUgcmVmPzogRW1iZWRkZWRWaWV3UmVmPHsgJGltcGxpY2l0OiBTaWduYWw8VGV4dHVyZSB8IG51bGw+IH0+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IHsgdGV4dHVyZSB9ID0gaW5qZWN0TWF0Y2FwVGV4dHVyZSh0aGlzLmlkLCB7XG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuXHRcdFx0b25Mb2FkOiB0aGlzLm1hdGNhcFRleHR1cmVMb2FkZWQuZW1pdC5iaW5kKHRoaXMubWF0Y2FwVGV4dHVyZUxvYWRlZCksXG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWYgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwgeyAkaW1wbGljaXQ6IHRleHR1cmUgfSk7XG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlZj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXzogTmd0c01hdGNhcFRleHR1cmUsIGN0eDogdW5rbm93bik6IGN0eCBpcyB7ICRpbXBsaWNpdDogU2lnbmFsPFRleHR1cmUgfCBudWxsPiB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuIl19
@@ -1,79 +0,0 @@
1
- import { DestroyRef, Directive, TemplateRef, ViewContainerRef, computed, effect, inject, input, output, signal, untracked, } from '@angular/core';
2
- import { injectTexture } from 'angular-three-soba/loaders';
3
- import { assertInjector } from 'ngxtension/assert-injector';
4
- import { RepeatWrapping, Vector2 } from 'three';
5
- import * as i0 from "@angular/core";
6
- const NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';
7
- const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';
8
- export function injectNormalTexture(id = () => 0, { settings = () => ({}), onLoad, injector, }) {
9
- return assertInjector(injectNormalTexture, injector, () => {
10
- const normalList = signal({});
11
- fetch(LIST_URL)
12
- .then((res) => res.json())
13
- .then((list) => {
14
- normalList.set(list);
15
- });
16
- const DEFAULT_NORMAL = computed(() => normalList()[0]);
17
- const numTot = computed(() => Object.keys(normalList()).length);
18
- const fileHash = computed(() => {
19
- const idValue = id();
20
- if (typeof idValue === 'string') {
21
- return idValue;
22
- }
23
- if (typeof idValue === 'number') {
24
- return normalList()[idValue];
25
- }
26
- return null;
27
- });
28
- const imageName = computed(() => fileHash() || DEFAULT_NORMAL());
29
- const url = computed(() => `${NORMAL_ROOT}/normals/${imageName()}`);
30
- const normalTexture = injectTexture(url, { onLoad });
31
- effect(() => {
32
- const texture = normalTexture();
33
- if (!texture)
34
- return;
35
- const { anisotropy = 1, repeat = [1, 1], offset = [0, 0] } = settings();
36
- texture.wrapS = texture.wrapT = RepeatWrapping;
37
- texture.repeat = new Vector2(repeat[0], repeat[1]);
38
- texture.offset = new Vector2(offset[0], offset[1]);
39
- texture.anisotropy = anisotropy;
40
- });
41
- return { url, texture: normalTexture, numTot };
42
- });
43
- }
44
- export class NgtsNormalTexture {
45
- constructor() {
46
- this.normalTexture = input();
47
- this.normalTextureLoaded = output();
48
- this.template = inject(TemplateRef);
49
- this.vcr = inject(ViewContainerRef);
50
- this.id = computed(() => this.normalTexture()?.id ?? 0);
51
- this.settings = computed(() => {
52
- const { id: _, ...settings } = this.normalTexture() || {};
53
- return settings;
54
- });
55
- const { texture } = injectNormalTexture(this.id, {
56
- settings: this.settings,
57
- onLoad: this.normalTextureLoaded.emit.bind(this.normalTextureLoaded),
58
- });
59
- effect(() => {
60
- untracked(() => {
61
- this.ref = this.vcr.createEmbeddedView(this.template, { $implicit: texture });
62
- this.ref.detectChanges();
63
- });
64
- });
65
- inject(DestroyRef).onDestroy(() => {
66
- this.ref?.destroy();
67
- });
68
- }
69
- static ngTemplateContextGuard(_, ctx) {
70
- return true;
71
- }
72
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsNormalTexture, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
73
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtsNormalTexture, isStandalone: true, selector: "ng-template[normalTexture]", inputs: { normalTexture: { classPropertyName: "normalTexture", publicName: "normalTexture", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { normalTextureLoaded: "normalTextureLoaded" }, ngImport: i0 }); }
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsNormalTexture, decorators: [{
76
- type: Directive,
77
- args: [{ selector: 'ng-template[normalTexture]', standalone: true }]
78
- }], ctorParameters: () => [] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL25vcm1hbC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUlULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBVyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXpELE1BQU0sV0FBVyxHQUFHLHdGQUF3RixDQUFDO0FBQzdHLE1BQU0sUUFBUSxHQUFHLDRFQUE0RSxDQUFDO0FBUTlGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDbEMsS0FBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUNuQyxFQUNDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNyQixNQUFNLEVBQ04sUUFBUSxHQUNvRztJQUU3RyxPQUFPLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFFdEQsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUNiLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FB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TyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNoRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUNwRSxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFvQixFQUFFLEdBQVk7UUFDL0QsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDOytHQW5DVyxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG5cdEluamVjdG9yLFxuXHRTaWduYWwsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdFRleHR1cmUgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbG9hZGVycyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IFJlcGVhdFdyYXBwaW5nLCBUZXh0dXJlLCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xuXG5jb25zdCBOT1JNQUxfUk9PVCA9ICdodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9wbW5kcnMvZHJlaS1hc3NldHMvN2EzMTA0OTk3ZTE1NzZmODM0NzI4Mjk4MTViMDA4ODBkODhiMzJmYic7XG5jb25zdCBMSVNUX1VSTCA9ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvcG1uZHJzL2RyZWktYXNzZXRzQG1hc3Rlci9ub3JtYWxzL25vcm1hbHMuanNvbic7XG5cbmludGVyZmFjZSBOZ3RzTm9ybWFsVGV4dHVyZVNldHRpbmdzIHtcblx0cmVwZWF0PzogbnVtYmVyW107XG5cdGFuaXNvdHJvcHk/OiBudW1iZXI7XG5cdG9mZnNldD86IG51bWJlcltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tm9ybWFsVGV4dHVyZShcblx0aWQ6ICgpID0+IHN0cmluZyB8IG51bWJlciA9ICgpID0+IDAsXG5cdHtcblx0XHRzZXR0aW5ncyA9ICgpID0+ICh7fSksXG5cdFx0b25Mb2FkLFxuXHRcdGluamVjdG9yLFxuXHR9OiB7IHNldHRpbmdzPzogKCkgPT4gTmd0c05vcm1hbFRleHR1cmVTZXR0aW5nczsgb25Mb2FkPzogKHRleHR1cmU6IFRleHR1cmVbXSkgPT4gdm9pZDsgaW5qZWN0b3I/OiBJbmplY3RvciB9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3ROb3JtYWxUZXh0dXJlLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IG5vcm1hbExpc3QgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG5cdFx0ZmV0Y2goTElTVF9VUkwpXG5cdFx0XHQudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuXHRcdFx0LnRoZW4oKGxpc3QpID0+IHtcblx0XHRcdFx0bm9ybWFsTGlzdC5zZXQobGlzdCk7XG5cdFx0XHR9KTtcblxuXHRcdGNvbnN0IERFRkFVTFRfTk9STUFMID0gY29tcHV0ZWQoKCkgPT4gbm9ybWFsTGlzdCgpWzBdKTtcblx0XHRjb25zdCBudW1Ub3QgPSBjb21wdXRlZCgoKSA9PiBPYmplY3Qua2V5cyhub3JtYWxMaXN0KCkpLmxlbmd0aCk7XG5cblx0XHRjb25zdCBmaWxlSGFzaCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlkVmFsdWUgPSBpZCgpO1xuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gaWRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiBpZFZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRyZXR1cm4gbm9ybWFsTGlzdCgpW2lkVmFsdWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGltYWdlTmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVIYXNoKCkgfHwgREVGQVVMVF9OT1JNQUwoKSk7XG5cdFx0Y29uc3QgdXJsID0gY29tcHV0ZWQoKCkgPT4gYCR7Tk9STUFMX1JPT1R9L25vcm1hbHMvJHtpbWFnZU5hbWUoKX1gKTtcblxuXHRcdGNvbnN0IG5vcm1hbFRleHR1cmUgPSBpbmplY3RUZXh0dXJlKHVybCwgeyBvbkxvYWQgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dHVyZSA9IG5vcm1hbFRleHR1cmUoKTtcblx0XHRcdGlmICghdGV4dHVyZSkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCB7IGFuaXNvdHJvcHkgPSAxLCByZXBlYXQgPSBbMSwgMV0sIG9mZnNldCA9IFswLCAwXSB9ID0gc2V0dGluZ3MoKTtcblx0XHRcdHRleHR1cmUud3JhcFMgPSB0ZXh0dXJlLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7XG5cdFx0XHR0ZXh0dXJlLnJlcGVhdCA9IG5ldyBWZWN0b3IyKHJlcGVhdFswXSwgcmVwZWF0WzFdKTtcblx0XHRcdHRleHR1cmUub2Zmc2V0ID0gbmV3IFZlY3RvcjIob2Zmc2V0WzBdLCBvZmZzZXRbMV0pO1xuXHRcdFx0dGV4dHVyZS5hbmlzb3Ryb3B5ID0gYW5pc290cm9weTtcblx0XHR9KTtcblxuXHRcdHJldHVybiB7IHVybCwgdGV4dHVyZTogbm9ybWFsVGV4dHVyZSwgbnVtVG90IH07XG5cdH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNOb3JtYWxUZXh0dXJlT3B0aW9ucyBleHRlbmRzIE5ndHNOb3JtYWxUZXh0dXJlU2V0dGluZ3Mge1xuXHRpZD86IG51bWJlciB8IHN0cmluZztcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbm9ybWFsVGV4dHVyZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c05vcm1hbFRleHR1cmUge1xuXHRub3JtYWxUZXh0dXJlID0gaW5wdXQ8Tmd0c05vcm1hbFRleHR1cmVPcHRpb25zPigpO1xuXHRub3JtYWxUZXh0dXJlTG9hZGVkID0gb3V0cHV0PFRleHR1cmVbXT4oKTtcblxuXHRwcml2YXRlIHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcblx0cHJpdmF0ZSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cblx0cHJpdmF0ZSBpZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9ybWFsVGV4dHVyZSgpPy5pZCA/PyAwKTtcblx0cHJpdmF0ZSBzZXR0aW5ncyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7IGlkOiBfLCAuLi5zZXR0aW5ncyB9ID0gdGhpcy5ub3JtYWxUZXh0dXJlKCkgfHwge307XG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9KTtcblxuXHRwcml2YXRlIHJlZj86IEVtYmVkZGVkVmlld1JlZjx7ICRpbXBsaWNpdDogU2lnbmFsPFRleHR1cmUgfCBudWxsPiB9PjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCB7IHRleHR1cmUgfSA9IGluamVjdE5vcm1hbFRleHR1cmUodGhpcy5pZCwge1xuXHRcdFx0c2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG5cdFx0XHRvbkxvYWQ6IHRoaXMubm9ybWFsVGV4dHVyZUxvYWRlZC5lbWl0LmJpbmQodGhpcy5ub3JtYWxUZXh0dXJlTG9hZGVkKSxcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZiA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlLCB7ICRpbXBsaWNpdDogdGV4dHVyZSB9KTtcblx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMucmVmPy5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfOiBOZ3RzTm9ybWFsVGV4dHVyZSwgY3R4OiB1bmtub3duKTogY3R4IGlzIHsgJGltcGxpY2l0OiBTaWduYWw8VGV4dHVyZSB8IG51bGw+IH0ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG4iXX0=
@@ -1,100 +0,0 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, inject, input, viewChild, } from '@angular/core';
2
- import { NgtArgs, extend, omit, pick } from 'angular-three';
3
- import { getVersion } from 'angular-three-soba/misc';
4
- import { mergeInputs } from 'ngxtension/inject-inputs';
5
- import { DirectionalLight, Group, MathUtils, OrthographicCamera, Vector2, Vector3 } from 'three';
6
- import { NgtsAccumulativeShadows } from './accumulative-shadows';
7
- import * as i0 from "@angular/core";
8
- const defaultOptions = {
9
- castShadow: true,
10
- bias: 0.001,
11
- mapSize: 512,
12
- size: 5,
13
- near: 0.5,
14
- far: 500,
15
- frames: 1,
16
- position: [0, 0, 0],
17
- radius: 1,
18
- amount: 8,
19
- intensity: getVersion() >= 155 ? Math.PI : 1,
20
- ambient: 0.5,
21
- };
22
- export class NgtsRandomizedLights {
23
- constructor() {
24
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
25
- this.parameters = omit(this.options, Object.keys(defaultOptions));
26
- this.lightsRef = viewChild.required('lights');
27
- this.accumulativeShadows = inject(NgtsAccumulativeShadows);
28
- this.castShadow = pick(this.options, 'castShadow');
29
- this.bias = pick(this.options, 'bias');
30
- this.intensity = pick(this.options, 'intensity');
31
- this.amount = pick(this.options, 'amount');
32
- this.mapSize = pick(this.options, 'mapSize');
33
- this.shadowMapSize = computed(() => [this.mapSize(), this.mapSize()]);
34
- this.position = pick(this.options, 'position');
35
- this.length = computed(() => new Vector3(...this.position()).length());
36
- this.count = computed(() => Array.from({ length: this.amount() }, (_, index) => index));
37
- this.size = pick(this.options, 'size');
38
- this.near = pick(this.options, 'near');
39
- this.far = pick(this.options, 'far');
40
- this.cameraArgs = computed(() => [-this.size(), this.size(), this.size(), -this.size(), this.near(), this.far()]);
41
- extend({ Group, DirectionalLight, OrthographicCamera, Vector2 });
42
- effect((onCleanup) => {
43
- const lights = this.lightsRef().nativeElement;
44
- this.accumulativeShadows.lightsMap.set(lights.uuid, this.update.bind(this));
45
- onCleanup(() => this.accumulativeShadows.lightsMap.delete(lights.uuid));
46
- });
47
- }
48
- update() {
49
- let light;
50
- const lights = this.lightsRef().nativeElement;
51
- if (lights) {
52
- const [{ ambient, radius, position }, length] = [this.options(), this.length()];
53
- for (let i = 0; i < lights.children.length; i++) {
54
- light = lights.children[i];
55
- if (Math.random() > ambient) {
56
- light.position.set(position[0] + MathUtils.randFloatSpread(radius), position[1] + MathUtils.randFloatSpread(radius), position[2] + MathUtils.randFloatSpread(radius));
57
- }
58
- else {
59
- const lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0;
60
- const phi = 2 * Math.PI * Math.random();
61
- light.position.set(Math.cos(lambda) * Math.cos(phi) * length, Math.abs(Math.cos(lambda) * Math.sin(phi) * length), Math.sin(lambda) * length);
62
- }
63
- }
64
- }
65
- }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsRandomizedLights, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsRandomizedLights, isStandalone: true, selector: "ngts-randomized-lights", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lightsRef", first: true, predicate: ["lights"], descendants: true, isSignal: true }], ngImport: i0, template: `
68
- <ngt-group #lights [parameters]="parameters()">
69
- @for (i of count(); track $index) {
70
- <ngt-directional-light [castShadow]="castShadow()" [intensity]="intensity() / amount()">
71
- <ngt-value [rawValue]="bias()" attach="shadow.bias" />
72
- <ngt-vector2 *args="shadowMapSize()" attach="shadow.mapSize" />
73
- <ngt-orthographic-camera *args="cameraArgs()" attach="shadow.camera" />
74
- </ngt-directional-light>
75
- }
76
- </ngt-group>
77
- `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
78
- }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsRandomizedLights, decorators: [{
80
- type: Component,
81
- args: [{
82
- selector: 'ngts-randomized-lights',
83
- standalone: true,
84
- template: `
85
- <ngt-group #lights [parameters]="parameters()">
86
- @for (i of count(); track $index) {
87
- <ngt-directional-light [castShadow]="castShadow()" [intensity]="intensity() / amount()">
88
- <ngt-value [rawValue]="bias()" attach="shadow.bias" />
89
- <ngt-vector2 *args="shadowMapSize()" attach="shadow.mapSize" />
90
- <ngt-orthographic-camera *args="cameraArgs()" attach="shadow.camera" />
91
- </ngt-directional-light>
92
- }
93
- </ngt-group>
94
- `,
95
- imports: [NgtArgs],
96
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
97
- changeDetection: ChangeDetectionStrategy.OnPush,
98
- }]
99
- }], ctorParameters: () => [] });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9taXplZC1saWdodHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JhbmRvbWl6ZWQtbGlnaHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQVksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBWSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQThCakUsTUFBTSxjQUFjLEdBQWdDO0lBQ25ELFVBQVUsRUFBRSxJQUFJO0lBQ2hCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFLEdBQUc7SUFDWixJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixNQUFNLEVBQUUsQ0FBQztJQUNULFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sRUFBRSxDQUFDO0lBQ1QsTUFBTSxFQUFFLENBQUM7SUFDVCxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFD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QyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNoRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3hDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQzsrR0E3RFcsb0JBQW9CO21HQUFwQixvQkFBb0IsaVZBZnRCOzs7Ozs7Ozs7O0VBVVQsNERBQ1MsT0FBTzs7NEZBSUwsb0JBQW9CO2tCQWxCaEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0VBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIE5ndEdyb3VwLCBleHRlbmQsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGdldFZlcnNpb24gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0LCBHcm91cCwgTWF0aFV0aWxzLCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgfSBmcm9tICcuL2FjY3VtdWxhdGl2ZS1zaGFkb3dzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEdyb3VwPiB7XG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgd2lsbCBqaWdnbGUgdGhlIGxpZ2h0cywgMS5cblx0ICogIEZyYW1lcyBpcyBjb250ZXh0IGF3YXJlLCBpZiBhIHByb3ZpZGVyIGxpa2UgQWNjdW11bGF0aXZlU2hhZG93cyBleGlzdHMsIGZyYW1lcyB3aWxsIGJlIHRha2VuIGZyb20gdGhlcmUhICAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIExpZ2h0IHBvc2l0aW9uLCBbMCwgMCwgMF0gKi9cblx0cG9zaXRpb246IFt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyXTtcblx0LyoqIFJhZGl1cyBvZiB0aGUgamlnZ2xlLCBoaWdoZXIgdmFsdWVzIG1ha2Ugc29mdGVyIGxpZ2h0LCA1ICovXG5cdHJhZGl1czogbnVtYmVyO1xuXHQvKiogQW1vdW50IG9mIGxpZ2h0cywgOCAqL1xuXHRhbW91bnQ6IG51bWJlcjtcblx0LyoqIExpZ2h0IGludGVuc2l0eSwgMSAqL1xuXHRpbnRlbnNpdHk6IG51bWJlcjtcblx0LyoqIEFtYmllbnQgb2NjbHVzaW9uLCBsb3dlciB2YWx1ZXMgbWVhbiBsZXNzIEFPLCBoaWdodCBtb3JlLCB5b3UgY2FuIG1peCBBTyBhbmQgZGlyZWN0aW9uYWwgbGlnaHQsIDAuNSAqL1xuXHRhbWJpZW50OiBudW1iZXI7XG5cdC8qKiBJZiB0aGUgbGlnaHRzIGNhc3Qgc2hhZG93cywgdGhpcyBpcyB0cnVlIGJ5IGRlZmF1bHQgKi9cblx0Y2FzdFNoYWRvdzogYm9vbGVhbjtcblx0LyoqIERlZmF1bHQgc2hhZG93IGJpYXMsIDAgKi9cblx0YmlhczogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBtYXAgc2l6ZSwgNTEyICovXG5cdG1hcFNpemU6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgc2l6ZSBvZiB0aGUgc2hhZG93IGNhbWVyYSwgMTAgKi9cblx0c2l6ZTogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBzaGFkb3cgY2FtZXJhIG5lYXIsIDAuNSAqL1xuXHRuZWFyOiBudW1iZXI7XG5cdC8qKiBEZWZhdWx0IHNoYWRvdyBjYW1lcmEgZmFyLCA1MDAgKi9cblx0ZmFyOiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnMgPSB7XG5cdGNhc3RTaGFkb3c6IHRydWUsXG5cdGJpYXM6IDAuMDAxLFxuXHRtYXBTaXplOiA1MTIsXG5cdHNpemU6IDUsXG5cdG5lYXI6IDAuNSxcblx0ZmFyOiA1MDAsXG5cdGZyYW1lczogMSxcblx0cG9zaXRpb246IFswLCAwLCAwXSxcblx0cmFkaXVzOiAxLFxuXHRhbW91bnQ6IDgsXG5cdGludGVuc2l0eTogZ2V0VmVyc2lvbigpID49IDE1NSA/IE1hdGguUEkgOiAxLFxuXHRhbWJpZW50OiAwLjUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNsaWdodHMgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHRAZm9yIChpIG9mIGNvdW50KCk7IHRyYWNrICRpbmRleCkge1xuXHRcdFx0XHQ8bmd0LWRpcmVjdGlvbmFsLWxpZ2h0IFtjYXN0U2hhZG93XT1cImNhc3RTaGFkb3coKVwiIFtpbnRlbnNpdHldPVwiaW50ZW5zaXR5KCkgLyBhbW91bnQoKVwiPlxuXHRcdFx0XHRcdDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cImJpYXMoKVwiIGF0dGFjaD1cInNoYWRvdy5iaWFzXCIgLz5cblx0XHRcdFx0XHQ8bmd0LXZlY3RvcjIgKmFyZ3M9XCJzaGFkb3dNYXBTaXplKClcIiBhdHRhY2g9XCJzaGFkb3cubWFwU2l6ZVwiIC8+XG5cdFx0XHRcdFx0PG5ndC1vcnRob2dyYXBoaWMtY2FtZXJhICphcmdzPVwiY2FtZXJhQXJncygpXCIgYXR0YWNoPVwic2hhZG93LmNhbWVyYVwiIC8+XG5cdFx0XHRcdDwvbmd0LWRpcmVjdGlvbmFsLWxpZ2h0PlxuXHRcdFx0fVxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNSYW5kb21pemVkTGlnaHRzIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIE9iamVjdC5rZXlzKGRlZmF1bHRPcHRpb25zKSBhcyBBcnJheTxrZXlvZiBOZ3RzUmFuZG9taXplZExpZ2h0c09wdGlvbnM+KTtcblxuXHRsaWdodHNSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdsaWdodHMnKTtcblxuXHRwcml2YXRlIGFjY3VtdWxhdGl2ZVNoYWRvd3MgPSBpbmplY3QoTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MpO1xuXG5cdGNhc3RTaGFkb3cgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nhc3RTaGFkb3cnKTtcblx0YmlhcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnYmlhcycpO1xuXHRpbnRlbnNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ludGVuc2l0eScpO1xuXHRhbW91bnQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Ftb3VudCcpO1xuXG5cdHByaXZhdGUgbWFwU2l6ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFwU2l6ZScpO1xuXHRzaGFkb3dNYXBTaXplID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMubWFwU2l6ZSgpLCB0aGlzLm1hcFNpemUoKV0pO1xuXG5cdHByaXZhdGUgcG9zaXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Bvc2l0aW9uJyk7XG5cdGxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IG5ldyBWZWN0b3IzKC4uLnRoaXMucG9zaXRpb24oKSkubGVuZ3RoKCkpO1xuXG5cdGNvdW50ID0gY29tcHV0ZWQoKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5hbW91bnQoKSB9LCAoXywgaW5kZXgpID0+IGluZGV4KSk7XG5cblx0cHJpdmF0ZSBzaXplID0gcGljayh0aGlzLm9wdGlvbnMsICdzaXplJyk7XG5cdHByaXZhdGUgbmVhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnbmVhcicpO1xuXHRwcml2YXRlIGZhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZmFyJyk7XG5cdGNhbWVyYUFyZ3MgPSBjb21wdXRlZCgoKSA9PiBbLXRoaXMuc2l6ZSgpLCB0aGlzLnNpemUoKSwgdGhpcy5zaXplKCksIC10aGlzLnNpemUoKSwgdGhpcy5uZWFyKCksIHRoaXMuZmFyKCldKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91cCwgRGlyZWN0aW9uYWxMaWdodCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyIH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGxpZ2h0cyA9IHRoaXMubGlnaHRzUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdHRoaXMuYWNjdW11bGF0aXZlU2hhZG93cy5saWdodHNNYXAuc2V0KGxpZ2h0cy51dWlkLCB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB0aGlzLmFjY3VtdWxhdGl2ZVNoYWRvd3MubGlnaHRzTWFwLmRlbGV0ZShsaWdodHMudXVpZCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlKCkge1xuXHRcdGxldCBsaWdodDogT2JqZWN0M0QgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbGlnaHRzID0gdGhpcy5saWdodHNSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmIChsaWdodHMpIHtcblx0XHRcdGNvbnN0IFt7IGFtYmllbnQsIHJhZGl1cywgcG9zaXRpb24gfSwgbGVuZ3RoXSA9IFt0aGlzLm9wdGlvbnMoKSwgdGhpcy5sZW5ndGgoKV07XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxpZ2h0ID0gbGlnaHRzLmNoaWxkcmVuW2ldO1xuXHRcdFx0XHRpZiAoTWF0aC5yYW5kb20oKSA+IGFtYmllbnQpIHtcblx0XHRcdFx0XHRsaWdodC5wb3NpdGlvbi5zZXQoXG5cdFx0XHRcdFx0XHRwb3NpdGlvblswXSArIE1hdGhVdGlscy5yYW5kRmxvYXRTcHJlYWQocmFkaXVzKSxcblx0XHRcdFx0XHRcdHBvc2l0aW9uWzFdICsgTWF0aFV0aWxzLnJhbmRGbG9hdFNwcmVhZChyYWRpdXMpLFxuXHRcdFx0XHRcdFx0cG9zaXRpb25bMl0gKyBNYXRoVXRpbHMucmFuZEZsb2F0U3ByZWFkKHJhZGl1cyksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBsYW1iZGEgPSBNYXRoLmFjb3MoMiAqIE1hdGgucmFuZG9tKCkgLSAxKSAtIE1hdGguUEkgLyAyLjA7XG5cdFx0XHRcdFx0Y29uc3QgcGhpID0gMiAqIE1hdGguUEkgKiBNYXRoLnJhbmRvbSgpO1xuXHRcdFx0XHRcdGxpZ2h0LnBvc2l0aW9uLnNldChcblx0XHRcdFx0XHRcdE1hdGguY29zKGxhbWJkYSkgKiBNYXRoLmNvcyhwaGkpICogbGVuZ3RoLFxuXHRcdFx0XHRcdFx0TWF0aC5hYnMoTWF0aC5jb3MobGFtYmRhKSAqIE1hdGguc2luKHBoaSkgKiBsZW5ndGgpLFxuXHRcdFx0XHRcdFx0TWF0aC5zaW4obGFtYmRhKSAqIGxlbmd0aCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXX0=