@colijnit/configurator 261.1.1 → 261.20.1

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 (401) hide show
  1. package/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19087 -18481
  2. package/fesm2022/colijnit-configurator.mjs.map +1 -0
  3. package/index.d.ts +3299 -0
  4. package/lib/components/answer-card/style/_layout.scss +3 -3
  5. package/lib/components/answers-slideout/style/_layout.scss +1 -0
  6. package/lib/style/configurator-globals.scss +1 -21
  7. package/package.json +24 -19
  8. package/bundles/colijnit-configurator.umd.js +0 -20167
  9. package/bundles/colijnit-configurator.umd.js.map +0 -1
  10. package/colijnit-configurator.d.ts +0 -5
  11. package/esm2015/colijnit-configurator.js +0 -5
  12. package/esm2015/lib/builder.js +0 -795
  13. package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
  14. package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
  15. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
  16. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
  17. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
  18. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
  19. package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
  20. package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
  21. package/esm2015/lib/components/configurator/configurator.component.js +0 -133
  22. package/esm2015/lib/components/configurator/configurator.module.js +0 -42
  23. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
  24. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
  25. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
  26. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
  27. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
  28. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
  29. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
  30. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
  31. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
  32. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
  33. package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
  34. package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
  35. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
  36. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
  37. package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
  38. package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
  39. package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
  40. package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
  41. package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
  42. package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
  43. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
  44. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
  45. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
  46. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
  47. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
  48. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
  49. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
  50. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
  51. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
  52. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
  53. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
  54. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
  55. package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
  56. package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
  57. package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
  58. package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
  59. package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
  60. package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
  61. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
  62. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
  63. package/esm2015/lib/components/slideout/slideout.component.js +0 -83
  64. package/esm2015/lib/components/slideout/slideout.module.js +0 -17
  65. package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
  66. package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
  67. package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
  68. package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
  69. package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
  70. package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
  71. package/esm2015/lib/core/helper/variation-helper.js +0 -553
  72. package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
  73. package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
  74. package/esm2015/lib/directives/directives.module.js +0 -26
  75. package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
  76. package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
  77. package/esm2015/lib/enum/ar-feature.enum.js +0 -14
  78. package/esm2015/lib/enum/configuration-key.enum.js +0 -41
  79. package/esm2015/lib/enum/configuration-template.enum.js +0 -6
  80. package/esm2015/lib/enum/device-size-type.js +0 -7
  81. package/esm2015/lib/enum/device-tier.enum.js +0 -7
  82. package/esm2015/lib/enum/icon.enum.js +0 -113
  83. package/esm2015/lib/enum/item-type.enum.js +0 -23
  84. package/esm2015/lib/enum/light.enum.js +0 -9
  85. package/esm2015/lib/enum/navigator-type.enum.js +0 -6
  86. package/esm2015/lib/enum/output-encoding.enum.js +0 -9
  87. package/esm2015/lib/enum/result-type.enum.js +0 -21
  88. package/esm2015/lib/enum/scene-event.enum.js +0 -12
  89. package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
  90. package/esm2015/lib/enum/texture-type.js +0 -9
  91. package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
  92. package/esm2015/lib/enum/view-mode.enum.js +0 -7
  93. package/esm2015/lib/enum/xr-mode.enum.js +0 -6
  94. package/esm2015/lib/environments/environment.js +0 -8
  95. package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
  96. package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
  97. package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
  98. package/esm2015/lib/interfaces/changes.interface.js +0 -2
  99. package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
  100. package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
  101. package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
  102. package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
  103. package/esm2015/lib/interfaces/screen-size-info.js +0 -2
  104. package/esm2015/lib/interfaces/setting.interface.js +0 -2
  105. package/esm2015/lib/interfaces/texture.interface.js +0 -2
  106. package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
  107. package/esm2015/lib/model/ar-position-indicator.js +0 -18
  108. package/esm2015/lib/model/camera-settings.js +0 -14
  109. package/esm2015/lib/model/configuration-result-object.js +0 -6
  110. package/esm2015/lib/model/configurator-error-message.js +0 -9
  111. package/esm2015/lib/model/configurator-settings.js +0 -25
  112. package/esm2015/lib/model/custom-button.js +0 -16
  113. package/esm2015/lib/model/factory.js +0 -28
  114. package/esm2015/lib/model/icon.js +0 -112
  115. package/esm2015/lib/model/intersected-objects.js +0 -7
  116. package/esm2015/lib/model/light-preset.js +0 -73
  117. package/esm2015/lib/model/light-properties.js +0 -45
  118. package/esm2015/lib/model/material.js +0 -11
  119. package/esm2015/lib/model/metadata.js +0 -2
  120. package/esm2015/lib/model/render-parameters.js +0 -16
  121. package/esm2015/lib/model/setting-options.js +0 -71
  122. package/esm2015/lib/model/settings.js +0 -16
  123. package/esm2015/lib/model/shadow-properties.js +0 -10
  124. package/esm2015/lib/model/skin.js +0 -3
  125. package/esm2015/lib/model/texture.js +0 -76
  126. package/esm2015/lib/model/variation-settings.js +0 -54
  127. package/esm2015/lib/model/variation.js +0 -3
  128. package/esm2015/lib/model/xr-reticle.js +0 -79
  129. package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
  130. package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
  131. package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
  132. package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
  133. package/esm2015/lib/pipes/append.pipe.js +0 -21
  134. package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
  135. package/esm2015/lib/pipes/localize.pipe.js +0 -28
  136. package/esm2015/lib/pipes/pipes.module.js +0 -41
  137. package/esm2015/lib/pipes/prepend.pipe.js +0 -21
  138. package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
  139. package/esm2015/lib/services/app-event.service.js +0 -36
  140. package/esm2015/lib/services/app-initializer.service.js +0 -27
  141. package/esm2015/lib/services/ar.service.js +0 -844
  142. package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
  143. package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
  144. package/esm2015/lib/services/build-furniture.service.js +0 -169
  145. package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
  146. package/esm2015/lib/services/camera.service.js +0 -123
  147. package/esm2015/lib/services/configuration.service.js +0 -79
  148. package/esm2015/lib/services/configurator-connector.service.js +0 -830
  149. package/esm2015/lib/services/configurator.service.js +0 -285
  150. package/esm2015/lib/services/configuring.service.js +0 -119
  151. package/esm2015/lib/services/controls.js +0 -799
  152. package/esm2015/lib/services/debug.service.js +0 -43
  153. package/esm2015/lib/services/dictionary.service.js +0 -65
  154. package/esm2015/lib/services/dynamic-camera.service.js +0 -96
  155. package/esm2015/lib/services/floor-plane.service.js +0 -252
  156. package/esm2015/lib/services/font.service.js +0 -27
  157. package/esm2015/lib/services/google-translate.service.js +0 -79
  158. package/esm2015/lib/services/icon-cache.service.js +0 -44
  159. package/esm2015/lib/services/intersection.service.js +0 -47
  160. package/esm2015/lib/services/item.service.js +0 -75
  161. package/esm2015/lib/services/json-utils.service.js +0 -48
  162. package/esm2015/lib/services/light-creation.service.js +0 -35
  163. package/esm2015/lib/services/light-presets.service.js +0 -157
  164. package/esm2015/lib/services/lights.service.js +0 -146
  165. package/esm2015/lib/services/load-furniture-base.service.js +0 -164
  166. package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
  167. package/esm2015/lib/services/load-furniture.service.js +0 -72
  168. package/esm2015/lib/services/loader.service.js +0 -32
  169. package/esm2015/lib/services/locator.service.js +0 -11
  170. package/esm2015/lib/services/message-board.service.js +0 -50
  171. package/esm2015/lib/services/post-processing.service.js +0 -378
  172. package/esm2015/lib/services/product-configurator.service.js +0 -16
  173. package/esm2015/lib/services/progress.service.js +0 -20
  174. package/esm2015/lib/services/scene-event.service.js +0 -246
  175. package/esm2015/lib/services/scene-options.service.js +0 -24
  176. package/esm2015/lib/services/scene.service.js +0 -313
  177. package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
  178. package/esm2015/lib/services/settings.service.js +0 -142
  179. package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
  180. package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
  181. package/esm2015/lib/services/threedselector.service.js +0 -72
  182. package/esm2015/lib/services/utils.service.js +0 -207
  183. package/esm2015/lib/services/variation-cache.service.js +0 -143
  184. package/esm2015/lib/services/variation.service.js +0 -490
  185. package/esm2015/lib/services/view-mode.service.js +0 -37
  186. package/esm2015/lib/services/vr.service.js +0 -191
  187. package/esm2015/lib/services/xr.service.js +0 -294
  188. package/esm2015/lib/utils/asset.utils.js +0 -120
  189. package/esm2015/lib/utils/base-utils.js +0 -9
  190. package/esm2015/lib/utils/color.utils.js +0 -30
  191. package/esm2015/lib/utils/debug.utils.js +0 -9
  192. package/esm2015/lib/utils/device.utils.js +0 -25
  193. package/esm2015/lib/utils/file.utils.js +0 -167
  194. package/esm2015/lib/utils/image.utils.js +0 -61
  195. package/esm2015/lib/utils/json-parser.utils.js +0 -180
  196. package/esm2015/lib/utils/material.utils.js +0 -433
  197. package/esm2015/lib/utils/object.utils.js +0 -360
  198. package/esm2015/lib/utils/relative-position.utils.js +0 -75
  199. package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
  200. package/esm2015/lib/utils/scene-3d.utils.js +0 -213
  201. package/esm2015/lib/utils/scene-utils.js +0 -191
  202. package/esm2015/lib/utils/text-utils.js +0 -68
  203. package/esm2015/lib/utils/threed.utils.js +0 -281
  204. package/esm2015/lib/utils/variation-utils.js +0 -459
  205. package/esm2015/public-api.js +0 -65
  206. package/fesm2015/colijnit-configurator.js.map +0 -1
  207. package/lib/builder.d.ts +0 -83
  208. package/lib/components/answer-card/answer-card.component.d.ts +0 -58
  209. package/lib/components/answer-card/answer-card.module.d.ts +0 -11
  210. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
  211. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
  212. package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
  213. package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
  214. package/lib/components/color-filter/color-filter.component.d.ts +0 -20
  215. package/lib/components/color-filter/color-filter.module.d.ts +0 -8
  216. package/lib/components/configurator/configurator.component.d.ts +0 -37
  217. package/lib/components/configurator/configurator.module.d.ts +0 -12
  218. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
  219. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
  220. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
  221. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
  222. package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
  223. package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
  224. package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
  225. package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
  226. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
  227. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
  228. package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
  229. package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
  230. package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
  231. package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
  232. package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
  233. package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
  234. package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
  235. package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
  236. package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
  237. package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
  238. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
  239. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
  240. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
  241. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
  242. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
  243. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
  244. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
  245. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
  246. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
  247. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
  248. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
  249. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
  250. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
  251. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  252. package/lib/components/scene-options/scene-options.component.d.ts +0 -24
  253. package/lib/components/scene-options/scene-options.module.d.ts +0 -11
  254. package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
  255. package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
  256. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
  257. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
  258. package/lib/components/slideout/slideout.component.d.ts +0 -22
  259. package/lib/components/slideout/slideout.module.d.ts +0 -7
  260. package/lib/components/summary-line/summary-line.component.d.ts +0 -50
  261. package/lib/components/summary-line/summary-line.module.d.ts +0 -11
  262. package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
  263. package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
  264. package/lib/components/threedselector/threedselector.component.d.ts +0 -38
  265. package/lib/components/threedselector/threedselector.module.d.ts +0 -10
  266. package/lib/core/helper/variation-helper.d.ts +0 -25
  267. package/lib/core/shader/floor-fade.shader.d.ts +0 -5
  268. package/lib/core/textures/depth-data-texture.d.ts +0 -5
  269. package/lib/directives/directives.module.d.ts +0 -8
  270. package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
  271. package/lib/directives/visibility-observer.directive.d.ts +0 -16
  272. package/lib/enum/ar-feature.enum.d.ts +0 -12
  273. package/lib/enum/configuration-key.enum.d.ts +0 -39
  274. package/lib/enum/configuration-template.enum.d.ts +0 -4
  275. package/lib/enum/device-size-type.d.ts +0 -5
  276. package/lib/enum/device-tier.enum.d.ts +0 -5
  277. package/lib/enum/icon.enum.d.ts +0 -111
  278. package/lib/enum/item-type.enum.d.ts +0 -21
  279. package/lib/enum/light.enum.d.ts +0 -7
  280. package/lib/enum/navigator-type.enum.d.ts +0 -4
  281. package/lib/enum/output-encoding.enum.d.ts +0 -7
  282. package/lib/enum/result-type.enum.d.ts +0 -19
  283. package/lib/enum/scene-event.enum.d.ts +0 -10
  284. package/lib/enum/shadow-map-type.enum.d.ts +0 -6
  285. package/lib/enum/texture-type.d.ts +0 -7
  286. package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
  287. package/lib/enum/view-mode.enum.d.ts +0 -5
  288. package/lib/enum/xr-mode.enum.d.ts +0 -4
  289. package/lib/environments/environment.d.ts +0 -4
  290. package/lib/interfaces/aa-options.interface.d.ts +0 -4
  291. package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
  292. package/lib/interfaces/ao-options.interface.d.ts +0 -18
  293. package/lib/interfaces/changes.interface.d.ts +0 -9
  294. package/lib/interfaces/configuration-data.interface.d.ts +0 -40
  295. package/lib/interfaces/light-preset.interface.d.ts +0 -22
  296. package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
  297. package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
  298. package/lib/interfaces/screen-size-info.d.ts +0 -10
  299. package/lib/interfaces/setting.interface.d.ts +0 -8
  300. package/lib/interfaces/texture.interface.d.ts +0 -44
  301. package/lib/interfaces/vignette-options.interface.d.ts +0 -4
  302. package/lib/model/ar-position-indicator.d.ts +0 -4
  303. package/lib/model/camera-settings.d.ts +0 -12
  304. package/lib/model/configuration-result-object.d.ts +0 -30
  305. package/lib/model/configurator-error-message.d.ts +0 -8
  306. package/lib/model/configurator-settings.d.ts +0 -62
  307. package/lib/model/custom-button.d.ts +0 -10
  308. package/lib/model/factory.d.ts +0 -5
  309. package/lib/model/icon.d.ts +0 -4
  310. package/lib/model/intersected-objects.d.ts +0 -6
  311. package/lib/model/light-preset.d.ts +0 -33
  312. package/lib/model/light-properties.d.ts +0 -25
  313. package/lib/model/material.d.ts +0 -41
  314. package/lib/model/metadata.d.ts +0 -78
  315. package/lib/model/render-parameters.d.ts +0 -12
  316. package/lib/model/setting-options.d.ts +0 -67
  317. package/lib/model/settings.d.ts +0 -10
  318. package/lib/model/shadow-properties.d.ts +0 -7
  319. package/lib/model/skin.d.ts +0 -15
  320. package/lib/model/texture.d.ts +0 -52
  321. package/lib/model/variation-settings.d.ts +0 -55
  322. package/lib/model/variation.d.ts +0 -11
  323. package/lib/model/xr-reticle.d.ts +0 -17
  324. package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
  325. package/lib/modules/render/model/ar-parameters.d.ts +0 -9
  326. package/lib/modules/render/model/scene-setting.d.ts +0 -13
  327. package/lib/modules/render/model/scene-settings.d.ts +0 -4
  328. package/lib/pipes/append.pipe.d.ts +0 -7
  329. package/lib/pipes/google-translate.pipe.d.ts +0 -11
  330. package/lib/pipes/localize.pipe.d.ts +0 -10
  331. package/lib/pipes/pipes.module.d.ts +0 -11
  332. package/lib/pipes/prepend.pipe.d.ts +0 -7
  333. package/lib/pipes/strip-html.pipe.d.ts +0 -7
  334. package/lib/services/app-event.service.d.ts +0 -32
  335. package/lib/services/app-initializer.service.d.ts +0 -14
  336. package/lib/services/ar.service.d.ts +0 -120
  337. package/lib/services/build-furniture-base.service.d.ts +0 -117
  338. package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
  339. package/lib/services/build-furniture.service.d.ts +0 -14
  340. package/lib/services/bundle-initialzer.service.d.ts +0 -45
  341. package/lib/services/camera.service.d.ts +0 -44
  342. package/lib/services/configuration.service.d.ts +0 -18
  343. package/lib/services/configurator-connector.service.d.ts +0 -140
  344. package/lib/services/configurator.service.d.ts +0 -62
  345. package/lib/services/configuring.service.d.ts +0 -46
  346. package/lib/services/controls.d.ts +0 -11
  347. package/lib/services/debug.service.d.ts +0 -16
  348. package/lib/services/dictionary.service.d.ts +0 -15
  349. package/lib/services/dynamic-camera.service.d.ts +0 -21
  350. package/lib/services/floor-plane.service.d.ts +0 -47
  351. package/lib/services/font.service.d.ts +0 -10
  352. package/lib/services/google-translate.service.d.ts +0 -26
  353. package/lib/services/icon-cache.service.d.ts +0 -21
  354. package/lib/services/intersection.service.d.ts +0 -11
  355. package/lib/services/item.service.d.ts +0 -18
  356. package/lib/services/json-utils.service.d.ts +0 -7
  357. package/lib/services/light-creation.service.d.ts +0 -9
  358. package/lib/services/light-presets.service.d.ts +0 -34
  359. package/lib/services/lights.service.d.ts +0 -34
  360. package/lib/services/load-furniture-base.service.d.ts +0 -37
  361. package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
  362. package/lib/services/load-furniture.service.d.ts +0 -9
  363. package/lib/services/loader.service.d.ts +0 -11
  364. package/lib/services/locator.service.d.ts +0 -7
  365. package/lib/services/message-board.service.d.ts +0 -18
  366. package/lib/services/post-processing.service.d.ts +0 -74
  367. package/lib/services/product-configurator.service.d.ts +0 -11
  368. package/lib/services/progress.service.d.ts +0 -9
  369. package/lib/services/scene-event.service.d.ts +0 -72
  370. package/lib/services/scene-options.service.d.ts +0 -11
  371. package/lib/services/scene.service.d.ts +0 -71
  372. package/lib/services/screen-size-analysis.service.d.ts +0 -32
  373. package/lib/services/settings.service.d.ts +0 -24
  374. package/lib/services/switch-build-furniture.service.d.ts +0 -21
  375. package/lib/services/switch-load-furniture.service.d.ts +0 -21
  376. package/lib/services/threedselector.service.d.ts +0 -17
  377. package/lib/services/utils.service.d.ts +0 -24
  378. package/lib/services/variation-cache.service.d.ts +0 -23
  379. package/lib/services/variation.service.d.ts +0 -26
  380. package/lib/services/view-mode.service.d.ts +0 -17
  381. package/lib/services/vr.service.d.ts +0 -42
  382. package/lib/services/xr.service.d.ts +0 -56
  383. package/lib/utils/asset.utils.d.ts +0 -19
  384. package/lib/utils/base-utils.d.ts +0 -4
  385. package/lib/utils/color.utils.d.ts +0 -8
  386. package/lib/utils/debug.utils.d.ts +0 -3
  387. package/lib/utils/device.utils.d.ts +0 -7
  388. package/lib/utils/file.utils.d.ts +0 -30
  389. package/lib/utils/image.utils.d.ts +0 -9
  390. package/lib/utils/json-parser.utils.d.ts +0 -9
  391. package/lib/utils/material.utils.d.ts +0 -34
  392. package/lib/utils/object.utils.d.ts +0 -32
  393. package/lib/utils/relative-position.utils.d.ts +0 -12
  394. package/lib/utils/rotation-helper.utils.d.ts +0 -6
  395. package/lib/utils/scene-3d.utils.d.ts +0 -8
  396. package/lib/utils/scene-utils.d.ts +0 -7
  397. package/lib/utils/text-utils.d.ts +0 -4
  398. package/lib/utils/threed.utils.d.ts +0 -20
  399. package/lib/utils/variation-utils.d.ts +0 -18
  400. package/public-api.d.ts +0 -60
  401. /package/lib/style/{template_variables.scss → _variables.scss} +0 -0
@@ -1,191 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BufferGeometry, Group, Line, Matrix4, PerspectiveCamera, Raycaster, Vector3 } from 'three';
3
- import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory';
4
- import * as THREE from 'three';
5
- import { isNill } from '@colijnit/configuratorapi/build/utils/function/is-nill.function';
6
- import { Reticle } from '../model/xr-reticle';
7
- import * as i0 from "@angular/core";
8
- export class VrService {
9
- constructor() { }
10
- init(scene, renderer) {
11
- if (isNill(this._scene)) {
12
- this._scene = scene;
13
- this._renderer = renderer;
14
- this._camera = new PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 10);
15
- this._raycaster = new Raycaster();
16
- this._reticle = new Reticle();
17
- this._tempMatrix = new Matrix4();
18
- this._meshes = [];
19
- this._user = new Group();
20
- this._user.name = 'user-group';
21
- this._user.add(this._camera);
22
- this._scene.add(this._user, this._reticle);
23
- this._createControllers();
24
- }
25
- this._initSession();
26
- }
27
- render() {
28
- this._handleIntersections();
29
- this._renderer.render(this._scene, this._camera);
30
- }
31
- endSession() {
32
- if (this._session) {
33
- this._session.end();
34
- }
35
- }
36
- _initSession() {
37
- if (!this._session) {
38
- const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };
39
- navigator.xr.requestSession('immersive-vr', sessionInit).then((session) => {
40
- this._onSessionStarted(session);
41
- this.startVRSession();
42
- });
43
- }
44
- }
45
- _onSessionStarted(session) {
46
- session.addEventListener('end', this._onSessionEnded.bind(this));
47
- this._renderer.xr.setSession(session);
48
- this._renderer.xr.enabled = true;
49
- this._session = session;
50
- }
51
- _onSessionEnded() {
52
- this._session = null;
53
- // TODO create a fix for this viewModeService stuf
54
- // this._viewModeService.viewMode = ViewMode.RoomPlan3D;
55
- this._renderer.xr.enabled = false;
56
- }
57
- startVRSession() {
58
- this._registerMeshes();
59
- }
60
- _createControllers() {
61
- this._controller0 = this._renderer.xr.getController(0);
62
- this._controller0.addEventListener('selectstart', (event) => this._onSelectStart(event));
63
- this._controller0.addEventListener('selectend', (event) => this._onSelectEnd(event));
64
- this._user.add(this._controller0);
65
- this._controller1 = this._renderer.xr.getController(1);
66
- this._controller1.addEventListener('selectstart', (event) => this._onSelectStart(event));
67
- this._controller1.addEventListener('selectend', (event) => this._onSelectEnd(event));
68
- this._user.add(this._controller1);
69
- const controllerModelFactory = new XRControllerModelFactory();
70
- const controllerGrip1 = this._renderer.xr.getControllerGrip(0);
71
- controllerGrip1.add(controllerModelFactory.createControllerModel(controllerGrip1));
72
- this._user.add(controllerGrip1);
73
- const controllerGrip2 = this._renderer.xr.getControllerGrip(1);
74
- controllerGrip2.add(controllerModelFactory.createControllerModel(controllerGrip2));
75
- this._user.add(controllerGrip2);
76
- const geometry = new BufferGeometry().setFromPoints([new Vector3(0, 0, 0), new Vector3(0, 0, -1)]);
77
- const line = new Line(geometry);
78
- line.name = 'line';
79
- line.scale.z = 10;
80
- // Only add line to controller0 when debugging with WebXR chrome extension
81
- // this._controller0.add( line.clone() );
82
- this._controller1.add(line.clone());
83
- }
84
- _onSelectStart(event) {
85
- if (this._isObjectFloor(this._currentClosestIntersection.object)) {
86
- this._user.position.set(this._currentClosestIntersection.point.x, 0, this._currentClosestIntersection.point.z);
87
- this._controller0.updateMatrix();
88
- }
89
- }
90
- _onSelectEnd(event) {
91
- // Function can be used to clean up after _onSelectStart
92
- }
93
- _getIntersections(controller, group) {
94
- this._tempMatrix.identity().extractRotation(controller.matrixWorld);
95
- this._raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld);
96
- this._raycaster.ray.direction.set(0, 0, -1).applyMatrix4(this._tempMatrix);
97
- return this._raycaster.intersectObjects(group);
98
- }
99
- _registerMeshes() {
100
- this._scene.traverse((mesh) => {
101
- this._meshes.push(mesh);
102
- });
103
- }
104
- _handleIntersections() {
105
- if (this._renderer.xr.getController(1).visible) {
106
- this._handleControllerIntersections(this._controller1);
107
- }
108
- else {
109
- this._handleControllerIntersections(this._controller0);
110
- }
111
- }
112
- _handleControllerIntersections(controller) {
113
- const objectIntersections = this._getIntersections(controller, this._meshes);
114
- if (objectIntersections.length > 0) {
115
- const nearestIntersection = this._getNearestIntersection(objectIntersections);
116
- if (nearestIntersection !== null) {
117
- this._currentClosestIntersection = nearestIntersection;
118
- const nearestObjectParent = this._getParentOfChild(nearestIntersection.object);
119
- if (this._isObjectFloor(nearestIntersection.object)) {
120
- this._handleFloorIntersection(controller, nearestIntersection);
121
- }
122
- else if (nearestObjectParent) {
123
- this._updateObjectSelection(nearestObjectParent);
124
- this._handleObjectIntersection(controller, nearestIntersection);
125
- }
126
- else {
127
- this._handleNoIntersections(controller);
128
- }
129
- }
130
- }
131
- }
132
- _getNearestIntersection(intersections) {
133
- let nearest = null;
134
- for (const intersection of intersections) {
135
- // TODO: need a better solution for first if-statement
136
- if (intersection.object.name && (intersection.object.name === 'home' || intersection.object.name === 'line')
137
- || (intersection.object.parent && intersection.object.parent instanceof Reticle)) {
138
- // DO NOTHING
139
- }
140
- else if (nearest === null || intersection.distance < nearest.distance) {
141
- nearest = intersection;
142
- }
143
- }
144
- return nearest;
145
- }
146
- _handleFloorIntersection(controller, intersection) {
147
- this._updateControllerRay(controller, intersection.distance);
148
- this._reticle.visible = true;
149
- this._reticle.position.copy(intersection.point);
150
- }
151
- _handleObjectIntersection(controller, intersection) {
152
- this._updateControllerRay(controller, intersection.distance);
153
- this._reticle.visible = false;
154
- }
155
- _handleNoIntersections(controller) {
156
- this._reticle.visible = false;
157
- this._updateControllerRay(controller, 0);
158
- }
159
- _updateControllerRay(controller, rayLenght) {
160
- const line = controller.getObjectByName('line');
161
- if (line) {
162
- line.scale.z = rayLenght;
163
- }
164
- }
165
- _isObjectFloor(object) {
166
- return object.name && object.name === 'floor-plane';
167
- }
168
- _getParentOfChild(object) {
169
- // TODO: return null if object is not selectable
170
- if (!object.parent || (object.parent instanceof THREE.Scene) || (object.parent instanceof Reticle)) {
171
- return object;
172
- }
173
- else {
174
- return this._getParentOfChild(object.parent);
175
- }
176
- }
177
- _updateObjectSelection(object) {
178
- if (!this._selectedObject) {
179
- this._selectedObject = object;
180
- }
181
- // Do something with newly selected item
182
- // ...
183
- }
184
- }
185
- VrService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VrService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
186
- VrService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VrService, providedIn: 'root' });
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VrService, decorators: [{
188
- type: Injectable,
189
- args: [{ providedIn: 'root' }]
190
- }], ctorParameters: function () { return []; } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL3ZyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUdQLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsT0FBTyxFQUVSLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDM0YsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBRXZGLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFJNUMsTUFBTSxPQUFPLFNBQVM7SUFvQnBCLGdCQUVHLENBQUM7SUFFRyxJQUFJLENBQUMsS0FBWSxFQUFFLFFBQXVCO1FBQy9DLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FB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SSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7U0FDL0I7UUFFRCx3Q0FBd0M7UUFDeEMsTUFBTTtJQUNSLENBQUM7O3VHQXBPVSxTQUFTOzJHQUFULFNBQVMsY0FERyxNQUFNOzRGQUNsQixTQUFTO2tCQURyQixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBHcm91cCwgSW50ZXJzZWN0aW9uLFxyXG4gIExpbmUsXHJcbiAgTWF0cml4NCxcclxuICBNZXNoLFxyXG4gIE9iamVjdDNELFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFJheWNhc3RlcixcclxuICBTY2VuZSxcclxuICBWZWN0b3IzLFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7WFJDb250cm9sbGVyTW9kZWxGYWN0b3J5fSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vd2VieHIvWFJDb250cm9sbGVyTW9kZWxGYWN0b3J5JztcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7UmV0aWNsZX0gZnJvbSAnLi4vbW9kZWwveHItcmV0aWNsZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBWclNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuXHJcbiAgcHJpdmF0ZSBfdGVtcE1hdHJpeDogTWF0cml4NDtcclxuICBwcml2YXRlIF9jdXJyZW50Q2xvc2VzdEludGVyc2VjdGlvbjogSW50ZXJzZWN0aW9uO1xyXG4gIHByaXZhdGUgX21lc2hlczogTWVzaFtdO1xyXG4gIHByaXZhdGUgX3JheWNhc3RlcjogUmF5Y2FzdGVyO1xyXG4gIHByaXZhdGUgX3JldGljbGU6IFJldGljbGU7XHJcblxyXG4gIHByaXZhdGUgX2NvbnRyb2xsZXIwO1xyXG4gIHByaXZhdGUgX2NvbnRyb2xsZXIxO1xyXG5cclxuICBwcml2YXRlIF9zZXNzaW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdXNlcjogR3JvdXA7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkT2JqZWN0OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBpbml0KHNjZW5lOiBTY2VuZSwgcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIpIHtcclxuICAgIGlmIChpc05pbGwodGhpcy5fc2NlbmUpKSB7XHJcbiAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICAgIHRoaXMuX2NhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSg1MCwgd2luZG93LmlubmVyV2lkdGggLyB3aW5kb3cuaW5uZXJIZWlnaHQsIDAuMSwgMTApO1xyXG4gICAgICB0aGlzLl9yYXljYXN0ZXIgPSBuZXcgUmF5Y2FzdGVyKCk7XHJcbiAgICAgIHRoaXMuX3JldGljbGUgPSBuZXcgUmV0aWNsZSgpO1xyXG4gICAgICB0aGlzLl90ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgdGhpcy5fbWVzaGVzID0gW107XHJcblxyXG4gICAgICB0aGlzLl91c2VyID0gbmV3IEdyb3VwKCk7XHJcbiAgICAgIHRoaXMuX3VzZXIubmFtZSA9ICd1c2VyLWdyb3VwJztcclxuICAgICAgdGhpcy5fdXNlci5hZGQodGhpcy5fY2FtZXJhKTtcclxuICAgICAgdGhpcy5fc2NlbmUuYWRkKHRoaXMuX3VzZXIsIHRoaXMuX3JldGljbGUpO1xyXG5cclxuICAgICAgdGhpcy5fY3JlYXRlQ29udHJvbGxlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pbml0U2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpIHtcclxuICAgIHRoaXMuX2hhbmRsZUludGVyc2VjdGlvbnMoKTtcclxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSwgdGhpcy5fY2FtZXJhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmRTZXNzaW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgdGhpcy5fc2Vzc2lvbi5lbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRTZXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGNvbnN0IHNlc3Npb25Jbml0ID0geyBvcHRpb25hbEZlYXR1cmVzOiBbICdsb2NhbC1mbG9vcicsICdib3VuZGVkLWZsb29yJyBdIH07XHJcbiAgICAgIChuYXZpZ2F0b3IgYXMgYW55KS54ci5yZXF1ZXN0U2Vzc2lvbignaW1tZXJzaXZlLXZyJywgc2Vzc2lvbkluaXQpLnRoZW4oKHNlc3Npb24pID0+IHtcclxuICAgICAgICB0aGlzLl9vblNlc3Npb25TdGFydGVkKHNlc3Npb24pO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWUlNlc3Npb24oKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNlc3Npb25TdGFydGVkKHNlc3Npb246IGFueSkge1xyXG4gICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdlbmQnLCB0aGlzLl9vblNlc3Npb25FbmRlZC5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMuX3JlbmRlcmVyLnhyLnNldFNlc3Npb24oIHNlc3Npb24gKTtcclxuICAgIHRoaXMuX3JlbmRlcmVyLnhyLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2Vzc2lvbiA9IHNlc3Npb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNlc3Npb25FbmRlZCgpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24gPSBudWxsO1xyXG4gICAgLy8gVE9ETyBjcmVhdGUgYSBmaXggZm9yIHRoaXMgdmlld01vZGVTZXJ2aWNlIHN0dWZcclxuICAgIC8vIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSA9IFZpZXdNb2RlLlJvb21QbGFuM0Q7XHJcbiAgICB0aGlzLl9yZW5kZXJlci54ci5lbmFibGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRWUlNlc3Npb24oKSB7XHJcbiAgICB0aGlzLl9yZWdpc3Rlck1lc2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlQ29udHJvbGxlcnMoKSB7XHJcbiAgICB0aGlzLl9jb250cm9sbGVyMCA9IHRoaXMuX3JlbmRlcmVyLnhyLmdldENvbnRyb2xsZXIoIDAgKTtcclxuICAgIHRoaXMuX2NvbnRyb2xsZXIwLmFkZEV2ZW50TGlzdGVuZXIoICdzZWxlY3RzdGFydCcsIChldmVudCkgPT4gdGhpcy5fb25TZWxlY3RTdGFydChldmVudCkgKTtcclxuICAgIHRoaXMuX2NvbnRyb2xsZXIwLmFkZEV2ZW50TGlzdGVuZXIoICdzZWxlY3RlbmQnLCAoZXZlbnQpID0+IHRoaXMuX29uU2VsZWN0RW5kKGV2ZW50KSApO1xyXG4gICAgdGhpcy5fdXNlci5hZGQoIHRoaXMuX2NvbnRyb2xsZXIwICk7XHJcblxyXG4gICAgdGhpcy5fY29udHJvbGxlcjEgPSB0aGlzLl9yZW5kZXJlci54ci5nZXRDb250cm9sbGVyKCAxICk7XHJcbiAgICB0aGlzLl9jb250cm9sbGVyMS5hZGRFdmVudExpc3RlbmVyKCAnc2VsZWN0c3RhcnQnLCAoZXZlbnQpID0+IHRoaXMuX29uU2VsZWN0U3RhcnQoZXZlbnQpICk7XHJcbiAgICB0aGlzLl9jb250cm9sbGVyMS5hZGRFdmVudExpc3RlbmVyKCAnc2VsZWN0ZW5kJywgKGV2ZW50KSA9PiB0aGlzLl9vblNlbGVjdEVuZChldmVudCkgKTtcclxuICAgIHRoaXMuX3VzZXIuYWRkKCB0aGlzLl9jb250cm9sbGVyMSApO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xsZXJNb2RlbEZhY3RvcnkgPSBuZXcgWFJDb250cm9sbGVyTW9kZWxGYWN0b3J5KCk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbGxlckdyaXAxID0gdGhpcy5fcmVuZGVyZXIueHIuZ2V0Q29udHJvbGxlckdyaXAoIDAgKTtcclxuICAgIGNvbnRyb2xsZXJHcmlwMS5hZGQoIGNvbnRyb2xsZXJNb2RlbEZhY3RvcnkuY3JlYXRlQ29udHJvbGxlck1vZGVsKCBjb250cm9sbGVyR3JpcDEgKSApO1xyXG4gICAgdGhpcy5fdXNlci5hZGQoIGNvbnRyb2xsZXJHcmlwMSApO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xsZXJHcmlwMiA9IHRoaXMuX3JlbmRlcmVyLnhyLmdldENvbnRyb2xsZXJHcmlwKCAxICk7XHJcbiAgICBjb250cm9sbGVyR3JpcDIuYWRkKCBjb250cm9sbGVyTW9kZWxGYWN0b3J5LmNyZWF0ZUNvbnRyb2xsZXJNb2RlbCggY29udHJvbGxlckdyaXAyICkgKTtcclxuICAgIHRoaXMuX3VzZXIuYWRkKCBjb250cm9sbGVyR3JpcDIgKTtcclxuXHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIFsgbmV3IFZlY3RvcjMoIDAsIDAsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDAsIC0gMSApIF0gKTtcclxuXHJcbiAgICBjb25zdCBsaW5lID0gbmV3IExpbmUoIGdlb21ldHJ5ICk7XHJcbiAgICBsaW5lLm5hbWUgPSAnbGluZSc7XHJcbiAgICBsaW5lLnNjYWxlLnogPSAxMDtcclxuXHJcbiAgICAvLyBPbmx5IGFkZCBsaW5lIHRvIGNvbnRyb2xsZXIwIHdoZW4gZGVidWdnaW5nIHdpdGggV2ViWFIgY2hyb21lIGV4dGVuc2lvblxyXG4gICAgLy8gdGhpcy5fY29udHJvbGxlcjAuYWRkKCBsaW5lLmNsb25lKCkgKTtcclxuICAgIHRoaXMuX2NvbnRyb2xsZXIxLmFkZCggbGluZS5jbG9uZSgpICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNlbGVjdFN0YXJ0KCBldmVudCApIHtcclxuICAgIGlmICh0aGlzLl9pc09iamVjdEZsb29yKHRoaXMuX2N1cnJlbnRDbG9zZXN0SW50ZXJzZWN0aW9uLm9iamVjdCkpIHtcclxuICAgICAgdGhpcy5fdXNlci5wb3NpdGlvbi5zZXQodGhpcy5fY3VycmVudENsb3Nlc3RJbnRlcnNlY3Rpb24ucG9pbnQueCwgMCwgdGhpcy5fY3VycmVudENsb3Nlc3RJbnRlcnNlY3Rpb24ucG9pbnQueik7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xsZXIwLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TZWxlY3RFbmQoIGV2ZW50ICkge1xyXG4gICAgLy8gRnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgX29uU2VsZWN0U3RhcnRcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRJbnRlcnNlY3Rpb25zKCBjb250cm9sbGVyOiBhbnksIGdyb3VwOiBPYmplY3QzRFtdIHwgTWVzaFtdICkge1xyXG4gICAgdGhpcy5fdGVtcE1hdHJpeC5pZGVudGl0eSgpLmV4dHJhY3RSb3RhdGlvbiggY29udHJvbGxlci5tYXRyaXhXb3JsZCApO1xyXG4gICAgdGhpcy5fcmF5Y2FzdGVyLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjb250cm9sbGVyLm1hdHJpeFdvcmxkICk7XHJcbiAgICB0aGlzLl9yYXljYXN0ZXIucmF5LmRpcmVjdGlvbi5zZXQoIDAsIDAsIC0gMSApLmFwcGx5TWF0cml4NCggdGhpcy5fdGVtcE1hdHJpeCApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyggZ3JvdXAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZ2lzdGVyTWVzaGVzKCkge1xyXG4gICAgdGhpcy5fc2NlbmUudHJhdmVyc2UoKG1lc2g6IE1lc2gpID0+IHtcclxuICAgICAgdGhpcy5fbWVzaGVzLnB1c2gobWVzaCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUludGVyc2VjdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5fcmVuZGVyZXIueHIuZ2V0Q29udHJvbGxlcigxKS52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUNvbnRyb2xsZXJJbnRlcnNlY3Rpb25zKCB0aGlzLl9jb250cm9sbGVyMSApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlQ29udHJvbGxlckludGVyc2VjdGlvbnModGhpcy5fY29udHJvbGxlcjApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ29udHJvbGxlckludGVyc2VjdGlvbnMoY29udHJvbGxlcjogYW55KSB7XHJcbiAgICBjb25zdCBvYmplY3RJbnRlcnNlY3Rpb25zID0gdGhpcy5fZ2V0SW50ZXJzZWN0aW9ucyhjb250cm9sbGVyLCB0aGlzLl9tZXNoZXMpO1xyXG5cclxuICAgIGlmIChvYmplY3RJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbmVhcmVzdEludGVyc2VjdGlvbiA9IHRoaXMuX2dldE5lYXJlc3RJbnRlcnNlY3Rpb24ob2JqZWN0SW50ZXJzZWN0aW9ucyk7XHJcbiAgICAgIGlmIChuZWFyZXN0SW50ZXJzZWN0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudENsb3Nlc3RJbnRlcnNlY3Rpb24gPSBuZWFyZXN0SW50ZXJzZWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IG5lYXJlc3RPYmplY3RQYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRPZkNoaWxkKG5lYXJlc3RJbnRlcnNlY3Rpb24ub2JqZWN0KTtcclxuICAgICAgICBpZiAodGhpcy5faXNPYmplY3RGbG9vcihuZWFyZXN0SW50ZXJzZWN0aW9uLm9iamVjdCkpIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUZsb29ySW50ZXJzZWN0aW9uKGNvbnRyb2xsZXIsIG5lYXJlc3RJbnRlcnNlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE9iamVjdFBhcmVudCkge1xyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlT2JqZWN0U2VsZWN0aW9uKG5lYXJlc3RPYmplY3RQYXJlbnQpO1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0SW50ZXJzZWN0aW9uKGNvbnRyb2xsZXIsIG5lYXJlc3RJbnRlcnNlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVOb0ludGVyc2VjdGlvbnMoY29udHJvbGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXROZWFyZXN0SW50ZXJzZWN0aW9uKGludGVyc2VjdGlvbnM6IEludGVyc2VjdGlvbltdKTogSW50ZXJzZWN0aW9uIHtcclxuICAgIGxldCBuZWFyZXN0ID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgaW50ZXJzZWN0aW9uIG9mIGludGVyc2VjdGlvbnMpIHtcclxuICAgICAgLy8gVE9ETzogbmVlZCBhIGJldHRlciBzb2x1dGlvbiBmb3IgZmlyc3QgaWYtc3RhdGVtZW50XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb24ub2JqZWN0Lm5hbWUgJiYgKGludGVyc2VjdGlvbi5vYmplY3QubmFtZSA9PT0gJ2hvbWUnIHx8IGludGVyc2VjdGlvbi5vYmplY3QubmFtZSA9PT0gJ2xpbmUnKVxyXG4gICAgICAgIHx8IChpbnRlcnNlY3Rpb24ub2JqZWN0LnBhcmVudCAmJiBpbnRlcnNlY3Rpb24ub2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIFJldGljbGUpKSB7XHJcbiAgICAgICAgLy8gRE8gTk9USElOR1xyXG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3QgPT09IG51bGwgfHwgaW50ZXJzZWN0aW9uLmRpc3RhbmNlIDwgbmVhcmVzdC5kaXN0YW5jZSkge1xyXG4gICAgICAgIG5lYXJlc3QgPSBpbnRlcnNlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmVhcmVzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUZsb29ySW50ZXJzZWN0aW9uKGNvbnRyb2xsZXI6IGFueSwgaW50ZXJzZWN0aW9uOiBJbnRlcnNlY3Rpb24pIHtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xsZXJSYXkoY29udHJvbGxlciwgaW50ZXJzZWN0aW9uLmRpc3RhbmNlKTtcclxuICAgIHRoaXMuX3JldGljbGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLl9yZXRpY2xlLnBvc2l0aW9uLmNvcHkoaW50ZXJzZWN0aW9uLnBvaW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZU9iamVjdEludGVyc2VjdGlvbihjb250cm9sbGVyOiBhbnksIGludGVyc2VjdGlvbjogSW50ZXJzZWN0aW9uKSB7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sbGVyUmF5KGNvbnRyb2xsZXIsIGludGVyc2VjdGlvbi5kaXN0YW5jZSk7XHJcbiAgICB0aGlzLl9yZXRpY2xlLnZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZU5vSW50ZXJzZWN0aW9ucyhjb250cm9sbGVyOiBhbnkpIHtcclxuICAgIHRoaXMuX3JldGljbGUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbGxlclJheShjb250cm9sbGVyLCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUNvbnRyb2xsZXJSYXkoY29udHJvbGxlcjogYW55LCByYXlMZW5naHQ6IG51bWJlcikge1xyXG4gICAgY29uc3QgbGluZSA9IGNvbnRyb2xsZXIuZ2V0T2JqZWN0QnlOYW1lKCAnbGluZScgKTtcclxuICAgIGlmIChsaW5lKSB7XHJcbiAgICAgIGxpbmUuc2NhbGUueiA9IHJheUxlbmdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzT2JqZWN0Rmxvb3Iob2JqZWN0OiBPYmplY3QzRCkge1xyXG4gICAgcmV0dXJuIG9iamVjdC5uYW1lICYmIG9iamVjdC5uYW1lID09PSAnZmxvb3ItcGxhbmUnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UGFyZW50T2ZDaGlsZChvYmplY3Q6IGFueSk6IGFueSB7XHJcbiAgICAvLyBUT0RPOiByZXR1cm4gbnVsbCBpZiBvYmplY3QgaXMgbm90IHNlbGVjdGFibGVcclxuICAgIGlmICghb2JqZWN0LnBhcmVudCB8fCAob2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIFRIUkVFLlNjZW5lKSB8fCAob2JqZWN0LnBhcmVudCBpbnN0YW5jZW9mIFJldGljbGUpKSB7XHJcbiAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZ2V0UGFyZW50T2ZDaGlsZChvYmplY3QucGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU9iamVjdFNlbGVjdGlvbihvYmplY3Q6IE9iamVjdDNEKSB7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIG5ld2x5IHNlbGVjdGVkIGl0ZW1cclxuICAgIC8vIC4uLlxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,294 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- // import WebXRPolyfill from 'webxr-polyfill';
3
- import { Injectable } from '@angular/core';
4
- import * as THREE from 'three';
5
- import { CylinderGeometry, Mesh, MeshStandardMaterial, Object3D, Vector3 } from 'three';
6
- import { BehaviorSubject, Subject } from 'rxjs';
7
- import { XrMode } from '../enum/xr-mode.enum';
8
- import { isNill } from '@colijnit/configuratorapi/build/utils/function/is-nill.function';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./settings.service";
11
- import * as i2 from "./debug.service";
12
- import * as i3 from "./message-board.service";
13
- export class XrService {
14
- constructor(_settingsService, _debugService, _messageBoard) {
15
- this._settingsService = _settingsService;
16
- this._debugService = _debugService;
17
- this._messageBoard = _messageBoard;
18
- this.axes = [0, 0];
19
- this.touchpadIsPressed = false;
20
- this.triggerIsPressed = false;
21
- this.angularVelocity = new Vector3();
22
- this.vrSupported = false;
23
- this.arSupported = false;
24
- this.sessionStarted = new Subject();
25
- this.sessionEnded = new Subject();
26
- this.userSelectInAr = new BehaviorSubject(undefined);
27
- this._subs = [];
28
- this._mode = XrMode.VrMode;
29
- }
30
- ngOnDestroy() {
31
- this._subs.forEach(s => s.unsubscribe());
32
- }
33
- init(renderer, scene, camera) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- if (!this._settingsService.settings.options.vrEnabled && !this._settingsService.settings.options.arEnabled) {
36
- return;
37
- }
38
- this.renderer = renderer;
39
- this.scene = scene;
40
- this.scene.onBeforeRender =
41
- (brRenderer, brScene, brCamera, brTarget) => this._doBeforeRenderScene(brRenderer, brScene, brCamera, brTarget);
42
- this.camera = camera;
43
- yield this._messageBoard.init(this.scene);
44
- // this._createController();
45
- this._logMessage('Starting XR');
46
- // const polyfill = new WebXRPolyfill();
47
- if (navigator.xr && !isNill(navigator.xr) && navigator.xr.isSessionSupported) {
48
- this._logMessage('Checking support');
49
- if (this._settingsService.settings.options.vrEnabled) {
50
- navigator.xr.isSessionSupported('immersive-vr')
51
- .then((supported) => {
52
- if (supported) {
53
- this._logMessage('Session for VR supported!');
54
- this.vrSupported = true;
55
- }
56
- else {
57
- this._logMessage('VR not supported!');
58
- this.vrSupported = false;
59
- }
60
- })
61
- .catch((e) => {
62
- this._logMessage(e.message);
63
- });
64
- }
65
- if (this._settingsService.settings.options.arEnabled) {
66
- navigator.xr.isSessionSupported('immersive-ar')
67
- .then((supported) => {
68
- if (supported) {
69
- this._logMessage('Session for AR supported!');
70
- this.arSupported = true;
71
- }
72
- else {
73
- this._logMessage('AR not supported!');
74
- this.arSupported = false;
75
- this._settingsService.settings.options.showArButton = false;
76
- }
77
- })
78
- .catch((e) => {
79
- this._logMessage(e.message);
80
- });
81
- }
82
- }
83
- else {
84
- if ('getVRDisplays' in navigator) {
85
- this._logMessage('getVRDisplays');
86
- const displays = yield navigator.getVRDisplays();
87
- if (displays.length > 0) {
88
- this._vrDisplay = displays[0];
89
- this._logMessage(this._vrDisplay.displayName);
90
- this.vrSupported = true;
91
- window.addEventListener('vrdisplaypresentchange', () => {
92
- if (!this._vrDisplay.isPresenting) {
93
- this.sessionEnded.next();
94
- }
95
- });
96
- }
97
- else {
98
- this._logMessage('No VR display found!');
99
- this.vrSupported = false;
100
- }
101
- }
102
- }
103
- });
104
- }
105
- startAr() {
106
- this._mode = XrMode.ArMode;
107
- this.renderer.xr.enabled = true;
108
- this.renderer.setClearColor(0x000000, 0);
109
- this.renderer.autoClear = false;
110
- if (isNill(this.session)) {
111
- const features = { requiredFeatures: ['local', 'hit-test'] };
112
- navigator.xr.requestSession('immersive-ar', features).then((session) => {
113
- this.renderer.xr.setReferenceSpaceType('local');
114
- session.updateWorldTrackingState({ planeDetectionState: { enabled: true } });
115
- session.requestReferenceSpace('viewer').then((refSpace) => {
116
- this.viewerSpace = refSpace;
117
- session.requestHitTestSource({ space: this.viewerSpace }).then((hitTestSource) => {
118
- this.hitTestSource = hitTestSource;
119
- });
120
- });
121
- session.requestReferenceSpace('local').then((refSpace) => {
122
- this.refSpace = refSpace;
123
- this._onSessionStarted(session);
124
- });
125
- });
126
- }
127
- else {
128
- this.session.end();
129
- }
130
- }
131
- stopAr() {
132
- if (!isNill(this.session)) {
133
- this.session.end();
134
- }
135
- if (this.renderer) {
136
- this.renderer.xr.enabled = false;
137
- this.renderer.setClearColor(0xfafafa);
138
- this.renderer.autoClear = true;
139
- }
140
- }
141
- startVr() {
142
- if (this.vrSupported) {
143
- this._mode = XrMode.VrMode;
144
- this.renderer.xr.enabled = true;
145
- if (isNill(this.session)) {
146
- // Setting reference spaceType
147
- this.renderer.xr.setReferenceSpaceType('local-floor');
148
- // Initializing session
149
- const sessionInit = { optionalFeatures: 'local-floor' };
150
- navigator.xr.requestSession('immersive-vr', sessionInit).then((session) => {
151
- // Start session
152
- this._onSessionStarted(session);
153
- });
154
- }
155
- else {
156
- this.session.end();
157
- }
158
- }
159
- }
160
- stopVr() {
161
- if (!isNill(this.session)) {
162
- this.session.end();
163
- }
164
- if (this.renderer) {
165
- this.renderer.xr.enabled = false;
166
- }
167
- if (this.camera && this._cameraHeight) {
168
- this.camera.position.y = this._cameraHeight;
169
- }
170
- }
171
- update() {
172
- // this._updateController();
173
- }
174
- _doBeforeRenderScene(renderer, scene, camera, target) {
175
- if (this.renderer.xr.enabled && this._mode === XrMode.VrMode) {
176
- }
177
- }
178
- _logMessage(message) {
179
- this._debugService.addMessage(message);
180
- this._messageBoard.addMessage(message);
181
- }
182
- _onSessionStarted(session) {
183
- this.session = session;
184
- this.session.addEventListener('end', () => this._onSessionEnded());
185
- this.session.addEventListener('select', () => this._onUserSelect());
186
- this.renderer.xr.setSession(this.session);
187
- this.sessionStarted.next(this._mode);
188
- }
189
- _onUserSelect() {
190
- this.userSelectInAr.next(true);
191
- }
192
- _onSessionEnded() {
193
- if (!isNill(this.session)) {
194
- this.session.removeEventListener('select', () => this._onUserSelect());
195
- this.session.removeEventListener('end', () => this._onSessionEnded());
196
- this.session = null;
197
- this.sessionEnded.next();
198
- }
199
- }
200
- _updateController() {
201
- if (!this._vrController) {
202
- return;
203
- }
204
- this.gamepad = this._findGamepad();
205
- if (this.gamepad !== undefined && this.gamepad.pose !== undefined) {
206
- const pose = this.gamepad.pose;
207
- if (pose === null) {
208
- return; // no user action yet
209
- }
210
- // orientation
211
- if (pose.orientation !== null) {
212
- this._vrController.quaternion.fromArray(pose.orientation);
213
- }
214
- this._vrController.updateMatrix();
215
- this._vrController.visible = true;
216
- try {
217
- const direction = new Vector3().applyEuler(this._vrController.rotation);
218
- const raycaster = new THREE.Raycaster(this._vrController.position, direction);
219
- const intersections = raycaster.intersectObjects(this.scene.children, true);
220
- if (intersections.length) {
221
- // this.controller.setMousePosition(Scene3DUtil.Convert3DPointToScreenPoint(
222
- // intersections[0].point,
223
- // this.camera,
224
- // this.controller.getElement().clientWidth,
225
- // this.controller.getElement().clientHeight));
226
- // this.controller.doMouseMove();
227
- }
228
- }
229
- catch (e) {
230
- this._logMessage(e.message);
231
- }
232
- // angular velocity
233
- if (pose.angularVelocity !== null && !this.angularVelocity.equals(pose.angularVelocity)) {
234
- this.angularVelocity.fromArray(pose.angularVelocity);
235
- // this.dispatchEvent({type: 'angularvelocitychanged', angularVelocity: this.angularVelocity});
236
- }
237
- // axes (touchpad)
238
- if (this.axes[0] !== this.gamepad.axes[0] || this.axes[1] !== this.gamepad.axes[1]) {
239
- this.axes[0] = this.gamepad.axes[0];
240
- this.axes[1] = this.gamepad.axes[1];
241
- // this._logMessage('axes moved');
242
- // this.dispatchEvent({type: 'axischanged', axes: this.axes});
243
- }
244
- // button (touchpad)
245
- if (this.touchpadIsPressed !== this.gamepad.buttons[0].pressed) {
246
- this.touchpadIsPressed = this.gamepad.buttons[0].pressed;
247
- // this._logMessage('touchpad pressed');
248
- // this.dispatchEvent({type: this.touchpadIsPressed ? 'touchpaddown' : 'touchpadup', axes: this.axes});
249
- }
250
- // trigger
251
- if (this.triggerIsPressed !== this.gamepad.buttons[1].pressed) {
252
- this.triggerIsPressed = this.gamepad.buttons[1].pressed;
253
- // this._logMessage('trigger pressed');
254
- // this.dispatchEvent({type: this.triggerIsPressed ? 'triggerdown' : 'triggerup'});
255
- }
256
- // app button not available, reserved for use by the browser
257
- }
258
- else {
259
- this._vrController.visible = false;
260
- }
261
- }
262
- _findGamepad() {
263
- const gamepads = navigator.getGamepads && navigator.getGamepads();
264
- for (let i = 0; i < 4; i++) {
265
- const gamepad = gamepads[i];
266
- if (gamepad && (gamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller')) {
267
- return gamepad;
268
- }
269
- }
270
- }
271
- _createController() {
272
- this._vrController = new Object3D();
273
- this._createMeshes();
274
- this.scene.add(this._vrController);
275
- }
276
- _createMeshes() {
277
- const meshColorOff = 0xffffff, meshColorOn = 0xF4C20D, controllerMaterial = new MeshStandardMaterial({ color: meshColorOff }), controllerMesh = new Mesh(new CylinderGeometry(0.001, 0.003, 0.5, 16), controllerMaterial);
278
- // handleMesh = new Mesh(new BoxGeometry(30, 10, 30), controllerMaterial);
279
- // controllerMesh.add(new AxesHelper(50));
280
- controllerMesh.geometry.translate(0, 0.25, 0);
281
- controllerMaterial.flatShading = true;
282
- controllerMesh.rotation.x = -Math.PI / 2;
283
- // handleMesh.position.y = -5;
284
- // controllerMesh.add(handleMesh);
285
- this._vrController.add(controllerMesh);
286
- }
287
- }
288
- XrService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: XrService, deps: [{ token: i1.SettingsService }, { token: i2.DebugService }, { token: i3.MessageBoardService }], target: i0.ɵɵFactoryTarget.Injectable });
289
- XrService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: XrService, providedIn: 'root' });
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: XrService, decorators: [{
291
- type: Injectable,
292
- args: [{ providedIn: 'root' }]
293
- }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i2.DebugService }, { type: i3.MessageBoardService }]; } });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL3hyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhDQUE4QztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFTLE9BQU8sRUFBZ0IsTUFBTSxPQUFPLENBQUM7QUFDcEgsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTVDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7QUFLdkYsTUFBTSxPQUFPLFNBQVM7SUE4QnBCLFlBQ1UsZ0JBQWlDLEVBQ2pDLGFBQTJCLEVBQzNCLGFBQWtDO1FBRmxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBOUJyQyxTQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFZCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQU1oQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixtQkFBYyxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhELGlCQUFZLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMs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RUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekMsOEJBQThCO1FBQzlCLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6QyxDQUFDOzt1R0F0VFUsU0FBUzsyR0FBVCxTQUFTLGNBREcsTUFBTTs0RkFDbEIsU0FBUztrQkFEckIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgV2ViWFJQb2x5ZmlsbCBmcm9tICd3ZWJ4ci1wb2x5ZmlsbCc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0NhbWVyYSwgQ3lsaW5kZXJHZW9tZXRyeSwgTWVzaCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIE9iamVjdDNELCBTY2VuZSwgVmVjdG9yMywgV2ViR0xSZW5kZXJlcn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtYck1vZGV9IGZyb20gJy4uL2VudW0veHItbW9kZS5lbnVtJztcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb24nO1xyXG5pbXBvcnQge0RlYnVnU2VydmljZX0gZnJvbSAnLi9kZWJ1Zy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQm9hcmRTZXJ2aWNlfSBmcm9tICcuL21lc3NhZ2UtYm9hcmQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFhyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBnYW1lcGFkO1xyXG4gIHB1YmxpYyBheGVzID0gWzAsIDBdO1xyXG5cclxuICBwdWJsaWMgdG91Y2hwYWRJc1ByZXNzZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgdHJpZ2dlcklzUHJlc3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhbmd1bGFyVmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xyXG4gIHB1YmxpYyByZW5kZXJlcjogV2ViR0xSZW5kZXJlcjtcclxuXHJcbiAgcHVibGljIHNjZW5lOiBTY2VuZTtcclxuICBwdWJsaWMgY2FtZXJhOiBDYW1lcmE7XHJcbiAgcHVibGljIGNvbnRyb2xsZXI6IGFueTtcclxuICBwdWJsaWMgdnJTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYXJTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2Vzc2lvblN0YXJ0ZWQ6IFN1YmplY3Q8WHJNb2RlPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBzZXNzaW9uRW5kZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyB1c2VyU2VsZWN0SW5BcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyByZWZTcGFjZTogYW55O1xyXG4gIHB1YmxpYyB2aWV3ZXJTcGFjZTogYW55O1xyXG4gIHB1YmxpYyBzZXNzaW9uOiBhbnk7XHJcbiAgcHVibGljIGhpdFRlc3RTb3VyY2U6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfdnJEaXNwbGF5OiBhbnk7XHJcbiAgcHJpdmF0ZSBfdnJDb250cm9sbGVyOiBPYmplY3QzRDtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2NhbWVyYUhlaWdodDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX21vZGU6IFhyTW9kZSA9IFhyTW9kZS5Wck1vZGU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kZWJ1Z1NlcnZpY2U6IERlYnVnU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCb2FyZDogTWVzc2FnZUJvYXJkU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsIHNjZW5lOiBTY2VuZSwgY2FtZXJhOiBDYW1lcmEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudnJFbmFibGVkICYmICF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hckVuYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgdGhpcy5zY2VuZS5vbkJlZm9yZVJlbmRlciA9XHJcbiAgICAgIChiclJlbmRlcmVyLCBiclNjZW5lLCBickNhbWVyYSwgYnJUYXJnZXQpID0+IHRoaXMuX2RvQmVmb3JlUmVuZGVyU2NlbmUoYnJSZW5kZXJlciwgYnJTY2VuZSwgYnJDYW1lcmEsIGJyVGFyZ2V0KTtcclxuICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG4gICAgYXdhaXQgdGhpcy5fbWVzc2FnZUJvYXJkLmluaXQodGhpcy5zY2VuZSk7XHJcbiAgICAvLyB0aGlzLl9jcmVhdGVDb250cm9sbGVyKCk7XHJcbiAgICB0aGlzLl9sb2dNZXNzYWdlKCdTdGFydGluZyBYUicpO1xyXG4gICAgLy8gY29uc3QgcG9seWZpbGwgPSBuZXcgV2ViWFJQb2x5ZmlsbCgpO1xyXG5cclxuICAgIGlmICgobmF2aWdhdG9yIGFzIGFueSkueHIgJiYgIWlzTmlsbCgobmF2aWdhdG9yIGFzIGFueSkueHIpICYmIChuYXZpZ2F0b3IgYXMgYW55KS54ci5pc1Nlc3Npb25TdXBwb3J0ZWQpIHtcclxuICAgICAgdGhpcy5fbG9nTWVzc2FnZSgnQ2hlY2tpbmcgc3VwcG9ydCcpO1xyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudnJFbmFibGVkKSB7XHJcbiAgICAgICAgKG5hdmlnYXRvciBhcyBhbnkpLnhyLmlzU2Vzc2lvblN1cHBvcnRlZCgnaW1tZXJzaXZlLXZyJylcclxuICAgICAgICAgIC50aGVuKChzdXBwb3J0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ01lc3NhZ2UoJ1Nlc3Npb24gZm9yIFZSIHN1cHBvcnRlZCEnKTtcclxuICAgICAgICAgICAgICB0aGlzLnZyU3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl9sb2dNZXNzYWdlKCdWUiBub3Qgc3VwcG9ydGVkIScpO1xyXG4gICAgICAgICAgICAgIHRoaXMudnJTdXBwb3J0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dNZXNzYWdlKGUubWVzc2FnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuYXJFbmFibGVkKSB7XHJcbiAgICAgICAgKG5hdmlnYXRvciBhcyBhbnkpLnhyLmlzU2Vzc2lvblN1cHBvcnRlZCgnaW1tZXJzaXZlLWFyJylcclxuICAgICAgICAgIC50aGVuKChzdXBwb3J0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ01lc3NhZ2UoJ1Nlc3Npb24gZm9yIEFSIHN1cHBvcnRlZCEnKTtcclxuICAgICAgICAgICAgICB0aGlzLmFyU3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl9sb2dNZXNzYWdlKCdBUiBub3Qgc3VwcG9ydGVkIScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXJTdXBwb3J0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93QXJCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dNZXNzYWdlKGUubWVzc2FnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCdnZXRWUkRpc3BsYXlzJyBpbiBuYXZpZ2F0b3IpIHtcclxuICAgICAgICB0aGlzLl9sb2dNZXNzYWdlKCdnZXRWUkRpc3BsYXlzJyk7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheXMgPSBhd2FpdCBuYXZpZ2F0b3IuZ2V0VlJEaXNwbGF5cygpO1xyXG4gICAgICAgIGlmIChkaXNwbGF5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLl92ckRpc3BsYXkgPSBkaXNwbGF5c1swXTtcclxuICAgICAgICAgIHRoaXMuX2xvZ01lc3NhZ2UodGhpcy5fdnJEaXNwbGF5LmRpc3BsYXlOYW1lKTtcclxuICAgICAgICAgIHRoaXMudnJTdXBwb3J0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3ZyZGlzcGxheXByZXNlbnRjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdnJEaXNwbGF5LmlzUHJlc2VudGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkVuZGVkLm5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2xvZ01lc3NhZ2UoJ05vIFZSIGRpc3BsYXkgZm91bmQhJyk7XHJcbiAgICAgICAgICB0aGlzLnZyU3VwcG9ydGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRBcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGUgPSBYck1vZGUuQXJNb2RlO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIueHIuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoaXNOaWxsKHRoaXMuc2Vzc2lvbikpIHtcclxuICAgICAgY29uc3QgZmVhdHVyZXMgPSB7cmVxdWlyZWRGZWF0dXJlczogWydsb2NhbCcsICdoaXQtdGVzdCddfTtcclxuICAgICAgKG5hdmlnYXRvciBhcyBhbnkpLnhyLnJlcXVlc3RTZXNzaW9uKCdpbW1lcnNpdmUtYXInLCBmZWF0dXJlcykudGhlbigoc2Vzc2lvbikgPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIueHIuc2V0UmVmZXJlbmNlU3BhY2VUeXBlKCdsb2NhbCcpO1xyXG4gICAgICAgIHNlc3Npb24udXBkYXRlV29ybGRUcmFja2luZ1N0YXRlKHtwbGFuZURldGVjdGlvblN0YXRlOiB7ZW5hYmxlZDogdHJ1ZX19KTtcclxuXHJcbiAgICAgICAgc2Vzc2lvbi5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoJ3ZpZXdlcicpLnRoZW4oKHJlZlNwYWNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdlclNwYWNlID0gcmVmU3BhY2U7XHJcbiAgICAgICAgICBzZXNzaW9uLnJlcXVlc3RIaXRUZXN0U291cmNlKHtzcGFjZTogdGhpcy52aWV3ZXJTcGFjZX0pLnRoZW4oKGhpdFRlc3RTb3VyY2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaXRUZXN0U291cmNlID0gaGl0VGVzdFNvdXJjZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXNzaW9uLnJlcXVlc3RSZWZlcmVuY2VTcGFjZSgnbG9jYWwnKS50aGVuKChyZWZTcGFjZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZWZTcGFjZSA9IHJlZlNwYWNlO1xyXG4gICAgICAgICAgdGhpcy5fb25TZXNzaW9uU3RhcnRlZChzZXNzaW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlc3Npb24uZW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RvcEFyKCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc05pbGwodGhpcy5zZXNzaW9uKSkge1xyXG4gICAgICB0aGlzLnNlc3Npb24uZW5kKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnhyLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4ZmFmYWZhKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hdXRvQ2xlYXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0VnIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52clN1cHBvcnRlZCkge1xyXG4gICAgICB0aGlzLl9tb2RlID0gWHJNb2RlLlZyTW9kZTtcclxuICAgICAgdGhpcy5yZW5kZXJlci54ci5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChpc05pbGwodGhpcy5zZXNzaW9uKSkge1xyXG4gICAgICAgIC8vIFNldHRpbmcgcmVmZXJlbmNlIHNwYWNlVHlwZVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIueHIuc2V0UmVmZXJlbmNlU3BhY2VUeXBlKCdsb2NhbC1mbG9vcicpO1xyXG5cclxuICAgICAgICAvLyBJbml0aWFsaXppbmcgc2Vzc2lvblxyXG4gICAgICAgIGNvbnN0IHNlc3Npb25Jbml0ID0ge29wdGlvbmFsRmVhdHVyZXM6ICdsb2NhbC1mbG9vcid9O1xyXG4gICAgICAgIChuYXZpZ2F0b3IgYXMgYW55KS54ci5yZXF1ZXN0U2Vzc2lvbignaW1tZXJzaXZlLXZyJywgc2Vzc2lvbkluaXQpLnRoZW4oKHNlc3Npb24pID0+IHtcclxuICAgICAgICAgIC8vIFN0YXJ0IHNlc3Npb25cclxuICAgICAgICAgIHRoaXMuX29uU2Vzc2lvblN0YXJ0ZWQoc2Vzc2lvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLmVuZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RvcFZyKCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc05pbGwodGhpcy5zZXNzaW9uKSkge1xyXG4gICAgICB0aGlzLnNlc3Npb24uZW5kKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnhyLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNhbWVyYSAmJiB0aGlzLl9jYW1lcmFIZWlnaHQpIHtcclxuICAgICAgdGhpcy5jYW1lcmEucG9zaXRpb24ueSA9IHRoaXMuX2NhbWVyYUhlaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLl91cGRhdGVDb250cm9sbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kb0JlZm9yZVJlbmRlclNjZW5lKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogQ2FtZXJhLCB0YXJnZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVuZGVyZXIueHIuZW5hYmxlZCAmJiB0aGlzLl9tb2RlID09PSBYck1vZGUuVnJNb2RlKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2dNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVidWdTZXJ2aWNlLmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQm9hcmQuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uU2Vzc2lvblN0YXJ0ZWQoc2Vzc2lvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdlbmQnLCAoKSA9PiB0aGlzLl9vblNlc3Npb25FbmRlZCgpKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3QnLCAoKSA9PiB0aGlzLl9vblVzZXJTZWxlY3QoKSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnhyLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcclxuICAgIHRoaXMuc2Vzc2lvblN0YXJ0ZWQubmV4dCh0aGlzLl9tb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uVXNlclNlbGVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlclNlbGVjdEluQXIubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uU2Vzc2lvbkVuZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc05pbGwodGhpcy5zZXNzaW9uKSkge1xyXG4gICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2VsZWN0JywgKCkgPT4gdGhpcy5fb25Vc2VyU2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kJywgKCkgPT4gdGhpcy5fb25TZXNzaW9uRW5kZWQoKSk7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkVuZGVkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUNvbnRyb2xsZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3ZyQ29udHJvbGxlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nYW1lcGFkID0gdGhpcy5fZmluZEdhbWVwYWQoKTtcclxuICAgIGlmICh0aGlzLmdhbWVwYWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmdhbWVwYWQucG9zZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHBvc2UgPSB0aGlzLmdhbWVwYWQucG9zZTtcclxuICAgICAgaWYgKHBvc2UgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm47IC8vIG5vIHVzZXIgYWN0aW9uIHlldFxyXG4gICAgICB9XHJcbiAgICAgIC8vICBvcmllbnRhdGlvblxyXG4gICAgICBpZiAocG9zZS5vcmllbnRhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3ZyQ29udHJvbGxlci5xdWF0ZXJuaW9uLmZyb21BcnJheShwb3NlLm9yaWVudGF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl92ckNvbnRyb2xsZXIudXBkYXRlTWF0cml4KCk7XHJcbiAgICAgIHRoaXMuX3ZyQ29udHJvbGxlci52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpLmFwcGx5RXVsZXIodGhpcy5fdnJDb250cm9sbGVyLnJvdGF0aW9uKTtcclxuICAgICAgICBjb25zdCByYXljYXN0ZXIgPSBuZXcgVEhSRUUuUmF5Y2FzdGVyKHRoaXMuX3ZyQ29udHJvbGxlci5wb3NpdGlvbiwgZGlyZWN0aW9uKTtcclxuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gcmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdHModGhpcy5zY2VuZS5jaGlsZHJlbiwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmNvbnRyb2xsZXIuc2V0TW91c2VQb3NpdGlvbihTY2VuZTNEVXRpbC5Db252ZXJ0M0RQb2ludFRvU2NyZWVuUG9pbnQoXHJcbiAgICAgICAgICAvLyAgIGludGVyc2VjdGlvbnNbMF0ucG9pbnQsXHJcbiAgICAgICAgICAvLyAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgLy8gICB0aGlzLmNvbnRyb2xsZXIuZ2V0RWxlbWVudCgpLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgLy8gICB0aGlzLmNvbnRyb2xsZXIuZ2V0RWxlbWVudCgpLmNsaWVudEhlaWdodCkpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jb250cm9sbGVyLmRvTW91c2VNb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5fbG9nTWVzc2FnZShlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBhbmd1bGFyIHZlbG9jaXR5XHJcbiAgICAgIGlmIChwb3NlLmFuZ3VsYXJWZWxvY2l0eSAhPT0gbnVsbCAmJiAhdGhpcy5hbmd1bGFyVmVsb2NpdHkuZXF1YWxzKHBvc2UuYW5ndWxhclZlbG9jaXR5KSkge1xyXG4gICAgICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5LmZyb21BcnJheShwb3NlLmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgLy8gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAnYW5ndWxhcnZlbG9jaXR5Y2hhbmdlZCcsIGFuZ3VsYXJWZWxvY2l0eTogdGhpcy5hbmd1bGFyVmVsb2NpdHl9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBheGVzICh0b3VjaHBhZClcclxuICAgICAgaWYgKHRoaXMuYXhlc1swXSAhPT0gdGhpcy5nYW1lcGFkLmF4ZXNbMF0gfHwgdGhpcy5heGVzWzFdICE9PSB0aGlzLmdhbWVwYWQuYXhlc1sxXSkge1xyXG4gICAgICAgIHRoaXMuYXhlc1swXSA9IHRoaXMuZ2FtZXBhZC5heGVzWzBdO1xyXG4gICAgICAgIHRoaXMuYXhlc1sxXSA9IHRoaXMuZ2FtZXBhZC5heGVzWzFdO1xyXG4gICAgICAgIC8vIHRoaXMuX2xvZ01lc3NhZ2UoJ2F4ZXMgbW92ZWQnKTtcclxuICAgICAgICAvLyB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ICdheGlzY2hhbmdlZCcsIGF4ZXM6IHRoaXMuYXhlc30pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGJ1dHRvbiAodG91Y2hwYWQpXHJcbiAgICAgIGlmICh0aGlzLnRvdWNocGFkSXNQcmVzc2VkICE9PSB0aGlzLmdhbWVwYWQuYnV0dG9uc1swXS5wcmVzc2VkKSB7XHJcbiAgICAgICAgdGhpcy50b3VjaHBhZElzUHJlc3NlZCA9IHRoaXMuZ2FtZXBhZC5idXR0b25zWzBdLnByZXNzZWQ7XHJcbiAgICAgICAgLy8gdGhpcy5fbG9nTWVzc2FnZSgndG91Y2hwYWQgcHJlc3NlZCcpO1xyXG4gICAgICAgIC8vIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZTogdGhpcy50b3VjaHBhZElzUHJlc3NlZCA/ICd0b3VjaHBhZGRvd24nIDogJ3RvdWNocGFkdXAnLCBheGVzOiB0aGlzLmF4ZXN9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0cmlnZ2VyXHJcbiAgICAgIGlmICh0aGlzLnRyaWdnZXJJc1ByZXNzZWQgIT09IHRoaXMuZ2FtZXBhZC5idXR0b25zWzFdLnByZXNzZWQpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXJJc1ByZXNzZWQgPSB0aGlzLmdhbWVwYWQuYnV0dG9uc1sxXS5wcmVzc2VkO1xyXG4gICAgICAgIC8vIHRoaXMuX2xvZ01lc3NhZ2UoJ3RyaWdnZXIgcHJlc3NlZCcpO1xyXG4gICAgICAgIC8vIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZTogdGhpcy50cmlnZ2VySXNQcmVzc2VkID8gJ3RyaWdnZXJkb3duJyA6ICd0cmlnZ2VydXAnfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gYXBwIGJ1dHRvbiBub3QgYXZhaWxhYmxlLCByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSBicm93c2VyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl92ckNvbnRyb2xsZXIudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZEdhbWVwYWQoKSB7XHJcbiAgICBjb25zdCBnYW1lcGFkcyA9IG5hdmlnYXRvci5nZXRHYW1lcGFkcyAmJiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGdhbWVwYWQgPSBnYW1lcGFkc1tpXTtcclxuICAgICAgaWYgKGdhbWVwYWQgJiYgKGdhbWVwYWQuaWQgPT09ICdHZWFyIFZSIENvbnRyb2xsZXInIHx8IGdhbWVwYWQuaWQgPT09ICdPY3VsdXMgR28gQ29udHJvbGxlcicpKSB7XHJcbiAgICAgICAgcmV0dXJuIGdhbWVwYWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNvbnRyb2xsZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl92ckNvbnRyb2xsZXIgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuX2NyZWF0ZU1lc2hlcygpO1xyXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5fdnJDb250cm9sbGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1lc2hlcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1lc2hDb2xvck9mZiA9IDB4ZmZmZmZmLFxyXG4gICAgICBtZXNoQ29sb3JPbiA9IDB4RjRDMjBELFxyXG4gICAgICBjb250cm9sbGVyTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOiBtZXNoQ29sb3JPZmZ9KSxcclxuICAgICAgY29udHJvbGxlck1lc2ggPSBuZXcgTWVzaChuZXcgQ3lsaW5kZXJHZW9tZXRyeSgwLjAwMSwgMC4wMDMsIDAuNSwgMTYpLCBjb250cm9sbGVyTWF0ZXJpYWwpO1xyXG4gICAgLy8gaGFuZGxlTWVzaCA9IG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgzMCwgMTAsIDMwKSwgY29udHJvbGxlck1hdGVyaWFsKTtcclxuICAgIC8vIGNvbnRyb2xsZXJNZXNoLmFkZChuZXcgQXhlc0hlbHBlcig1MCkpO1xyXG4gICAgY29udHJvbGxlck1lc2guZ2VvbWV0cnkudHJhbnNsYXRlKDAsIDAuMjUsIDApO1xyXG4gICAgY29udHJvbGxlck1hdGVyaWFsLmZsYXRTaGFkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnRyb2xsZXJNZXNoLnJvdGF0aW9uLnggPSAtTWF0aC5QSSAvIDI7XHJcbiAgICAvLyBoYW5kbGVNZXNoLnBvc2l0aW9uLnkgPSAtNTtcclxuICAgIC8vIGNvbnRyb2xsZXJNZXNoLmFkZChoYW5kbGVNZXNoKTtcclxuICAgIHRoaXMuX3ZyQ29udHJvbGxlci5hZGQoY29udHJvbGxlck1lc2gpO1xyXG4gIH1cclxufVxyXG4iXX0=