@colijnit/configurator 260.1.2 → 261.1.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 (553) hide show
  1. package/bundles/colijnit-configurator.umd.js +18067 -1889
  2. package/bundles/colijnit-configurator.umd.js.map +1 -1
  3. package/colijnit-configurator.d.ts +2 -6
  4. package/esm2015/colijnit-configurator.js +2 -7
  5. package/esm2015/lib/builder.js +795 -0
  6. package/esm2015/lib/components/answer-card/answer-card.component.js +313 -0
  7. package/esm2015/lib/components/answer-card/answer-card.module.js +50 -0
  8. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +182 -0
  9. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +34 -0
  10. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +490 -0
  11. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +61 -0
  12. package/esm2015/lib/components/color-filter/color-filter.component.js +59 -0
  13. package/esm2015/lib/components/color-filter/color-filter.module.js +26 -0
  14. package/esm2015/lib/components/configurator/configurator.component.js +133 -0
  15. package/esm2015/lib/components/configurator/configurator.module.js +42 -0
  16. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +222 -0
  17. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +48 -0
  18. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +82 -0
  19. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +163 -0
  20. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +49 -0
  21. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +33 -0
  22. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +60 -0
  23. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +17 -0
  24. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +46 -0
  25. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +26 -0
  26. package/esm2015/lib/components/element-buttons/element-buttons.component.js +168 -0
  27. package/esm2015/lib/components/element-buttons/element-buttons.module.js +30 -0
  28. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +186 -0
  29. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +34 -0
  30. package/esm2015/lib/components/image-zoom/image-zoom.component.js +61 -0
  31. package/esm2015/lib/components/image-zoom/image-zoom.module.js +30 -0
  32. package/esm2015/lib/components/lite-selector/lite-selector.component.js +206 -0
  33. package/esm2015/lib/components/lite-selector/lite-selector.module.js +34 -0
  34. package/esm2015/lib/components/product-configurator/product-configurator.component.js +184 -0
  35. package/esm2015/lib/components/product-configurator/product-configurator.module.js +72 -0
  36. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +237 -0
  37. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +38 -0
  38. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +284 -0
  39. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +42 -0
  40. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +72 -0
  41. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +34 -0
  42. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +82 -0
  43. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +30 -0
  44. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +80 -0
  45. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +34 -0
  46. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +93 -0
  47. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +34 -0
  48. package/esm2015/lib/components/progress-bar/progress-bar.component.js +55 -0
  49. package/esm2015/lib/components/progress-bar/progress-bar.module.js +29 -0
  50. package/esm2015/lib/components/scene-options/scene-options.component.js +164 -0
  51. package/esm2015/lib/components/scene-options/scene-options.module.js +38 -0
  52. package/esm2015/lib/components/selections-summary/selections-summary.component.js +163 -0
  53. package/esm2015/lib/components/selections-summary/selections-summary.module.js +45 -0
  54. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +171 -0
  55. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +34 -0
  56. package/esm2015/lib/components/slideout/slideout.component.js +83 -0
  57. package/esm2015/lib/components/slideout/slideout.module.js +17 -0
  58. package/esm2015/lib/components/summary-line/summary-line.component.js +273 -0
  59. package/esm2015/lib/components/summary-line/summary-line.module.js +44 -0
  60. package/esm2015/lib/components/tag-filter/tag-filter.component.js +39 -0
  61. package/esm2015/lib/components/tag-filter/tag-filter.module.js +21 -0
  62. package/esm2015/lib/components/threedselector/threedselector.component.js +155 -0
  63. package/esm2015/lib/components/threedselector/threedselector.module.js +34 -0
  64. package/esm2015/lib/core/helper/variation-helper.js +553 -0
  65. package/esm2015/lib/core/shader/floor-fade.shader.js +33 -0
  66. package/esm2015/lib/core/textures/depth-data-texture.js +19 -0
  67. package/esm2015/lib/directives/directives.module.js +26 -0
  68. package/esm2015/lib/directives/visibility-observer-master.directive.js +53 -0
  69. package/esm2015/lib/directives/visibility-observer.directive.js +54 -0
  70. package/esm2015/lib/enum/ar-feature.enum.js +14 -0
  71. package/esm2015/lib/enum/configuration-key.enum.js +41 -0
  72. package/esm2015/lib/enum/configuration-template.enum.js +6 -0
  73. package/esm2015/lib/enum/device-size-type.js +7 -0
  74. package/esm2015/lib/enum/device-tier.enum.js +7 -0
  75. package/esm2015/lib/enum/icon.enum.js +113 -0
  76. package/esm2015/lib/enum/item-type.enum.js +23 -0
  77. package/esm2015/lib/enum/light.enum.js +9 -0
  78. package/esm2015/lib/enum/navigator-type.enum.js +6 -0
  79. package/esm2015/lib/enum/output-encoding.enum.js +9 -0
  80. package/esm2015/lib/enum/result-type.enum.js +21 -0
  81. package/esm2015/lib/enum/scene-event.enum.js +12 -0
  82. package/esm2015/lib/enum/shadow-map-type.enum.js +8 -0
  83. package/esm2015/lib/enum/texture-type.js +9 -0
  84. package/esm2015/lib/enum/tone-mapping-local.enum.js +12 -0
  85. package/esm2015/lib/enum/view-mode.enum.js +7 -0
  86. package/esm2015/lib/enum/xr-mode.enum.js +6 -0
  87. package/esm2015/lib/environments/environment.js +8 -0
  88. package/esm2015/lib/interfaces/aa-options.interface.js +2 -0
  89. package/esm2015/lib/interfaces/adjustable-element.interface.js +2 -0
  90. package/esm2015/lib/interfaces/ao-options.interface.js +2 -0
  91. package/esm2015/lib/interfaces/changes.interface.js +2 -0
  92. package/esm2015/lib/interfaces/configuration-data.interface.js +2 -0
  93. package/esm2015/lib/interfaces/light-preset.interface.js +2 -0
  94. package/esm2015/lib/interfaces/post-processing-setting.interface.js +2 -0
  95. package/esm2015/lib/interfaces/scene-option-button.interface.js +6 -0
  96. package/esm2015/lib/interfaces/screen-size-info.js +2 -0
  97. package/esm2015/lib/interfaces/setting.interface.js +2 -0
  98. package/esm2015/lib/interfaces/texture.interface.js +2 -0
  99. package/esm2015/lib/interfaces/vignette-options.interface.js +2 -0
  100. package/esm2015/lib/model/ar-position-indicator.js +18 -0
  101. package/esm2015/lib/model/camera-settings.js +14 -0
  102. package/esm2015/lib/model/configuration-result-object.js +6 -0
  103. package/esm2015/lib/model/configurator-error-message.js +9 -0
  104. package/esm2015/lib/model/configurator-settings.js +25 -0
  105. package/esm2015/lib/model/custom-button.js +16 -0
  106. package/esm2015/lib/model/factory.js +28 -0
  107. package/esm2015/lib/model/icon.js +112 -0
  108. package/esm2015/lib/model/intersected-objects.js +7 -0
  109. package/esm2015/lib/model/light-preset.js +73 -0
  110. package/esm2015/lib/model/light-properties.js +45 -0
  111. package/esm2015/lib/model/material.js +11 -0
  112. package/esm2015/lib/model/metadata.js +2 -0
  113. package/esm2015/lib/model/render-parameters.js +16 -0
  114. package/esm2015/lib/model/setting-options.js +71 -0
  115. package/esm2015/lib/model/settings.js +16 -0
  116. package/esm2015/lib/model/shadow-properties.js +10 -0
  117. package/esm2015/lib/model/skin.js +3 -0
  118. package/esm2015/lib/model/texture.js +76 -0
  119. package/esm2015/lib/model/variation-settings.js +54 -0
  120. package/esm2015/lib/model/variation.js +3 -0
  121. package/esm2015/lib/model/xr-reticle.js +79 -0
  122. package/esm2015/lib/modules/render/enum/scene-type.enum.js +6 -0
  123. package/esm2015/lib/modules/render/model/ar-parameters.js +12 -0
  124. package/esm2015/lib/modules/render/model/scene-setting.js +6 -0
  125. package/esm2015/lib/modules/render/model/scene-settings.js +3 -0
  126. package/esm2015/lib/pipes/append.pipe.js +21 -0
  127. package/esm2015/lib/pipes/google-translate.pipe.js +21 -0
  128. package/esm2015/lib/pipes/localize.pipe.js +28 -0
  129. package/esm2015/lib/pipes/pipes.module.js +41 -0
  130. package/esm2015/lib/pipes/prepend.pipe.js +21 -0
  131. package/esm2015/lib/pipes/strip-html.pipe.js +17 -0
  132. package/esm2015/lib/services/app-event.service.js +36 -0
  133. package/esm2015/lib/services/app-initializer.service.js +27 -0
  134. package/esm2015/lib/services/ar.service.js +844 -0
  135. package/esm2015/lib/services/build-furniture-base.service.js +1181 -0
  136. package/esm2015/lib/services/build-furniture-without-scene.service.js +86 -0
  137. package/esm2015/lib/services/build-furniture.service.js +169 -0
  138. package/esm2015/lib/services/bundle-initialzer.service.js +113 -0
  139. package/esm2015/lib/services/camera.service.js +123 -0
  140. package/esm2015/lib/services/configuration.service.js +79 -0
  141. package/esm2015/lib/services/configurator-connector.service.js +830 -0
  142. package/esm2015/lib/services/configurator.service.js +285 -0
  143. package/esm2015/lib/services/configuring.service.js +119 -0
  144. package/esm2015/lib/services/controls.js +799 -0
  145. package/esm2015/lib/services/debug.service.js +43 -0
  146. package/esm2015/lib/services/dictionary.service.js +65 -0
  147. package/esm2015/lib/services/dynamic-camera.service.js +96 -0
  148. package/esm2015/lib/services/floor-plane.service.js +252 -0
  149. package/esm2015/lib/services/font.service.js +27 -0
  150. package/esm2015/lib/services/google-translate.service.js +79 -0
  151. package/esm2015/lib/services/icon-cache.service.js +44 -0
  152. package/esm2015/lib/services/intersection.service.js +47 -0
  153. package/esm2015/lib/services/item.service.js +75 -0
  154. package/esm2015/lib/services/json-utils.service.js +48 -0
  155. package/esm2015/lib/services/light-creation.service.js +35 -0
  156. package/esm2015/lib/services/light-presets.service.js +157 -0
  157. package/esm2015/lib/services/lights.service.js +146 -0
  158. package/esm2015/lib/services/load-furniture-base.service.js +164 -0
  159. package/esm2015/lib/services/load-furniture-without-scene.service.js +45 -0
  160. package/esm2015/lib/services/load-furniture.service.js +72 -0
  161. package/esm2015/lib/services/loader.service.js +32 -0
  162. package/esm2015/lib/services/locator.service.js +11 -0
  163. package/esm2015/lib/services/message-board.service.js +50 -0
  164. package/esm2015/lib/services/post-processing.service.js +378 -0
  165. package/esm2015/lib/services/product-configurator.service.js +16 -0
  166. package/esm2015/lib/services/progress.service.js +20 -0
  167. package/esm2015/lib/services/scene-event.service.js +246 -0
  168. package/esm2015/lib/services/scene-options.service.js +24 -0
  169. package/esm2015/lib/services/scene.service.js +313 -0
  170. package/esm2015/lib/services/screen-size-analysis.service.js +97 -0
  171. package/esm2015/lib/services/settings.service.js +142 -0
  172. package/esm2015/lib/services/switch-build-furniture.service.js +37 -0
  173. package/esm2015/lib/services/switch-load-furniture.service.js +35 -0
  174. package/esm2015/lib/services/threedselector.service.js +72 -0
  175. package/esm2015/lib/services/utils.service.js +207 -0
  176. package/esm2015/lib/services/variation-cache.service.js +143 -0
  177. package/esm2015/lib/services/variation.service.js +490 -0
  178. package/esm2015/lib/services/view-mode.service.js +37 -0
  179. package/esm2015/lib/services/vr.service.js +191 -0
  180. package/esm2015/lib/services/xr.service.js +294 -0
  181. package/esm2015/lib/utils/asset.utils.js +120 -0
  182. package/esm2015/lib/utils/base-utils.js +9 -0
  183. package/esm2015/lib/utils/color.utils.js +30 -0
  184. package/esm2015/lib/utils/debug.utils.js +9 -0
  185. package/esm2015/lib/utils/device.utils.js +25 -0
  186. package/esm2015/lib/utils/file.utils.js +167 -0
  187. package/esm2015/lib/utils/image.utils.js +61 -0
  188. package/esm2015/lib/utils/json-parser.utils.js +180 -0
  189. package/esm2015/lib/utils/material.utils.js +433 -0
  190. package/esm2015/lib/utils/object.utils.js +360 -0
  191. package/esm2015/lib/utils/relative-position.utils.js +75 -0
  192. package/esm2015/lib/utils/rotation-helper.utils.js +15 -0
  193. package/esm2015/lib/utils/scene-3d.utils.js +213 -0
  194. package/esm2015/lib/utils/scene-utils.js +191 -0
  195. package/esm2015/lib/utils/text-utils.js +68 -0
  196. package/esm2015/lib/utils/threed.utils.js +281 -0
  197. package/esm2015/lib/utils/variation-utils.js +459 -0
  198. package/esm2015/public-api.js +65 -0
  199. package/fesm2015/colijnit-configurator.js +17538 -1477
  200. package/fesm2015/colijnit-configurator.js.map +1 -1
  201. package/{app → lib}/builder.d.ts +9 -1
  202. package/lib/components/answer-card/answer-card.component.d.ts +58 -0
  203. package/lib/components/answer-card/answer-card.module.d.ts +11 -0
  204. package/lib/components/answer-card/style/_layout.scss +88 -0
  205. package/lib/components/answer-card/style/_material-definition.scss +3 -0
  206. package/lib/components/answer-card/style/_theme.scss +67 -0
  207. package/lib/components/answer-card/style/material.scss +2 -0
  208. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +38 -0
  209. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +10 -0
  210. package/lib/components/answer-info-dialog/style/_layout.scss +88 -0
  211. package/lib/components/answer-info-dialog/style/_material-definition.scss +3 -0
  212. package/lib/components/answer-info-dialog/style/_theme.scss +44 -0
  213. package/lib/components/answer-info-dialog/style/material.scss +3 -0
  214. package/lib/components/answers-slideout/answers-slideout.component.d.ts +86 -0
  215. package/lib/components/answers-slideout/answers-slideout.module.d.ts +16 -0
  216. package/lib/components/answers-slideout/style/_layout.scss +198 -0
  217. package/lib/components/answers-slideout/style/_material-definition.scss +3 -0
  218. package/lib/components/answers-slideout/style/_theme.scss +54 -0
  219. package/lib/components/answers-slideout/style/material.scss +3 -0
  220. package/lib/components/color-filter/color-filter.component.d.ts +20 -0
  221. package/lib/components/color-filter/color-filter.module.d.ts +8 -0
  222. package/lib/components/color-filter/style/_layout.scss +41 -0
  223. package/lib/components/color-filter/style/_material-definition.scss +3 -0
  224. package/lib/components/color-filter/style/_theme.scss +7 -0
  225. package/lib/components/color-filter/style/material.scss +3 -0
  226. package/lib/components/configurator/configurator.component.d.ts +37 -0
  227. package/lib/components/configurator/configurator.module.d.ts +12 -0
  228. package/lib/components/configurator/style/_layout.scss +7 -0
  229. package/lib/components/configurator/style/_material-definition.scss +3 -0
  230. package/lib/components/configurator/style/_theme.scss +7 -0
  231. package/lib/components/configurator/style/material.scss +3 -0
  232. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +30 -0
  233. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +13 -0
  234. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +16 -0
  235. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +26 -0
  236. package/lib/components/configurator-dialog/style/_layout.scss +129 -0
  237. package/lib/components/configurator-dialog/style/_material-definition.scss +4 -0
  238. package/lib/components/configurator-dialog/style/_theme.scss +89 -0
  239. package/lib/components/configurator-dialog/style/material.scss +3 -0
  240. package/lib/components/configurator-loader/configurator-loader.component.d.ts +7 -0
  241. package/lib/components/configurator-loader/configurator-loader.module.d.ts +9 -0
  242. package/lib/components/configurator-loader/style/_layout.scss +72 -0
  243. package/lib/components/configurator-loader/style/_material-definition.scss +5 -0
  244. package/lib/components/configurator-loader/style/_theme.scss +26 -0
  245. package/lib/components/configurator-loader/style/material.scss +14 -0
  246. package/lib/components/configurator-scene/configurator-scene.component.d.ts +24 -0
  247. package/lib/components/configurator-scene/configurator-scene.module.d.ts +7 -0
  248. package/lib/components/configurator-scene/style/_layout.scss +22 -0
  249. package/lib/components/configurator-scene/style/_material-definition.scss +3 -0
  250. package/lib/components/configurator-scene/style/_theme.scss +7 -0
  251. package/lib/components/configurator-scene/style/material.scss +3 -0
  252. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +7 -0
  253. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +8 -0
  254. package/lib/components/configurator-scene-loader/style/_layout.scss +72 -0
  255. package/lib/components/configurator-scene-loader/style/_material-definition.scss +5 -0
  256. package/lib/components/configurator-scene-loader/style/_theme.scss +26 -0
  257. package/lib/components/configurator-scene-loader/style/material.scss +14 -0
  258. package/lib/components/element-buttons/element-buttons.component.d.ts +32 -0
  259. package/lib/components/element-buttons/element-buttons.module.d.ts +9 -0
  260. package/lib/components/element-buttons/style/_layout.scss +52 -0
  261. package/lib/components/element-buttons/style/_material-definition.scss +3 -0
  262. package/lib/components/element-buttons/style/_theme.scss +23 -0
  263. package/lib/components/element-buttons/style/material.scss +3 -0
  264. package/lib/components/element-toolbar/element-toolbar.component.d.ts +27 -0
  265. package/lib/components/element-toolbar/element-toolbar.component.scss +59 -0
  266. package/lib/components/element-toolbar/element-toolbar.module.d.ts +10 -0
  267. package/lib/components/element-toolbar/style/_layout.scss +107 -0
  268. package/lib/components/element-toolbar/style/_material-definition.scss +3 -0
  269. package/lib/components/element-toolbar/style/_theme.scss +47 -0
  270. package/lib/components/element-toolbar/style/material.scss +3 -0
  271. package/lib/components/image-zoom/image-zoom.component.d.ts +15 -0
  272. package/lib/components/image-zoom/image-zoom.module.d.ts +9 -0
  273. package/lib/components/image-zoom/style/_layout.scss +51 -0
  274. package/lib/components/image-zoom/style/_material-definition.scss +3 -0
  275. package/lib/components/image-zoom/style/_theme.scss +17 -0
  276. package/lib/components/image-zoom/style/material.scss +3 -0
  277. package/lib/components/lite-selector/lite-selector.component.d.ts +40 -0
  278. package/lib/components/lite-selector/lite-selector.module.d.ts +10 -0
  279. package/lib/components/lite-selector/style/_layout.scss +21 -0
  280. package/lib/components/lite-selector/style/_material-definition.scss +3 -0
  281. package/lib/components/lite-selector/style/_theme.scss +7 -0
  282. package/lib/components/lite-selector/style/material.scss +3 -0
  283. package/lib/components/product-configurator/product-configurator.component.d.ts +50 -0
  284. package/lib/components/product-configurator/product-configurator.module.d.ts +15 -0
  285. package/lib/components/product-configurator/style/_layout.scss +46 -0
  286. package/lib/components/product-configurator/style/_material-definition.scss +3 -0
  287. package/lib/components/product-configurator/style/_theme.scss +22 -0
  288. package/lib/components/product-configurator/style/material.scss +3 -0
  289. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +35 -0
  290. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +11 -0
  291. package/lib/components/product-configurator-selector/style/_layout.scss +145 -0
  292. package/lib/components/product-configurator-selector/style/_material-definition.scss +3 -0
  293. package/lib/components/product-configurator-selector/style/_theme.scss +57 -0
  294. package/lib/components/product-configurator-selector/style/material.scss +3 -0
  295. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +31 -0
  296. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +13 -0
  297. package/lib/components/product-configurator-selector-option/style/_layout.scss +7 -0
  298. package/lib/components/product-configurator-selector-option/style/_material-definition.scss +3 -0
  299. package/lib/components/product-configurator-selector-option/style/_theme.scss +7 -0
  300. package/lib/components/product-configurator-selector-option/style/material.scss +3 -0
  301. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +20 -0
  302. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +10 -0
  303. package/lib/components/product-configurator-selector-option-button/style/_layout.scss +28 -0
  304. package/lib/components/product-configurator-selector-option-button/style/_material-definition.scss +3 -0
  305. package/lib/components/product-configurator-selector-option-button/style/_theme.scss +33 -0
  306. package/lib/components/product-configurator-selector-option-button/style/material.scss +3 -0
  307. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +20 -0
  308. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +10 -0
  309. package/lib/components/product-configurator-selector-option-checkbox/style/_layout.scss +28 -0
  310. package/lib/components/product-configurator-selector-option-checkbox/style/_material-definition.scss +3 -0
  311. package/lib/components/product-configurator-selector-option-checkbox/style/_theme.scss +27 -0
  312. package/lib/components/product-configurator-selector-option-checkbox/style/material.scss +3 -0
  313. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +21 -0
  314. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +10 -0
  315. package/lib/components/product-configurator-selector-option-dropdown/style/_layout.scss +34 -0
  316. package/lib/components/product-configurator-selector-option-dropdown/style/_material-definition.scss +3 -0
  317. package/lib/components/product-configurator-selector-option-dropdown/style/_theme.scss +28 -0
  318. package/lib/components/product-configurator-selector-option-dropdown/style/material.scss +3 -0
  319. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +21 -0
  320. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +10 -0
  321. package/lib/components/product-configurator-selector-option-tile/style/_layout.scss +58 -0
  322. package/lib/components/product-configurator-selector-option-tile/style/_material-definition.scss +3 -0
  323. package/lib/components/product-configurator-selector-option-tile/style/_theme.scss +56 -0
  324. package/lib/components/product-configurator-selector-option-tile/style/material.scss +3 -0
  325. package/lib/components/progress-bar/progress-bar.component.d.ts +10 -0
  326. package/lib/components/progress-bar/progress-bar.component.scss +14 -0
  327. package/lib/components/progress-bar/progress-bar.module.d.ts +8 -0
  328. package/lib/components/progress-bar/style/_layout.scss +18 -0
  329. package/lib/components/progress-bar/style/_material-definition.scss +3 -0
  330. package/lib/components/progress-bar/style/_theme.scss +10 -0
  331. package/lib/components/progress-bar/style/material.scss +3 -0
  332. package/lib/components/scene-options/scene-options.component.d.ts +24 -0
  333. package/lib/components/scene-options/scene-options.module.d.ts +11 -0
  334. package/lib/components/scene-options/style/_layout.scss +52 -0
  335. package/lib/components/scene-options/style/_material-definition.scss +3 -0
  336. package/lib/components/scene-options/style/_theme.scss +7 -0
  337. package/lib/components/scene-options/style/material.scss +3 -0
  338. package/lib/components/selections-summary/selections-summary.component.d.ts +38 -0
  339. package/lib/components/selections-summary/selections-summary.module.d.ts +12 -0
  340. package/lib/components/selections-summary/style/_layout.scss +87 -0
  341. package/lib/components/selections-summary/style/_material-definition.scss +5 -0
  342. package/lib/components/selections-summary/style/_theme.scss +13 -0
  343. package/lib/components/selections-summary/style/material.scss +3 -0
  344. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +27 -0
  345. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +10 -0
  346. package/lib/components/selections-summary-line/style/_layout.scss +12 -0
  347. package/lib/components/selections-summary-line/style/_material-definition.scss +4 -0
  348. package/lib/components/selections-summary-line/style/_theme.scss +12 -0
  349. package/lib/components/selections-summary-line/style/material.scss +3 -0
  350. package/lib/components/slideout/slideout.component.d.ts +22 -0
  351. package/lib/components/slideout/slideout.module.d.ts +7 -0
  352. package/lib/components/slideout/style/_layout.scss +27 -0
  353. package/lib/components/slideout/style/_material-definition.scss +3 -0
  354. package/lib/components/slideout/style/_theme.scss +5 -0
  355. package/lib/components/slideout/style/material.scss +3 -0
  356. package/lib/components/summary-line/style/_layout.scss +137 -0
  357. package/lib/components/summary-line/style/_material-definition.scss +4 -0
  358. package/lib/components/summary-line/style/_theme.scss +56 -0
  359. package/lib/components/summary-line/style/material.scss +3 -0
  360. package/lib/components/summary-line/summary-line.component.d.ts +50 -0
  361. package/lib/components/summary-line/summary-line.module.d.ts +11 -0
  362. package/lib/components/tag-filter/style/_layout.scss +14 -0
  363. package/lib/components/tag-filter/style/_material-definition.scss +3 -0
  364. package/lib/components/tag-filter/style/_theme.scss +7 -0
  365. package/lib/components/tag-filter/style/material.scss +3 -0
  366. package/lib/components/tag-filter/tag-filter.component.d.ts +9 -0
  367. package/lib/components/tag-filter/tag-filter.module.d.ts +7 -0
  368. package/lib/components/threedselector/style/_layout.scss +32 -0
  369. package/lib/components/threedselector/style/_material-definition.scss +3 -0
  370. package/lib/components/threedselector/style/_theme.scss +7 -0
  371. package/lib/components/threedselector/style/material.scss +9 -0
  372. package/lib/components/threedselector/threedselector.component.d.ts +38 -0
  373. package/lib/components/threedselector/threedselector.module.d.ts +10 -0
  374. package/{helper → lib/core/helper}/variation-helper.d.ts +2 -2
  375. package/lib/core/shader/floor-fade.shader.d.ts +5 -0
  376. package/lib/core/textures/depth-data-texture.d.ts +5 -0
  377. package/lib/directives/directives.module.d.ts +8 -0
  378. package/{app → lib}/directives/visibility-observer-master.directive.d.ts +3 -0
  379. package/{app → lib}/directives/visibility-observer.directive.d.ts +3 -0
  380. package/lib/enum/ar-feature.enum.d.ts +12 -0
  381. package/lib/enum/configuration-key.enum.d.ts +39 -0
  382. package/lib/enum/configuration-template.enum.d.ts +4 -0
  383. package/lib/enum/device-size-type.d.ts +5 -0
  384. package/lib/enum/device-tier.enum.d.ts +5 -0
  385. package/lib/enum/icon.enum.d.ts +111 -0
  386. package/lib/enum/item-type.enum.d.ts +21 -0
  387. package/lib/enum/light.enum.d.ts +7 -0
  388. package/lib/enum/navigator-type.enum.d.ts +4 -0
  389. package/lib/enum/output-encoding.enum.d.ts +7 -0
  390. package/lib/enum/result-type.enum.d.ts +19 -0
  391. package/lib/enum/scene-event.enum.d.ts +10 -0
  392. package/lib/enum/shadow-map-type.enum.d.ts +6 -0
  393. package/lib/enum/texture-type.d.ts +7 -0
  394. package/lib/enum/tone-mapping-local.enum.d.ts +10 -0
  395. package/lib/enum/view-mode.enum.d.ts +5 -0
  396. package/lib/enum/xr-mode.enum.d.ts +4 -0
  397. package/lib/environments/environment.d.ts +4 -0
  398. package/lib/interfaces/aa-options.interface.d.ts +4 -0
  399. package/lib/interfaces/adjustable-element.interface.d.ts +5 -0
  400. package/lib/interfaces/ao-options.interface.d.ts +18 -0
  401. package/lib/interfaces/changes.interface.d.ts +9 -0
  402. package/lib/interfaces/configuration-data.interface.d.ts +40 -0
  403. package/lib/interfaces/light-preset.interface.d.ts +22 -0
  404. package/lib/interfaces/post-processing-setting.interface.d.ts +11 -0
  405. package/lib/interfaces/scene-option-button.interface.d.ts +19 -0
  406. package/lib/interfaces/screen-size-info.d.ts +10 -0
  407. package/lib/interfaces/setting.interface.d.ts +8 -0
  408. package/lib/interfaces/texture.interface.d.ts +44 -0
  409. package/lib/interfaces/vignette-options.interface.d.ts +4 -0
  410. package/lib/model/ar-position-indicator.d.ts +4 -0
  411. package/lib/model/camera-settings.d.ts +12 -0
  412. package/lib/model/configuration-result-object.d.ts +30 -0
  413. package/lib/model/configurator-error-message.d.ts +8 -0
  414. package/lib/model/configurator-settings.d.ts +62 -0
  415. package/lib/model/custom-button.d.ts +10 -0
  416. package/lib/model/factory.d.ts +5 -0
  417. package/lib/model/icon.d.ts +4 -0
  418. package/lib/model/intersected-objects.d.ts +6 -0
  419. package/lib/model/light-preset.d.ts +33 -0
  420. package/lib/model/light-properties.d.ts +25 -0
  421. package/lib/model/material.d.ts +41 -0
  422. package/lib/model/metadata.d.ts +78 -0
  423. package/lib/model/render-parameters.d.ts +12 -0
  424. package/lib/model/setting-options.d.ts +67 -0
  425. package/lib/model/settings.d.ts +10 -0
  426. package/lib/model/shadow-properties.d.ts +7 -0
  427. package/lib/model/skin.d.ts +15 -0
  428. package/lib/model/texture.d.ts +52 -0
  429. package/{model → lib/model}/variation-settings.d.ts +9 -8
  430. package/{model → lib/model}/variation.d.ts +2 -1
  431. package/lib/model/xr-reticle.d.ts +17 -0
  432. package/lib/modules/render/enum/scene-type.enum.d.ts +4 -0
  433. package/lib/modules/render/model/ar-parameters.d.ts +9 -0
  434. package/lib/modules/render/model/scene-setting.d.ts +13 -0
  435. package/lib/modules/render/model/scene-settings.d.ts +4 -0
  436. package/lib/pipes/append.pipe.d.ts +7 -0
  437. package/lib/pipes/google-translate.pipe.d.ts +11 -0
  438. package/lib/pipes/localize.pipe.d.ts +10 -0
  439. package/lib/pipes/pipes.module.d.ts +11 -0
  440. package/lib/pipes/prepend.pipe.d.ts +7 -0
  441. package/lib/pipes/strip-html.pipe.d.ts +7 -0
  442. package/lib/services/app-event.service.d.ts +32 -0
  443. package/lib/services/app-initializer.service.d.ts +14 -0
  444. package/lib/services/ar.service.d.ts +120 -0
  445. package/lib/services/build-furniture-base.service.d.ts +117 -0
  446. package/lib/services/build-furniture-without-scene.service.d.ts +14 -0
  447. package/lib/services/build-furniture.service.d.ts +14 -0
  448. package/lib/services/bundle-initialzer.service.d.ts +45 -0
  449. package/lib/services/camera.service.d.ts +44 -0
  450. package/lib/services/configuration.service.d.ts +18 -0
  451. package/lib/services/configurator-connector.service.d.ts +140 -0
  452. package/lib/services/configurator.service.d.ts +62 -0
  453. package/lib/services/configuring.service.d.ts +46 -0
  454. package/lib/services/controls.d.ts +11 -0
  455. package/lib/services/debug.service.d.ts +16 -0
  456. package/lib/services/dictionary.service.d.ts +15 -0
  457. package/lib/services/dynamic-camera.service.d.ts +21 -0
  458. package/lib/services/floor-plane.service.d.ts +47 -0
  459. package/lib/services/font.service.d.ts +10 -0
  460. package/lib/services/google-translate.service.d.ts +26 -0
  461. package/lib/services/icon-cache.service.d.ts +21 -0
  462. package/lib/services/intersection.service.d.ts +11 -0
  463. package/lib/services/item.service.d.ts +18 -0
  464. package/lib/services/json-utils.service.d.ts +7 -0
  465. package/lib/services/light-creation.service.d.ts +9 -0
  466. package/lib/services/light-presets.service.d.ts +34 -0
  467. package/lib/services/lights.service.d.ts +34 -0
  468. package/lib/services/load-furniture-base.service.d.ts +37 -0
  469. package/lib/services/load-furniture-without-scene.service.d.ts +9 -0
  470. package/lib/services/load-furniture.service.d.ts +9 -0
  471. package/lib/services/loader.service.d.ts +11 -0
  472. package/lib/services/locator.service.d.ts +7 -0
  473. package/lib/services/message-board.service.d.ts +18 -0
  474. package/lib/services/post-processing.service.d.ts +74 -0
  475. package/lib/services/product-configurator.service.d.ts +11 -0
  476. package/lib/services/progress.service.d.ts +9 -0
  477. package/lib/services/scene-event.service.d.ts +72 -0
  478. package/lib/services/scene-options.service.d.ts +11 -0
  479. package/lib/services/scene.service.d.ts +71 -0
  480. package/lib/services/screen-size-analysis.service.d.ts +32 -0
  481. package/lib/services/settings.service.d.ts +24 -0
  482. package/lib/services/switch-build-furniture.service.d.ts +21 -0
  483. package/lib/services/switch-load-furniture.service.d.ts +21 -0
  484. package/lib/services/threedselector.service.d.ts +17 -0
  485. package/lib/services/utils.service.d.ts +24 -0
  486. package/lib/services/variation-cache.service.d.ts +23 -0
  487. package/lib/services/variation.service.d.ts +26 -0
  488. package/lib/services/view-mode.service.d.ts +17 -0
  489. package/lib/services/vr.service.d.ts +42 -0
  490. package/lib/services/xr.service.d.ts +56 -0
  491. package/lib/style/_mixin.scss +9 -0
  492. package/lib/style/configurator-globals.scss +21 -0
  493. package/lib/style/template_variables.scss +37 -0
  494. package/lib/utils/color.utils.d.ts +8 -0
  495. package/lib/utils/debug.utils.d.ts +3 -0
  496. package/lib/utils/device.utils.d.ts +7 -0
  497. package/{utils → lib/utils}/file.utils.d.ts +3 -0
  498. package/{utils → lib/utils}/image.utils.d.ts +2 -3
  499. package/lib/utils/json-parser.utils.d.ts +9 -0
  500. package/lib/utils/material.utils.d.ts +34 -0
  501. package/lib/utils/object.utils.d.ts +32 -0
  502. package/lib/utils/relative-position.utils.d.ts +12 -0
  503. package/lib/utils/rotation-helper.utils.d.ts +6 -0
  504. package/lib/utils/scene-3d.utils.d.ts +8 -0
  505. package/lib/utils/text-utils.d.ts +4 -0
  506. package/{utils → lib/utils}/threed.utils.d.ts +7 -3
  507. package/{utils → lib/utils}/variation-utils.d.ts +4 -2
  508. package/package.json +17 -30
  509. package/public-api.d.ts +60 -0
  510. package/README.md +0 -28
  511. package/app/components/answers/answer/answer.component.d.ts +0 -11
  512. package/app/components/answers/answers.component.d.ts +0 -8
  513. package/app/components/answers/answers.module.d.ts +0 -2
  514. package/app/components/selections/selections.component.d.ts +0 -21
  515. package/app/components/selections/selections.module.d.ts +0 -2
  516. package/app/components/shared/loader/loader.component.d.ts +0 -2
  517. package/app/components/shared/shared.module.d.ts +0 -2
  518. package/app/services/configurator.service.d.ts +0 -19
  519. package/app/services/image-cache.service.d.ts +0 -10
  520. package/app/utils/object.utils.d.ts +0 -7
  521. package/colijnit-configurator.metadata.json +0 -1
  522. package/esm2015/app/builder.js +0 -706
  523. package/esm2015/app/components/answers/answer/answer.component.js +0 -66
  524. package/esm2015/app/components/answers/answers.component.js +0 -38
  525. package/esm2015/app/components/answers/answers.module.js +0 -27
  526. package/esm2015/app/components/selections/selections.component.js +0 -129
  527. package/esm2015/app/components/selections/selections.module.js +0 -21
  528. package/esm2015/app/components/shared/loader/loader.component.js +0 -22
  529. package/esm2015/app/components/shared/shared.module.js +0 -19
  530. package/esm2015/app/directives/visibility-observer-master.directive.js +0 -50
  531. package/esm2015/app/directives/visibility-observer.directive.js +0 -55
  532. package/esm2015/app/services/configurator.service.js +0 -79
  533. package/esm2015/app/services/image-cache.service.js +0 -63
  534. package/esm2015/app/utils/object.utils.js +0 -51
  535. package/esm2015/helper/variation-helper.js +0 -553
  536. package/esm2015/model/material.js +0 -11
  537. package/esm2015/model/variation-settings.js +0 -54
  538. package/esm2015/model/variation.js +0 -3
  539. package/esm2015/public_api.js +0 -7
  540. package/esm2015/utils/asset.utils.js +0 -124
  541. package/esm2015/utils/base-utils.js +0 -9
  542. package/esm2015/utils/file.utils.js +0 -142
  543. package/esm2015/utils/image.utils.js +0 -66
  544. package/esm2015/utils/object.utils.js +0 -49
  545. package/esm2015/utils/scene-utils.js +0 -187
  546. package/esm2015/utils/threed.utils.js +0 -226
  547. package/esm2015/utils/variation-utils.js +0 -388
  548. package/model/material.d.ts +0 -40
  549. package/public_api.d.ts +0 -6
  550. package/utils/object.utils.d.ts +0 -7
  551. /package/{utils → lib/utils}/asset.utils.d.ts +0 -0
  552. /package/{utils → lib/utils}/base-utils.d.ts +0 -0
  553. /package/{utils → lib/utils}/scene-utils.d.ts +0 -0
@@ -0,0 +1,313 @@
1
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import { IconEnum } from '../../enum/icon.enum';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/settings.service";
5
+ import * as i2 from "../../services/icon-cache.service";
6
+ import * as i3 from "../../services/configurator-connector.service";
7
+ import * as i4 from "@colijnit/corecomponents_v12";
8
+ import * as i5 from "../answer-info-dialog/answer-info-dialog.component";
9
+ import * as i6 from "@angular/common";
10
+ import * as i7 from "../../pipes/google-translate.pipe";
11
+ import * as i8 from "../../pipes/localize.pipe";
12
+ export class AnswerCardComponent {
13
+ constructor(settingsService, iconService, _configuratorConnectorService) {
14
+ this.settingsService = settingsService;
15
+ this.iconService = iconService;
16
+ this._configuratorConnectorService = _configuratorConnectorService;
17
+ // TODO check why co-card is missing these two in v12.
18
+ // [showImageLoader]="true"
19
+ // [valutaSymbol]="valutaSymbol"
20
+ this.icons = IconEnum;
21
+ this.valutaSymbol = '€';
22
+ this.freeInputChange = new EventEmitter();
23
+ this.inqNumberChange = new EventEmitter();
24
+ this.select = new EventEmitter();
25
+ this.selectWithInq = new EventEmitter();
26
+ this.magnifierClick = new EventEmitter();
27
+ this.answerInfoToggle = new EventEmitter();
28
+ this.dialogPosition = null;
29
+ this.inqNumberError = false;
30
+ this.showAnswerInfo = false;
31
+ this._waitForInput = false;
32
+ this._waitForInqValue = false;
33
+ }
34
+ showClass() {
35
+ return true;
36
+ }
37
+ get activeInfoClass() {
38
+ return this.showAnswerInfo;
39
+ }
40
+ set showing(value) {
41
+ if (value) {
42
+ this._getThumbnailImage();
43
+ }
44
+ }
45
+ ngOnInit() {
46
+ var _a, _b, _c;
47
+ this.inqNumberModel = this.model.defaultNumber;
48
+ // If we work with ingNumbers, we should also change the this.model.ingNumber value here
49
+ // so we change the default 1 value to the default value
50
+ if (((_a = this.model) === null || _a === void 0 ? void 0 : _a.inquireNbrMode) && ((_b = this.model) === null || _b === void 0 ? void 0 : _b.minNumber) && ((_c = this.model) === null || _c === void 0 ? void 0 : _c.maxNumber)) {
51
+ this.model.inqNumber = this.model.defaultNumber;
52
+ }
53
+ }
54
+ onContentClick() {
55
+ if (!this._waitForInput && (this.model.inquireNbrMode === 'F' || this.model.inquireNbrMode === undefined)) {
56
+ this.select.emit(this.freeInput);
57
+ }
58
+ if (!this._waitForInqValue && this.model.inquireNbrMode === 'T') {
59
+ this.model.inqNumber = Number(this.inqNumberModel);
60
+ this.select.next(this.inqNumberModel);
61
+ }
62
+ }
63
+ handleClick(event) {
64
+ event.preventDefault();
65
+ event.stopPropagation();
66
+ event.stopImmediatePropagation();
67
+ }
68
+ onInfoButtonClick(event) {
69
+ var _a;
70
+ event.preventDefault();
71
+ event.stopPropagation();
72
+ event.stopImmediatePropagation();
73
+ this.showAnswerInfo = !this.showAnswerInfo;
74
+ this.answerInfoToggle.emit({ open: this.showAnswerInfo, id: (_a = this.model) === null || _a === void 0 ? void 0 : _a.nodeId });
75
+ if (this.showAnswerInfo) {
76
+ const button = event.currentTarget;
77
+ const rect = button.getBoundingClientRect();
78
+ this.dialogPosition = {
79
+ top: rect.top + 10,
80
+ right: window.innerWidth - rect.right - 10 // distance from right edge
81
+ };
82
+ }
83
+ else {
84
+ this.dialogPosition = null;
85
+ }
86
+ }
87
+ closeInfo(silent = true) {
88
+ var _a;
89
+ if (!this.showAnswerInfo) {
90
+ return;
91
+ }
92
+ this.showAnswerInfo = false;
93
+ this.dialogPosition = null;
94
+ if (!silent) {
95
+ this.answerInfoToggle.emit({ open: false, id: (_a = this.model) === null || _a === void 0 ? void 0 : _a.nodeId });
96
+ }
97
+ }
98
+ handleFocusFreeInput(event) {
99
+ this._waitForInput = true;
100
+ }
101
+ handleBlurFreeInput(event) {
102
+ this._waitForInput = false;
103
+ }
104
+ handleKeyDownFreeInput(event) {
105
+ if (event.keyCode === 13) {
106
+ this._waitForInput = false;
107
+ this.select.next(this.freeInput);
108
+ }
109
+ }
110
+ handleFocusInqNumber(event) {
111
+ this._waitForInqValue = true;
112
+ }
113
+ handleBlurInqNumber(event) {
114
+ this._waitForInqValue = !this.validateInqNumber(event);
115
+ }
116
+ handleKeyDownInqNumber(event) {
117
+ if (event.keyCode === 13) {
118
+ this._waitForInqValue = false;
119
+ this.model.inqNumber = this.inqNumberModel;
120
+ }
121
+ }
122
+ onZoomImage() {
123
+ this.magnifierClick.next(this.model);
124
+ }
125
+ validateInqNumber(event) {
126
+ const currentValue = Number(this.inqNumberModel);
127
+ const minValue = this.model.minNumber;
128
+ const maxValue = this.model.maxNumber;
129
+ if (currentValue < minValue) {
130
+ this.inqNumberError = true;
131
+ return false;
132
+ }
133
+ else if (currentValue > maxValue) {
134
+ this.inqNumberError = true;
135
+ return false;
136
+ }
137
+ else {
138
+ this.inqNumberError = false;
139
+ return false;
140
+ }
141
+ }
142
+ replaceTranslationValues(translation, min, max) {
143
+ const parts = translation.split('(|~)');
144
+ // We are doing this the dirtyway
145
+ return parts[0] + ' ' + min + ' ' + parts[1] + ' ' + max + ' ' + parts[2];
146
+ }
147
+ _checkVisibility(entries) {
148
+ this._configuratorConnectorService.extendWithAnswerTextAndImage(this.model, false);
149
+ }
150
+ _getThumbnailImage() {
151
+ if (!this.model.imageData) {
152
+ this._configuratorConnectorService.extendWithAnswerTextAndImage(this.model, false);
153
+ }
154
+ }
155
+ }
156
+ AnswerCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardComponent, deps: [{ token: i1.SettingsService }, { token: i2.IconCacheService }, { token: i3.ConfiguratorConnectorService }], target: i0.ɵɵFactoryTarget.Component });
157
+ AnswerCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AnswerCardComponent, selector: "co-answer-card", inputs: { model: "model", valutaSymbol: "valutaSymbol", showing: "showing", isSelected: "isSelected", isSmallModus: "isSmallModus", freeInput: "freeInput" }, outputs: { freeInputChange: "freeInputChange", inqNumberChange: "inqNumberChange", select: "select", selectWithInq: "selectWithInq", magnifierClick: "magnifierClick", answerInfoToggle: "answerInfoToggle" }, host: { properties: { "class.co-answer-card": "this.showClass", "class.active-info": "this.activeInfoClass", "class.small-mode": "this.isSmallModus" } }, ngImport: i0, template: `
158
+ <co-card
159
+ [imageData]="model?.imageData"
160
+ [description]="(model?.userInput ? '' : (model?.commercialAnswer || model?.answer)) | googleTranslate | async"
161
+ [hasInfoButton]="model?.infoAvailable"
162
+ [hasMagnifierButton]="model?.imageData ? settingsService.settings.options.showZoomButton : false"
163
+ [isSelected]="isSelected"
164
+ [price]="model?.price"
165
+ [level]="!settingsService.settings.options.showStockStatus ? false : model?.stock"
166
+ (contentClick)="onContentClick()"
167
+ (click)="handleClick($event)"
168
+ (infoButtonClick)="onInfoButtonClick($event)"
169
+ (magnifierButtonClick)="onZoomImage()">
170
+ <div *ngIf="model?.userInput" class="free-answer">
171
+ <co-input-text
172
+ [label]="(model?.commercialAnswer ? model?.commercialAnswer : model?.answer) | googleTranslate | async"
173
+ [model]="freeInput"
174
+ (modelChange)="freeInput = $event; freeInputChange.emit($event)"
175
+ (focus)="handleFocusFreeInput($event)"
176
+ (blur)="handleBlurFreeInput($event)"
177
+ (keydown)="handleKeyDownFreeInput($event)">
178
+ </co-input-text>
179
+
180
+ <button (click)="freeInputChange.emit(freeInput)" title="{{'SAVE' | localize}}">
181
+ <co-icon [iconData]="iconService.getIcon(icons.CheckSolid)"></co-icon>
182
+ </button>
183
+ </div>
184
+ <co-answer-info-dialog
185
+ *ngIf="showAnswerInfo"
186
+ [answer]="model"
187
+ [fixedPosition]="dialogPosition"
188
+ (click)="onInfoButtonClick($event)"
189
+ (nothingToShow)="closeInfo(false)">
190
+ </co-answer-info-dialog>
191
+ <div *ngIf="model?.inquireNbrMode && model?.minNumber && model?.maxNumber" class="free-answer">
192
+ <co-input-text
193
+ [noValidation]="true"
194
+ [label]="'AMOUNT' | localize"
195
+ [model]="inqNumberModel"
196
+ (modelChange)="inqNumberModel = $event; inqNumberChange.emit($event)"
197
+ (focus)="handleFocusInqNumber($event)"
198
+ (blur)="handleBlurInqNumber($event)"
199
+ (keydown)="handleKeyDownInqNumber($event)">
200
+ </co-input-text>
201
+
202
+ <button (click)="inqNumberChange.emit(inqNumberModel)" title="{{'SAVE' | localize}}">
203
+ <co-icon [iconData]="iconService.getIcon(icons.CheckSolid)"></co-icon>
204
+ </button>
205
+
206
+ <span
207
+ class="amount-validation-error"
208
+ *ngIf="inqNumberError"
209
+ [textContent]="replaceTranslationValues('AMOUNT_ERROR' | localize, this.model.minNumber, this.model.maxNumber)">
210
+ </span>
211
+ </div>
212
+
213
+ </co-card>
214
+ `, isInline: true, components: [{ type: i4.CardComponent, selector: "co-card", inputs: ["isSelected", "isSmallModus", "hasMagnifierButton", "hasInfoButton", "imageData", "description", "price", "level"], outputs: ["contentClick", "infoButtonClick", "magnifierButtonClick"] }, { type: i4.InputTextComponent, selector: "co-input-text", inputs: ["useContent", "placeholder", "align", "type", "pattern", "digitsOnly", "excludePlusMinus", "showClearButton", "showPlaceholderOnFocus", "selectOnFocus", "emptyPlace", "firstDayOfWeek", "noStyle", "hideArrowButtons", "model", "formatPipe", "min", "max", "keyDownWhiteList", "leftIcon", "rightIcon", "leftIconData", "rightIconData"], outputs: ["leftIconClick", "leftIconMouseDown", "leftIconMouseUp", "rightIconClick", "rightIconMouseDown", "rightIconMouseUp", "clearIconClick", "isFocused"] }, { type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i5.AnswersInfoDialogComponent, selector: "co-answer-info-dialog", inputs: ["answer", "structure", "fixedPosition"], outputs: ["nothingToShow"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i6.AsyncPipe, "googleTranslate": i7.GoogleTranslatePipe, "localize": i8.LocalizePipe }, encapsulation: i0.ViewEncapsulation.None });
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardComponent, decorators: [{
216
+ type: Component,
217
+ args: [{
218
+ selector: 'co-answer-card',
219
+ template: `
220
+ <co-card
221
+ [imageData]="model?.imageData"
222
+ [description]="(model?.userInput ? '' : (model?.commercialAnswer || model?.answer)) | googleTranslate | async"
223
+ [hasInfoButton]="model?.infoAvailable"
224
+ [hasMagnifierButton]="model?.imageData ? settingsService.settings.options.showZoomButton : false"
225
+ [isSelected]="isSelected"
226
+ [price]="model?.price"
227
+ [level]="!settingsService.settings.options.showStockStatus ? false : model?.stock"
228
+ (contentClick)="onContentClick()"
229
+ (click)="handleClick($event)"
230
+ (infoButtonClick)="onInfoButtonClick($event)"
231
+ (magnifierButtonClick)="onZoomImage()">
232
+ <div *ngIf="model?.userInput" class="free-answer">
233
+ <co-input-text
234
+ [label]="(model?.commercialAnswer ? model?.commercialAnswer : model?.answer) | googleTranslate | async"
235
+ [model]="freeInput"
236
+ (modelChange)="freeInput = $event; freeInputChange.emit($event)"
237
+ (focus)="handleFocusFreeInput($event)"
238
+ (blur)="handleBlurFreeInput($event)"
239
+ (keydown)="handleKeyDownFreeInput($event)">
240
+ </co-input-text>
241
+
242
+ <button (click)="freeInputChange.emit(freeInput)" title="{{'SAVE' | localize}}">
243
+ <co-icon [iconData]="iconService.getIcon(icons.CheckSolid)"></co-icon>
244
+ </button>
245
+ </div>
246
+ <co-answer-info-dialog
247
+ *ngIf="showAnswerInfo"
248
+ [answer]="model"
249
+ [fixedPosition]="dialogPosition"
250
+ (click)="onInfoButtonClick($event)"
251
+ (nothingToShow)="closeInfo(false)">
252
+ </co-answer-info-dialog>
253
+ <div *ngIf="model?.inquireNbrMode && model?.minNumber && model?.maxNumber" class="free-answer">
254
+ <co-input-text
255
+ [noValidation]="true"
256
+ [label]="'AMOUNT' | localize"
257
+ [model]="inqNumberModel"
258
+ (modelChange)="inqNumberModel = $event; inqNumberChange.emit($event)"
259
+ (focus)="handleFocusInqNumber($event)"
260
+ (blur)="handleBlurInqNumber($event)"
261
+ (keydown)="handleKeyDownInqNumber($event)">
262
+ </co-input-text>
263
+
264
+ <button (click)="inqNumberChange.emit(inqNumberModel)" title="{{'SAVE' | localize}}">
265
+ <co-icon [iconData]="iconService.getIcon(icons.CheckSolid)"></co-icon>
266
+ </button>
267
+
268
+ <span
269
+ class="amount-validation-error"
270
+ *ngIf="inqNumberError"
271
+ [textContent]="replaceTranslationValues('AMOUNT_ERROR' | localize, this.model.minNumber, this.model.maxNumber)">
272
+ </span>
273
+ </div>
274
+
275
+ </co-card>
276
+ `,
277
+ encapsulation: ViewEncapsulation.None
278
+ }]
279
+ }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i2.IconCacheService }, { type: i3.ConfiguratorConnectorService }]; }, propDecorators: { showClass: [{
280
+ type: HostBinding,
281
+ args: ['class.co-answer-card']
282
+ }], activeInfoClass: [{
283
+ type: HostBinding,
284
+ args: ['class.active-info']
285
+ }], model: [{
286
+ type: Input
287
+ }], valutaSymbol: [{
288
+ type: Input
289
+ }], showing: [{
290
+ type: Input
291
+ }], isSelected: [{
292
+ type: Input
293
+ }], isSmallModus: [{
294
+ type: Input
295
+ }, {
296
+ type: HostBinding,
297
+ args: ['class.small-mode']
298
+ }], freeInput: [{
299
+ type: Input
300
+ }], freeInputChange: [{
301
+ type: Output
302
+ }], inqNumberChange: [{
303
+ type: Output
304
+ }], select: [{
305
+ type: Output
306
+ }], selectWithInq: [{
307
+ type: Output
308
+ }], magnifierClick: [{
309
+ type: Output
310
+ }], answerInfoToggle: [{
311
+ type: Output
312
+ }] } });
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9hbnN3ZXItY2FyZC9hbnN3ZXItY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLN0csT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBZ0U5QyxNQUFNLE9BQU8sbUJBQW1CO0lBbUU5QixZQUNTLGVBQWdDLEVBQ2hDLFdBQTZCLEVBQzVCLDZCQUEyRDtRQUY1RCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzVCLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBOEI7UUFwRXJFLHNEQUFzRDtRQUN0RCwyQkFBMkI7UUFDM0IsZ0NBQWdDO1FBQ2hCLFVBQUssR0FBb0IsUUFBUSxDQUFDO1FBaUIzQyxpQkFBWSxHQUFXLEdBQUcsQ0FBQztRQW9CbEIsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUduRSxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBR25FLFdBQU0sR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxRCxrQkFBYSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBR2pFLG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFHbEUscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWlDLENBQUM7UUFFOUUsbUJBQWMsR0FBMEMsSUFBSSxDQUFDO1FBRzdELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG1CQUFjLEdBQVksS0FBSyxDQUFD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QUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3pCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQzs7aUhBck1VLG1CQUFtQjtxR0FBbkIsbUJBQW1CLDZqQkE1RHBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RFQ7NEZBR1UsbUJBQW1CO2tCQTlEL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlEVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Z0xBU1EsU0FBUztzQkFEZixXQUFXO3VCQUFDLHNCQUFzQjtnQkFNL0IsZUFBZTtzQkFEbEIsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBT3pCLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlLLE9BQU87c0JBRGpCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsS0FBSztnQkFLQyxZQUFZO3NCQUZsQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFJeEIsU0FBUztzQkFEZixLQUFLO2dCQUlVLGVBQWU7c0JBRDlCLE1BQU07Z0JBSVMsZUFBZTtzQkFEOUIsTUFBTTtnQkFJUyxNQUFNO3NCQURyQixNQUFNO2dCQUlTLGFBQWE7c0JBRDVCLE1BQU07Z0JBSVMsY0FBYztzQkFEN0IsTUFBTTtnQkFJUyxnQkFBZ0I7c0JBRC9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7SWNvbkVudW19IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY28tYW5zd2VyLWNhcmQnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8Y28tY2FyZFxyXG4gICAgICBbaW1hZ2VEYXRhXT1cIm1vZGVsPy5pbWFnZURhdGFcIlxyXG4gICAgICBbZGVzY3JpcHRpb25dPVwiKG1vZGVsPy51c2VySW5wdXQgPyAnJyA6IChtb2RlbD8uY29tbWVyY2lhbEFuc3dlciB8fCBtb2RlbD8uYW5zd2VyKSkgfCBnb29nbGVUcmFuc2xhdGUgfCBhc3luY1wiXHJcbiAgICAgIFtoYXNJbmZvQnV0dG9uXT1cIm1vZGVsPy5pbmZvQXZhaWxhYmxlXCJcclxuICAgICAgW2hhc01hZ25pZmllckJ1dHRvbl09XCJtb2RlbD8uaW1hZ2VEYXRhID8gc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1pvb21CdXR0b24gOiBmYWxzZVwiXHJcbiAgICAgIFtpc1NlbGVjdGVkXT1cImlzU2VsZWN0ZWRcIlxyXG4gICAgICBbcHJpY2VdPVwibW9kZWw/LnByaWNlXCJcclxuICAgICAgW2xldmVsXT1cIiFzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93U3RvY2tTdGF0dXMgPyBmYWxzZSA6IG1vZGVsPy5zdG9ja1wiXHJcbiAgICAgIChjb250ZW50Q2xpY2spPVwib25Db250ZW50Q2xpY2soKVwiXHJcbiAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgKGluZm9CdXR0b25DbGljayk9XCJvbkluZm9CdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgKG1hZ25pZmllckJ1dHRvbkNsaWNrKT1cIm9uWm9vbUltYWdlKClcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIm1vZGVsPy51c2VySW5wdXRcIiBjbGFzcz1cImZyZWUtYW5zd2VyXCI+XHJcbiAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgIFtsYWJlbF09XCIobW9kZWw/LmNvbW1lcmNpYWxBbnN3ZXIgPyBtb2RlbD8uY29tbWVyY2lhbEFuc3dlciA6IG1vZGVsPy5hbnN3ZXIpIHwgZ29vZ2xlVHJhbnNsYXRlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cImZyZWVJbnB1dFwiXHJcbiAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiZnJlZUlucHV0ID0gJGV2ZW50OyBmcmVlSW5wdXRDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1c0ZyZWVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXJGcmVlSW5wdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duRnJlZUlucHV0KCRldmVudClcIj5cclxuICAgICAgICA8L2NvLWlucHV0LXRleHQ+XHJcblxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZyZWVJbnB1dENoYW5nZS5lbWl0KGZyZWVJbnB1dClcIiB0aXRsZT1cInt7J1NBVkUnIHwgbG9jYWxpemV9fVwiPlxyXG4gICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQ2hlY2tTb2xpZClcIj48L2NvLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Y28tYW5zd2VyLWluZm8tZGlhbG9nXHJcbiAgICAgICAgKm5nSWY9XCJzaG93QW5zd2VySW5mb1wiXHJcbiAgICAgICAgW2Fuc3dlcl09XCJtb2RlbFwiXHJcbiAgICAgICAgW2ZpeGVkUG9zaXRpb25dPVwiZGlhbG9nUG9zaXRpb25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkluZm9CdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAobm90aGluZ1RvU2hvdyk9XCJjbG9zZUluZm8oZmFsc2UpXCI+XHJcbiAgICAgIDwvY28tYW5zd2VyLWluZm8tZGlhbG9nPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwibW9kZWw/LmlucXVpcmVOYnJNb2RlICYmIG1vZGVsPy5taW5OdW1iZXIgJiYgbW9kZWw/Lm1heE51bWJlclwiIGNsYXNzPVwiZnJlZS1hbnN3ZXJcIj5cclxuICAgICAgICA8Y28taW5wdXQtdGV4dFxyXG4gICAgICAgICAgW25vVmFsaWRhdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgIFtsYWJlbF09XCInQU1PVU5UJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIFttb2RlbF09XCJpbnFOdW1iZXJNb2RlbFwiXHJcbiAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaW5xTnVtYmVyTW9kZWwgPSAkZXZlbnQ7IGlucU51bWJlckNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzSW5xTnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cklucU51bWJlcigkZXZlbnQpXCJcclxuICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd25JbnFOdW1iZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgIDwvY28taW5wdXQtdGV4dD5cclxuICAgICAgICBcclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJpbnFOdW1iZXJDaGFuZ2UuZW1pdChpbnFOdW1iZXJNb2RlbClcIiB0aXRsZT1cInt7J1NBVkUnIHwgbG9jYWxpemV9fVwiPlxyXG4gICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQ2hlY2tTb2xpZClcIj48L2NvLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPHNwYW4gXHJcbiAgICAgICAgICBjbGFzcz1cImFtb3VudC12YWxpZGF0aW9uLWVycm9yXCIgXHJcbiAgICAgICAgICAqbmdJZj1cImlucU51bWJlckVycm9yXCJcclxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJyZXBsYWNlVHJhbnNsYXRpb25WYWx1ZXMoJ0FNT1VOVF9FUlJPUicgfCBsb2NhbGl6ZSwgdGhpcy5tb2RlbC5taW5OdW1iZXIsIHRoaXMubW9kZWwubWF4TnVtYmVyKVwiPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9jby1jYXJkPlxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5zd2VyQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8vIFRPRE8gY2hlY2sgd2h5IGNvLWNhcmQgaXMgbWlzc2luZyB0aGVzZSB0d28gaW4gdjEyLlxyXG4gIC8vIFtzaG93SW1hZ2VMb2FkZXJdPVwidHJ1ZVwiXHJcbiAgLy8gW3ZhbHV0YVN5bWJvbF09XCJ2YWx1dGFTeW1ib2xcIlxyXG4gIHB1YmxpYyByZWFkb25seSBpY29uczogdHlwZW9mIEljb25FbnVtID0gSWNvbkVudW07XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY28tYW5zd2VyLWNhcmQnKVxyXG4gIHB1YmxpYyBzaG93Q2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlLWluZm8nKVxyXG4gIGdldCBhY3RpdmVJbmZvQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93QW5zd2VySW5mbztcclxuICB9XHJcblxyXG4gIC8vIHRvZG8gaW50cm9kdWNlIEFuc3dlclZpZXdNb2RlbCBleHRlbmRzIEFuc3dlciB3aGljaCBoYXMgcHJpY2VGb3JEaXNwbGF5IGFuZCBzdG9jayBwcm9wcyB0byBhdm9pZCAnIHwgYW55JyBpbiB0aGlzIHR5cGUgZGVjbGFyYXRpb25cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBtb2RlbDogQW5zd2VyIHwgYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2YWx1dGFTeW1ib2w6IHN0cmluZyA9ICfigqwnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2hvd2luZyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2dldFRodW1ibmFpbEltYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc21hbGwtbW9kZScpXHJcbiAgcHVibGljIGlzU21hbGxNb2R1czogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZnJlZUlucHV0OiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBmcmVlSW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBpbnFOdW1iZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RXaXRoSW5xOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgbWFnbmlmaWVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxBbnN3ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxBbnN3ZXI+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBhbnN3ZXJJbmZvVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG9wZW46IGJvb2xlYW47IGlkOiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgcHVibGljIGRpYWxvZ1Bvc2l0aW9uOiB7IHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHVibGljIGlucU51bWJlck1vZGVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGlucU51bWJlckVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dBbnN3ZXJJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfd2FpdEZvcklucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfd2FpdEZvcklucVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHVibGljIGljb25TZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZTogQ29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlucU51bWJlck1vZGVsID0gdGhpcy5tb2RlbC5kZWZhdWx0TnVtYmVyO1xyXG4gICAgLy8gSWYgd2Ugd29yayB3aXRoIGluZ051bWJlcnMsIHdlIHNob3VsZCBhbHNvIGNoYW5nZSB0aGUgdGhpcy5tb2RlbC5pbmdOdW1iZXIgdmFsdWUgaGVyZVxyXG4gICAgLy8gc28gd2UgY2hhbmdlIHRoZSBkZWZhdWx0IDEgdmFsdWUgdG8gdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmICh0aGlzLm1vZGVsPy5pbnF1aXJlTmJyTW9kZSAmJiB0aGlzLm1vZGVsPy5taW5OdW1iZXIgJiYgdGhpcy5tb2RlbD8ubWF4TnVtYmVyKSB7XHJcbiAgICAgIHRoaXMubW9kZWwuaW5xTnVtYmVyID0gdGhpcy5tb2RlbC5kZWZhdWx0TnVtYmVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ29udGVudENsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl93YWl0Rm9ySW5wdXQgJiYgKHRoaXMubW9kZWwuaW5xdWlyZU5ick1vZGUgPT09ICdGJyB8fCB0aGlzLm1vZGVsLmlucXVpcmVOYnJNb2RlID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0LmVtaXQodGhpcy5mcmVlSW5wdXQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl93YWl0Rm9ySW5xVmFsdWUgJiYgdGhpcy5tb2RlbC5pbnF1aXJlTmJyTW9kZSA9PT0gJ1QnKSB7XHJcbiAgICAgIHRoaXMubW9kZWwuaW5xTnVtYmVyID0gTnVtYmVyKHRoaXMuaW5xTnVtYmVyTW9kZWwpO1xyXG4gICAgICB0aGlzLnNlbGVjdC5uZXh0KHRoaXMuaW5xTnVtYmVyTW9kZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkluZm9CdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zaG93QW5zd2VySW5mbyA9ICF0aGlzLnNob3dBbnN3ZXJJbmZvO1xyXG4gICAgdGhpcy5hbnN3ZXJJbmZvVG9nZ2xlLmVtaXQoe29wZW46IHRoaXMuc2hvd0Fuc3dlckluZm8sIGlkOiB0aGlzLm1vZGVsPy5ub2RlSWR9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93QW5zd2VySW5mbykge1xyXG4gICAgICBjb25zdCBidXR0b24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCByZWN0ID0gYnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1Bvc2l0aW9uID0ge1xyXG4gICAgICAgIHRvcDogcmVjdC50b3AgKyAxMCxcclxuICAgICAgICByaWdodDogd2luZG93LmlubmVyV2lkdGggLSByZWN0LnJpZ2h0IC0gMTAgLy8gZGlzdGFuY2UgZnJvbSByaWdodCBlZGdlXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpYWxvZ1Bvc2l0aW9uID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VJbmZvKHNpbGVudCA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zaG93QW5zd2VySW5mbykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dBbnN3ZXJJbmZvID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpYWxvZ1Bvc2l0aW9uID0gbnVsbDtcclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIHRoaXMuYW5zd2VySW5mb1RvZ2dsZS5lbWl0KHtvcGVuOiBmYWxzZSwgaWQ6IHRoaXMubW9kZWw/Lm5vZGVJZH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUZvY3VzRnJlZUlucHV0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl93YWl0Rm9ySW5wdXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUJsdXJGcmVlSW5wdXQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX3dhaXRGb3JJbnB1dCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUtleURvd25GcmVlSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICB0aGlzLl93YWl0Rm9ySW5wdXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3QubmV4dCh0aGlzLmZyZWVJbnB1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRm9jdXNJbnFOdW1iZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX3dhaXRGb3JJbnFWYWx1ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQmx1cklucU51bWJlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fd2FpdEZvcklucVZhbHVlID0gIXRoaXMudmFsaWRhdGVJbnFOdW1iZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUtleURvd25JbnFOdW1iZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICB0aGlzLl93YWl0Rm9ySW5xVmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5tb2RlbC5pbnFOdW1iZXIgPSB0aGlzLmlucU51bWJlck1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uWm9vbUltYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYWduaWZpZXJDbGljay5uZXh0KHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlSW5xTnVtYmVyKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWU6IG51bWJlciA9IE51bWJlcih0aGlzLmlucU51bWJlck1vZGVsKTtcclxuICAgIGNvbnN0IG1pblZhbHVlOiBudW1iZXIgPSB0aGlzLm1vZGVsLm1pbk51bWJlcjtcclxuICAgIGNvbnN0IG1heFZhbHVlOiBudW1iZXIgPSB0aGlzLm1vZGVsLm1heE51bWJlcjtcclxuXHJcbiAgICBpZiAoY3VycmVudFZhbHVlIDwgbWluVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbnFOdW1iZXJFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlID4gbWF4VmFsdWUpIHtcclxuICAgICAgdGhpcy5pbnFOdW1iZXJFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5xTnVtYmVyRXJyb3IgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcGxhY2VUcmFuc2xhdGlvblZhbHVlcyh0cmFuc2xhdGlvbjogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcGFydHMgPSB0cmFuc2xhdGlvbi5zcGxpdCgnKHx+KScpO1xyXG4gICAgLy8gV2UgYXJlIGRvaW5nIHRoaXMgdGhlIGRpcnR5d2F5XHJcbiAgICByZXR1cm4gcGFydHNbMF0gKyAnICcgKyBtaW4gKyAnICcgKyBwYXJ0c1sxXSArICcgJyArIG1heCArICcgJyArIHBhcnRzWzJdO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2NoZWNrVmlzaWJpbGl0eShlbnRyaWVzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlLmV4dGVuZFdpdGhBbnN3ZXJUZXh0QW5kSW1hZ2UodGhpcy5tb2RlbCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VGh1bWJuYWlsSW1hZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwuaW1hZ2VEYXRhKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRvckNvbm5lY3RvclNlcnZpY2UuZXh0ZW5kV2l0aEFuc3dlclRleHRBbmRJbWFnZSh0aGlzLm1vZGVsLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,50 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { AnswerCardComponent } from './answer-card.component';
3
+ import { CardModule, IconModule, InputTextModule } from '@colijnit/corecomponents_v12';
4
+ import { PipesModule } from '../../pipes/pipes.module';
5
+ import { BrowserModule } from '@angular/platform-browser';
6
+ import { AnswersInfoDialogModule } from '../answer-info-dialog/answer-info-dialog.module';
7
+ import * as i0 from "@angular/core";
8
+ export class AnswerCardModule {
9
+ }
10
+ AnswerCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ AnswerCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardModule, declarations: [AnswerCardComponent], imports: [CardModule,
12
+ PipesModule,
13
+ CardModule,
14
+ InputTextModule,
15
+ BrowserModule,
16
+ IconModule,
17
+ AnswersInfoDialogModule,
18
+ CardModule], exports: [AnswerCardComponent] });
19
+ AnswerCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardModule, imports: [[
20
+ CardModule,
21
+ PipesModule,
22
+ CardModule,
23
+ InputTextModule,
24
+ BrowserModule,
25
+ IconModule,
26
+ AnswersInfoDialogModule,
27
+ CardModule
28
+ ]] });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswerCardModule, decorators: [{
30
+ type: NgModule,
31
+ args: [{
32
+ imports: [
33
+ CardModule,
34
+ PipesModule,
35
+ CardModule,
36
+ InputTextModule,
37
+ BrowserModule,
38
+ IconModule,
39
+ AnswersInfoDialogModule,
40
+ CardModule
41
+ ],
42
+ declarations: [
43
+ AnswerCardComponent,
44
+ ],
45
+ exports: [
46
+ AnswerCardComponent
47
+ ]
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLWNhcmQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9hbnN3ZXItY2FyZC9hbnN3ZXItY2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGlEQUFpRCxDQUFDOztBQXFCeEYsTUFBTSxPQUFPLGdCQUFnQjs7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQVB6QixtQkFBbUIsYUFWbkIsVUFBVTtRQUNWLFdBQVc7UUFDWCxVQUFVO1FBQ1YsZUFBZTtRQUNmLGFBQWE7UUFDYixVQUFVO1FBQ1YsdUJBQXVCO1FBQ3ZCLFVBQVUsYUFNVixtQkFBbUI7K0dBSVYsZ0JBQWdCLFlBbEJsQjtZQUNQLFVBQVU7WUFDVixXQUFXO1lBQ1gsVUFBVTtZQUNWLGVBQWU7WUFDZixhQUFhO1lBQ2IsVUFBVTtZQUNWLHVCQUF1QjtZQUN2QixVQUFVO1NBQ1g7NEZBU1UsZ0JBQWdCO2tCQW5CNUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsVUFBVTt3QkFDVixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsdUJBQXVCO3dCQUN2QixVQUFVO3FCQUNYO29CQUNELFlBQVksRUFBRTt3QkFDWixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7cUJBQ3BCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW5zd2VyQ2FyZENvbXBvbmVudH0gZnJvbSAnLi9hbnN3ZXItY2FyZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NhcmRNb2R1bGUsIEljb25Nb2R1bGUsIElucHV0VGV4dE1vZHVsZX0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XHJcbmltcG9ydCB7UGlwZXNNb2R1bGV9IGZyb20gJy4uLy4uL3BpcGVzL3BpcGVzLm1vZHVsZSc7XHJcbmltcG9ydCB7QnJvd3Nlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7QW5zd2Vyc0luZm9EaWFsb2dNb2R1bGV9IGZyb20gJy4uL2Fuc3dlci1pbmZvLWRpYWxvZy9hbnN3ZXItaW5mby1kaWFsb2cubW9kdWxlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ2FyZE1vZHVsZSxcclxuICAgIFBpcGVzTW9kdWxlLFxyXG4gICAgQ2FyZE1vZHVsZSxcclxuICAgIElucHV0VGV4dE1vZHVsZSxcclxuICAgIEJyb3dzZXJNb2R1bGUsXHJcbiAgICBJY29uTW9kdWxlLFxyXG4gICAgQW5zd2Vyc0luZm9EaWFsb2dNb2R1bGUsXHJcbiAgICBDYXJkTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEFuc3dlckNhcmRDb21wb25lbnQsXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBBbnN3ZXJDYXJkQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFuc3dlckNhcmRNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,182 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
3
+ import { IconEnum } from '../../enum/icon.enum';
4
+ import { isNill } from '@colijnit/configuratorapi/build/utils/function/is-nill.function';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/icon-cache.service";
7
+ import * as i2 from "../../services/settings.service";
8
+ import * as i3 from "../../services/configurator-connector.service";
9
+ import * as i4 from "@angular/platform-browser";
10
+ import * as i5 from "@colijnit/corecomponents_v12";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "../../pipes/localize.pipe";
13
+ export class AnswersInfoDialogComponent {
14
+ constructor(iconService, _settingsService, _configuratorConnectorService, _sanitizer) {
15
+ this.iconService = iconService;
16
+ this._settingsService = _settingsService;
17
+ this._configuratorConnectorService = _configuratorConnectorService;
18
+ this._sanitizer = _sanitizer;
19
+ this.icons = IconEnum;
20
+ this.fixedPosition = null;
21
+ this.nothingToShow = new EventEmitter();
22
+ this.answerText = '';
23
+ this.answerImage = '';
24
+ this.answerHtml = '';
25
+ this.textLoading = false;
26
+ this.textError = '';
27
+ this.showTooltip = false;
28
+ this.showPopup = false;
29
+ this.hasEmbed = false;
30
+ }
31
+ showClass() {
32
+ return true;
33
+ }
34
+ ngOnInit() {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ this.textLoading = true;
37
+ try {
38
+ yield this._loadInfo();
39
+ }
40
+ catch (e) {
41
+ this.textError = e ? e.message : 'Failed to load info.';
42
+ }
43
+ finally {
44
+ this.textLoading = false;
45
+ }
46
+ });
47
+ }
48
+ _loadInfo() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ let items = [];
51
+ if (this.answer) {
52
+ // Case 1: called with Answer
53
+ items = yield this._configuratorConnectorService.getAnswerInfo(this.answer);
54
+ this.answerImage = yield this._configuratorConnectorService.getMoodImageForInfoDialog(this.answer);
55
+ }
56
+ else if (this.structure) {
57
+ // Case 2: called with SelectorStructure
58
+ items = yield this._configuratorConnectorService.getStructureInfo(this.structure);
59
+ }
60
+ // Common content building logic
61
+ const formatted = this._formatAnswerInfo(items);
62
+ this.answerText = /<[^>]+>/.test(formatted)
63
+ ? formatted
64
+ : formatted.replace(/\n/g, '<br>');
65
+ if (/<iframe|<embed/i.test(this.answerText)) {
66
+ this.answerImage = '';
67
+ this.hasEmbed = true;
68
+ }
69
+ this.answerHtml = this._sanitizer.bypassSecurityTrustHtml(this.answerText);
70
+ });
71
+ }
72
+ _formatAnswerInfo(items) {
73
+ if (!items || items.length === 0) {
74
+ return '';
75
+ }
76
+ const textParts = [];
77
+ let includesShort = false;
78
+ let includesLong = false;
79
+ for (const articleText of items) {
80
+ if (!articleText.text) {
81
+ continue;
82
+ }
83
+ if (isNill(articleText.publication) || ((articleText.publication & this._settingsService.settings.infoPublicationCode) > 0)) {
84
+ const body = articleText.text.trim();
85
+ const label = articleText.description ? articleText.description.trim() : '';
86
+ const textPublication = articleText.textType;
87
+ const bodyHasHtml = /<[^>]+>/.test(body);
88
+ if ((textPublication & 1 /* ShortDescription */) > 0) {
89
+ includesShort = true;
90
+ textParts.push(body || label);
91
+ }
92
+ if ((textPublication & 2 /* Description */) > 0) {
93
+ includesLong = true;
94
+ if (label && body) {
95
+ textParts.push(bodyHasHtml ? `<p class="info-heading">${label}</p>${body}` : `${label}\n${body}`);
96
+ }
97
+ else {
98
+ textParts.push(body || label);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ if (includesShort) {
104
+ this.showTooltip = true;
105
+ this.showPopup = false;
106
+ return textParts.join('\n\n---\n\n');
107
+ }
108
+ if (includesLong) {
109
+ this.showPopup = true;
110
+ this.showTooltip = false;
111
+ return textParts.join('\n\n---\n\n');
112
+ }
113
+ this.showTooltip = false;
114
+ this.showPopup = false;
115
+ this.nothingToShow.emit();
116
+ return '';
117
+ }
118
+ }
119
+ AnswersInfoDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswersInfoDialogComponent, deps: [{ token: i1.IconCacheService }, { token: i2.SettingsService }, { token: i3.ConfiguratorConnectorService }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
120
+ AnswersInfoDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AnswersInfoDialogComponent, selector: "co-answer-info-dialog", inputs: { answer: "answer", structure: "structure", fixedPosition: "fixedPosition" }, outputs: { nothingToShow: "nothingToShow" }, host: { properties: { "class.co-answer-info-dialog": "this.showClass" } }, ngImport: i0, template: `
121
+ <div *ngIf="showTooltip" [ngStyle]="{ top: fixedPosition.top + 'px', right: fixedPosition.right + 'px' }" class="answer-info-tooltip">
122
+ <div class="info-text" *ngIf="answerText" [innerHTML]="answerHtml"></div>
123
+ <div class="loading" *ngIf="textLoading" [textContent]="'LOADING' | localize"></div>
124
+ <div class="error" *ngIf="textError" [textContent]="textError"></div>
125
+ </div>
126
+ <div *ngIf="showPopup" class="answer-info-popup">
127
+ <div class="inner-info">
128
+ <div class="info-content">
129
+ <div class="close-button-wrapper">
130
+ <co-icon class="close-button" [iconData]="iconService.getIcon(icons.Cross)" (click)="showPopup = false"></co-icon>
131
+ </div>
132
+ <div class="info-image" *ngIf="answerImage"><img alt="" src="{{answerImage}}"/></div>
133
+ <div class="text-content" [class.has-embed]="hasEmbed">
134
+ <div class="info-text" *ngIf="answerText" [innerHTML]="answerHtml"></div>
135
+ </div>
136
+ <div class="loading" *ngIf="textLoading" [textContent]="'LOADING' | localize"></div>
137
+ <div class="error" *ngIf="textError" [textContent]="textError"></div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ `, isInline: true, components: [{ type: i5.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "localize": i7.LocalizePipe }, encapsulation: i0.ViewEncapsulation.None });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AnswersInfoDialogComponent, decorators: [{
143
+ type: Component,
144
+ args: [{
145
+ selector: 'co-answer-info-dialog',
146
+ template: `
147
+ <div *ngIf="showTooltip" [ngStyle]="{ top: fixedPosition.top + 'px', right: fixedPosition.right + 'px' }" class="answer-info-tooltip">
148
+ <div class="info-text" *ngIf="answerText" [innerHTML]="answerHtml"></div>
149
+ <div class="loading" *ngIf="textLoading" [textContent]="'LOADING' | localize"></div>
150
+ <div class="error" *ngIf="textError" [textContent]="textError"></div>
151
+ </div>
152
+ <div *ngIf="showPopup" class="answer-info-popup">
153
+ <div class="inner-info">
154
+ <div class="info-content">
155
+ <div class="close-button-wrapper">
156
+ <co-icon class="close-button" [iconData]="iconService.getIcon(icons.Cross)" (click)="showPopup = false"></co-icon>
157
+ </div>
158
+ <div class="info-image" *ngIf="answerImage"><img alt="" src="{{answerImage}}"/></div>
159
+ <div class="text-content" [class.has-embed]="hasEmbed">
160
+ <div class="info-text" *ngIf="answerText" [innerHTML]="answerHtml"></div>
161
+ </div>
162
+ <div class="loading" *ngIf="textLoading" [textContent]="'LOADING' | localize"></div>
163
+ <div class="error" *ngIf="textError" [textContent]="textError"></div>
164
+ </div>
165
+ </div>
166
+ </div>
167
+ `,
168
+ encapsulation: ViewEncapsulation.None
169
+ }]
170
+ }], ctorParameters: function () { return [{ type: i1.IconCacheService }, { type: i2.SettingsService }, { type: i3.ConfiguratorConnectorService }, { type: i4.DomSanitizer }]; }, propDecorators: { showClass: [{
171
+ type: HostBinding,
172
+ args: ['class.co-answer-info-dialog']
173
+ }], answer: [{
174
+ type: Input
175
+ }], structure: [{
176
+ type: Input
177
+ }], fixedPosition: [{
178
+ type: Input
179
+ }], nothingToShow: [{
180
+ type: Output
181
+ }] } });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLWluZm8tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL2NvbXBvbmVudHMvYW5zd2VyLWluZm8tZGlhbG9nL2Fuc3dlci1pbmZvLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBTzdHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUVBQWlFLENBQUM7Ozs7Ozs7OztBQW9DdkYsTUFBTSxPQUFPLDBCQUEwQjtJQTZCckMsWUFDUyxXQUE2QixFQUM1QixnQkFBaUMsRUFDakMsNkJBQTJELEVBQzNELFVBQXdCO1FBSHpCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBOEI7UUFDM0QsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQWhDbEIsVUFBSyxHQUFvQixRQUFRLENBQUM7UUFjM0Msa0JBQWEsR0FBMEMsSUFBSSxDQUFDO1FBRzVELGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFN0QsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksS0FB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QyxJQUFJLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O3dIQXhIVSwwQkFBMEI7NEdBQTFCLDBCQUEwQiwyUUF4QjNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQ7NEZBR1UsMEJBQTBCO2tCQTFCdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Mk1BS1EsU0FBUztzQkFEZixXQUFXO3VCQUFDLDZCQUE2QjtnQkFNbkMsTUFBTTtzQkFEWixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QXJ0aWNsZVRleHR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS10ZXh0LmJvJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVIdG1sfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtTZWxlY3RvclN0cnVjdHVyZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rvci1zdHJ1Y3R1cmUuYm8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJY29uRW51bX0gZnJvbSAnLi4vLi4vZW51bS9pY29uLmVudW0nO1xyXG5pbXBvcnQge1NldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb24nO1xyXG5cclxuY29uc3QgZW51bSBQdWJsaWNhdGlvbiB7XHJcbiAgU2hvcnREZXNjcmlwdGlvbiA9IDEsXHJcbiAgRGVzY3JpcHRpb24gPSAyLFxyXG4gIE1ldGFUaXRsZSA9IDQsXHJcbiAgTWV0YURlc2NyaXB0aW9uID0gOCxcclxuICBMb25nVGl0bGUgPSAxNlxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvLWFuc3dlci1pbmZvLWRpYWxvZycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgKm5nSWY9XCJzaG93VG9vbHRpcFwiIFtuZ1N0eWxlXT1cInsgdG9wOiBmaXhlZFBvc2l0aW9uLnRvcCArICdweCcsIHJpZ2h0OiBmaXhlZFBvc2l0aW9uLnJpZ2h0ICsgJ3B4JyB9XCIgY2xhc3M9XCJhbnN3ZXItaW5mby10b29sdGlwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXRleHRcIiAqbmdJZj1cImFuc3dlclRleHRcIiBbaW5uZXJIVE1MXT1cImFuc3dlckh0bWxcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmdcIiAqbmdJZj1cInRleHRMb2FkaW5nXCIgW3RleHRDb250ZW50XT1cIidMT0FESU5HJyB8IGxvY2FsaXplXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwidGV4dEVycm9yXCIgW3RleHRDb250ZW50XT1cInRleHRFcnJvclwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1BvcHVwXCIgY2xhc3M9XCJhbnN3ZXItaW5mby1wb3B1cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItaW5mb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1idXR0b24td3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLkNyb3NzKVwiIChjbGljayk9XCJzaG93UG9wdXAgPSBmYWxzZVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8taW1hZ2VcIiAqbmdJZj1cImFuc3dlckltYWdlXCI+PGltZyBhbHQ9XCJcIiBzcmM9XCJ7e2Fuc3dlckltYWdlfX1cIi8+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250ZW50XCIgW2NsYXNzLmhhcy1lbWJlZF09XCJoYXNFbWJlZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby10ZXh0XCIgKm5nSWY9XCJhbnN3ZXJUZXh0XCIgW2lubmVySFRNTF09XCJhbnN3ZXJIdG1sXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCIgKm5nSWY9XCJ0ZXh0TG9hZGluZ1wiIFt0ZXh0Q29udGVudF09XCInTE9BRElORycgfCBsb2NhbGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCJ0ZXh0RXJyb3JcIiBbdGV4dENvbnRlbnRdPVwidGV4dEVycm9yXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbnN3ZXJzSW5mb0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbkVudW0gPSBJY29uRW51bTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1hbnN3ZXItaW5mby1kaWFsb2cnKVxyXG4gIHB1YmxpYyBzaG93Q2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFuc3dlcjogQW5zd2VyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzdHJ1Y3R1cmU6IFNlbGVjdG9yU3RydWN0dXJlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaXhlZFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG5vdGhpbmdUb1Nob3c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGFuc3dlclRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBhbnN3ZXJJbWFnZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGFuc3dlckh0bWw6IFNhZmVIdG1sID0gJyc7XHJcbiAgcHVibGljIHRleHRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRleHRFcnJvcjogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIHNob3dUb29sdGlwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoYXNFbWJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZTogQ29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudGV4dExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRJbmZvKCk7XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy50ZXh0RXJyb3IgPSBlID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGluZm8uJztcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMudGV4dExvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRJbmZvKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGl0ZW1zOiBBcnRpY2xlVGV4dFtdID0gW107XHJcbiAgICBpZiAodGhpcy5hbnN3ZXIpIHtcclxuICAgICAgLy8gQ2FzZSAxOiBjYWxsZWQgd2l0aCBBbnN3ZXJcclxuICAgICAgaXRlbXMgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlLmdldEFuc3dlckluZm8odGhpcy5hbnN3ZXIpO1xyXG4gICAgICB0aGlzLmFuc3dlckltYWdlID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZS5nZXRNb29kSW1hZ2VGb3JJbmZvRGlhbG9nKHRoaXMuYW5zd2VyKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdHJ1Y3R1cmUpIHtcclxuICAgICAgLy8gQ2FzZSAyOiBjYWxsZWQgd2l0aCBTZWxlY3RvclN0cnVjdHVyZVxyXG4gICAgICBpdGVtcyA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvckNvbm5lY3RvclNlcnZpY2UuZ2V0U3RydWN0dXJlSW5mbyh0aGlzLnN0cnVjdHVyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29tbW9uIGNvbnRlbnQgYnVpbGRpbmcgbG9naWNcclxuICAgIGNvbnN0IGZvcm1hdHRlZDogc3RyaW5nID0gdGhpcy5fZm9ybWF0QW5zd2VySW5mbyhpdGVtcyk7XHJcbiAgICB0aGlzLmFuc3dlclRleHQgPSAvPFtePl0rPi8udGVzdChmb3JtYXR0ZWQpXHJcbiAgICAgID8gZm9ybWF0dGVkXHJcbiAgICAgIDogZm9ybWF0dGVkLnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xyXG5cclxuICAgIGlmICgvPGlmcmFtZXw8ZW1iZWQvaS50ZXN0KHRoaXMuYW5zd2VyVGV4dCkpIHtcclxuICAgICAgdGhpcy5hbnN3ZXJJbWFnZSA9ICcnO1xyXG4gICAgICB0aGlzLmhhc0VtYmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFuc3dlckh0bWwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hbnN3ZXJUZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1hdEFuc3dlckluZm8oaXRlbXM6IEFydGljbGVUZXh0W10pOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGV4dFBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGluY2x1ZGVzU2hvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBpbmNsdWRlc0xvbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgYXJ0aWNsZVRleHQgb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKCFhcnRpY2xlVGV4dC50ZXh0KSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzTmlsbChhcnRpY2xlVGV4dC5wdWJsaWNhdGlvbikgfHwgKChhcnRpY2xlVGV4dC5wdWJsaWNhdGlvbiAmIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5pbmZvUHVibGljYXRpb25Db2RlKSA+IDApKSB7XHJcbiAgICAgICAgY29uc3QgYm9keTogc3RyaW5nID0gYXJ0aWNsZVRleHQudGV4dC50cmltKCk7XHJcbiAgICAgICAgY29uc3QgbGFiZWw6IHN0cmluZyA9IGFydGljbGVUZXh0LmRlc2NyaXB0aW9uID8gYXJ0aWNsZVRleHQuZGVzY3JpcHRpb24udHJpbSgpIDogJyc7XHJcbiAgICAgICAgY29uc3QgdGV4dFB1YmxpY2F0aW9uOiBudW1iZXIgPSBhcnRpY2xlVGV4dC50ZXh0VHlwZTtcclxuICAgICAgICBjb25zdCBib2R5SGFzSHRtbDogYm9vbGVhbiA9IC88W14+XSs+Ly50ZXN0KGJvZHkpO1xyXG4gICAgICAgIGlmICgodGV4dFB1YmxpY2F0aW9uICYgUHVibGljYXRpb24uU2hvcnREZXNjcmlwdGlvbikgPiAwKSB7XHJcbiAgICAgICAgICBpbmNsdWRlc1Nob3J0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRleHRQYXJ0cy5wdXNoKGJvZHkgfHwgbGFiZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRleHRQdWJsaWNhdGlvbiAmIFB1YmxpY2F0aW9uLkRlc2NyaXB0aW9uKSA+IDApIHtcclxuICAgICAgICAgIGluY2x1ZGVzTG9uZyA9IHRydWU7XHJcbiAgICAgICAgICBpZiAobGFiZWwgJiYgYm9keSkge1xyXG4gICAgICAgICAgICB0ZXh0UGFydHMucHVzaChcclxuICAgICAgICAgICAgICBib2R5SGFzSHRtbCA/IGA8cCBjbGFzcz1cImluZm8taGVhZGluZ1wiPiR7bGFiZWx9PC9wPiR7Ym9keX1gIDogYCR7bGFiZWx9XFxuJHtib2R5fWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRleHRQYXJ0cy5wdXNoKGJvZHkgfHwgbGFiZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGluY2x1ZGVzU2hvcnQpIHtcclxuICAgICAgdGhpcy5zaG93VG9vbHRpcCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignXFxuXFxuLS0tXFxuXFxuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5jbHVkZXNMb25nKSB7XHJcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93VG9vbHRpcCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJ1xcblxcbi0tLVxcblxcbicpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93VG9vbHRpcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZTtcclxuICAgIHRoaXMubm90aGluZ1RvU2hvdy5lbWl0KCk7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==