@colijnit/configurator 261.1.1 → 261.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19092 -18478
  2. package/fesm2022/colijnit-configurator.mjs.map +1 -0
  3. package/index.d.ts +3301 -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/package.json +17 -13
  7. package/bundles/colijnit-configurator.umd.js +0 -20167
  8. package/bundles/colijnit-configurator.umd.js.map +0 -1
  9. package/colijnit-configurator.d.ts +0 -5
  10. package/esm2015/colijnit-configurator.js +0 -5
  11. package/esm2015/lib/builder.js +0 -795
  12. package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
  13. package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
  14. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
  15. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
  16. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
  17. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
  18. package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
  19. package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
  20. package/esm2015/lib/components/configurator/configurator.component.js +0 -133
  21. package/esm2015/lib/components/configurator/configurator.module.js +0 -42
  22. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
  23. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
  24. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
  25. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
  26. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
  27. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
  28. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
  29. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
  30. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
  31. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
  32. package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
  33. package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
  34. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
  35. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
  36. package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
  37. package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
  38. package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
  39. package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
  40. package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
  41. package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
  42. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
  43. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
  44. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
  45. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
  46. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
  47. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
  48. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
  49. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
  50. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
  51. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
  52. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
  53. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
  54. package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
  55. package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
  56. package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
  57. package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
  58. package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
  59. package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
  60. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
  61. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
  62. package/esm2015/lib/components/slideout/slideout.component.js +0 -83
  63. package/esm2015/lib/components/slideout/slideout.module.js +0 -17
  64. package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
  65. package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
  66. package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
  67. package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
  68. package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
  69. package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
  70. package/esm2015/lib/core/helper/variation-helper.js +0 -553
  71. package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
  72. package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
  73. package/esm2015/lib/directives/directives.module.js +0 -26
  74. package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
  75. package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
  76. package/esm2015/lib/enum/ar-feature.enum.js +0 -14
  77. package/esm2015/lib/enum/configuration-key.enum.js +0 -41
  78. package/esm2015/lib/enum/configuration-template.enum.js +0 -6
  79. package/esm2015/lib/enum/device-size-type.js +0 -7
  80. package/esm2015/lib/enum/device-tier.enum.js +0 -7
  81. package/esm2015/lib/enum/icon.enum.js +0 -113
  82. package/esm2015/lib/enum/item-type.enum.js +0 -23
  83. package/esm2015/lib/enum/light.enum.js +0 -9
  84. package/esm2015/lib/enum/navigator-type.enum.js +0 -6
  85. package/esm2015/lib/enum/output-encoding.enum.js +0 -9
  86. package/esm2015/lib/enum/result-type.enum.js +0 -21
  87. package/esm2015/lib/enum/scene-event.enum.js +0 -12
  88. package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
  89. package/esm2015/lib/enum/texture-type.js +0 -9
  90. package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
  91. package/esm2015/lib/enum/view-mode.enum.js +0 -7
  92. package/esm2015/lib/enum/xr-mode.enum.js +0 -6
  93. package/esm2015/lib/environments/environment.js +0 -8
  94. package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
  95. package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
  96. package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
  97. package/esm2015/lib/interfaces/changes.interface.js +0 -2
  98. package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
  99. package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
  100. package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
  101. package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
  102. package/esm2015/lib/interfaces/screen-size-info.js +0 -2
  103. package/esm2015/lib/interfaces/setting.interface.js +0 -2
  104. package/esm2015/lib/interfaces/texture.interface.js +0 -2
  105. package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
  106. package/esm2015/lib/model/ar-position-indicator.js +0 -18
  107. package/esm2015/lib/model/camera-settings.js +0 -14
  108. package/esm2015/lib/model/configuration-result-object.js +0 -6
  109. package/esm2015/lib/model/configurator-error-message.js +0 -9
  110. package/esm2015/lib/model/configurator-settings.js +0 -25
  111. package/esm2015/lib/model/custom-button.js +0 -16
  112. package/esm2015/lib/model/factory.js +0 -28
  113. package/esm2015/lib/model/icon.js +0 -112
  114. package/esm2015/lib/model/intersected-objects.js +0 -7
  115. package/esm2015/lib/model/light-preset.js +0 -73
  116. package/esm2015/lib/model/light-properties.js +0 -45
  117. package/esm2015/lib/model/material.js +0 -11
  118. package/esm2015/lib/model/metadata.js +0 -2
  119. package/esm2015/lib/model/render-parameters.js +0 -16
  120. package/esm2015/lib/model/setting-options.js +0 -71
  121. package/esm2015/lib/model/settings.js +0 -16
  122. package/esm2015/lib/model/shadow-properties.js +0 -10
  123. package/esm2015/lib/model/skin.js +0 -3
  124. package/esm2015/lib/model/texture.js +0 -76
  125. package/esm2015/lib/model/variation-settings.js +0 -54
  126. package/esm2015/lib/model/variation.js +0 -3
  127. package/esm2015/lib/model/xr-reticle.js +0 -79
  128. package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
  129. package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
  130. package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
  131. package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
  132. package/esm2015/lib/pipes/append.pipe.js +0 -21
  133. package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
  134. package/esm2015/lib/pipes/localize.pipe.js +0 -28
  135. package/esm2015/lib/pipes/pipes.module.js +0 -41
  136. package/esm2015/lib/pipes/prepend.pipe.js +0 -21
  137. package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
  138. package/esm2015/lib/services/app-event.service.js +0 -36
  139. package/esm2015/lib/services/app-initializer.service.js +0 -27
  140. package/esm2015/lib/services/ar.service.js +0 -844
  141. package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
  142. package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
  143. package/esm2015/lib/services/build-furniture.service.js +0 -169
  144. package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
  145. package/esm2015/lib/services/camera.service.js +0 -123
  146. package/esm2015/lib/services/configuration.service.js +0 -79
  147. package/esm2015/lib/services/configurator-connector.service.js +0 -830
  148. package/esm2015/lib/services/configurator.service.js +0 -285
  149. package/esm2015/lib/services/configuring.service.js +0 -119
  150. package/esm2015/lib/services/controls.js +0 -799
  151. package/esm2015/lib/services/debug.service.js +0 -43
  152. package/esm2015/lib/services/dictionary.service.js +0 -65
  153. package/esm2015/lib/services/dynamic-camera.service.js +0 -96
  154. package/esm2015/lib/services/floor-plane.service.js +0 -252
  155. package/esm2015/lib/services/font.service.js +0 -27
  156. package/esm2015/lib/services/google-translate.service.js +0 -79
  157. package/esm2015/lib/services/icon-cache.service.js +0 -44
  158. package/esm2015/lib/services/intersection.service.js +0 -47
  159. package/esm2015/lib/services/item.service.js +0 -75
  160. package/esm2015/lib/services/json-utils.service.js +0 -48
  161. package/esm2015/lib/services/light-creation.service.js +0 -35
  162. package/esm2015/lib/services/light-presets.service.js +0 -157
  163. package/esm2015/lib/services/lights.service.js +0 -146
  164. package/esm2015/lib/services/load-furniture-base.service.js +0 -164
  165. package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
  166. package/esm2015/lib/services/load-furniture.service.js +0 -72
  167. package/esm2015/lib/services/loader.service.js +0 -32
  168. package/esm2015/lib/services/locator.service.js +0 -11
  169. package/esm2015/lib/services/message-board.service.js +0 -50
  170. package/esm2015/lib/services/post-processing.service.js +0 -378
  171. package/esm2015/lib/services/product-configurator.service.js +0 -16
  172. package/esm2015/lib/services/progress.service.js +0 -20
  173. package/esm2015/lib/services/scene-event.service.js +0 -246
  174. package/esm2015/lib/services/scene-options.service.js +0 -24
  175. package/esm2015/lib/services/scene.service.js +0 -313
  176. package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
  177. package/esm2015/lib/services/settings.service.js +0 -142
  178. package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
  179. package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
  180. package/esm2015/lib/services/threedselector.service.js +0 -72
  181. package/esm2015/lib/services/utils.service.js +0 -207
  182. package/esm2015/lib/services/variation-cache.service.js +0 -143
  183. package/esm2015/lib/services/variation.service.js +0 -490
  184. package/esm2015/lib/services/view-mode.service.js +0 -37
  185. package/esm2015/lib/services/vr.service.js +0 -191
  186. package/esm2015/lib/services/xr.service.js +0 -294
  187. package/esm2015/lib/utils/asset.utils.js +0 -120
  188. package/esm2015/lib/utils/base-utils.js +0 -9
  189. package/esm2015/lib/utils/color.utils.js +0 -30
  190. package/esm2015/lib/utils/debug.utils.js +0 -9
  191. package/esm2015/lib/utils/device.utils.js +0 -25
  192. package/esm2015/lib/utils/file.utils.js +0 -167
  193. package/esm2015/lib/utils/image.utils.js +0 -61
  194. package/esm2015/lib/utils/json-parser.utils.js +0 -180
  195. package/esm2015/lib/utils/material.utils.js +0 -433
  196. package/esm2015/lib/utils/object.utils.js +0 -360
  197. package/esm2015/lib/utils/relative-position.utils.js +0 -75
  198. package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
  199. package/esm2015/lib/utils/scene-3d.utils.js +0 -213
  200. package/esm2015/lib/utils/scene-utils.js +0 -191
  201. package/esm2015/lib/utils/text-utils.js +0 -68
  202. package/esm2015/lib/utils/threed.utils.js +0 -281
  203. package/esm2015/lib/utils/variation-utils.js +0 -459
  204. package/esm2015/public-api.js +0 -65
  205. package/fesm2015/colijnit-configurator.js.map +0 -1
  206. package/lib/builder.d.ts +0 -83
  207. package/lib/components/answer-card/answer-card.component.d.ts +0 -58
  208. package/lib/components/answer-card/answer-card.module.d.ts +0 -11
  209. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
  210. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
  211. package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
  212. package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
  213. package/lib/components/color-filter/color-filter.component.d.ts +0 -20
  214. package/lib/components/color-filter/color-filter.module.d.ts +0 -8
  215. package/lib/components/configurator/configurator.component.d.ts +0 -37
  216. package/lib/components/configurator/configurator.module.d.ts +0 -12
  217. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
  218. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
  219. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
  220. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
  221. package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
  222. package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
  223. package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
  224. package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
  225. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
  226. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
  227. package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
  228. package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
  229. package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
  230. package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
  231. package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
  232. package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
  233. package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
  234. package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
  235. package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
  236. package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
  237. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
  238. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
  239. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
  240. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
  241. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
  242. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
  243. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
  244. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
  245. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
  246. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
  247. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
  248. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
  249. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
  250. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  251. package/lib/components/scene-options/scene-options.component.d.ts +0 -24
  252. package/lib/components/scene-options/scene-options.module.d.ts +0 -11
  253. package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
  254. package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
  255. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
  256. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
  257. package/lib/components/slideout/slideout.component.d.ts +0 -22
  258. package/lib/components/slideout/slideout.module.d.ts +0 -7
  259. package/lib/components/summary-line/summary-line.component.d.ts +0 -50
  260. package/lib/components/summary-line/summary-line.module.d.ts +0 -11
  261. package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
  262. package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
  263. package/lib/components/threedselector/threedselector.component.d.ts +0 -38
  264. package/lib/components/threedselector/threedselector.module.d.ts +0 -10
  265. package/lib/core/helper/variation-helper.d.ts +0 -25
  266. package/lib/core/shader/floor-fade.shader.d.ts +0 -5
  267. package/lib/core/textures/depth-data-texture.d.ts +0 -5
  268. package/lib/directives/directives.module.d.ts +0 -8
  269. package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
  270. package/lib/directives/visibility-observer.directive.d.ts +0 -16
  271. package/lib/enum/ar-feature.enum.d.ts +0 -12
  272. package/lib/enum/configuration-key.enum.d.ts +0 -39
  273. package/lib/enum/configuration-template.enum.d.ts +0 -4
  274. package/lib/enum/device-size-type.d.ts +0 -5
  275. package/lib/enum/device-tier.enum.d.ts +0 -5
  276. package/lib/enum/icon.enum.d.ts +0 -111
  277. package/lib/enum/item-type.enum.d.ts +0 -21
  278. package/lib/enum/light.enum.d.ts +0 -7
  279. package/lib/enum/navigator-type.enum.d.ts +0 -4
  280. package/lib/enum/output-encoding.enum.d.ts +0 -7
  281. package/lib/enum/result-type.enum.d.ts +0 -19
  282. package/lib/enum/scene-event.enum.d.ts +0 -10
  283. package/lib/enum/shadow-map-type.enum.d.ts +0 -6
  284. package/lib/enum/texture-type.d.ts +0 -7
  285. package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
  286. package/lib/enum/view-mode.enum.d.ts +0 -5
  287. package/lib/enum/xr-mode.enum.d.ts +0 -4
  288. package/lib/environments/environment.d.ts +0 -4
  289. package/lib/interfaces/aa-options.interface.d.ts +0 -4
  290. package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
  291. package/lib/interfaces/ao-options.interface.d.ts +0 -18
  292. package/lib/interfaces/changes.interface.d.ts +0 -9
  293. package/lib/interfaces/configuration-data.interface.d.ts +0 -40
  294. package/lib/interfaces/light-preset.interface.d.ts +0 -22
  295. package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
  296. package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
  297. package/lib/interfaces/screen-size-info.d.ts +0 -10
  298. package/lib/interfaces/setting.interface.d.ts +0 -8
  299. package/lib/interfaces/texture.interface.d.ts +0 -44
  300. package/lib/interfaces/vignette-options.interface.d.ts +0 -4
  301. package/lib/model/ar-position-indicator.d.ts +0 -4
  302. package/lib/model/camera-settings.d.ts +0 -12
  303. package/lib/model/configuration-result-object.d.ts +0 -30
  304. package/lib/model/configurator-error-message.d.ts +0 -8
  305. package/lib/model/configurator-settings.d.ts +0 -62
  306. package/lib/model/custom-button.d.ts +0 -10
  307. package/lib/model/factory.d.ts +0 -5
  308. package/lib/model/icon.d.ts +0 -4
  309. package/lib/model/intersected-objects.d.ts +0 -6
  310. package/lib/model/light-preset.d.ts +0 -33
  311. package/lib/model/light-properties.d.ts +0 -25
  312. package/lib/model/material.d.ts +0 -41
  313. package/lib/model/metadata.d.ts +0 -78
  314. package/lib/model/render-parameters.d.ts +0 -12
  315. package/lib/model/setting-options.d.ts +0 -67
  316. package/lib/model/settings.d.ts +0 -10
  317. package/lib/model/shadow-properties.d.ts +0 -7
  318. package/lib/model/skin.d.ts +0 -15
  319. package/lib/model/texture.d.ts +0 -52
  320. package/lib/model/variation-settings.d.ts +0 -55
  321. package/lib/model/variation.d.ts +0 -11
  322. package/lib/model/xr-reticle.d.ts +0 -17
  323. package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
  324. package/lib/modules/render/model/ar-parameters.d.ts +0 -9
  325. package/lib/modules/render/model/scene-setting.d.ts +0 -13
  326. package/lib/modules/render/model/scene-settings.d.ts +0 -4
  327. package/lib/pipes/append.pipe.d.ts +0 -7
  328. package/lib/pipes/google-translate.pipe.d.ts +0 -11
  329. package/lib/pipes/localize.pipe.d.ts +0 -10
  330. package/lib/pipes/pipes.module.d.ts +0 -11
  331. package/lib/pipes/prepend.pipe.d.ts +0 -7
  332. package/lib/pipes/strip-html.pipe.d.ts +0 -7
  333. package/lib/services/app-event.service.d.ts +0 -32
  334. package/lib/services/app-initializer.service.d.ts +0 -14
  335. package/lib/services/ar.service.d.ts +0 -120
  336. package/lib/services/build-furniture-base.service.d.ts +0 -117
  337. package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
  338. package/lib/services/build-furniture.service.d.ts +0 -14
  339. package/lib/services/bundle-initialzer.service.d.ts +0 -45
  340. package/lib/services/camera.service.d.ts +0 -44
  341. package/lib/services/configuration.service.d.ts +0 -18
  342. package/lib/services/configurator-connector.service.d.ts +0 -140
  343. package/lib/services/configurator.service.d.ts +0 -62
  344. package/lib/services/configuring.service.d.ts +0 -46
  345. package/lib/services/controls.d.ts +0 -11
  346. package/lib/services/debug.service.d.ts +0 -16
  347. package/lib/services/dictionary.service.d.ts +0 -15
  348. package/lib/services/dynamic-camera.service.d.ts +0 -21
  349. package/lib/services/floor-plane.service.d.ts +0 -47
  350. package/lib/services/font.service.d.ts +0 -10
  351. package/lib/services/google-translate.service.d.ts +0 -26
  352. package/lib/services/icon-cache.service.d.ts +0 -21
  353. package/lib/services/intersection.service.d.ts +0 -11
  354. package/lib/services/item.service.d.ts +0 -18
  355. package/lib/services/json-utils.service.d.ts +0 -7
  356. package/lib/services/light-creation.service.d.ts +0 -9
  357. package/lib/services/light-presets.service.d.ts +0 -34
  358. package/lib/services/lights.service.d.ts +0 -34
  359. package/lib/services/load-furniture-base.service.d.ts +0 -37
  360. package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
  361. package/lib/services/load-furniture.service.d.ts +0 -9
  362. package/lib/services/loader.service.d.ts +0 -11
  363. package/lib/services/locator.service.d.ts +0 -7
  364. package/lib/services/message-board.service.d.ts +0 -18
  365. package/lib/services/post-processing.service.d.ts +0 -74
  366. package/lib/services/product-configurator.service.d.ts +0 -11
  367. package/lib/services/progress.service.d.ts +0 -9
  368. package/lib/services/scene-event.service.d.ts +0 -72
  369. package/lib/services/scene-options.service.d.ts +0 -11
  370. package/lib/services/scene.service.d.ts +0 -71
  371. package/lib/services/screen-size-analysis.service.d.ts +0 -32
  372. package/lib/services/settings.service.d.ts +0 -24
  373. package/lib/services/switch-build-furniture.service.d.ts +0 -21
  374. package/lib/services/switch-load-furniture.service.d.ts +0 -21
  375. package/lib/services/threedselector.service.d.ts +0 -17
  376. package/lib/services/utils.service.d.ts +0 -24
  377. package/lib/services/variation-cache.service.d.ts +0 -23
  378. package/lib/services/variation.service.d.ts +0 -26
  379. package/lib/services/view-mode.service.d.ts +0 -17
  380. package/lib/services/vr.service.d.ts +0 -42
  381. package/lib/services/xr.service.d.ts +0 -56
  382. package/lib/utils/asset.utils.d.ts +0 -19
  383. package/lib/utils/base-utils.d.ts +0 -4
  384. package/lib/utils/color.utils.d.ts +0 -8
  385. package/lib/utils/debug.utils.d.ts +0 -3
  386. package/lib/utils/device.utils.d.ts +0 -7
  387. package/lib/utils/file.utils.d.ts +0 -30
  388. package/lib/utils/image.utils.d.ts +0 -9
  389. package/lib/utils/json-parser.utils.d.ts +0 -9
  390. package/lib/utils/material.utils.d.ts +0 -34
  391. package/lib/utils/object.utils.d.ts +0 -32
  392. package/lib/utils/relative-position.utils.d.ts +0 -12
  393. package/lib/utils/rotation-helper.utils.d.ts +0 -6
  394. package/lib/utils/scene-3d.utils.d.ts +0 -8
  395. package/lib/utils/scene-utils.d.ts +0 -7
  396. package/lib/utils/text-utils.d.ts +0 -4
  397. package/lib/utils/threed.utils.d.ts +0 -20
  398. package/lib/utils/variation-utils.d.ts +0 -18
  399. package/public-api.d.ts +0 -60
@@ -1,360 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import * as THREE from 'three';
3
- import { BufferGeometry, CylinderGeometry, EquirectangularReflectionMapping, Float32BufferAttribute, Group, Line, LineBasicMaterial, Material, Mesh, MeshBasicMaterial, Object3D, Source, Texture, Vector2, Vector3 } from 'three';
4
- import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
5
- export class ObjectUtils {
6
- static CreateArrow(name, color, length, direction, headLength, headWidth, doubleArrow = false) {
7
- const arrow = new Group();
8
- const lineGeometry = new BufferGeometry();
9
- lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3));
10
- const line = new Line(lineGeometry, new LineBasicMaterial({ color: color, toneMapped: false }));
11
- lineGeometry.rotateX(Math.PI / 2 * direction.z);
12
- lineGeometry.rotateY(Math.PI / 2 * direction.y);
13
- lineGeometry.rotateZ(Math.PI / 2 * direction.x);
14
- const translate = new Vector3((direction.x) / 2, direction.y ? -(direction.y) / 2 : 0, -(direction.z) / 2);
15
- lineGeometry.translate(translate.x, translate.y, translate.z);
16
- line.name = 'arrow_line';
17
- line.matrixAutoUpdate = false;
18
- arrow.add(line);
19
- const coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1);
20
- const coneRightGeometry = coneGeometry.clone();
21
- const cone = new Mesh(coneGeometry, new MeshBasicMaterial({ color: color, toneMapped: false }));
22
- coneGeometry.rotateX(Math.PI / 2 * -direction.z);
23
- if (direction.y) {
24
- coneGeometry.rotateZ(Math.PI);
25
- }
26
- coneGeometry.rotateZ(Math.PI / 2 * -direction.x);
27
- // coneGeometry.translate(translate.x * 2, translate.y * 2, translate.z * 2);
28
- cone.name = 'arrow_cone_left';
29
- cone.matrixAutoUpdate = false;
30
- arrow.add(cone);
31
- if (doubleArrow) {
32
- const coneRight = new Mesh(coneRightGeometry, new MeshBasicMaterial({ color: color, toneMapped: false }));
33
- coneRightGeometry.rotateX(Math.PI / 2 * direction.z);
34
- coneRightGeometry.rotateZ(Math.PI / 2 * direction.x);
35
- // coneRightGeometry.translate(-translate.x * 2, -translate.y * 2, -translate.z * 2);
36
- coneRight.name = 'arrow_cone_right';
37
- coneRight.matrixAutoUpdate = false;
38
- arrow.add(coneRight);
39
- }
40
- arrow.name = name;
41
- return ObjectUtils.UpdateArrowLength(arrow, length, direction, headLength, headWidth);
42
- }
43
- static UpdateArrowLength(arrow, length, direction, headLength, headWidth, doubleArrow = false) {
44
- try {
45
- const arrowLine = arrow.getObjectByName('arrow_line');
46
- const scale = new Vector3(direction.x ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1, direction.y ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1, direction.z ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1);
47
- arrowLine.scale.copy(scale);
48
- arrowLine.updateMatrix();
49
- const cone = arrow.getObjectByName('arrow_cone_left');
50
- if (cone) {
51
- cone.scale.set(headWidth, headLength, headWidth);
52
- cone.position.x = direction.x ? length / 2 - headLength : 0;
53
- cone.position.y = direction.y ? -length / 2 + headLength : 0;
54
- cone.position.z = direction.z ? -length / 2 + headLength : 0;
55
- cone.updateMatrix();
56
- }
57
- const coneRight = arrow.getObjectByName('arrow_cone_right');
58
- if (coneRight) {
59
- coneRight.scale.set(headWidth, headLength, headWidth);
60
- coneRight.position.x = direction.x ? -length / 2 + headLength : 0;
61
- coneRight.position.y = direction.y ? length / 2 - headLength : 0;
62
- coneRight.position.z = direction.z ? length / 2 - headLength : 0;
63
- coneRight.updateMatrix();
64
- }
65
- return arrow;
66
- }
67
- catch (error) {
68
- }
69
- }
70
- static ChildOf(obj, parentName) {
71
- if (obj && obj.parent && obj.parent.name === parentName) {
72
- return true;
73
- }
74
- else if (obj.parent) {
75
- return ObjectUtils.ChildOf(obj.parent, parentName);
76
- }
77
- else {
78
- return false;
79
- }
80
- }
81
- static GetParentItem(element) {
82
- if (!element.parent) {
83
- return null;
84
- }
85
- if (element.parent instanceof Object3D) {
86
- return element.parent;
87
- }
88
- else {
89
- return ObjectUtils.GetParentItem(element.parent);
90
- }
91
- }
92
- static GetDefaultMaterial(object) {
93
- const children = object.children.filter(c => {
94
- if (c instanceof Mesh) {
95
- return Array.isArray(c.material) ?
96
- c.material.find(m => m.name.toLowerCase().startsWith('default_')) :
97
- c.material.name.toLowerCase().startsWith('default_');
98
- }
99
- });
100
- return children.map(c => c.material)[0];
101
- }
102
- static SameMaterial(first, second) {
103
- if (!first && !second) {
104
- return true;
105
- }
106
- return first.hasOwnProperty('map') && second.hasOwnProperty('map') && first.map && second.map &&
107
- first.map.image.src === second.map.image.src;
108
- }
109
- static GetChanges(firstItems, secondItems) {
110
- const result = [];
111
- for (let i = 0; i < secondItems.length; i++) { // check added/changed items
112
- const secondItem = secondItems[i];
113
- let oldPosition;
114
- let oldMaterial;
115
- const newPosition = new Vector3().copy(secondItem.position);
116
- const newMaterial = ObjectUtils.GetDefaultMaterial(secondItem);
117
- const firstItem = firstItems.find(fi => fi.name === secondItems[i].name);
118
- if (firstItem) {
119
- oldPosition = new Vector3().copy(firstItem.position);
120
- oldMaterial = ObjectUtils.GetDefaultMaterial(firstItem);
121
- }
122
- if ((!oldPosition || (newPosition && !oldPosition.equals(newPosition))) || !ObjectUtils.SameMaterial(oldMaterial, newMaterial)) {
123
- result.push({
124
- object: secondItem,
125
- name: secondItem.name,
126
- oldPosition: oldPosition,
127
- newPosition: newPosition,
128
- oldMaterial: oldMaterial,
129
- newMaterial: newMaterial
130
- });
131
- }
132
- }
133
- for (let i = 0; i < firstItems.length; i++) { // check deleted items
134
- const firstItem = firstItems[i];
135
- const oldPosition = new Vector3().copy(firstItem.position);
136
- let newPosition;
137
- const secondItem = secondItems.find(fi => fi.name === firstItems[i].name);
138
- if (secondItem) {
139
- newPosition = new Vector3().copy(secondItem.position);
140
- }
141
- if (!newPosition || (newPosition && !oldPosition.equals(newPosition))) {
142
- result.push({
143
- object: firstItem,
144
- name: firstItem.name,
145
- oldPosition: oldPosition,
146
- newPosition: newPosition
147
- });
148
- }
149
- }
150
- return result;
151
- }
152
- static GetSelectionFromSelectedObject(object) {
153
- if (object) {
154
- if (object.userData && object.userData.selection) {
155
- return object.userData.selection;
156
- }
157
- else if (object.parent) {
158
- return this.GetSelectionFromSelectedObject(object.parent);
159
- }
160
- else {
161
- return undefined;
162
- }
163
- }
164
- else {
165
- return undefined;
166
- }
167
- }
168
- static UpdateUvs(geo) {
169
- if (geo) {
170
- const pos = geo.attributes.position;
171
- const b3 = new THREE.Box3().setFromBufferAttribute(pos);
172
- const b3size = new THREE.Vector3();
173
- b3.getSize(b3size);
174
- const uv = [];
175
- for (let i = 0; i < pos.count; i++) {
176
- const x = pos.getX(i);
177
- const y = pos.getY(i);
178
- const u = (x - b3.min.x) / b3size.x;
179
- const v = (y - b3.min.y) / b3size.y;
180
- uv.push(u, v);
181
- }
182
- geo.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));
183
- }
184
- }
185
- static LoadHDRI(path, scene) {
186
- return __awaiter(this, void 0, void 0, function* () {
187
- const hdri = yield new RGBELoader().loadAsync(path);
188
- hdri.mapping = EquirectangularReflectionMapping;
189
- scene.environment = hdri;
190
- });
191
- }
192
- static ProjectToPlane(points) {
193
- const centroid = new Vector3();
194
- points.forEach(p => centroid.add(p));
195
- centroid.divideScalar(points.length);
196
- const v1 = points[1].clone().sub(points[0]);
197
- const v2 = points[2].clone().sub(points[0]);
198
- const normal = v1.clone().cross(v2).normalize();
199
- const arbitrary = Math.abs(normal.dot(new Vector3(1, 0, 0))) > 0.9
200
- ? new Vector3(0, 1, 0)
201
- : new Vector3(1, 0, 0);
202
- const u = new Vector3().crossVectors(normal, arbitrary).normalize();
203
- const v = new Vector3().crossVectors(normal, u).normalize();
204
- return points.map(p => {
205
- const rel = p.clone().sub(centroid);
206
- return new Vector2(rel.dot(u), rel.dot(v));
207
- });
208
- }
209
- static CloneMaterial(material, deepClone = false) {
210
- if (material instanceof Material) {
211
- const onBeforeCompile = material.onBeforeCompile;
212
- const onBeforeRender = material.onBeforeRender;
213
- const clone = material.clone();
214
- clone.onBeforeCompile = onBeforeCompile;
215
- clone.onBeforeRender = onBeforeRender;
216
- this.materialProps
217
- .filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)
218
- .forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));
219
- return clone;
220
- }
221
- return material.map((m) => {
222
- const onBeforeCompile = m.onBeforeCompile;
223
- const onBeforeRender = m.onBeforeRender;
224
- const clone = m.clone();
225
- clone.onBeforeCompile = onBeforeCompile;
226
- clone.onBeforeRender = onBeforeRender;
227
- this.materialProps
228
- .filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)
229
- .forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));
230
- return clone;
231
- });
232
- }
233
- /**
234
- * ThreeJS does not clone image property, so it stays a reference to the original image.
235
- * When deepClone, this method creates a new image and copies the original image data to it.
236
- * @param texture
237
- * @param deepClone
238
- * @constructor
239
- */
240
- static CloneTexture(texture, deepClone = false) {
241
- const clone = texture.clone();
242
- if (!deepClone) {
243
- clone.needsUpdate = true;
244
- return clone;
245
- }
246
- if (texture.image) {
247
- if (texture.image instanceof HTMLImageElement && texture.image.src) {
248
- const img = texture.image;
249
- const newImage = new Image();
250
- newImage.src = img.src;
251
- clone.source = new Source(newImage);
252
- }
253
- else if (texture.image instanceof HTMLCanvasElement) {
254
- const canvas = texture.image;
255
- const newCanvas = document.createElement('canvas');
256
- newCanvas.width = canvas.width;
257
- newCanvas.height = canvas.height;
258
- const ctx = newCanvas.getContext('2d');
259
- if (ctx) {
260
- ctx.drawImage(canvas, 0, 0);
261
- }
262
- clone.source = new Source(newCanvas);
263
- }
264
- else if (texture.image.data && (texture.image.data.slice || texture.image.data instanceof ArrayBuffer)) {
265
- const imgData = texture.image;
266
- clone.image = Object.assign(Object.assign({}, imgData), { data: imgData.data.slice ? imgData.data.slice(0) : new Uint8Array(imgData.data).slice(0) // Deep copy the TypedArray
267
- });
268
- }
269
- }
270
- clone.needsUpdate = true;
271
- return clone;
272
- }
273
- static CloneObject3D(source) {
274
- const newObject = new Object3D();
275
- source.children.forEach((child) => {
276
- if (!child.visible) {
277
- return;
278
- }
279
- if (child instanceof Mesh) {
280
- newObject.add(child.clone());
281
- }
282
- else if (child instanceof Object3D) {
283
- const clone = ObjectUtils.CloneObject3D(child);
284
- clone.position.copy(child.position);
285
- clone.rotation.copy(child.rotation);
286
- newObject.add(clone);
287
- }
288
- });
289
- return newObject;
290
- }
291
- static DeepCloneObject3D(source) {
292
- if (!source) {
293
- return new Object3D();
294
- }
295
- const clone = source.clone();
296
- clone.traverse((obj) => {
297
- if (obj instanceof Mesh && obj.material) {
298
- obj.material = ObjectUtils.CloneMaterial(obj.material, true);
299
- }
300
- });
301
- return clone;
302
- }
303
- static DisposeMaterial(material) {
304
- if (!material) {
305
- return;
306
- }
307
- if (Array.isArray(material)) {
308
- material.forEach(mtrl => ObjectUtils.DisposeMaterial(mtrl));
309
- return;
310
- }
311
- for (const key in material) {
312
- if (material.hasOwnProperty(key)) {
313
- const value = material[key];
314
- if (value && value.isTexture) {
315
- value.dispose();
316
- }
317
- }
318
- }
319
- material.dispose();
320
- }
321
- static DisposeObject(object) {
322
- if (!object) {
323
- return;
324
- }
325
- if (object.children.length) {
326
- object.children.forEach(child => this.DisposeObject(child));
327
- }
328
- ObjectUtils.DisposeNode(object);
329
- }
330
- static GetParentCustomObject(element) {
331
- if (!element.parent) {
332
- return null;
333
- }
334
- if (element.parent instanceof Object3D) {
335
- return element.parent;
336
- }
337
- else {
338
- return ObjectUtils.GetParentCustomObject(element.parent);
339
- }
340
- }
341
- static DisposeNode(node) {
342
- node.traverse((obj) => {
343
- if (obj instanceof Mesh) {
344
- if (obj.geometry) {
345
- obj.geometry.dispose();
346
- }
347
- ObjectUtils.DisposeMaterial(obj.material);
348
- }
349
- if (typeof obj.dispose === 'function') {
350
- // @ts-ignore
351
- obj.dispose();
352
- }
353
- });
354
- }
355
- static _remapFloat(v, min0, max0, min1, max1) {
356
- return min1 + (v - min0) / (max0 - min0) * (max1 - min1);
357
- }
358
- }
359
- ObjectUtils.materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvb2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBRUwsY0FBYyxFQUVkLGdCQUFnQixFQUVoQixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLEtBQUssRUFDTCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFFBQVEsRUFDRCxNQUFNLEVBQUUsT0FBTyxFQUN0QixPQUFPLEVBQ1AsT0FBTyxFQUNSLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE1BQU0sT0FBTyxXQUFXO0lBR2YsTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBWSxFQUFFLEtBQThCLEVBQzVDLE1BQWMsRUFDZCxTQUFrQixFQUNsQixVQUFrQixFQUNsQixTQUFpQixFQUNqQixjQUF1QixLQUFLO1FBRTVCLE1BQU0sS0FBSyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FB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LElBQVksRUFBRSxJQUFZO1FBQzFGLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7O0FBcFlNLHlCQUFhLEdBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgQ29sb3IsXHJcbiAgQ3lsaW5kZXJHZW9tZXRyeSxcclxuICBEYXRhVGV4dHVyZSxcclxuICBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyxcclxuICBGbG9hdDMyQnVmZmVyQXR0cmlidXRlLFxyXG4gIEdyb3VwLFxyXG4gIExpbmUsXHJcbiAgTGluZUJhc2ljTWF0ZXJpYWwsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBTY2VuZSwgU291cmNlLCBUZXh0dXJlLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yM1xyXG59IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtSR0JFTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9SR0JFTG9hZGVyJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoYW5nZXMuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RVdGlscyB7XHJcbiAgc3RhdGljIG1hdGVyaWFsUHJvcHM6IHN0cmluZ1tdID0gWydtYXAnLCAnbGlnaHRNYXAnLCAnYnVtcE1hcCcsICdub3JtYWxNYXAnLCAnc3BlY3VsYXJNYXAnLCAnZW52TWFwJywgJ2FvTWFwJywgJ3JvdWdobmVzc01hcCcsICdtZXRhbG5lc3NNYXAnXTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBDcmVhdGVBcnJvdyhcclxuICAgIG5hbWU6IHN0cmluZywgY29sb3I6IENvbG9yIHwgbnVtYmVyIHwgc3RyaW5nLFxyXG4gICAgbGVuZ3RoOiBudW1iZXIsXHJcbiAgICBkaXJlY3Rpb246IFZlY3RvcjMsXHJcbiAgICBoZWFkTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBoZWFkV2lkdGg6IG51bWJlcixcclxuICAgIGRvdWJsZUFycm93OiBib29sZWFuID0gZmFsc2UpOiBHcm91cCB7XHJcblxyXG4gICAgY29uc3QgYXJyb3c6IEdyb3VwID0gbmV3IEdyb3VwKCk7XHJcblxyXG4gICAgY29uc3QgbGluZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XHJcbiAgICBsaW5lR2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKFswLCAwLCAwLCAwLCAxLCAwXSwgMykpO1xyXG4gICAgY29uc3QgbGluZSA9IG5ldyBMaW5lKGxpbmVHZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlfSkpO1xyXG4gICAgbGluZUdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueik7XHJcbiAgICBsaW5lR2VvbWV0cnkucm90YXRlWShNYXRoLlBJIC8gMiAqIGRpcmVjdGlvbi55KTtcclxuICAgIGxpbmVHZW9tZXRyeS5yb3RhdGVaKE1hdGguUEkgLyAyICogZGlyZWN0aW9uLngpO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgIChkaXJlY3Rpb24ueCkgLyAyLFxyXG4gICAgICBkaXJlY3Rpb24ueSA/IC0oZGlyZWN0aW9uLnkpIC8gMiA6IDAsXHJcbiAgICAgIC0oZGlyZWN0aW9uLnopIC8gMlxyXG4gICAgKTtcclxuICAgIGxpbmVHZW9tZXRyeS50cmFuc2xhdGUodHJhbnNsYXRlLngsIHRyYW5zbGF0ZS55LCB0cmFuc2xhdGUueik7XHJcblxyXG4gICAgbGluZS5uYW1lID0gJ2Fycm93X2xpbmUnO1xyXG4gICAgbGluZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICBhcnJvdy5hZGQobGluZSk7XHJcblxyXG4gICAgY29uc3QgY29uZUdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoMCwgMC41LCAxLCA1LCAxKTtcclxuICAgIGNvbnN0IGNvbmVSaWdodEdlb21ldHJ5ID0gY29uZUdlb21ldHJ5LmNsb25lKCk7XHJcblxyXG4gICAgY29uc3QgY29uZSA9IG5ldyBNZXNoKGNvbmVHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlfSkpO1xyXG4gICAgY29uZUdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiAtZGlyZWN0aW9uLnopO1xyXG4gICAgaWYgKGRpcmVjdGlvbi55KSB7XHJcbiAgICAgIGNvbmVHZW9tZXRyeS5yb3RhdGVaKE1hdGguUEkpO1xyXG4gICAgfVxyXG4gICAgY29uZUdlb21ldHJ5LnJvdGF0ZVooTWF0aC5QSSAvIDIgKiAtZGlyZWN0aW9uLngpO1xyXG4gICAgLy8gY29uZUdlb21ldHJ5LnRyYW5zbGF0ZSh0cmFuc2xhdGUueCAqIDIsIHRyYW5zbGF0ZS55ICogMiwgdHJhbnNsYXRlLnogKiAyKTtcclxuICAgIGNvbmUubmFtZSA9ICdhcnJvd19jb25lX2xlZnQnO1xyXG4gICAgY29uZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICBhcnJvdy5hZGQoY29uZSk7XHJcblxyXG4gICAgaWYgKGRvdWJsZUFycm93KSB7XHJcbiAgICAgIGNvbnN0IGNvbmVSaWdodCA9IG5ldyBNZXNoKGNvbmVSaWdodEdlb21ldHJ5LCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe2NvbG9yOiBjb2xvciwgdG9uZU1hcHBlZDogZmFsc2V9KSk7XHJcbiAgICAgIGNvbmVSaWdodEdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueik7XHJcbiAgICAgIGNvbmVSaWdodEdlb21ldHJ5LnJvdGF0ZVooTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueCk7XHJcbiAgICAgIC8vIGNvbmVSaWdodEdlb21ldHJ5LnRyYW5zbGF0ZSgtdHJhbnNsYXRlLnggKiAyLCAtdHJhbnNsYXRlLnkgKiAyLCAtdHJhbnNsYXRlLnogKiAyKTtcclxuICAgICAgY29uZVJpZ2h0Lm5hbWUgPSAnYXJyb3dfY29uZV9yaWdodCc7XHJcbiAgICAgIGNvbmVSaWdodC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgIGFycm93LmFkZChjb25lUmlnaHQpO1xyXG4gICAgfVxyXG4gICAgYXJyb3cubmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gT2JqZWN0VXRpbHMuVXBkYXRlQXJyb3dMZW5ndGgoYXJyb3csIGxlbmd0aCwgZGlyZWN0aW9uLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBVcGRhdGVBcnJvd0xlbmd0aChhcnJvdzogR3JvdXAsIGxlbmd0aDogbnVtYmVyLCBkaXJlY3Rpb246IFZlY3RvcjMsIGhlYWRMZW5ndGg6IG51bWJlciwgaGVhZFdpZHRoOiBudW1iZXIsIGRvdWJsZUFycm93OiBib29sZWFuID0gZmFsc2UpOiBHcm91cCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBhcnJvd0xpbmU6IE9iamVjdDNEID0gYXJyb3cuZ2V0T2JqZWN0QnlOYW1lKCdhcnJvd19saW5lJyk7XHJcbiAgICAgIGNvbnN0IHNjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgICAgZGlyZWN0aW9uLnggPyBNYXRoLm1heCgwLjAwMDEsIGxlbmd0aCAtIChkb3VibGVBcnJvdyA/IGhlYWRMZW5ndGggKiAyIDogaGVhZExlbmd0aCkpIDogMSxcclxuICAgICAgICBkaXJlY3Rpb24ueSA/IE1hdGgubWF4KDAuMDAwMSwgbGVuZ3RoIC0gKGRvdWJsZUFycm93ID8gaGVhZExlbmd0aCAqIDIgOiBoZWFkTGVuZ3RoKSkgOiAxLFxyXG4gICAgICAgIGRpcmVjdGlvbi56ID8gTWF0aC5tYXgoMC4wMDAxLCBsZW5ndGggLSAoZG91YmxlQXJyb3cgPyBoZWFkTGVuZ3RoICogMiA6IGhlYWRMZW5ndGgpKSA6IDFcclxuICAgICAgKTtcclxuICAgICAgYXJyb3dMaW5lLnNjYWxlLmNvcHkoc2NhbGUpO1xyXG4gICAgICBhcnJvd0xpbmUudXBkYXRlTWF0cml4KCk7XHJcblxyXG4gICAgICBjb25zdCBjb25lOiBPYmplY3QzRCA9IGFycm93LmdldE9iamVjdEJ5TmFtZSgnYXJyb3dfY29uZV9sZWZ0Jyk7XHJcbiAgICAgIGlmIChjb25lKSB7XHJcbiAgICAgICAgY29uZS5zY2FsZS5zZXQoaGVhZFdpZHRoLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xyXG4gICAgICAgIGNvbmUucG9zaXRpb24ueCA9IGRpcmVjdGlvbi54ID8gbGVuZ3RoIC8gMiAtIGhlYWRMZW5ndGggOiAwO1xyXG4gICAgICAgIGNvbmUucG9zaXRpb24ueSA9IGRpcmVjdGlvbi55ID8gLWxlbmd0aCAvIDIgKyBoZWFkTGVuZ3RoIDogMDtcclxuICAgICAgICBjb25lLnBvc2l0aW9uLnogPSBkaXJlY3Rpb24ueiA/IC1sZW5ndGggLyAyICsgaGVhZExlbmd0aCA6IDA7XHJcbiAgICAgICAgY29uZS51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29uZVJpZ2h0OiBPYmplY3QzRCA9IGFycm93LmdldE9iamVjdEJ5TmFtZSgnYXJyb3dfY29uZV9yaWdodCcpO1xyXG4gICAgICBpZiAoY29uZVJpZ2h0KSB7XHJcbiAgICAgICAgY29uZVJpZ2h0LnNjYWxlLnNldChoZWFkV2lkdGgsIGhlYWRMZW5ndGgsIGhlYWRXaWR0aCk7XHJcbiAgICAgICAgY29uZVJpZ2h0LnBvc2l0aW9uLnggPSBkaXJlY3Rpb24ueCA/IC1sZW5ndGggLyAyICsgaGVhZExlbmd0aCA6IDA7XHJcbiAgICAgICAgY29uZVJpZ2h0LnBvc2l0aW9uLnkgPSBkaXJlY3Rpb24ueSA/IGxlbmd0aCAvIDIgLSBoZWFkTGVuZ3RoIDogMDtcclxuICAgICAgICBjb25lUmlnaHQucG9zaXRpb24ueiA9IGRpcmVjdGlvbi56ID8gbGVuZ3RoIC8gMiAtIGhlYWRMZW5ndGggOiAwO1xyXG4gICAgICAgIGNvbmVSaWdodC51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXJyb3c7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ2hpbGRPZihvYmo6IE1lc2ggfCBPYmplY3QzRCwgcGFyZW50TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqICYmIG9iai5wYXJlbnQgJiYgb2JqLnBhcmVudC5uYW1lID09PSBwYXJlbnROYW1lKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChvYmoucGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBPYmplY3RVdGlscy5DaGlsZE9mKG9iai5wYXJlbnQsIHBhcmVudE5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRQYXJlbnRJdGVtKGVsZW1lbnQ6IGFueSk6IE9iamVjdDNEIHtcclxuICAgIGlmICghZWxlbWVudC5wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgaW5zdGFuY2VvZiBPYmplY3QzRCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50LnBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldERlZmF1bHRNYXRlcmlhbChvYmplY3Q6IE9iamVjdDNEKTogTWF0ZXJpYWwge1xyXG4gICAgY29uc3QgY2hpbGRyZW46IE1lc2hbXSA9IDxNZXNoW10+b2JqZWN0LmNoaWxkcmVuLmZpbHRlcihjID0+IHtcclxuICAgICAgaWYgKGMgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYy5tYXRlcmlhbCkgP1xyXG4gICAgICAgICAgYy5tYXRlcmlhbC5maW5kKG0gPT4gbS5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZGVmYXVsdF8nKSkgOlxyXG4gICAgICAgICAgYy5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZGVmYXVsdF8nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPE1hdGVyaWFsPmNoaWxkcmVuLm1hcChjID0+IGMubWF0ZXJpYWwpWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBTYW1lTWF0ZXJpYWwoZmlyc3Q6IE1hdGVyaWFsLCBzZWNvbmQ6IE1hdGVyaWFsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWZpcnN0ICYmICFzZWNvbmQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3QuaGFzT3duUHJvcGVydHkoJ21hcCcpICYmIHNlY29uZC5oYXNPd25Qcm9wZXJ0eSgnbWFwJykgJiYgKGZpcnN0IGFzIGFueSkubWFwICYmIChzZWNvbmQgYXMgYW55KS5tYXAgJiZcclxuICAgICAgKGZpcnN0IGFzIGFueSkubWFwLmltYWdlLnNyYyA9PT0gKHNlY29uZCBhcyBhbnkpLm1hcC5pbWFnZS5zcmM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldENoYW5nZXMoZmlyc3RJdGVtczogT2JqZWN0M0RbXSwgc2Vjb25kSXRlbXM6IE9iamVjdDNEW10pOiBhbnkge1xyXG4gICAgY29uc3QgcmVzdWx0OiBDaGFuZ2VzSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vjb25kSXRlbXMubGVuZ3RoOyBpKyspIHsgLy8gY2hlY2sgYWRkZWQvY2hhbmdlZCBpdGVtc1xyXG4gICAgICBjb25zdCBzZWNvbmRJdGVtID0gc2Vjb25kSXRlbXNbaV07XHJcbiAgICAgIGxldCBvbGRQb3NpdGlvbjtcclxuICAgICAgbGV0IG9sZE1hdGVyaWFsO1xyXG4gICAgICBjb25zdCBuZXdQb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShzZWNvbmRJdGVtLnBvc2l0aW9uKTtcclxuICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IE1hdGVyaWFsID0gT2JqZWN0VXRpbHMuR2V0RGVmYXVsdE1hdGVyaWFsKHNlY29uZEl0ZW0pO1xyXG4gICAgICBjb25zdCBmaXJzdEl0ZW0gPSBmaXJzdEl0ZW1zLmZpbmQoZmkgPT4gZmkubmFtZSA9PT0gc2Vjb25kSXRlbXNbaV0ubmFtZSk7XHJcbiAgICAgIGlmIChmaXJzdEl0ZW0pIHtcclxuICAgICAgICBvbGRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuY29weShmaXJzdEl0ZW0ucG9zaXRpb24pO1xyXG4gICAgICAgIG9sZE1hdGVyaWFsID0gT2JqZWN0VXRpbHMuR2V0RGVmYXVsdE1hdGVyaWFsKGZpcnN0SXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCghb2xkUG9zaXRpb24gfHwgKG5ld1Bvc2l0aW9uICYmICFvbGRQb3NpdGlvbi5lcXVhbHMobmV3UG9zaXRpb24pKSkgfHwgIU9iamVjdFV0aWxzLlNhbWVNYXRlcmlhbChvbGRNYXRlcmlhbCwgbmV3TWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgb2JqZWN0OiBzZWNvbmRJdGVtLFxyXG4gICAgICAgICAgbmFtZTogc2Vjb25kSXRlbS5uYW1lLFxyXG4gICAgICAgICAgb2xkUG9zaXRpb246IG9sZFBvc2l0aW9uLFxyXG4gICAgICAgICAgbmV3UG9zaXRpb246IG5ld1Bvc2l0aW9uLFxyXG4gICAgICAgICAgb2xkTWF0ZXJpYWw6IG9sZE1hdGVyaWFsLFxyXG4gICAgICAgICAgbmV3TWF0ZXJpYWw6IG5ld01hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RJdGVtcy5sZW5ndGg7IGkrKykgeyAvLyBjaGVjayBkZWxldGVkIGl0ZW1zXHJcbiAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbXNbaV07XHJcbiAgICAgIGNvbnN0IG9sZFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGZpcnN0SXRlbS5wb3NpdGlvbik7XHJcbiAgICAgIGxldCBuZXdQb3NpdGlvbjtcclxuICAgICAgY29uc3Qgc2Vjb25kSXRlbSA9IHNlY29uZEl0ZW1zLmZpbmQoZmkgPT4gZmkubmFtZSA9PT0gZmlyc3RJdGVtc1tpXS5uYW1lKTtcclxuICAgICAgaWYgKHNlY29uZEl0ZW0pIHtcclxuICAgICAgICBuZXdQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuY29weShzZWNvbmRJdGVtLnBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW5ld1Bvc2l0aW9uIHx8IChuZXdQb3NpdGlvbiAmJiAhb2xkUG9zaXRpb24uZXF1YWxzKG5ld1Bvc2l0aW9uKSkpIHtcclxuICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICBvYmplY3Q6IGZpcnN0SXRlbSxcclxuICAgICAgICAgIG5hbWU6IGZpcnN0SXRlbS5uYW1lLFxyXG4gICAgICAgICAgb2xkUG9zaXRpb246IG9sZFBvc2l0aW9uLFxyXG4gICAgICAgICAgbmV3UG9zaXRpb246IG5ld1Bvc2l0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdChvYmplY3Q6IGFueSk6IFNlbGVjdGlvbiB7XHJcbiAgICBpZiAob2JqZWN0KSB7XHJcbiAgICAgIGlmIChvYmplY3QudXNlckRhdGEgJiYgb2JqZWN0LnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QudXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICB9IGVsc2UgaWYgKG9iamVjdC5wYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3Qob2JqZWN0LnBhcmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgVXBkYXRlVXZzKGdlbzogQnVmZmVyR2VvbWV0cnkpOiB2b2lkIHtcclxuICAgIGlmIChnZW8pIHtcclxuICAgICAgY29uc3QgcG9zOiBhbnkgPSBnZW8uYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgY29uc3QgYjM6IEJveDMgPSBuZXcgVEhSRUUuQm94MygpLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocG9zKTtcclxuICAgICAgY29uc3QgYjNzaXplOiBWZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgYjMuZ2V0U2l6ZShiM3NpemUpO1xyXG4gICAgICBjb25zdCB1diA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcy5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgeDogbnVtYmVyID0gcG9zLmdldFgoaSk7XHJcbiAgICAgICAgY29uc3QgeTogbnVtYmVyID0gcG9zLmdldFkoaSk7XHJcbiAgICAgICAgY29uc3QgdTogbnVtYmVyID0gKHggLSBiMy5taW4ueCkgLyBiM3NpemUueDtcclxuICAgICAgICBjb25zdCB2OiBudW1iZXIgPSAoeSAtIGIzLm1pbi55KSAvIGIzc2l6ZS55O1xyXG4gICAgICAgIHV2LnB1c2godSwgdik7XHJcbiAgICAgIH1cclxuICAgICAgZ2VvLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1diwgMikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBMb2FkSERSSShwYXRoOiBzdHJpbmcsIHNjZW5lOiBTY2VuZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaGRyaTogRGF0YVRleHR1cmUgPSBhd2FpdCBuZXcgUkdCRUxvYWRlcigpLmxvYWRBc3luYyhwYXRoKTtcclxuICAgIGhkcmkubWFwcGluZyA9IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgc2NlbmUuZW52aXJvbm1lbnQgPSBoZHJpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBQcm9qZWN0VG9QbGFuZShwb2ludHM6IFZlY3RvcjNbXSk6IFZlY3RvcjJbXSB7XHJcbiAgICBjb25zdCBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICBwb2ludHMuZm9yRWFjaChwID0+IGNlbnRyb2lkLmFkZChwKSk7XHJcbiAgICBjZW50cm9pZC5kaXZpZGVTY2FsYXIocG9pbnRzLmxlbmd0aCk7XHJcblxyXG4gICAgY29uc3QgdjEgPSBwb2ludHNbMV0uY2xvbmUoKS5zdWIocG9pbnRzWzBdKTtcclxuICAgIGNvbnN0IHYyID0gcG9pbnRzWzJdLmNsb25lKCkuc3ViKHBvaW50c1swXSk7XHJcbiAgICBjb25zdCBub3JtYWwgPSB2MS5jbG9uZSgpLmNyb3NzKHYyKS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICBjb25zdCBhcmJpdHJhcnkgPSBNYXRoLmFicyhub3JtYWwuZG90KG5ldyBWZWN0b3IzKDEsIDAsIDApKSkgPiAwLjlcclxuICAgICAgPyBuZXcgVmVjdG9yMygwLCAxLCAwKVxyXG4gICAgICA6IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG5cclxuICAgIGNvbnN0IHUgPSBuZXcgVmVjdG9yMygpLmNyb3NzVmVjdG9ycyhub3JtYWwsIGFyYml0cmFyeSkubm9ybWFsaXplKCk7XHJcbiAgICBjb25zdCB2ID0gbmV3IFZlY3RvcjMoKS5jcm9zc1ZlY3RvcnMobm9ybWFsLCB1KS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICByZXR1cm4gcG9pbnRzLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgcmVsID0gcC5jbG9uZSgpLnN1YihjZW50cm9pZCk7XHJcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yMihyZWwuZG90KHUpLCByZWwuZG90KHYpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbG9uZU1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCB8IE1hdGVyaWFsW10sIGRlZXBDbG9uZTogYm9vbGVhbiA9IGZhbHNlKTogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdIHtcclxuICAgIGlmIChtYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSB7XHJcbiAgICAgIGNvbnN0IG9uQmVmb3JlQ29tcGlsZSA9IG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY29uc3Qgb25CZWZvcmVSZW5kZXIgPSBtYXRlcmlhbC5vbkJlZm9yZVJlbmRlcjtcclxuICAgICAgY29uc3QgY2xvbmU6IE1hdGVyaWFsID0gbWF0ZXJpYWwuY2xvbmUoKTtcclxuICAgICAgY2xvbmUub25CZWZvcmVDb21waWxlID0gb25CZWZvcmVDb21waWxlO1xyXG4gICAgICBjbG9uZS5vbkJlZm9yZVJlbmRlciA9IG9uQmVmb3JlUmVuZGVyO1xyXG4gICAgICB0aGlzLm1hdGVyaWFsUHJvcHNcclxuICAgICAgICAuZmlsdGVyKG1hcFR5cGUgPT4gY2xvbmVbbWFwVHlwZV0gJiYgY2xvbmVbbWFwVHlwZV0gaW5zdGFuY2VvZiBUZXh0dXJlKVxyXG4gICAgICAgIC5mb3JFYWNoKG1hcFR5cGUgPT4gY2xvbmVbbWFwVHlwZV0gPSBPYmplY3RVdGlscy5DbG9uZVRleHR1cmUoY2xvbmVbbWFwVHlwZV0sIGRlZXBDbG9uZSkpO1xyXG4gICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwubWFwKChtOiBNYXRlcmlhbCkgPT4ge1xyXG4gICAgICBjb25zdCBvbkJlZm9yZUNvbXBpbGUgPSBtLm9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY29uc3Qgb25CZWZvcmVSZW5kZXIgPSBtLm9uQmVmb3JlUmVuZGVyO1xyXG4gICAgICBjb25zdCBjbG9uZTogTWF0ZXJpYWwgPSBtLmNsb25lKCk7XHJcbiAgICAgIGNsb25lLm9uQmVmb3JlQ29tcGlsZSA9IG9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY2xvbmUub25CZWZvcmVSZW5kZXIgPSBvbkJlZm9yZVJlbmRlcjtcclxuICAgICAgdGhpcy5tYXRlcmlhbFByb3BzXHJcbiAgICAgICAgLmZpbHRlcihtYXBUeXBlID0+IGNsb25lW21hcFR5cGVdICYmIGNsb25lW21hcFR5cGVdIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAuZm9yRWFjaChtYXBUeXBlID0+IGNsb25lW21hcFR5cGVdID0gT2JqZWN0VXRpbHMuQ2xvbmVUZXh0dXJlKGNsb25lW21hcFR5cGVdLCBkZWVwQ2xvbmUpKTtcclxuICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJlZUpTIGRvZXMgbm90IGNsb25lIGltYWdlIHByb3BlcnR5LCBzbyBpdCBzdGF5cyBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgaW1hZ2UuXHJcbiAgICogV2hlbiBkZWVwQ2xvbmUsIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgaW1hZ2UgYW5kIGNvcGllcyB0aGUgb3JpZ2luYWwgaW1hZ2UgZGF0YSB0byBpdC5cclxuICAgKiBAcGFyYW0gdGV4dHVyZVxyXG4gICAqIEBwYXJhbSBkZWVwQ2xvbmVcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIENsb25lVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlLCBkZWVwQ2xvbmU6IGJvb2xlYW4gPSBmYWxzZSk6IFRleHR1cmUge1xyXG4gICAgY29uc3QgY2xvbmU6IFRleHR1cmUgPSB0ZXh0dXJlLmNsb25lKCk7XHJcbiAgICBpZiAoIWRlZXBDbG9uZSkge1xyXG4gICAgICBjbG9uZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuICAgIGlmICh0ZXh0dXJlLmltYWdlKSB7XHJcbiAgICAgIGlmICh0ZXh0dXJlLmltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCAmJiB0ZXh0dXJlLmltYWdlLnNyYykge1xyXG4gICAgICAgIGNvbnN0IGltZzogSFRNTEltYWdlRWxlbWVudCA9IHRleHR1cmUuaW1hZ2U7XHJcbiAgICAgICAgY29uc3QgbmV3SW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBuZXdJbWFnZS5zcmMgPSBpbWcuc3JjO1xyXG4gICAgICAgIGNsb25lLnNvdXJjZSA9IG5ldyBTb3VyY2UobmV3SW1hZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSB0ZXh0dXJlLmltYWdlO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBuZXdDYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XHJcbiAgICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsb25lLnNvdXJjZSA9IG5ldyBTb3VyY2UobmV3Q2FudmFzKTtcclxuICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmltYWdlLmRhdGEgJiYgKHRleHR1cmUuaW1hZ2UuZGF0YS5zbGljZSB8fCB0ZXh0dXJlLmltYWdlLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBjb25zdCBpbWdEYXRhOiBhbnkgPSB0ZXh0dXJlLmltYWdlO1xyXG4gICAgICAgIGNsb25lLmltYWdlID0ge1xyXG4gICAgICAgICAgLi4uaW1nRGF0YSxcclxuICAgICAgICAgIGRhdGE6IGltZ0RhdGEuZGF0YS5zbGljZSA/IGltZ0RhdGEuZGF0YS5zbGljZSgwKSA6IG5ldyBVaW50OEFycmF5KGltZ0RhdGEuZGF0YSkuc2xpY2UoMCkgLy8gRGVlcCBjb3B5IHRoZSBUeXBlZEFycmF5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2xvbmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbG9uZU9iamVjdDNEKHNvdXJjZTogT2JqZWN0M0QpOiBPYmplY3QzRCB7XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgIHNvdXJjZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY2hpbGQudmlzaWJsZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgbmV3T2JqZWN0LmFkZChjaGlsZC5jbG9uZSgpKTtcclxuICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBPYmplY3RVdGlscy5DbG9uZU9iamVjdDNEKGNoaWxkKTtcclxuICAgICAgICBjbG9uZS5wb3NpdGlvbi5jb3B5KGNoaWxkLnBvc2l0aW9uKTtcclxuICAgICAgICBjbG9uZS5yb3RhdGlvbi5jb3B5KGNoaWxkLnJvdGF0aW9uKTtcclxuICAgICAgICBuZXdPYmplY3QuYWRkKGNsb25lKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBEZWVwQ2xvbmVPYmplY3QzRChzb3VyY2U6IE9iamVjdDNEKTogT2JqZWN0M0Qge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYmplY3QzRCgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xvbmU6IE9iamVjdDNEID0gc291cmNlLmNsb25lKCk7XHJcbiAgICBjbG9uZS50cmF2ZXJzZSgob2JqOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWVzaCAmJiBvYmoubWF0ZXJpYWwpIHtcclxuICAgICAgICBvYmoubWF0ZXJpYWwgPSBPYmplY3RVdGlscy5DbG9uZU1hdGVyaWFsKG9iai5tYXRlcmlhbCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBEaXNwb3NlTWF0ZXJpYWwobWF0ZXJpYWw6IE1hdGVyaWFsIHwgTWF0ZXJpYWxbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcclxuICAgICAgbWF0ZXJpYWwuZm9yRWFjaChtdHJsID0+IE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbChtdHJsKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIG1hdGVyaWFsKSB7XHJcbiAgICAgIGlmIChtYXRlcmlhbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtYXRlcmlhbFtrZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1RleHR1cmUpIHtcclxuICAgICAgICAgIHZhbHVlLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIG1hdGVyaWFsLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRGlzcG9zZU9iamVjdChvYmplY3Q6IE9iamVjdDNEIHwgTWVzaCk6IHZvaWQge1xyXG4gICAgaWYgKCFvYmplY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iamVjdC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgb2JqZWN0LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gdGhpcy5EaXNwb3NlT2JqZWN0KGNoaWxkKSk7XHJcbiAgICB9XHJcbiAgICBPYmplY3RVdGlscy5EaXNwb3NlTm9kZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRQYXJlbnRDdXN0b21PYmplY3QoZWxlbWVudDogYW55KTogT2JqZWN0M0Qge1xyXG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChlbGVtZW50LnBhcmVudCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3RVdGlscy5HZXRQYXJlbnRDdXN0b21PYmplY3QoZWxlbWVudC5wYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgRGlzcG9zZU5vZGUobm9kZTogT2JqZWN0M0QgfCBNZXNoKTogdm9pZCB7XHJcbiAgICBub2RlLnRyYXZlcnNlKChvYmo6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgaWYgKG9iai5nZW9tZXRyeSkge1xyXG4gICAgICAgICAgb2JqLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKG9iai5tYXRlcmlhbCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiAob2JqIGFzIGFueSkuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBvYmouZGlzcG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9yZW1hcEZsb2F0KHY6IG51bWJlciwgbWluMDogbnVtYmVyLCBtYXgwOiBudW1iZXIsIG1pbjE6IG51bWJlciwgbWF4MTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbWluMSArICh2IC0gbWluMCkgLyAobWF4MCAtIG1pbjApICogKG1heDEgLSBtaW4xKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,75 +0,0 @@
1
- import * as THREE from 'three';
2
- export class RelativePositionUtils {
3
- static SetApplicationOffset(element) {
4
- if (element) {
5
- const offset = RelativePositionUtils.GetElementOffset(element);
6
- RelativePositionUtils.appOffsetLeft = offset.x;
7
- RelativePositionUtils.appOffsetTop = offset.y;
8
- }
9
- }
10
- static GetClientMousePosition(event) {
11
- if (event.hasOwnProperty('originalEvent')) {
12
- event = event.originalEvent;
13
- }
14
- let xOffsetEvent = event.offsetX || event.layerX;
15
- let yOffsetEvent = event.offsetY || event.layerY;
16
- const xOffset = event.clientX - xOffsetEvent;
17
- const yOffset = event.clientY - yOffsetEvent;
18
- return new THREE.Vector2(event.clientX - xOffset, event.clientY - yOffset);
19
- }
20
- static GetClientTouchPosition(event, canvas) {
21
- const touch = event.touches[0];
22
- const rect = canvas.getBoundingClientRect();
23
- const xOffset = touch.clientX - rect.left;
24
- const yOffset = touch.clientY - rect.top;
25
- return new THREE.Vector2(xOffset, yOffset);
26
- }
27
- static GetElementRect(element, handleAppOffset) {
28
- let rect;
29
- if (element) {
30
- rect = element.getBoundingClientRect();
31
- // edge fix
32
- if (!rect.x) {
33
- rect.x = rect.left;
34
- }
35
- if (!rect.y) {
36
- rect.y = rect.top;
37
- }
38
- if (handleAppOffset) {
39
- rect.x = rect.x - RelativePositionUtils.appOffsetLeft;
40
- rect.y = rect.y - RelativePositionUtils.appOffsetTop;
41
- }
42
- }
43
- return rect;
44
- }
45
- static GetElementOffset(element) {
46
- let offsetX = 0;
47
- let offsetY = 0;
48
- if (element) {
49
- offsetX += element.offsetLeft;
50
- offsetY += element.offsetTop;
51
- if (element.offsetParent) {
52
- offsetX += RelativePositionUtils.GetParentLeftOffset(element.offsetParent, offsetX);
53
- offsetY += RelativePositionUtils.GetParentTopOffset(element.offsetParent, offsetY);
54
- }
55
- }
56
- return { x: offsetX, y: offsetY };
57
- }
58
- static GetParentLeftOffset(parentOffset, currentOffset) {
59
- currentOffset = currentOffset + parentOffset.offsetLeft;
60
- if (parentOffset.offsetParent) {
61
- return RelativePositionUtils.GetParentLeftOffset(parentOffset.offsetParent, currentOffset);
62
- }
63
- return currentOffset;
64
- }
65
- static GetParentTopOffset(parentOffset, currentOffset) {
66
- currentOffset = currentOffset + parentOffset.offsetTop;
67
- if (parentOffset.offsetParent) {
68
- return RelativePositionUtils.GetParentTopOffset(parentOffset.offsetParent, currentOffset);
69
- }
70
- return currentOffset;
71
- }
72
- }
73
- RelativePositionUtils.appOffsetTop = 0;
74
- RelativePositionUtils.appOffsetLeft = 0;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmUtcG9zaXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25maWd1cmF0b3Ivc3JjL2xpYi91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLE9BQU8scUJBQXFCO0lBS3pCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFZO1FBQzdDLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxNQUFNLEdBQTJCLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZGLHFCQUFxQixDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9DLHFCQUFxQixDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUE2QjtRQUNoRSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDekMsS0FBSyxHQUFJLEtBQWEsQ0FBQyxhQUFhLENBQUM7U0FDdEM7UUFDRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFLLEtBQWEsQ0FBQyxNQUFNLENBQUM7UUFDMUQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSyxLQUFhLENBQUMsTUFBTSxDQUFDO1FBRTFELE1BQU0sT0FBTyxHQUFXLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFXLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBRXJELE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxD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Q0FBQztBQUN6QixtQ0FBYSxHQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGFwcE9mZnNldFRvcDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgc3RhdGljIGFwcE9mZnNldExlZnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0QXBwbGljYXRpb25PZmZzZXQoZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBjb25zdCBvZmZzZXQ6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0gPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0RWxlbWVudE9mZnNldChlbGVtZW50KTtcclxuICAgICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldExlZnQgPSBvZmZzZXQueDtcclxuICAgICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldFRvcCA9IG9mZnNldC55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50IHwgRHJhZ0V2ZW50KTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ29yaWdpbmFsRXZlbnQnKSkge1xyXG4gICAgICBldmVudCA9IChldmVudCBhcyBhbnkpLm9yaWdpbmFsRXZlbnQ7XHJcbiAgICB9XHJcbiAgICBsZXQgeE9mZnNldEV2ZW50ID0gZXZlbnQub2Zmc2V0WCB8fCAoZXZlbnQgYXMgYW55KS5sYXllclg7XHJcbiAgICBsZXQgeU9mZnNldEV2ZW50ID0gZXZlbnQub2Zmc2V0WSB8fCAoZXZlbnQgYXMgYW55KS5sYXllclk7XHJcblxyXG4gICAgY29uc3QgeE9mZnNldDogbnVtYmVyID0gZXZlbnQuY2xpZW50WCAtIHhPZmZzZXRFdmVudDtcclxuICAgIGNvbnN0IHlPZmZzZXQ6IG51bWJlciA9IGV2ZW50LmNsaWVudFkgLSB5T2Zmc2V0RXZlbnQ7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IyKGV2ZW50LmNsaWVudFggLSB4T2Zmc2V0LCBldmVudC5jbGllbnRZIC0geU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldENsaWVudFRvdWNoUG9zaXRpb24oZXZlbnQ6IFRvdWNoRXZlbnQsIGNhbnZhczogYW55KTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICBjb25zdCB0b3VjaDogVG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHhPZmZzZXQ6IG51bWJlciA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQ7XHJcbiAgICBjb25zdCB5T2Zmc2V0OiBudW1iZXIgPSB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3A7XHJcbiAgICByZXR1cm4gbmV3IFRIUkVFLlZlY3RvcjIoeE9mZnNldCwgeU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldEVsZW1lbnRSZWN0KGVsZW1lbnQ6IGFueSwgaGFuZGxlQXBwT2Zmc2V0PzogYm9vbGVhbik6IERPTVJlY3Qge1xyXG4gICAgbGV0IHJlY3Q6IERPTVJlY3Q7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgLy8gZWRnZSBmaXhcclxuICAgICAgaWYgKCFyZWN0LngpIHtcclxuICAgICAgICByZWN0LnggPSByZWN0LmxlZnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFyZWN0LnkpIHtcclxuICAgICAgICByZWN0LnkgPSByZWN0LnRvcDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGFuZGxlQXBwT2Zmc2V0KSB7XHJcbiAgICAgICAgcmVjdC54ID0gcmVjdC54IC0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldExlZnQ7XHJcbiAgICAgICAgcmVjdC55ID0gcmVjdC55IC0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRFbGVtZW50T2Zmc2V0KGVsZW1lbnQ6IGFueSk6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB7XHJcbiAgICBsZXQgb2Zmc2V0WDogbnVtYmVyID0gMDtcclxuICAgIGxldCBvZmZzZXRZOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIG9mZnNldFggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICBvZmZzZXRZICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICBvZmZzZXRYICs9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRQYXJlbnRMZWZ0T2Zmc2V0KGVsZW1lbnQub2Zmc2V0UGFyZW50LCBvZmZzZXRYKTtcclxuICAgICAgICBvZmZzZXRZICs9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRQYXJlbnRUb3BPZmZzZXQoZWxlbWVudC5vZmZzZXRQYXJlbnQsIG9mZnNldFkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3g6IG9mZnNldFgsIHk6IG9mZnNldFl9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgR2V0UGFyZW50TGVmdE9mZnNldChwYXJlbnRPZmZzZXQ6IGFueSwgY3VycmVudE9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgcGFyZW50T2Zmc2V0Lm9mZnNldExlZnQ7XHJcbiAgICBpZiAocGFyZW50T2Zmc2V0Lm9mZnNldFBhcmVudCkge1xyXG4gICAgICByZXR1cm4gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldFBhcmVudExlZnRPZmZzZXQocGFyZW50T2Zmc2V0Lm9mZnNldFBhcmVudCwgY3VycmVudE9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE9mZnNldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEdldFBhcmVudFRvcE9mZnNldChwYXJlbnRPZmZzZXQ6IGFueSwgY3VycmVudE9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgcGFyZW50T2Zmc2V0Lm9mZnNldFRvcDtcclxuICAgIGlmIChwYXJlbnRPZmZzZXQub2Zmc2V0UGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0UGFyZW50VG9wT2Zmc2V0KHBhcmVudE9mZnNldC5vZmZzZXRQYXJlbnQsIGN1cnJlbnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,15 +0,0 @@
1
- export class RotationHelper {
2
- static CanRotateX(value) {
3
- return (value & 2) === 2;
4
- }
5
- static CanRotateY(value) {
6
- return (value & 4) === 4;
7
- }
8
- static CanRotateZ(value) {
9
- return (value & 8) === 8;
10
- }
11
- static Default180(value) {
12
- return (value & 1) === 1;
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24taGVscGVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvcm90YXRpb24taGVscGVyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBRWxCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUNwQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUNwQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgUm90YXRpb25IZWxwZXIge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIENhblJvdGF0ZVgodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmIDIpID09PSAyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDYW5Sb3RhdGVZKHZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodmFsdWUgJiA0KSA9PT0gNDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ2FuUm90YXRlWih2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgOCkgPT09IDg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIERlZmF1bHQxODAodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmIDEpID09PSAxO1xyXG4gIH1cclxuXHJcbn1cclxuIl19