angular-three-soba 2.0.0-beta.7 → 2.0.0-beta.8

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 (296) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +23 -11
  4. package/abstractions/grid/grid.d.ts +41 -50
  5. package/abstractions/index.d.ts +1 -7
  6. package/abstractions/text/text.d.ts +10 -4
  7. package/abstractions/text-3d/text-3d.d.ts +47 -40
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +30 -13
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +140 -110
  19. package/esm2022/abstractions/index.mjs +2 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -122
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +119 -121
  22. package/esm2022/cameras/camera/camera-content.mjs +5 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +94 -90
  29. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  30. package/esm2022/loaders/loader/loader.mjs +92 -87
  31. package/esm2022/loaders/progress/progress.mjs +1 -1
  32. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  33. package/esm2022/materials/index.mjs +2 -1
  34. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  35. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  36. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
  37. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  38. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  39. package/esm2022/materials/point-material/point-material.mjs +46 -0
  40. package/esm2022/misc/animations/animations.mjs +20 -16
  41. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  42. package/esm2022/misc/caustics/caustics.mjs +387 -0
  43. package/esm2022/misc/decal/decal.mjs +187 -0
  44. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  45. package/esm2022/misc/example/example.mjs +160 -0
  46. package/esm2022/misc/fbo/fbo.mjs +35 -35
  47. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  48. package/esm2022/misc/html/html.mjs +304 -0
  49. package/esm2022/misc/index.mjs +10 -1
  50. package/esm2022/misc/sampler/sampler.mjs +142 -0
  51. package/esm2022/misc/shadow/shadow.mjs +111 -0
  52. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  53. package/esm2022/misc/trail/trail.mjs +209 -0
  54. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  55. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  56. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  57. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  58. package/esm2022/modifiers/index.mjs +2 -0
  59. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  60. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  61. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  62. package/esm2022/performances/index.mjs +6 -0
  63. package/esm2022/performances/points/points-input.mjs +64 -0
  64. package/esm2022/performances/points/points.mjs +329 -0
  65. package/esm2022/performances/points/position-point.mjs +54 -0
  66. package/esm2022/performances/segments/segment-object.mjs +9 -0
  67. package/esm2022/performances/segments/segments.mjs +182 -0
  68. package/esm2022/shaders/blur-pass/blur-pass.mjs +1 -1
  69. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  70. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  71. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  72. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  73. package/esm2022/shaders/grid-material/grid-material.mjs +29 -14
  74. package/esm2022/shaders/index.mjs +5 -3
  75. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  76. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +1 -1
  77. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  78. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  79. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  80. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  81. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  82. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  83. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  84. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  85. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  86. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  87. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  88. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  89. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  90. package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
  91. package/esm2022/staging/bounds/bounds.mjs +144 -143
  92. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  93. package/esm2022/staging/center/center.mjs +106 -91
  94. package/esm2022/staging/cloud/cloud.mjs +118 -124
  95. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  96. package/esm2022/staging/environment/assets.mjs +12 -12
  97. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  98. package/esm2022/staging/environment/environment-ground.mjs +18 -20
  99. package/esm2022/staging/environment/environment-input.mjs +97 -84
  100. package/esm2022/staging/environment/environment-map.mjs +33 -33
  101. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  102. package/esm2022/staging/environment/environment.mjs +34 -51
  103. package/esm2022/staging/environment/utils.mjs +35 -14
  104. package/esm2022/staging/float/float.mjs +70 -58
  105. package/esm2022/staging/index.mjs +7 -3
  106. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  107. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  108. package/esm2022/staging/sky/sky.mjs +85 -80
  109. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  110. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  111. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  112. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  113. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  114. package/esm2022/staging/spot-light/volumetric-mesh.mjs +61 -78
  115. package/esm2022/staging/stage/stage.mjs +304 -290
  116. package/esm2022/staging/stars/stars.mjs +101 -102
  117. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  118. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  119. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  120. package/esm2022/utils/content/content.mjs +15 -0
  121. package/esm2022/utils/index.mjs +2 -0
  122. package/fesm2022/angular-three-soba-abstractions.mjs +505 -2087
  123. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  124. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  125. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  126. package/fesm2022/angular-three-soba-controls.mjs +93 -88
  127. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  128. package/fesm2022/angular-three-soba-loaders.mjs +94 -90
  129. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  130. package/fesm2022/angular-three-soba-materials.mjs +655 -590
  131. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  132. package/fesm2022/angular-three-soba-misc.mjs +2198 -89
  133. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  134. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  135. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  136. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  137. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  138. package/fesm2022/angular-three-soba-shaders.mjs +501 -264
  139. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-staging.mjs +2870 -2555
  141. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  143. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  144. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  145. package/loaders/loader/loader.d.ts +19 -17
  146. package/loaders/progress/progress.d.ts +1 -1
  147. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  148. package/materials/index.d.ts +1 -0
  149. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  150. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  151. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  152. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  153. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  154. package/materials/point-material/point-material.d.ts +24 -0
  155. package/metadata.json +1 -0
  156. package/misc/animations/animations.d.ts +6 -4
  157. package/misc/caustics/caustics.d.ts +87 -0
  158. package/misc/decal/decal.d.ts +49 -0
  159. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  160. package/misc/example/example.d.ts +81 -0
  161. package/misc/fbo/fbo.d.ts +2 -2
  162. package/misc/html/html-wrapper.d.ts +559 -0
  163. package/misc/html/html.d.ts +214 -0
  164. package/misc/index.d.ts +9 -0
  165. package/misc/sampler/sampler.d.ts +67 -0
  166. package/misc/shadow/shadow.d.ts +37 -0
  167. package/misc/stats-gl/stats-gl.d.ts +24 -0
  168. package/misc/trail/trail.d.ts +57 -0
  169. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  170. package/misc/trail-texture/trail-texture.d.ts +50 -0
  171. package/modifiers/README.md +3 -0
  172. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  173. package/modifiers/index.d.ts +1 -0
  174. package/package.json +30 -22
  175. package/performances/README.md +3 -0
  176. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  177. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  178. package/performances/index.d.ts +5 -0
  179. package/performances/points/points-input.d.ts +32 -0
  180. package/performances/points/points.d.ts +92 -0
  181. package/{performance/instances/position-mesh.d.ts → performances/points/position-point.d.ts} +4 -3
  182. package/performances/segments/segment-object.d.ts +7 -0
  183. package/performances/segments/segments.d.ts +124 -0
  184. package/shaders/grid-material/grid-material.d.ts +33 -0
  185. package/shaders/index.d.ts +4 -2
  186. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +146 -1
  187. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  188. package/shaders/shader-material/shader-material.d.ts +2 -2
  189. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  190. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  191. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  192. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  193. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  194. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  195. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  196. package/staging/backdrop/backdrop.d.ts +30 -0
  197. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  198. package/staging/bounds/bounds.d.ts +100 -24
  199. package/staging/camera-shake/camera-shake.d.ts +30 -19
  200. package/staging/center/center.d.ts +43 -35
  201. package/staging/cloud/cloud.d.ts +26 -23
  202. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  203. package/staging/environment/assets.d.ts +9 -9
  204. package/staging/environment/environment-cube.d.ts +9 -5
  205. package/staging/environment/environment-ground.d.ts +7 -7
  206. package/staging/environment/environment-input.d.ts +36 -36
  207. package/staging/environment/environment-map.d.ts +10 -5
  208. package/staging/environment/environment-portal.d.ts +10 -5
  209. package/staging/environment/environment.d.ts +0 -4
  210. package/staging/environment/utils.d.ts +2 -2
  211. package/staging/float/float.d.ts +14 -10
  212. package/staging/index.d.ts +6 -2
  213. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  214. package/staging/normal-texture/normal-texture.d.ts +16 -0
  215. package/staging/sky/sky.d.ts +28 -21
  216. package/staging/sparkles/sparkles.d.ts +35 -21
  217. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  218. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  219. package/staging/spot-light/spot-light-input.d.ts +25 -25
  220. package/staging/spot-light/spot-light.d.ts +31 -15
  221. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  222. package/staging/stage/stage.d.ts +88 -63
  223. package/staging/stars/stars.d.ts +27 -16
  224. package/staging/wireframe/wireframe-input.d.ts +65 -0
  225. package/staging/wireframe/wireframe.d.ts +28 -0
  226. package/utils/README.md +3 -0
  227. package/utils/content/content.d.ts +8 -0
  228. package/utils/index.d.ts +1 -0
  229. package/web-types.json +1 -0
  230. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  231. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  232. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  233. package/abstractions/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  234. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  235. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  236. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  237. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  238. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  239. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  240. package/abstractions/line/line-input.d.ts +0 -42
  241. package/abstractions/line/line.d.ts +0 -35
  242. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  243. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  244. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  245. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  246. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  247. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  248. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  249. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  250. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  251. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  252. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  253. package/esm2022/abstractions/line/line-input.mjs +0 -113
  254. package/esm2022/abstractions/line/line.mjs +0 -165
  255. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  256. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  257. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  258. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  259. package/esm2022/performance/detailed/detailed.mjs +0 -61
  260. package/esm2022/performance/index.mjs +0 -7
  261. package/esm2022/performance/instances/instance.mjs +0 -48
  262. package/esm2022/performance/instances/instances.mjs +0 -189
  263. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  264. package/esm2022/performance/stats/stats.mjs +0 -79
  265. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  266. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  267. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  268. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  269. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -258
  270. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  271. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  272. package/performance/README.md +0 -3
  273. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  274. package/performance/detailed/detailed.d.ts +0 -20
  275. package/performance/index.d.ts +0 -6
  276. package/performance/instances/instance.d.ts +0 -9
  277. package/performance/instances/instances.d.ts +0 -35
  278. package/performance/stats/stats.d.ts +0 -18
  279. package/plugin/generators.json +0 -19
  280. package/plugin/libs/plugin/README.md +0 -11
  281. package/plugin/package.json +0 -9
  282. package/plugin/src/generators/init/compat.d.ts +0 -2
  283. package/plugin/src/generators/init/compat.js +0 -6
  284. package/plugin/src/generators/init/compat.js.map +0 -1
  285. package/plugin/src/generators/init/init.d.ts +0 -7
  286. package/plugin/src/generators/init/init.js +0 -28
  287. package/plugin/src/generators/init/init.js.map +0 -1
  288. package/plugin/src/generators/init/schema.json +0 -6
  289. package/plugin/src/index.d.ts +0 -1
  290. package/plugin/src/index.js +0 -6
  291. package/plugin/src/index.js.map +0 -1
  292. package/staging/caustics/caustisc.d.ts +0 -70
  293. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  294. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  295. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  296. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,80 +0,0 @@
1
- import { NgFor } from '@angular/common';
2
- import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Output } from '@angular/core';
3
- import { extend, requestAnimationFrameInInjectionContext } from 'angular-three';
4
- import { AmbientLight, Group, PointLight } from 'three';
5
- import { cornerDimensions, corners, edgeDimensions, edges } from './constants';
6
- import { NgtsGizmoViewcubeEdgeCube } from './gizmo-viewcube-edge';
7
- import { NgtsGizmoViewcubeFaceCube } from './gizmo-viewcube-face';
8
- import { NgtsGizmoViewcubeInputs } from './gizmo-viewcube-inputs';
9
- import * as i0 from "@angular/core";
10
- extend({ Group, AmbientLight, PointLight });
11
- class NgtsGizmoViewcube extends NgtsGizmoViewcubeInputs {
12
- constructor() {
13
- super();
14
- this.edges = edges;
15
- this.edgeDimensions = edgeDimensions;
16
- this.corners = corners;
17
- this.cornerDimensions = cornerDimensions;
18
- this.clicked = new EventEmitter();
19
- requestAnimationFrameInInjectionContext(() => {
20
- if (this.clicked.observed) {
21
- this.set({ clickEmitter: this.clicked });
22
- }
23
- });
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewcube, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsGizmoViewcube, isStandalone: true, selector: "ngts-gizmo-viewcube", outputs: { clicked: "clicked" }, providers: [{ provide: NgtsGizmoViewcubeInputs, useExisting: NgtsGizmoViewcube }], usesInheritance: true, ngImport: i0, template: `
27
- <ngt-group [scale]="60">
28
- <ngts-gizmo-viewcube-face-cube />
29
-
30
- <ngts-gizmo-viewcube-edge-cube
31
- *ngFor="let edge of edges; let i = index"
32
- [position]="edge"
33
- [dimensions]="edgeDimensions[i]"
34
- />
35
-
36
- <ngts-gizmo-viewcube-edge-cube
37
- *ngFor="let corner of corners"
38
- [position]="corner"
39
- [dimensions]="cornerDimensions"
40
- />
41
-
42
- <ngt-ambient-light [intensity]="0.5" />
43
- <ngt-point-light [position]="10" [intensity]="0.5" />
44
- </ngt-group>
45
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsGizmoViewcubeEdgeCube, selector: "ngts-gizmo-viewcube-edge-cube", inputs: ["dimensions", "position"] }, { kind: "component", type: NgtsGizmoViewcubeFaceCube, selector: "ngts-gizmo-viewcube-face-cube" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
46
- }
47
- export { NgtsGizmoViewcube };
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewcube, decorators: [{
49
- type: Component,
50
- args: [{
51
- selector: 'ngts-gizmo-viewcube',
52
- standalone: true,
53
- template: `
54
- <ngt-group [scale]="60">
55
- <ngts-gizmo-viewcube-face-cube />
56
-
57
- <ngts-gizmo-viewcube-edge-cube
58
- *ngFor="let edge of edges; let i = index"
59
- [position]="edge"
60
- [dimensions]="edgeDimensions[i]"
61
- />
62
-
63
- <ngts-gizmo-viewcube-edge-cube
64
- *ngFor="let corner of corners"
65
- [position]="corner"
66
- [dimensions]="cornerDimensions"
67
- />
68
-
69
- <ngt-ambient-light [intensity]="0.5" />
70
- <ngt-point-light [position]="10" [intensity]="0.5" />
71
- </ngt-group>
72
- `,
73
- imports: [NgtsGizmoViewcubeEdgeCube, NgtsGizmoViewcubeFaceCube, NgFor],
74
- providers: [{ provide: NgtsGizmoViewcubeInputs, useExisting: NgtsGizmoViewcube }],
75
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
76
- }]
77
- }], ctorParameters: function () { return []; }, propDecorators: { clicked: [{
78
- type: Output
79
- }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8tdmlld2N1YmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9naXptby1oZWxwZXIvZ2l6bW8tdmlld2N1YmUvZ2l6bW8tdmlld2N1YmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFpQix1Q0FBdUMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFFNUMsTUEyQmEsaUJBQWtCLFNBQVEsdUJBQXVCO0lBUzFEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFUSCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFFaEMsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUNsQixxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUVuQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFJOUQsdUNBQXVDLENBQUMsR0FBRyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDNUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBaEJRLGlCQUFpQjtrR0FBakIsaUJBQWlCLG1HQUhmLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLENBQUMsaURBckJ2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQW1CVCw0REFDUyx5QkFBeUIsOEdBQUUseUJBQXlCLDBFQUFFLEtBQUs7O1NBSTVELGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQTNCN0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBbUJUO29CQUNELE9BQU8sRUFBRSxDQUFDLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQztvQkFDdEUsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxtQkFBbUIsRUFBRSxDQUFDO29CQUNqRixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBUWEsT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgTmd0VGhyZWVFdmVudCwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBBbWJpZW50TGlnaHQsIEdyb3VwLCBQb2ludExpZ2h0IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY29ybmVyRGltZW5zaW9ucywgY29ybmVycywgZWRnZURpbWVuc2lvbnMsIGVkZ2VzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTmd0c0dpem1vVmlld2N1YmVFZGdlQ3ViZSB9IGZyb20gJy4vZ2l6bW8tdmlld2N1YmUtZWRnZSc7XG5pbXBvcnQgeyBOZ3RzR2l6bW9WaWV3Y3ViZUZhY2VDdWJlIH0gZnJvbSAnLi9naXptby12aWV3Y3ViZS1mYWNlJztcbmltcG9ydCB7IE5ndHNHaXptb1ZpZXdjdWJlSW5wdXRzIH0gZnJvbSAnLi9naXptby12aWV3Y3ViZS1pbnB1dHMnO1xuXG5leHRlbmQoeyBHcm91cCwgQW1iaWVudExpZ2h0LCBQb2ludExpZ2h0IH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtZ2l6bW8tdmlld2N1YmUnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBbc2NhbGVdPVwiNjBcIj5cbiAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdjdWJlLWZhY2UtY3ViZSAvPlxuXG4gICAgICAgICAgICA8bmd0cy1naXptby12aWV3Y3ViZS1lZGdlLWN1YmVcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWRnZSBvZiBlZGdlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImVkZ2VcIlxuICAgICAgICAgICAgICAgIFtkaW1lbnNpb25zXT1cImVkZ2VEaW1lbnNpb25zW2ldXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdjdWJlLWVkZ2UtY3ViZVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb3JuZXIgb2YgY29ybmVyc1wiXG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImNvcm5lclwiXG4gICAgICAgICAgICAgICAgW2RpbWVuc2lvbnNdPVwiY29ybmVyRGltZW5zaW9uc1wiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8bmd0LWFtYmllbnQtbGlnaHQgW2ludGVuc2l0eV09XCIwLjVcIiAvPlxuICAgICAgICAgICAgPG5ndC1wb2ludC1saWdodCBbcG9zaXRpb25dPVwiMTBcIiBbaW50ZW5zaXR5XT1cIjAuNVwiIC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndHNHaXptb1ZpZXdjdWJlRWRnZUN1YmUsIE5ndHNHaXptb1ZpZXdjdWJlRmFjZUN1YmUsIE5nRm9yXSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ndHNHaXptb1ZpZXdjdWJlSW5wdXRzLCB1c2VFeGlzdGluZzogTmd0c0dpem1vVmlld2N1YmUgfV0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR2l6bW9WaWV3Y3ViZSBleHRlbmRzIE5ndHNHaXptb1ZpZXdjdWJlSW5wdXRzIHtcbiAgICByZWFkb25seSBlZGdlcyA9IGVkZ2VzO1xuICAgIHJlYWRvbmx5IGVkZ2VEaW1lbnNpb25zID0gZWRnZURpbWVuc2lvbnM7XG5cbiAgICByZWFkb25seSBjb3JuZXJzID0gY29ybmVycztcbiAgICByZWFkb25seSBjb3JuZXJEaW1lbnNpb25zID0gY29ybmVyRGltZW5zaW9ucztcblxuICAgIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZUluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja2VkLm9ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoeyBjbGlja0VtaXR0ZXI6IHRoaXMuY2xpY2tlZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1,206 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, inject, Input, signal } from '@angular/core';
3
- import { extend, NgtArgs, NgtSignalStore, NgtStore } from 'angular-three';
4
- import { BoxGeometry, CanvasTexture, Group, Mesh, MeshBasicMaterial, Sprite, SpriteMaterial } from 'three';
5
- import * as i0 from "@angular/core";
6
- extend({ Group, Mesh, BoxGeometry, MeshBasicMaterial, Sprite, SpriteMaterial });
7
- class NgtsGizmoViewportAxis extends NgtSignalStore {
8
- set color(color) {
9
- this.set({ color });
10
- }
11
- set rotation(rotation) {
12
- this.set({ rotation });
13
- }
14
- set scale(scale) {
15
- this.set({ scale });
16
- }
17
- constructor() {
18
- super({ scale: [0.8, 0.05, 0.05] });
19
- this.axisRotation = this.select('rotation');
20
- this.axisColor = this.select('color');
21
- this.axisScale = this.select('scale');
22
- }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewportAxis, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsGizmoViewportAxis, isStandalone: true, selector: "ngts-gizmo-viewport-axis", inputs: { color: "color", rotation: "rotation", scale: "scale" }, usesInheritance: true, ngImport: i0, template: `
25
- <ngt-group [rotation]="axisRotation()">
26
- <ngt-mesh [position]="[0.4, 0, 0]">
27
- <ngt-box-geometry *args="axisScale()" />
28
- <ngt-mesh-basic-material [color]="axisColor()" [toneMapped]="false" />
29
- </ngt-mesh>
30
- </ngt-group>
31
- `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
32
- }
33
- export { NgtsGizmoViewportAxis };
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewportAxis, decorators: [{
35
- type: Component,
36
- args: [{
37
- selector: 'ngts-gizmo-viewport-axis',
38
- standalone: true,
39
- template: `
40
- <ngt-group [rotation]="axisRotation()">
41
- <ngt-mesh [position]="[0.4, 0, 0]">
42
- <ngt-box-geometry *args="axisScale()" />
43
- <ngt-mesh-basic-material [color]="axisColor()" [toneMapped]="false" />
44
- </ngt-mesh>
45
- </ngt-group>
46
- `,
47
- imports: [NgtArgs],
48
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
49
- }]
50
- }], ctorParameters: function () { return []; }, propDecorators: { color: [{
51
- type: Input,
52
- args: [{ required: true }]
53
- }], rotation: [{
54
- type: Input,
55
- args: [{ required: true }]
56
- }], scale: [{
57
- type: Input
58
- }] } });
59
- class NgtsGizmoViewportAxisHead extends NgtSignalStore {
60
- #document;
61
- #store;
62
- set arcStyle(arcStyle) {
63
- this.set({ arcStyle });
64
- }
65
- set label(label) {
66
- this.set({ label });
67
- }
68
- set labelColor(labelColor) {
69
- this.set({ labelColor });
70
- }
71
- set axisHeadScale(axisHeadScale) {
72
- this.set({ axisHeadScale });
73
- }
74
- set disabled(disabled) {
75
- this.set({ disabled });
76
- }
77
- set font(font) {
78
- this.set({ font });
79
- }
80
- set clickEmitter(clickEmitter) {
81
- this.set({ clickEmitter });
82
- }
83
- #arcStyle;
84
- #labelColor;
85
- #font;
86
- #axisHeadScale;
87
- constructor() {
88
- super({ axisHeadScale: 1 });
89
- this.#document = inject(DOCUMENT);
90
- this.#store = inject(NgtStore);
91
- this.gl = this.#store.select('gl');
92
- this.active = signal(false);
93
- this.#arcStyle = this.select('arcStyle');
94
- this.#labelColor = this.select('labelColor');
95
- this.#font = this.select('font');
96
- this.#axisHeadScale = this.select('axisHeadScale');
97
- this.axisLabel = this.select('label');
98
- this.texture = computed(() => {
99
- const arcStyle = this.#arcStyle();
100
- const labelColor = this.#labelColor();
101
- const font = this.#font();
102
- const label = this.axisLabel();
103
- const canvas = this.#document.createElement('canvas');
104
- canvas.width = 64;
105
- canvas.height = 64;
106
- const context = canvas.getContext('2d');
107
- context.beginPath();
108
- context.arc(32, 32, 16, 0, 2 * Math.PI);
109
- context.closePath();
110
- context.fillStyle = arcStyle;
111
- context.fill();
112
- if (label) {
113
- context.font = font;
114
- context.textAlign = 'center';
115
- context.fillStyle = labelColor;
116
- context.fillText(label, 32, 41);
117
- }
118
- return new CanvasTexture(canvas);
119
- });
120
- this.scale = computed(() => {
121
- const active = this.active();
122
- const axisHeadScale = this.#axisHeadScale();
123
- const label = this.axisLabel();
124
- return (label ? 1 : 0.75) * (active ? 1.2 : 1) * axisHeadScale;
125
- });
126
- }
127
- onPointerOver(event) {
128
- if (!this.get('disabled')) {
129
- event.stopPropagation();
130
- this.active.set(true);
131
- }
132
- }
133
- onPointerOut(event) {
134
- if (!this.get('disabled')) {
135
- if (this.get('clickEmitter')?.observed) {
136
- this.get('clickEmitter').emit(event);
137
- }
138
- else {
139
- event.stopPropagation();
140
- this.active.set(false);
141
- }
142
- }
143
- }
144
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewportAxisHead, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsGizmoViewportAxisHead, isStandalone: true, selector: "ngts-gizmo-viewport-axis-head", inputs: { arcStyle: "arcStyle", label: "label", labelColor: "labelColor", axisHeadScale: "axisHeadScale", disabled: "disabled", font: "font", clickEmitter: "clickEmitter" }, usesInheritance: true, ngImport: i0, template: `
146
- <ngt-sprite
147
- ngtCompound
148
- [scale]="scale()"
149
- (pointerover)="onPointerOver($event)"
150
- (pointerout)="onPointerOut($event)"
151
- >
152
- <ngt-sprite-material
153
- [map]="texture()"
154
- [opacity]="axisLabel() ? 1 : 0.75"
155
- [alphaTest]="0.3"
156
- [toneMapped]="false"
157
- >
158
- <ngt-value [rawValue]="gl().outputEncoding" attach="map.encoding" />
159
- <ngt-value [rawValue]="gl().capabilities.getMaxAnisotropy() || 1" attach="map.anisotropy" />
160
- </ngt-sprite-material>
161
- </ngt-sprite>
162
- `, isInline: true }); }
163
- }
164
- export { NgtsGizmoViewportAxisHead };
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewportAxisHead, decorators: [{
166
- type: Component,
167
- args: [{
168
- selector: 'ngts-gizmo-viewport-axis-head',
169
- standalone: true,
170
- template: `
171
- <ngt-sprite
172
- ngtCompound
173
- [scale]="scale()"
174
- (pointerover)="onPointerOver($event)"
175
- (pointerout)="onPointerOut($event)"
176
- >
177
- <ngt-sprite-material
178
- [map]="texture()"
179
- [opacity]="axisLabel() ? 1 : 0.75"
180
- [alphaTest]="0.3"
181
- [toneMapped]="false"
182
- >
183
- <ngt-value [rawValue]="gl().outputEncoding" attach="map.encoding" />
184
- <ngt-value [rawValue]="gl().capabilities.getMaxAnisotropy() || 1" attach="map.anisotropy" />
185
- </ngt-sprite-material>
186
- </ngt-sprite>
187
- `,
188
- imports: [NgtArgs],
189
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
190
- }]
191
- }], ctorParameters: function () { return []; }, propDecorators: { arcStyle: [{
192
- type: Input
193
- }], label: [{
194
- type: Input
195
- }], labelColor: [{
196
- type: Input
197
- }], axisHeadScale: [{
198
- type: Input
199
- }], disabled: [{
200
- type: Input
201
- }], font: [{
202
- type: Input
203
- }], clickEmitter: [{
204
- type: Input
205
- }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8tdmlld3BvcnQtYXhpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2dpem1vLWhlbHBlci9naXptby12aWV3cG9ydC9naXptby12aWV3cG9ydC1heGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUUzRyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUVoRixNQWNhLHFCQUFzQixTQUFRLGNBSXpDO0lBQ0UsSUFBK0IsS0FBSyxDQUFDLEtBQWE7UUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQStCLFFBQVEsQ0FBQyxRQUFrQztRQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBK0I7UUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIs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TCxDQUFDOzhHQXZHUSx5QkFBeUI7a0dBQXpCLHlCQUF5Qiw4UkFyQnhCOzs7Ozs7Ozs7Ozs7Ozs7OztLQWlCVDs7U0FJUSx5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkF4QnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBY2dCLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBOZ3RBcmdzLCBOZ3RTaWduYWxTdG9yZSwgTmd0U3RvcmUsIE5ndFRocmVlRXZlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJveEdlb21ldHJ5LCBDYW52YXNUZXh0dXJlLCBHcm91cCwgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIFNwcml0ZSwgU3ByaXRlTWF0ZXJpYWwgfSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IEdyb3VwLCBNZXNoLCBCb3hHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwsIFNwcml0ZSwgU3ByaXRlTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1naXptby12aWV3cG9ydC1heGlzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgW3JvdGF0aW9uXT1cImF4aXNSb3RhdGlvbigpXCI+XG4gICAgICAgICAgICA8bmd0LW1lc2ggW3Bvc2l0aW9uXT1cIlswLjQsIDAsIDBdXCI+XG4gICAgICAgICAgICAgICAgPG5ndC1ib3gtZ2VvbWV0cnkgKmFyZ3M9XCJheGlzU2NhbGUoKVwiIC8+XG4gICAgICAgICAgICAgICAgPG5ndC1tZXNoLWJhc2ljLW1hdGVyaWFsIFtjb2xvcl09XCJheGlzQ29sb3IoKVwiIFt0b25lTWFwcGVkXT1cImZhbHNlXCIgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2g+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dpem1vVmlld3BvcnRBeGlzIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8e1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgcm90YXRpb246IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICBzY2FsZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufT4ge1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBjb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY29sb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2V0IHJvdGF0aW9uKHJvdGF0aW9uOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgdGhpcy5zZXQoeyByb3RhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2NhbGUoc2NhbGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IHNjYWxlIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IGF4aXNSb3RhdGlvbiA9IHRoaXMuc2VsZWN0KCdyb3RhdGlvbicpO1xuICAgIHJlYWRvbmx5IGF4aXNDb2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IGF4aXNTY2FsZSA9IHRoaXMuc2VsZWN0KCdzY2FsZScpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHsgc2NhbGU6IFswLjgsIDAuMDUsIDAuMDVdIH0pO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXNwcml0ZVxuICAgICAgICAgICAgbmd0Q29tcG91bmRcbiAgICAgICAgICAgIFtzY2FsZV09XCJzY2FsZSgpXCJcbiAgICAgICAgICAgIChwb2ludGVyb3Zlcik9XCJvblBvaW50ZXJPdmVyKCRldmVudClcIlxuICAgICAgICAgICAgKHBvaW50ZXJvdXQpPVwib25Qb2ludGVyT3V0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmd0LXNwcml0ZS1tYXRlcmlhbFxuICAgICAgICAgICAgICAgIFttYXBdPVwidGV4dHVyZSgpXCJcbiAgICAgICAgICAgICAgICBbb3BhY2l0eV09XCJheGlzTGFiZWwoKSA/IDEgOiAwLjc1XCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cIjAuM1wiXG4gICAgICAgICAgICAgICAgW3RvbmVNYXBwZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cImdsKCkub3V0cHV0RW5jb2RpbmdcIiBhdHRhY2g9XCJtYXAuZW5jb2RpbmdcIiAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cImdsKCkuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKSB8fCAxXCIgYXR0YWNoPVwibWFwLmFuaXNvdHJvcHlcIiAvPlxuICAgICAgICAgICAgPC9uZ3Qtc3ByaXRlLW1hdGVyaWFsPlxuICAgICAgICA8L25ndC1zcHJpdGU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR2l6bW9WaWV3cG9ydEF4aXNIZWFkIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8e1xuICAgIGFyY1N0eWxlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBsYWJlbENvbG9yOiBzdHJpbmc7XG4gICAgYXhpc0hlYWRTY2FsZTogbnVtYmVyO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIGZvbnQ6IHN0cmluZztcbiAgICBjbGlja0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+Pjtcbn0+IHtcbiAgICByZWFkb25seSAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgZ2wgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ2dsJyk7XG5cbiAgICBASW5wdXQoKSBzZXQgYXJjU3R5bGUoYXJjU3R5bGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGFyY1N0eWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsYWJlbChsYWJlbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGFiZWwgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxhYmVsQ29sb3IobGFiZWxDb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGFiZWxDb2xvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXhpc0hlYWRTY2FsZShheGlzSGVhZFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBheGlzSGVhZFNjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc2FibGVkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmb250KGZvbnQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGZvbnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNsaWNrRW1pdHRlcihjbGlja0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+Pikge1xuICAgICAgICB0aGlzLnNldCh7IGNsaWNrRW1pdHRlciB9KTtcbiAgICB9XG5cbiAgICBhY3RpdmUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgcmVhZG9ubHkgI2FyY1N0eWxlID0gdGhpcy5zZWxlY3QoJ2FyY1N0eWxlJyk7XG4gICAgcmVhZG9ubHkgI2xhYmVsQ29sb3IgPSB0aGlzLnNlbGVjdCgnbGFiZWxDb2xvcicpO1xuICAgIHJlYWRvbmx5ICNmb250ID0gdGhpcy5zZWxlY3QoJ2ZvbnQnKTtcbiAgICByZWFkb25seSAjYXhpc0hlYWRTY2FsZSA9IHRoaXMuc2VsZWN0KCdheGlzSGVhZFNjYWxlJyk7XG5cbiAgICByZWFkb25seSBheGlzTGFiZWwgPSB0aGlzLnNlbGVjdCgnbGFiZWwnKTtcblxuICAgIHJlYWRvbmx5IHRleHR1cmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyY1N0eWxlID0gdGhpcy4jYXJjU3R5bGUoKTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvciA9IHRoaXMuI2xhYmVsQ29sb3IoKTtcbiAgICAgICAgY29uc3QgZm9udCA9IHRoaXMuI2ZvbnQoKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmF4aXNMYWJlbCgpO1xuXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuI2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2NDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDY0O1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnRleHQuYXJjKDMyLCAzMiwgMTYsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBhcmNTdHlsZTtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICBjb250ZXh0LmZvbnQgPSBmb250O1xuICAgICAgICAgICAgY29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gbGFiZWxDb2xvcjtcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQobGFiZWwsIDMyLCA0MSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXNUZXh0dXJlKGNhbnZhcyk7XG4gICAgfSk7XG5cbiAgICByZWFkb25seSBzY2FsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgYXhpc0hlYWRTY2FsZSA9IHRoaXMuI2F4aXNIZWFkU2NhbGUoKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmF4aXNMYWJlbCgpO1xuICAgICAgICByZXR1cm4gKGxhYmVsID8gMSA6IDAuNzUpICogKGFjdGl2ZSA/IDEuMiA6IDEpICogYXhpc0hlYWRTY2FsZTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGF4aXNIZWFkU2NhbGU6IDEgfSk7XG4gICAgfVxuXG4gICAgb25Qb2ludGVyT3ZlcihldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qb2ludGVyT3V0KGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldCgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdjbGlja0VtaXR0ZXInKT8ub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldCgnY2xpY2tFbWl0dGVyJykuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlLnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,273 +0,0 @@
1
- import { NgIf } from '@angular/common';
2
- import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, inject, Input, Output } from '@angular/core';
3
- import { extend, NgtSignalStore } from 'angular-three';
4
- import { AmbientLight, Group, PointLight } from 'three';
5
- import { NGTS_GIZMO_HELPER_API } from '../gizmo-helper';
6
- import { NgtsGizmoViewportAxis, NgtsGizmoViewportAxisHead } from './gizmo-viewport-axis';
7
- import * as i0 from "@angular/core";
8
- extend({ Group, AmbientLight, PointLight });
9
- class NgtsGizmoViewport extends NgtSignalStore {
10
- #gizmoHelperApi;
11
- set axisColors(axisColors) {
12
- this.set({ axisColors });
13
- }
14
- set axisScale(axisScale) {
15
- this.set({ axisScale });
16
- }
17
- set labels(labels) {
18
- this.set({ labels });
19
- }
20
- set axisHeadScale(axisHeadScale) {
21
- this.set({ axisHeadScale });
22
- }
23
- set labelColor(labelColor) {
24
- this.set({ labelColor });
25
- }
26
- set hideNegativeAxes(hideNegativeAxes) {
27
- this.set({ hideNegativeAxes });
28
- }
29
- set hideAxisHeads(hideAxisHeads) {
30
- this.set({ hideAxisHeads });
31
- }
32
- set disabled(disabled) {
33
- this.set({ disabled });
34
- }
35
- set font(font) {
36
- this.set({ font });
37
- }
38
- constructor() {
39
- super({
40
- font: '18px Inter var, Arial, sans-serif',
41
- axisColors: ['#ff2060', '#20df80', '#2080ff'],
42
- axisHeadScale: 1,
43
- labels: ['X', 'Y', 'Z'],
44
- labelColor: '#000',
45
- });
46
- this.#gizmoHelperApi = inject(NGTS_GIZMO_HELPER_API);
47
- this.Math = Math;
48
- this.clicked = new EventEmitter();
49
- this.viewportAxisColors = this.select('axisColors');
50
- this.viewportAxisScale = this.select('axisScale');
51
- this.viewportLabels = this.select('labels');
52
- this.viewportAxisHeadScale = this.select('axisHeadScale');
53
- this.viewportLabelColor = this.select('labelColor');
54
- this.viewportHideNegativeAxes = this.select('hideNegativeAxes');
55
- this.viewportHideAxisHeads = this.select('hideAxisHeads');
56
- this.viewportDisabled = this.select('disabled');
57
- this.viewportFont = this.select('font');
58
- }
59
- onPointerDown(event) {
60
- if (!this.get('disabled')) {
61
- event.stopPropagation();
62
- this.#gizmoHelperApi()(event.object.position);
63
- }
64
- }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewport, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsGizmoViewport, isStandalone: true, selector: "ngts-gizmo-viewport", inputs: { axisColors: "axisColors", axisScale: "axisScale", labels: "labels", axisHeadScale: "axisHeadScale", labelColor: "labelColor", hideNegativeAxes: "hideNegativeAxes", hideAxisHeads: "hideAxisHeads", disabled: "disabled", font: "font" }, outputs: { clicked: "clicked" }, usesInheritance: true, ngImport: i0, template: `
67
- <ngt-group ngtCompound [scale]="40">
68
- <ngts-gizmo-viewport-axis
69
- [color]="viewportAxisColors()[0]"
70
- [rotation]="[0, 0, 0]"
71
- [scale]="viewportAxisScale()"
72
- ></ngts-gizmo-viewport-axis>
73
- <ngts-gizmo-viewport-axis
74
- [color]="viewportAxisColors()[1]"
75
- [rotation]="[0, 0, Math.PI / 2]"
76
- [scale]="viewportAxisScale()"
77
- ></ngts-gizmo-viewport-axis>
78
- <ngts-gizmo-viewport-axis
79
- [color]="viewportAxisColors()[2]"
80
- [rotation]="[0, -Math.PI / 2, 0]"
81
- [scale]="viewportAxisScale()"
82
- ></ngts-gizmo-viewport-axis>
83
- <ng-container *ngIf="!viewportHideAxisHeads()">
84
- <ngts-gizmo-viewport-axis-head
85
- [arcStyle]="viewportAxisColors()[0]"
86
- [position]="[1, 0, 0]"
87
- [label]="viewportLabels()[0]"
88
- [font]="viewportFont()"
89
- [disabled]="viewportDisabled()"
90
- [labelColor]="viewportLabelColor()"
91
- [clickEmitter]="clicked"
92
- [axisHeadScale]="viewportAxisHeadScale()"
93
- (pointerdown)="onPointerDown($any($event))"
94
- ></ngts-gizmo-viewport-axis-head>
95
- <ngts-gizmo-viewport-axis-head
96
- [arcStyle]="viewportAxisColors()[1]"
97
- [position]="[0, 1, 0]"
98
- [label]="viewportLabels()[1]"
99
- [font]="viewportFont()"
100
- [disabled]="viewportDisabled()"
101
- [labelColor]="viewportLabelColor()"
102
- [clickEmitter]="clicked"
103
- [axisHeadScale]="viewportAxisHeadScale()"
104
- (pointerdown)="onPointerDown($any($event))"
105
- ></ngts-gizmo-viewport-axis-head>
106
- <ngts-gizmo-viewport-axis-head
107
- [arcStyle]="viewportAxisColors()[2]"
108
- [position]="[0, 0, 1]"
109
- [label]="viewportLabels()[2]"
110
- [font]="viewportFont()"
111
- [disabled]="viewportDisabled()"
112
- [labelColor]="viewportLabelColor()"
113
- [clickEmitter]="clicked"
114
- [axisHeadScale]="viewportAxisHeadScale()"
115
- (pointerdown)="onPointerDown($any($event))"
116
- ></ngts-gizmo-viewport-axis-head>
117
- <ng-container *ngIf="!viewportHideNegativeAxes()">
118
- <ngts-gizmo-viewport-axis-head
119
- [arcStyle]="viewportAxisColors()[0]"
120
- [position]="[-1, 0, 0]"
121
- [font]="viewportFont()"
122
- [disabled]="viewportDisabled()"
123
- [labelColor]="viewportLabelColor()"
124
- [clickEmitter]="clicked"
125
- [axisHeadScale]="viewportAxisHeadScale()"
126
- (pointerdown)="onPointerDown($any($event))"
127
- ></ngts-gizmo-viewport-axis-head>
128
- <ngts-gizmo-viewport-axis-head
129
- [arcStyle]="viewportAxisColors()[1]"
130
- [position]="[0, -1, 0]"
131
- [font]="viewportFont()"
132
- [disabled]="viewportDisabled()"
133
- [labelColor]="viewportLabelColor()"
134
- [clickEmitter]="clicked"
135
- [axisHeadScale]="viewportAxisHeadScale()"
136
- (pointerdown)="onPointerDown($any($event))"
137
- ></ngts-gizmo-viewport-axis-head>
138
- <ngts-gizmo-viewport-axis-head
139
- [arcStyle]="viewportAxisColors()[2]"
140
- [position]="[0, 0, -1]"
141
- [font]="viewportFont()"
142
- [disabled]="viewportDisabled()"
143
- [labelColor]="viewportLabelColor()"
144
- [clickEmitter]="clicked"
145
- [axisHeadScale]="viewportAxisHeadScale()"
146
- (pointerdown)="onPointerDown($any($event))"
147
- ></ngts-gizmo-viewport-axis-head>
148
- </ng-container>
149
- </ng-container>
150
- <ngt-ambient-light intensity="0.5"></ngt-ambient-light>
151
- <ngt-point-light position="10" intensity="0.5"></ngt-point-light>
152
- </ngt-group>
153
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsGizmoViewportAxis, selector: "ngts-gizmo-viewport-axis", inputs: ["color", "rotation", "scale"] }, { kind: "component", type: NgtsGizmoViewportAxisHead, selector: "ngts-gizmo-viewport-axis-head", inputs: ["arcStyle", "label", "labelColor", "axisHeadScale", "disabled", "font", "clickEmitter"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
154
- }
155
- export { NgtsGizmoViewport };
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsGizmoViewport, decorators: [{
157
- type: Component,
158
- args: [{
159
- selector: 'ngts-gizmo-viewport',
160
- standalone: true,
161
- template: `
162
- <ngt-group ngtCompound [scale]="40">
163
- <ngts-gizmo-viewport-axis
164
- [color]="viewportAxisColors()[0]"
165
- [rotation]="[0, 0, 0]"
166
- [scale]="viewportAxisScale()"
167
- ></ngts-gizmo-viewport-axis>
168
- <ngts-gizmo-viewport-axis
169
- [color]="viewportAxisColors()[1]"
170
- [rotation]="[0, 0, Math.PI / 2]"
171
- [scale]="viewportAxisScale()"
172
- ></ngts-gizmo-viewport-axis>
173
- <ngts-gizmo-viewport-axis
174
- [color]="viewportAxisColors()[2]"
175
- [rotation]="[0, -Math.PI / 2, 0]"
176
- [scale]="viewportAxisScale()"
177
- ></ngts-gizmo-viewport-axis>
178
- <ng-container *ngIf="!viewportHideAxisHeads()">
179
- <ngts-gizmo-viewport-axis-head
180
- [arcStyle]="viewportAxisColors()[0]"
181
- [position]="[1, 0, 0]"
182
- [label]="viewportLabels()[0]"
183
- [font]="viewportFont()"
184
- [disabled]="viewportDisabled()"
185
- [labelColor]="viewportLabelColor()"
186
- [clickEmitter]="clicked"
187
- [axisHeadScale]="viewportAxisHeadScale()"
188
- (pointerdown)="onPointerDown($any($event))"
189
- ></ngts-gizmo-viewport-axis-head>
190
- <ngts-gizmo-viewport-axis-head
191
- [arcStyle]="viewportAxisColors()[1]"
192
- [position]="[0, 1, 0]"
193
- [label]="viewportLabels()[1]"
194
- [font]="viewportFont()"
195
- [disabled]="viewportDisabled()"
196
- [labelColor]="viewportLabelColor()"
197
- [clickEmitter]="clicked"
198
- [axisHeadScale]="viewportAxisHeadScale()"
199
- (pointerdown)="onPointerDown($any($event))"
200
- ></ngts-gizmo-viewport-axis-head>
201
- <ngts-gizmo-viewport-axis-head
202
- [arcStyle]="viewportAxisColors()[2]"
203
- [position]="[0, 0, 1]"
204
- [label]="viewportLabels()[2]"
205
- [font]="viewportFont()"
206
- [disabled]="viewportDisabled()"
207
- [labelColor]="viewportLabelColor()"
208
- [clickEmitter]="clicked"
209
- [axisHeadScale]="viewportAxisHeadScale()"
210
- (pointerdown)="onPointerDown($any($event))"
211
- ></ngts-gizmo-viewport-axis-head>
212
- <ng-container *ngIf="!viewportHideNegativeAxes()">
213
- <ngts-gizmo-viewport-axis-head
214
- [arcStyle]="viewportAxisColors()[0]"
215
- [position]="[-1, 0, 0]"
216
- [font]="viewportFont()"
217
- [disabled]="viewportDisabled()"
218
- [labelColor]="viewportLabelColor()"
219
- [clickEmitter]="clicked"
220
- [axisHeadScale]="viewportAxisHeadScale()"
221
- (pointerdown)="onPointerDown($any($event))"
222
- ></ngts-gizmo-viewport-axis-head>
223
- <ngts-gizmo-viewport-axis-head
224
- [arcStyle]="viewportAxisColors()[1]"
225
- [position]="[0, -1, 0]"
226
- [font]="viewportFont()"
227
- [disabled]="viewportDisabled()"
228
- [labelColor]="viewportLabelColor()"
229
- [clickEmitter]="clicked"
230
- [axisHeadScale]="viewportAxisHeadScale()"
231
- (pointerdown)="onPointerDown($any($event))"
232
- ></ngts-gizmo-viewport-axis-head>
233
- <ngts-gizmo-viewport-axis-head
234
- [arcStyle]="viewportAxisColors()[2]"
235
- [position]="[0, 0, -1]"
236
- [font]="viewportFont()"
237
- [disabled]="viewportDisabled()"
238
- [labelColor]="viewportLabelColor()"
239
- [clickEmitter]="clicked"
240
- [axisHeadScale]="viewportAxisHeadScale()"
241
- (pointerdown)="onPointerDown($any($event))"
242
- ></ngts-gizmo-viewport-axis-head>
243
- </ng-container>
244
- </ng-container>
245
- <ngt-ambient-light intensity="0.5"></ngt-ambient-light>
246
- <ngt-point-light position="10" intensity="0.5"></ngt-point-light>
247
- </ngt-group>
248
- `,
249
- imports: [NgtsGizmoViewportAxis, NgtsGizmoViewportAxisHead, NgIf],
250
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
251
- }]
252
- }], ctorParameters: function () { return []; }, propDecorators: { axisColors: [{
253
- type: Input
254
- }], axisScale: [{
255
- type: Input
256
- }], labels: [{
257
- type: Input
258
- }], axisHeadScale: [{
259
- type: Input
260
- }], labelColor: [{
261
- type: Input
262
- }], hideNegativeAxes: [{
263
- type: Input
264
- }], hideAxisHeads: [{
265
- type: Input
266
- }], disabled: [{
267
- type: Input
268
- }], font: [{
269
- type: Input
270
- }], clicked: [{
271
- type: Output
272
- }] } });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8tdmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRXpGLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUU1QyxNQThGYSxpQkFBa0IsU0FBUSxjQVVyQztJQUNXLGVBQWUsQ0FBaUM7SUFJekQsSUFBYSxVQUFVLENBQUMsVUFBb0M7UUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQW1DO1FBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFnQztRQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJ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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F1RlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDO29CQUNqRSxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBZ0JnQixVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxhQUFhO3NCQUF6QixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlJLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgTmd0U2lnbmFsU3RvcmUsIE5ndFRocmVlRXZlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEFtYmllbnRMaWdodCwgR3JvdXAsIFBvaW50TGlnaHQgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOR1RTX0dJWk1PX0hFTFBFUl9BUEkgfSBmcm9tICcuLi9naXptby1oZWxwZXInO1xuaW1wb3J0IHsgTmd0c0dpem1vVmlld3BvcnRBeGlzLCBOZ3RzR2l6bW9WaWV3cG9ydEF4aXNIZWFkIH0gZnJvbSAnLi9naXptby12aWV3cG9ydC1heGlzJztcblxuZXh0ZW5kKHsgR3JvdXAsIEFtYmllbnRMaWdodCwgUG9pbnRMaWdodCB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWdpem1vLXZpZXdwb3J0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQgW3NjYWxlXT1cIjQwXCI+XG4gICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cInZpZXdwb3J0QXhpc0NvbG9ycygpWzBdXCJcbiAgICAgICAgICAgICAgICBbcm90YXRpb25dPVwiWzAsIDAsIDBdXCJcbiAgICAgICAgICAgICAgICBbc2NhbGVdPVwidmlld3BvcnRBeGlzU2NhbGUoKVwiXG4gICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXM+XG4gICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cInZpZXdwb3J0QXhpc0NvbG9ycygpWzFdXCJcbiAgICAgICAgICAgICAgICBbcm90YXRpb25dPVwiWzAsIDAsIE1hdGguUEkgLyAyXVwiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cInZpZXdwb3J0QXhpc1NjYWxlKClcIlxuICAgICAgICAgICAgPjwvbmd0cy1naXptby12aWV3cG9ydC1heGlzPlxuICAgICAgICAgICAgPG5ndHMtZ2l6bW8tdmlld3BvcnQtYXhpc1xuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJ2aWV3cG9ydEF4aXNDb2xvcnMoKVsyXVwiXG4gICAgICAgICAgICAgICAgW3JvdGF0aW9uXT1cIlswLCAtTWF0aC5QSSAvIDIsIDBdXCJcbiAgICAgICAgICAgICAgICBbc2NhbGVdPVwidmlld3BvcnRBeGlzU2NhbGUoKVwiXG4gICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpZXdwb3J0SGlkZUF4aXNIZWFkcygpXCI+XG4gICAgICAgICAgICAgICAgPG5ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkXG4gICAgICAgICAgICAgICAgICAgIFthcmNTdHlsZV09XCJ2aWV3cG9ydEF4aXNDb2xvcnMoKVswXVwiXG4gICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJbMSwgMCwgMF1cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwidmlld3BvcnRMYWJlbHMoKVswXVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb250XT1cInZpZXdwb3J0Rm9udCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdwb3J0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInZpZXdwb3J0TGFiZWxDb2xvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsaWNrRW1pdHRlcl09XCJjbGlja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F4aXNIZWFkU2NhbGVdPVwidmlld3BvcnRBeGlzSGVhZFNjYWxlKClcIlxuICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZD5cbiAgICAgICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWRcbiAgICAgICAgICAgICAgICAgICAgW2FyY1N0eWxlXT1cInZpZXdwb3J0QXhpc0NvbG9ycygpWzFdXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAxLCAwXVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ2aWV3cG9ydExhYmVscygpWzFdXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZvbnRdPVwidmlld3BvcnRGb250KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlld3BvcnREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwidmlld3BvcnRMYWJlbENvbG9yKClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xpY2tFbWl0dGVyXT1cImNsaWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXhpc0hlYWRTY2FsZV09XCJ2aWV3cG9ydEF4aXNIZWFkU2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkPlxuICAgICAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZFxuICAgICAgICAgICAgICAgICAgICBbYXJjU3R5bGVdPVwidmlld3BvcnRBeGlzQ29sb3JzKClbMl1cIlxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIDAsIDFdXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInZpZXdwb3J0TGFiZWxzKClbMl1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9udF09XCJ2aWV3cG9ydEZvbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3cG9ydERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJ2aWV3cG9ydExhYmVsQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGlja0VtaXR0ZXJdPVwiY2xpY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtheGlzSGVhZFNjYWxlXT1cInZpZXdwb3J0QXhpc0hlYWRTY2FsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgPjwvbmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2aWV3cG9ydEhpZGVOZWdhdGl2ZUF4ZXMoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmNTdHlsZV09XCJ2aWV3cG9ydEF4aXNDb2xvcnMoKVswXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWy0xLCAwLCAwXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9udF09XCJ2aWV3cG9ydEZvbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlld3BvcnREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInZpZXdwb3J0TGFiZWxDb2xvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja0VtaXR0ZXJdPVwiY2xpY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXhpc0hlYWRTY2FsZV09XCJ2aWV3cG9ydEF4aXNIZWFkU2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyY1N0eWxlXT1cInZpZXdwb3J0QXhpc0NvbG9ycygpWzFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJbMCwgLTEsIDBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb250XT1cInZpZXdwb3J0Rm9udCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3cG9ydERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwidmlld3BvcnRMYWJlbENvbG9yKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrRW1pdHRlcl09XCJjbGlja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtheGlzSGVhZFNjYWxlXT1cInZpZXdwb3J0QXhpc0hlYWRTY2FsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPG5ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJjU3R5bGVdPVwidmlld3BvcnRBeGlzQ29sb3JzKClbMl1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAwLCAtMV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbnRdPVwidmlld3BvcnRGb250KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdwb3J0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJ2aWV3cG9ydExhYmVsQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2tFbWl0dGVyXT1cImNsaWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F4aXNIZWFkU2NhbGVdPVwidmlld3BvcnRBeGlzSGVhZFNjYWxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmd0LWFtYmllbnQtbGlnaHQgaW50ZW5zaXR5PVwiMC41XCI+PC9uZ3QtYW1iaWVudC1saWdodD5cbiAgICAgICAgICAgIDxuZ3QtcG9pbnQtbGlnaHQgcG9zaXRpb249XCIxMFwiIGludGVuc2l0eT1cIjAuNVwiPjwvbmd0LXBvaW50LWxpZ2h0PlxuICAgICAgICA8L25ndC1ncm91cD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RzR2l6bW9WaWV3cG9ydEF4aXMsIE5ndHNHaXptb1ZpZXdwb3J0QXhpc0hlYWQsIE5nSWZdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dpem1vVmlld3BvcnQgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTx7XG4gICAgYXhpc0NvbG9yczogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddO1xuICAgIGF4aXNTY2FsZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxhYmVsczogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddO1xuICAgIGF4aXNIZWFkU2NhbGU6IG51bWJlcjtcbiAgICBsYWJlbENvbG9yOiBzdHJpbmc7XG4gICAgaGlkZU5lZ2F0aXZlQXhlczogYm9vbGVhbjtcbiAgICBoaWRlQXhpc0hlYWRzOiBib29sZWFuO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIGZvbnQ6IHN0cmluZztcbn0+IHtcbiAgICByZWFkb25seSAjZ2l6bW9IZWxwZXJBcGkgPSBpbmplY3QoTkdUU19HSVpNT19IRUxQRVJfQVBJKTtcblxuICAgIHJlYWRvbmx5IE1hdGggPSBNYXRoO1xuXG4gICAgQElucHV0KCkgc2V0IGF4aXNDb2xvcnMoYXhpc0NvbG9yczogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc0NvbG9ycyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXhpc1NjYWxlKGF4aXNTY2FsZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc1NjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsYWJlbHMobGFiZWxzOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsYWJlbHMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF4aXNIZWFkU2NhbGUoYXhpc0hlYWRTY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc0hlYWRTY2FsZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGFiZWxDb2xvcihsYWJlbENvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsYWJlbENvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBoaWRlTmVnYXRpdmVBeGVzKGhpZGVOZWdhdGl2ZUF4ZXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBoaWRlTmVnYXRpdmVBeGVzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBoaWRlQXhpc0hlYWRzKGhpZGVBeGlzSGVhZHM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBoaWRlQXhpc0hlYWRzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc2FibGVkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmb250KGZvbnQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGZvbnQgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG5cbiAgICByZWFkb25seSB2aWV3cG9ydEF4aXNDb2xvcnMgPSB0aGlzLnNlbGVjdCgnYXhpc0NvbG9ycycpO1xuICAgIHJlYWRvbmx5IHZpZXdwb3J0QXhpc1NjYWxlID0gdGhpcy5zZWxlY3QoJ2F4aXNTY2FsZScpO1xuICAgIHJlYWRvbmx5IHZpZXdwb3J0TGFiZWxzID0gdGhpcy5zZWxlY3QoJ2xhYmVscycpO1xuICAgIHJlYWRvbmx5IHZpZXdwb3J0QXhpc0hlYWRTY2FsZSA9IHRoaXMuc2VsZWN0KCdheGlzSGVhZFNjYWxlJyk7XG4gICAgcmVhZG9ubHkgdmlld3BvcnRMYWJlbENvbG9yID0gdGhpcy5zZWxlY3QoJ2xhYmVsQ29sb3InKTtcbiAgICByZWFkb25seSB2aWV3cG9ydEhpZGVOZWdhdGl2ZUF4ZXMgPSB0aGlzLnNlbGVjdCgnaGlkZU5lZ2F0aXZlQXhlcycpO1xuICAgIHJlYWRvbmx5IHZpZXdwb3J0SGlkZUF4aXNIZWFkcyA9IHRoaXMuc2VsZWN0KCdoaWRlQXhpc0hlYWRzJyk7XG4gICAgcmVhZG9ubHkgdmlld3BvcnREaXNhYmxlZCA9IHRoaXMuc2VsZWN0KCdkaXNhYmxlZCcpO1xuICAgIHJlYWRvbmx5IHZpZXdwb3J0Rm9udCA9IHRoaXMuc2VsZWN0KCdmb250Jyk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgZm9udDogJzE4cHggSW50ZXIgdmFyLCBBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICBheGlzQ29sb3JzOiBbJyNmZjIwNjAnLCAnIzIwZGY4MCcsICcjMjA4MGZmJ10sXG4gICAgICAgICAgICBheGlzSGVhZFNjYWxlOiAxLFxuICAgICAgICAgICAgbGFiZWxzOiBbJ1gnLCAnWScsICdaJ10sXG4gICAgICAgICAgICBsYWJlbENvbG9yOiAnIzAwMCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUG9pbnRlckRvd24oZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pikge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuI2dpem1vSGVscGVyQXBpKCkoZXZlbnQub2JqZWN0LnBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==